18 décembre 2009

Juggers !

Au printemps dernier j’ai proposé à des collègues de “jouer” avec Google App Engine for Java en développant une application pour gérer l’inscription au BreizhJug. Comme beaucoup nous utilisons JugEvents et comme beaucoup nous trouvons cette appli très moche, sans parler de ses plantages réguliers.

Nous sommes partis sur un truc bien trop gros pour nos petites épaules et ça a donc fait plouf en moins de deux.

La conférence de Didier Girard m’a donné envie de repartir sur ce développement, en utilisant une approche plus pragmatique et plus économique :

Les soirées BreizhJUG sont déclarées dans un Google Calendar public. Lieu, date et sujet y sont indiquées, la description servant à définir le(s) speaker(s) – première ligne – et le sujet du jour. L’intérêt ? L’appli Juggers n’a plus à gérer la saisie des événements et les droits d’accès !

L’application utilise gwt-gdata pour accéder à ce Calendar, et récupère donc une liste d’objets structurés, de manière (presque) aussi simple qu’un appel GWT-RPC.

L’inscription elle même n’est pas développée, peut être dans un premier temps sur la base d’une simple Google Form. L’idée est de progresser par tout petits pas, histoire de ne pas finir le bec dans l’eau.

J’en profite pour expérimenter uiBinder, et comme je commence tout juste un projet Wicket je ne peux pas m’empêcher de faire un parallèle : uibinder c’est la facilité de Wicket + la force de GWT, de la bombe atomique ! J’ai ainsi maquetté un widget sympa en HTML/CSS, et je peux le convertir rapidement en widget GWT utilisable partout.

L'appli est également rendue plus sexy grâce à gwt-Fx, en quelque sorte un portage de scriptaculous en GWT (pas juste un wrapper). La dernière version est vraiment bien et très souple d’utilisation.

Vous voulez-voir ce que ça donne ? http://www.juggers.org/ – attention, ce n’est ni une béta ni même une alpha, c’est un early prototype snapshot ;)

NB : ne cherchez pas, ça rend rien de bon sous Internet Explorer. Qui aurait l’idée d’utiliser ce truc de toute façon ?

12 décembre 2009

Idées cadeaux

Pour noël, une idée cadeau amusante : offrez google chrome à vos amis !

Google Chrome est le navigateur massivement adopté par les geeks et autres développeurs technophiles, mais encore peu connu du grand public – un peu comme l’était FireFox à ses débuts.

Pour étendre les parts de marché de ce navigateur, rien de mieux que le bouche à oreille, c’est donc ce que propose http://www.givechrome.com. Une bonne façon de passer un petit mot de “bonnes fêtes” à belle maman pour les fêtes sans dépenser un centime ;)

Vu que pour ma part j’utilise déjà Chrome, je vous suggère une autre idée cadeau : je n’ai toujours pas de MacBook :)

10 décembre 2009

do you speack concurrency ?

Nous sommes toute une génération de développeur qui a été bercée par la course au Méga-Hertz, et si nous constatons un plafond les vieux réflexes perdurent. Face à un programme trop lent, la solution reste le “plus gros” processeur.

Seulement, l’offre des fondeurs de puces est explicite : n’espérez plus de GHz supplémentaire – à la place, on vous propose des cœurs en plus.

La conférence de Brian Goetz à Devoxx ainsi que son livre “Programmation Java Concurrente” sont basés sur ce constat. Fini le Free Lunch sur la puissance CPU. Pour faire plus rapide il va falloir apprendre à penser et à parler parallélisme, concurrence et synchronisation, des sujets particulièrement pointus et mal connus.

scc-h-wafer_low Pas encore convaincu ? Intel annonce avoir dans ses labs un processeur à 48 coeurs ! Vers 2012, un serveur haut de gamme se basera sur ce type de puce, et votre PC portable entrée de gamme en 2020 aussi. Croyez-vous vraiment que vos logiciels sauront en profiter ? Votre super batch d’import de données tire t-il profit d’une architecture à 48 coeurs, ou ressemble t-il plus à un bête programme séquentiel, comme décrit dans votre document de spécification ?

Les traitements lourds comme les encodeurs vidéo, traitement d’image et autres manipulations massive de données ont déjà franchi le pas, mais que penser des milliers d’autres softs, … à commencer par ceux que nous développons nous même !

Aujourd’hui, les mots incontournables sur un CV sont Spring, Hibernate ou Scrum (encore que ça devienne de plus en plus banal). Qui sera le premier à mettre en avant (à bon escient) “Parallélisme” pour sortir du lot ?

06 décembre 2009

un petit tour au ParisJUG

Antonio Goncalves vient lundi animer la session BreizhJug en présentant JEE6

JavaEE6-done_small

 

Pour lui rendre la politesse, je viendrais le lendemain faire un tour au ParisJUG, en tant que simple spectateur, pour un match JEE6 vs Spring3.

563030719 La session sera filmé et retransmise sur NT1 dans Catch Attack :)

L’occasion de participer à une séance dédicace pour souligner la forte présence francophone dans le monde de l’opensource : Antonio pour son livre sur JEE6, Julien Dubois pour Spring par la pratique, Emmanuel Bernard pour Hibernate Search in Action, et Arnaud Héritier accompagné de votre serviteur pour Apache Maven. Pour avoir les liens je vous suggère de passer par le blog d’Arnaud qui a déjà fait le boulot et m’économise ainsi de nombreux copier/coller.

… enfin, à condition de ne pas être bloqués par la grève SNCF qui s’annonce :-/

01 décembre 2009

IE6, mon ami

Pour les besoins d’une chouette appli web, je me retrouve avec la casquette de Web Designer pour quelques semaines. Et une fois de plus, pas de HTML5 à l’horizon mais plutôt notre bonne vielle bouse de service : IE6.

S’il existe de nombreux hacks et autres astuces éprouvées pour faire rentrer au forceps dans ce navigateur maudit les CSS et événements JavaScript de nos applications “modernes”, un problème tout bête se pose : comment tester ?

Et oui, je suis passé sur mon PC à IE8, et même en le désinstallant (en supposant que le résultat soit bien un retour à l’état initial) je me retrouve avec IE7 qui ne réagit pas comme IE6 – bien que pas fantastique il est nettement plus conforme aux standards !

J’ai finalement découvert ce petit soft : http://ietester.softonic.fr/

D’autres astuces visant à installer IE6 en “standalone” sont infectées par le navigateur présent et ne permettent pas de reproduire les bugs / défauts spécifiques à ce navigateur. IETester par contre intègre les diverses versions d’IE et on peux bien constater les comportements CSS ou JavaScript différents entre IE6 / IE7 et IE8 (et même IE5.5 pour les passionnés d’archéologie).

Je proposerait bien comme solution de développer l’appli en intégrant Google Chrome Frame, solution à mon avis idéale pour migrer des intranet dans un environnement up-to-date SANS changer pour autant le navigateur “corporate”. Cela supposerait cependant que ceux que j’ai en face soient conscient que leur indécrottable IE6 pénalise leur SI en imposant un socle technique dépassé – discours qui semble se répéter sans fin année après année…

23 novembre 2009

Dans toutes les bonnes libraires

Arnaud a (enfin) trouvé notre bouquin dans les rayons de la FNAC. On sera un peu surpris par la catégorie dans laquelle il a été mis, mais au moins il est dispo en vrai cette fois ;)

44588735

22 novembre 2009

D’une JRE à l’autre

Le projet Mojo publie ce week-end les signatures des diverses JRE, à utiliser avec le plugin animal-sniffer.

Kezako-qu’est-ce-donc ?

Mine-sniffer-rat_1378314iAnimal Sniffer est un outil que l’on doit à Kosuke Kawaguchi, également créateur de Hudson et développeur chez SUN de JAXB et JAX-WS, enfin un gars bien occupé quoi. L’objectif de ce truc au nom improbable est de vérifier qu’un programme Java utilise uniquement des API qui seront disponibles au runtime.

 

Comme le compilateur javac vous autorise à cibler une JRE (option target) différente de celle qui compile, il n’est pas exclu d’utiliser des classes ou méthodes qui ne seront pas fournies par le runtime – gloups. Animal Sniffer va donc contrôler tout ça pour nous. On peut donc vérifier qu’on utilise pas de méthodes spécifiques au runtime Java6 en utilisant le compilo JDK6 et en ciblant Java 5 !

Mais animal Sniffer peut aller plus loin, car en pratique chaque JRE a ses petites extensions. Il est par exemple bien tentant d’utiliser la classe com.sun.binary.Base64, ce qui posera bien évidement quelques soucis si le runtime est un JRockit ou un IBM JDK !

Le projet Mojo est donc en train de nous publier les signatures de toutes les JRE, IBM JDK et Apache Harmony comprises, dans les versions courantes (1.3, 1.4, 5, 6).

Dans le même esprit, pour le développement d’un plugin Google App Engine sur Mojo (délaissé depuis, manque de temps et %#@! de SDK – contributions are welcome), j’ai utilisé animal sniffer et une signature spécifique pour valider la non-utilisation des API du JRE qui ne sont pas supportées sur cet environnement un peu particulier.

Super, mais encore ?

Prenons un instant pour nous intéresser au JDK7, “OpenJDK”. Contrairement aux précédentes version de Java, il n’est pas piloté par une JSR bien cadrée, mais vit sa vie en opensource, avec ce que ça implique d’innovations, mais aussi de conflits divers et de retards – encore 6 mois dans la vue :)

Alors qu’on pouvait en principe se baser sur la JSR Java6 pour définir les API accessibles, que fera t-on avec les implémentations de Java7 autres que OpenJDK ? Bien sur, elles sont sensées être compatibles, mais comment définir si un élément d’OpenJDK est une implémentation spécifique ou bien un élément officiel de la plateforme ?

Animal Sniffer pourra répondre à cela : en validant l’utilisation exclusive des API de l’environnement cible, il nous évitera un NoSuchMethodError qui fait bien mal sur le serveur de production.

19 novembre 2009

Maven 3 sur les rails

Jason était sur Devoxx pour une session consacrée à Maven 3.

Pas un mot sur mon bouquin (on est plus très potes tous les deux) et Jason a une curieuse façon de faire des slides en police 8.

Ceci dit, la session était une très bonne mise au point sur ce que sera Maven3 et les progrès accomplis. Par contre, l’approche et le débit de Jason s’adressait à des gens déjà très pointus sur Maven, aussi je doute que l’utilisateur lambda en retienne grand chose. Ce qui est déjà rassurant, c’est que je n’ai pas dit trop d’âneries sur Maven3 dans le livre ;)

  • une refonte des API pour rendre le code plus propre et extensible
  • une abstraction pour la construction du Modèle (POM) à partir du fichier POM.xml, ce qui permet d’utiliser des formats alternatifs (groovy, yaml …)
  • la manipulation des artifacts totalement reécrite et repensée pour être indépendante. Elle peut donc être utilisée dans d’autres outils
  • la construction du ‘build plan’ avant l’exécution des plugins, qui permet de tripatouiller ce plan avant qu’il soit exécuter. Cela permet à m2eclipse de reconfigurer certains plugins pour ne pas remplacer ce qu’Eclipse sait déjà faire très bien tout seul, ou à Tycho de remplacer la résolution des dépendances par les mécanismes OSGi d’Eclipse

On termine la journée par un BOF sur Parleys, l’occasion de faire le point sur cette plateforme géniale et sur son modèle économique. Visitez le channel Breihjug sur beta.parleys.com si vous ne connaissez pas.

Fini Devoxx pour moi, une dernière bière et on rentre pour retrouver la vraie vie :)

Bob fait son Show

La Keynote Devoxx de Jeudi était consacrée au méthodologies. Dans un premier temps, Iva Jacobson (Mr User Stories) présente une initiative visant à créer un lien entre toutes les méthodologies de développement qui prétendent sauver le monde.

Partant du constat que chaque méthode reprend des concepts déjà établis, en changeant parfois juste de vocabulaire, pour apporter quelques idées novatrices noyées dans du bruit, et généralement incompatible avec d’autres méthodes, Ivar a développé (sans prétendre à la solution miracle) un outil permettant de formaliser les méthodes. Décomposées en “pratiques”, il devient possible d’enrichir son existant de nouvelles idées et de compléter son processus de développement. Ivar espère ainsi jeter un pont entre le monde universitaire, les méthodologistes et les industriels.

La seconde partie est animée (c’est le moins qu’on puisse dire) par un show démentiel de Robert C. Martin (“Bob”, celui de Clean Code). Speacker de talent il nous chauffe une salle de 1000 personnes en quelques secondes avec une énergie, un humour et une dynamique sans équivalent ! Sa présentation vise à démontrer que le développeur, malgré 30 an d’informatique et de méthodes dont il nous retrace l’historique avec une invraisemblable débauche d’humour, reste un amateur, vu comme un geek qui ne sait pas maîtriser les délais.

Il veut faire de nous des professionnels, présentant le manifeste software craftsmanship. Dans son style percutant et hilarant, un extrait :

  • Qui parmi vous a déjà perdu du temps à cause de code mal écrit ?
  • (toute la salle ou presque lève la main)
  • Alors, pourquoi l’avez-vous écrit ?

à méditer ;)

un cœur qui bât

La session de Brian Goetz était une piqure de rappel pour ceux qui ont suivi son intervention l’année dernière, mais le sujet reste toujours autant d’actualité et délicat à appréhender pour le développeur lambda.

Durant une bonne partie de la présentation, Brian présente l’évolution des microprocesseurs et les diverses astuces visant à apporter toujours plus de vitesse dans le traitement ‘apparemment’ séquentiel des programmes. ré-ordonnancement des micro-opération, exécution prédictive, utilisation de registrer supplémentaires renommables et j’en passe.

Suit un exemple de synthèse qui permet de mettre en évidence la faiblesse de tout ça : il suffit d’un seul “cache miss” en accès mémoire pour réduire tous ces efforts à néant. L’exécution de plusieurs threads sur un cœur semble une solution pour palier cette faille, récupérant les cycles d’horloge d’attente de la mémoire au profit d’un autre thread.

D’après Brian, l’approche RISC pourrait bien revenir sur le devant de la scène : un die Itanium peut contenir 100 cœurs Pentium III ! Par contre, la programmation de machines aussi massivement multi-cœur n’est ni dans nos habitudes, ni dans nos outils. Ce qui amène donc en fin de présentation à la présentation de java.util.concurrent, et en particulier des fork/join.

La démo est simple mais parlante : un algorithme de tri, écrit en se basant sur le parallélisme massif et les API fork-join permet sur un système multi-cœur un gain de performance très significatif, sachant qu’on ne rencontre pour l’instant que des quad- ou octo-cœurs, mais que les labs nous préparent des processeurs bien plus parallélisés.

Pour approfondir le sujet, je ne peux que vous encourager la lecture de son bouquin, traduit en français chez Pearson. Livre dense à ne pas lire en une fois (sous peine de mal de crane) mais qui restera sur votre bureau pendant quelques années.

18 novembre 2009

Apache Maven@Devoxx

Ca y est, mon bouquin est présent sur Devoxx !

bouquin

Ca aura été un peu compliqué à organiser, Merci à Pearson d’avoir réglé le problème dans l’urgence. Il n’est malheureusement pas disponible à la vente et je ne pourrais pas vous le dédicacer – rendez vous au Monde en Tique où une journée sera organisé bientôt pour cela – par contre vous pourrez tout de même le feuilleter : demandez l’unique exemplaire disponible à la caisse !

Ctrl+Alt+Suppr

Cet après midi, une session bien mystérieuse tout simplement nommée “James Gosling” – le papa de Java y présente store.java.com, une place de marché sur le modèle du apple AppStore ou de l’Android Market, permettant aux indépendants de proposer leur développements maison aux millions de PC et mobiles équipés d’un runtime Java.

Le sujet étant assez peu intéressant (pour ce qui me concerne) je me rabat sur la session de Brian Goetz sur l’évolution de l’informatique vers le parallélisme et son influence sur notre façon de programmer… jusqu’à ce que le son plante !

Les sessions étant enregistrées pour Parleys.com, les speackers sont priés de faire une pause… mais qui donc s’est pris les pieds dans la prise ? Les Twits affichés dans le hall n’attendent pas longtemps:

Comme quoi c’est une arme à double tranchant, ou peut être un moyen de canaliser les réactions du public : 2> /dev/null :)

Quoi qu’il en soit cela laisse de la place pour discuter avec son voisinage et apprendre quelque chose que j’ai raté ce matin lors de la session “JDK7, an update” pendant laquelle a été annoncée l’inclusion des Fermetures (Closures) dans Java 7.

Ce sujet, qui pourrait paraître anecdotique, déchaine les passions depuis pas mal de temps, ces structures étant supportées par de nombreux langages, … sauf Java. Il y a an, au même endroit, l’annonce inverse avait été faite, il faut croire que les groupes de pression ont fait leur œuvre. Reste à confirmer, et à attendre la version finale de Java7 ! 

Keynote Day 3, La crise …

La journée de conférence commence par une réunion plénière, l’occasion pour Stephan de présenter la nouvelle édition de Parleys, que vous connaissez déjà en beta si vous utiliser les channel BreizhJug. Comme toujours, cette appli fait son effet. La version 3 introduit un modèle économique pour ce site qui consommes quelques To de bande passante, avec un abonnement pour visualiser les speach Devoxx dès les premiers jours et des espaces privés pour les entreprises qui veulent diffuser (ou utiliser en interne) ce support. Personnellement je la recommande à tout ceux qui veulent faire de la com’ ou de la formation interne ou publique.

Suit la Keynote “sponsor”, qui se retrouve scindée en deux : Oracle puis SUN

Le représentant Oracle n’est autre que le directeur technique (excusez moi d’avoir oublié le titre exact, un truc comme “Chief Officier Executive Truc”). Il annonce d’office la couleur : pas d’info sur la fusion, devoir de réserve.

On est fixé. Après quelques blagues à la limite du private joke, on part donc sur un point de vue d’Oracle sur la plateforme Java : rien de très surprenant. Java c’est chouette, ça évolue, y’a plein de monde et encore du chemin à parcourir… Oracle présente aussi sa vision du futur de Java, à savoir OSGi, via une démo d’une appli web déployée sur un micro-noyau OSGi Weblogic. Certes le temps était compté, mais la démo est minable et n’apprend absolument rien, sans compter qu’elle plante à moitié.

La démo suivante montre l’assemblage et le déploiement de cette appli sur une VM Jrockit (une VM qui exécute directement le JDK, sans O/S). On retrouve les bons outils Oracle “clic souris” que les amateurs de BPEL aiment tant.

Bref, on sort de là avec pas plus d’info qu’au début.

Suit la Keynote de SUN, animée par les représentants de la JSR JEE6 et de GlassFish. Cette fois il s’agit plus d’un résumé des deux jours d’université largement marqués par JEE6, mais le ton est net : “vous vous rappelez de ma session l’an dernier ou j’annonçais JEE6 ? et bien cette fois on y es presque”. Pas de langue de bois, c’est bien à des techos qu’on à affaire et ça tombe bien, c’est ce qu’attend le public de Devoxx (moi en tout cas) !

D’autres sessions consacrées à JEE6 et GlassFish sont prévues dans la journée pour se faire une idée plus précise.

Ce keynote ne sera donc pas l’occasion d’annonces fracassantes. Devoxx 09 sera marqué par la crise : moins de sponsors, moins de participants, beaucoup ne viennent que deux ou trois jours. Le statut incertain de la fusion SUN-Oracle ajoute à l’ambiance “on attend que ça passe”.

Un point positif tout de même : mon bouquin devrait être présent sur le stand Pearson – en un seul exemplaire de présentation ! La crise je vous dis…

JEE6, mais qui a commandé ça ?

La session BOF (Birds Of a Feather = réunion communautaire) sur JEE6 réunissait de nombreux experts ou spec leads des différents éléments qui composent JEE6. Le sujet était volontairement provocateur : pourquoi devrais t-on s’intéresser à JEE6 ?

Il faut dire que JEE traine de sacré casseroles, et s’est fait balayer pendant un temps par le succès de Spring. JEE6 semble reprendre les rênes en main en mettant poliment toutes les vieilleries à la poubelle (pardon, en “prune”, si vous y tenez vous pouvez les conserver encore un petit peu) et en proposant un modèle plus modulaire, quasiment à la demande.

La communauté reste assez sceptique, non pas sur le contenu mais sur le fonctionnement du JCP : pourquoi y a t-il parfois deux specs pour une même JSR, qu’est ce qui différencies “Managed Bean” de CDI (aussi connu comme “Web Beans”), pourquoi n’y a t-il pas de spec JEE pour gérer le clustering ?

La réponse, en demi teinte, c’est “ben les gars, c’est pas si simple de mettre tout le monde d’accord”. On est donc content de voir que les choses avancent, même si tout n’est pas parfait et que certaines choses semblent redondantes ou amenées à évoluer.

Reste un constat intéressant : Caucho développe from scratch ce qui sera le tout premier serveur JEE6 “Web Profile” produit par un outsider. Avec le mastodonte JEE on avait pas envisagé un nouveau venu dans la cour des grands depuis belle lurette. JEE6 rend enfin les choses possibles.

Autre bonne nouvelle : la spec Web Profile vit sa propre vie, et pourra donc évoluer rapidement sans attendre JEE7. On peut donc parier qu’il va y avoir de la demande de ce côté.

En conclusion, une session BOF intéressante avec une bonne participation du public et des speackers sans complexe ni langue de bois.

17 novembre 2009

SOA (prononcer lentement)

Cette après midi, session bien longue sur la SOA. Le speacker égraine très progressivement les problématiques et ses recommandations, à un rythme qui donne envie de le secouer pour faire avancer le schmilblick – c’est assez pénible.

Même si les enseignements ne sont pas inutiles, la lenteur de la session la rend éprouvante et on fini le portable sur les genoux à faire autre chose…

Je me rattrape sur la session Tools in action de JetBrains qui vient présenter TeamCity. Cette fois ça ne dure que 30 minutes et on aimerait en voir un peu plus. Une présentation animée de nombreuses démo (c’est le principe du “in action”) avec les petits loupés qui vont avec, mais qui présente très bien l’outil et son intérêt. A tester d’urgence (c’est gratuit pour les équipes de taille “raisonnable”)

On termine sur un BOF “JEE6, à quoi ça sert ce truc” pour lequel Antonio met le paquet à coup de twitter et de blog pour faire venir du monde. Je vais donc mettre mon T-shirt “I Love Spring” tout juste gagné sur le stand SpringSource histoire de le mettre en confiance ;)

Oracle et Sun …

Discussion au coin du stand Oracle :

La grande inconnue de l’année est bien sur le rachat de SUN, absent de Devoxx alors qu’Oracle reste “partner premier”. Le stand croule donc sous les demandes d’infos officielles ou non, avis et autres rumeurs.

On en saura peut être plus demain avec la KeyNote qui y est consacrée, mais il ne faut pas attendre de révélation : bloquée par le conseil européen, la fusion n’avance pas et donc la stratégie d’Oracle sur le sujet non plus. Déjà obligé à marier Eclipse et JDeveloper (sur lequel Oracle bases tous ses outils SOA), quelle place donner à NetBeans ? Quel avenir pour MySQL, au coeur de la polémique – deviendra t-il indépendant pour rassurer le conseil européen ?

Qu’en est-il du Java Community Process, toujours piloté par SUN ? Nombreux sont ceux qui réclamaient son indépendance, et il se retrouve embarqué dans les rouages de la fusion. Oracle va t-il reprendre le relais ?

JRockit va t-il fusionner avec le JDK SUN ? Le développement de Java7 avance rapidement alors que la spécification JSR n’est pas finalisée. Oracle va t-il reverser du code de JRockit dans OpenJDK ? Si on peut encore imaginer plusieurs IDE ou serveurs d’application “spécialisé”, il est peu probable qu’Oracle maintienne le développement de deux JDK.

J’ai bien peur qu’on ressorte du Keynote avec encore plus de questions en suspens… 

JEE6, il revient (et il n’est pas content)

Non ce n’est pas d’un remake du retour de la momie, mais de la session University animée par Antonio Goncalves et Alexis Moussine-Pouchkine qu’il s’agit.

Nous avons tous crachés dans la soupe JEE après s’être englués dans les EJB 1 et 2. Le but de cette session est donc de nous réconcilier avec ce modèle, à grand renfort d’humour et de démos.

JEE6 fait déjà le constat de l’échec de la génération précédente dont plus personne ne veut. On met donc toutes ces vieilles spec en @Deprecated (“pruned”) et on fait quelque chose de plus moderne, léger et flexible. Ensuite, JEE6 réutilise le modèle de Profiles, déjà utilisé par J2ME. Le profil Web typiquement permet à un serveur Resin d’être certifiable JEE6 sans pour autant embarquer toutes les API de la plateforme.

Les démos enchaînent la mise en oeuvre des concepts JEE6, fortement basés sur des annotations. On retrouve de nombreux éléments bien connus sous Spring, mais cette fois standardisés dans la plateforme JEE.

D’où une question, que je vais essayer d’approfondir demain sur le stand SpringSource (les cadors ne sont pas encore arrivés) : Spring pourrait-il supporter les annotations EJB 3.1 (Lite), ou développer un conteneur EJB basé sur Spring, ce qui permettrait pour le développeur de passer d’un conteneur à l’autre sans changer de code ?

Dans quelques années, pourra t-on déployer des composants / une application conçue pour JEE6 sur un conteneur Spring (TC server ou je ne sais quoi qu’ils nous auront pondu d’ici là) sans modification de code ? A priori ça ne semble pas bien compliqué vu que toutes les fonctionnalités de ManagedBean, d’intercepteur et autres injection de dépendances sont déjà largement supportées par Spring. Un petit namespace ejb: ?

Eh les gars de Spring, ça ne vous tente pas de démontrer la “supériorité” de Spring en nous sortant un conteneur EJB 3.1 Lite de 15 lignes de code ;)

JEE6, il revient (et il n’est pas content)

Non ce n’est pas d’un remake du retour de la momie, mais de la session University animée par Antonio Goncalves et Alexis Moussine-Pouchkine qu’il s’agit.

Nous avons tous crachés dans la soupe JEE après s’être englués dans les EJB 1 et 2. Le but de cette session est donc de nous réconcilier avec ce modèle, à grand renfort d’humour et de démos.

JEE6 fait déjà le constat de l’échec de la génération précédente dont plus personne ne veut. On met donc toutes ces vieilles spec en @Deprecated (“pruned”) et on fait quelque chose de plus moderne, léger et flexible. Ensuite, JEE6 réutilise le modèle de Profiles, déjà utilisé par J2ME. Le profil Web typiquement permet à un serveur Resin d’être certifiable JEE6 sans pour autant embarquer toutes les API de la plateforme.

Les démos enchaînent la mise en oeuvre des concepts JEE6, fortement basés sur des annotations. On retrouve de nombreux éléments bien connus sous Spring, mais cette fois standardisés dans la plateforme JEE.

D’où une question, que je vais essayer d’approfondir demain sur le stand SpringSource (les cadors ne sont pas encore arrivés) : Spring pourrait-il supporter les annotations EJB 3.1 (Lite), ou développer un conteneur EJB basé sur Spring, ce qui permettrait pour le développeur de passer d’un conteneur à l’autre sans changer de code ?

Dans quelques années, pourra t-on déployer des composants / une application conçue pour JEE6 sur un conteneur Spring (TC server ou je ne sais quoi qu’ils nous auront pondu d’ici là) sans modification de code ? A priori ça ne semble pas bien compliqué vu que toutes les fonctionnalités de ManagedBean, d’intercepteur et autres injection de dépendances sont déjà largement supportées par Spring. Un petit namespace ejb: ?

Eh les gars de Spring, ça ne vous tente pas de démontrer la “supériorité” de Spring en nous sortant un conteneur EJB 3.1 Lite de 15 lignes de code ;)

la poisse …

J’ai fait une réservation au Holyday Inn Express juste à côté de Devoxx et hier soir en arrivant : “désolé monsieur … problème de réservation” bla bla bla

OverBooking” qu’il a dit au téléphone le monsieur en me recherchant une chambre dans les hotels alentours. Je me retrouve donc à l’autre bout d’Anvers (et pour nettement plus cher).

Pour continuer sur cette lancée, je perd mon badge d’accès aux conférence dans le taxi. L’équipe Devoxx est heureusement très sympa et m’en a fait un nouveau (ils ne sont pas là pour faire des tunes, toute cette organisation est bénévole autour du BEJug).calimero1

Moralité : je porte la poisse, ne partez jamais en voyage avec moi.

16 novembre 2009

Devoxx, day1

L’université JSF s’est montrée assez décevante. Les organisateur de Devoxx se sont amusés à développer une application Flex qui diffuse dans le hall sur écran géant les twits marqués #devoxx, avec un effet d’animation bien sympa (un truc en Flex quoi). On a pu y lire de nombreuses critiques qui me confortent dans ma perception de la session… par facile de contenter tout le monde ;)

Pendant la pause, je rencontre au hasard d’un des nombreux tableaux blancs d’expression libre une connaissance du web : Ceki Gülcü à qui on doit log4j et slf4j. J’en apprend ainsi un peu plus sur l’échappée de slf4j hors de la fondation apache et la création de logback. La communauté autour de log4j semble avoir atteint une taille critique qui la paralyse dans sa possibilité de prendre des décisions fortes, comme en témoigne le gel de log4j 1.3. La seule critique que j’ai sur slf4j, et que Ceki a bien noté, c’est l’absence de varargs pour contruire des logs avec de nombreux paramètres. En dehors de ce point de détail c’est clairement pour moi l’avenir du log – Ceki présente une session sur le sujet Mardi matin pour ceux que ça intéresse…

slf4j-logo

Je lui fait une publicité éhontée pour GWT qu’il va expérimenter dans les mois à venir, pendant qu’il me vante les mérites sans fin de Wicket que je vais découvrir dans une semaine. Echange d’expérience, de bonnes pratiques et de points de vues très enrichissant.

J’enchaine avec un Tools in Action sur Hades, un outil qui interprète les noms de méthodes des DAO pour économiser l’écriture du code barbant d’accès à la base. Ca ne vous rappelle rien ? J’ai échangé quelques mots avec le speacker/createur de cet outil et je pense lui piquer quelques idées pendant qu’il ira faire un tour su mon site pour comparer nos idées. L’open-source a du bon !

Le WiFi, complètement pris d’assaut par plusieurs centaines de voraces, est à genoux. Le temps de piquer un câble réseau sur une table sponsor -- merci à SpringSource de sponsoriser sans le savoir ce blog ;) -- pour publier ce billet et je fille récupérer mon bagage avant que le vestiaire ne ferme…

Demain on attaque les choses sérieuses : la chasse au goodies dans les stands :D !

One day in Antverppen

Me voici donc à Anvers, Belgique pour une semaine de Devoxx.

 logo

Cette première journée sera assez “light” vu que j’arrive à midi et qu’il ne reste donc qu’une "university” cette après midi. Je choisis le sujet JSF 2 and beyong, framework que je connais peu et n’ai jamais pratiqué, j’apprend donc assez peu de choses vu que je ne ressent pas les enjeux. J’en retiens juste que c’était pas fantastique au début mais que maintenant, avec toutes les super nouveautés c’est le top. Pour ma part mon projet à venir sera basé sur Wicket … sujet pour lequel une université et une conférence étaient prévue mais sont déprogrammées, dommage - je vais donc devoir lire la doc :(

La journée est surtout l’occasion de retrouver quelques têtes connues, bien sur le ParisJUG qui a fait le déplacement en troupeau, mais aussi quelques autres Juggers français. Le gros des troupes arrivera d’ici Jeudi pour les journées de conférences.

L’occasion aussi de réchauffer mon anglais pour être au top les jours à venir :)

Je fais un détour sur le stand Pearson pour voir que … mon livre n’est pas référencé, ni même connu. Pour une sortie prévue le 20 synchronisé exprès pour Devoxx ça me contrarie un peu, j’espère que ce sera réglé d’ici jeudi, la plus grosse journée de Devoxx, sinon je vais devoir rembourser l’avance sur droits d’auteur que j’ai reçue ;)

Enfin, et comme toujours sur ce genre de conférence où des centaines de portables se côtoient, le grand jeu est de trouver un coin ou le WiFi n’est pas complètement saturé pour pouvoir diffuser quelques notes. Je vais donc probablement suivre l’exemple du touilleur et publier plutôt des synthèse que mes notes au fil de l’eau.

13 novembre 2009

En route pour Devoxx

Devoxx commence la semaine prochaine, et une fois de plus j'ai réussi à faire passer les frais de déplacement dans mon quota de formation ;)

Je vais passer par ce blog pour vous en faire profiter, et si vous êtes sur place n'hésitez pas à me passer un petit bonjour, car je vais profiter de l'occasion pour faire la promo de mon bouquin :
Apache Maven, co-écrit avec Arnaud Héritier, et qui sera disponible dans toutes les bonnes crèmeries le 20 novembre.



12 novembre 2009

Maven multi-threadé ?

On a vu de nombreux billets du blog Sonatype montrant les premiers effets de la lourde refonte du coeur de Maven en "Maven 3", par exemple de la possibilité d'utiliser d'autres format que le XML pour définir le POM.

Sur ce billet on peut découvrir comment, devenu plus accessible, le code encourage à nouveau des développeurs talentueux à soulever le capot et à se salir les mains. Ce premier exemple est plus un proof of concept, et vise à apporter à Maven l'exécution en parallèle du build (pensez aux projets multi-modules dont certaines branches sont indépendantes).

Au delà du gain de performance possible et de la date d'inclusion dans une version fonctionnelle de Maven, c'est bien une preuve pratique qu'on peut enfin entrer dans le code de Maven, le comprendre et l'enrichir de manière significative - un peu plus que du bug fix.

Peut m'importe ici la fonctionnalité proposée, même si elle semble intéressante, ce que je remarque (et que souligne aussi le blog Sonatype) c'est que la contribution vient d'une personne extérieure à Sonatype, signe de la ré-ouverture de Maven-core aux développeurs de la communauté. Vous savez que j'ai été très critique sur la gestion de Maven3, développé sans par Sonatype, sans visibilité pour ceux qui ne suivent pas les listes et IRC à plein temps, et laissant la communauté en attente d'un résultat palpable. La roadmap de Maven3 a très longtemps été un flou total.

Si j'y suis allé sans doute un peu fort -- je doute que Jason accepte à présent de devenir mon amis sur FaceBook :) -- cela aura au moins participé à pousser Sonatype vers plus de transparence. Entre autre, les releases alpha de Maven3 se multiplient et les signes de redémarrage d'un développement pluripartite apparaissent. Avec ce nouvel élan, Maven 3 va donc être une base pour cristalliser de nouvelle idées, bien au delà du simple nettoyage de code - et les idées ne manquent pas !


11 novembre 2009

Bientôt riche !

Grace à vous, fidèles lecteurs, et aux annonces Google adSense, je peux vous annoncer que ce Blog m'aura rapporté en deux ans d'existence 15,53 €

Je vais donc continuer un bosser pendant quelques temps, mais sait-on, peut être que je pourrais un jour passer blogueur à plein temps et me la couler douce pendant que vous continuer à vous arracher les cheveux - moi de toute façon il ne m'en reste plus assez pour tenir longtemps :)

visual management, SCRUM et tout ça

Je sors juste de formation SCRUM Master et (ceux qui suivent ce blog le savent déjà) j'expérimente par ailleurs le management visuel.

Selon le principe du "eat your own dog food", et aussi du "mieux vaut tester d'abord sur un cas simple avant de trop se la jouer" je fais un petit essai @Home :

Je suis en train de faire la déco complète de ma chambre, donc :
  • Delphine joue le rôle du product owner. Elle donne les objectifs, comment les valider, et leur "valeur" relative - exercice un peu étrange auquel elle s'est pliée en me prenant pour un dou-dingue qui sort de sa formation tout frétillant d'excitation.
  • Je joue le rôle de l'équipe, et aussi du ScrumMaster - c'est donc totalement biaisé par rapport à la méthode théorique :)
  • Il n'y a pas vraiment de Sprint, plutôt des heures libres pour bosser par ci par là dans la semaine. Disons qu'on pratique plutôt le ScrumBan pour ceux qui ont lu cet essai.
Au niveau organisation, ça donne ça :

  • plein de choses à faire
  • une tâche entamée qui pose déjà problème et dépasse largement l'estimation en "heures idéales"
  • du mal à intégrer rapidement des tâches à forte valeur métier car elles dépendent d'autres tâches de faible valeur

  • L'objectif est donc atteint :
    • vision claire et immédiate de l'avancement (ou du non avancement dans mon cas) - ça tombe bien, c'est le but
    • vision claire des tâches à prioriser, et de la difficulté de les intégrer
    • la limitation du nombre de tâches en parallèle imposée par le kanban n'empêchent de me disperser (c'est mon gros défaut) - c'est un garde fou intéressant pour ne pas introduire de gaspillage de temps et d'énergie.
    A suivre pour savoir si l'aménagement de cette chambre terminera dans des délais raisonnables et satisfera le Product Owner, ce qui dans mon cas est un objectif non négociable ;)

    04 novembre 2009

    Travailler plus pour ... des prunes ?

    Alors que le spectre des heures sup' du samedi plane sur mon beau projet, et que certains dépassent déjà très largement les 35heures hebdomadaires, je tombe sur ce billet très pertinent. L'idée clé est de remettre en question notre perception du développement informatique, et tout le vocabulaire qu'on lui a associé.

    Il y a encore peu de temps on empruntait le langage du bâtiment pour en parler (je suis moi même "architecte", ce qui me fait un peu mal au bide quand je pense à l'expérience de construction de ma maison). Cela correspondait à une époque où il fallait faire accepter au client l'élaboration de plans et de décisions en amont

    On a ensuite inventé la software factory et l'industrialisation des développement, ce qui - dans le vocabulaire - fait de nous des ouvriers spécialisés du développement. Ce n'est pas juste une question de vocabulaire mais bien un état d'esprit : productivité, maîtrise des coûts et des délais, voila les nouvelles valeurs du développement. Il ne s'agit même plus de qualité logicielle, mais bien de production à coûts réduit.

    Pourtant nous savons tous que notre travail ne ressemble pas du tout à une usine de montage à la chaîne, et qu'au contraire nous devons à tout moment improviser des solutions aussi "pas trop mauvaise" que possible. Le développeur lui même, selon cette logique industrielle, devrait devenir un simple pantin appliquant une méthode bien rodée via des outils bien entretenus (tout ceux qui bossent sous Eclipse savent que c'est loin d'être le cas).

    Alors pour pousser ce rapprochement linguistique entre la Taylorisation et l'informatique, Est-ce qu'on vend à nos clients des projet de folie en deux mois, à condition que ce soit de couleur noire ? Bien sur que non : vive l'agilité, la compétence, la créativité, les équipes réactives et motivées. Tout d'un coup on revient dans le monde de l'artisanat d'art... cherchez l'erreur.

    De mon point de vue, le développement informatique est dans la situation d'un bijoutier qui n'aurait pas le renom de Rolex et subirait la concurrence de Swatch. Comment faire de bons produits à un prix attractif ?
    • Produire en chine et très probablement baisser en qualité (ah, l'offshore ...) ?
    • Trouver des axes d'amélioration internes (ce qui voudrait dire investir !) ?
    • Travailler sur la relation client et l'image de marque - rien de bien nouveau et que se heurte à la politique actuel du "passage obligé par le service achat"
    • Jouer la carte de la compétence, un peu comme on visite un atelier pour découvrir le talent d'un artisan ? Encore faut il avoir du talent à montrer ;)
    Je n'ai pas de solution miracle à proposer - sinon je ne serais pas là :) - par contre je plussoie ce billet d'Octo dans le sens ou de mauvaise images apportent une vision biaisée de notre travail et
    donc de mauvaises solutions.

    24 octobre 2009

    Une nouvelle méthode agile ?

    Pour faire face à une liste de tâches anarchique, j’expérimente une méthode agile de mon cru : SCUM.

    Issu à l’origine d’une faute de frappe, c’est devenu l’acronyme de SCrum for Unique Member (Scrum appliqué à sois tout seul).

    Les mêlées quotidiennes sont faciles à organiser, et en plus c’est rapide. Le simple fait de se demander ce qu’on a fait la veille avant d’attaquer est tout de même pas totalement inutile quelque fois !

    Un sprint dure de 2 jours à une semaine. Tout seul c’est tenable :)

    Jusqu’ici c’est plus du vent qu’autre chose, alors voici le BACKLOG du sprint, et ses célèbres post-it sur le tableau Veleda. L’intérêt énorme de cet outil c’est :

    • qu’il n’a pas toutes les limitations de nos trackers en tout genre avec leur cycle de gestion pourrie, leurs champs obligatoires et autres complications inutiles.
    • qu’il est dynamique – par définition, un post-it, ça se déplace - et naturellement synthétique

    L’air de rien ça permet rapidement de voir où on en est et ce qu’il reste à faire – pour certains ça ferait sans doute peur d’ailleurs, mais ce serait pourtant un bon indicateur !

    J’organise donc la “SCUM’Conf 2010”, il reste encore des places pour ceux que ça intéresse :p

    15 octobre 2009

    Une excellente Idea

    Eclipse est omniprésent, et tout le monde s’accorde pour dire que c’est devenu une usine à gaz ingérable. Je dois moi-même faire face aux excès d’humeur de mes petits camarades qui pestent sur un Eclipse “préparé” par mes soins et qui malgré ça plante allègrement ou rame tout ce qu’il peut.

    La concurrence, c’est NetBeans – qui a vraiment du mal à décoller même si on m’en a dit beaucoup de bien – et Idea, qui a une excellente réputation, mais malheureusement aussi un prix

    logo_bw[1]

    Ca, c’était la situation hier. Jetbrains vient en effet de passer son IDE en opensource

    idea9-community_header[1]

    Toutes les fonctionnalités de la version payante ne sont bien sur pas au rendez-vous, mais la liste est déjà bien assez large pour contenter les utilisateurs d’Eclipse lassés du “building workspace

    Reste qu’il va falloir franchir le pas de dés-apprendre toute ces (mauvaises ?) habitudes qu’on a si chèrement acquises sous Eclipse, identifier les bons plugins et tout et tout, mais je suis convaincu que ce billet d’entrée sera vite amorti, à commencer par tout ceux qui galèrent avec l’intégration vraiment pourave de Maven dans Eclipse (on attend toujours ce fameux m2e 0.9.9) ...

    Pour ma part, je tente l’expérience dès demain :)

    Pour plus d’infos, ça se passe ici : http://www.jetbrains.com/idea/nextversion/free_java_ide.html

    10 octobre 2009

    Encoding Hell

    ucs-encoding[1]Je viens de perdre une nouvelle journée de boulot sur des %!@$ problèmes d’encodage. Encore un N-ième fichier XML dont l’entête déclare fièrement un encoding=UTF-8, et qui se retrouve charcuté à la sauce CP-1252 (variante MS de l’ISO-8859-1).

    Dire que depuis toutes ces années à inventer des formats interopérables et tout et tout on en est encore là ça fait pitié. J’en suis à me demander s’il n’existerait pas un petit plugin Eclipse bien malin pour convertir à la volée tous nos accents en entités xml ou en échappement Unicode – il y a par exemple le plugin propertiesEditor qui fait ça très bien … pour les fichiers properties.

    C’est peut être l’occasion de devenir totalement bilingue et de tout rédiger en anglais, histoire de ne plus sortir du bon vieux ASCII 7 bits qui est finalement le seul moyen de ne pas se prendre la tête.

    Le build Maven est un peu (!) plus stable grâce à l’option project.build.sourceEncoding mais ce n’est pas encore la panacée : il semble que le générateur de code de CXF (wsdl2java) produise du code source dans l’encodage “local”… pas gagné cette affaire.

    08 octobre 2009

    Lecture du soir...


    Mon éditrice m'a fait parvenir un petit bouquin bien sympa : un petit guide du développeur JavaScript.

    JavaScript est un langage des plus étrange : rendu indispensable par sa présence sur tous les navigateurs web, il est particulièrement obscur pour des développeurs traditionnels et comporte aussi bien des constructions très élégantes et des pièges à c.. dans lesquels on s'embourbe avec bonheur.

    Comme beaucoup, j'ai moi aussi essayé de faire du développement JS avant de tomber dans des complications sans fin, malgré l'aide de frameworks en tout genre - c'est, entre autre, ce qui m'a fait aimer GWT ;)

    Dans ce petit guide, Douglas CrockFord (YahooUI) prend d'office le parti d'écarter tout ce qui fait de JavaScript un langage tout pourri - sans se voiler la face - et ne présente donc que ce qui fait de JavaScript un langage prodigieux. C'est une des raison de la taille réduite du livre : hors sujet le DOM du navigateur, Ajax et ses implémentations merdiques d'un navigateur à l'autre. Ici on se concentre sur le coeur du langage, son fonctionnement et sur les bonnes façons de faire.

    Pour un développeur débutant c'est clairement le livre idéal : comme on y apprend seulement ce qui marche bien, on est au moins sûr de ne pas prendre un mauvais pli. Pour les personnes plus expérimentées, la piqûre de rappel est salvatrice - j'ai enfin compris pourquoi this change si souvent de nature dans une fonction JS :)

    Le livre se termine par plusieurs annexes qui dénoncent les aberrations du langage et ses mauvais éléments. Une bonne façon, une fois les bonnes pratiques acquises, de savoir là où il ne faut pas mettre les pieds et donc savoir les repérer.

    Un excellent ouvrage, concis mais dense. Il donne du sens à ce langage méconnu et si loin de nos bon vieux langages objet fortement typés et basés sur des classes. Un indispensable pour toute personne qui compte se lancer dans un développement JavaScript, probablement plus indispensable que les nombreuses "bibles" du JavaScript en 400 pages qui sont bien plus délicates à exploiter. Bien sûr, pour être applicable en développement il faudra lui adjoindre une bonne référence sur l'API DOM et ses variations entre navigateurs.

    Seul regret, je n'ai pas retrouvé d'information sur les problèmes de fuites mémoire, si caractéristiques des Closures JavaScript - peut être qu'une seconde lecture plus approfondie s'impose ;)


    Disclaimer : bien que lié par contrat à Pearson dans un autre contexte, cette revue ne m'a pas été dictée et je parle donc en toute franchise :D



    05 octobre 2009

    HTML 5 - il va falloir réapprendre à coder :)

    Au moins ceux d'entre vous qui suivent les actualités de Ajaxian.com ont entendu parler des progrèés sur HTML5. En particulier, Chrome 3 - webkit en général - le supporte

    NB : je dis "le supporte", bien que ce soit partiel vu que HTML5 n'est pas une norme définitif mais un travail collectif.

    Jusqu'ici je restais assez dubitatif, jusqu'à ce que je tombe sur cette démo : http://www.raymondhill.net/puzzle-rhill/jigsawpuzzle-rhill.php

    Manipulation d'images à la souris, rotations et autres transformations, des choses dans l'absolu assez simples mais qu'on a pas l'habitude de voir en dehors d'un conteneur Flash. HTML5 promet donc d'ouvrir les portes aux pages riches et animées, sans passer ni par des magouilles de développement, ni par un runtime qui rend le client "léger" semi-lourd.

    Faites donc joujou avec la démo, puis faites l'exercice : si un client me demandais un truc de ce genre, qu'est ce que j'aurais à lui proposer comme solution ?

    02 octobre 2009

    Google Chrome Frame : amusant

    Google nous sort un de ces petits ovnis dont il a le secret : Google Chrome Frame.

    Il s'agit d'un plugin pour IE qui remplace tout simplement le moteur de rendu du navigateur le plus décrié mais aussi le plus installé par le moteur Chrome. Celui-ci n'est actif que sur les pages qui déclarent une balise magique, autrement dit quelques sites de geek et probablement quelques applications Google, mais pas plus. Un petit Script est proposé par Google pour permettre à ces sites de proposer l'installation de Frame sur postes qui ne l'ont pas encore.

    Il est évident que la cible n'est pas l'entreprise, car si on y utilise encore massivement IE6, c'est à cause d'applications utilisant massivement des ActiveX et/ou l'authentification MS Active Directory, ou simplement pour ne pas mettre des sous dans une migration technique risquée (?) et sans R.O.I. facilement chiffrable.

    De mon point de vue, la cible c'est les millions de particuliers qui utilisent IE juste parce qu'il est fournit avec l'OS, qui n'ont aucune idée de ce qu'est un navigateur (je pense à ma belle mère qui "clique sur Internet"). Ceux qui ont déjà installé sans trop réfléchir le plugin Flash par ce que le site de la redoute le demandait, et qui installeront donc Frame un site grand public de renom le propose (par exemple ... www.google.com ?)

    Quel intérêt pour Google ? Faire que le web soit toujours plus consommé par les utilisateurs à la place de l'informatique traditionnelle. Les gMail, gDocs, gCalendar et consorts ne gagneront du terrain que s'ils sont au moins aussi performants que l'équivalent desktop. Ce qui signifie bien sur un moteur rapide - en tout cas plus que celui natif d'IE - et le support du mode déconnecté (google Gears).

    Ceci dit, il y a un intérêt pour Frame en entreprisse : sur un SI massivement MS/IE, proposer une installation 'transparente' de la petite extension magique reste acceptable (enfin, pas pour tout le monde), et cela ouvre aux développeur de nouvelles possibilités (HTML5 !) pour les nouvelles applications. Penses-y, amis lecteur, si tu es DSI - vous êtes probablement plus nombreux à être des geeks furieux, mais sait-on ...


    21 septembre 2009

    AOP et autres instrumentations du bytecode

    Quand on découvre l'AOP (programmation orientée aspect) à travers les blogs et autres résultats que nous propose Google, on tombe immanquablement sur un exemple d'instrumentation du code par des logs.

    Si d'un point de vue didactique c'est un exemple qui a l'avantage d'être parlant pour tout le monde, d'un point de vue technique c'est une aberration :
    • les outils de logs modernes déterminent le nom de la classe/méthode et numéro de ligne à la volée, il serait donc dommage de perdre cette info dans nos logs. Or, en passant par un aspect, ce mécanisme va pointer dans le greffon de l'aspect, et pas là où on l'a appliqué
    • chaque ligne de log va nécessiter l'invocation du greffon, la copie des arguments, peut être même la construction d'un logger pour la classe considérée. Des millièmes de secondes qu'on va répéter des millions de fois, au final un dégradation mesurable des performances du code (si vous n'y croyez pas, j'ai vu une appli perdre 10% de son temps dans des mécanismes de log mal fichus).
    Evidemment, parler de gestion transactionnel pour montrer l'utilisation de l'AOP n'est pas le plus simple...

    Je rebondis cependant sur ce problème pédagogique : l'idée de base est bonne

    Personne n'apprécie de devoir lire des logs vides, mais n'aime pas pour autant passer du temps à ajouter des logs DEBUT/FIN dans tout le code, et voir une méthode initialement si belle et explicite polluée par des lignes de logger.trace( param = truc ).

    J'ai donc créé Logeek, un outil d'instrumentation du bytecode qui ajoute ces fameux logs si indispensables et si disgracieux. Contrairement à un outil d'AOP, Logeek fait de l'instrumentation agressive en ajoutant directement un attribut logger et le traçage des paramètres dans chaque méthode, là où AspectJ déporterait l'appel dans le greffon.

    En gros, partant de ce code :

    public boolean doSomething( String value, int count )
    {
    System.out.println( "done" );
    return true;
    }

    Loggek va modifier le bytecode pour qu'il ressemble à ceci (en pseudo-code puisque le source n'est pas modifié, et le bytecode n'a pas exactement cette structure)
    private static transient Logger __logger
    = LoggerFactory.getLogger( Foo.class );

    public boolean doSomething(String value, int count)
    {
    boolean returnedvalue;
    try
    {
    __logger.debug( "{" );
    __logger.trace( " value = {}", value );
    __logger.trace( " count = {}", count );

    System.out.println( "done" );
    returnedvalue = true;
    }
    catch (Throwable throwable )
    {
    __logger.trace( " throws {}", throwable );
    throw throwable;
    }
    __logger.trace( " return {}", returnedvalue );
    __logger.debug( "}" );
    return returnedvalue;
    }
    Pour comparaison, AspectJ produirait une transformation du bytecode qui ressemblerait plus à ceci :

    public boolean doSomething(String value, int count)
    {
    boolean returnedvalue;
    try
    {
    String arg1 = value.clone();
    int arg2 = count.clone();
    LoggingAspect.aspectOf().before( this, arg1, arg2 );

    System.out.println( "done" );
    returnedvalue = true;
    }
    catch (Throwable throwable )
    {
    LoggingAspect.aspectOf().afterThrowable( this, t );
    throw throwable;
    }
    LoggingAspect.aspectOf().after( this, returnedvalue );
    return returnedvalue;
    }
    La différence est subtile, mais dans ce second cas la source du log est le greffon de l'aspect, pas le code instrumenté, et au passage on paye même en mode TRACE (généralement désactivé) le prix d'une copie d'arguments et de plusieurs appels de méthodes.

    Avec ce mécanisme activé on obtient donc, en TRACE, toutes les infos utiles sur le code exécuté. L'utilisation de SLF4J permet de ne pas s'encombrer de if logger.isDebugEnabled(), mais l'outil pourrait tout aussi bien se baser sur l'API log4j et ajouter ces contrôles.

    Pour marquer le début/fin des méthodes j'utilise des accolades, car dans un éditeur un peu malin (comme NotePad++) le curseur positionné à côté met immédiatement en évidence sa petite soeur - c'est bien pratique ;)

    Tout ça via un plugin Maven, qu'il suffit d'ajouter à son POM.xml (qui sans ça serait bien trop concis)


    <plugin>
    <groupid>fr.loof.logeek</groupid>
    <artifactid>logeek-maven-plugin</artifactid>
    <executions>
    <execution>
    <goals>
    <goal>instrument</goal>
    </goals>
    <configuration>
    <includes>
    <include>**/*.class</include>
    </includes>
    <transformer>fr.loof.logeek.Slf4jLogging</transformer>
    </configuration>
    </execution>
    </executions>
    </plugin>


    Logeek devrait être déployé dans le dépôt Maven central sous peu, en version 0.0.1. Je suis ouvert à toutes vos suggestions pour la 0.0.2 :)

    18 septembre 2009

    premiers pas avec GWT 2.0

    Le plugin gwt-maven-plugin est disponible en version 1.2-SNAPSHOT avec un aperçu du support GWT 2.0. Les fonctionnalités ne sont pas forcément sans bugs et probablement encore incomplètes, mais les nouvelles options du compilateur sont déjà proposées.

    La mise en oeuvre nécessite de récupérer le SDK (prendre par exemple les builds proposés par SFEIR). Configurer ensuite le plugin en affectant le paramètre gwtHome, pour le forcer à utiliser cette version, alors que par défaut il s'adapte à vos dépendances.

    Vous avez alors accès à tout plein de nouvelles fonctionnalités, comme par exemple le draftCompile pour accélérer votre intégration continue, ou le rapport SOYC pour analyser la traduction de votre code Java en JavaScript et ses points noirs.

    Pas de date prévue pour la finalisation de cette version 1.2, mais je vais essayer de coller à l'actualité de GWT 2.0.

    14 septembre 2009

    Hibernate est un sacré comique

    Alerté par Julien, je fais un peu joujou avec les annotations @OneToOne et Hiernate.
    Voici grosso modo ce que je manipule :


    @OneToOne( fetch = FetchType.LAZY )
    private Foo precedent;

    @OneToOne( mappedBy = "precedent", fetch = FetchType.LAZY )
    private Foo suivant;
    Et là, dès que je charge une instance, j'ai autant de select qui partent en base que j'ai d'éléments dans ma chaîne suivant-précédent...

    Le piège, c'est que malgré le LAZY, hibernate veut identifier si la relation OneToOne inverse (mappedBy) est renseignée ou non. En fonction de la réponse il colle un proxy ou null.

    La solution, bien que pas très esthétique dans le code est simple : utiliser des OneToMany et se baser sur des collections de 1 élément :


    @OneToMany( fetch = FetchType.LAZY )
    private Set<Foo> suivants = new HashSet<>();

    public Foo getSuivant()
    {
    Iterator<Foo> it = suivants.iterator();
    return it.hasNext() ? it.next() : null;
    }

    public void setSuivant( Foo suivant )
    {
    for ( Foo item : suivants )
    {
    item.setPrecedent( null );
    }
    this.suivants.clear();

    suivant.setPrecedent( this );
    suivants.add( suivant );
    }


    Ca sent la grosse magouille, mais au moins ça ne casse pas la logique des get/set. Comme quoi la persistance "transparente" c'est pas encore tout à fait ça ;)

    BreizhJUG - saison 2

    Après deux mois de repos (?) pendant l'été, le BreizhJug repart sur les chapeaux de roue avec trois speackers pour une session spéciale "Spring ecosystem".

    Comme toujours, je prépare la session au dernier moment. Je n'échapperais donc pas au gros coup de stress en me rendant compte que j'ai une fois de plus oublié un truc.

    Histoire de se détendre, aujourd'hui c'est livraison au boulot, avec toute la ruche (pardon, l'openspace) attentive au moindre bug qui trainerait sous un tapis - disons que si on arrive au moins à faire passer tous nos tests jUnit ce serait un bon début.

    Rendez-vous ce soir :)

    04 septembre 2009

    Bye bye XP, welcome 7

    Hier soir, bonne surprise, mon processeur a cramé (sur le coup ça ne m'a pas vraiment fait rire).

    Comme j'avais prévu de renouveler ce "bon vieux" PC j'avais déjà sous le coude les composants de remplacement, j'ai donc juste du accélérer un peu les choses... En tant que committer Apache, j'ai droit à un abonnement MSDN et donc j'ai déjà Windows 7 FR alors que vous autres pauvres mortels devrez attendre le 22 octobre ;)

    Première bonne surprise, contrairement au 2h nécessaires pour installer XP, Seven s'installe "à la Linux" en une seule passe : pas de reboot en série et installation directe depuis le DVD - manque plus qu'à en faire un Live DVD ;)

    Seconde bonne surprise : tout mon matos est reconnu. Heureusement vu que Micro$oft a une fois de plus revu son API de drivers (elle doit être encore mieux que celle de Vista qui était déjà bien meilleure que celle de XP qui corrigeait les défauts de celle de 2000 qui remplaçait les défaillances de NT). Donc tous mes CD d'accompagnement conservés soigneusement s'avèrent inutiles.

    Je n'ai pas encore utilisé suffisamment le système pour me faire une opinion, et comme je ne suis pas passé par la case "vista" c'est assez déconcertant au début. J'ai a peu près trouvé mes marques pour l'instant.

    Reste à installer la panoplie des petits softs qu'on accumule au fil du temps et qui deviennent indispensables mais dont on ne sait même plus le nom ;)

    31 août 2009

    les cochons dans l' (open-)space

    Je découvre avec joie les plaisirs de l'openspace. Je m'en sort bien vu que le maxi-bureau est immense et réserve de grands espaces à chacun. Cependant il reste un bruit ambiant assez bas mais malgré tout omniprésent. J'ai horreur de bosser "dans une bulle" avec un casque sur les oreilles donc il va falloir que je m'y fasse, mais la concentration en souffre...
    Par ailleurs, on perd en convivialité puisqu'on a plus vraiment un ou deux collègues de bureau mais un "groupe local" pas vraiment proche.
    La cerise sur le gâteau c'est que le café du distributeur est infect.

    Youpi youpi

    11 août 2009

    la bonne gestion des versions

    Je me suis pris la tête avec une incompatibilité entre deux versions de bibliothèque.

    J'utilise mx4j, et pour faire de l'admin à distance sans RMI (pour diverses raison que je ne vais pas développer) j'utilise un connecteur HTTP. Mx4j utilise pour ça Jetty en mode embarqué.

    J'utilise aussi SoapUI, pour produire des mock des services que j'invoque. Lui aussi utilise Jetty.

    Là où le bât blesse c'est que SoapUI utilise Jetty6, dont le code est complètement revu par rapport aux versions précédentes. L'API totalement incompatible rend mx4j inutilisable. Du coup je regrette presque de ne pas faire de l'OSGi - presque, je n'ai pas encore mis un orteil dans ce truc mais ça à l'air assez casse-gueule ;)

    Je m'en suis sorti pour pas cher en faisant un bout de code pour adapter mx4j à Jetty6, mais j'en retiens une règle de développement : un changement d'API devrait TOUJOURS s'accompagner d'un changement de nom de package. JAXB2 utilise par exemple com.sun.xml.bind.v2. C'est peut être pas très joli, mais au moins on s'évite de nombreux conflits.

    Java Cloud computing - an 1

    Vous faites peut être partie de ceux qui ont reçu un "ID" pour jouer avec Google App Engine for Java.

    Vous avez peut être testé le support "EC2" de Hudson pour bénéficier d'une réserve de puissance lors des piques de charge de votre intégration continue.

    Dans tous les cas vous êtes convaincu que le cloud computing n'est plus une vue de l'esprit mais bien une solution concrète et disponible aujourd'hui ?

    Et bien réjouissez-vous : VMWare vient de se payer SpringSource, dont l'engagement en faveur d'OSGi est bien connu. Imaginez donc une ferme de Spring DM Servers, supervisée par un monitoring Hyperic (racheté par SpringSource), et accessibles en mode cloud via des machines virtuelles sur laquelle vous déployez depuis Eclipse vos bundles OSGi métier ...

    Moi, dans ma vraie vie je fais encore du JEE, et encore je viens juste de migrer en Java5, mais on peut tout de même rêver un peu ;) Quoi qu'il en soit, raisonner en "cloud" va devenir une facette importante du métier, alors préparer vous !

    Besoin de pistes ? Allez lire le blog du touilleur qui vous expliquera tout sur le sujet !

    10 août 2009

    m2eclipse - pas encore près pour la prod !

    Après des mois à essayer de configurer au mieux m2eclipse, d'alléger le workspace au maximum et de trouver des astuces pour que le "build automatically" soit exploitable sous Eclipse la conclusion s'impose : m2eclipse n'est pas prêt !

    m2eclipse prend comme parti de laisser Maven gérer les "ressources" (fichiers de conf, XML...) à la place d'Eclipse. Vu que l'utilisation du filtering Maven reste marginale ça ne concerne que peu de personnes. Cependant, cela signifie pour les autres un cycle mvn process-resource à chaque build incrémental d'Eclipse.

    ... et il y en a un paquet des builds incrémentaux, sans parler des multi-modules ou chaque projet déclenche un build des autres. On termine donc avec des builds maven en pagaille, à reconstruire 10 fois le même module :'(

    Alors, oui, m2eclipse permet à notre générateur de code de prendre en compte la moindre modification de WSDL. Mais qui modifie son WSDL chaque minute ? Le prix à payer est délirant, à moins d'avoir un PC octo-processeur à quatre coeurs (et encore ?).

    Moralité : le bon vieux mvn eclispe:eclipse, bien qu'il soit parfois un peu compliqué à configurer au petits oignons (je pense à AJDT) a de beaux jours devant lui !

    03 août 2009

    Rumeur ...


    J'apprends avec surprise par Messenger interposé que ma collègue du bureau d'à côté est enceinte de 8 mois. Il faut dire qu'avec 40KTM elle cache bien son jeu.

    L'info semble malgré tout se confirmer via une autre personne (désirant rester anonyme) ayant eu une information non-confirmée concernant des triplets à venir...

    L'intéressée refuse tout commentaire (c'est donc très louche), cependant le planning du projet encourage un sérieux doute avec 10 mystérieux jours de congés prévus à la fin du mois.

    Reste à savoir qui est le père ...

    31 juillet 2009

    35 ans, presque mort...

    Amusant de lire ici et ici le même constat que je peux faire :
    dans le système français, soit on devient chef, soit on est une moule. Donc quelqu'un qui fait encore du code après 10 ans d'expérience c'est pas logique, il devrait depuis longtemps diriger des juniors qui codent à sa place, voire diriger des chefs qui ont leurs propres sous-fifres.

    Il va donc falloir que je revoie un peu mon CV pour me propulser chef de software factory (i.e. le gars qui arrive encore à comprendre comment démerder le build maven), ou chef de la cellule d'innovation et de veille technologique, ou chef de la machine à café, enfin chef d'un truc quelconque.

    30 juillet 2009

    maven, eclipse et aspectJ : si si, ça marche

    Mon projet préféré du moment est une énorme usine à gaz avec un bon paquet de modules Maven. Sous Eclipse avec m2eclipse, des builds Maven se lancent en pagaille si on active le "build automatically".

    Soucis, mon projet dépend énormément d'aspectJ (via mon Fonzie à moi que j'ai) et la compilation maven prend des plombes.

    • option 1 :
    décocher le build automatique. Il faut alors lancer des builds à la main et bien sur dans le bon ordre, autant dire que c'est galère aussi et qu'on se retrouve souvent à exécuter du code qui ne colle pas aux sources
    • option 2 :
    ne plus gérer les relations inter-projet sous eclipse en tant que tel, mais passer par les JAR. On lance donc explicitement un gros build Maven avant de tester. Plus prédictif mais pas du tout productif
    • option 3 :
    Utiliser AJDT 2.0, dont le build incrémental est un régal. Soucis : si l'intégration avec m2eclipse configure tout bien comme il faut AJDT, le plugin Maven est toujours exécuté lors des builds maven et on retrouve le problème initial. D'où ce magnifique hack :

    <profiles>
    <profile>
    <id>m2eclipse</id>
    <activation>
    <property>
    <name>osgi.bundles.defaultStartLevel</name>
    </property>
    </activation>

    <build>
    <plugins>
    <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <configuration>
    <excludes>
    <exclude>**/*.java</exclude>
    </excludes>
    </configuration>
    </plugin>
    </plugins>
    </build>
    </profile>

    Avec cette conf magique, AJDT est correctement configuré par m2eclipse et fait parfaitement son boulot (le hotswap permet ainsi d'éditer le code et de constater le résultat à chaud dans Tomcat), ET les build maven sous eclipse sont raisonablement rapides, le plugin aspectj ne faisant plus rien.

    C'est un hack bien pourri, mais ça montre que m2eclipse 0.9.9, une fois le "custom lifecycle mapping" en place et supporté par de nombreux plugins, devrait nous faire oublier toutes ces années de cohabitation difficile entre Maven et Eclipse.

    maven, eclipse et aspectJ : si si, ça marche

    28 juillet 2009

    Maven et Hudson main dans la main


    Mon projet prend 30 minutes pour se construire, tests IT compris. Dans de nombreux cas, les modifications associées à un commit ne concernent qu'un sous ensemble de modules et un échec pourrait être détecté en une dizaine de minutes. Même constat pour le retour au bleu : 30 minutes d'attente pour constater qu'une correction en périphérie du projet est valide, avec une reconstruction de 90% du projet qui n'est pas du tout concerné.

    Pour le rendre plus réactif, j'ai du découper "manuellement" le projet selon ses modules maven (principaux) et prévoir les chemins SVN et autres commandes MVN pour que seuls les projets considérés soient construits. Ca va déjà nettement mieux, mais pour pousser la logique jusqu'au bout il faudrait configurer un job Hudson pour chaque module maven, et assurer la mise à jour de ces jobs à chaque modification de la structure des modules.

    C'est fastidieux, et source de soucis divers, mais bon ça marche et mon build est devenu nettement plus réactif - effet de bord non négligeable, on est passé au grand bleu après de nombreuses heures de gyrophare rouge allumé dans le couloir...


    Je pourrais conclure là dessus, mais Hudson n'en finit plus de métonner :

    Vous le savez peut être, Maven 2.1 permet de spécifier une liste de modules à construire, plutôt que de se coltiner tous les modules d'un multiprojet. Maven se comporte alors à la make, c'est à dire qu'il va construire les modules spécifiés + tous les modules nécessaires. On peut aussi lui demander de se comporter à la hudson, c'est à dire de construire tous les modules qui peuvent potentiellement être impactés par les modules construits.

    Il ne restait donc qu'un pas à franchir pour que Hudson puisse (enfin) construire intelligement les projects Maven un peu trop volumineux en ne sélectionnant que les modules impactés par un commit.

    Avec la révision 138 d'Hudson, prévue en fin de semaine, une nouvelle option avancée dans les options de build Maven devrait apporter cette fonctionnalité tant attendue. Jusqu'ici seul Continuum savait gérer finement les modules Maven, voici donc que son concurrent vient lui couper l'herbe sous le pied.

    Elle est pas belle la vie ?
    (en fait non, il y a encore Eclispe, JBoss, et ma non-augment' de fin d'année à considérer)

    23 juillet 2009

    spam attack

    L'instance Jira qui héberge les rapports d'anomalies et d'évolution des projects Apache et Codehaus subit une attaque en règle de la part d'un spammeur.

    De nombreux tickets sont créés avec des titres à la "Angélina Jolie Nue" et un lien vers une vidéo. Du pur spam pourri, mais l'attaque est sérieuse car le spammer semble disposer d'un grand nombre de compte, ou d'un bon script pour en créer à la demande. Le Jira comporte désormais quelques centaines de références à des stars du showbiz, ce qui change un peu des NullPointers, mais n'est pas vraiment très utile aux projets considérés.

    Comme quoi le contrôler par eMail de confirmation et autre Captcha n'empèche pas ce genre de choses.

    m2eclipse - avec modération

    La dernière version "dev" de m2eclipse (0.9.9) introduit les prémisses de ce que pourrait être un support correct de Maven dans Eclipse.

    L'idée est de marier les plugins Maven avec le build incrémental d'Eclipse, plutôt que de lancer en série des builds Maven (potentiellement bien assez longs) à chaque modification d'un fichier du workspace. Dans la version 0.9.8, avec un bon gros projet multi-module et quelques plugins de génération de code ou d'instrumentation AOP le build automatically est absolument inexploitable.

    On peut donc espérer voir enfin le bout du tunnel ... et effectivement sur un projet de test la différence est significative. On se croirait presque sous InteliJ Idea :)

    Tout irait bien si cette 0.9.9 ne devait pas ce fonctionnement avancé à un build récent de maven 3, ce qui inclut les nouvelles API de gestion des artefacts maven (Mercury). Autrement dit, tout plugin qui dépendrait un peu trop des API de résolution d'artefacts gaufre lamentablement avec cette version. Exemple, la génération de code JAXB (org.jvnet:jaxb2-maven-plugin) :

    java.lang.NullPointerException
    at org.apache.maven.project.artifact.MavenMetadataSource.createArtifacts(

    Ca peut aussi prendre des formes plus amusantes :

    java.lang.NoSuchMethodError: org.apache.maven.artifact.resolver.ArtifactResolutionResult.getArtifactResolutionNodes()Ljava/util/Set;

    Précisons aussi que l'API des ProjectConfigurator a changé. Elle donnait un avantage à m2eclipse en permettant de configurer automagiquement les plugins Eclipse équivalent de plugins Maven (SVN, Checkstyle, Sysdeo-Tomcat...). Il va falloir attendre la mise à jour des quelques plugins Eclipse qui ont fait l'effort de développer un support Maven2, et/ou la totale compatibilité des plugins Maven2 avec Maven3.

    Moralité : à moins d'avoir un projet vraiment pas bien méchant, ne tentez surtout pas la mise à jour ! Ce numéro de version symbolique "0.9.9" ne signifie pas selon moi qu'on est si proche que ça d'un m2eclipse 1.0-final capable de prendre en charge des projets Maven issus de la vraie vie.

    16 juillet 2009

    ie8 est là


    Surprise ce soir - "des mises à jour sont disponibles : ie8 pour XP"

    La nouvelle mouture du navigateur le plus décrié et le plus installé (à l'insu de votre plein grée) est donc en train d'exploiter ce formidable outil de distribution qu'est windows update pour venir s'inviter sur les PC grand public.

    Je ne vais pas vous raconter ce qu'il y a de nouveau dans ce navigateur (je vous laisse googler) mais on peut espérer un peu mieux que IE7, tout en sachant d'avance qu'on restera en retrait de ses petits camarades.

    La bonne nouvelle c'est que GWT est déjà prèt pour IE8, et que le récent GWT 1.7 permet de produire une version de nos applis web optimisée pour le meilleur support CSS/JS/HTML de ce nouveau navigateur ... à condition que la page hôte ait un Doctype HTML Strict ! Compatibilité oblige avec les millions de sites au code HTML poubelle, en son absence c'est direction "quirk-mode" et fonctionnement équivalent à ie6/7

    Et comme toujours, quel sera le naviagateur majoritaire en entreprise ? IE6 ! Pour ne pas se coltiner une migration dont les effets de bords sont innombrables, couteux et mal maitrisés, aucun DSI ne pousserait en ces temps de restrictions budgétaires à passer à IE7 qui n'apporterait rien, et encore moins à un IE8 qui fait à peine mieux.

    Conclusion : on est pas prèt de voir des applis intranet exploiter CSS3 ...

    ... sauf si une proposition, évoquée sur la liste gwt-contributors, est retenue : utiliser le defered binding pour supporter des fonctions CSS3/HTML5 depuis GWT, en ayant recours à des "hacks" sur IE. Par exemple les boxes à bord rond peuvent être rendus par une simple directive CSS sur tous les navigateurs non Microsoftesques et via un .htc ou une ignoble imbrication de <table> sous IE.

    Le monde du web n'a pas fini de nous surprendre

    03 juillet 2009

    10 jours offline

    A partir de demain va commencer pour moi une épreuve sans équivalent : 10 jours de vacances sur l'île d'Oléron ... sans accès à Internet !

    Je vais donc devoir m'inscrire à l'école de Surf pour me lessiver la boîte à neurones, ou pire, jouer avec les enfants (quelle horreur !). Ma dernière session de Surf remontant à ... 10 ans, sur une Bic Alto (je sais, c'est pas un surf mais un funboard, et bien ça marche pas si mal), la seconde option sera peut-être même la seule possible :'(


    Je pense jalousement à mes collègues qui restent confortablement au boulot, bercés par le doux ronflement du ventilateur, avec une belle connexion permanente et illimité au Net ... bande de veinards.

    update 14/07 :
    Vous connaissez le principe : "en recopiant son dessin, notre dessinateur a commis 7 erreurs. Seras-tu capable de les retrouver ?"



    Le BreizhJUG en vacances


    Pendant l'été, le BreizhJUG organise un super concours photo. Pour participer il suffit d'envoyer à team@breizhjug.org une photo de son lieux de vacance mettant en scène le logo du JUG. L'originalité sera bien sur récompensée, mais l'exotisme peut aussi aider, pour remporter un magnifique lot (non encore déterminé, mais promis il sera chouette).

    Ma modeste contribution, suite à un petit week-end touristique :

    02 juillet 2009

    Le BreizhJUG fait son cinéma

    Comme le BreizhJUG est fermé pendant l'été, il faut bien s'occuper, et surtout ne pas perdre le contact avec nos membres. Aussi nous avons tourné hier soir une vidéo de promotion :


    Le scénario est de moi, d'où sa très grande richesse, ainsi que la réalisation, d'une exceptionnelle qualité merci.

    Un grand merci à Marie-Christine de s'être prétée au jeu et d'avoir afronté les regards quelque peut surpris de ses collègues lorsqu'elle a tenté le high-kick triple-salto dans le couloir (malheureusement coupé au montage).

    Passez le mot :)

    25 juin 2009

    Laser Saber Extreme Feedback Device (TM)


    Ca le fait, non ?

    assembly mon amour...

    Le plugin maven-assembly est probablement le plus énervant de la galaxie Maven.

    Comme de nombreux Mavenistes j'utilise "l'héritage naturel" qui consiste à utiliser un même POM pour définir les modules du projet et comme parent commun.

    Effet de bord : la construction mvn install commence par le parent, puis les modules, ce qui est logique si on veut que les modules "voient" leur parent dans son état final.

    Maintenant, si je veux produire un assembly, ce plugin doit s'exécuter ... après les modules. Le bon vieux problème de l'oeuf et de la poule !

    Une solution simple qui peut servir à d'autres : un POM "pom-assembly.xml" qui ne déclare que le plugin assembly attaché à la phase install et un unique module "."

    <modules>
    <module>.</module>
    </modules>

    <build>
    <defaultgoal>install</defaultgoal>
    <plugins>
    <plugin>
    <artifactid>maven-assembly-plugin</artifactid>
    <inherited>false</inherited>
    ...
    </plugin>
    </plugins>
    </build>

    en lançant un mvn -f pom-assembly.xml install maven va enchaîner l'install des modules mais pas celle de ce POM qui n'est plus le parent global.

    D:\projets\xx>mvn -f pom-assembly.xml
    [INFO] Scanning for projects...
    [INFO] Reactor build order:
    [INFO] xx parent
    [INFO] xx :: Composants GWT
    [INFO] xx :: configuration
    [INFO] xx :: infrastructure
    [INFO] xx :: wsdl
    [INFO] xx :: modele
    [INFO] xx :: services
    [INFO] xx :: persistance
    [INFO] xx :: ordonnanceur
    [INFO] xx :: services web
    [INFO] xx :: batchs
    [INFO] xx :: simulateurs
    [INFO] xx :: ear
    [INFO] xx :: tests d'intÚgration
    [INFO] xx :: assembly
    [INFO] -----------------------------------------------

    Je sais, ça sent le gros hack à deux cents, mais ça dépanne en attendant Maven 3