Valentin Jacquemin

Mon retour sur Jazoon

C’est dans le complexe cinématographique Arena Filmcity de Zürich que j’ai participé à ma toute première conférence internationale sur Java. Sur une durée de trois jours, c’est comme un petit gamin émerveillé par un mur de bonbons que j’ai navigué de session en session dont voici un aperçu1. La conférence s’est déroulée du 1 au 3 juin j’ai donc plus d’un mois de retard sur les faits mais ça prend du temps tout de même d’écrire un article pareil, non mais!

Toutes les présentations dans un zip ici

Le mardi

Ce premier jour restera mon préféré. De bonnes session d’introduction et de conclusion, un apéro bien sympa en fin d’après-midi et la découverte d’une conférence super bien organisée. Bien accueilli, bien nourri, tout est quasi parfait.

Java SE and JavaFX: The Road Ahead

La toute première présentation est donnée par Danny Coward, Chief Architect for Client Software chez Oracle. Membre du JCP, présent sur Java depuis la version 1.0, il a notamment mené la standardisation de l’api servlet. Il en connaît donc un bout.

Avec son accent british, l’orateur nous rappelle que Java a 15 ans, qu’il y a aujourd’hui 7 millions de développeurs Java et que Java se trouve partout des smartcards jusqu’aux téléviseurs. Petit clin d’oeil au green project avec un iphone des années 1990 dans les labos de Sun2.

En revenant sur l’actualité il parle ensuite des divers évolutions actuellement en cours de discussion au sein du jcp pour la version 7 du jdk. Il pointe du doigt pour commencer sur l’effort de refactorisation et de modularisation. Le jdk7 sera modulaire grâce à un système de class loading plus efficace en chargeant uniquement les classes nécessaires.

L’accent est ensuite mis sur le parallélisme. La version 7 du jdk améliorera les choses de ce côté-là notamment grâce à un garbage collector amélioré tournant selon les dire de Danny Coward quasiment en même temps que l’application. Un framework Fork/Join3 fera également son apparition permettant de séparer des tâches en petit bouts, les exécuter en parallèle et ensuite rassembler les résultats pour ainsi profiter de la présence de tous les processeurs de la machine. Ce framework est une extension du package java.util.concurrent apparu dans la version 5 du jdk.

La machine virtuelle étant l’un des grands atouts de Java, il existe aujourd’hui plus de 200 langages pouvant s’exécuter sur celle-ci. Le jdk7 apportera également des améliorations à ce niveau-là notamment en terme de performances.

Finalement concernant le code produit par les développeurs au jour le jour Danny Coward explique qu’ajouter de nouvelles fonctionnalités à ce niveau-là est pris très au sérieux et bien réfléchi car une fois ajoutées, ces nouvelles fonctionnalités restent présentes à jamais. On pourra néanmoins retrouver plusieurs ajouts:

Le but étant clairement d’alléger notre code, de le rendre plus lisible. On retrouve plusieurs idées venant du monde des langages dynamiques…

Pour finir Danny Coward nous parle de JavaFX. Une démo de ce qui a été fait pour le site des jeux olympiques de Vancouver, des composants compatibles du mobile à la tv, des performances améliorées, etc. Oracle ne lache donc pas le morceau concernant sa plateforme RIA. JavaFX fait d’ailleurs le sujet pas moins de six sessions.

Très bonne présentation donnée par Danny Coward, la conférence commence alors très fort.

Télécharger les slides de la présentation

The Java EE 6 Platform: Powerful, Productive, Extensible

Cette session présentée par Jérome Docher et Alexis Moussine-Pouchkine est là pour nous parler des nouveautés de JEE 6. Une nouvelle notion de profile, de nouvelles annotations, une api REST, un système de packaging simplifié et une version lite des EJB font notamment leur apparition.

Web Profile

La spécification de JEE 6 fait mention d’un sous-ensemble d’api4 disponible dans ce qui est appelé le web profile. Ce profile comme le démontre la liste des api disponibles fourni le nécessaire pour la plupart des applications entreprises sans inclure toutes les api entreprises existantes comme par exemple EJB 3.1. La notion de profile est extensible et tout un chacun peut créer son propre profile.

Packaging

Il n’est dorénavant plus impératif de créer un ear dès lors qu’un projet contient des EJB. Tout composant peut se retrouver dans une archive war. Une notion de web fragment apparaît également permettant une meilleure intégration des librairies dans les projets JEE. A noter également que le fichier web.xml n’est dorénavant plus obligatoire grâce notamment à l’ajout d’annotations telles que @WebServlet et @WebFilter. En parlant d’annotations une autre nouveauté intéressante: l’annotation @HandlesTypesqui permet d’ajouter depuis le code des mapping – entre autre – à chaud dans le container.

JAX-RS 1.1

L’implémentation de RESTful web services se fait grâce à la spécification JAX-RS à partir de JEE 6. Basée sur des annotations mais proposant également une api disponible depuis le code, l’implémentation de référence se nomme Jersey et elle est disponible conjointement avec glassfish.

EJB

Une nouvelle version mineure fait son apparition avec en nouveauté quelques annotations: @Singleton, @Startup et @Asynchronous mais également comme évoqué plus haut la possibilité dorénavant de créer un EJB au sein même d’une application web. Plus besoin forcément d’un ear.

L’EJBContainer voit également le jour permettant de lancer une instance d’un container EJB localement. Ce nouveau composant devrait notamment faciliter grandement les tests d’EJB mais aussi permettre aux applications jse d’acceuillir des EJB en leur sein.

La contrainte pour la version lite évoquée plus haut se trouve au niveau du type d’EJB qu’il est permis de déployer dans cette version. Uniquement les EJB de type local sont permis.

Bean Validation

Cette spécification permet la validation des propriétés au sein des beans au moyen soit d’annotations (ex: @NotNull) soit au moyen d’une api disponible. A noter également que cette api n’est pas dépendante du container, il est possible de l’utiliser depuis n’importe quel type d’applications.

DI – Dependency Injection

La notion d’injection de dépendances est maintenant prise en charge par le container. Ca va un peu plus loin que ce que fait par exemple Spring dans le sens que le container peut gérer la portée des propriétés injectées (ex: session, requête, etc.). L’annotation @Resource permet toujours d’injecter les composants configurés sur le serveur comme les ressources JNDI par exemple. @Inject fait son arrivée en proposant l’injection type safe. Autre arrivée: les qualifier qui sont des annotations définies par le développeur lui-même dans le but de spécifier quel type d’instance injecter. Les slides prennent comme exemple un objet User devant être injecté dans un CheckoutHandler et le qualifier LoggedIn permet de s’assurer que l’instance injectée sera l’utilisateur identifié à l’application dans ce contexte-ci.

Une autre possibilité de gérer les dépendances avec JEE 6 c’est avec les événements qui font leur arrivée avec l’annotation @Observe.

Et encore…

Des nouveautés aussi côté JSF avec support simplifié d’ajax, des événements systèmes mais aussi côté JPA avec l’arrivée d’une api Criteria permettant la création de requête type-safe et plus uniquement une suite de String source d’erreur à l’exécution.

La présentation se termine avec une démo utilisant glassfish l’implémentation de référence de JEE 6. Petit détail intéressant révélé durant la démo: la possibilité de redémarer une application tout en gardant la session dans le même état. Pour plus de détail n’hésitez pas à consulter les slides ou bientôt la session directement puisque cette session s’est déroulée dans la salle 5 qui était filmée.

Télécharger les slides de la présentation

CDI, Seam & RESTEasy: You haven’t seen REST yet

Dan Allen reprend ici les principes de REST tout d’abord en expliquant en trois points les aspects essentiels d’une architecture centrée sur les ressources:

  1. Uniforme: architecturer les URL pour adresser les besoins, les méthodes adressent les opérations (GET, PUT, DELETE, POST)
  2. Orienté représentation
  3. Communication sans état: plus scalable et plus cohérent avec le protocol HTTP

S’ensuit quelques extraits de code avec explications utilisant JAX-RS comme base de référence. Il termine par une démo de RESTEasy qui se trouve être l’implémentation de JAX-RS par JBoss. Cette implémentation propose entre autre l’avantage d’avoir un serveur embarqué pour les tests et une forte intégration au framework Seam.

Dan Allen résume finalement en citant les principaux bénéfices de REST:

  1. Respect du protocole HTTP
  2. Simplicité
  3. Exposition des données au travers d’une API standardisée

Télécharger la présentation

Objects of Value

Après un bon lunch je continue avec cette session présentée par Kevlin Henney. Si vous avez l’occasion de le voir à une conférence ça vaut le coup. C’est vraiment un excellent présentateur.

Il nous a parlé ici un peu philosophiquement de l’importance que nos objets aient une identité clairement définie. Trop souvent les String font office de fourre-tout.

Télécharger la présentation

Server-side OSGi with Apache Sling

Le présentateur était malheureusement pas assez à l’aise pour rendre le sujet intéressant. Soporifique à souhait, la pause café s’est faite désirer…

Le principe de Sling est de mapper une URL à une ressource et d’y apposer un script de traitement. Les ressources en question sont hierarchiquement disposées dans un repository JCR. Tout ça fournit une base solide à l’implémentation d’un CMS personalisable, d’ailleurs utilisé par Day Software au travers de leur solution commerciale CQ.

Télécharger la présentation

Servlet 3.0 – Asynchronous, extensibility, ease of development

La version 3 de l’api servlet – intégrée à JEE 6 – est vantée par Rajiv Mordani dans cette session suivie par une démo par Arun Gupta.

Extensibilité et asynchronicité sont donc les maîtres mots de cette nouvelle mouture. Il est dorénavant possible – comme vu plus haut – d’ajouter dynamiquement depuis le code de nouveau composants au container de servlet. Pour parler d’extensibilité la notion de fragment fait aussi son arrivée. Cela devrait faciliter la vie du développeur notamment lors de l’utilisation de frameworks tiers. En effet ces frameworks pourront se configurer d’eux-mêmes au sein de l’application, plus besoin de définir le nécessaire pour configurer un framework au sein du fichier web.xml.

En plus de ces points forts, l’arrivée de plusieurs annotations devraient également faciliter notre vie… Voir la présentation The Java EE 6 Platform: Powerful, Productive, Extensible pour plus d’info.

A noter finalement la possibilité de se passer complètement du fichier web.xml à partir de cette nouvelle version.

Télécharger la présentation

97 Things Every Programmer Should Know

A nouveau une présentation par Kevlin Henney et à nouveau un vrai régal. Pour cette dernière session de la journée on est tous rassemblée dans la salle principale. Et plus d’une fois les rires ont émergé de l’assistance, Kevlin est vraiment un bon orateur…

Cette session-ci présentait son dernier livre portant le même nom que la session. Ce livre est une compilation d’avis d’une ribambelle d’experts sollicités par Kevlin.

Comme conseils on a pu retrouver par exemple:

Télécharger la présentation

Le mercredi

Que ce soit pour ce deuxième jour ou le troisième et dernier je serai certainement moins prolixe. Moins enthousiaste, moins de sessions de qualité…

Total cost of ownership and return on investment

Ken Schwaber, co-créateur de la méthodologie Scrum, est l’orateur de cette première session du matin. L’idée est de pointer du doigt les méthodes traditionnelles de développement ne prenant pas forcément en compte les coûts à long terme d’un projet logiciel.

Cette session aura été la toute première à nous faire participer puisque durant celle-ci, l’orateur nous demande d’échanger entre assistants notre conception de ce qu’est “done”. Autrement dit que doit contenir un projet terminé. Les tests d’intégrations doivent en faire partie? Les tests de performance? De charge?

Si la notion de done n’est pas complète toute une série de travail à faire est reporté en fin de projet ou du moins à plus tard. Si l’on reporte trop de choses à plus tard – dû à une mauvaise notion de ce qui est done – forcément qu’un gros boulot restera à faire. Cela ressort bien de la slide 12:

Stabilization is when you do all the “undone” work

La suite de la session n’est que publicité pour le nouveau cours scrum disponible. Si cela vous intéresse rendez-vous sur le site officiel: http://www.scrum.org/

Télécharger la présentation

iPhone/iPad development from the Java perspective

Carrément impatient d’assister à cette présentation, je ne suis visiblement pas le seul vu l’assistance en nombre venue pour écouter Ognen Ivanovski prodiguer ses conseils sur le développement iPhone/iPad.

L’expérience utilisateur

Premier élément évoqué: le hardware. Développer sur mobile signifie davantage de contraintes à ce niveau-là par rapport à du développement JEE sur de gros serveurs. Petit récapitulatif provenant de la présentation:

iPhoneARM11 ~400MHZ
iPhone 3G128MB RAM (~50MB for an application)
iPod TouchHardware Graphics Accelerator
iPod Touch 2nd generationslightly faster
iPhone 3GSARM Cortex V8 ~600MHz / 256MB RAM
iPadApple A4 SoC (ARM) ~1GHz / 256MB RAM

Si les contraintes au niveau matériel sont bien réelles il faudra également reconsidérer nos préconceptions par rapport à l’utilisation de l’application. Une application sur iPhone qui demande beaucoup d’interactions avec l’utilisateur pour atteindre un résultat n’est pas une bonne application. L’iPhone s’utilise dans le bus, en marchant, dans l’ascenseur, le canapé, dans quasiment toutes situations si ce n’est à un bureau, tout l’inverse des applications dont on a l’habitude de développer. Il faudra par conséquent bien réfléchir l’interaction utilisateur, qu’elle se fasse le plus simplement possible et ce avec le minimum d’information entrée par l’utilisateur. Lorsqu’il se doit d’interagir, il faut aussi penser à afficher des contrôles suffisamment grands, l’utilisateur entre les données avec ses doigts et non plus avec une souris… Autre préconception à s’enlever de la tête.

Une bonne utilisation du multi-touch et des animations permettront également de rendre l’application plus responsive et de faire comprendre à l’utilisateur où il en est, ce qu’il peut faire et comment. Même si l’on peut y être un peu habitué au sein des applications web au travers par exemple des progrès réalisés au sein des frameworks javascript, l’iPhone pousse l’expérience encore plus loin.

L’écosystème

L’image du Walled Garden est bien connue lorsqu’on parle d’Apple et on y revient automatiquement dès lors que l’orateur commence à nous parler de l’écosystème d’un développement pour iPhone. Des licences qu’il faut garder à l’oeil du fait de leurs variations incessantes, un risque de rejet de son application dès le départ ou encore sur une évolution ultérieure, tels sont quelques points à risque lors qu’on attaque ce marché. Une des dernières évolutions de licence en dates ayant fait le plus de bruit a été l’interdiction pur et simple d’utiliser des outils de cross-compilation permettant de développer une application par exemple sous Flash pour au final fonctionner en Objective-C le langage d’Apple. Par rapport au processus de validation l’orateur en faisant part de son expérience nous explique que l’approbation est d’habitude prévisible. A noter tout de même que ce processus de validation à un côté très positif: l’utilisateur donne une grande confiance aux applications présentes dans l’AppStore.

Le côté hype

Pouvoir proposer ses solutions au travers de l’AppStore ajoute un côté marketing certain aujourd’hui avec tout l’effet de mode auprès du grand public que l’iPhone a pu engendrer. Dès lors si le produit est bon tout ça peut devenir une mine d’or, par contre un solution bancale risque de faire mal à l’image de marque.

A se remémorer

Une bonne application iPhone devra répondre à un besoin typique d’utilisateur mobile. Typiquement vérifier les horaires de train fera une très bonne application du moment qu’elle est pensée de manière ergonomique (notion de minimum input/maximum output). L’idée sera donc d’identifier ces situations où une utilisation de manière mobile d’une application pourrait combler un besoin.

L’idée vraiment ressortie durant cette session c’est de se rappeler que sur un appareil de ce type les contraintes mémoires sont à prendre bien plus au sérieux par rapport à un développement sur serveur ou machine de bureau. Autre point important, réfléchir à l’utilisation mobile faite par l’utilisateur. L’utilisateur n’est pas assis devant son écran. Il ne faut pas manquer également la phase de test réelle sur l’appareil directement. Les tests sur émulateur pouvant effectivement être parfois trompeurs…

Et l’iPad?

Vu le titre de la session je m’attendais à un peu plus de contenu concernant l’iPad mais c’est vrai que début juin il était vraiment à peine sorti en Suisse. Malgré cela l’orateur en a tout de même parlé succinctement en mentionnant un projet qu’ils ont pu mener avant même que l’iPad soit sorti. Pour s’en sortir ils ont sorti des maquettes 1:1 par rapport à la résolution de l’appareil. On en saura pas plus.

Les outils

Sur la fin de la session, les outils permettant le développement d’applications iPhone nous sont succintements présentés ainsi qu’un petit aperçu de ce à quoi ressemble Objective C.

Télécharger la présentation

What’s new in Hibernate: a JPA 2 perspective

Emmanuel Bernard prend place dans la salle numéro 5 pour nous parler des nouveautés sur Hibernate. Session intéressante par l’initiateur du podcast des Cast Codeurs j’y ai appris une chose ou deux vraiment intéressantes.

Envers

La première chose c’est le projet envers. Ce projet a pour but de fournir une historisation automatique des entités gérées par Hibernate. Pour se faire, Hibernate crée un nouveau schéma en parallèle complètement géré par Hibernate et permettant de stocker toutes les différentes versions de chaque entité. Le produit permettra de remonter dans le temps sur ses entités. Bigrement intéressant!

Recherche

Deuxième point super intéressant, la possibilité dorénavant de faire une recherche fulltext sur le schéma d’entités. Cette fonctionnalité s’appuie sur le projet Lucene d’Apache. L’avantage étant que le développeur n’a pas besoin de configurer ce dernier, Hibernate prend tout en charge au travers du sous-projet Hibernate Search.

Et aussi

Clustering amélioré, de nouvelles possibilités de mapping, compatibilité JPA 2.0, la validation, tels sont d’autres sujets abordés durant cette présentation.

Télécharger la présentation

Java persistence criteria API

Après le repas, très dur d’assister à cette présentation pour faire poli… Soporiphique.

Je n’ai pas grand chose à dire sur cette présentation puisque l’oratrice n’a pas apporté de réelle plus-value par rapport aux slides de la présentation.

En résumé la Criteria API permet au développeur de créer une requête typée. Autrement dit pas de type String comme le sont les requêtes JPQL. L’avantage de cette solution c’est qu’une erreur sera directement découverte à la compilation et non plus uniquement au moment de l’exécution.

Pour plus de détails, jetez un oeil aux slides.

Télécharger la présentation

Patterns in practices in Hibernate

Dans ma lancée j’assiste à nouveau à une présentation plutôt désagréable. La session a été inlassablement obstruée par des “eeeeee”, “aaaaaaa”, “meeeeeuuuuuuu”, typiquement le genre de choses qui me fait péter un plomb!

Bref du coup j’ai eu pas mal de peine à suivre. Cette session avait pour but de démontrer quelques pièges à éviter lors de l’utilisation d’Hibernate.

Je ne peux malheureusement rien ajouter de plus par rapport à ce que disent directement les slides.

Télécharger la présentation

How Java powers large online retail sites

Retour d’expérience intéressant du CEO de ATG gros fournisseur de solutions e-commerce. L’orateur nous explique son expérience avec Java qui a été choisi dès le début pour leur solution. On parle ici de gros système e-commerce traitant (cf slides) plus d’un million de visiteurs par jour et des dizaines de milliers de commandes par jour.

Que ce soit la partie content management, la partie analytics, les interfaces de paiement, l’intégration back-office avec la gestion du stock, des commandes d’approvisionnement etc. ou encore les différents systèmes service clients toute partie fait bon sujet à implémentation avec Java selon l’orateur.

Durant la session, les composantes mobiles et sociales ont été identifiées également comme tendances de marchés. Oui, du social même dans le e-commerce, jetez un oeil par exemple à tor.com pour vous en convaincre. Ou encore ce système qui permet aux commerçants de proposer directement sur la vitrine de leur boutique un barcode qui lorsqu’il est scanné par un mobile type Android ou iPhone redirigera directement sur la page google personnalisée de la boutique où le client pourra critiquer les produits et partager avec la toile entière ses impressions et bons plans… The Web is watching you!

Bref, intéressante session avec ces retours d’expérience et cette vérité toujours évidente que Java est bien un langage, une plateforme même qui tient un bon avenir.

Quelques conseils d’architecture

Durant sa présentation on sent le besoin de définir une bonne architecture pour tenir la route sur ce genre de produit si l’on veut supporter la masse.

Sur de tels système, il conseil d’avoir des experts plus ou moins par domaine ou par composant (ex. catalogue, profiles utilisateurs, etc.) et de fournir des composants réutilisables. Rien de révolutionnaire mais certainement d’autant plus important sur un produit devant supporter autant de charge.

Autre point important: garder un modèle de données propre et simple afin de permettre des performances acceptable et une bonne gestion et une possibilité facilitée de grandir.

Il a également donné plusieurs conseils d’architecture physique en parlant notamment du sujet bouillant u moment, le cloud. Référez-vous aux slides pour plus d’infos sur le sujet.

Télécharger la présentation

La deuxième journée se termine…

Avec les présentation rookies mettant en scène des jeunes de moins de 26 ans qui ont l’opportunité d’appréhender pour la première fois la scène. Une grande chance d’autant plus qu’ils ont pu profiter des critiques d’un jury de professionnels5. Le contenu a été intéressant et j’ai impressionné par la qualité de leur prestance. Ca valait bien certaines sessions officielles.

Le jeudi

The Gaia satellite and data processing

Présentation vraiment dur à suivre au sortir du lit. William O’Mullane a présenté ici le projet de de l’European Space Astronomy Centre avec un zoom sur la partie développement bien sûr.

Java est aussi utilisé dans le domaine de la recherche spatiale et cette session en a donné un joli aperçu.

Je vous suggère de voir les slides si le sujet vous intéresse ou bien d’attendre la publication de la vidéo sur parleys.com

Télécharger la présentation

Essentials of testing: the tools you need to know

Beaucoup de monde pour cette session, à tel point qu’il n’y avait pas assez de sièges disponibles.

Cette session avait pour objectif d’offrir un retour d’expérience partagé par deux expert de gestion qualité à propos du challenge de mettre en place et de garder à jour un ensemble d’outils permettant d’améliorer la qualité d’un projet de développement.

Une série d’outils étant à disposition et ce pour chaque couche d’un logiciel il peut devenir difficile de faire son choix et ensuite de les intégrer tous ensemble. Ces employés d’AdNovum ont donc passé cette session à présenter tout d’abord la liste des outils disponibles par couche logiciel et ensuite ce qu’il est possible de faire avec ces outils notamment au travers de quelques démos.

Premier conseil d’importance: la notion de pyramide que l’on retrouve en slide 11. Cette pyramide encourage une large part de tests unitaires. Ces tests succins et dirigés clairement sur une fonction précise doivent être rapidement exécutables et devraient faire partie du livrable de l’application. Vous vous rappelez de la notion du done défendue dans la session sur Scrum? Les tests unitaires doivent être inclus à part égale avec le code applicatif. Concernant les tests d’intégration, fonctionnels et d’interface graphique bien qu’ils soient aussi très importants leur lourdeur demandera davantage de temps à développer et à exécuter un équilibre sera donc de mise pour mettre en oeuvre une batterie de tests couvrant tous les cas et donnant le plus de garantie possibles au client que tout est sous contrôle.

La slide numéro 13 vaut également le détour offrant une petite vue d’ensemble de la solution qu’ils ont choisi avec la possibilité de voir quelles couches sont testées avec quels outils. Au delà de ça je trouve vraiment bien que les notions de qualités et plus particulièrement de tests fasse l’objet de sujet de conférences. Bien trop souvent dans les projets, parler de tests applicatifs rime uniquement avec tests unitaires. Aujourd’hui il est possible de pousser bien plus loin et la qualité de nos projets augmentera j’en suis certain si l’on fait l’effort de démocratiser ce genre de connaissances.

D’un point de vue technique les orateurs ont pu dire que HtmlUnit est bien plus rapide que Selenium, à tester, je ne connaissais pas ce framework…

D’autres notions intéressantes ont été abordées, je vous laisse visionner les slides pour plus d’informations.

Télécharger la présentation

Rapid application development with Apache Wicket

Wicket est un framework né en 2005 proposant de faire du développement web un peu à la manière d’un développement Swing. Ce projet profite d’une communauté très active et d’une certaine simplicité rafraîchissante. Rien qu’à voir comment on commence un projet wicket: un jar wicket et slf4j pour le logging et c’est parti! Maven propose d’ailleurs un archetype de démarrage, tout semble fait pour du simple et efficace.

L’idée donc derrière ce framework est de proposer des composants réutilisables et de les insérer dans des pages html grâce à des attributs spécifiques au éléments formant la page mais sans jamais utiliser de langages particulier. On s’appuie uniquement sur des attributs html. Pas de langage EL ou autre, rien. Cela peut être un sacré atout dès lors que l’on veuille travailler avec des webdesigners ne connaissant justement pas toutes les particularités du développement java et en particulier le langage EL ou autre scriplets (beurk).

Après avoir défendu ces quelques avantages et d’autres encore que j’ai certainement oublié de noter, plusieurs démo s’en sont suivies et je dois dire que c’est plutôt séduisant comme idée…

Télécharger la présentation

Exploring HTML5 with JavaServer Faces 2.0

Après un nouveau bon lunch je retrouve une session sur HTML5 et JSF2.

Connaissant un peu les nouveautés de HTML5, enfin les grandes nouveautés en tout cas avec l’arrivée des tags audio, video et d’autres plus sémantiques comme section ou encore article le début de session ne m’a rien appris à ce sujet. Je fondais alors mes espoirs sur ce qu’allais nous apprendre l’orateur sur JSF2 à ce niveau-là.

Malheureusement j’ai été un peu déçu puisqu’il a majoritairement parlé de ce qui était possible de faire avec HTML5 et ensuite s’est visiblement aperçu qu’il avait pris trop de temps à le faire pour finalement parler qu’en vitesse de l’intégration à JSF2. Ce qui au final semble donc être simplement des composants composites utilisant les tags HTML5 derrière, rien de bien passionnant donc.

Télécharger la présentation

Search, Find, Classify - A short tour through Apache Solr

Un orateur tout simplement pitoyable, j’ai quitté la session tellement c’était agaçant à écouté, à nouveau des “mmmmmm”, “aaaaaa”. Pas bon pour moi en plus je commence à fatiguer après toutes ces sessions à me concentrer à comprendre ce qu’on dit en anglais…. Je pars assister à la session sur les hautes performances en accès aux bases de données relationnelles avec comme contenu la présentation de la librairie cliente de MySQL ClusterJ. Plusieurs benchmarks et quelques chiffres intéressants, cette librairie n’utilise pas JDBC mais optimise de son côté les accès aux bases donc MySQL. Intéressant, si le sujet vous intéresse n’hésitez pas à consulter les slides.

Télécharger la présentation Télécharger la présentation sur les performances d’accès aux bases de données relationnelles

Real Java EE testing with Arquillian

Cette dernière session à laquelle j’assiste est une session programmée sur 20 minutes faite quasiment uniquement de démos.

En deux mots, Arquillian est un framework développé au sein de JBoss permettant d’effectuer ses tests au sein d’un container distant ou embarqué. Le projet en est à ses débuts, les démos ont démontré en tout cas que cela fonctionne mais ça me fait quand même furieusement rappeler le projet cargo, je me trompe?

Télécharger la présentation

Mon retour final

Je finis ces trois jours de session fatigué. Fatigué par le fait que je dois encore trop me concentrer pour comprendre ce que disent les orateurs. C’est pas encore assez fluide dans mon esprit pour pouvoir le faire plus librement, avec moins d’énergie.

Je rentre donc un peu fatigué mais au-delà de ça j’ai passé 3 jours exceptionnels, c’était ma toute première conférence de ce genre et j’ai été servi en contenu et en rencontres. Entre les lunchs et apéros offerts par Jazoon, j’ai pu rencontrer plusieurs développeurs sympas partageants la même passion. Je peux assurément encore faire des efforts pour dépasser ma timidité et aller encore plus à la rencontre des autres mais j’ai tout de même fait la connaissance de plusieurs gars bien sympas!

Autre point super positif, l’organisation. Lunchs, apéros, sessions intéressantes, wifi (même si un peu récalcitrant le 1er jour) tout était quasiment parfait. Tout ça dans un complexe de cinémas, c’est génial! J’ai pu découvrir un peu plus la ville de Zürich et ça vaut le coup de visiter, c’est aussi ça qui n’a peut-être pas arrangé le coup de fatigue du jeudi :)

Bref je suis vraiment super content d’avoir pu profiter de cette opportunité de rencontres et de veille technologique parce que c’est vrai ce genre de conférence permet merveilleusement de voir ce qu’il se fait dans beaucoup de domaines, c’est très enrichissant et je ne peux qu’encourager tout à chacun à tenter l’expérience.


  1. gardez un oeil sur le site de Jazoon qui petit à petit met en ligne les conférences ↩︎

  2. retrouvez la vidéo diffusée durant la session à propos de ce projet ici ↩︎

  3. le blog insideIT.fr en fait l’objet d’un article ↩︎

  4. JSF 2.0, JSP 2.2, EL 2.2, JSTL 1.2, JSR45 1.0, Servlet 3.0, CDI 1.0, EJB 3.1 Lite, DI 1.0, Managed Beans 1.0, Bean Validation 1.0, Interceptors 1.1, JSR250 1.1, JPA 2.0 pour être précis ↩︎

  5. jury composé de Danny Coward, Ken Schwaber et William O’Mullane ↩︎

Critique de livre: Le paradis perdu de John Milton

Encore un livre que je n’aurais certainement pas lu si la liste des 110 meilleurs livres ne le conseillait.

John Milton, british né le 9 décembre 1608, a mis au jour ici une oeuvre poétique retraçant la vie d’Adam et Eve et la perte de leur condition d’êtres parfaits dans ce qui est donc le paradis perdu.

Le texte est qualifié de poétique mais ne me demandez pas pourquoi, je ne suis de loin pas assez qualifié pour définir les critères qui le font entrer dans cette catégorie. N’attendez pas de rime ou d’alexandrins, ce texte est poétique mais pas comme ca.

Si vous aimez les phrases bien tournées, contenant des mots sophistiqués et que l’histoire biblique du début de la création vous intéresse, ce livre vous enchentera à coup sûr. J’ai apprécié même s’il m’a fallu un bout de temps pour le terminer, j’ai apprécié. Ce ne sera pas le livre qui restera dans ma mémoire mais je suis franchement content de l’avoir lu.

A vous de vous faire votre opinion.

Finissons avec une traditionelle petite citation:

Adam ne fit aucun scrupule d’en manger malgré ce qu’il savait; il ne fut pas trompé; il fut follement vaincu par le charme d’une femme.

Ahhh ces femmes, la cause de tous nos soucis.

Lire en vitesse rapide (x2 ou x3) un podcast sous itunes

L’iPhone permet déjà depuis pas mal de temps de passer les podcasts en lecture rapide mais malheureusement itunes lui n’a pas suivi la même tendance. Ca en embètent certains…

Comptez-moi dans le lot. Enfin jusque aujourd’hui puisqu’en fait il y a une solution toute simple. Cette solution n’utilise pas itunes et donc le titre est un peu trompeur mais j’imagine que les utilisateurs rencontrant ce problème l’ont avec itunes donc je voulais faire dans le pratique1.

  1. Dans la perspective podcast d’itunes, faire un clic-droit sur l’épisode du podcast à lire
  2. Sélectionner “Show in Finder”
  3. Clic-droit sur le fichier dans le finder et ouvrir le fichier avec Quicktime
  4. Une fois Quicktime ouvert, faire Window -> Show A/V Controls
  5. Parmis les options, régler la vitesse désirée sous Playback Speed

Et voilà problème résolu! Quand même un peu bête qu’itunes n’inclut pas directement cette fonctionalité!

MAJ: à partir de MacOS 10.6 (Snow Leopard), la version de Quicktime installée ne propose plus d’option similaire. Il va falloir installer la version 7 de Quicktime, plus d’information sur la page de support d’Apple ou téléchargez-le ici.


  1. notez que je décris la procédure sur un système Mac – il vous faudra télécharger Quicktime sur tout autre système. ↩︎

SICP en version epub

Après avoir terminé la lecture de la biographie de Richard Stallman j’ai été un peu plus séduit par le format epub. Le confort d’utilisation est supérieur à ce que je pensais et plusieurs fonctionalités offertes par un e-reader sont fort sympathiques… J’y reviendrai lors d’une prochaine critique de la bio susmentionnée.

Pour l’instant le sujet de ce billet, c’est la publication de SICP en version epub1. A ma surprise elle n’existait pas encore ou en tout cas je ne l’ai pas trouvée. Si je me trompe donnez-moi un lien please!

Je possède SICP en version papier mais de l’avoir en version ebook sur mon iphone2 est un confort supplémentaire non négligeable.

Bref si vous êtes intéressé c’est par là: http://db.tt/ryenOj

Copiez simplement cette url dans votre e-reader et hop après téléchargement plongez-vous confortablement dans ce livre incroyable!

Pour les intéressés voici le snippet en python que j’ai utilisé pour convertir le livre en ligne en un seul fichier html. J’ai ensuite utilisé le logiciel Calibre pour la conversion en format epub ce qui nous donne au final un ebook fonctionnel. Oui fonctionnel, sans plus mais moi ça me convient très bien. Certains liens ne fonctionnent pas depuis la table des matières, d’autres marchent… Je n’ai pas cherché à comprendre pourquoi (vous vous rappelez Adopter le “assez bien” ?). Si quelqu’un a une piste qu’il n’hésite pas à me prodiguer ses lumières.

import urllib2 as urllib
import re

url = "http://mitpress.mit.edu/sicp/full-text/book/book.html"
base = "http://mitpress.mit.edu/sicp/full-text/book/"
navigation = re.compile("<p><div class=navigation.+?<p>")
href = re.compile("<a(.+)href=\"(?!http://).+\.html#(.+?)\"")
body = re.compile(".*<body>(.+)</body>", re.DOTALL)

def download_resources(content):
    def _load(url):
        resource = urllib.urlopen(url)
        resource_content = resource.read()
        resource.close()
        return resource_content
    def _write(local_url, content, binary=False):
        mode = "w"
        if binary:
            mode += "b"
        with open(local_url, mode) as local_resource:
            local_resource.write(content)        
    #1 load css 
    links = re.search('<link .* href="(.+)"', content)
    if links:
        resource_url = links.groups()[0]
        resource_content = _load(base + resource_url)
        _write(resource_url, resource_content)
    #2 load images
    img_set = set()
    for img in re.finditer('<img.+?src=[\'"](?!http)(.+?)[\'"].*?>', content):
        img_url = img.groups()[0]
        img_set.add(base + img_url)
    for url in img_set:
        resource_content = _load(url)
        _write(url[len(base):], resource_content, True)

#initial content
content = urllib.urlopen(url)
content = content.read()
head = re.match("(<!doctype.+)<body>", content, re.DOTALL)
head = head.groups()[0]
content = body.match(content).groups()[0]

#loop through the book until no 'next' url is found
while True:
    next_url = get_next_url(content)
    if next_url is None:
        break
    next_url = "http://mitpress.mit.edu/sicp/full-text/book/%s" % next_url
    content = re.sub(navigation, "", content)
    c = get_content(next_url)
    content = content + c

def sanitize(match):
    name = match.groups()[0]
    name = name.replace("%","")
    href = match.groups()[1]
    href = href.replace("%","")
    return "<a %s href='#%s'" % (name, href)

content = re.sub(href, sanitize, content)
content = re.sub('<a name="(.+)"', lambda m: '<a name="' + m.groups()[0].replace("%","") + '"', content)
content = re.sub(navigation, "", content)
content = head + "<body>" + content + "</body></html>"
download_resources(content)

#print the final book
print content

  1. epub est un format ouvert standardisé pour les livres électroniques – citant Wikipedia ↩︎

  2. j’utilise Stanza excellent e-reader pour l’iphone selon moi ↩︎

La semaine prochaine java bien aller avec Jazoon!

La semaine prochaine sera spécialement Java pour moi avec la conférence Jazoon. Je n’ai jamais assisté à une conférence de cette envergure, je me réjouis un max! Le programme en lui-même est alléchant avec plusieurs sessions auxquelles je me réjouis d’assister, voyons le programme que je pense me faire…

Le mardi

Le mercredi

Le jeudi

Plutôt chargé! On va voir comment tout ça se déroule mais je suis clairement impatient de découvrir encore un peu plus la communauté Java en vrai.

Si certains lecteurs de passage s’y rendent aussi dites-le moi qu’on boive un verra là-bas!

Linux's Forgotten Man

En cette fin de weekend plutôt maussade, un excellent article, concis et riche à propos de RMS et de sa position par rapport à Linus Torvals, créateur du noyau Linux. On y découvre également une fois de plus que l’open source n’est pas forcément éthiquement relié au mouvement du logiciel libre.

Aujourd’hui bien que Linux ne soit que le noyau et non le système d’exploitation dans son ensemble, le commun des utilisateurs et des dévelopeurs n’utilisent plus que Linux pour le désigner. Comme le montre bien cet extrait ce n’est pas sans chagriner RMS.

“[Torvalds] is basically an engineer,” Stallman said. “He likes free software, but isn’t concerned with issues of freedom. That’s why I’m unhappy when the GNU system is called Linux…. People are no longer exposed to the philosophical views of the GNU project.”

Linux’s Forgotten Man, article wired du 3 mai 1999

Bonne semaine à tous!

Liberté, égalité, fraternité, signum du logiciel libre

S’il ne fallait en mentionner qu’un ce serait lui: RMS. Maître respecté au sein de la nation hacker, c’est LE nom qu’on retrouve partout lorsqu’on parle du monde du libre.

RMS pour Richard Matthew Stallman, le pionnier en chef du libre. Car même si le mode du libre subsistait avant sa formalisation – je pense en premier lieu au milieu universitaire – RMS a bien été le fer de lance du mouvement. Il en est d’ailleurs toujours l’icône et le plus vif défenseur. Voyons comment tout est né…

“New Unix implementation”

Le 27 septembre 1983, RMS envoie sur 2 newsgroups son intention de développer un tout nouveau système d’exploitation entièrement libre. Ses intentions – et par là même toute l’idéologie du libre – ressortent bien lorsqu’il dit:1,2

Je considère comme règle d’or le fait que si j’apprécie un programme je dois le partager avec d’autres personnes. Je ne peux pas signer un accord de non divulgation et être en accord avec ma conscience.

Tout part de cette envie de partage. Retenez donc ça: le libre veut promouvoir un esprit égalitaire au sein de l’industrie du logiciel. Ce qui au passage n’a rien à voir avec le coût mercantile du-dit logiciel. Non, ici égalitaire veut plutôt dire qu’un utilisateur ne doit se voir privé d’aucun de ses droits par le logiciel. Ceci implique principalement 4 commandements, appelés les 4 libertés:

  1. La liberté d’exécuter le programme et ce pour tout usage.
  2. La liberté d’étudier le fonctionnement du programme au moyen des sources fournies avec le logiciel.
  3. La liberté de redistribuer des copies payantes ou non.
  4. La liberté d’améliorer le programme et de publier ces améliorations.

“GNU’s not Unix”

La création de ce nouveau système d’exploitation complètement libre passe par le projet GNU3, un ensemble de briques applicatives. Pour y arriver le projet a dû regrouper de nombreux développeurs brillants même si Stallman lui-même n’est pas dénué de talent de ce côté-là. Jugez vous-même: c’est lui qui a – entre autres – développé le fameux Emacs ou encore le compilateur C du projet GNU.

A côté de ça il se penche également sur les implications légales du mouvement qu’il défend en mettant au jour4 la première licence dite libre: la fameuse GNU General Public License. Le 4 octobre 1985 cet effort mène à la création de la Free Software Foundation ayant pour objectif de promouvoir la liberté des utilisateurs de logiciels et de défendre leurs droits.

Pour se faire cette fondation mène des campagnes5 de promotion, supporte le développement de logiciels libres – en sponsorisant le projet GNU par exemple – ou encore enregistre chaque année des milliers de copyrights auprès de l’administration américaine afin de pouvoir toujours mieux défendre les droits des logiciels libres et de leur créateurs.

Open source Logiciel libre

Le développement du libre a ainsi pu prendre forme sur maintenant près de trois décennies mais en chemin un cousin est né lorsqu’en 1998 le mouvement Open Source est créé.

Il ne faudrait toutefois pas le confondre avec le logiciel libre. Bien que l’Open Source obéisse au 2ème commandement du libre, il n’est pas aussi profondément attaché au principe éthique de liberté. Il est ainsi possible aujourd’hui de mêler logiciels open source et produits propriétaires, cela n’étant pas vrai du logiciel libre.

Bref voilà comment en un peu plus de 500 mots on peut définir l’idéologie derrière le logiciel libre, ce qu’il défend, d’où il vient. Mais bien que ce discours de liberté soit des plus louable dans le concret qu’est-ce que cela a donné?

Rendez-vous au prochain article de cette série pour voir les succès du logiciel libre.


  1. toute traduction est de moi sauf contre indication ↩︎

  2. Source: http://www.gnu.org/gnu/initial-announcement.html ↩︎

  3. historique du projet – et plus encore – raconté par RMS lui-même ↩︎

  4. Eben Moglen en est le co-rédacteur ↩︎

  5. comme celle ayant mené la création de cette série d’article ↩︎

Biographie de RMS, le druide

Je fais pas mal de recherches actuellement pour ma suite d’articles à propos du logiciel libre. A ce propos un livre vient d’être publié librement faisant la biographie de Richard Matthew Stallman, guru de la communauté du libre.

En lisant le deuxième chapitre vous trouverez une excellente analogie donnée par le maître lui-même à propos des enjeux du libre. La voici:

Il compare un logiciel à une recette de cuisine : les deux donnent d’utiles instructions, pas à pas, pour accomplir une tâche souhaitée. Ils peuvent être aisément modifiés en fonction des désirs spécifiques de l’usager, ou de circonstances particulières. « Vous n’avez pas à suivre une recette avec précision […]. Vous pouvez laisser de côté certains ingrédients. Ajouter quelques champignons parce que vous en raffolez. Mettre moins de sel car votre médecin vous le conseille – peu importe. »

« De surcroît […], logiciels et recettes sont faciles à partager. En donnant une recette à un invité, un cuisinier n’y perd que du temps et le coût du papier sur lequel il l’inscrit. Partager un logiciel nécessite encore moins, habituellement quelques clics de souris et un minimum d’électricité. Dans tous les cas, la personne qui donne l’information y gagne deux choses : davantage d’amitié et la possibilité de récupérer en retour d’autres recettes intéressantes. »

[…] « Imaginez que les recettes soient emballées dans des boîtes noires. Vous ne pourriez pas connaître les ingrédients utilisés, encore moins les changer. Et si vous en faisiez une copie pour un ami, ils vous qualifieraient de pirate et essaieraient de vous faire emprisonner des années durant. Un tel changement susciterait un énorme scandale chez les gens ayant l’habitude de partager des recettes. Mais c’est exactement ce que nous impose le monde du logiciel propriétaire. Un monde dans lequel la bienséance commune envers les autres est prohibée ou empêchée. »

Richard Stallman et la révolution du logiciel libre (l’acheter en format papier sur Amazon)

Adopter le "assez bien"

Le perfectionisme – même dans une mesure relative – est l’un des plus grand freins à la réalisation de mes projets, informatiques ou non d’ailleurs. Le fait de ne pas atteindre le top du top peut carrément stopper la progression mais comme le mentionne cet article, un trop grand nombre de fonctionalités, une portée trop large ou une mise au jour du public tardive n’aident pas non plus.

Perfectionism is the enemy of completion. Nitpick and worry about getting it “just right”, and you’ll never get it done. Done is better than right.

Il faut vraiment que je fasse tout pour garder ces conseils en tête!

4 Simple Principles of Getting to Completion

Correction orthographique en français sous Emacs Carbon

Depuis la migration de ce blog à hyde j’écris tous mes billets sous Emacs. Cette véritable machine à tout faire me convient parfaitement pour écrire, je le mets en mode plein écran et c’est parti.

Avant la publication je vérifie les erreurs d’orthographe qui ont pu s’insérer par inadvertance. Emacs fournit de base cette fonctionnalité grâce à la fonction ispell. Sur mon mac par contre uniquement le dictionnaire anglais est supporté de base et vu le temps que j’ai mis à configurer Emacs pour supporter la correction en français, je me suis dit qu’un petit billet pourrait en aider d’autres…

Vérifier l’installation de ispell

ispell n’est pas réservé à Emacs, ispell est un outil en ligne de commande sur tout système d’exploitation Unix. Emacs utilise donc une interface à cet outil afin de fournir la correction. Tapez ispell -v sur la ligne de commande afin de vérifier qu’il est bien installé. Si par hasard ce n’était pas le cas, rendez-vous sur la page dédiée à l’outil et suivez ensuite les instructions au sein du fichier README tout devrait se dérouler sans problème. L’appel à ispell -v devrait alors fonctionner.

Trouver le dictionnaire français pour ispell

ispell a besoin de dictionnaires pour lancer sa correction, la première tâche est donc de trouver un dictionnaire français adapté. Après avoir googlé durant une bonne vingtaine de minutes sans succès, je me suis connecté au channel irc #fsf pour y demander de l’aide. En deux secondes j’ai été redirigié sur les archives des packages de la distribution Linux Debian fournissant exactement ce dont j’avais besoin. Comme quoi Google n’a pas toujours réponse à tout tout de suite.

Une fois le dictionnaire téléchargé pour la plate-forme adéquate il ne reste plus qu’à lancer l’utilitaire makehash. Ce dernier compile le dictionnaire dans le format requis par ispell. Il ne reste plus qu’à déplacer ces fichiers compilés. Dans mon cas je les ai déplacé dans le répertoire /usr/local/lib, dans le vôtre ce sera peut-être différent.

Retour à la ligne de commande et testez ispell -d francais. Vous pouvez dorénavant entrez n’importe quel mot français et la correction se fera en fonction.

Intégration à Emacs

Ce n’est pas encore terminé car même si ispell fonctionne maintenant bien en ligne de commande ce n’est peut-être pas encore le cas sous Emacs. A ma surprise en effet, Emacs bien que proposant la fonction ispell pour lancer la correction, utilise au final aspell qui est un autre outil de correction similaire. Quelle confusion!

Sous Emacs1, lancez la commande (setq ispell-program-name “ispell”) ou bien ajoutez-la directement dans le fichier de configuration ~/.emacs.

Après avoir configuré Emacs pour choisir le dictionnaire français (ispell-change-dictionary), plus qu’à lancer la commande ispell et cette fois-ci le tour est joué!


  1. Pour évaluer une commande sous emacs faites M-: ↩︎