<?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; scala</title> <atom:link href="http://blog.xebia.fr/tag/scala/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>Xebia accueille la 19ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2012/01/25/xebia-accueille-la-19eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2012/01/25/xebia-accueille-la-19eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Wed, 25 Jan 2012 05:38:52 +0000</pubDate> <dc:creator>David Galichet</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[akka]]></category> <category><![CDATA[Gatling]]></category> <category><![CDATA[Netty]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=10405</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu jeudi 26 Janvier à 19h30 dans les locaux de Xebia. À cette occasion, Stéphane Landelle nous présentera Gatling qui est un outil de stress test écrit en Scala et reposant sur les frameworks akka et Netty. En seconde partie, il nous donnera un retour d&#8217;expérience sur l&#8217;utilisation de Scala [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2012/01/scala-logo.png" style="border: 0px solid black; margin: 1em;" /></span></p><p>La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" rel="nofollow">Paris Scala User Group</a> aura lieu <b>jeudi 26 Janvier à 19h30</b> dans les locaux de <b>Xebia</b>.</p><p>À cette occasion, <a
href="https://github.com/slandelle" rel="nofollow">Stéphane Landelle</a> nous présentera <a
href="http://gatling-tool.org/" rel="nofollow">Gatling</a> qui est un outil de stress test écrit en <em>Scala</em> et reposant sur les frameworks <a
href="http://akka.io/" rel="nofollow">akka</a> et <a
href="http://www.jboss.org/netty" rel="nofollow">Netty</a>. En seconde partie, il nous donnera un retour d&#8217;expérience sur l&#8217;utilisation de Scala pour développer l&#8217;outil.</p><p>Il reste encore des places. Si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/2g7fazb4e6rem7n7" rel="nofollow">inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <b>Xebia</b><br
/> <b>156 boulevard Haussmann à Paris</b><br
/> <b>Immeuble A &#8211; 7e étage</b></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2012/01/25/xebia-accueille-la-19eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/</link> <comments>http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#comments</comments> <pubDate>Tue, 17 Jan 2012 05:39:54 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[BigData]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[JUG]]></category> <category><![CDATA[Redis]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[Spring Data]]></category> <category><![CDATA[Spring Integration]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=10296</guid> <description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Actualité éditeurs / SSII Spring Integration 2.1 (Par Bertrand Dechoux) Spring Data Redis 1.0.0 (Par Bertrand Dechoux &#38; Mathieu Bigorne) &#171;&#160;Big Data&#160;&#187; par Nathan Marz et Sam Ritchie est disponible en MEAP (Par Bertrand Dechoux) Scalding, une API Scala pour Cascading par Twitter (Par [...]]]></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 hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-SpringIntegration2.1">Spring Integration 2.1</a> <em>(Par <a
href="http://blog.xebia.fr/author/bdechoux/" rel="nofollow">Bertrand Dechoux</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-SpringDataRedis1.0.0">Spring Data Redis 1.0.0</a> <em>(Par <a
href="http://blog.xebia.fr/author/bdechoux/" rel="nofollow">Bertrand Dechoux</a> &amp; <a
href="https://twitter.com/#!/mbigorne" rel="nofollow">Mathieu Bigorne</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-%22BigData%22parNathanMarzetSamRitchieestdisponibleenMEAP">&laquo;&nbsp;Big Data&nbsp;&raquo; par Nathan Marz et Sam Ritchie est disponible en MEAP</a> <em>(Par <a
href="http://blog.xebia.fr/author/bdechoux/" rel="nofollow">Bertrand Dechoux</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Scalding%2CuneAPIScalapourCascadingparTwitter">Scalding, une API Scala pour Cascading par Twitter</a> <em>(Par <a
href="http://blog.xebia.fr/author/bdechoux/" rel="nofollow">Bertrand Dechoux</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Firefox10sortiraenversionESR">Firefox 10 sortira en version ESR</a> <em>(Par Benoit Lemoine)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Firebug1.9.0">Firebug 1.9.0</a> <em>(Par <a
href="http://blog.xebia.fr/author/bdechoux/" rel="nofollow">Bertrand Dechoux</a>)</em></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Seren%3ASerializationEnhancer">Seren : Serialization Enhancer</a> <em>(Par <a
href="https://twitter.com/#!/jeanhelou" rel="nofollow">Jean Helou</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Apologiedeslambdasdeblockspourjavascript">Apologie des lambdas de blocks pour javascript</a> <em>(Par <a
href="https://twitter.com/#!/jeanhelou" rel="nofollow">Jean Helou</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-Verbosit%C3%A9deslangagesdeprogrammation">Verbosité des langages de programmation</a> <em>(Par <a
href="http://blog.xebia.fr/author/omichallat/" rel="nofollow">Olivier Michallat</a>)</em></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/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-L%27artisanat%2Cunm%C3%A9tierd%27avenir">L&#8217;artisanat, un métier d&#8217;avenir</a> <em>(Par <a
href="http://blog.xebia.fr/author/xbucchiotty/" rel="nofollow">Xavier Bucchiotty</a>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/#Revuedepresse-UnesemainerichepourlesUserGroups">Une semaine riche pour les User Groups</a></li></ul><h3><a
name="Revuedepresse-Actualit%C3%A9%C3%A9diteurs%2FSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="Revuedepresse-SpringIntegration2.1"></a>Spring Integration 2.1</h4><p>Un an après la sortie en <a
href="http://blog.springsource.org/2010/11/23/spring-integration-2-0-ga-released" rel="nofollow">2.0</a>, <a
href="http://www.springsource.org/spring-integration" rel="nofollow">Spring Integration</a> est désormais disponible en version <a
href="http://blog.springsource.org/2012/01/09/spring-integration-2-1-is-now-ga" rel="nofollow">2.1</a>. On notera un <a
href="http://static.springsource.org/spring-integration/docs/2.1.x/reference/htmlsingle/#scripting" rel="nofollow">meilleur support des scripts</a> (Groovy, Ruby/JRuby, Python/Jython, et JavaScript) grâce à la <a
href="http://www.jcp.org/en/jsr/detail?id=223" rel="nofollow">JSR-223</a>. Il est ainsi possible de définir des &#8216;filters, splitters, routers, transformers&#8217; directement dans vos fichiers de configuration ou par l&#8217;intermédiaire de ressources, permettant de cette manière de recharger vos scripts à chaud. On notera également une meilleure intégration avec RabbitMQ/AMQP, GemFire, Redis et MongoDB.</p><h4><a
name="Revuedepresse-SpringDataRedis1.0.0"></a>Spring Data Redis 1.0.0</h4><p><a
href="http://www.springsource.org/spring-data/redis" rel="nofollow">Spring Data Redis</a> est sortie le mois dernier dans sa première version stable. Redis est une base de données clé-valeur avec d&#8217;excellentes performances qui peut stocker les types de données classiques (chaîne de caractères, liste, map &#8230;). Spring Data Redis fournit un niveau d&#8217;abstraction supplémentaire qui facilite l&#8217;interaction avec Redis. Cette version permet également d&#8217;utiliser Redis comme implémentation d&#8217;un cache via <a
href="http://static.springsource.org/spring-data/redis/docs/1.0.0.RELEASE/reference/redis.html#redis:support:cache-abstraction" rel="nofollow">l&#8217;abstraction de Spring</a>. Il s&#8217;agit de la première solution NoSql KeyValue supportée par <a
href="http://www.springsource.org/spring-data" rel="nofollow">Spring Data</a> mais <a
href="http://www.springsource.org/spring-data/riak" rel="nofollow">Riak</a> ne devrait pas se faire attendre longtemps.</p><h4><a
name="Revuedepresse-%22BigData%22parNathanMarzetSamRitchieestdisponibleenMEAP"></a>&laquo;&nbsp;Big Data&nbsp;&raquo; par Nathan Marz et Sam Ritchie est disponible en MEAP</h4><p>Big Data est un univers à part entière et rend non triviale la conception d&#8217;une architecture à la fois rapide (&laquo;&nbsp;temps réel&nbsp;&raquo;) et supportant de grandes volumétries. Deux ingénieurs de Twitter, Nathan Marz -créateur de <a
href="http://blog.xebia.fr/2011/11/07/storm-hadoop-map-reduce-en-temps-reel/" rel="nofollow">Storm</a>- et Sam Ritchie en dévoilent les principes dans <a
href="http://www.manning.com/marz/" rel="nofollow">&laquo;&nbsp;Big Data, Principles and best practices of scalable realtime data systems&nbsp;&raquo;</a>. Le livre n&#8217;est pour l&#8217;instant pas finalisé mais est disponible en MEAP (Manning Early Access Program). Le code bd50 vous permet de disposer d&#8217;une réduction de 50%.</p><h4><a
name="Revuedepresse-Scalding%2CuneAPIScalapourCascadingparTwitter"></a>Scalding, une API Scala pour Cascading par Twitter</h4><p><a
href="http://hadoop.apache.org/" rel="nofollow">Hadoop</a> est un acteur incontournable du BigData. Pour autant, peu vous vanteront la concision des traitements de données implémentés en se basant uniquement sur son API Java. De nombreuses solutions apparaissent pour combler ce manque. Certaines introduisent un nouveau langage comme <a
href="http://pig.apache.org/" rel="nofollow">Pig</a> et <a
href="http://hive.apache.org/" rel="nofollow">Hive</a>. D&#8217;autres proposent une API plus succincte, mais en gardant un langage complet, comme c&#8217;est le cas de <a
href="http://www.cascading.org/" rel="nofollow">Cascading</a>. Mecredi 11 Janvier, Twitter a rendu open source <a
href="https://dev.twitter.com/blog/scalding" rel="nofollow">Scalding</a>, son API Scala pour Cascading, simplifiant encore plus l&#8217;usage de MapReduce dans un environnement Scala. Pour les fans de Clojure, <a
href="https://github.com/nathanmarz/cascalog" rel="nofollow">Cascalog</a> est une solution similaire mais encore plus succincte. La version <a
href="http://groups.google.com/group/cascalog-user/browse_thread/thread/79e601af1ca9d3f1" rel="nofollow">1.8.5</a> est sortie le 4 Janvier.</p><h4><a
name="Revuedepresse-Firefox10sortiraenversionESR"></a>Firefox 10 sortira en version ESR</h4><p>La <a
href="http://blog.mozilla.com/blog/2012/01/10/delivering-a-mozilla-firefox-extended-support-release/" rel="nofollow">fondation Mozilla</a> a finalement décidé de maintenir 2 versions de Firefox en parallèle : la première suivra le cycle de livraison actuel (toutes les 6 semaines); alors que la seconde, plutôt à destination des entreprises, aura un cycle de livraison d&#8217;un an. Cette version ESR (Extended Support Release), dont Firefox 10 sera le premier représentant, sera maintenue avec les mises à jour de sécurité uniquement, le moteur de rendu et la gestion de plugin n&#8217;évoluant pas.</p><h4><a
name="Revuedepresse-Firebug1.9.0"></a>Firebug 1.9.0</h4><p>Pour les inconditionnels de Firefox, la <a
href="http://blog.getfirebug.com/2012/01/06/firebug-1-9-0" rel="nofollow">version 1.9.0 de Firebug</a> vient de sortir. On notera entre autres la possibilité de renvoyer les requêtes HTTP ou encore de visualiser les headers des réponses contenues dans le cache.</p><h3><a
name="Revuedepresse-Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="Revuedepresse-Seren%3ASerializationEnhancer"></a>Seren : Serialization Enhancer</h4><p><a
href="http://thecodersbreakfast.net/" rel="nofollow">Olivier Croisier</a> a annoncé cette semaine SEREN, une bibliothèque destinée à accélérer la sérialisation des objets en améliorant le traitement des wrappers numériques et des chaînes de caractères.<br
/> Prenant la forme d&#8217;un agent pour la JVM, SEREN peut s&#8217;utiliser sans modifier le code existant et peut être ajouté ou supprimé simplement en redémarrant la JVM.</p><p>Comme toute amélioration de performance, il s&#8217;agit d&#8217;un compromis: SEREN propose d&#8217;augmenter un peu la taille du flux binaire sérialisé en échange d&#8217;un gain de vitesse, un compromis que l&#8217;auteur recommande pour la sérialisation mémoire en citant EHCache. Il est possible de configurer les classes &laquo;&nbsp;améliorées&nbsp;&raquo; par SEREN au travers des fichiers de configuration et d&#8217;un mécanisme de filtre qui peut être étendu au besoin.</p><p>Retrouvez l&#8217;introduction de SEREN sur <a
href="http://thecodersbreakfast.net/index.php?post/2012/01/09/Introducing-Seren-the-serialization-speed-enhancer" rel="nofollow">son blog</a> et le code sur <a
href="https://github.com/oliviercroisier/seren" rel="nofollow">github</a>.</p><h4><a
name="Revuedepresse-Apologiedeslambdasdeblockspourjavascript"></a>Apologie des lambdas de blocks pour javascript</h4><p>Le working group ECMA, responsable de la définition du standard ECMAScript implémenté par javascript <a
href="http://wiki.ecmascript.org/doku.php?id=strawman:block_lambda_revival" rel="nofollow">envisage l&#8217;ajout de lambdas de blocks à javascript</a>, un ajout que <a
href="http://yehudakatz.com/" rel="nofollow">Yehuda Katz</a> défend dans un <a
href="http://yehudakatz.com/2012/01/10/javascript-needs-blocks/" rel="nofollow">article de blog</a> parfaitement illustré comparant ruby et javascript sur le terrain du <a
href="http://www.amazon.com/exec/obidos/ASIN/0137098731/wrrrldwideweb" rel="nofollow">principe de correspondance de Tennent</a>, des lambdas de fonctions et des lambdas de blocks.<br
/> Les exemples utilisés présentent des refactorings d&#8217;une forme canonique vers des formes idiomatiques dans les deux langages pour illustrer les principes mis en œuvre, une excellente introduction au sujet.</p><h4><a
name="Revuedepresse-Verbosit%C3%A9deslangagesdeprogrammation"></a>Verbosité des langages de programmation</h4><p>À l&#8217;heure où les comparaisons entre langages tournent souvent en guerres de clochers, <a
href="http://rethrick.com/#about" rel="nofollow">Dhanji R. Prasanna</a> (ancien employé de Google et membre du projet Guice) se livre à une analyse plus posée et réfléchie sur l&#8217;équilibre entre expressivité et lisibilité. Cet article se démarque par son pragmatisme, la pertinence des exemples choisis, et le recul évident de l&#8217;auteur sur un grand nombre de langages.</p><p>Lire <a
href="http://www.informit.com/articles/article.aspx?p=1824790" rel="nofollow">Languages, Verbosity, and Java</a>.</p><h3><a
name="Revuedepresse-Ev%C3%A9nementsdenotrecommunaut%C3%A9enFranceet%C3%A0l%27%C3%A9tranger"></a>Evénements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="Revuedepresse-L%27artisanat%2Cunm%C3%A9tierd%27avenir"></a>L&#8217;artisanat, un métier d&#8217;avenir</h4><p>Plusieurs réflexions ont lieu en ce moment au sein de la communauté pour définir ce qu&#8217;est le métier de développeur. On en a parlé lors du <a
href="http://www.parisjug.org/xwiki/bin/view/Meeting/20111011" rel="nofollow">Paris JUG d&#8217;Octobre 2011</a>. Le mouvement de fond associé est bien sûr celui du Software Craftsmanship. Nous mettons cette semaine en avant deux entrées de blog pour nous aider à avancer sur le sujet.<br
/> Le <a
href="http://qahatesyou.com/wordpress/2012/01/software-development-is-neither-art-nor-science/" rel="nofollow">premier</a> article postule que le développement informatique ne peut-être vu ni comme un art ni une science. Pour l&#8217;auteur de ce blog, au titre provocateur, notre métier n&#8217;est pas purement un art car <b>le produit fini fait quelque chose</b> ni totalement une science car <b>il n&#8217;y a pas de loi universelle sur le développement, il peut y avoir autant de réponse qu&#8217;il y a de développeurs</b>. On peut accepter ces arguments ou pas. Mais au delà du pur débat d&#8217;idées on se rend compte qu&#8217;il est difficile d&#8217;expliquer un métier si complexe à une personne extérieure.</p><p>L&#8217;auteur revient aussi sur le caractère unique des réalisations informatiques, et unique dans sa réalisation comme ses défauts. Il porte l&#8217;empreinte des personnes qui l&#8217;ont réalisé. Nous avons tous notre propre expérience sur des outils, des méthodes, des technologies, et nous expérimentons quelques fois de nouvelles façons de faire. Cela rend la manière de réaliser le travail éphémère et inscrite dans un contexte.<br
/> C&#8217;est peut-être cela la différence entre produire et écrire du code. Une vision &laquo;&nbsp;industrialiste&nbsp;&raquo; de la production du code induit une idée de volume, de quantitatif. La production serait le résultat d&#8217;un processus établi au résultat attendu, le développeur n&#8217;étant que l&#8217;élément interchangeable de transformation de la spécification à la réalisation.<br
/> L&#8217;autre vision s&#8217;attache plus à l&#8217;aspect qualitatif et humain. Le travail est confié à une personne et est un élément prépondérant dans la rédaction d&#8217;une solution au problème donné. L&#8217;auteur d&#8217;un travail d&#8217;écriture de code se voit assigné une ligne directrice, à lui ensuite de tracer le meilleur chemin.</p><p>Le <a
href="http://www.hiltmon.com/blog/2012/01/11/it-should-only-take-you-a-few-hours-dot-dot-dot/" rel="nofollow">second billet</a> revient sur l&#8217;importance de s&#8217;appuyer sur des personnes qui savent faire les choses. Créer une table de toutes pièces pour le commun des mortels ne semble pas compliqué. Un menuisier professionnel aura lui une toute autre vision de la réalisation. Il pensera à adapter au mieux son savoir-faire au besoin précis du client, anticipera bien plus de problèmes, choisira avec soin les outils et matériaux employés.<br
/> Nous sommes dans un contexte qui nous oblige à réduire le temps nécessaire pour mettre à disposition de nouvelles fonctionnalités. Comment alors expliquer à un utilisateur que le changement de formule de calcul d&#8217;un champ dans un rapport peut prendre plusieurs heures? Échangeons alors sur nos visions des choses. Si le client ne veut pas d&#8217;une table qui dure un siècle, il n&#8217;y a pas de raison de la fabriquer. Si par contre, il n&#8217;en a pas conscience, discutons ensemble pour trouver la meilleure façon de la réaliser. C&#8217;est en travaillant ensemble que le résultat sera celui attendu.</p><h4><a
name="Revuedepresse-UnesemainerichepourlesUserGroups"></a>Une semaine riche pour les User Groups</h4><p>Cette semaine est riche en événements proposés par les UG. Il y en aura pour tous les goûts.</p><p>Ce soir, mardi 17 :</p><ul><li>Le <a
href="http://www.lyonjug.org/" rel="nofollow">Lyon JUG</a> propose une soirée <a
href="http://www.lyonjug.org/evenements/perf-serveur" rel="nofollow">Performance des serveurs en Java</a> animée par <a
href="https://twitter.com/#!/ludomp" rel="nofollow">Ludovic Poitou</a>.</li><li>Le <a
href="http://www.normandyjug.org/" rel="nofollow">Normandie JUG</a> propose une <a
href="http://www.normandyjug.org/2012/01/09/soiree-annotation-avec-olivier-croisier-2/" rel="nofollow">soirée Annotation</a> animée par <a
href="https://twitter.com/#!/oliviercroisier" rel="nofollow">Olivier Croisier</a>.</li></ul><p>Le mercredi 18, <a
href="http://www.alpesjug.org/" rel="nofollow">l&#8217;Alpes JUG</a> propose une soirée <a
href="http://www.jugevents.org/jugevents/event/show.html?id=43468" rel="nofollow">Objectif Cloud</a> avec <a
href="https://twitter.com/#!/paulsandoz" rel="nofollow">Paul Sandoz</a> et <a
href="https://twitter.com/#!/ndeloof" rel="nofollow">Nicolas De Loof</a>.</p><p>Le jeudi 19 :</p><ul><li>Le <a
href="http://www.meetup.com/Paris-Groovy-Grails/" rel="nofollow">Paris Groovy and Grails User Group</a> accueille<a
href="https://it.twitter.com/#!/CedricChampeau" rel="nofollow">Cédric Champeau</a> sur le thème <a
href="http://www.meetup.com/Paris-Groovy-Grails/events/45108892/" rel="nofollow">Groovy 2.0 : un pas vers le typage statique</a>.</li><li>Le <a
href="http://toulousejug.org/" rel="nofollow">Toulouse JUG</a> organise une <a
href="http://toulousejug.org/2012/01/05/soiree-grails-le-1901-a-lepitech/" rel="nofollow">soirée Grails</a> animée par <a
href="https://twitter.com/#!/chipeau" rel="nofollow">Vincent Barrier</a> et <a
href="http://www.linkedin.com/pub/franck-silvestre/22/737/107" rel="nofollow">Franck Silvestre</a>.</li><li>Le <a
href="http://www.meetup.com/Android-Paris/" rel="nofollow">Paris Android User Group</a> propose une <a
href="http://www.meetup.com/Android-Paris/events/46922312/" rel="nofollow">conférence sur Ice Cream Sandwich</a> animée par <a
href="http://leo.cacheux.net/" rel="nofollow">Léo Cacheux</a> et <a
href="https://twitter.com/#!/madCdan" rel="nofollow">Daniel Fages</a>.</li><li>Le <a
href="http://bordeauxjug.org/" rel="nofollow">Bordeaux JUG</a> accueilleura <a
href="https://twitter.com/#!/rmat0n" rel="nofollow">Romain Maton</a> pour une soirée <a
href="http://bordeauxjug.org/20120119_Optimisez_votre_site_mobile" rel="nofollow">Optimisez votre site web sur mobile</a>.</li><li>Le <a
href="http://www.marsjug.org/" rel="nofollow">Mars JUG</a> propose une <a
href="http://www.jugevents.org/jugevents/event/show.html?id=43373" rel="nofollow">soirée EclipseLink</a> animée par <a
href="https://twitter.com/#!/shaunmsmith" rel="nofollow">Shaun Smith</a>.</li></ul><p>Pour vous tenir à jour, suivez le <a
href="https://sites.google.com/site/duchessfr/calendrier-conferences" rel="nofollow">calendrier de conférences maintenu par Duchess France</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2012/01/17/revue-de-presse-xebia-2012-03/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Scala &#8211; jouer avec le pattern matching</title><link>http://blog.xebia.fr/2012/01/11/scala-jouer-avec-le-pattern-matching/</link> <comments>http://blog.xebia.fr/2012/01/11/scala-jouer-avec-le-pattern-matching/#comments</comments> <pubDate>Wed, 11 Jan 2012 05:47:56 +0000</pubDate> <dc:creator>François Sarradin</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=10242</guid> <description><![CDATA[Combien de fois vous êtes vous senti engoncé dans votre frustration parce que vous étiez incapable d’utiliser des chaînes de caractères dans vos switch-case ? À défaut de pouvoir utiliser Java 7, une telle possibilité serait très utile pour par exemple traiter les arguments de votre application, pour analyser un fichier ou le contenu d’une [...]]]></description> <content:encoded><![CDATA[<p>Combien de fois vous êtes vous senti engoncé dans votre frustration parce que vous étiez incapable d’utiliser des chaînes de caractères dans vos <em>switch-case</em> ? À défaut de pouvoir utiliser Java 7, une telle possibilité serait très utile pour par exemple traiter les arguments de votre application, pour analyser un fichier ou le contenu d’une chaîne. En fait, pour y arriver, vous devez écrire une série de <em>if-else-if</em>. Mais vous pourriez aussi utiliser une table de hachage, où les clés sont les chaînes de caractères et les valeurs sont les traitements réifiés par des <em>Runnable</em>, des <em>Callable</em> ou des <em>Function</em> de Guava.</p><p>Si le <em>switch-case</em> acceptant des chaînes de caractères est pour vous une chouette invention, le <b>pattern matching</b> de Scala nous indique que ce n’est pas suffisant ! En effet, il y a d’autres cas où une série de <em>if-else_if-else_if&#8230;</em> serait sympathiquement transformée en une sorte de structure plus ou moins équivalente au <em>switch-case</em>. Par exemple, ce serait bien de pouvoir simplifier une série de compositions entre des <em>instanceof</em> et des <em>class cast</em> enfermés dans cette série de <em>if-else_if-&#8230;</em> en vue de réaliser des traitements spécifiques selon le type d’un paramètre (en attendant le <a
href="http://en.wikipedia.org/wiki/Multiple_dispatch" rel="nofollow">multi-méthode</a>).</p><p>Dans cet article, nous allons voir ce que peut apporter le pattern matching de Scala dans différents cas.</p><p>Note : le pattern matching tel qu’il apparaît dans le langage Scala n’est pas nouveau. Cette caractéristique existe déjà dans des langages comme OCaml et Haskell. On le retrouve aussi dans des dialectes de Lisp. Prolog propose aussi une sorte de pattern matching, mais celui-ci utilise en fait un mécanisme assez différent (on parle d’<em>unification</em> dans ce cas).</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Approcheclassique"></a>Approche classique</h3><p>Le pattern matching de Scala possède un cas d’utilisation qui est similaire aux <em>switch-case</em> de Java et de C : chaque entrée se base sur un entier ou tout autre scalaire. Voici un exemple :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def toYesOrNo(choice: Int): String = choice match {
  case 1 =&gt; &quot;yes&quot;
  case 0 =&gt; &quot;no&quot;
  case _ =&gt; &quot;error&quot;
}
</pre><p>Si vous appelez <em>toYesOrNo(1)</em>, Scala répond <code>"yes"</code>. Et si vous entrez <em>toYesOrNo(2)</em>, Scala répond <code>"error"</code>. Ici, le symbole _ est utilisé pour indiquer le cas par défaut. On peut remarquer que nous n’utilisons pas l’instruction <em>break</em>. Cette instruction est d’une certaine manière implicite.</p><p>Maintenant, si vous souhaitez que la fonction réponde <code>"yes"</code> non seulement pour la valeur 1, mais aussi pour les valeurs 2 et 3, on écrira :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def toYesOrNo(choice: Int): String = choice match {
  case 1 | 2 | 3 =&gt; &quot;yes&quot;
  case 0 =&gt; &quot;no&quot;
  case _ =&gt; &quot;error&quot;
}
</pre><p>Jusque là, rien de vraiment nouveau.</p><p>Utilisons des chaînes de caractères en entrée, comme le permet Java 7. Utiliser des chaînes est intéressant par exemple lorsque vous devez analyser les arguments passés à votre programme :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def parseArgument(arg: String) = arg match {
  case &quot;-h&quot; | &quot;--help&quot;    =&gt; displayHelp
  case &quot;-v&quot; | &quot;--version&quot; =&gt; displayVerion
  case whatever =&gt; unknownArgument(whatever)
}
</pre><p>Si vous entrez <code>parseArgument("-h")</code> ou <code>parseArgument("--help")</code>, Scala appellera la fonction <code>displayHelp</code>. Et si vous entrez <code>parseArgument("hein?")</code>, Scala appellera la fonction <code>unknownArgument("hein?")</code>. Dans la fonction <code>parseArgument</code>, nous n’avons pas utilisé &#8216;_&#8217; pour le cas par défaut. En fait, lorsque le cas par défaut est utilisé, contrairement aux fonctions précédentes, on a la possibilité de lui donner un nom.</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Patterntyp%C3%A9"></a>Pattern typé</h3><p>Parfois en Java, vous devez faire face à une variable déclarée en tant que <em>Object</em> ou toute autre interface ou classe de haut niveau. Malheureusement, après avoir vérifié que la variable n’est pas nulle, vous devez en plus utiliser une série de <em>if-else</em> incluant des tests avec <em>instanceof</em> et <em>cast</em>. Tout ça dans le but de vérifier la classe ou l’interface d’une instance, avant de l’utiliser et de la traiter comme il se doit. C’est le cas, par exemple, lorsque vous devez redéfinir la méthode <em>equals()</em> en Java.</p><p>Voici comment Scala voit la chose :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def f(x: Any): String = x match {
  case i:Int =&gt; &quot;integer: &quot; + i
  case _:Double =&gt; &quot;a double&quot;
  case s:String =&gt; &quot;I want to say &quot; + s
}
</pre><p>On obtient alors les résultats suivants :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
f(1) → &quot;integer: 1&quot;
f(1.0) → &quot;a double&quot;
f(&quot;hello&quot;) → &quot;I want to say hello&quot;
</pre><p>N’est-ce pas mieux qu’une succession de <em>if+instanceof+cast</em> ?</p><p>Ce type de pattern matching est utile pour traverser une structure utilisant le design pattern composite. Par exemple, vous pouvez l’utiliser pour explorer plus aisément le DOM d’un document XML ou le modèle objet d’un message JSON.</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Approchefonctionnelledupatternmatching"></a>Approche fonctionnelle du pattern matching</h3><p>Une particularité d’une telle structure, c’est qu’elle offre une approche alternative pour écrire des fonctions. Par exemple, considérons la fonction factorielle. Si nous choisissons la version récursive, habituellement nous la définirions ainsi :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def fact(n: Int): Int =
  if (n == 0) 1
  else n * fact(n - 1)
</pre><p>Mais, on peut aussi utiliser le pattern matching de Scala dans ce cas :</p><pre class="brush: java; gutter: true; title: ; notranslate">
def fact(n: Int): Int = n match {
  case 0 =&gt; 1
  case n =&gt; n * fact(n - 1)
}
</pre><p>Notez l’utilisation de la variable <em>n</em> ci-dessus. Elle est mise en correspondance avec toutes les valeurs qui n’apparaissent pas dans les cas précédents. Il faut comprendre que le <em>n</em> du dernier cas n’est pas le même que celui utilisé dans la signature de la fonction. Si vous voulez utiliser directement le paramètre <em>n</em> et non pas une autre variable du même nom, vous devez délimiter le nom de la variable par des guillemets inversés dans la déclaration du case, comme ceci : <code>`n`</code></p><p>Sinon, voici un moyen simple de définir la fonction factorielle en Scala :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def fact(n) = (1 to n).foldLeft(1) { _ * _ }
</pre><p>Où foldLeft est une opération visant à &laquo;&nbsp;réduire&nbsp;&raquo; une collection par rapport à une fonction et <code>{ _ * _ }</code> est une fonction anonyme qui équivaut à <code>{ case (x: Int, y: Int) =&gt; x * y }</code>, autrement dit une fonction qui prend deux entiers et effectue la multiplication de ces deux entiers.</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Patternmatchingetcollection%3Al%E2%80%99approchepar%22similarit%C3%A9%22"></a>Pattern matching et collection : l’approche par &laquo;&nbsp;similarité&nbsp;&raquo;</h3><p>Le pattern matching peut être appliqué aux collections. Ci-dessous, vous avez une fonction qui calcule la longueur d’une liste sans pattern matching :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def length[A](list: List[A]): Int = {
  if (list.isEmpty) 0
  else 1 + length(list.tail)
}
</pre><p>Maintenant, voici la même fonction avec le pattern matching :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def length[A](list: List[A]): Int = list match {
  case Nil =&gt; 0
  case _ :: tail =&gt; 1 + length(tail)
}
</pre><p>Dans cette fonction, il y a deux cas (ou plutôt deux <em>case</em>). Le premier vérifie si la liste est vide grâce à la valeur <code>Nil</code>. Le second vérifie si il y a au moins un élément dans la liste. La notation <code>_::tail</code> doit être interprétée comme « une liste ayant au moins un élément, sachant qu’on ne s’intéresse qu’au reste de la liste qui est représenté par la variable <em>tail</em> ». Ici, le reste peut être <em>Nil</em> (ie. la liste vide) ou n’importe quelle liste non vide.</p><p>On peut utiliser cette approche par similarité avec des tuples afin d’améliorer la méthode <em>parserArgument</em> vue auparavant :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def parseArgument(arg : String, value: Any) = (arg, value) match {
  case (&quot;-l&quot;, lang) =&gt; setLanguageTo(lang)
  case (&quot;-o&quot; | &quot;--optim&quot;, n : Int) if ((0 &lt; n) &amp;&amp; (n &lt;= 5))
    =&gt; setOptimizationLevelTo(n)
  case (&quot;-o&quot; | &quot;--optim&quot;, badLevel) =&gt; badOptimizationLevel(badLevel)
  case (&quot;-h&quot; | &quot;--help&quot;, _) =&gt; displayHelp()
  case bad =&gt; badArgument(bad)
}
</pre><p>Notez en premier lieu l’utilisation de l’opérateur | qui permet de mettre en correspondance des formes alternatives de <em>arg</em> au sein d’un tuple. Notez aussi l’utilisation de deux patterns pour les options <code>-o</code> et <code>--optim</code>. Ces patterns se distinguent par l’utilisation d’un prédicat qu’on appelle une garde. Une garde vous permet d’affiner vos <em>case</em> lorsque le pattern ne suffit pas.</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-PatternMatchingavanc%C3%A9%3Acaseclass"></a>Pattern Matching avancé : case class</h3><p>Les <b>case classes</b> sont des classes dont une partie du comportement est prédéfinie afin de faciliter leur construction et leur utilisation dans des patterns. Les cases classes vous permettent de manipuler des symboles paramétrés, provenant par exemple de l’analyse d’un compilateur ou de votre DSL interne.</p><p>L’exemple ci-dessous montre comment utiliser les case classes et le pattern matching afin de représenter simplement des expressions mathématiques, de les évaluer et d’en calculer la dérivée. Commençons par définir les symboles que nous utiliserons : la variable X, la constante, l’addition, la multiplication et la négation (pour le fun !). Ici, <em>sealed</em> signifie qu’aucune classe fille de <em>Expression</em> n’apparaîtra en dehors de l’espace de nom courant.</p><pre class="brush: scala; gutter: true; title: ; notranslate">
sealed abstract class Expression
case object X extends Expression
case class Const(value: Int) extends Expression
case class Add(left: Expression, right: Expression) extends Expression
case class Mult(left: Expression, right: Expression) extends Expression
case class Neg(expr: Expression) extends Expression
</pre><p>Maintenant, définissons une fonction qui évalue une expression avec une valeur donnée pour la variable X, en utilisant le pattern matching.</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def eval(expression: Expression, xValue: Int): Int = expression match {
  case X =&gt; xValue
  case Const(cst) =&gt; cst
  case Add(left, right) =&gt; eval(left, xValue) + eval(right, xValue)
  case Mult(left, right) =&gt; eval(left, xValue) * eval(right, xValue)
  case Neg(expr) =&gt; - eval(expr, xValue)
}
</pre><p>Essayons la fonction <em>eval</em> :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
// 1 + 2 * X*X
val expr = Add(Const(1), Mult(Const(2), Mult(X, X)))
assert(eval(expr, 3) == 19)
</pre><p>Maintenant, définissons une fonction qui calcule la dérivée (non réduite) par rapport à X d’une expression :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
def deriv(expression: Expression): Expression = expression match {
  case X =&gt; Const(1)
  case Const(_) =&gt; Const(0)
  case Add(left, right) =&gt; Add(deriv(left), deriv(right))
  case Mult(left, right) =&gt; Add(Mult(deriv(left), right), Mult(left, deriv(right)))
  case Neg(expr) =&gt; Neg(deriv(expr))
}
</pre><p>Essayons notre fonction <em>deriv</em> :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
val df = deriv(expr)
</pre><p>Voici à quoi ressemble <em>df</em> :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
Add(Const(0),
  Add(Mult(Const(0),Mult(X,X)),
    Mult(Const(2),
      Add(Mult(Const(1),X),
        Mult(X,Const(1))))))
// = 0 + (0 * X*X + 2 * (1*X + X*1)) = 4 * X
</pre><p>Et en utilisant les deux fonctions conjointement :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
assert(eval(df, 3), 12)
</pre><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Autresutilisationsavanc%C3%A9esdupatternmatching"></a>Autres utilisations avancées du pattern matching</h3><p>Il y a d’autres notations particulières utilisables dans le pattern matching de Scala. Scala permet ainsi de déclarer des alias sur tout ou partie d’un pattern qui pourront être exploités par la suite. L’alias doit apparaître avant le pattern séparé d’un @. Par exemple, dans l’expression <code>address @ Address(_, _, "Paris", "France")</code>, nous acceptons dans <em>address</em> toutes les adresses en France à Paris, mais peu importe la rue et le numéro.</p><p>Il y a une notation spécifique pour faire correspondre des séquences avec _*. Cette notation prend en compte zéro élément, un élément ou plus dans une séquence.</p><p>En Scala, le pattern matching n’apparaît pas seulement après la fonction <em>match</em>. Vous pouvez utiliser le pattern matching pour les paramètres de closures et dans les blocs <em>catch</em>.</p><p>Il est possible aussi de personnaliser le comportement du pattern matching au moyen des <em><a
href="http://www.scala-lang.org/node/112" rel="nofollow">extractor</a></em>. Pour cela, vous devez définir la méthode <em>unapply</em> (et/ou <em>unapplySeq</em> pour une séquence) au niveau des objets que vous utiliserez dans les pattern matching.</p><h3><a
name="DRAFT-Scala-joueraveclepatternmatching-Conclusion"></a>Conclusion</h3><p>Dans cet article, nous avons vu différentes manières d’utiliser le pattern matching de Scala. Le principal avantage de cet outil est de fournir une manière simple de construire des structures alternatives basées sur la mise en correspondance de valeurs scalaires, de chaînes de caractères, de collections, mais aussi de symboles paramétrés et de types. Pour moi, le pattern matching est l’une des alternatives les plus sexy à la structure <em>if</em> ! Une bonne utilisation du pattern matching peut rendre votre programme plus lisible et vous aider à mettre en oeuvre un DSL interne.</p><p><em>Cet article est une traduction libre, faite avec l’autorisation de l’auteur, de «</em> <em><a
href="http://kerflyn.wordpress.com/2011/02/14/playing-with-scalas-pattern-matching/" rel="nofollow">Playing with Scala’s pattern matching</a></em> <em>» publié par François Sarradin le 14/02/2011 sur</em> <em><a
href="http://kerflyn.wordpress.com/" rel="nofollow">http://kerflyn.wordpress.com/</a></em><em>.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2012/01/11/scala-jouer-avec-le-pattern-matching/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/</link> <comments>http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#comments</comments> <pubDate>Tue, 10 Jan 2012 05:49:57 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[CouchBase]]></category> <category><![CDATA[CouchDB]]></category> <category><![CDATA[Duchess]]></category> <category><![CDATA[Infinitest]]></category> <category><![CDATA[Paris JUG]]></category> <category><![CDATA[Paris Software Craftsmanship Community]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Sécurité]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=10225</guid> <description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Le coin de la technique Infinitest supporte scala CouchBase et CouchDB (par Xavier Bucchiotty) Alerte de sécurité sur la quasi totalité des serveurs web (par Pierre Laporte) Evénements de notre communauté en France et à l&#8217;étranger Lancement de la communauté Software Craftsmanship de Toulouse [...]]]></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 hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#Infinitestsupportescala">Infinitest supporte scala</a></li><li><a
href="http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#CouchBaseetCouchDB">CouchBase et CouchDB</a> <em>(par</em> <em><a
href="http://blog.xebia.fr/author/xbucchiotty/" rel="nofollow">Xavier Bucchiotty</a></em><em>)</em></li><li><a
href="http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#Alertedes%C3%A9curit%C3%A9surlaquasitotalit%C3%A9desserveursweb">Alerte de sécurité sur la quasi totalité des serveurs web</a> <em>(par</em> <em><a
href="https://twitter.com/#!/pingtimeout" rel="nofollow">Pierre Laporte</a></em><em>)</em></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/2012/01/10/revue-de-presse-xebia-2012-02/#Lancementdelacommunaut%C3%A9SoftwareCraftsmanshipdeToulouse">Lancement de la communauté Software Craftsmanship de Toulouse</a></li><li><a
href="http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#Cesoir%2C10janvier%2CParisJUGDevOpsetAvantJUGdesDuchess">Ce soir, 10 janvier, Paris JUG DevOps et Avant JUG des Duchess</a></li><li><a
href="http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/#IntroductionauxDSLenGroovyauNantesJUGlejeudi12janvier">Introduction aux DSL en Groovy au Nantes JUG le jeudi 12 janvier</a></li></ul><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="Infinitestsupportescala"></a>Infinitest supporte scala</h4><p>Les dernières versions d&#8217;infinitest apportent des corrections pour intellij IDEA 11 et le support des projets Scala. Infinitest est <a
href="http://infinitest.github.com/" rel="nofollow">disponible sur github</a>.</p><h4><a
name="CouchBaseetCouchDB"></a>CouchBase et CouchDB</h4><p><a
href="http://damienkatz.net/2009/12/about_me.html" rel="nofollow">Damien Katz</a> est un des fondateurs du projet <a
href="http://couchdb.apache.org/" rel="nofollow">Apache CouchDB</a>. CouchDB fait partie de l&#8217;univers NoSQL, écrit en Erlang, orienté &#8216;document&#8217; avec des API basées sur Javascript et JSON. Dans <a
href="http://damienkatz.net/2012/01/the_future_of_couchdb.html" rel="nofollow">son blog</a>, il indique qu&#8217;une grande partie de l&#8217;équipe ainsi que lui-même quittent le projet pour fonder <a
href="http://www.couchbase.com/products-and-services/overview" rel="nofollow">Couchbase Server</a>, le successeur.<br
/> Ce changement signifie aussi que les produits Couchbase ne seront plus sous licence Apache. Damien Katz ne dénigre pas cette fondation, à qui le succès de CouchDB est intimement lié. Les produits CouchBase sont payants, et selon Damien Katz, l&#8217;approche par consensus des développeurs, si chère à Apache, est un frein à la compétitivité du produit.<br
/> Cette approche permet donc à l&#8217;équipe de servir au mieux ses clients avec une plus grande réactivité. Il assure cependant que l&#8217;équipe continue de contribuer à CouchDB qui se porte plutôt bien. Son but actuel est de porter la version 2.0 de CouchBase avec un portage d&#8217;une partie du code d&#8217;Erlang vers C/C++.<br
/> Affaire à suivre.</p><h4><a
name="Alertedes%C3%A9curit%C3%A9surlaquasitotalit%C3%A9desserveursweb"></a>Alerte de sécurité sur la quasi totalité des serveurs web</h4><p>Deux chercheurs en sécurité, Alexander Klink et Julian Wälde, ont relevé une faille de sécurité algorithmique dans la plupart des serveurs web du marché. Sont concernées, les plateformes Java, Python, Ruby, PHP, Node.JS et ASP.NET.</p><p>La vulnérabilité détectée est de type <a
href="http://perl.enstimac.fr/DocFr/perlsec.html#attaques par complexité algorithmique" rel="nofollow">attaque par complexité algorithmique</a>. Elle consiste à rechercher le pire scénario possible dans l’implémentation d’une fonctionnalité. Ici, les <a
href="http://en.wikipedia.org/wiki/Hash_table" rel="nofollow">hash tables</a> sont la cible de l’attaque.</p><p>Le principe est le suivant : lorsqu’un serveur reçoit une requête http qui contient n paramètres, il crée un tableau associatif avec pour clé, le nom du paramètre, et pour valeur, l’ensemble des valeurs reçues. La hash table résultante utilise le hachage du nom du paramètre pour déterminer son emplacement.</p><p>Dans le meilleur des cas, c&#8217;est-à-dire lorsqu’il n’existe pas deux paramètres ayant le même hachage, l’insertion d’un élément se fait en temps constant (en O( 1 )). Dans le pire des cas, elle se fait en temps linéaire (en O( n )).</p><p>Mais revenons à notre attaque. Il suffit de construire une requête HTTP avec un grand nombre de paramètres ayant tous le même hachage. Le serveur sera contraint de passer systématiquement par le pire des cas possibles pour l’insertion dans sa hash table. En prenant n paramètres, on arrive à une complexité de n(O( n )), c&#8217;est-à-dire O( n² ), la complexité quadratique. Il est donc possible de bloquer le CPU d’un serveur à 100% d’utilisation pendant plusieurs minutes.</p><p>A l’heure actuelle, certains serveurs ont été mis à jour pour limiter le nombre de paramètres HTTP pouvant être reçus par un serveur (1&#8217;000 pour <a
href="http://technet.microsoft.com/en-us/security/bulletin/ms11-100.mspx" rel="nofollow">ASP.NET</a>, 10&#8217;000 pour <a
href="http://www.kb.cert.org/vuls/id/DWAN-8PYMUS" rel="nofollow">Tomcat</a>, valeur non connue pour <a
href="http://www.php.net/archive/2011.php#id2011-12-25-1" rel="nofollow">PHP</a>). La vulnérabilité n’est donc pas totalement corrigée mais ses effets sont considérablement réduits. La correction complète impliquerait de rendre aléatoire le hachage des chaînes de caractères selon les plateformes par l’inclusion d’un seed. De ce fait, il ne serait plus possible de construire de telles collisions.</p><p>Notons qu’une correction est également en cours pour <a
href="http://www.securitytracker.com/id/1026476" rel="nofollow">Glassfish</a> et sera mise à disposition avec le prochain patch de sécurité.</p><h3><a
name="Ev%C3%A9nementsdenotrecommunaut%C3%A9enFranceet%C3%A0l%27%C3%A9tranger"></a>Evénements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="Lancementdelacommunaut%C3%A9SoftwareCraftsmanshipdeToulouse"></a>Lancement de la communauté Software Craftsmanship de Toulouse</h4><p>La semaine dernière, <a
href="http://antoine.vernois.net/dotclear" rel="nofollow">Antoine Vernois</a> et <a
href="https://twitter.com/#!/thierrycros" rel="nofollow">Thierry Cros</a> ont organisé à Toulouse une réunion autour du Software Craftsmanship qui a réuni 15 personnes. Cette réunion marque le lancement de la <a
href="http://groups.google.com/group/software-craftsmanship-toulouse?pli=1" rel="nofollow">communauté Software Craftsmanship de Toulouse et de ses environs</a>.<br
/> Un premier événement est <a
href="http://www.doodle.com/fmaump9exenmypmz" rel="nofollow">en cours de planification</a> : Un <b>coding dojo au format randori</b>.<br
/> Vous trouverez plus de détails sur le blog d’Antoine : <a
href="http://antoine.vernois.net/dotclear/index.php?post/2012/01/09/Software-Craftsmanship-%C3%A0-Toulouse" rel="nofollow">La communauté Software Craftsmanship à Toulouse</a>.</p><h4><a
name="Cesoir%2C10janvier%2CParisJUGDevOpsetAvantJUGdesDuchess"></a>Ce soir, 10 janvier, Paris JUG DevOps et Avant JUG des Duchess</h4><p>Ce soir, le <a
href="http://parisjug.org/xwiki/bin/view/Meeting/20120110" rel="nofollow">premier Paris JUG de l’année</a> sera consacré à <a
href="http://blog.xebia.fr/tag/devops/" rel="nofollow">DevOps</a> avec une session <b>Packaging natif</b> par <a
href="http://parisjug.org/xwiki/bin/view/Speaker/GomezHenri" rel="nofollow">Henri Gomez</a> et une session <b>Puppet</b> par <a
href="http://parisjug.org/xwiki/bin/view/Speaker/SanchezCarlos" rel="nofollow">Carlos Sanchez</a>.<br
/> Les <a
href="http://jduchess.org/duchess-france/" rel="nofollow">Duchess</a> reprennent également les bonnes habitudes avec le <a
href="http://jduchess.org/duchess-france/blog/avant-jug-2012-01/" rel="nofollow">premier Avant JUG de l’année</a>.</p><h4><a
name="IntroductionauxDSLenGroovyauNantesJUGlejeudi12janvier"></a>Introduction aux DSL en Groovy au Nantes JUG le jeudi 12 janvier</h4><p>Le <a
href="https://sites.google.com/site/nantesjug/Home" rel="nofollow">Nantes JUG</a> commence l’année 2012 ce jeudi 12 avec une soirée <b>Introduction aux DSL (Domain Specific Languages) en Groovy</b> présentée par <a
href="https://twitter.com/#!/CedricChampeau" rel="nofollow">Cédric Champeau</a>, senior software developer chez <a
href="http://www.springsource.com/fr" rel="nofollow">SpringSource</a>.<br
/> <a
href="http://jugevents.org/jugevents/event/43326" rel="nofollow">Les inscriptions sont ouvertes sur JUG Events</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2012/01/10/revue-de-presse-xebia-2012-02/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>2 Février : Xebia accueille le CEO de 10Gen pour un Mongo Day</title><link>http://blog.xebia.fr/2012/01/04/2-fevrier-xebia-accueille-le-ceo-de-10gen-pour-un-mongo-day/</link> <comments>http://blog.xebia.fr/2012/01/04/2-fevrier-xebia-accueille-le-ceo-de-10gen-pour-un-mongo-day/#comments</comments> <pubDate>Wed, 04 Jan 2012 08:17:36 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Cloud / NoSQL]]></category> <category><![CDATA[10gen]]></category> <category><![CDATA[Grails]]></category> <category><![CDATA[java]]></category> <category><![CDATA[MongoDB]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[Play!]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=10188</guid> <description><![CDATA[Xebia a le plaisir d&#8217;organiser un Paris Mongo Day avec Dwight Merriman et 10gen le 2 Février ! 09h30 &#8211; 11h30 : Rencontrez Dwight Merriman, CEO de 10Gen Venez rencontrer le CEO d&#8217;une des startups les plus en vue du monde NoSQL. 09h30 &#8211; 11h00 : présentation de l&#8217;univers NoSQL par Dwight Merriman, suivie d&#8217;une [...]]]></description> <content:encoded><![CDATA[<p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2012/01/mongodb-10gen.png" style="border: 0px solid black" /></span></p><p>Xebia a le plaisir d&#8217;organiser un Paris Mongo Day avec <a
href="http://www.10gen.com/team" rel="nofollow">Dwight Merriman</a> et <a
href="http://www.10gen.com/" rel="nofollow">10gen</a> le 2 Février !</p><h3><a
name="DRAFT-2F%C3%A9vrier-XebiaaccueilleleCEOde10GenpourunMongoDay%21-09h3011h30%3ARencontrezDwightMerriman%2CCEOde10Gen"></a>09h30 &#8211; 11h30 : Rencontrez Dwight Merriman, CEO de 10Gen</h3><p><img
src="http://blog.xebia.fr/wp-content/uploads/2012/01/team-dwight-merriman.jpg" style="border: 0px solid black; margin: 1em 1em 1em 1em; float: right;" /></p><p>Venez rencontrer le CEO d&#8217;une des startups les plus en vue du monde NoSQL.</p><ul><li>09h30 &#8211; 11h00 : présentation de l&#8217;univers NoSQL par <a
href="https://twitter.com/#!/dmerr" rel="nofollow">Dwight Merriman</a>, suivie d&#8217;une session de questions/réponses avec l&#8217;auditoire préparée et modérée par <a
href="http://blog.xebia.fr/author/jlmorlhon/" rel="nofollow">Jean-Laurent de Morlhon</a>.</li><li>11h00 &#8211; 11h30 : petit déjeuner pour faire connaissance avec l&#8217;équipe 10gen.</li></ul><p><em>Inscriptions pour la rencontre avec Dwight Merriman de 9h30 à 11h30 </em><em><a
href="http://www.10gen.com/events/meet-the-ceo---dwight-merriman-ceo-and-co-founder-of-mongodb" rel="nofollow">ici</a></em><em>.</em></p><h3><a
name="DRAFT-2F%C3%A9vrier-XebiaaccueilleleCEOde10GenpourunMongoDay%21-11h3018h00%3AMongoDBdud%C3%A9v%C3%A0laprod"></a>11h30 &#8211; 18h00 : Mongo DB du dév à la prod</h3><p>De 11h30 à 18h30, 2 tracks MongoDB en parallèle autour du développement, de l&#8217;exploitation et des retours d&#8217;expérience <em>(</em><em>)</em>.</p><ul><li><b>MONGO</b> <em>(track commune)</em><ul><li>La roadmap de MongoDB par <a
href="https://twitter.com/#!/dmerr" rel="nofollow">Dwight Merriman</a>, CEO de 10gen.</li><li>Les internes de MongoDB par 10gen.</li></ul></li></ul><ul><li><b>DEV</b><ul><li>MongoDB en <b>Java</b> par <a
href="http://blog.xebia.fr/author/karesti/" rel="nofollow">Katia Aresti</a> <em>(90 mins)</em>.</li><li>MongoDB avec <b>Play! Framework</b> par <a
href="http://www.parisjug.org/xwiki/bin/view/Speaker/BortGuillaume" rel="nofollow">Guillaume Bort</a> <em>(60 mins)</em>.</li><li>MongoDB en <b>Scala</b> par <a
href="http://blog.xebia.fr/author/omichallat/" rel="nofollow">Olivier Michallat</a> <em>(60 mins)</em>.</li><li>MongoDB avec <b>Grails</b> par <a
href="http://blog.xebia.fr/author/amaury/" rel="nofollow">Aurélien Maury</a> <em>(60 mins)</em>.</li><li>MongoDB en <b>PHP</b> par <a
href="https://twitter.com/#!/theodo" rel="nofollow">Fabrice Bernhard</a> <em>(60 mins)</em>.</li></ul></li></ul><ul><li><b>OPS</b><ul><li>Partir en production avec MongoDB par <a
href="http://www.linkedin.com/in/alvinrichards" rel="nofollow">Alvin Richard</a> (10Gen) : <em>mise en place, monitoring, backups, haute disponibilité, support, &#8230;</em></li><li>MongoDB vs. MySQL vu par des DevOps par <a
href="https://twitter.com/#!/octplane" rel="nofollow">Pierre Baillet</a> et <a
href="http://www.linkedin.com/profile/view?id=608546" rel="nofollow">Mathieu Poumeyrol</a> <em>(</em><em><a
href="http://en.wikipedia.org/wiki/Fotopedia" rel="nofollow">fotopedia</a></em><em>)</em>.</li></ul></li></ul><p>Un buffet déjeuner sera offert à 12h30.</p><p><em>Inscriptions pour le Mongo Day 11h30-18h30</em> <em><a
href="http://www.10gen.com/events/discover-mongodb-workshops-with-10gen-and-xebia" rel="nofollow">ici</a></em><em>.</em></p><h3><a
name="DRAFT-2F%C3%A9vrier-XebiaaccueilleleCEOde10GenpourunMongoDay%21-19h0022h00%3AMeetupavecleParisMongoDBUserGroup"></a>19h00 &#8211; 22h00 : Meetup avec le Paris MongoDB User Group</h3><p>De 19h00 à 22h00 Meetup avec le <a
href="http://www.meetup.com/Paris-MongoDB-User-Group/" rel="nofollow">Paris MongoDB User Group</a>, <a
href="https://twitter.com/#!/dmerr" rel="nofollow">Dwight Merriman</a> et toutes les équipes de 10gen.</p><p>Un buffet dinatoire sera offert durant le meetup.</p><p><em>Inscriptions pour le Meetup de 19h00 à 22h00</em> <em><a
href="http://www.meetup.com/Paris-MongoDB-User-Group/" rel="nofollow">ici</a></em><em>.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2012/01/04/2-fevrier-xebia-accueille-le-ceo-de-10gen-pour-un-mongo-day/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia accueille la 18ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/12/16/xebia-accueille-la-18eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/12/16/xebia-accueille-la-18eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Fri, 16 Dec 2011 12:09:14 +0000</pubDate> <dc:creator>David Galichet</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9913</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu lundi 19 Décembre à 19h30 dans les locaux de Xebia. À cette occasion, Jean-Luc Canela nous proposera une présentation sur specs2. specs2 est un framework de tests écrit en scala permettant d&#8217;écrire vos tests unitaires ainsi que vos tests d&#8217;acceptance (en mode BDD) avec une [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2011/12/scala-logo.png" alt="" title="scala-logo.png" width="198" height="59" style="padding: 5px; padding-left: 20px; float: right;" class="size-full wp-image-9912" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" rel="nofollow">Paris Scala User Group</a> aura lieu <b>lundi 19 Décembre à 19h30</b> dans les locaux de <b>Xebia</b>.</p><p>À cette occasion, Jean-Luc Canela nous proposera une présentation sur <a
href="http://etorreborre.github.com/specs2/" rel="nofollow">specs2</a>. <em>specs2</em> est un framework de tests écrit en <em>scala</em> permettant d&#8217;écrire vos tests unitaires ainsi que vos tests d&#8217;acceptance (en mode <a
href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" rel="nofollow">BDD</a>) avec une approche fonctionnelle.</p><p>Il reste encore des places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/52aawfbvdadtfn3v" rel="nofollow">inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <b>Xebia</b><br
/> <b>156 boulevard Haussmann à Paris</b><br
/> <b>Immeuble A &#8211; 7e étage</b></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/12/16/xebia-accueille-la-18eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2011/12/06/revue-de-presse-xebia-240/</link> <comments>http://blog.xebia.fr/2011/12/06/revue-de-presse-xebia-240/#comments</comments> <pubDate>Tue, 06 Dec 2011 12:58:35 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[ASF]]></category> <category><![CDATA[Gitblit]]></category> <category><![CDATA[Hibernate]]></category> <category><![CDATA[Puppet]]></category> <category><![CDATA[PuppetLabs]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Subversion]]></category> <category><![CDATA[tools]]></category> <category><![CDATA[Typesafe]]></category> <category><![CDATA[Yammer]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9707</guid> <description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Actualité éditeurs / SSII Scala : la saga continue VMWare, Cisco et Google jouent aux marionnettes Le coin de la technique Hibernate et ses performances anti-patterns Gitblit : le nouveau gestionnaire de repositories Git Evénements de notre communauté en France et à l&#8217;étranger L&#8217;Apache [...]]]></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 hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p><p><strong>Actualité éditeurs / SSII</strong></p><ul><li><a
href="#DRAFT-Revuedepresse-Scala%3Alasagacontinue">Scala : la saga continue</a></li><li><a
href="#DRAFT-Revuedepresse-VMWare%2CCiscoetGooglejouentauxmarionnettes">VMWare, Cisco et Google jouent aux marionnettes</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="#DRAFT-Revuedepresse-Hibernateetsesperformancesantipatterns">Hibernate et ses performances anti-patterns</a></li><li><a
href="#DRAFT-Revuedepresse-Gitblit%3AlenouveaugestionnairederepositoriesGit">Gitblit : le nouveau gestionnaire de repositories Git</a></li></ul><p><strong>Evénements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="#DRAFT-Revuedepresse-L%27ApacheSoftwareFoundationetSubversion">L&#8217;Apache Software Foundation et Subversion</a></li><li><a
href="#DRAFT-Revuedepresse-Envrac">En vrac</a></li></ul><h3><a
name="DRAFT-Revuedepresse-Actualitééditeurs/SSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="DRAFT-Revuedepresse-Scala:lasagacontinue"></a>Scala : la saga continue</h4><p>Lors de notre précédente revue de presse <a
href="http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239#ScalaetlesEJB" rel="nofollow">nous vous avions parlé</a> de l&#8217;article publié par Stephen Colbourne qui expliquait pourquoi il compare Scala aux EJB2. En réponse aux critiques qui l&#8217;accusaient de n&#8217;avoir pas assez utilisé Scala dans la vie réelle, il a <a
href="http://blog.joda.org/2011/11/real-life-scala-feedback-from-yammer.html" rel="nofollow">publié un mail</a> envoyé par <a
href="http://codahale.com/" rel="nofollow">Coda Hale</a> (ingénieur infrastructure chez Yammer) à Donald Fischer (CEO de <a
href="http://typesafe.com/" rel="nofollow">Typesafe</a>) et Martin Odersky (créateur de Scala). Ce mail contient une série de critiques précises contre le langage (complexe, courbe d&#8217;apprentissage importante, forme idiomatique, outils de build immatures, incompatibilité des binaires entre versions majeures et des problèmes de performances de certaines formes fonctionnelles) qui ont amené Yammer à reconsidérer son utilisation.<br
/> Il s&#8217;avère ensuite que le mail est un échange privé dans lequel Coda Hale répondait à une demande de Typesafe sur les points d&#8217;amélioration possibles du langage, il avait été placé dans un gist de github pour relecture et s&#8217;est retrouvé partagé et repris par mégarde. Son contenu finit par être repris de façon générale.<br
/> Finalement, Yammer publie sa <a
href="http://eng.yammer.com/blog/2011/11/30/scala-at-yammer.html" rel="nofollow">position officielle</a> toujours par la plume de Coda Hale. Dans ce communiqué, il indique</p><ul><li>qu&#8217;ils suivent une philosophie très pragmatique, et qu&#8217;ils essayent de nombreux outils pour résoudre leurs problèmes.</li><li>que tous les langages ont des défauts face aux types de problématiques rencontrées chez Yammer</li><li>qu&#8217;ils ont construit plusieurs systèmes impressionnants avec Scala (gestion de centaines de milliers d&#8217;utilisateurs, de millions de recherches, etc avec des performance très élevées).</li><li>que Scala est un langage encore jeune (il le compare à java 1.3) et qu&#8217;il est normal qu&#8217;il ait encore quelques bords à arrondir, que c&#8217;était justement le sens de la démarche de Typesafe.</li></ul><p>En retrait de l&#8217;agitation, Martin Odersky adresse indirectement une partie des problèmes remontés lors de cette controverse dans <a
href="http://blog.typesafe.com/getting-down-to-work" rel="nofollow">un article publié sur le blog de Typesafe</a>. Quelques points intéressants</p><ul><li>Support au développement avec l&#8217;annonce de la sortie en release candidate de <a
href="http://download.scala-ide.org/" rel="nofollow">scala IDE</a></li><li>Courbe d&#8217;apprentissage réduite d&#8217;une part par l&#8217;IDE, par des sources gratuites dont un site de <a
href="http://docs.scala-lang.org/" rel="nofollow">documentation collaboratif </a>et pour le reste par des formations.</li><li>Accélération du compilateur et soutient au travail accompli dans le compilateur incrémental de SBT.</li><li>Community avec surtout le <a
href="https://github.com/scala/scala" rel="nofollow">passage de Scala sous github</a></li></ul><p>Il évoque également la performance, les frameworks (avec akka, et play2), les plans pour répondre aux problèmes de compatibilité binaire.</p><p>La bataille fait rage pour décider du langage qui remplacera Java sur la JVM, bataille qui ne manquera pas de s&#8217;amplifier avec les fonctionnalités annoncées pour Java 8 (Jigsaw, Lambda expressions, le reste du projet Coin, &#8230;) et l&#8217;arrivée de nouveaux challengers annoncés ces derniers temps (<a
href="http://blog.jetbrains.com/kotlin/" rel="nofollow">Kotlin</a> et <a
href="http://ceylon-lang.org/" rel="nofollow">Ceylon</a>)</p><h4><a
name="DRAFT-Revuedepresse-VMWare,CiscoetGooglejouentauxmarionnettes"></a>VMWare, Cisco et Google jouent aux marionnettes</h4><p><a
href="http://puppetlabs.com/" rel="nofollow">PuppetLabs</a>, l&#8217;entreprise commerciale derrière l&#8217;outil Open source Puppet vient d&#8217;annoncer <a
href="http://puppetlabs.com/blog/company/vmware-google-and-cisco-invest-in-puppet-labs/" rel="nofollow">sur son blog</a> que VMWare, Cisco et Google venaient de prendre des parts lors du dernier tour de table effectué par la société. En dehors du blabla marketing d&#8217;une telle annonce, il faut bien reconnaître que, comme elle le dit, ces partenaires utilisent déjà Puppet &laquo;&nbsp;en production et à grande échelle&nbsp;&raquo;. Et il est certain que cette association en jette !<br
/> En tout cas, il est certain que cette annonce se présente dans une dynamique très porteuse pour les outils de management de configuration. Avec le Cloud, la tendance à prendre en compte le Devops <a
href="http://blog.loof.fr/2011/10/puppet-vs-chef-fight.html" rel="nofollow">se confirme</a> et c&#8217;est toute l&#8217;industrie qui va en bénéficier.<br
/> Rappelons que PuppetLabs édite aussi la solution commerciale <a
href="http://puppetlabs.com/puppet/puppet-enterprise/" rel="nofollow">Puppet Enterprise</a> sortie il y a peu en version 2.0. Et pour ceux que ça intéresse, notons que <a
href="http://java.dzone.com/articles/puppet-editing-pro" rel="nofollow">ce récent article</a> donne des pistes pour optimiser ses éditeurs texte et parle même de Geppetto, un IDE basé sur Eclipse pour Puppet.</p><h3><a
name="DRAFT-Revuedepresse-Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="DRAFT-Revuedepresse-Hibernateetsesperformancesantipatterns"></a>Hibernate et ses performances anti-patterns</h4><p>Pour ceux qui n&#8217;ont pas encore vu cette présentation de Patrycja Wegrzynowic à Devoxx, Mathilde Lemée <a
href="http://www.java-freelance.fr/java/hibernate-anti-patterns" rel="nofollow">en reparle ici</a>. Cet article détaillé revient avec des exemples précis sur des cas d&#8217;utilisation réel de l&#8217;outil. On y retrouve les exemples de N+1 SELECT, de problème de synchronisation en écriture et bien d&#8217;autres.<br
/> L&#8217;accroche de la présentation à Devoxx est simple &laquo;&nbsp;I do think Hibernate is a great tool&nbsp;&raquo;. De plus en plus de débats se lèvent sur l&#8217;utilisation de ce framework. Il est évertué par les uns pour son gain de productivité et son utilisation simple mais décrié par les autres pour les contraintes de modélisation qu&#8217;il entraîne et son côté opaque.<br
/> Lors de notre dernier XKE (Xebia Knowledge Exchange), nous avons eu la chance d&#8217;assister à une présentation de <a
href="http://www.retour1024.fr/" rel="nofollow">David Gageot</a> sur la notion d&#8217;outil et de framework. Lors de cette session, il a codé sous nos yeux une application Web simple, sans utiliser de grand framework. L&#8217;idée était de nous amener à nous poser les bonnes questions face aux outils que nous utilisons tous les jours:</p><ul><li>En ai-je vraiment besoin ?</li><li>A quoi sert-il vraiment ?</li><li>Son utilisation m&#8217;amène-t-elle plus de valeurs ajoutées que de contraintes ?</li></ul><p>L&#8217;idée directrice de David était de nous montrer que nous ne sommes pas obligés d&#8217;utiliser des outils très imposants pour des tâches très simples.<br
/> Un outil, à la différence d&#8217;un framework, n&#8217;imposera que peu de contraintes à son utilisateur. Il restreint son périmètre d&#8217;utilisation pour être &laquo;&nbsp;expert&nbsp;&raquo; dans une tâche bien précise. L&#8217;avantage cependant d&#8217;un framework est d&#8217;offrir des guides d&#8217;utilisation, afin d&#8217;assurer une homogénéité au sein de plusieurs projets.<br
/> Il faut savoir adapter l&#8217;outil à la tâche qui lui correspond. Mieux vaut utiliser des outils simples, non intrusifs pour faire correctement ce qui est demandé en se laissant la possibilité de changer plus tard.<br
/> De la même manière, Hibernate est un outil puissant, encore faut-il savoir l&#8217;utiliser correctement. Tous les cas d&#8217;utilisation n&#8217;en on pas l&#8217;utilité. Mais rappelons nous que si nous voulons l&#8217;introduire dans notre projet, apprenons d&#8217;abord à bien l&#8217;utiliser.Tout est une question d&#8217;adaptation. C&#8217;est le coeur de notre métier, comprendre le contexte pour lui apporter la meilleure réponse possible. La réponse universelle n&#8217;existe pas et c&#8217;est cela qui rend notre profession intéressante.</p><h4><a
name="DRAFT-Revuedepresse-"></a></h4><h4><a
name="DRAFT-Revuedepresse-Gitblit:lenouveaugestionnairederepositoriesGit"></a>Gitblit : le nouveau gestionnaire de repositories Git</h4><p><a
href="http://gitblit.com/" rel="nofollow">GitBlit</a> est une application Web Open-Source (licence Apache Software Foundation version 2.0), reposant sur une stack pure Java, et qui a pour objectif de gérer, consulter et héberger des repositories Git. Il utilise pour cela JGit, une implémentation Java du gestionnaire de sources distribué.</p><p>L&#8217;application se présente sous deux modes :</p><ol><li><strong>Gitblit GO</strong> : une solution clé en main basée sur Jetty. Il n&#8217;est pas nécessaire d&#8217;installer un quelconque serveur Web ou même Git lui-même, c&#8217;est l&#8217;option à privilégier si l&#8217;on veut démarrer le plus simplement et rapidement possible. L&#8217;objectif de ce mode est d&#8217;obtenir un serveur fonctionnel avec un minimum de configuration. En effet, un unique fichier texte permet de configurer le serveur et Gitblit. Aussi, un certificat pour communiquer via HTTPS est automatiquement généré pour localhost et un script permet d&#8217;en générer un pour n&#8217;importe quel hostname.</li><li><strong>Gitblit WAR</strong> : si vous utilisez déjà un conteneur de servlets où vous déployer vos différents outils, le mode WAR est à privilégier. Les versions 6, 7 et 8 de Jetty ainsi que les versions 6 et 7 de Tomcat sont supportées. De manière générale, n&#8217;importe quelle implémentation de Servlet 2.5 ou 3.0 devrait fonctionner.</li></ol><p>Gitblit peut être utiliser de différentes manières :</p><ul><li>Comme une simple IHM Web (inspirée de Gitweb) pour consulter les repositories Git sans accès administrateur ou ou gestion de comptes utilisateurs.</li><li>Comme une stack Git complète pour cloner, &laquo;&nbsp;pusher&nbsp;&raquo; et contrôler l&#8217;accès aux repositories.</li><li>Gitblit peut être utiliser sans aucun outil relatif à Git (dont Git lui-même) ou il peut collaborer avec vos outils existants.</li></ul><p>Les administrateurs peuvent gérer les repos et comptes utilisateurs soit via l&#8217;IHM Web, soit via une interface JSON RPC accessible depuis le <a
href="http://code.google.com/p/gitblit/downloads/detail?name=manager-0.7.0.zip" rel="nofollow">Gitblit Manager</a> (une IHM Swing pour gérer les repos Git et administrer un serveur Gitblit de manière distante) ou depuis un outil custom.</p><p>L&#8217;application requière au minimum un JRE/JDK 6.</p><h3><a
name="DRAFT-Revuedepresse-EvénementsdenotrecommunautéenFranceetàl'étranger"></a>Evénements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="DRAFT-Revuedepresse-L'ApacheSoftwareFoundationetSubversion"></a>L&#8217;Apache Software Foundation et Subversion</h4><p>Ben Collins-Sussman, fondateur du projet Subversion et membre actuelle de l&#8217;Apache Software Foundation, vient donner son point de vue sur un débat qui fait rage : <a
href="http://blog.red-bean.com/sussman/?p=597" rel="nofollow">Pourquoi l&#8217;ASF choisit encore Subversion comme gestionnaire de source</a> ?<br
/> La première réponse apportée par Jim Jagielski, un des leaders de l&#8217;ASF, est de garantir l&#8217;intégrité des projets sur le long terme et ne pas céder aux dernières modes. Ben Collins-Sussman pense lui que l&#8217;ASF est aussi présente pour fournir des protections légales face à l&#8217;utilisation des outils et d&#8217;assurer une cohérence aux long-termes et non seulement sur le software mais aussi sur les membres de la communauté.<br
/> Pour lui ce dernier point est assuré au sein de la fondation avec ces quelques mots &laquo;&nbsp;community over code&nbsp;&raquo;. Les réponses apportées aux différents problèmes des projets se font par consensus et système de vote au sein des projets.<br
/> Cet esprit de communauté et de protection légale est la raison pour laquelle Ben Collins-Sussman défend l&#8217;idée que les projets Apache doivent joindre le Grand Repository Subersion d&#8217;Apache. Mais l&#8217;utilisation de ce dépôt de source ne doit en aucun cas être unique. Certains projets pourraient selon lui utiliser Git et déposer de façon automatisée les sources au sein du Subversion d&#8217;Apache une fois par jour.<br
/> Pour reprendre le titre de son article, entrer dans une communauté, ce n&#8217;est pas être forcé d&#8217;utiliser tous ses outils.</p><h4><a
name="DRAFT-Revuedepresse-Envrac"></a>En vrac</h4><p>Sortie de <a
href="http://search-lucene.com/m/ElBcpJHvZ&amp;subj=+ANNOUNCE+Apache+Lucene+3+5+0+released" rel="nofollow">Lucene 3.5.0 </a>réduisant entre autre de façon significative la consommation mémoire lors de l&#8217;ouverture d&#8217;un IndexReader.</p><p>Sortie de <a
href="http://www.elasticsearch.org/blog/2011/11/29/0.18.5-released.html" rel="nofollow">ElasticSearch 0.18.5</a> comprenant des corrections de bugs mais surtout reprenant Lucene 3.5.0.</p><p>Sortie de <a
href="http://lucene.apache.org/solr/#27+November+2011+-+Solr+3.5.0+Released" rel="nofollow">Solr 3.5.0</a> reprenant également Lucene 3.5.0.</p><p>Sortie de <a
href="http://forum.springsource.org/showthread.php?118523-STS-2-8-1-released" rel="nofollow">SpringSource Tool Suite 2.8.1</a> dont le but principal est de réduire les couts de migrations de m2eclipse à m2e. Il y a d&#8217;ailleurs <a
href="http://forum.springsource.org/showthread.php?116189-STS-2.8.0-and-m2e-FAQ-%28updated-for-STS-2.8.1%29" rel="nofollow">une FAQ intéressante</a> sur m2e fournie par SpringSource (elle est bien sûr applicable aux utilisateurs d&#8217;Eclipse version &laquo;&nbsp;normale&nbsp;&raquo;).</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/12/06/revue-de-presse-xebia-240/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239/</link> <comments>http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239/#comments</comments> <pubDate>Tue, 29 Nov 2011 13:00:55 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Colebourne]]></category> <category><![CDATA[Duchess]]></category> <category><![CDATA[EJB2]]></category> <category><![CDATA[humour]]></category> <category><![CDATA[Mahout]]></category> <category><![CDATA[pasta theory]]></category> <category><![CDATA[REST]]></category> <category><![CDATA[Restfuse]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9549</guid> <description><![CDATA[La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia. Actualité éditeurs / SSII Sortie de la première version stable de Restfuse 1.0 Le coin de la technique Humour de développeur Evénements de notre communauté en France et à l&#8217;étranger Scala et les EJB2 Retour sur l&#8217;atelier Apache Mahout des Duchess France Actualité éditeurs [...]]]></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" /></p><p><em>La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.</em></p><p><strong>Actualité éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239#Sortiedelapremireversionstable">Sortie de la première version stable de Restfuse 1.0</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239#Humourdedveloppeur">Humour de développeur</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/2011/11/29/revue-de-presse-xebia-239#ScalaetlesEJB">Scala et les EJB2</a></li><li><a
href="http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239#RetoursurlatelierApacheMahoutd">Retour sur l&#8217;atelier Apache Mahout des Duchess France</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="Sortiedelapremireversionstable"></a>Sortie de la première version stable de Restfuse 1.0</h4><p>Restfuse 1.0.0 est la première version stable de cette API créée par EclipseSource. Il s&#8217;agit d&#8217;une extension open source de JUnit qui permet de tester des implémentations différentes REST (Jersey, RESTLET, RESTeasy&#8230;). Ses créateurs s’appuient sur le besoin d&#8217;avoir des tests d&#8217;intégration sur les services REST au-delà des tests unitaires, et des mocks des services afin de vérifier que le système entier fonctionne correctement.</p><p>Les objectifs de ce framework sont :</p><ul><li><strong>Trouver une solution propre pour tester les services REST asynchrones. </strong>Pour tester les services asynchrones, les deux solutions les plus communes sont : callbacks ou polling. Les annotations <code>@Callback</code> et <code>@Poll</code> sont fournies afin d&#8217;éviter de boucler sur la requête ou de démarrer le serveur avant ou dans le test.</li></ul><ul><li><strong>Faciliter la configuration des requêtes avec des annotations.</strong> L&#8217;annotation <code>@HttpTest</code> permet de configurer la requête HTTP et de l&#8217;envoyer avant que le test ne soit exécuté. Cette méthode essaie d&#8217;améliorer d&#8217;autres APIs de tests, comme <a
title="restassured" href="http://blog.jayway.com/2010/12/27/rest-assured-or-how-to-easily-test-rest-services-in-java/">rest-assured</a> où la requête doit être configurée en code Java dans la méthode de test.</li></ul><p>Vous pouvez trouver des exemples d&#8217;utilisation sur la page de <a
title="Restfuse" href="http://restfuse.com/">Restfuse</a> et aussi dans cet article <a
title="InfoQ" href="http://www.infoq.com/news/2011/11/restfuse-1-0-0">InfoQ</a> qui contient plusieurs exemples assez pratiques.</p><p>Le projet est hébergé sur <a
title="Github" href="https://github.com/eclipsesource/restfuse">Github</a>. La version 1.0 est disponible sur le dépôt central de Maven et aussi sur <a
title="p2" href="http://restfuse.com/p2/">p2</a> pour le systèmes OSGi.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="Humourdedveloppeur"></a>Humour de développeur</h4><p>Nous vous avertissons tout de suite, si vous êtes allergiques à l&#8217;humour geek ou aux anglicismes, vous pouvez zapper ce passage qui risque de vous faire bondir. Toujours là ? Allons-y alors !<br
/> Depuis peu tournent sur la toile des liens vers <a
title="cet article" href="http://www.dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html">cet article</a>. Celui-ci est en fait un &laquo;&nbsp;best-of&nbsp;&raquo; d&#8217;<a
title="une vieille page" href="http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined">une vieille page</a> de StackOverflow ayant généré des commentaires sur 12 (!) pages. Nous vous laissons la lire, en plusieurs fois tout de même pour éviter l&#8217;overdose, mais voici une petite sélection:</p><ul><li><strong>les Yoda conditions</strong>: elles consistent à inverser la variable avec la valeur testée dans une condition. Ainsi on écrira <code>if (CONST_VALUE == variable)</code> au lieu de <code>if (variable == CONST_VALUE)</code>. Ceci car Yoda lui-même parle en inversant les mots: &laquo;&nbsp;si grande est la variable, Jedi tu deviendra&nbsp;&raquo;.</li><li><strong>Pokémon Exception Handling</strong>: consiste à faire un <code>catch (Throwable t)</code> histoire de catcher toutes exceptions. Provient du slogan des Pokemons &laquo;&nbsp;<em>catch&#8217;em all</em>&laquo;&nbsp;.</li><li><strong>Les accolades égyptiennes</strong>: elles représentent le formatage par défaut en Java (voir <a
title="les préconisations de Sun" href="http://java.sun.com/docs/codeconv/html/CodeConventions.doc5.html">les préconisations de Sun</a>), c&#8217;est-à-dire que la position des accolades fait penser à un Égyptien. Le mieux est de voir cela <a
title="en image" href="http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined#2801919">en image</a>.</li><li><strong>Refuctoring</strong>: décrit l&#8217;action prenant un beau morceau de code bien pensé pour le transformer, à travers une série d&#8217;étapes (ir-)réversibles, en un immonde plat de spaghettis non maintenable.</li><li><strong>Stringly Typed</strong>: par opposition à &laquo;&nbsp;Strongly typed&nbsp;&raquo;, indique l&#8217;absence de typage et l’utilisation à outrance des chaînes de caractères, entraînant des problèmes visibles seulement au runtime. Se rencontre souvent dans les fichiers XML ou chez les novices en Javascript.</li><li><strong>Le Baklava code</strong>: désigne du code où trop de couches <a
title="s'empilent" href="http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined#2801919">s&#8217;empilent</a>. On fera l&#8217;analogie avec la &laquo;&nbsp;Théorie des pâtes&nbsp;&raquo; qui assimile des problèmes d&#8217;architecture du code à des plats de pâtes. On y retrouve le code spaghetti, le code ravioli, le code lasagne et&#8230; le code Spaghetti avec boulettes. Délectez-vous <a
title="avec les recettes" href="http://georgik.sinusgear.com/2011/03/07/spaghetti-lasagna-and-raviolli-code">avec les recettes</a> !</li><li><a
title="Hydra Code" href="http://stackoverflow.com/questions/2349378/new-programming-jargon-you-coined#2802897">Hydra Code</a>: désigne du code impossible à corriger, où une correction entraîne inévitablement de nouveaux bugs.</li><li><strong>Protoduction code</strong>: lorsque du code non prévu qui n’était pas destiné à se retrouver en production finit par y atterrir. Le &laquo;&nbsp;Protoduction Driven Development&nbsp;&raquo; se rapproche ainsi souvent du &laquo;&nbsp;Marketing Feature Driven Devlopment&nbsp;&raquo;.</li><li><strong>Megamoth</strong>: la MEGA MOnolitique méTHode se retrouve souvent dans les projets où des codeurs bien intentionnés ont regroupé en une seule méthode différents traitements et logiques compliqués histoire de garder le reste du code simple et clair. Généralement, cette méthode fait plusieurs écrans de haut, quelques centaines de lignes et les commentaires sont bien sûr sans rapport avec le traitement effectif.</li></ul><p>C&#8217;étaient quelques-unes des perles de la première page du thread sur Stackoverflow. La lecture du reste des 12 page est bien sûr fortement conseillée pour se détendre les zygomatiques.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evénements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="ScalaetlesEJB"></a>Scala et les EJB2</h4><p>Stephen Colebourne, le <a
title="bouillant" href="http://blog.xebia.fr/2011/06/15/revue-de-presse-xebia-215/#LavenirdeJavasejouemaintenant">bouillant</a> <em>project lead</em> de <a
title="Joda Time" href="http://joda-time.sourceforge.net/">Joda Time</a> présentait à Devoxx le 17 novembre dernier une <a
title="conférence" href="http://blog.joda.org/2011/11/guide-to-evaluating-fantom.html">conférence</a> sur le langage <a
title="Fantom" href="http://fantom.org/">Fantom</a>. De cette présentation on n&#8217;en a malheureusement retenu qu&#8217;une petite phrase sibylline lourde de sous-entendus: &laquo;&nbsp;Scala ressemble aux EJB2&#8243;.</p><p>La pique n&#8217;a pas manqué de <a
title="créer le buzz" href="http://www.infoq.com/news/2011/11/scala-ejb2">créer le buzz</a>, à tel point que Colebourne s&#8217;est senti obligé d&#8217;y apporter <a
title="une explication" href="http://blog.joda.org/2011/11/scala-feels-like-ejb-2-and-other.html">une explication</a>, puis <a
title="une autre" href="http://blog.joda.org/2011/11/scala-ejb-2-feedback.html">une autre</a>.</p><p>Colebourne voit du mérite dans bien des langages: Groovy, Kotlin, Ceylon, Gosu, Xtend, Clojure et bien entendu, Fantom. Mais sur Scala il reste plutôt sévère: selon lui il y aurait &laquo;&nbsp;beaucoup à dire sur Scala, mais peu de bien&nbsp;&raquo;, car ce langage &laquo;&nbsp;prend une direction totalement erronée pour l&#8217;avenir&nbsp;&raquo;.</p><p>Mais que reproche-t-il au juste à ce langage?</p><ul><li><strong>Modularité</strong>. Scala <a
title="n'a pas de système de modules" href="http://alblue.bandlem.com/2009/08/modularity-for-scala.html">n&#8217;a pas de système de modules</a> et reprend ainsi une erreur fondamentale du langage Java, difficile à corriger (cf. le projet <a
title="Jigsaw" href="http://openjdk.java.net/projects/jigsaw/">Jigsaw</a>). Colebourne est d&#8217;avis qu&#8217;un outil externe tel que Maven, Ivy ou OSGi n&#8217;est pas une solution durable à un problème qui doit être résolu au coeur même du langage.</li></ul><ul><li><strong>Concurrence</strong>: pourtant si vantée, la programmation concurrente sous Scala ne serait pour Colebourne qu&#8217;un &laquo;&nbsp;écran de fumée&nbsp;&raquo;. Scala s&#8217;appuie davantage sur le design de <a
title="ses librairies" href="http://akka.io/">ses librairies</a> et sur une certaine discipline de codage que sur une contrainte forte et inhérente au langage, et permet en effet qu&#8217;un objet mutable soit partagé &#8212; contrairement à Fantom, qui lui traque ces objets et les signale par des erreurs de compilation.</li></ul><ul><li><strong>Communauté</strong>: la communauté Scala serait certes large et active, mais faite de sophistes davantage mus par la beauté du langage et l&#8217;émulation intellectuelle que par l&#8217;efficacité pragmatique des algorithmes. Colebourne la considère comme un cercle élitiste tendant à prendre de haut le Javaïste &laquo;&nbsp;de base&nbsp;&raquo;.</li></ul><ul><li><strong>Système de typage</strong>: pour Colebourne, ils serait tout simplement trop complexe, &laquo;&nbsp;au-delà du raisonnable&nbsp;&raquo;. Cette complexité serait un faux atout: &laquo;&nbsp;si j&#8217;ajoute un String à une liste d&#8217;entiers, je devrais obtenir une erreur de compilation, non une liste de <code>Any</code>&laquo;&nbsp;.</li></ul><ul><li><strong>Syntaxe</strong>: même verdict. Si la flexibilité permet l&#8217;écriture fluide de DSLs (et encore, Colebourne y préfère l&#8217;approche <a
title="à la Fantom" href="http://fantom.org/doc/docLang/DSLs.html">à la Fantom</a>), les <a
title="paramtres implicites" href="http://www.scala-lang.org/node/114">paramètres implicites</a> ou encore les nombreux sucres syntaxiques du langage donneraient au code un côté obscur et hermétique. Utilisés à large échelle sur de grands projets par de vastes équipes, leur effet serait plutôt négatif sur la maintenabilité du code.</li></ul><ul><li><strong>Qualité</strong>: Colebourne rend ici la parole à Paul Phillips, un commiteur Scala, et cite des extraits d&#8217;un <a
title="podcast" href="http://scalatypes.com/webpage/interview-with-paul-phillips">podcast</a> datant de Juin 2011. Philips y évoque l&#8217;extraordinaire complexité du code et surtout avoue platement que Scala manque d&#8217;une &laquo;&nbsp;suite de tests extensive&nbsp;&raquo; couvrant l&#8217;ensemble du code. Pour Colebourne, c&#8217;est la preuve même que Scala n&#8217;aurait pas encore atteint les niveaux de maturité, maintenabilité et évolutivité que l&#8217;on est en mesure d&#8217;attendre d&#8217;un langage d&#8217;entreprise. (A quoi nous pourrions également rajouter que, comme le note <a
title="Ceki Glc" href="http://ceki.blogspot.com/2011/08/is-scala-trustworthy.html">Ceki Gülcü</a>, Scala a à de nombreuses reprises brisé la compatibilité binaire entre releases: 2.7, 2.8, 2.9&#8230;)</li></ul><p>En somme on pourrait résumer la pensée de Colebourne par &laquo;&nbsp;trop de flexibilité tue la flexibilité&nbsp;&raquo;. Il va de soi que ses opinions agacent bon nombre d&#8217;adeptes de Scala et n&#8217;ont pas manqué de déclencher de nombreux commentaires enflammés sur son billet, au milieu, il est vrai, de quelques réponses plus posées (et plus ou moins convaincantes). D&#8217;autres enfin ont préféré répondre point par point <a
title="sous forme de billet" href="http://retroprogrammer.blogspot.com/2011/11/scala-gripes-not-here.html">sous forme de billet</a>.</p><h4><a
name="RetoursurlatelierApacheMahoutd"></a>Retour sur l&#8217;atelier Apache Mahout des Duchess France</h4><p>La semaine dernière s&#8217;est tenu un atelier Apache Mahout organisé par les <a
title="Duchess France" href="http://jduchess.org/duchess-france/">Duchess France</a> et présenté par <a
title="Michaël Figuière (Xebia)" href="http://blog.xebia.fr/author/mfiguiere">Michaël Figuière (Xebia)</a> et <a
title="Jean-Baptiste Lemée (Lateral Thoughts)" href="http://www.lateral-thoughts.com/">Jean-Baptiste Lemée (Lateral Thoughts)</a>. Le but de cet évènement était de mettre en valeur les fonctionnalités qui peuvent être développées grâce à Mahout et qui sont encore très peu répandues dans les applications d&#8217;entreprise.</p><p><a
title="Apache Mahout" href="http://mahout.apache.org/">Apache Mahout</a> est un <em>framework</em> d&#8217;apprentissage artificiel (_machine learning_). Il permet, entre autres, de réaliser des moteurs de recommandations, de la classification automatique de documents, ou encore du regroupement d&#8217;entités (_clustering_). Ce type d&#8217;algorithmique était principalement réservé au monde de la recherche il y a encore une décennie, avant de se répandre parmi les sites Web les plus populaires durant les années 2000, bien que restant une affaire de spécialistes. L&#8217;émergence de Mahout, projet initié en 2009, permet enfin la banalisation de ces fonctionnalités tant appréciées par les utilisateurs, grâce à son API Java simple. En cela Mahout devient à l&#8217;apprentissage artificiel ce que <a
title="Lucene" href="http://lucene.apache.org/">Lucene</a> est devenu aux moteurs de recherche.</p><p>L&#8217;atelier Mahout a démarré avec une présentation générale et rapide du <em>framework,</em> suivie par un exercice pratique avec la mise en oeuvre de Mahout pour créer un moteur de recherche de recettes de cuisines, en seulement quelques lignes de code&#8230;</p><p>Si vous avez manqué cet évènement, vous pouvez retrouver les <em>slides</em> de la présentation <a
title="ici" href="http://www.slideshare.net/mfiguiere/duchess-france-nov-2011-atelier-apache-mahout">ici</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/29/revue-de-presse-xebia-239/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia accueille la 17ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/11/18/xebia-accueille-la-17eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/11/18/xebia-accueille-la-17eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Fri, 18 Nov 2011 13:52:39 +0000</pubDate> <dc:creator>David Galichet</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[SBT]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9267</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu mardi 22 novembre 2011 à 19h30 dans les locaux de Xebia. Lors de cette nouvelle soirée du PSUG, Jonathan Winandy et moi-même aurons le plaisir de vous présenter l&#8217;outil Simple Build Tool. Cet outil de build permettant de construire vos applications Scala et Java, se [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /></p><p>La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" rel="nofollow">Paris Scala User Group</a> aura lieu mardi 22 novembre 2011 à 19h30 dans les locaux de Xebia.</p><p>Lors de cette nouvelle soirée du PSUG, <a
href="http://www.linkedin.com/in/jwinandy" rel="nofollow">Jonathan Winandy</a> et <a
href="http://blog.xebia.fr/author/dgalichet/" rel="nofollow">moi-même</a> aurons le plaisir de vous présenter l&#8217;outil <a
href="https://github.com/harrah/xsbt/wiki" rel="nofollow">Simple Build Tool</a>. Cet outil de build permettant de construire vos applications <em>Scala</em> et <em>Java</em>, se veut un remplaçant avantageux de <em>Ant</em> ou autres <em>Maven</em> pour tout développeur ayant quelques bases en <em>Scala</em>.</p><p>Il reste encore quelques places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/nu8bpks6aua4rkx2" rel="nofollow">inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <b>Xebia</b><br
/> <b>156 boulevard Haussmann à Paris</b><br
/> <b>Immeuble A &#8211; 7e étage</b></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/18/xebia-accueille-la-17eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Design Pattern en scala &#8211; Singleton</title><link>http://blog.xebia.fr/2011/11/03/design-pattern-en-scala-singleton/</link> <comments>http://blog.xebia.fr/2011/11/03/design-pattern-en-scala-singleton/#comments</comments> <pubDate>Thu, 03 Nov 2011 06:10:57 +0000</pubDate> <dc:creator>Nabil Gasri</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[GOF]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Singleton]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8943</guid> <description><![CDATA[Cet article est le premier d&#8217;une série d&#8217;articles dont le but est de montrer aux lecteurs comment implémenter en Scala les différents design patterns connus. Chaque article étudiera un ou plusieurs design patterns, rappellera la définition de chacun, et montrera les différences d&#8217;implémentation entre Scala et Java. Je couvrirai dans cette série d&#8217;articles les 23 [...]]]></description> <content:encoded><![CDATA[<p>Cet article est le premier d&#8217;une série d&#8217;articles dont le but est de montrer aux lecteurs comment implémenter en Scala les différents design patterns connus.</p><p>Chaque article étudiera un ou plusieurs design patterns, rappellera la définition de chacun, et montrera les différences d&#8217;implémentation entre Scala et Java.</p><p>Je couvrirai dans cette série d&#8217;articles les 23 design patterns cités par le <a
href="http://en.wikipedia.org/wiki/Design_Patterns_(book)" rel="nofollow">GOF</a> et quelques autres design patterns propres à Scala et/ou provenant du monde de la programmation fonctionnelle.</p><h3><a
name="DesignPatternenscala-Singleton-D%C3%A9finition"></a>Définition</h3><p>Le design pattern <b>singleton</b> &laquo;&nbsp;garantit qu&#8217;une classe n&#8217;a qu&#8217;une seule instance et fournit un point d&#8217;accès de type global à cette classe&nbsp;&raquo; d&#8217;après le GoF.  Il permet d&#8217;avoir une seule instance d&#8217;une classe dans un espace et un temps donné. Il faut noter ici la différence entre le singleton dit &laquo;&nbsp;JVM&nbsp;&raquo; et les singletons que j&#8217;appelle de &laquo;&nbsp;plateforme&nbsp;&raquo;, tels que les singletons Java EE, Spring ou autre. Lorsque nous parlons d&#8217;un singleton JVM, nous spécifions que la classe est chargée une seule fois dans la JVM. Le singleton Spring quant à lui implique juste l&#8217;existence d&#8217;une instance unique au sein d&#8217;un contexte Spring. Un singleton Java EE est unique dans le conteneur.</p><h3><a
name="DesignPatternenscala-Singleton-Casd%27utilisation"></a>Cas d&#8217;utilisation</h3><p>C&#8217;est le pattern le plus utilisé, souvent à tort par les développeurs juniors comme seniors. Aujourd&#8217;hui, on en voit très souvent dans le code. Tout est devenu prétexte pour introduire un singleton : les classes utilitaires (helper), les classes de services, etc.</p><p>Pourtant les cas d&#8217;utilisation du Singleton sont peu nombreux et doivent le rester. Parmi les cas d&#8217;utilisation, on peut citer :</p><ul><li>le gestionnaire d&#8217;affichage (DisplayManager),</li><li>le gestionnaire de pilotes de base de données (DriverManager),</li><li>le runtime,</li><li>etc.</li></ul><p>Bref une règle simple peut vous aider à prendre votre décision : un singleton est souvent lié à une ressource <b>unique.</b> Le développeur doit se demander si une classe qui n&#8217;a que des membres statiques (attributs et méthodes) et un constructeur privé n&#8217;est pas suffisante (ce qui est généralement le cas). </p><h3><a
name="DesignPatternenscala-Singleton-Impl%C3%A9mentation"></a>Implémentation</h3><h4><a
name="DesignPatternenscala-Singleton-Java"></a>Java</h4><p>Plusieurs solutions existent en Java. Les principales différences entre les implémentations tournent autour de la simplicité d&#8217;écriture, l&#8217;aspect <em>thread safety</em> dans un environnement multi-threadé et l&#8217;initialisation tardive.</p><p>Vous trouverez ci-dessous trois de ces solutions :</p><p><b>La solution triviale</b></p><p>Elle consiste à créer une classe finale munie d&#8217;un constructeur privé, une instance statique, finale et privée et une méthode statique publique retournant une référence à l&#8217;instance statique.</p><pre class="brush: java; gutter: true; title: ; notranslate">
public final class Singleton {
 private static Singleton instance = new Singleton();
 // accès global
 public static Singleton getInstance() {
  return instance;
 }
 // constructeur privé. Obligatoire pour empêcher l'instantiation ailleurs .
 private Singleton() {
 }
 // méthodes et attributs
}
</pre><p>Cette solution est simple à écrire et à comprendre. Elle ne présente aucun problème de synchronisation, puisque le chargement des classes est <em>thread safe</em>. Le seul souci qu&#8217;elle présente est que l&#8217;instance statique est initialisée au chargement de la classe ce qui rend le chargement coûteux. En effet, elle n&#8217;implémente pas l&#8217;initialisation tardive.</p><p><b>La solution enum</b></p><p>De plus en plus de développeurs préfèrent une implémentation à base d&#8217;<em>enum</em> à l&#8217;implémentation précédente.</p><pre class="brush: java; gutter: true; title: ; notranslate">
public enum Singleton {
 ONE;
 // méthodes et attributs
}
</pre><p>Cette solution est encore plus simple que la précédente. Elle présente les mêmes avantages et inconvénients en plus du fait quelle n&#8217;est compatible qu&#8217;avec Java 5 et plus (et oui il y a encore des gens qui développent avec Java 1.3 et 1.4 !).</p><p><b>La solution avec inner class</b></p><p>C&#8217;est une adaptation de la première solution qui ajoute une classe privée chargée d&#8217;instancier le singleton.</p><pre class="brush: java; gutter: true; title: ; notranslate">
public final class Singleton {
 private static class SingletonLoader {
  private static Singleton instance = new Singleton();
 }
 // accès global
 public static Singleton getInstance() {
  return SingletonLoader.instance;
 }
 // constructeur privé. Obligatoire pour empêcher l'instantiation ailleurs .
 private Singleton() {
 }
 // méthodes et attributs
}
</pre><p>Cette solution reste simple, <em>thread-safe</em>, implémente le chargement tardif et elle fonctionne sur toutes les versions des JVM. C&#8217;est ma préférée entre les solutions présentées.  </p><h4><a
name="DesignPatternenscala-Singleton-Scala"></a>Scala</h4><p>Les singletons dans Scala sont appellés <em>Singleton Objects</em>. Le but premier des <em>Singleton Objects</em> est de remplacer les membres statiques (attributs et méthodes). En effet, dans Scala, il n&#8217;y a pas de mot-clé <em>static</em>, il n&#8217;y a ni attribut de classe ni méthode de classe. Pour en avoir, il faut créer un <em>Singleton Object</em>. Voici comment :</p><pre class="brush: scala; gutter: true; title: ; notranslate">
object Singleton{
 // méthodes et attributs
}
// Voici comment l'utiliser depuis une autre classe, un autre object ou dans un script
val singleton = Singleton
</pre><p> Scala compile un <em>object</em> en deux classes :</p><ul><li><b><em>Singleton</em></b> : une classe finale qui ne contient que des méthodes statiques. Les méthodes statiques enveloppent l&#8217;appel à la vraie implémentation contenue dans l&#8217;autre classe générée.</li><li><b><em>Singleton$</em></b><em> </em>: une classe finale avec un constructeur privé et une instance statique d&#8217;elle même.</li></ul><p>Avec le code décompilé <em>(avec JD-GUI)</em> ci dessous on en déduit que l&#8217;implémentation scala se rapproche beaucoup de la solution Java avec inner class.</p><pre class="brush: java; gutter: true; title: ; notranslate">
public final class Singleton$  implements ScalaObject {
 public static final  MODULE$;
 static{
    new();
 }
 private Singleton$(){
    MODULE$ = this;
 }
}
public final class Singleton
{
}
</pre><p>Comme la dernière implémentation du pattern en Java, cette solution est <em>thread safe</em> et implémente <em>l&#8217;initialization paresseuse</em>.</p><p>Au-delà des détails de l&#8217;implémentation du singleton, il est important de rappeler que Scala distingue deux types de <em>Singleton Object</em>&nbsp;:</p><ul><li>Le <b><em>Companion Object</em></b> : un <em>Companion Object</em> est défini dans le même fichier qu&#8217;une classe portant le même nom. La classe et son objet compagnon peuvent accéder mutuellement à leurs membres même privés.</li><li>Le <b><em>Standalone Object</em></b> : le <em>Standalone Object</em> est un objet défini seul.</li></ul><p>Dans les deux cas, les singletons en Scala sont des &laquo;&nbsp;citoyens de première classe&nbsp;&raquo;, pour les anglophones &laquo;&nbsp;first-class citizens&nbsp;&raquo;. Ce qui veut dire que ces entités peuvent :</p><ul><li>Hériter (en Scala on dit plutôt <em>mixer</em>) de <em>traits</em> ou de classes. Mais ils ne peuvent pas être hérités !</li><li>Redéfinir (<em>overwrite</em>) les membres hérités.</li><li>Être utilisés comme n&#8217;importe quel autre type.</li></ul><h3><a
name="DesignPatternenscala-Singleton-Conclusion"></a>Conclusion</h3><p>Entre <em>thread-safety</em> et <em>initialization paresseuse</em>, l&#8217;implémentation du pattern Singleton n&#8217;est pas la plus intuitive en Java. Malgré cela, le pattern est l&#8217;un des plus utilisés. Scala l&#8217;intègre nativement en assurant la thread safety et l&#8217;initialization paresseuse. Ceci rend son utilisation encore plus facile. Cette simplicité d&#8217;implémentation ne doit pas inciter les développeurs à l&#8217;utiliser à tort n&#8217;importe où dans leur code.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/03/design-pattern-en-scala-singleton/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Xebia accueille la 16ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/10/24/xebia-accueille-la-16eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/10/24/xebia-accueille-la-16eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Mon, 24 Oct 2011 06:39:48 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[TDD]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8885</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu mardi 25 Octobre à 19h30 dans les locaux de Xebia. A cette occasion, Jean Helou nous proposera la résolution d&#8217;un mastermind sous forme d&#8217;un kata TDD. Le but est de partir d&#8217;une version impérative du programme et la refactorer en utilisant les principes de la [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /></p><p>La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" rel="nofollow">Paris Scala User Group</a> aura lieu <b>mardi 25 Octobre à 19h30</b> dans les locaux de Xebia.</p><p>A cette occasion, <a
href="http://www.linkedin.com/in/jeanhelou" rel="nofollow">Jean Helou</a> nous proposera la résolution d&#8217;un mastermind sous forme d&#8217;un kata TDD. Le but est de partir d&#8217;une version impérative du programme et la refactorer en utilisant les principes de la programmation fonctionnelle.</p><p>Il reste encore quelques places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/8cefvmwuqf9zb938" rel="nofollow">inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <b>Xebia</b><br
/> <b>156 boulevard Haussmann à Paris</b><br
/> <b>Immeuble A &#8211; 7e étage</b></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/10/24/xebia-accueille-la-16eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Paradigmes de programmation par Nicolas Demengel</title><link>http://blog.xebia.fr/2011/09/15/paradigmes-de-programmation-par-nicolas-demengel/</link> <comments>http://blog.xebia.fr/2011/09/15/paradigmes-de-programmation-par-nicolas-demengel/#comments</comments> <pubDate>Thu, 15 Sep 2011 08:52:37 +0000</pubDate> <dc:creator>Nicolas Demengel</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[clojure]]></category> <category><![CDATA[Erlang]]></category> <category><![CDATA[Groovy]]></category> <category><![CDATA[Haskell]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Prolog]]></category> <category><![CDATA[Python]]></category> <category><![CDATA[Ruby]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[vidéo]]></category> <category><![CDATA[XKE]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8536</guid> <description><![CDATA[Suite à la lecture du livre &#171;&#160;Seven Languages in Seven Weeks&#160;&#187; (Bruce A. Tate), Nicolas Demengel nous a présenté les principaux paradigmes de programmation durant notre journée XKE. Nous souhaitons partager avec vous cette session au travers de cette vidéo. Bon visionnage&#160;! Paradigmes de programmation par Nicolas Demengel Tous les podcasts Xebia France :]]></description> <content:encoded><![CDATA[<p>Suite à la lecture du livre &laquo;&nbsp;Seven Languages in Seven Weeks&nbsp;&raquo; <em>(Bruce A. Tate)</em>, <a
href="http://blog.xebia.fr/author/ndemengel/">Nicolas Demengel</a> nous a présenté les principaux paradigmes de programmation durant notre <a
href="http://blog.xebia.fr/tag/xke/">journée XKE</a>. Nous souhaitons partager avec vous cette session au travers de cette vidéo.<br
/> Bon visionnage&nbsp;!</p><div
id="paradigmes-de-programmation" align='center'>Paradigmes de programmation par Nicolas Demengel</div><p> <br
/> <script type="text/javascript">jwplayer('paradigmes-de-programmation').setup({
			flashplayer: '/videos/player.swf',
			image: '/videos/paradigmes-de-programmation.png',
			file: 'http://xebia-video.s3-website-eu-west-1.amazonaws.com/2011-09-paradigmes-de-programmation.mp4',
			width: 720,
			height: 550,
			plugins: {
				'slidesync-1': {
				'position': 'right',
				'size': 500,
				'xmlPath': '/videos/paradigmes-de-programmation-slidesync.xml'
				},
				'slidescroller-1': {
				'position': 'bottom',
				'size': 150,
				'xmlPath': '/videos/paradigmes-de-programmation-slidesync.xml'
				}
			}
		});</script></p><hr/> <strong>Tous les podcasts Xebia France :</strong></p><ul><li><a
href="itpc://blog.xebia.fr/feed/podcast/" title="Subscribe to the Podcast Feed with iTunes"><img
src="http://blog.xebia.fr/wp-content/plugins/podpress/images/itunes.png" class="podpress_feed_buttons" alt="Subscribe with iTunes"></a></li><li><a
href="http://blog.xebia.fr/feed/podcast/" title="Les podcasts de Xebia France vous permettent de suivre l'actualité autour de Java, de l'agilité, des technologies Web et bien d'autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agile."><img
src="http://blog.xebia.fr/wp-content/plugins/podpress/images/feed_button-rss-podcast.png" class="podpress_feed_buttons" alt="Xebia France Podcast Feed"></a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/09/15/paradigmes-de-programmation-par-nicolas-demengel/feed/</wfw:commentRss> <slash:comments>5</slash:comments> <enclosure
url="http://xebia-video.s3-website-eu-west-1.amazonaws.com/2011-09-paradigmes-de-programmation.mp4" length="162151657" type="audio/mpeg" /> <itunes:duration>1:23:57</itunes:duration> <itunes:subtitle>Suite à la lecture du livre &#171;&#160;Seven Languages in Seven Weeks&#160;&#187; (Bruce A. Tate), Nicolas Demengel nous a présenté les principaux paradigmes de programmation durant notre journée XKE. Nous souhaitons partager avec vous cette sessio[...]</itunes:subtitle> <itunes:summary>Suite à la lecture du livre &#171;&#160;Seven Languages in Seven Weeks&#160;&#187; (Bruce A. Tate), Nicolas Demengel nous a présenté les principaux paradigmes de programmation durant notre journée XKE. Nous souhaitons partager avec vous cette session au travers de cette vidéo.
Bon visionnage&#160;!
Paradigmes de programmation par Nicolas Demengel
Tous les podcasts Xebia France : </itunes:summary> <itunes:keywords>clojure, Erlang, Groovy, Haskell, JavaScript, Prolog, Python, Ruby, scala, vidéo, XKE</itunes:keywords> <itunes:author>Xebia France</itunes:author> <itunes:explicit>no</itunes:explicit> <itunes:block>no</itunes:block> </item> <item><title>Xebia accueille la 15ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/09/14/xebia-accueille-la-15eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/09/14/xebia-accueille-la-15eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Wed, 14 Sep 2011 09:43:32 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[Python]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8522</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu jeudi 15 Septembre à 19h30 dans les locaux de Xebia. Cette 15ème soirée du PSUG donnera lieu à un match au sommet entre Python, représenté par Sébastien Douche et Scala qui sera défendu par Alexandre Bertails. Nous espérons que le débat soit animé donc n&#8217;hésitez [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" title="Paris Scala User Group" >Paris Scala User Group</a> aura lieu jeudi 15 Septembre à 19h30 dans les locaux de Xebia.</p><p>Cette 15ème soirée du PSUG donnera lieu à un match au sommet entre <strong>Python</strong>, représenté par <a
href="http://www.parisjug.org/xwiki/bin/view/Speaker/DoucheSebastien" title="Sébastien Douche" >Sébastien Douche</a> et <strong>Scala</strong> qui sera défendu par <a
href="http://www.bertails.org/" title="Alexandre Bertails" >Alexandre Bertails</a>. Nous espérons que le débat soit animé donc n&#8217;hésitez pas à venir défendre vos couleurs !</p><p>Il reste encore quelques places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/afm3x6hmn9ef7uzs" title="inscrire" >inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <strong>Xebia</strong><br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> <strong>Immeuble A &#8211; 7e étage</strong></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/09/14/xebia-accueille-la-15eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia accueille la 14ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/07/08/xebia-accueille-la-14eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/07/08/xebia-accueille-la-14eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Fri, 08 Jul 2011 09:25:06 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[akka]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8164</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu le mardi 12 Juillet à 19h30 dans les locaux de Xebia. Le thème de cette 14ème soirée PSUG sera Akka qui nous sera présenté sous forme de kata par Alexis Agahi, notre Gentil Organisateur du PSUG. Akka est un framework écrit en scala et inspiré [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" title="Paris Scala User Group" >Paris Scala User Group</a> aura lieu le mardi 12 Juillet à 19h30 dans les locaux de Xebia.</p><p>Le thème de cette 14ème soirée PSUG sera <a
href="http://akka.io/" title="Akka" >Akka</a> qui nous sera présenté sous forme de <a
href="http://codekata.pragprog.com/2007/01/code_kata_backg.html" title="kata" >kata</a> par Alexis Agahi, notre Gentil Organisateur du PSUG.</p><p>Akka est un framework écrit en scala et inspiré d&#8217;Erlang OTP, permettant d&#8217;écrire des applications concurrentes, scalables et tolérantes aux pannes grâce aux <a
href="http://fr.wikipedia.org/wiki/Mod%C3%A8le_d%27acteur" title="Acteurs" >Acteurs</a>.</p><p>Il reste encore quelques places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/7i6qyeeiwysbazme" title="inscrire" >inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <strong>Xebia</strong><br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> <strong>Immeuble A &#8211; 7e étage</strong></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/07/08/xebia-accueille-la-14eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Xebia accueille la 13ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/06/16/xebia-accueille-la-13eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/06/16/xebia-accueille-la-13eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Thu, 16 Jun 2011 09:25:43 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[Play!]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=8042</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu le lundi 20 Juin à 19h30 dans les locaux de Xebia. Pour cette 13ème session, le PSUG aura le plaisir d&#8217;accueillir Guillaume Bort, le créateur de playframework, qui nous fera une démonstration de son utilisation avec le langage Scala. N&#8217;hésitez donc pas à nous rejoindre [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" title="Paris Scala User Group" >Paris Scala User Group</a> aura lieu le lundi 20 Juin à 19h30 dans les locaux de Xebia.</p><p>Pour cette 13ème session, le PSUG aura le plaisir d&#8217;accueillir <a
href="http://guillaume.bort.fr/" title="Guillaume Bort" >Guillaume Bort</a>, le créateur de <a
href="http://www.playframework.org/" title="playframework" >playframework</a>, qui nous fera une démonstration de son utilisation avec le langage Scala. N&#8217;hésitez donc pas à nous rejoindre si vous souhaitez en savoir plus sur ce très populaire framework.</p><p>Alexis Agahi, le maître de cérémonie du PSUG nous fera aussi un rapide retour sur la participation de quelques membres du User Group au challenge USI 2011.</p><p>Il reste encore quelques places, si vous souhaitez y assister, pensez à vous <a
href="http://www.doodle.com/99w96r4ypzbph2yb" title="inscrire" >inscrire</a> pour la logistique.</p><p>Notez bien l&#8217;adresse :<br
/> <strong>Xebia</strong><br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> <strong>Immeuble A &#8211; 7e étage</strong></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/06/16/xebia-accueille-la-13eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>What&#8217;s Next Paris 2011</title><link>http://blog.xebia.fr/2011/06/03/whats-next-paris-2011/</link> <comments>http://blog.xebia.fr/2011/06/03/whats-next-paris-2011/#comments</comments> <pubDate>Fri, 03 Jun 2011 11:38:19 +0000</pubDate> <dc:creator>Séven Le Mesle</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[akka]]></category> <category><![CDATA[AMQP]]></category> <category><![CDATA[clojure]]></category> <category><![CDATA[cloud]]></category> <category><![CDATA[Cloud / NoSQL]]></category> <category><![CDATA[Conference]]></category> <category><![CDATA[Flex Mobile]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[rabbitmq]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[WebSocket]]></category> <category><![CDATA[What's Next]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7943</guid> <description><![CDATA[Nous vous l&#8217;avions annoncé ici-même: les 26 et 27 mai derniers se tenait la conférence what&#8217;s next au grand rex à paris. organisée par zenika, cette conférence gravitait autour des technologies et des outils de demain pour la plateforme java et son écosystème. vous avez pu suivre l&#8217;évènement sur twitter en utilisant le hashtag #wsnparis, [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.xebia.fr/wp-content/uploads/2011/06/whats-next.jpg" style="float:right;"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/06/whats-next-300x222.jpg" alt="whats-next" title="whats-next" width="300" height="222" class="alignright size-medium wp-image-7944" /></a><br
/> Nous vous l&#8217;avions <a
href="http://blog.xebia.fr/2011/05/25/xebia-a-la-whats-next/" title="annoncé ici-même" >annoncé ici-même</a>: les 26 et 27 mai derniers se tenait la conférence <a
href="http://www.whatsnextparis.com/" title="what's next" >what&#8217;s next</a> au grand rex à paris. organisée par zenika, cette conférence gravitait autour des technologies et des outils de demain pour la plateforme java et son écosystème. vous avez pu suivre l&#8217;évènement sur twitter en utilisant le hashtag <a
href="http://twitter.com/#!/search?q=%23wsnparis" title="#wsnparis" >#wsnparis</a>, mais la revue de presse est l&#8217;occasion de vous faire un retour sur cette première conférence du genre en france. un public d&#8217;utilisateurs java avancés, des speakers de renommée internationale et même de la bière atlassian, le tout dans une organisation sans faille et un timing parfaitement respecté: bref, ce fut un réel plaisir de participer à l&#8217;évènement.</p><p>&nbsp;</p><h3><a
name="PremierJournbsp"></a>Premier Jour </h3><p>Tout commence par un petit mot d&#8217;accueil de <strong>Carl Azoury</strong> qui nous parle de l&#8217;investissement de Zenika dans l&#8217;organisation de l&#8217;évènement. Cinq mois de préparation, pour un budget total de 150k euros avec 35k d&#8217;entrée et 45k de financement par les sponsors. Bref, Zenika n&#8217;a pas ménagé ses efforts pour réussir cette grande première.</p><p>C&#8217;est ensuite au tour d&#8217;<strong>Adrian Colyer</strong> de venir nous parler des orientations prises par SpringSource. Voici les points marquants :</p><ul><li><a
href="http://www.springsource.org/spring-social" title="SpringSocial" >SpringSocial</a> permet de s&#8217;interfacer avec les SaaS des différents réseaux sociaux.</li><li><a
href="http://www.springsource.org/spring-mobile" title="SpringMobile" >SpringMobile</a> facilite le développement d&#8217;applications Android et de sites web destinés aux WebPhones.</li><li><a
href="http://www.springsource.org/spring-data" title="SpringData" >SpringData</a> vient faciliter l&#8217;utilisation de NoSQL sous toutes ses formes avec des annotations assurant le mapping des beans Java.</li><li><a
href="http://www.cloudfoundry.com/" title="CloudFoundry" >CloudFoundry</a> &#8212; le sujet principal de cette KeyNote &#8212; fournit un PaaS open source facile à utiliser permettant de faire du cloud publique, privé ou micro en local sur la machine du développeur.</li></ul><p><strong>Boris Bokowski</strong> prend la suite pour nous faire une démonstration autour d&#8217;<a
href="http://wiki.eclipse.org/Orion" title="Eclipse Orion" >Eclipse Orion</a>, un IDE en ligne développé en HTML5. Il s&#8217;agit en réalité d&#8217;un IDE pour le développement web qui intègre quelques fonctionnalités basiques comme la coloration syntaxique, la recherche, l&#8217;auto-complétion des mots clés, l&#8217;intégration des SCM comme Git et la possibilité de publier son travail via FTP ou SFTP. L&#8217;outil possède un système de plugin que nous n&#8217;avons pas pu découvrir pour cause d&#8217;effet démo. Boris y voit la possibilité d&#8217;intégrer une multitude de petits outils en ligne en définissant un réel standard. Pour ce qui est de l&#8217;éditeur en lui-même, il faut reconnaître que les performances sont impressionnantes: le navigateur ne ralentit pas même en éditant de très gros fichiers (15k lignes et plus). Au final, Orion ressemble davantage à un éditeur texte avancé du même type que notepad++ mais pas à un réel IDE. L&#8217;idée est intéressante mais il y a encore beaucoup de travail à réaliser pour en faire un outil capable de supplanter nos IDE lourds.</p><p>Après une pause déjeuner régime (un sandwich) un peu courte, <strong>Howard LewisShip</strong> vient nous présenter <a
href="http://clojure.org/" title="Clojure" >Clojure</a>. Clojure est un dialecte de <a
href="http://en.wikipedia.org/wiki/Lisp_(programming_language)" title="Lisp" >Lisp</a> (famille de langages fonctionnels) tournant sur la JVM. La syntaxe est sensée être plus légère que Java qui multiplie les accolades et autres crochets. Attention, le langage est presque purement fonctionnel et ne joue pas la mixité avec le paradigme objet. La présentation est parfaitement maîtrisée et Howard s&#8217;avère être un très bon speaker, malheureusement le langage apparait d&#8217;une complexité impressionnante avec une syntaxe très difficile d&#8217;accès pour les Javaistes que nous sommes. Comme souvent pour ce type de langage, Clojure se distingue dans la manipulation des collections. La grande majorité de l&#8217;auditoire est apparue quelque peu perdue dans la syntaxe, peut-être était-ce dû à l&#8217;effet digestion.</p><p>C&#8217;est ensuite au tour de <strong>Jevgeni Kabanov</strong> de prendre la parole dans une présentation pleine de vie sur la gestion de la mémoire dans la JVM. Tout commence par le CPU qui embarque sa propre gestion de la mémoire dans ses caches, puis Jevgeni nous parle de la mémoire paginée de l&#8217;OS pour finir par s&#8217;intéresser à la JVM proprement dite. Par exemple, l&#8217;utilisation du mot clé <code>volatile</code> empêche la mise en cache CPU de la donnée, tandis que le mot clé synchronized crée des points de synchronisation dans les registres du CPU. Jevgeni enchaîne avec le fonctionnement des différents garbage collectors et le problème des pauses GC qui bloquent la JVM. Il met en avant le ConcurrentMarkSweep qui permet d&#8217;obtenir des temps de pause courts mais au prix d&#8217;une forte fragmentation de la mémoire alors que le G First permet d&#8217;obtenir des temps de réponse courts sans fragmentation.  La conclusion vient enfin avec une courte introduction du travail réalisé par Azul sur la plateforme <a
href="http://www.azulsystems.com/products/zing" title="Zing" >Zing</a> qui permet de faire tourner des JVM sans pause GC. Une présentation très intéressante par un speaker de grande qualité.</p><p><strong>Jags Ramnarayan</strong> vient nous présenter SQLFire, qui n&#8217;est ni plus ni moins qu&#8217;un moteur SQL pour Gemfire. La solution permet de travailler en SQL sur la grille de mémoire. Parmi les points intéressants, on pourra noter que cela permet de travailler directement en JDBC sans avoir à utiliser une nouvelle API spécifique à la mode des NoSQL standards. La solution propose des transactions distribuées sans réaliser de verrouillage globale. SQLFire utilise quelques modifications du DDL pour gérer la distribution des données comme la réplication, et la co-localisation pour les données liées. Bref une solution intéressante qui peut avoir l&#8217;avantage de réduire le temps de prise en main des NoSQL pour ceux qui sont prêts à en payer la licence.</p><p>Le dernier slot est présenté par <strong>Brad Drysdale</strong> qui vient nous présenter les WebSockets d&#8217;HTML5. Cette nouvelle technologie portée par le W3C permet de réaliser des communications Full Duplex entre le serveur et le navigateur. Le gros avantage de cette solution par rapport aux autres techniques comme le polling et le long-polling, est de ne pas reposer sur le protocole HTTP qui est par essence très verbeux. Brad nous indique que cela permet de réduire drastiquement la consommation de bande passante pour les échanges client-serveur. La présentation est très didactique et sans démonstration, le but n&#8217;est pas de mettre en avant les solutions de Kaazing mais bel et bien la technologie en elle même. Brad est très convaincant, et la grande majorité de la salle semble vouloir se mettre aux WebSockets.</p><p>La journée se termine par une soirée organisée par Atlassian avec boisson et gâteaux apéritif, l&#8217;occasion idéale pour discuter de cette première entre auditeurs ou avec les speakers qui sont tous présents et disponibles.</p><h3><a
name="Deuximejour"></a><strong>Deuxième jour</strong></h3><p><strong>Neal Gafter</strong> ouvre le bal de cette deuxième journée par une présentation retraçant l&#8217;histoire de Java et son avenir &laquo;&nbsp;proche&nbsp;&raquo;. Nous ne décrirons pas ici la chronologie complète de Java. Depuis la première release en 95, la technologie connaît un succès croissant jusque dans le début des années 2000 ou le nombre de participants à la JavaOne commence à fluctuer à la baisse. Les évolutions du langage sont très importante jusqu&#8217;en 2004 à la sortie de la J2SE 5.0.<br
/> Là, Neal en profite pour nous parler de Java Puzzler publié en 2005 et nous donne 2 exemples tirés du livre ; l&#8217;assemblée se prête volontier à cet exercice amusant. Puis viens 2006 avec la publication de Java 6, de JEE 5 et la distribution de la JVM HotSpot sous GPLv2. Les nouvelles versions se sont enchainées tous les deux ans, mais en 2007 alors que SUN travaille à l&#8217;OpenJDK sous licence GPL, Apache annonce Harmony, son implémentation de Java sous licence ASF. La discorde commence entre SUN et Apache au sujet de la licence du TCK qui n&#8217;est pas compatible avec la licence d&#8217;Harmony, interdisant du même coup la validation du projet Harmony comme compatible Java 5. Oracle demande d&#8217;ailleurs courant 2007 à SUN de supprimer les limitations de la fameuse licence pour permettre la validation d&#8217;Harmony. A noter tout de même qu&#8217;en 2002 SUN avait annoncé être prêt à ouvrir la licence du TCK. En 2009, JEE 6 est finalement approuvé malgré de nombreuses discordes. Pour en finir en 2010, année du rachat de SUN par Oracle, qui fait bouger les choses, en forçant le JCP à approuver les futures version 7 et 8 de la J2SE. IBM le contributeur principal va aussi abandonner Harmony au profit de l&#8217;OpenJDK. Apache claque la porte du JCP, Oracle lance un procès contre Google au sujet de Dalvik la VM d&#8217;android qui repose en partie sur Harmony et confirme que la licence du TCK ne changera pas. Voilà pour la chronologie, Neal passe ensuite naturellement aux évolutions embarquées dans Java 7 et 8 avec des exemples de code source à l&#8217;appui, petit rappel utile de ce qui nous attend pour 2011 et 2012. Il conclut que le progrès et l&#8217;innovation fonctionnent mieux quand il y a quelqu&#8217;un pour tenir la barre.</p><p>Il passe enfin la parole à un collègue qui nous présente rapidement <a
href="http://www.microsoft.com/france/windows-azure/" title="Windows Azure" >Windows Azure</a> - le cloud par Microsoft &#8211; qui supporte beaucoup de plateformes de développement. L&#8217;offre permet de déployer ses applications sans se soucier de la scalabilité ou des VM qui font tourner le service. La solution rappelle fortement CloudFoundry, mais c&#8217;est encore un système propriétaire. Parmi les service embarqués on retient la mise à disposition d&#8217;une base SQL. Il y a un plugin eclipse Azure4J, la base est disponible en SQL par JDBC, elle serait d&#8217;ailleurs compatible avec JPA (étonnant pour une base distribuée). La solution a l&#8217;air intéressant et il est agréable de constater les efforts fournis par Microsoft pour les développements Java. Pour plus d&#8217;information consultez le site <a
href="http://www.windowsazure4j.org/" title="Waz4j" >Waz4j</a>. </p><p>C&#8217;est ensuite <strong>Rob Harrop</strong> qui prend la parole et nous présente <a
href="http://www.rabbitmq.com/" title="RabbitMQ" >RabbitMQ</a> ce bus de message multi-protocole basé sur AMQP. RabbitMQ supporte la plupart des langages Java, Python, Ruby, NodeJs et j&#8217;en passe. Il développe sous nos yeux un petit système envoyant le cours des actions de plusieurs groupes, il développe ensuite des consommateurs en Python en Ruby et va jusqu&#8217;à se connecter en Telnet sur son instance RabbitMQ pour recevoir les messages. Le système permet de convertir les messages vers STOMP, XMPP et HTTP en transmettant toujours le même contenu. Rob Harrop développe un serveur web NodeJs qui reçoit les messages du bus et les transmet dans une WebSocket. Après quelques passages d&#8217;un terminal à l&#8217;autre, Rob affiche la page dans son navigateur et les chiffres défilent instantanément à l&#8217;écran. La démonstration est vraiment convaincante et l&#8217;assemblée l&#8217;accueille avec enthousiasme. </p><p>Après un déjeuné frugal, nous accueillons <strong>Theo Schlossnagle</strong> qui vient nous parler d&#8217;architecture. Il commence par prendre le contre-pied de la mode cloud et NoSQL en avançant que nous avons déjà bien assez de puissance de calcul chez nos clients et qu&#8217;il faut commencer par faire fonctionner nos systèmes avec les ressources dont nous disposons. Les systèmes distribués n&#8217;empêchent pas les défauts d&#8217;une architecture. Dans la majorité des cas, il faut repenser les systèmes. Le conseil majeur de Theo est d&#8217;éviter la complexité, les systèmes simples sont bien plus faciles à développer, tester et déployer. Il faut donc découpler les services afin de les maintenir simples et isolés.  Là, il nous met en garde, car cela nécessite l&#8217;utilisation de bus de messages, ce qui s&#8217;avère complexe. Voici quelques uns de ces conseils avisés :</p><ul><li>Utilisez des traitements asynchrones.</li><li>Simulez l&#8217;ensemble du système en développement pour le faire tomber au plus tôt, car une architecture finit toujours par casser.</li><li>Mettez en place du code défensif (timeouts, heartbeat, &#8230;)</li><li>Assurez la supervision complète du système (Temps de réponses, Nombre de clients, Taille des files d&#8217;attente, &#8230;)</li></ul><p>Pour tout dire une présentation riche et instructive.</p><p><strong>Michaël Chaize</strong>, prend la suite pour nous présenter la plateforme Flex, dont nous avons déjà parlé sur le <a
href="http://blog.xebia.fr/tag/flex/" title="blog" >blog</a>. Il nous présente d&#8217;abord quelques applications réalisées par Adobe, avec des interfaces tres graphiques et interactives.  Une petite pique au HTML5, puis il passe à une démonstration mobile en développant une application listant les Tweets #wsnparis. Michaël utilise FlexBuilder pour son développement, rapidement il lance l&#8217;application dans un simulateur Android. Il nous liste les plateformes supportées (Android, BlackBerry, ios). Un auditeur le rejoint sur la scène et nous présente une application développée par ses soins, déployée sur deux téléphones et une tablette. L&#8217;interface s&#8217;adapte bien à chaque taille d&#8217;écran et chaque définition. Les démonstrations ont l&#8217;air fluide sur les mobiles et Michaël insiste sur les efforts fournis pour optimiser les performances de la machine virtuelle. La présentation est convaincante et l&#8217;argument de la portabilité mobile pèse dans la balance, comme nous l&#8217;avions vu lors du <a
href="http://blog.xebia.fr/2011/04/08/retrospective-de-notre-xke-d-avril/" title="XKE davril" >XKE d&#8217;avril</a>.</p><p><strong>Jonas Bonér</strong> vient ensuite nous parler d&#8217;<a
href="http://akka.io" title="AKKA" >AKKA</a> le framework développement orienté acteur.  Il nous présente d&#8217;abord ce que sont les acteurs à savoir des unités de traitements isolées orientées messages. Chaque acteur possède un état, une mémoire propre et s&#8217;exécute dans un Thread réservé. Akka tente de résoudre trois problèmes essentiels des systèmes informatiques :</p><ul><li>Scalabilté (fonctionnement réparti et distribué).</li><li>Tolérance à la panne</li><li>Concurrence d&#8217;exécution</li></ul><p>Les acteurs sont asynchrones par essence, mais il est possible d&#8217;attendre le résultat du traitement d&#8217;un message via l&#8217;utilisation d&#8217;un Future. Les acteurs distants permettent d&#8217;assurer la distribution et la scalabilité. Le mode cluster sera disponible en version 2.0, il repose sur l&#8217;utilisation de <a
href="http://zookeeper.apache.org/" title="ZooKeeper" >ZooKeeper</a> et permet de créer des grilles sans connaître la topologie réseau à priori. Jonas nous parle ensuite de la tolérance à la panne en nous expliquant la detection des noeuds cassés, et le système de recouvrement automatique. Sur le slide, le système à l&#8217;air réellement fiable, en cas d&#8217;erreur les noeuds sont d&#8217;abord tués puis redémarrés.  La présentation donne vraiment envie de tester cette technologie émergente issue de <a
href="http://www.scala-lang.org/" title="Scala" >Scala</a> et qui d&#8217;ailleurs fait parti de la stack <a
href="http://typesafe.com/" title="TypeSafe" >TypeSafe</a>. </p><p><strong>Shay Banon</strong> prend maintenant la parole pour nous présenter <a
href="http://www.elasticsearch.org/" title="ElasticSearch" >ElasticSearch</a> une solution d&#8217;indexation et de recherche construite au dessus de <a
href="http://lucene.apache.org/" title="Lucene" >Lucene</a> avec la particularité de fonctionner en cluster avec la distribution des index et leur réplication sur un ou plusieurs noeuds du système. Tout se déroule dans un terminal dans lequel le speaker lance des requêtes en curl sur le serveur qu&#8217;il a lancé en local. Petit à petit il nous montre des exemples de plus en plus complexes, en commençant par la création d&#8217;un serveur simple puis d&#8217;un cluster. Il enchaîne ensuite avec une indexation basique en augmentant la complexité régulièrement. Tous les échanges sont réalisés en Rest Json. La recherche utilise directement la syntaxe Lucene, il est même possible d&#8217;utiliser des requêtes pré-définies avec Percolator. La démonstration est intéressante bien que cela manque un peu de vie, je ne suis pas vraiment convaincu par l&#8217;outil, la plus-value par rapport à <a
href="http://lucene.apache.org/solr/" title="Solr" >Solr</a> n&#8217;est pas évidente.</p><p>Pour conclure cette journée de conférences, <strong>Kohsuke Kawaguchi</strong> se lance dans une présentation sur l&#8217;avenir de l&#8217;intégration et des outils du développeur en général. Il constate que nous avons de plus en plus de machines de plus en plus puissantes, le développeur est le berger d&#8217;un troupeau d&#8217;ordinateurs. Il faut donc aider le berger à tirer partie au mieux de toute cette puissance de calcul. Pour choyer le développeur qui est une denrée rare par rapport au datacenter, Kohsuke nous donne quelques pistes: </p><ul><li>Distribuer les builds</li><li>Augmenter et améliorer le parallélisme (Compilation, Test unitaires, <a
href="http://java.net/projects/parallel-junit" title="Parallel Junit" >Parallel Junit</a>, TestNG, &#8230;)</li><li>Utiliser un SCM distribué</li></ul><p>Cette liste n&#8217;est pas exhaustive et il faut bien reconnaître que Kohsuke a beaucoup d&#8217;idées pleines de bon sens. Il propose même de déporter définitivement la compilation et les tests sur le serveur d&#8217;intégration pour éviter au développeur la perte de temps considérable que cela représente. J&#8217;avoue avoir encore quelques doutes, mais en exécutant les tests unitaires avant de pousser vos sources sur Git ou Mercurial pourquoi pas.</p><h3><a
name="Conclusion"></a>Conclusion</h3><p>La conférence est une réussite de mon point de vue d&#8217;auditeur, le contenu était dense mais cela nous a assuré deux jours de veille technologique fort sympathiques. L&#8217;ambiance était bonne et puisque Zenika l&#8217;a annoncée, ce sera un plaisir de venir à la prochaine édition. Voilà pour l&#8217;ambiance et l&#8217;organisation, mais je ne peux m&#8217;arrêter là sans faire le tour des grandes tendances ressenties à la What&#8217;s Next. La scalabilité est sur toutes les lèvres, l&#8217;idée ne semble pas nouvelle mais il n&#8217;est pas possible de parler de cette conférence sans écrire ce mot magique. Il faut aussi noter la presque omniprésence des langages fonctionnels, Scala et NodeJS en tête. Les systèmes sont de plus en plus polyglottes et il faudra compter avec ces nouveaux langages pour les futurs développements. Remarquez aussi, pour ceux qui ne l&#8217;avait pas encore en tête, que le standard HTML5 devient de plus en plus incontournable. Enfin, notez que le cloud est lui aussi sur le devant de la scène, les solutions PAAS de SpringSource et Microsoft annoncent à mon sens une démocratisation de ce type d&#8217;architecture. C&#8217;est aussi une démocratisation assez globale de l&#8217;utilisation des NoSQL ou plus exactement des bases de données distribuées. Après ces deux derniers points, je reprendrai les conseils de Theo Schlossnagle : avant de penser au cloud, commencez par résoudre les problèmes que vous rencontrez sur vos architectures en pensant aux traitements asynchrones, à la programmation défensive et à la simplicité avant tout.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/06/03/whats-next-paris-2011/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Xebia accueille la 12ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/05/23/xebia-accueille-la-12eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/05/23/xebia-accueille-la-12eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Mon, 23 May 2011 16:30:54 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7808</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu le jeudi 26 Mai à 19h30 dans les locaux de Xebia. Cette soirée donnera un petit avant goût de la conférence Scala Days 2011 qui aura lieu outre-atlantique dans la prestigieuse université de Stanford en Californie. Nous accueillerons donc Rémy-Christophe Schermesser qui nous déroulera en [...]]]></description> <content:encoded><![CDATA[<p><img
title="scala-logo" src="http://blog.xebia.fr/wp-content/uploads/2011/05/scala-logo.png" alt="scala-logo" width="198" height="59" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
title="Paris Scala User Group" href="http://groups.google.com/group/paris-scala-user-group">Paris Scala User Group</a> aura lieu le jeudi 26 Mai à 19h30 dans les locaux de Xebia.</p><p>Cette soirée donnera un petit avant goût de la conférence <a
title="Scala Days 2011" href="http://days2011.scala-lang.org/">Scala Days 2011</a> qui aura lieu outre-atlantique dans la prestigieuse université de Stanford en Californie. Nous accueillerons donc <a
title="RmyChristophe Schermesser" href="http://blog.octo.com/author/rcs/">Rémy-Christophe Schermesser</a> qui nous déroulera en avant première le sujet qu&#8217;il présentera aux Scala Days : <em>&laquo;&nbsp;Scala from a Rubyist point of view&nbsp;&raquo;</em>.</p><p>Il reste encore des places, si vous souhaitez y assister, pensez à vous <a
title="inscrire" href="http://www.doodle.com/vmvtyvqgiip75hwg">inscrire</a> pour la logistique.</p><p>Notez bien l’adresse :<br
/> <strong>Xebia</strong><br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> <strong>Immeuble A &#8212; 7e étage</strong></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/05/23/xebia-accueille-la-12eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/</link> <comments>http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/#comments</comments> <pubDate>Tue, 17 May 2011 17:37:46 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[akka]]></category> <category><![CDATA[Eclipse]]></category> <category><![CDATA[IDE]]></category> <category><![CDATA[IDEA]]></category> <category><![CDATA[Netbeans]]></category> <category><![CDATA[SBT]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[Spring ROO]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7742</guid> <description><![CDATA[La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Création de TypeSafe et sorties conjointes de Scala 2.9 et Akka 1.1 Sortie de Spring Roo 1.1.4 Le coin de la technique Sortie de IntelliJ IDEA 10.5 et baisse des tarifs Actualité éditeurs / SSII Création de TypeSafe et sorties [...]]]></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" /></p><p><em>La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/#CrationdeTypeSafeetsortiesconj">Création de TypeSafe et sorties conjointes de Scala 2.9 et Akka 1.1</a></li><li><a
href="http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/#SortiedeSpringRoo">Sortie de Spring Roo 1.1.4</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/#SortiedeIntelliJIDEAetbaissede">Sortie de IntelliJ IDEA 10.5 et baisse des tarifs</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="CrationdeTypeSafeetsortiesconj"></a>Création de TypeSafe et sorties conjointes de Scala 2.9 et Akka 1.1</h4><p>Jeudi dernier, Martin Odersky a <a
title="annoncé" href="http://blog.typesafe.com/introducing-typesafe">annoncé</a> la création de la société <a
title="TypeSafe" href="http://typesafe.com/">TypeSafe</a> avec d&#8217;autres acteurs importants du monde <em>Scala</em> tel que <em>Jonas Bonér</em> (créateur de la librairie <a
title="Akka" href="http://akka.io/">Akka</a>) ou encore <em>Mark Harra</em> (créateur de <a
title="sbt" href="http://code.google.com/p/simple-build-tool/">sbt</a>) pour ne citer qu&#8217;eux. Notez qu&#8217;en regardant la liste des personnes impliquées dans la société <em>TypeSafe</em>, on peut voir que <em>James Gosling</em> et <em>Doug Lea</em> sont cités en tant que conseillers.</p><p>La vocation de cette nouvelle société est de promouvoir et de fournir un support commercial aux divers composants proposés :</p><ul><li>le langage <em>Scala</em> qui est un langage orienté objet et fonctionnel,</li><li>le middleware <em>Akka</em> qui fournit les services de base permettant d&#8217;obtenir une scalabilité horizontale et verticale ainsi que la tolérance aux pannes de vos applications,</li><li>l&#8217;outil <em>Simple Build Tool</em> permettant de construire vos applications,</li><li>le <a
title="plugin" href="http://www.scala-ide.org/">plugin</a> <em>Scala IDE</em> permettant de développer en <em>Scala</em> sous <em>Eclipse</em>.</li></ul><p>Le langage <em>Scala</em> gagnant progressivement en popularité, notamment dans le monde bancaire et financier, il devenait nécessaire d&#8217;apporter un support commercial au travers d&#8217;une société regroupant les personnes et les moyens nécessaires (3M$ levés à l&#8217;occasion). Le langage Scala est par ailleurs toujours développé dans le cadre du laboratoire <a
title="LAMP" href="http://lamp.epfl.ch/">LAMP</a> de l&#8217;EPFL qui à <a
title="reu rcemment" href="http://www.scala-lang.org/node/8579">reçu récemment</a> un financement de l&#8217;Union Européenne pour le développement de technologies liées à la scalabilité.</p><p>L&#8217;annonce de la création de <em>TypeSafe</em> à été accompagnée par deux autre annonces de tailles :</p><ul><li>la <a
title="sortie" href="http://www.scala-lang.org/node/9483">sortie</a> de la version finale de <em>Scala 2.9</em>,</li><li>et la <a
title="sortie" href="http://groups.google.com/group/akka-user/browse_thread/thread/d0f8a23196220f10">sortie</a> de la version 1.1 du framework Akka.</li></ul><p>Vous pourrez trouver plus de détails sur les nouveautés de <em>Scala 2.9</em> dans <a
title="cette entre" href="http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/#Scalaestsurlesrails">cette entrée</a> consécutive à la sortie de la première <em>Release Candidate</em>. La principale nouveauté de cette version reste tout de même le support des <em>Parrallel Collections</em> permettant le traitement en parallèle des opérations sur les collections.</p><p>L&#8217;autre annonce concerne le projet <em>Akka</em>. <em>Akka</em> est un middleware permettant la mise en place d&#8217;architectures scalables, <em>Event Driven</em> et tolérante aux pannes, largement inspiré du monde des télécoms (notamment <a
title="Erlang OTP" href="http://www.erlang.org/">Erlang OTP</a>). Les fonctionnalités offertes par <em>Akka</em> sont :</p><ul><li>support des Acteurs (dans un modèle un peu différent de celui fournit dans la librairie standard de <em>Scala</em>),</li><li>la tolérance aux pannes et la haute disponibilité (utilisant le modèle <em>&laquo;&nbsp;Let it crash / Embrace failure&nbsp;&raquo;</em>),</li><li>le modèle de <em>Software Transaction Memory</em> permettant la définition d&#8217;opérations transactionnelles sur des objets en mémoire,</li><li>les <em>Transactors</em> appliquant le <em>STM</em> au modèle des <em>Acteurs</em>,</li><li>les acteurs distribués (scalabilité verticale),</li><li>la concurrence à l&#8217;aide d&#8217;<em>Agents</em> et de <em>DataFlow</em>,</li><li>une API disponible en <em>Scala</em> ainsi qu&#8217;en Java (le middleware <em>Akka</em> est écrit en <em>Scala</em>).</li></ul><p>La version 1.1 de <em>Akka</em> apporte notamment le support de la version 2.9 de <em>Scala</em>, une réduction des dépendances externes, l&#8217;amélioration des <em>APIs</em> et de nombreuses corrections de bugs et amélioration de performances.</p><p>Avec cette annonce, on peut espérer que le langage <em>Scala</em> gagne un peu plus de terrain dans le monde de l&#8217;entreprise.</p><h4><a
name="SortiedeSpringRoo"></a>Sortie de Spring Roo 1.1.4</h4><p>Spring Roo vient juste de mettre à disposition sa version 1.1.4 disponible <a
title="ici" href="http://www.springsource.com/download/community?project=Spring%20Roo">ici</a>. Pour rappel, Spring Roo est un IDE texte pour le développement rapide d&#8217;applications Java. A la manière d&#8217;un Grails, vous pouvez générer une application complète <a
title="en quelques minutes" href="http://www.springsource.org/roo/start">en quelques minutes</a>.</p><p>Cette version apporte <a
title="de nombreuses" href="https://jira.springsource.org/secure/ReleaseNote.jspa?projectId=10340&amp;version=11817">de nombreuses</a> corrections de bogues et améliorations dont les principales sont :</p><ul><li>Support de <strong>Google App Engine</strong> 1.4.3 et du plugin <strong>maven-gae-plugin</strong> en version 0.8.4</li><li>Montée de version <strong>Hibernate</strong>, Spring Roo passe de la version 3.6.1.Final à la version 3.6.3.Final</li><li>Montée de version du driver <strong>SolrJ</strong> en version 1.4.1</li></ul><p>La prochaine version prévue portera le numéro <a
title="1.2.0" href="https://jira.springsource.org/secure/ReleaseNote.jspa?projectId=10340&amp;version=11708">1.2.0</a> et apportera de nouvelles fonctionnalités (Support de JSF 2.0, amélioration <a
title="DBRE" href="http://static.springsource.org/spring-roo/reference/html-single/index.html#base-dbre">DBRE</a>, &#8230;).</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="SortiedeIntelliJIDEAetbaissede"></a>Sortie de IntelliJ IDEA 10.5 et baisse des tarifs</h4><p><em>Jetbrains</em> vient juste d&#8217;<a
title="annoncer" href="http://blogs.jetbrains.com/idea/2011/05/intellij-idea-105-released-new-technologies-new-features-new-pricing/">annoncer</a> la sortie d&#8217;une nouvelle version de son produit phare <a
title="Intellij IDEA" href="http://www.jetbrains.com/idea/">Intellij IDEA</a>.</p><p>Cette nouvelle version apporte un certain nombre de nouveauté dont :</p><ul><li>le support complet de <em>Java 7</em> qui doit sortir cet été,</li><li>un nouveau système de complétion (avec notamment un mode de complétion type camel-case sans utiliser de majuscules),</li><li>le support de tout <a
title="nouveau" href="http://blog.xebia.fr/2011/05/04/revue-de-presse-xebia-209/#SortiedelaversiondeGroovy">nouveau</a> <em>Groovy 1.8</em>,</li><li>le <a
title="support amlior" href="http://blogs.jetbrains.com/idea/2011/05/better-spring-with-intellij-idea-105/">support amélioré</a> de <em>Spring</em> et de <em>Spring Integration</em> ainsi que la prise en compte du futur <em>Spring 3.1</em> ,</li><li>le debug du code javascript dans <em>Chrome</em>,</li><li>l&#8217;intégration du serveur <em>Jetty</em>,</li><li>support de <em>XSLT2</em>,</li><li>tout un tas d&#8217;amélioration dans le support de différents langages et framework : <em>Grails</em>, <em>Flex</em>, <em>Javascript</em>, <em>Android</em> &#8230;</li><li>et les inévitables corrections de bugs et amélioration de performances.</li></ul><p>A noter que le développement du plugin <em>Scala</em> (sujet d&#8217;actualité dans cette revue de presse) suit son petit bonhomme de chemin et apporte un confort de plus en plus grand aux utilisateurs de ce superbe langage.</p><p>Autre nouveauté qui coïncide avec cette nouvelle version : le <a
title="prix" href="http://www.jetbrains.com/idea/buy/index.jsp">prix</a> ! Comme vous pouvez le constater, l&#8217;acquisition d&#8217;une nouvelle licence ou la mise à jours de la version &laquo;&nbsp;Ultimate&nbsp;&raquo; bénéficie de tarifs sensiblement moins élevés. Notez bien, en revanche, que pour les détenteurs d&#8217;une licence de la version 10, le passage en version 10.5 se fait gratuitement. Pour tous, la version &laquo;&nbsp;Community&nbsp;&raquo;, open source mais aux fonctionnalités plus limitées, reste gratuite.</p><p>Pour faire le tour des IDE principaux, rappelons que Netbeans 7 <a
title="est lui sorti" href="http://www.developpez.com/actu/31254/NetBeans-7-disponible-en-version-finale-avec-le-support-de-la-version-beta-d-OpenJDK-7-et-de-nombreuses-ameliorations/">est lui sorti</a> courant avril, avec aussi le support de Java 7 en plus de <a
title="nombreuses amliorations" href="http://netbeans.org/community/releases/70/">nombreuses améliorations</a>. Et pour finir, ce sera le 22 juin que sortira Eclipse 3.7, de son petit nom &laquo;&nbsp;Indigo&nbsp;&raquo;. Nous découvrirons alors si le plugin m2Eclipse a finalement été intégré à la distribution Eclipse (il n&#8217;est toujours pas dans les dernières version <em>Milestone</em>) et si le support de Git est désormais bien fourni de base. En tout cas, cette version supportera elle aussi la majorité des nouveautés de Java 7.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/05/17/revue-de-presse-xebia-211/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Soirée Scala au Lorraine JUG</title><link>http://blog.xebia.fr/2011/05/13/soiree-scala-au-lorraine-jug/</link> <comments>http://blog.xebia.fr/2011/05/13/soiree-scala-au-lorraine-jug/#comments</comments> <pubDate>Fri, 13 May 2011 05:05:14 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JUG]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7693</guid> <description><![CDATA[Et 1, et 2, et 2.9 ! Ce n&#8217;est pas au stade que cela se passe mais à l&#8217;ESIAL : Scala, dont la toute dernière version est d&#8217;ailleurs disponible depuis hier, est à nouveau mis à l&#8217;honneur et cette fois-ci au Lorraine JUG. Je vous donne rendez-vous le mercredi 18 mai pour une soirée de [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/12/logo-lorrainejug.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> Et 1, et 2, et 2.9 ! Ce n&#8217;est pas au stade que cela se passe mais à l&#8217;ESIAL : Scala, dont la toute dernière version est d&#8217;ailleurs disponible depuis hier, est à nouveau mis à l&#8217;honneur et cette fois-ci au <a
href="http://lorrainejug.blogspot.com/2011/04/le-lorraine-jug-java-user-group-de.html" title="Lorraine JUG" >Lorraine JUG</a>. Je vous donne rendez-vous le mercredi 18 mai pour une soirée de deux heures consacrée à Scala avec au programme :</p><ul><li>Ses origines</li><li>Les outils et frameworks de son écosystème</li><li>Les difficultés et freins à son adoption</li><li>Les nouveautés de la toute nouvelle version 2.9.0</li><li>Les entreprises qui l’utilisent</li><li>Une session d&#8217;une heure de live coding : exemples de programmation fonctionnelle, un <a
href="http://aperiodic.net/phil/scala/s-99/" title="S-99" >S-99</a> et&#8230; du <a
href="http://scala.playframework.org/" title="Play Framework" >Play Framework</a> !</li></ul><p>Les inscriptions se passent par <a
href="http://jugevents.org/jugevents/event/37403" title="ici" >ici</a>. Venez nombreux !</p><div
align="center"><a
href="http://twitter.com/rmat0n"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/04/twitter4.png" /></a></div> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/05/13/soiree-scala-au-lorraine-jug/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Xebia accueille la 11ème soirée du Paris Scala User Group</title><link>http://blog.xebia.fr/2011/04/22/xebia-accueille-la-11eme-soiree-du-paris-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/04/22/xebia-accueille-la-11eme-soiree-du-paris-scala-user-group/#comments</comments> <pubDate>Fri, 22 Apr 2011 07:00:04 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7545</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu le jeudi 28 avril à 19h30 dans les locaux de Xebia. Cette soirée sera animée par Miles Sabin, un important promoteur du langage Scala. Miles nous expliquera comment Scala peut nous aider à simplifier notre code et à nous débarrasser de ce qui est inutile [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/05/scala-logo.png" alt="Scla user group xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group" title="Paris Scala User Group" >Paris Scala User Group</a> aura lieu le jeudi 28 avril à 19h30 dans les locaux de Xebia.</p><p>Cette soirée sera animée par <a
href="http://www.chuusai.com/" title="Miles Sabin" >Miles Sabin</a>, un important promoteur du langage Scala. Miles nous expliquera comment Scala peut nous aider à simplifier notre code et à nous débarrasser de ce qui est inutile ou répétitif avec sa présentation <a
href="http://skillsmatter.com/podcast/scala/talk-by-scala-expert-miles-sabin" title="Scrap your boilerplate with Scala" >&laquo;&nbsp;Scrap your boilerplate with Scala&nbsp;&raquo;</a>.</p><p>Il reste encore des places, si vous souhaitez y assister, pensez à vous <a
href="http://www.google.com/url?sa=D&#038;q=http://www.doodle.com/wsuqum35fz427aim" title="inscrire" >inscrire</a> pour la logistique.</p><p>Notez bien l’adresse :<br
/> <strong>Xebia</strong><br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> <strong>Immeuble A – 7e étage</strong></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/04/22/xebia-accueille-la-11eme-soiree-du-paris-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/</link> <comments>http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/#comments</comments> <pubDate>Tue, 19 Apr 2011 08:24:21 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Ceylon]]></category> <category><![CDATA[monitoring]]></category> <category><![CDATA[Nudge]]></category> <category><![CDATA[Play!]]></category> <category><![CDATA[Rails]]></category> <category><![CDATA[Red Hat]]></category> <category><![CDATA[Saas]]></category> <category><![CDATA[scala]]></category> <category><![CDATA[SCRUM]]></category> <category><![CDATA[Websphere]]></category> <category><![CDATA[xss]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7514</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII IBM dévoile WebSphere 8 Sortie de Play! Framework 1.2 Nudge, une plate-forme hébergée de monitoring de performance applicative (SaaS) Sortie de Rails 3.0.6 corrigeant une faille de sécurité de type XSS Le coin de la technique Red Hat prépare Ceylon, [...]]]></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/2011/04/19/revue-de-presse-xebia-207/#WebSphere">IBM dévoile WebSphere 8</a></li><li><a
href="http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/#Sortiesdeplayframeworketscalap">Sortie de Play! Framework 1.2</a></li><li><a
href="http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/#Nudgeuneplateformehbergedemoni">Nudge, une plate-forme hébergée de monitoring de performance applicative (SaaS)</a></li><li><a
href="http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/#SortiedeRailscorrigeantunefail">Sortie de Rails 3.0.6 corrigeant une faille de sécurité de type XSS</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/#RedHatprpareCeylonunnouveaulan">Red Hat prépare Ceylon, un nouveau langage pour la 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/2011/04/19/revue-de-presse-xebia-207/#ScrumDaycommesivousytiez">Scrum Day 2011: comme si vous y étiez!</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="WebSphere"></a>IBM dévoile WebSphere 8</h4><p>Nos confrères du <a
href="http://www.lemondeinformatique.fr/actualites/lire-ibm-lancera-websphere-8-en-juin-33448.html" title="Monde Informatique" >Monde Informatique</a> et du <a
href="http://www.journaldunet.com/developpeur/java-j2ee/websphere-8-et-un-ide-html5-0411.shtml" title="Journal du Net" >Journal du Net</a> reviennent sur la conférence <a
href="http://www-01.ibm.com/software/websphere/events/impact/" title="Impact 2011" >Impact 2011</a>, qui se tenait à Las Vegas les 12 et 13 avril derniers, au cours de laquelle IBM a notamment présenté les grandes lignes de la version 8 de son célèbre serveur d&#8217;applications.</p><p>Disponible en version bêta depuis le mois de mars &#8212; la sortie officielle étant prévue pour juin &#8212; cette dernière version est 100% compatible avec Java EE 6. Parmi la longue liste de fonctionnalités <a
href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wsasoa/index.shtml" title="au programme de cette nouvelle mouture" >au programme de cette nouvelle mouture</a>, citons le support des standards suivants :</p><ul><li>Enterprise JavaBeans (EJB) 3.1</li><li>Java Persistence API (JPA) 2.0</li><li>JavaServer Faces (JSF) 2.0</li><li>JavaServer Pages (JSP) 2.2</li><li>Servlet 3.0</li><li>JAXB 2.2</li><li>JAX-WS 2.2, et notamment le support de Web Services Security API (WSS API) et WS-Trust, censés faciliter le SSO à l&#8217;aide de web services.</li></ul><p>WebSphere 8 devrait apporter également:</p><ul><li>une meilleure prise en charge des applications OSGi;</li><li>une meilleure intégration des web services utilisant WS-Security SAML Token Profile 1.1;</li><li>un support de SIP Servlet 1.1 afin de favoriser l&#8217;utilisation d&#8217;applications de communication;</li><li>le support du cache L2 de JPA à l&#8217;aide de DynaCache (le cache par défaut utilisé dans WebSphere);</li><li>une intégration simplifiée avec WebSphere MQ.</li></ul><p>IBM semble également avoir voulu contenter les développeurs d&#8217;applications (il était temps, diront certains): non seulement le serveur semble démarrer plus rapidement, mais surtout le processus de déploiement a été simplifié, et il sera désormais possible de (re)déployer une application avec un simple <em>drag&#8217;n drop</em>.</p><h4><a
name="Sortiesdeplayframeworketscalap"></a>Sortie de Play! Framework 1.2</h4><p>La version 1.2 du framework <a
href="http://www.playframework.org/" title="Play" >Play!</a> vient tout juste de voir le jour. Pour ceux qui ne le connaitraient pas encore, Play est un framework web orienté haute productivité. Comme son cousin Grails, il repose sur des conventions, est extensible via des plugins et supporte le rechargement à chaud des modifications du code.</p><p>Les nouveautés apportées par cette <a
href="http://www.playframework.org/documentation/1.2/releasenotes-1.2" title="nouvelle version">nouvelle version</a> sont nombreuses :</p><ul><li>ajout d&#8217;un système de gestion de dépendances basé sur <em>Ivy</em>, permettant de récupérer des modules Play ou toutes autres librairies requises,</li><li>support du <em>Long Polling</em> et des <em>Web Sockets</em>, pour les connections asynchrones,</li><li>introduction d&#8217;un mécanisme de gestion des évolutions des schémas de bases de données,</li><li>ajout du concept d&#8217;<em>Invocation</em> permettant la mise en place de mécanismes équivalent aux <em>Servlet Filters</em> ou à l&#8217;<em>AOP</em> (pour la déclaration des transactions à l&#8217;arrivée d&#8217;une requête par exemple),</li><li>support des bases <em>H2</em>, maintenant embarquées par défaut,</li><li>possibilité de lancer les tests <em>JUnit</em> directement dans <em>Eclipse</em> (sans passer par la page de tests),</li><li>une meilleure documentation du framework, avec notamment une <em>Cheat-Sheet</em>, toujours accessible en mode déconnecté.</li></ul><p>Cette version 1.2 est accompagnée de la version 0.9 du plugin Scala pour Play. Ce plugin permet l&#8217;utilisation du <a
href="http://www.scala-lang.org/" title="langage Scala" >langage Scala</a> pour développer vos applications Web avec le framework Play. Outre une meilleure intégration de Scala dans le framework Play, cette nouvelle version du plugin apporte une nouvelle couche d&#8217;accès aux bases de données nommée <em>Anorm</em>. <em>Anorm</em> permet l&#8217;accès en SQL à vos données et utilise des fonctionnalités du langage Scala (le <em>Combinator Parsing</em>) pour mapper le résultat des requêtes avec vos objets. D&#8217;importantes évolutions sont encore attendues dans la <a
href="http://scala.playframework.org/documentation/scala-0.9/roadmap" title="prochaine version" >prochaine version</a> de ce plugin, qui devrait encore améliorer son intégration et sa documentation.</p><p>Cette nouvelle version apporte donc d&#8217;importantes améliorations et confirme la simplicité qui est au coeur de la philosophie de Play.</p><h4><a
name="Nudgeuneplateformehbergedemoni"></a>Nudge, une plate-forme hébergée de monitoring de performance applicative (SaaS)</h4><p>La société Level5 Consulting vient de sortir <a
href="http://www.level5.fr/nudge.html" title="Nudge" >Nudge</a>, une offre hébergée de monitoring d&#8217;applications en production. Les cibles sont des logiciels de type web ou batch développés en Java/JEE.</p><p>Utilisateurs, vous aurez à disposition des fonctionnalités permettant de :</p><ul><li>collecter et agréger des temps de réponse,</li><li>identifier les requêtes SQL consommatrices,</li><li>suivre la consommation mémoire et CPU,</li><li>agréger des données par module et/ou processus métier,</li><li>créer de métriques personnalisées par API,</li><li>gérer des alertes et des SLA,</li><li>collecter des informations sur les incidents de production.</li></ul><p>Vous bénéficierez aussi d&#8217;un support d&#8217;expert sur l&#8217;optimisation d&#8217;application. Vous pouvez dès maintenant découvrir Nudge gratuitement ou bien tester une application de démonstration disponible sur le site de l&#8217;éditeur. Pour plus de détails, consultez <a
href="http://www.developpez.com/actu/31008/La-societe-francaise-Level5-lance-Nudge-sa-plate-forme-hebergee-de-monitoring-de-performance-applicative/" title="larticle de Developpezcom sur le sujet" >l&#8217;article de Developpez.com sur le sujet</a>.</p><h4><a
name="SortiedeRailscorrigeantunefail"></a>Sortie de Rails 3.0.6 corrigeant une faille de sécurité de type XSS</h4><p>C&#8217;est le 6 avril que la dernière version (3.0.6) de l&#8217;outils <a
href="http://rubyonrails.org/" title="Rails" >Rails</a> est sortie. C&#8217;est une version importante puisqu&#8217;elle corrige, entre autre, une faille de sécurité. En effet, une vulnérabilité de type XSS (<a
href="http://fr.wikipedia.org/wiki/Cross-site_scripting" title="Cross Site Scripting" >Cross Site Scripting</a>) peut être exploitée si la méthode <code>auto_link</code> est utilisée dans les sources. Cette dernière en effet avait la fâcheuse habitude de marquer automatiquement ses paramètres comme étant <code>html safe</code>, et ce, quelle que soit leur origine: ceux-ci n&#8217;étaient donc en vérité jamais contrôlés. Il était donc possible d&#8217;exécuter du code javascript malveillant en l&#8217;injectant dans un paramètre de type <code>string</code>. Le billet mentionne trois solutions pour palier ce problème: mettre à jour votre version de Rails, installer un patch ou&#8230; ne pas utiliser cette méthode <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p><p>Cette mise à jour apporte quelques autres ajouts, dont vous pouvez retrouver le détail sur le <a
href="http://weblog.rubyonrails.org/2011/4/6/rails-3-0-6-has-been-released" title="blog du projet" >blog du projet</a>.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="RedHatprpareCeylonunnouveaulan"></a>Red Hat prépare Ceylon, un nouveau langage pour la JVM</h4><p>Le &laquo;&nbsp;buzz&nbsp;&raquo; de la semaine c&#8217;est bien sûr la diffusion d&#8217;<a
href="http://www.slideshare.net/devstonez/introducing-the-ceylon-project-gavin-king-presentation-at-qcon-beijing-2011" title="une présentation" >une présentation</a> (et de <a
href="http://www.slideshare.net/devstonez/the-ceylon-type-system-gavin-king-presentation-at-qcon-beijing-2011" title="sa deuxième partie" >sa deuxième partie</a>) que Gavin King a faite à Pékin lors de la <a
href="http://www.qconbeijing.com/english.html" title="QCon" >QCon</a>, où il révèle qu&#8217;il travaille pour Red Hat à un nouveau langage pour la JVM : Ceylon. Bien que Gavin ne prévoyait pas de parler officiellement du projet de son équipe aussi tôt, il a confirmé la nouvelle ; d&#8217;abord sur <a
href="http://in.relation.to/Bloggers/Ceylon" title="son blog" >son blog</a>, puis lors d&#8217;une <a
href="http://www.infoq.com/news/2011/04/ceylon" title="interview pour InfoQ" >interview pour InfoQ</a>.</p><p>Alors de quoi s&#8217;agit-il ? La première chose à noter est que Gavin King se défend de vouloir créer le langage du futur pour la JVM ou un &laquo;&nbsp;Java Killer&nbsp;&raquo;. Il se dit d&#8217;ailleurs &laquo;&nbsp;fan apologétique&nbsp;&raquo; de Java et propose donc Ceylon comme un langage fortement inspiré de celui-ci, sans les frustrations qu&#8217;il occasionne. Les principales frustrations étant selon lui :</p><ul><li>les librairies du SDK, vieilles et mal conçues ;</li><li>la difficulté de définir une interface utilisateur en Java (il blâme d&#8217;ailleurs le complément quasi-automatique de Java pour beaucoup de besoins : XML) ;</li><li>le manque d&#8217;un vrai système de modules (il dénonce à cet égard la complexité de Maven et d&#8217;OSGi, en se prononçant en faveur du framework <a
href="https://github.com/jbossas/jboss-modules" title="JBoss Modules" >JBoss Modules</a>) ;</li><li>le manque de fonctions <a
href="http://fr.wikipedia.org/wiki/Fonction_d%27ordre_sup%C3%A9rieur" title="d'ordre supérieur" >d&#8217;ordre supérieur</a> et/ou <a
href="http://fr.wikipedia.org/wiki/Objet_de_premi%C3%A8re_classe" title="de premire classe" >de première classe</a> ;</li><li>la gestion de la concurrence (il fustige le fait que tout objet Java puisse être un sémaphore et juge qu&#8217;un langage ne devrait pas avoir de primitives de synchronisation, ce rôle devant selon lui être assumé par des librairies spécialisées) ;</li><li>ce qu&#8217;il appelle les &laquo;&nbsp;verrues&nbsp;&raquo; du langage : getters/setters, tableaux et types primitifs, la gestion des valeurs null, les checked exceptions, la généricité (surtout des points qu&#8217;il juge obscurs comme la notion de <em>type erasure</em> ou les <em>wildcards</em>) et le système de typage d&#8217;une manière globale.</li></ul><p>En pratique &#8212; et en résumé &#8212; Ceylon propose les points suivants :</p><ul><li>de garder tout ce qui fonctionne bien dans Java et en a fait le succès : la JVM, la garbage collection, pas de pointeurs, le typage statique, la lisibilité ;</li><li>le tout objet : tout est type et il n&#8217;y a pas de types &laquo;&nbsp;primitifs&nbsp;&raquo; (mais on peut encore utiliser <code>void</code> pour spécifier le non-retour d&#8217;une fonction) ;</li><li>la possibilité de faire des <a
href="http://en.wikipedia.org/wiki/Mixin" title="mixins" >mixins</a>, c&#8217;est-à-dire d&#8217;implémenter des méthodes dans des interfaces (tant qu&#8217;il n&#8217;y a pas besoin d&#8217;initialisation) &#8212; fonctionnalité sans doute inspirée du Projet Coin ;</li><li>une généricité à la fois plus simple et plus restrictive : les paramètres-types (<em>type parameters</em>) peuvent, à l&#8217;aide des mots-clés <code>in</code> et <code>out</code>, être déclarés <em>covariants</em> ou <em>contravariants</em>, ce qui élimine la nécessité de passer par des <em>wildcards</em>, qui n&#8217;existent d&#8217;ailleurs pas dans ce langage: si <code>Box</code> prend un paramètre-type <code>T</code> covariant, une variable de type <code>Box&lt;Integer&gt;</code> est alors assignable, sans transtypage explicite, à une variable de type <code>Box&lt;Number&gt;</code>. Cela conduit Gavin King à imaginer deux interfaces <code>List&lt;T&gt;</code>, l&#8217;une covariante avec <code>T</code> et prenant en charge les opérations de lecture, l&#8217;autre contravariante prenant en charge les opérations d&#8217;écriture (qui modifient la liste) ;</li><li>une structure intrinsèquement récursive: &laquo;&nbsp;une classe n&#8217;est qu&#8217;une fonction retournant à l&#8217;appelant une <a
href="http://fr.wikipedia.org/wiki/Fermeture_(informatique)" title="fermeture" >fermeture</a> renfermant tous ses membres&nbsp;&raquo; (à la manière de ce que fait JavaScript) ;</li><li>des fonctions d&#8217;ordre supérieur et de première classe : une fonction peut ainsi être passée en paramètre d&#8217;une autre fonction, une fonction peut contenir d&#8217;autres fonctions (ceci découle de la structure récursive du langage), une fonction peut être assignée à une variable, etc&#8230; &#8212; cependant, les <a
href="http://fr.wikipedia.org/wiki/Fonction_anonyme" title="fonctions anonymes" >fonctions anonymes</a> (<em>fonctions lambda</em>) ne sont pas autorisées;</li><li>classes et interfaces peuvent spécifier par avance l&#8217;ensemble des sous-types qu&#8217;elles peuvent avoir ;</li><li>pas d&#8217;opérateur de transtypage (<em>casting</em>), mais la possibilité d&#8217;utiliser une structure <code>switch</code> particulière :</li></ul><pre class="brush: java; title: ; notranslate">
switch(maVariable) case (is UnType) {...} case(is UnAutreType) {...} else {...}
</pre><ul><li> des contrats plus forts :<ul><li> des valeurs ne sont nullables que si explicitement déclarées comme telles (avec un &laquo;&nbsp;<code>?</code>&nbsp;&raquo; derrière le type) et il faut alors obligatoirement les tester avec :<pre class="brush: java; title: ; notranslate">if (exists maVariable) {...} else {...}</pre></li><li>les attributs d&#8217;une classe ne sont modifiables que si déclarés comme tels avec <code>variable</code>, et il faut alors utiliser l&#8217;opérateur <code>:=</code> plutôt que <code>=</code> pour leur réaffecter une valeur ;</li></ul></li><li>des niveaux de visibilité simplifiés : <code>shared</code> (public) ou privé par défaut ;</li><li>des getters/setters implicites pour les variables d&#8217;instance ;</li><li>pas d&#8217;exceptions vérifiées (<em>checked exceptions</em>) ;</li><li>pas de surcharge (<em>overloading</em>) de méthodes mais en revanche des valeurs par défaut pour les paramètres ;</li><li>pas de surcharge d&#8217;opérateur mais des équivalents/méthodes que l&#8217;on peut redéfinir pour un type les supportant. Par exemple <code>></code> est équivalent à <code>.largerThan()</code> qui peut être redéfini par les implémentations de <code>Comparable</code> ;</li><li>une syntaxe alternative où il est obligatoire de nommer les arguments des méthodes, ce qui donne au final un langage descriptif que Gavin envisage comme une solution face à XML pour décrire des interfaces &#8212; l&#8217;exemple suivant, tiré de la présentation de Gavin King, est en effet assez parlant:</li></ul><pre class="brush: java; title: ; notranslate">
Table squares {
    title = &quot;Squares&quot;;
    rows = 10;
    Column {
        heading = &quot;x&quot;;
        String content(Natural row) {
            return $row;
        }
    }
    Column {
        heading = &quot;x**2&quot;;
        String content(Natural row) {
            return $row**2;
        }
    }
}
</pre><p>Au rayon des choses étranges :</p><ul><li>pas de mot-clé <code>new</code> ;</li><li>un seul constructeur autorisé (définitivement pas d&#8217;overloading donc), qui plus est fusionné avec la définition de la classe :</li></ul><pre class="brush: java; title: ; notranslate">class Counter(Natural initialValue) {
	if (initialValue &gt; 100) {
		throw OutOfRangeException()
	}
	...
}</pre><ul><li>le support de la <a
href="http://fr.wikipedia.org/wiki/Curryfication" title="curryfication" >curryfication</a> ;</li><li>la documentation est conçue comme partie intégrante du langage (un peu comme dans <a
href="http://code.google.com/p/noop/" title="Noop" >Noop</a>).</li></ul><p>Que penser de cet énième langage fondé sur la JVM?</p><p>On retrouve en effet dans Ceylon beaucoup de fonctionnalités également présentes dans d&#8217;autres langages dérivés de Java (<a
href="http://www.scala-lang.org/" title="Scala" >Scala</a>, <a
href="http://groovy.codehaus.org/" title="Groovy" >Groovy</a>, <a
href="http://gosu-lang.org/" title="Gosu" >Gosu</a>, <a
href="http://fantom.org/" title="Fantom" >Fantom</a>, pour ne citer qu&#8217;eux). On les retrouve aussi dans la <a
href="http://www.jroller.com/scolebourne/entry/the_next_big_jvm_language1" title="rflexion de Stephen Colebourne" >réflexion de Stephen Colebourne</a> pour définir un futur grand langage pour la JVM, qu&#8217;il a notamment présentée lors de la réunion du Paris JUG du mois de mars.</p><p>On constate donc bien que le but n&#8217;est pas de révolutionner le monde Java, et par ailleurs beaucoup de <a
href="http://lockster.posterous.com/ceylon-interesting-for-the-wrong-reasons" title="critiques" >critiques</a> ont déjà fusé sur le fait que Scala propose mieux depuis longtemps ou que ce langage propose tellement peu qu&#8217;il pourrait être mort-né.</p><p>Cela étant, les idées proposées sont plus que jamais d&#8217;actualité, et l&#8217;initiative étant portée par Red Hat et Gavin King (Hibernate, JBoss Seam), on peut légitimement espérer qu&#8217;elle fasse bien plus d&#8217;effet qu&#8217;un pétard mouillé.</p><p>Quoi qu&#8217;il en soit, il y a encore beaucoup de travail sur le projet : bien que le langage soit en étude depuis deux ans, aucun compilateur n&#8217;a encore vu le jour.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evénements  de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="ScrumDaycommesivousytiez"></a>Scrum Day 2011: comme si vous y étiez!</h4><p>Les webcasts du Scrum Day sont <a
href="http://www.frenchsug.org/display/FRSUG/Scrum+Day+France%2C+31+mars+2011" title="en ligne" >en ligne</a> sur le wiki du FSUG. Revivez l&#8217;intégralité de l&#8217;événement, comme si vous y étiez! Les présentations du grand amphithéâtre ont été filmées, les autres sont diffusées en commentaires audio accompagnés de slides.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/04/19/revue-de-presse-xebia-207/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/</link> <comments>http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/#comments</comments> <pubDate>Tue, 29 Mar 2011 07:57:44 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Guice]]></category> <category><![CDATA[James Gosling]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7319</guid> <description><![CDATA[La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII James Gosling rejoint Google ! Le coin de la technique Un grand verre de Guice 3.0 Scala 2.9 est sur les rails Actualité éditeurs / SSII James Gosling rejoint Google ! James Gosling, l&#8217;emblématique père de Java vient d&#8217;annoncer dans [...]]]></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" /></p><p><em>La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/#JamesGoslingrejointGoogle">James Gosling rejoint Google !</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/#UngrandverredeGuice">Un grand verre de Guice 3.0</a></li><li><a
href="http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/#Scalaestsurlesrails">Scala 2.9 est sur les rails</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="JamesGoslingrejointGoogle"></a>James Gosling rejoint Google !</h4><p><em>James Gosling</em>, l&#8217;emblématique père de Java vient d&#8217;annoncer dans un court <a
title="billet" href="http://nighthacks.com/roller/jag/entry/next_step_on_the_road">billet</a> qu&#8217;il venait de rejoindre la société <em>Google</em>. Nous nous rappelons qu&#8217;il y a tout juste un an, il <a
title="annonait" href="http://nighthacks.com/roller/jag/entry/time_to_move_on">annonçait</a> son départ de la société <em>Sun</em>, peu après le rachat de <em>Sun</em> par <em>Oracle</em>. <em>James Gosling</em> s&#8217;est laissé une année avant de retrouver un nouvel employeur, lui permettant de prendre un break (en travaillant en freelance) et probablement de se libérer d&#8217;une clause de non concurrence.</p><p><em>James Gosling</em> rejoint donc <em>Google</em> dans une période où les relations avec <em>Oracle</em> sont particulièrement tendues. Sa présence offrira un atout incontestable face aux poursuites effectuées par <em>Oracle</em> à l&#8217;encontre de la <em>JVM Dalvik</em>, et son expertise sera précieuse au développement d&#8217;Android.</p><p>Nous prêterons bien entendu une oreille attentive aux conséquences qui découleront de cette embauche et nous souhaitons à <em>James</em> bonne chance pour son nouveau poste !</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="UngrandverredeGuice"></a>Un grand verre de Guice 3.0</h4><p>TheServerSide <a
title="nous apprend" href="http://www.theserverside.com/discussions/thread.tss?thread_id=62099">nous apprend</a> la sortie de Guice en version 3.0. Pour mémoire, Guice (prononcé &laquo;&nbsp;Juice&nbsp;&raquo;) est le framework d&#8217;injection de dépendance créé par Crazy Bob Lee de Google. Ce framework est souvent vu comme le concurrent historique de Spring. Et alors que Spring nécessitait d&#8217;écrire du XML à foison, Guice permit dès le départ de bénéficier des avantages liés au code Java et à son typage fort. On a d&#8217;ailleurs vu fleurir <a
title="de nombreux articles" href="http://www.theserverside.com/feature/Spring-vs-Guice-The-Clash-of-the-IOC-Containers">de nombreux articles</a> vantant les mérites de Guice par rapport à Spring. Toujours est-il qu&#8217;aujourd&#8217;hui, Spring semble être encore le framework choisi par défaut la plupart du temps en entreprise. Sans doute parce qu&#8217;il fournit bien plus que de l&#8217;injection de dépendances. En même temps, Guice semble plébiscité pour sa légèreté. On le retrouve donc logiquement intégré à nombre des librairies comme le récent Maven 3. On notera d&#8217;ailleurs la cohésion de plus en plus grande entre les 2 projets, applaudie par Jason Van Zyl dans <a
title="un post sur DZone" href="http://java.dzone.com/articles/guice-30-rc2-maven-central">un post sur DZone</a>. Guice est donc maintenant compatible Maven pour son propre build.</p><p>La grosse nouveauté est l&#8217;implémentation de la JSR 330. Avoir des annotations standard Java et pouvoir changer de provider de DI est un rêve qui prend forme ! Remarquons néanmoins que la documentation de Guice <a
title="indique" href="http://code.google.com/p/google-guice/wiki/JSR330#Best_Practices">indique</a> comme <em>best practice</em> de continuer à utiliser les annotations propriétaires Guice (que l&#8217;on différenciera donc à travers les packages des <code>import</code> les déclarant). On pourra aussi citer l&#8217;intégration de tierces librairies (Guava, CGLib&#8230;) qui <a
title="a été refactorée" href="http://code.google.com/p/google-guice/wiki/Guice30#com.google.inject.internal">a été refactorée</a> pour les masquer à l&#8217;utilisateur et éviter qu&#8217;il ne les utilise. L&#8217;extension pour Struts 2, présente mais non fonctionnelle en Guice 2.0, a été corrigée. Vous trouverez la liste complète des nombreuses nouveautés sur <a
title="le changelog" href="http://code.google.com/p/google-guice/wiki/Guice30">le changelog</a>.</p><p>Et pour coller à l&#8217;actualité, Techcrunch <a
title="nous apprend" href="http://techcrunch.com/2011/03/28/square-cto/">nous explique</a> ce matin ce que fait Crazy Bob en ce moment: il vient d&#8217;être nommé CTO de Square, une startup spécialisée dans les moyens de paiement sur mobile. Au vu des logs svn de Guice, ca ne lui laisse plus trop le temps de s&#8217;occuper de son bébé !</p><h4><a
name="Scalaestsurlesrails"></a>Scala 2.9 est sur les rails</h4><p>La première release candidate de la version 2.9 de Scala vient d&#8217;être <a
title="annonce" href="http://www.scala-lang.org/node/8976">annoncée</a>.</p><p>Cette nouvelle version arrive après une petite année de développement et apporte un certain nombre d&#8217;évolutions dont :</p><ul><li>le support des collections parallèles dont nous vous <a
title="parlions" href="http://blog.xebia.fr/2011/02/07/retour-sur-la-9eme-soiree-du-psug/">parlions</a> à l&#8217;occasion de la venue de <em>Martin Odersky</em> au PSUG. Pour rappel, l&#8217;idée des collections parallèles est de tirer parti des architectures multi coeurs pour traiter les éléments d&#8217;une collection (filtrage, map, regroupements …)</li><li>l&#8217;apparition des blocs <code>try-catch-finally</code> génériques permettant de définir des handlers réutilisables pour traiter vos exceptions (plus de détails <a
title="ici" href="http://thread.gmane.org/gmane.comp.lang.scala.internals/4078">ici</a>),</li><li>l&#8217;amélioration de la console Scala,</li><li>l&#8217;ajout du trait <code>App</code> qui a pour objectif de remplacer <code>Application</code>. Ce nouveau trait permet entre autre de récupérer les arguments passés au lancement de votre application,</li><li>l&#8217;extension de l&#8217;API collections, avec par exemple les méthodes <code>minBy</code> and <code>maxBy</code> qui sont un raccourci à la composition des fonctions <code>map</code> et <code>min</code> (ou <code>max</code>)</li><li>le support de l&#8217;annotation <code>@strictfp</code> utilisé pour le calcul en virgules flottantes.</li></ul><p>Outre ces différentes évolutions, cette nouvelle version apporte un grand nombre de corrections de bugs et d&#8217;améliorations de performances.</p><p>Une description plus exhaustive des nouveautés de cette version est disponible <a
title="ici" href="https://sites.google.com/site/scalatohoku/changes-and-improvements-on-scala-2-9">ici</a>.</p><p>Et comme une bonne nouvelle n&#8217;arrive jamais seule, <em>Miles Sabin</em> nous <a
title="annonce" href="http://www.scala-ide.org/2011/03/scala-ide-beta-1-available/">annonce</a> la sortie de la première bêta du plugin <a
title="Scala IDE" href="http://www.scala-ide.org/">Scala IDE</a> 2.0 pour Eclipse. La grande nouveauté de cette version est qu&#8217;elle est en partie développée par <a
title="Scala Solutions" href="http://www.scalasolutions.com/">Scala Solutions</a>, la société fondée par <em>Martin Odersky</em>.</p><p>Cette version 2 du plugin Scala promet une amélioration sensible de la stabilité, des performances et de nouvelles fonctionnalités. Elle apporte notamment une utilisation confortable de la <em>completion</em>, de la vérification de type en temps réel (l&#8217;inférence de type c&#8217;est génial, mais ça demande beaucoup de travail au compilateur) et de la navigation entre les classes sur de gros projets. Les utilisateurs d&#8217;Eclipse pour développer en Scala apprécieront la bonne nouvelle !</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/03/29/revue-de-presse-xebia-204/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>La cohabitation des langages Java et Scala</title><link>http://blog.xebia.fr/2011/03/28/la-cohabitation-des-langages-java-et-scala/</link> <comments>http://blog.xebia.fr/2011/03/28/la-cohabitation-des-langages-java-et-scala/#comments</comments> <pubDate>Mon, 28 Mar 2011 14:46:40 +0000</pubDate> <dc:creator>Nicolas Jozwiak</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[java]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7311</guid> <description><![CDATA[Depuis quelque temps, le langage Scala fait beaucoup parler de lui et de nombreux articles et prototypes commencent à voir le jour. Mais cet engouement est freiné par un certain nombre de problèmes dont un majeur : une grande partie des applications sur lesquelles nous intervenons sont en Java et à moins de débuter un [...]]]></description> <content:encoded><![CDATA[<p>Depuis quelque temps, le langage Scala fait beaucoup parler de lui et de nombreux articles et prototypes commencent à voir le jour. Mais cet engouement est freiné par un certain nombre de problèmes dont un majeur : une grande partie des applications sur lesquelles nous intervenons sont en Java et à moins de débuter un nouveau projet, migrer ces applications en Scala n’est pas concevable. Néanmoins une solution peut consister à introduire du Scala dans ces mêmes applications : étant donné que le langage Scala tourne sur la JVM et est interopérable avec le langage Java, il est tout à fait envisageable de migrer une partie des applications en Scala. Mais pourquoi introduire du Scala dans les applications me direz-vous ? Le langage Scala prône le paradigme fonctionnel, une meilleure lisibilité, une productivité améliorée et des performances au rendez-vous, et l’introduire sur des applications est une bonne manière d’essayer ce langage et de se faire un avis sur ces critères. Le but de cet article ne va pas consister à vérifier toutes les promesses du langage Scala. Cet article a un objectif didactique : fournir un exemple simple de migration et de cohabitation d’un module Java avec Scala, en partant d’un projet Java, simplifié pour l’exemple, pour aboutir à la migration d’une partie de ce dernier en Scala.<br
/> Avant de poursuivre, le code proposé est une solution parmi tant d’autres ; le principal but de cet article est de montrer la cohabitation des langages Java et Scala sur un même projet. Si l’envie vous prend de mettre au point une meilleure solution, libre à vous d’effectuer et de proposer vos solutions !</p><h3><a
name="Leproblme"></a>Le problème</h3><p>Le module gère des produits financiers ainsi que des tirages. Un produit financier possède un certain nombre d’attributs (montant plafond, nom de la banque, devise, etc). Un tirage possède également ses propres attributs (montant, devise, etc). La devise correspond par exemple à l’EURO (EUR), le DOLLAR (USD), etc. Enfin un produit financier peut être composé d&#8217;aucun ou plusieurs tirages.</p><p>Le module est composé d’un service <em>(FinanceService)</em> gérant des produits financiers. Ce service est composé de deux méthodes :</p><pre class="brush: java; title: ; notranslate">
 public List&lt;ProduitFinancier&gt; getProduitsFinanciersParDevise(List&lt;ProduitFinancier&gt; produitsFinanciers, Devise devise) {
   List&lt;ProduitFinancier&gt; listProduitParDevise = new LinkedList&lt;ProduitFinancier&gt;();
   for (ProduitFinancier produitFinancier : produitsFinanciers) {
     if (produitFinancier.getDevise().equals(devise)) {
        listProduitParDevise.add(produitFinancier);
     }
   }
   return listProduitParDevise;
 }
</pre><p>&nbsp;</p><pre class="brush: java; title: ; notranslate">
 public Map&lt;Devise, Double&gt; getTotalMontantParDevise(List&lt;ProduitFinancier&gt; produitsFinanciers) {
   Map&lt;Devise, Double&gt; mapMontantParDevise = new HashMap&lt;Devise, Double&gt;();
   for (ProduitFinancier produitFinancier : produitsFinanciers) {
     List&lt;Tirage&gt; listTirages = produitFinancier.getTirages();
     for (Tirage tirage : listTirages) {
       Devise devise = tirage.getDevise();
       Double montantCourant = tirage.getMontant();
       if (!mapMontantParDevise.containsKey(devise)) {
         mapMontantParDevise.put(devise, montantCourant);
       } else {
         Double montantTotal = mapMontantParDevise.get(devise);
         mapMontantParDevise.put(devise, montantCourant + montantTotal);
       }
      }
    }
    return mapMontantParDevise;
 }
</pre><p>La première retourne une liste de produits financiers suivant la devise passée en paramètre.</p><p>La seconde retourne une <em>Map</em> totalisant les montants des tirages par devises.</p><p>A noter que les traitements dans ces deux méthodes peuvent être effectués à l’aide de librairies comme <a
href="http://code.google.com/p/guava-libraries/" title="Google Guava " >Google Guava </a> notamment. Étant donné que le principal but de cet article est de montrer la cohabitation des langages Java et Scala, le code a volontairement été laissé dénué de librairies annexes.</p><p>Enfin une classe de test FinanceServiceTest, basée sur la librairie <a
href="http://code.google.com/p/fest/" title="Fest" >Fest</a>, est également présente pour s’assurer du bon comportement du service :</p><pre class="brush: java; title: ; notranslate">
public class FinanceServiceTest {
 private List&lt;ProduitFinancier&gt; produitsFinanciers;
 private FinanceService financeService = new FinanceService();
 private List&lt;ProduitFinancier&gt; genereProduitsFinanciers() {
     List&lt;Tirage&gt; tirages = new LinkedList&lt;Tirage&gt;();
     tirages.add(new Tirage(1, &quot;tirage_1&quot;, 25000.0, Devise.EUR));
     tirages.add(new Tirage(2, &quot;tirage_2&quot;, 15000.0, Devise.USD));
     tirages.add(new Tirage(3, &quot;tirage_3&quot;, 20000.0, Devise.EUR));
     tirages.add(new Tirage(4, &quot;tirage_4&quot;, 50000.0, Devise.USD));
     produitsFinanciers = new LinkedList&lt;ProduitFinancier&gt;();
     produitsFinanciers.add(new ProduitFinancier(1, &quot;reference_1&quot;, &quot;Xebia&quot;, 1000000.0, Devise.EUR, tirages));
     produitsFinanciers.add(new ProduitFinancier(2, &quot;reference_2&quot;, &quot;Xebia&quot;, 1500000.0, Devise.USD, tirages));
     return produitsFinanciers;
 }
 @Before
 public void init() {
     produitsFinanciers = genereProduitsFinanciers();
 }
 @Test
 public void testGetProduitsFinanciersParDevise() {
     List&lt;ProduitFinancier&gt; produitsParDevise = financeService.getProduitsFinanciersParDevise(produitsFinanciers, Devise.EUR);
     assertThat(produitsParDevise).hasSize(1).onProperty(&quot;reference&quot;).contains(&quot;reference_1&quot;);
 }
 @Test
 public void testGetTotalMontantParDevise() throws Exception {
     Map&lt;Devise, Double&gt; totalMontantParDevise = financeService.getTotalMontantParDevise(produitsFinanciers);
     assertThat(totalMontantParDevise).hasSize(2).includes(entry(Devise.EUR, 90000.0), entry(Devise.USD, 130000.0));
 }
}
</pre><h3><a
name="Premiretapemodificationdelastr"></a>Première étape : modification de la structure du projet</h3><p>En premier lieu, configurons le projet afin de pouvoir compiler et exécuter du code Scala. Précisons qu’un archetype Maven existe <em>(scala-archetype-simple)</em>. En se basant sur le résultat de la structure de l’archetype Maven, ajoutons les répertoires <strong>scala</strong> dans les arborescences <strong>main</strong> et <strong>test</strong> :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2011/03/arborescence_projet.png" border="0" alt="" /></div><p>Modifions maintenant notre <strong>pom.xml</strong> : cela consiste à ajouter les dépendances pour le langage Scala ainsi que pour les tests unitaires qui seront basés sur la librairie <a
href="http://www.scalatest.org" title="ScalaTest " >ScalaTest </a> :</p><pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
    &lt;groupId&gt;org.scala-lang&lt;/groupId&gt;
    &lt;artifactId&gt;scala-library&lt;/artifactId&gt;
    &lt;version&gt;2.8.1&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.scala-tools.testing&lt;/groupId&gt;
    &lt;artifactId&gt;specs_2.8.0&lt;/artifactId&gt;
    &lt;version&gt;1.6.5&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.scalatest&lt;/groupId&gt;
    &lt;artifactId&gt;scalatest&lt;/artifactId&gt;
    &lt;version&gt;1.2&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
</pre><p>Et dans la section build de Maven, ajoutons le plugin permettant de compiler et exécuter le code Java et Scala :</p><pre class="brush: xml; title: ; notranslate">
&lt;pluginManagement&gt;
   &lt;plugins&gt;
      &lt;plugin&gt;
         &lt;groupId&gt;org.scala-tools&lt;/groupId&gt;
         &lt;artifactId&gt;maven-scala-plugin&lt;/artifactId&gt;
         &lt;version&gt;2.9.1&lt;/version&gt;
      &lt;/plugin&gt;
   &lt;/plugins&gt;
&lt;/pluginManagement&gt;
&lt;plugin&gt;
  &lt;groupId&gt;org.scala-tools&lt;/groupId&gt;
  &lt;artifactId&gt;maven-scala-plugin&lt;/artifactId&gt;
  &lt;version&gt;2.15.0&lt;/version&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;id&gt;scala-compile-first&lt;/id&gt;
      &lt;phase&gt;process-resources&lt;/phase&gt;
      &lt;goals&gt;
        &lt;goal&gt;add-source&lt;/goal&gt;
        &lt;goal&gt;compile&lt;/goal&gt;
      &lt;/goals&gt;
    &lt;/execution&gt;
    &lt;execution&gt;
      &lt;id&gt;scala-test-compile&lt;/id&gt;
      &lt;phase&gt;process-test-resources&lt;/phase&gt;
      &lt;goals&gt;
        &lt;goal&gt;testCompile&lt;/goal&gt;
      &lt;/goals&gt;
     &lt;/execution&gt;
   &lt;/executions&gt;
&lt;/plugin&gt;
</pre><p>Et voilà, le projet est prêt à compiler et exécuter du code Java et Scala. Passons maintenant à la deuxième étape.</p><p>Avant d’aller plus loin, précisons que dans un souci didactique les classes Scala seront créées séparément des classes Java.</p><h3><a
name="Deuximetapemigrationdestests"></a>Deuxième étape : migration des tests</h3><p>Cette seconde partie va consister à migrer la classe <em>FinanceServiceTest</em> en Scala. Le but est de tester le service Java en Scala. Pour cela, il suffit d’ajouter la classe <em>FinanceServiceJavaTest</em> dans le package <strong>test/scala</strong>. Cette classe hérite de la classe <em>ShouldMatchersForJUnit</em> qui permet, à l’aide de DSL, de mettre en place des assertions sous la forme <em>should have</em>, <em>should contain</em>, etc. Ainsi les tests de la classe <em>FinanceServiceTest</em> deviennent :</p><pre class="brush: java; title: ; notranslate">
@Test
class FinanceServiceJavaTest extends ShouldMatchersForJUnit {
  var produitsFinanciers = new LinkedList[ProduitFinancier]();
  var financeService = new FinanceService();
  @Before
  def init() {
    genereProduitsFinanciers();
  }
  def genereProduitsFinanciers() {
    var tirages = new LinkedList[Tirage]();
    tirages.add(new Tirage(1, &quot;tirage_1&quot;, 25000.0, Devise.EUR));
    tirages.add(new Tirage(2, &quot;tirage_2&quot;, 15000.0, Devise.USD));
    tirages.add(new Tirage(3, &quot;tirage_3&quot;, 20000.0, Devise.EUR));
    tirages.add(new Tirage(4, &quot;tirage_4&quot;, 50000.0, Devise.USD));
    produitsFinanciers.add(new ProduitFinancier(1, &quot;reference_1&quot;, &quot;Xebia&quot;, 1000000.0, Devise.EUR, tirages));
    produitsFinanciers.add(new ProduitFinancier(2, &quot;reference_2&quot;, &quot;Xebia&quot;, 1500000.0, Devise.USD, tirages));
  }
  @Test
  def testGetProduitsFinanciersParDevise() {
    var financiersParDevise = financeService.getProduitsFinanciersParDevise(produitsFinanciers, Devise.EUR);
    financiersParDevise should have size (1);
    financiersParDevise.get(0).getReference should be(&quot;reference_1&quot;);
  }
  @Test
  def testGetTotalMontantParDevise() {
    val totalMontantParDevise = financeService.getTotalMontantParDevise(produitsFinanciers);
    totalMontantParDevise should have size (2);
    totalMontantParDevise should contain key (Devise.EUR);
    totalMontantParDevise should contain value (90000.0);
    totalMontantParDevise should contain key (Devise.USD);
    totalMontantParDevise should contain value (130000.0);
  }
}
</pre><p>A noter que Scala et Java étant interopérables, le service Java <em>FinanceService</em> est appelé dans ce test.</p><h3><a
name="Troisimetapemigrationduservice"></a>Troisième étape : migration du service</h3><p>Passons maintenant à la migration du service <em>FinanceService</em> en Scala. En premier lieu, créons la classe <em>FinanceServiceScala</em> dans le package <strong>main/scala</strong>. Ajoutons également la classe <em>FinanceServiceScalaTest</em> dans le package <strong>test/scala</strong> et dont le contenu est identique à la classe de test <em>FinanceServiceJavaTest</em>. La seule différence réside dans la création du service : la classe <em>FinanceServiceScala</em> est appelée :</p><pre class="brush: java; title: ; notranslate">
@Test
class FinanceServiceScalaTest extends ShouldMatchersForJUnit {
  var produitsFinanciers = new LinkedList[ProduitFinancier]();
  var financeService: FinanceServiceScala = new FinanceServiceScala();
  @Before
  def init() {
    genereProduitsFinanciers();
  }
  def genereProduitsFinanciers() {
    var tirages = new LinkedList[Tirage]();
    tirages.add(new Tirage(1, &quot;tirage_1&quot;, 25000.0, Devise.EUR));
    tirages.add(new Tirage(2, &quot;tirage_2&quot;, 15000.0, Devise.USD));
    tirages.add(new Tirage(3, &quot;tirage_3&quot;, 20000.0, Devise.EUR));
    tirages.add(new Tirage(4, &quot;tirage_4&quot;, 50000.0, Devise.USD));
    produitsFinanciers.add(new ProduitFinancier(1, &quot;reference_1&quot;, &quot;Xebia&quot;, 1000000.0, Devise.EUR, tirages));
    produitsFinanciers.add(new ProduitFinancier(2, &quot;reference_2&quot;, &quot;Xebia&quot;, 1500000.0, Devise.USD, tirages));
  }
  @Test
  def testGetProduitsFinanciersParDevise() {
    val produitsParDevise = financeService.getProduitsFinanciersParDevise(produitsFinanciers, Devise.EUR)
    produitsParDevise should have size (1);
    produitsParDevise(0).getReference should be(&quot;reference_1&quot;);
  }
  @Test
  def testGetTotalMontantParDevise() {
    val totalMontantParDevise = financeService.getTotalMontantParDevise(produitsFinanciers);
    totalMontantParDevise should have size (2);
    totalMontantParDevise should contain key (Devise.EUR);
    totalMontantParDevise should contain value (90000.0);
    totalMontantParDevise should contain key (Devise.USD);
    totalMontantParDevise should contain value (130000.0);
  }
}
</pre><p>Le but est de migrer la classe <em>FinanceService</em> en Scala et de faire exécuter la classe de test <em>FinanceServiceScalaTest</em>.</p><p>Voici le résultat de la classe <em>FinanceServiceScala</em> :</p><pre class="brush: java; title: ; notranslate">
class FinanceServiceScala {
  /**
   * Retourne la liste des produits financiers pour la devise concernée.
   */
  def getProduitsFinanciersParDevise(produitsFinanciers: java.util.List[ProduitFinancier], devise: Devise) = {
    produitsFinanciers filter (_.getDevise equals devise);
  }
  /**
   * Retourne une map avec le total des montants des tirages de tous les produits financiers par devise.
   */
  def getTotalMontantParDevise(produitsFinanciers: java.util.List[ProduitFinancier]) = {
    def sommeTirage(tirages: Iterable[Tirage]): Double = tirages match {
      case head :: tail =&gt; head.getMontant.doubleValue + sommeTirage(tail)
      case _ =&gt; 0.0
    }
    var mapResultat = new HashMap[Devise, Double];
    def mapDeviseMontant(mapTirage: Map[Devise, Double]) = {
      mapTirage foreach {m =&gt; mapResultat getOrElseUpdate (m._1, mapTirage.getOrElse(m._1, 0.0) + m._2.doubleValue)}
    }
    for (produitFinancier &lt;- asScalaIterable(produitsFinanciers);
         mapTirages = asScalaIterable(produitFinancier.getTirages) groupBy (_.getDevise) mapValues {tirage =&gt; sommeTirage(tirage)}
    ) yield mapDeviseMontant(mapTirages);
    mapResultat;
  }
}
</pre><p>En premier lieu, précisons que quelques qualités fonctionnelles du langage Scala (la fonction <em>sommeTirage</em>) ont été mises en avant, tout en gardant un certain niveau de lisibilité.</p><p>Attardons nous sur le code Scala :</p><ul><li>les fonctions <em>getProduitsFinanciersParDevise</em> et <em>getMontantTotalParDevise</em> prennent des java.util.List en paramètre : pour rappel, le but est d’exécuter la classe de test FinanceServiceScalaTest, identique à la classe de test <em>FinanceServiceJavaTest</em>. Etant donné que la classe <em>FinanceServiceScalaTest</em> utilise des listes Java, ces dernières nécessitent d&#8217;être passées en paramètre de ces méthodes.</li></ul><p>Etudions plus précisément la fonction <em>getMontantTotalParDevise</em> :</p><ul><li>Pour itérer sur les listes Java, la fonction implicite de <em>JavaConversions</em> est utilisée : cette dernière fournit un ensemble de fonctions permettant de passer de liste, collection Java à Scala. D&#8217;où la présence de <em>asScalaIterable</em>.</li><li>Voyons maintenant la portion de code suivante :</li></ul><pre class="brush: java; title: ; notranslate">
for (produitFinancier &lt;- asScalaIterable(produitsFinanciers);
     mapTirages = asScalaIterable(produitFinancier.getTirages) groupBy (_.getDevise) mapValues {tirage =&gt; sommeTirage(tirage)}
)
</pre><p>Cette boucle permet de regrouper, pour chaque produit financier, la somme des tirages par devise. Cette somme est effectuée par la fonction <em>sommeTirage</em> qui utilise le <strong>pattern matching</strong> de Scala.<br
/> A cette étape intermédiaire, la variable mapTirages a pour contenu :</p><p>Map(USD -> 65000.0, EUR -> 45000.0)<br
/> Map(USD -> 65000.0, EUR -> 45000.0)</p><p>C’est donc pour cela qu’avec la fonction <strong>yield</strong>, un appel à la fonction <em>mapDeviseMontant</em> est effectué : cette fonction se charge de fusionner ces maps et de remplir la map finale <em>(mapResultat)</em>.<br
/> Voyons un peu plus en détail les fonctions bien pratiques que sont <em>getOrElse</em> et <em>getOrElseUpdate</em> :</p><ul><li><em>getOrElse</em> permet de retourner la valeur correspondant à la clé passée en paramètre ou, si la clé n’est pas présente, la valeur par défaut passée en paramètre.</li><li><em>getOrElseUpdate</em> permet de retourner la valeur associée à la clé passée en paramètre si la clé existe.</li></ul><p>A travers cet article nous avons vu qu’avec une configuration minimale, la cohabitation du code Java et Scala est possible. Si vous aussi vous voulez essayer de tester le langage Scala sur vos projets et vous faire un avis, une approche pourrait consister à migrer vos tests unitaires en Scala. En espérant que cet article vous donne envie de tester Scala.<br
/> Pour finir, comme nous l’avons dit au début de cet article, la solution proposée est une solution parmi tant d’autres. Si vous voulez proposer une ou des meilleures solution(s), n’hésitez pas !</p><p>Vous trouverez le projet Java de départ <em>(myJavaProject)</em> et le résultat final de la cohabitation Java / Scala <em>(myScalaJavaProject)</em> sur le <a
href="http://code.google.com/p/xebia-france/source/browse/trunk/scala" title="SVN de Xebia France " >SVN de Xebia France </a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/03/28/la-cohabitation-des-langages-java-et-scala/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Xebia accueille la 10ème session du Scala User Group</title><link>http://blog.xebia.fr/2011/03/03/xebia-accueille-la-10eme-session-du-scala-user-group/</link> <comments>http://blog.xebia.fr/2011/03/03/xebia-accueille-la-10eme-session-du-scala-user-group/#comments</comments> <pubDate>Thu, 03 Mar 2011 06:15:11 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=7115</guid> <description><![CDATA[La prochaine session du Paris Scala User Group aura lieu le lundi 7 mars à 19h30 dans les locaux de Xebia. L&#8217;introduction de cette nouvelle session sera assurée par Alexis Agahi (le gentil organisateur du PSUG), qui présentera, dans un quicky de 15 minutes, les notions de apply et unapply. Elle sera suivi par une [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/05/scala-logo.png" alt="Scla user group xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> La prochaine session du <a
href="http://groups.google.com/group/paris-scala-user-group?pli=1" title="Paris Scala User Group" >Paris Scala User Group</a> aura lieu le lundi 7 mars à 19h30 dans les locaux de Xebia.</p><p>L&#8217;introduction de cette nouvelle session sera assurée par Alexis Agahi (le gentil organisateur du PSUG), qui présentera, dans un quicky de 15 minutes, les notions de <code>apply</code> et <code>unapply</code>. Elle sera suivi par une présentation du plugin Scala pour Eclipse par David Bernard, l&#8217;un des développeurs de ce plugin (ainsi que des plugins maven <a
href="http://scala-tools.org/mvnsites/maven-scala-plugin/" title="maven-scala-plugin" >maven-scala-plugin</a> et <a
href="http://code.google.com/p/vscaladoc/" title="vscaladoc" >vscaladoc</a>).</p><p>Lors de sa présentation, David abordera :</p><ul><li>passé, présent et futur du plugin,</li><li>une démonstration du plugin,</li><li>et pour finir, une visite dans les entrailles du plugin.</li></ul><p>Il reste encore des places, si vous souhaitez y assister, pensez à vous <a
href="http://doodle.com/9y7ydusi5u53sqiz" title="inscrire" >inscrire</a> pour la logistique.</p><p>Notez bien l’adresse :<br
/> Xebia<br
/> <strong>156 boulevard Haussmann à Paris</strong><br
/> Immeuble A &#8211; 7e étage</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/03/03/xebia-accueille-la-10eme-session-du-scala-user-group/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Retour sur la 9ème soirée du PSUG</title><link>http://blog.xebia.fr/2011/02/07/retour-sur-la-9eme-soiree-du-psug/</link> <comments>http://blog.xebia.fr/2011/02/07/retour-sur-la-9eme-soiree-du-psug/#comments</comments> <pubDate>Mon, 07 Feb 2011 17:06:34 +0000</pubDate> <dc:creator>David Galichet</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Paris Scala User Group]]></category> <category><![CDATA[PSUG]]></category> <category><![CDATA[scala]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=6801</guid> <description><![CDATA[Il y avait du monde dans les locaux de Xebia en cette dernière soirée de janvier 2011. Comme nous vous l&#8217;avions annoncé, le Paris Scala User Group accueillait le créateur de Scala, Martin Ordersky, pour une soirée consacrée aux collections parallèles et au futur de Scala. Martin a commencé sa présentation par les enjeux de [...]]]></description> <content:encoded><![CDATA[<p>Il y avait du monde dans les locaux de Xebia en cette dernière soirée de janvier 2011. Comme nous vous l&#8217;avions <a
href="http://blog.xebia.fr/2011/01/21/martin-odersky-invite-du-psug/" title="annoncé" >annoncé</a>, le <a
href="http://groups.google.com/group/paris-scala-user-group/" title="Paris Scala User Group" >Paris Scala User Group</a> accueillait le créateur de <a
href="http://www.scala-lang.org/" title="Scala" >Scala</a>, <em>Martin Ordersky</em>, pour une soirée consacrée aux collections parallèles et au futur de <em>Scala</em>.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2011/02/martininaction.jpg" border="0" alt="" /></div><p><em>Martin</em> a commencé sa présentation par les enjeux de la programmation parallèle, et plus particulièrement le <strong>Popular Parallel Programming</strong> qui est actuellement un sujet de grande importance. En effet, les multiples cœurs de nos processeurs et la puissance fournie par les GPGPU ne demandent qu&#8217;à être exploités. Mais les difficultés inhérentes à la programmation concurrente rendent cette tâche complexe et favorable à l&#8217;apparition de bugs difficiles à identifier et à corriger.</p><p>Il n&#8217;en reste pas moins que le nombre de cœurs doublent régulièrement dans nos CPU, et que des architectures telles que <a
href="http://www.nvidia.fr/object/fermi_architecture_fr.html" title="Fermi de NVIDIA" >Fermi de NVIDIA</a> réclament un gros paquet de threads pour alimenter les quelques 512 cœurs CUDA du processeur. La course aux GHz étant maintenant terminée au profit de l&#8217;augmentation du nombre de cœurs, si nous souhaitons disposer de plus de puissance de calcul, le parallélisme est actuellement la voie à emprunter.</p><p>Le but du <strong>Popular Parallel Programming</strong> est de rendre transparent pour le développeur l&#8217;utilisation parallèle des processeurs multi-cœurs. En implémentant le parallélisme au cœur du langage, son utilisation se fait à moindre coût.</p><p>En programmation parallèle, les problèmes commencent à survenir lorsque que l&#8217;on se retrouve dans des conditions de course (race-condition) et que des états sont partagés entre plusieurs unités d&#8217;exécution :</p><pre class="brush: bash; title: ; notranslate">
parallel programming + shared state =&gt; unpredictable state
</pre><p>La solution la plus efficace pour remédier à ce problème est de ne pas partager d&#8217;état et de travailler avec des objets immuables. Comme tout langage fonctionnel, Scala encourage l&#8217;utilisation d&#8217;objets immuables. Combiné avec la richesse de l&#8217;<strong>API Collections</strong> et <strong>Acteurs</strong>, cela fait de <em>Scala (Scalable Language)</em> un langage parfaitement taillé pour exploiter toute la puissance de nos processeurs. Le laboratoire <strong>Programming Methods Laboratory</strong> de l&#8217;<a
href="http://www.epfl.ch/">EPFL</a>, à l&#8217;origine de <em>Scala,</em> a d&#8217;ailleurs obtenu un <a
href="http://www.scala-lang.org/node/8579">financement sur cinq ans</a> de l&#8217;union Européenne afin de soutenir le développement de <em>Scala</em> et notamment son utilisation dans la programmation parallèle.</p><p>Après la présentation des enjeux de la programmation parallèle et de la réponse apportée par <em>Scala</em>, <em>Martin</em> est revenu sur le travail effectué sur l&#8217;API Collections de <em>Scala</em> et qui a mené à une version 2.8. Ce refactoring a grandement facilité l&#8217;apparition des <strong>Parallel Collections</strong> sur lesquelles nous reviendrons plus tard.<br
/> Le but de ce chantier était de rendre l&#8217;<strong>API Collection</strong> plus homogène et de simplifier le code en supprimant un grand nombre de duplications. De nouvelles méthodes ont donc fait leur apparition sur les collections comme <code>partition()</code> :</p><pre class="brush: scala; title: ; notranslate">
	val (minors, adults) = people partition (_.age &lt; 18)
</pre><p>Outre l&#8217;ajout de nouvelles méthodes, celles-ci assurent une cohérence du type d&#8217;arrivée avec le type de départ :</p><pre class="brush: scala; title: ; notranslate">
scala&gt; List(1,2,3) map (_ * 2)
res0: List[Int] = List(2, 4, 6)
scala&gt; Array(1,2,3) map (_ * 2)
res3: Array[Int] = Array(2, 4, 6)
</pre><p><em>Martin</em> nous a ensuite présenté le travail effectué sur les <strong>Parallel collections</strong> qui sera intégrée dans la version 2.9, dont la première <strong>Release Candidate</strong> est prévue courant Mars. Cette fonctionnalité permet l&#8217;exploitation des multiples cœurs de nos processeurs pour effectuer certaines opérations sur des collections. La plupart des opérations sur les collections comme les fonctions <code>map()</code>, <code>reduce()</code>, <code>filter()</code> &#8230; obtiendront un gain sensible de performance sur des architectures parallèles (<em>Martin</em> évoque un facteur 2,5x pour 4 cœurs et 4,5x sur 8 cœurs). La bonne nouvelle pour les développeurs est que ceci vient quasiment gratuitement. Il suffit en effet d&#8217;utiliser le bon type de collection ou d&#8217;utiliser la méthode <code>par()</code> retournant la collection parallèle équivalente pour en profiter. On aime !!!<br
/> Les <strong>Parallel Collections</strong> devraient donc nous permettre d&#8217;exploiter un peu mieux la puissance de nos processeurs sans entrer dans le casse-tête favorable aux erreurs qu&#8217;est la programmation parallèle.</p><p>Voici un exemple dans lequel on pourrait trouver un intérêt à utiliser les <strong>Parallel Collections</strong>. Nous allons chercher à compter le nombre de personnes par tranche d&#8217;âge. On commence par générer aléatoirement une liste d&#8217;années de naissance :</p><pre class="brush: scala; title: ; notranslate">
scala&gt; val birthYears = for ( x &lt;- 1 to 100000 ) yield 2011 - (Math.random * 77).round
birthYears: scala.collection.immutable.IndexedSeq[Long] = Vector(1951, 1991, ...)
</pre><p>Nous utilisons ensuite l&#8217;<strong>API Collections</strong> afin de regrouper les personnes (ce code est non optimisé afin d&#8217;améliorer sa lisibilité) :</p><pre class="brush: scala; title: ; notranslate">
scala&gt; birthYears map (2011 - _) groupBy {
       case i if(i &lt; 10) =&gt; &quot;child&quot;
       case i if (i &lt; 20) =&gt; &quot;teenager&quot;
       case i if(i &lt; 60) =&gt; &quot;adult&quot;
       case _ =&gt; &quot;senior&quot;} map { case (category, ages) =&gt; (category, ages.size) }
res0: scala.collection.immutable.Map1 = Map((child,12452), (senior,22917), (adult,51827), (teenager,12804))
</pre><p>Le traitement ici est assez simple. Il s&#8217;agit d&#8217;obtenir la répartition d&#8217;une population en fonction de son âge en quatre catégories : &laquo;&nbsp;child&nbsp;&raquo;, &laquo;&nbsp;teenager&nbsp;&raquo;, &laquo;&nbsp;adult&nbsp;&raquo; et &laquo;&nbsp;senior&nbsp;&raquo;. On peut imaginer que le traitement soit plus complexe et que l&#8217;on travaille sur un plus gros jeu de données. L&#8217;utilisation des <strong>Parallel Collections</strong> nous permettra un gain de performance sur une machine équipée de plusieurs cœurs :</p><pre class="brush: scala; title: ; notranslate">
scala&gt; birthYears.par map (2011 - _) groupBy {
       case i if(i &lt; 10) =&gt; &quot;child&quot;
       case i if (i &lt; 20) =&gt; &quot;teenager&quot;
       case i if(i &lt; 60) =&gt; &quot;adult&quot;
       case _ =&gt; &quot;senior&quot;} map { case (category, ages) =&gt; (category, ages.size) }
res1: ...
</pre><p>La méthode <code>par</code> sur <code>birthYears</code> retourne une version &laquo;&nbsp;parallèle&nbsp;&raquo; de la collection d&#8217;origine ce qui permet l&#8217;utilisation de l&#8217;implémentation parallèle des fonctions <code>map</code> et <code>groupBy</code>.</p><p>La soirée s&#8217;est ensuite poursuivie par une petite séance de questions réponses. <em>Martin</em> nous a indiqué souhaiter une plus grande régularité dans la livraison des nouvelles versions de <em>Scala</em> et nous a aussi rassuré quand à la pérennité du langage dans l&#8217;avenir. Comme indiqué plus haut, le projet a en effet obtenu un financement de la part de l&#8217;union européenne et il est aussi soutenu par la société <a
href="http://www.scalasolutions.com/">Scala Solutions</a> dont <em>Martin</em> est co-fondateur.<br
/> D&#8217;autres sujets ont été évoqués comme le changement de licence de <em>Scala</em> au profit d&#8217;un licence plus libre comme <a
href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache</a> par exemple. Sur ce point <em>Martin</em> est plutôt ouvert mais ce genre de démarche est généralement chronophage et ne figure actuellement pas dans le haut des priorités.</p><p>Un grand merci à <em>Martin Odersky</em> pour le temps qu&#8217;il a bien voulu nous accorder, pour la qualité de sa présentation et bien entendu, pour le langage <em>Scala</em> !<br
/> Si <em>Scala</em> vous intéresse, <a
href="http://training.xebia.fr/">Xebia Training</a> organise deux autres sessions de <a
href="http://training.xebia.fr/formations-java-jee/formation-scala-avec-martin-odersky/">formation</a> cette année, l&#8217;une aura lieu fin mars et l&#8217;autre en décembre.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2011/02/soireescala.jpg" border="0" alt="" /></div> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/02/07/retour-sur-la-9eme-soiree-du-psug/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
