05 mai 2010

Software factory WishList

Depuis quelques années, je travaille à mettre en place des outils de "forge logicielle", mutualisés ou dédiés à un projet; voici les outils que j'aimerai assembler pour fournir un environnement clé en main sur projet :

  • une machine dédiée (ou une VM) sous Ubuntu, système facile à installer, bien documenté. Le passage sur un Linux permet déjà de tester toutes les problématiques d'encodage de caractères et de séparateurs de fichiers;
  • un SVN, un Git ou Mercurial, selon les goûts; 
  • un Nexus pour la conservation des artefacts et l'économie de bande passante;
  • un serveur Hudson, qui s'installe via un paquet DEB que c'est tellement simple que ça fait pleurer;
  • un build Maven (sans blague ?);
  • idéalement, une conf magique pour que le build n'ait pas accès au Net, par exemple via http.proxyHost. L'idée est d'empêcher le parser XML de récupérer les schémas XSD sur le Net - si, ça arrive !
  • un serveur de démo/test/perfs, sur lequel la dernière version NIGHTLY est déployée automagiquement;
  • un job dédié pour alimenter un Sonar en build nocturne; Je préfère prendre Sonar avec sa conf par défaut puis voir ce qui en émerge et comment ça évolue, pour voir là où l'équipe doit progresser et réduire la gravité des règles qu'elle considère inutiles APRES les avoir violées trop régulièrement (au moins, on s'est posé la question). En général, les indicateurs de complexité s'envolent rapidement ;)
  • un wiki projet, j'aime bien xWiki qui est puissant et colle bien dans cette forge "tout java". Les plugins Eclipse et Office (pas testé) peuvent aussi aider à faire apprécier le principe du Wiki même aux plus classiques d'entre nous;
  • un gestionnaire de tâches/bugs. Sauf à avoir un JIRA en centralisé, il peut être intéressant de le conserver sur la machine projet avec le reste et de gérer les sauvegardes d'ensemble de la forge. Je n'ai pas de préférence faute d'avoir pu tester autre chose que cette bouze de Quality Center;
  • pourquoi pas un serveur iceScrum pour ceux qui pratiquent;
  • un outil de revue de code, dans l'esprit de Crubicle, et dans l'idéal intégré à l'IDE... je n'ai pour l'instant rien trouvé;
  • un environnement de dev prêt à installer. Pour l'instant je fais un gros ZIP d'Eclipse + JDK + Maven + Tomcat + ... mais c'est pas le top, surtout pour gérer les mises à jour.

Je suis sûr qu'il manque plein de briques intéressantes à rajouter à cette wishlist, j'attend vos suggestions ;)

29 avril 2010

Let's GIT !

La grande mode en ce moment en terme de gestionnaire de code c'est Git. La différence avec Subversion, la grande mode de juste avant, c'est que Git est distribué. Super, et alors ?

Prenons une journée type. Vous bossez sur un item qui vous fait modifier du code un peu partout et quelques refactorings bien sympatoches. Arrive alors une urgence bien trempée, un point fonctionnel pas clair qui oblige à temporiser, ou encore une soudaine envie de passer à autre chose parce que là, vraiment, ça n'avance pas.

Que faire ? Lancer un nouveau checkout pour partir sur autre chose et switcher entre deux workspaces Eclipse ? Idéalement, il aurait fallu travailler dans une branche, comme ça passer à autre chose se ferait sans perdre l'état en cours... sauf qu'il aurait fallu le prévoir à l'avance et que la manipulation ne dépende pas de votre réseau de %@! qui semble être basé sur des modems 56k.

Et bien c'est ce que propose Git ! 

Git gère un repository rien qu'à vous dans lequel vous pouvez brancher, switcher, commiter, comparer et tripatouiller tout ce que vous voulez. Etant 100% local, ces opérations sont extrêmement rapides, donc deviennent naturelles (alors que sous SVN elles sont méconnues)

Pour bosser, on commence par créer une branche pour la tâche considérée, et committer dessus à chaque fois qu'on le juge utile. A tout moment on peut changer de branche, tout annuler, revenir en arrière, etc.

Evidemment, à un moment il faut bien envoyer tout ça à ses petits camarades. Mais comme le repo Git est local, on peut remanier les commits effectués pour en faire quelque chose de plus cohérent, ce qui évite l'effet "fix" qu'on constate sur SVN : 1 gros commit suivi de quelques autres pour les fichiers "oubliés". Du coup la synchronisation entre repos Git est nettement plus atomique. Idem pour travailler à deux, on se synchronise entre binômes sans perturber le repository de référence (avec Git, personne ne fait particulièrement référence, mais dans la vraie vie il faut bien se mettre d'accord pour livrer !).

Bref, Git c'est une autre façon de bosser qui va rapidement devenir indispensable, comme à l'époque où on avait pas de SCM et où on partageait tous un montage réseau...

Les points faibles de Git ?

Outil en ligne de commande, il reste particulièrement obscur sur ces options. L'intégration dans les IDE est moyenne avec un retard notable d'Eclipse (quelle surprise). Enfin, le concept étant relativement nouveau il faut apprendre à l'apprivoiser.

Pourquoi se préoccuper de Git ?

Après tout, Subversion marche plutôt bien. Et bien, si le cas d'usage exposé ci-dessus vous laisse froid, sachez que la prochaine version suivante  de SVN (la N+2 quoi) incorporera un mécanisme de distribution, sans doute inspiré par le succès de Git et consorts. Ce n'est donc pas qu'un effet de Geekitude,  mais bien une évolution profonde des SCM, autant être dans les premiers à savoir en tirer partie.

Comment commencer avec Git ?


Pour faire mumuse, Google Code propose un hébergement Mercurial, assez comparable à Git mais qui a moins le vent en poupe ces temps ci (sans de raison évidente).
Le plus concret est d'utiliser Git au dessus de SVN. Le repo local Git peut en effet se synchroniser sur un SVN classique, ce qui permet d'en profiter sur son poste sans perturber l'organisation de l'équipe. Et une fois le pli pris...

Reste à apprendre les commandes assez obscures de Git et l'utilisation du GitBash sous Windows - plateforme qui n'est pas à l'honneur pour cet outil.

14 avril 2010

La licence la plus restrictive jamais imaginée ?


Une nouvelle licence vient de voir le jour, la plus restrictive jamais imaginée à ma connaissance (mais je peux me tromper)

Ce n'est pas de la GPL ou d'une de ses variantes, qualifiées de "virales" - terme qui semble taillé pour faire dresser les cheveux des DSI.

Ce n'est pas non plus d'une licence calculée au nombre de coeurs CPU, ce qui est pourtant un concept déjà assez étonnant qui oblige à acheter plusieurs machines là où une seule suffirait.

Non, je parle de la licence qui accompagne le lancement de l'iPhone de 4ème génération, licence qui dicte purement et simplement l'environnement de développement autorisé. Vous devez donc EXCLUSIVEMENT utiliser le SDK Apple et le langage de programmation ObectiveC pour avoir accès à l'AppleStore. Pas de traduction de langage, d'èmulateur ou d'interpréteur JIT, rien que du "made by Apple" et rien d'autre.

A ce rythme, la version 5 imposera de développer sur MacBook Pro 15" ou supérieur exclusivement, ou encore de disposer d'un abonnement internet d'un partenaire Apple pour uploader sur l'AppleStore, ou peut être de boire exclusivement de la Budweiser, qui sait.

Alors, oui, Apple dispose d'ergonomes de génie, d'un marketing à faire pâlir n'importe qui, mais faut pas pousser. Si c'est la seule arme de l'iPhone pour couper l'herbe sous le pied des développements compatibles iPhone + Android via un langage pivot, ça ne va pas dans le sens de belles applications innovantes et universelles à des prix accessibles.

12 avril 2010

Maven 3 en multithread

Une grande majorité des projets basés sur Maven suit la convention de décomposer le projet en modules, selon l'architecture ou les domaines fonctionnels de l'application. Assez fréquemment on retrouve donc quelques modules bas niveau sur lesquels sont basés des module plus avancés, services web, batchs ou IHM web.

Un build "classique" enchaîne la construction de ces modules sans tirer parti du parallélisme de l'architecture de la machine. Si les I/O restent un élément important dans la vélocité du build (pour ma part, mon repository local est dans un RamDisk ce qui booste bien les choses), il est dommage de laisser nos quad-core dormir en attendant la prochaine compilation.

Depuis la semaine dernière, le trunk de Maven3 intègre une évolution qui était pour l'instant développée sur GitHub en pure expérimentation : il s'agit de la parallélisation du build. Pour expérimenter cette option, vous pouvez récupérer un nightly-build de maven 3 sur l'intégration continue du projet.

L'option -T permet de définir le nombre de threads qui vont supporter le build. Maven se charge de répartir la construction des modules du projet sur ces différents Threads et de réordonner le log pour qu'il reste lisible selon un ordre "classique".

Pour ma part, je n'ai pas réussi à le faire fonctionner sur des projets significatifs. Avec mon "gros" projet, je tombe sur une ConcurrentModificationException lors de la compilation AspectJ. Sur un build Archiva qui trainait sur mon disque (nostalgie...) c'est l'instrumentation JPox qui échoue.

Il est probable qu'aucun plugin maven ou outil impliqué dans le build n'ai prévu jusqu'ici d'être utilisé dans un cadre multi-threadé de ce type... il va donc y avoir une grosse campagne de test et d'évangélisation à prévoir. En attendant, Maven est à ma connaissance le seul outil de build a expérimenter cette voie, qui devrait prendre tout son sens sur les fermes d'intégration continue disposant de multi-coeurs et qui pourraient ainsi devenir très réactives.

Wait & See...

07 avril 2010

Revue de code @vec des @nnotations

Les gars de Google se sont bien amusés avec Google GAG, mais l'idée était intéressante. Pour faire suite à mon billet sur le plugin Sonar de revue de code, passer directement par le code source sous SVN pour associer les commentaires de revue et le code considéré, c'est une solution pratique.

Je lance donc avec mes petits camarades du BreizhJUG une super top toute nouvelle librairie d'annotations : CRADoc. Les suggestions/contributions sont les bienvenues !

public class Sample
{
    /**
     * Moi y'en a faire du JavaDoc pour le fun qu'il décrit rien de
     * qu'est ce que dont ça fait la chose dessous là
     */
    @tesSouhaits( value = "t'as avalé un becherel de travers ?", 
                  reviewer = "jtoubon" )
    public void codeDeMerde()
    {
        @ttention( "il y a plus simple pour créer des double..." )
        double d = new Double( "1.0" ).doubleValue();

        @bracadabra( "fun, mais ça sert à quoi exactement ?" )
        double k = ( d + 2 - 2 );
    }
}

06 avril 2010

La fuite des cerveaux

Koshuke Kawaguchi, développeur de génie a qui on doit (entre autre) le célèbre serveur d'intégration continue Hudson, annonce son départ de SUN/Oracle. Mauvaise nouvelle pour SNORCL, mais les utilisateurs d'Hudson n'ont pas de soucis à se faire car Koshuke se lance dans un nouveau projet visant à propulser son bébé à un autre niveau.

L'idée ne semble pas nouvelle, reste à savoir si ce pas aurait été franchi aussi rapidement sans le rachat de SUN... Il va y avoir quelques cadavres dans cette fusion.

05 avril 2010

Joyeuses Pâques

Pour Pâques, méfiez vous des lapins-vampires.


Plus sérieusement (si on peut dire), et si la présence exceptionnelle d'Emmanuel Bernard ne suffit pas à vous motiver, le BreizhJUG va se transformer en chasse aux oeufs dans le grand amphi de Supélec. Contrairement à d'autres notre JUG a la chance de ne pas être limité en nombre de places, alors c'est l'occasion de le faire découvrir à vos collègues : passez le mot !

03 avril 2010

L'effet tondeuse

Ce week-end pascal est consacré à une longue réflexion pleine de conséquences. Dans ces cas là, j'ai une astuce : la tondeuse.

En plus d'entretenir le jardin, cet instrument possède un pilotage simple qui libère l'activité neuronale. Il m'arrive donc couramment d'avoir recours à cet ustensile - de jardinage a priori - pour réfléchir activement ou prendre des décisions.
J'ai trouvé une explication théorique à cette pratique : d'après cet article, le développement neuronal du jeune enfant est favorisé par le quatre-pattes et par les mouvements saccadés qu'il impose à la boîte crânienne. Ma théorie est donc qu'on peut extrapoler ce résultat à l'âge adulte, les vibrations d'un engin à moteur favorisant ainsi le bon fonctionnement de la matière grise et la résolution de problèmes qui paraissaient hors de portée.

Je propose donc qu'on équipe tous les bureaux d'études de grands espaces verts, en plus ça sera plus joli.

01 avril 2010

sorry Mr McFish

Vous avez été nombreux à colporter mon poisson d'avril 2010, ce qui a amené plus de 450 visiteurs à douter un court instant de la véracité de ma fausse page 01Net. Le pot aux roses était assez évident et je n'ai pas pris le temps de masquer un peu mieux l'URL pour laisser planer un peu le doute.


Une petite victoire tout de même, car parmi quelques collègues moins "geeks" que les habitués de ce blog, plusieurs se sont bien fait prendre au piège. Sans parler d'un client particulièrement réceptif qui a tellement plongé que personne n'a osé lui dire qu'il s'agissait d'un fake. Il faut tout de même qu'on lui dise la vérité, sans quoi la prochaine réponse à appel d'offre risque d'être comique.

De mon côté je me suis bien marré de voir l'inventivité des habitués de la bloggosphère, entre xebia qui nous invente des lunettes de réalité augmentée qui ajoutent des post-its partout, le touilleur qui se croit revenu en 1999 à l'aire des dot_com, et Google qui nous sort des librairies délirantes MAIS fonctionnelles - le poisson d'avril qui pourrait cacher une vraie bonne idée ? Je ne sais pas si quelqu'un a essayé Google Street View avec des lunettes 3D pour voir si ça marchait vraiment, mais on se demande si c'est un vrai pur gag ou une idée délirante qui deviendra notre quotidien dans 5 ans...

Quand au traducteur Français / Chien sur android, figurez vous que ça existe en vrai (mais pas sur android) - certes, pour les gogos fortunés qui n'ont plus que leur caniche comme amis.

Google Buzz, c'est fini

Suite à l'action du gouvernement français pour sauver la langue française d'anglicisme honteux, Google se voit contraint de changer le nom de sa fonctionnalité Google Buzz dans la version française de gMail.


Reste à savoir si Google Ramdam connaîtra un meilleur accueil que son prédécesseur...

31 mars 2010

MavenShell : à tester d'urgence

Avec la finalisation de Maven 3, Sonatype commence à sortir des outils autour de ce nouveau coeur, enfin extensible à souhait. MavenShell est un de ceux-ci, conçu pour les fans de la ligne de commande, mais qui veulent aussi un outil pointu et rapide.

Le secret de MvnShell c'est tout simplement qu'il conserve en cache les POM et la configuration des plugins déjà exécutés dans le shell. En pratique, une fois le premier build passé il permet de gagner un peu de temps sur les builds successifs.

Bien sûr, si la majorité du temps passé sur un build concerne le passage des tests ça ne va pas changer grand chose, mais c'est toujours ça de pris.

Autre bonus de ce shell, via l'intégration de JNA, il permet d'avoir une console colorée, agréable pour éplucher plus efficacement le log du build. Il faut dire qu'un log peut parfois être particulièrement inexploitable, avec un mix des divers plugins impliqués et de la sortie console des tests. Le log Maven3 dans le shell fait ainsi ressortir chaque plugin avec son exécution et le module maven considéré, ça aide bien.

Pas de quoi faire une révolution tout ça, mais tout de même un exemple de ce que va permettre Maven 3 : de nouveaux outils, de nouvelles extensions. Je pense au support dans les IDE bien sûr, mais aussi à l'intégration continue (plutôt que les hacks actuels pour scruter le build Maven2), à la manipulation des méta-données dans le repository, pouquoi pas aussi aux outils de Q&A, à une meilleure exploitation du parallélisme, etc.

Vous me direz, tout ça c'est pour les projets Maven3. Et bien détrompez-vous, je fais mes tests avec un projet qui utilise "officiellement" Maven 2 et je n'ai pour l'instant rencontré aucun problème de compatibilité, que ce soit avec ce shell ou avec la dernière mouture de m2eclipse.

Alors, c'est vrai, Maven 3 ce n'est pas encore pour tout de suite, mais ce n'est plus de la science fiction.

Excellent article sur Spring, l'innovation et la standardisation

Je viens de lire cet excellent article qui compare le chemin parcouru par Spring et JBoss au travers de la normalisation de leurs technologies par le Java Community Process (JCP).

L'article sait garder un bon niveau de neutralité et expose très clairement ses arguments. Spring a toujours joué les pieds dans le plat et la critique - justifié dans de nombreux cas - alors que la ligne prise par JBoss a toujours été claire vers la normalisation d'Hibenate et de Seam par le JCP.

Si les deux protagonistes n'ont de toute façon pas toujours été très fair-play, il en sort :

  • un Seam 3 basé sur les normes de JavaEE6, et une image de JBoss comme moteur sur ce sujet;
  • un Hibernate, déjà standard de fait, sorti renforcé par la norme JPA (il y a encore des gens qui ne veulent pas entendre parler d'Hibernate, amusez vous bien les gars ...);
  • un Spring 3 qui déçoit pour son peu de contenu (pour ceux qui n'ont que faire d'OSGi en tout cas);
  • une norme @Inject qui a le mérite d'exister mais qui fait un peu court. Spring implémente bien cette norme mais elle ne suffit pas à bâtir une application;
  • une image déplorable de Spring sur son intervention tardive et polémique dans le JCP. Autant la critique du modèle EJB était argumentée, autant la participation de SpringSource à la JSR JavaEE6 aurait pu être bien plus constructive. C'est bien de taper dans la fourmilière mais au bout d'un moment il faut aussi savoir reconstruire;

    Sur l'adoption tardive des technologies par Spring je suis plus réservé. Les dates indiquées semblent montrer un retard à l'allumage de ~3 ans, je ne les met pas en doute, mais ces technologies nécessitent un temps d'appropriation et de maturation. Si Spring s'était jeté sur JSF 1.0 dès sa conception on aurait jamais eu SpringMVC. Le rôle que c'est donné Spring de ce point de vue est de proposer un regard critique et argumenté sur la mise en oeuvre de ces standards, je ne suis pas choqué que ça nécessite un peu de recul.

    26 mars 2010

    Flash à bout de souffle (?)

    Quand on parle d'interface web sexy, on pense souvent à Flash. Il faut dire que les années IE6 (qui se prolongent pour certains) ont fait des dégâts pour la réputation de JavaScript et que Flash était la seule solution viable.
    Aujourd'hui HTML5 est mature et bien supporté par les navigateurs récents. Le ralliement d' IE 9 est un signe des temps qui montre que c'est bien la plateforme du futur.

    OK mais qu'en est-il de la productivité des développeurs ?

    Personnellement je suis fan de GWT car il me permet de rester dans le même langage sur toute ma chaîne de développement. Mais ceux qui ont franchi le pas d'apprendre ActionScript et d'acheter FlexBuilder n'ont pas ce genre de considérations.

    Je tombe via Ajaxian.com sur ce billet, qui décrit l'abandon de Flash pour HTML5 (canvas). L'intérêt de ce billet n'est pas la prouesse technologique de faire "aussi bien" que la référence Flash - quoi que c'est déjà intéressant pour ça - mais qu'il argumente le pourquoi et les avantages de cette migration.

    • moins de code et un "livrable" plus compact. Une bonne baffe pour ceux qui voyaient dans le format binaire de Flash un argument de compacité;
    • un meilleur support sous Linux (j'y ajouterais les plateformes mobiles, qui ne sont pas la cible ici);
    • une chaîne de production plus simple, en l'absence de phase de compilation;
    • une meilleure intégration avec le reste de la page web (événements clavier, gestion du curseur ...)

    Cependant, le billet met aussi en évidence les points forts de Flash :
    • support des polices de caractères embarquées;
    • des manques dans HTML5 sur la manipulation de fragments HTML, le clipping et le rafraichissement

    HTML5 n'est donc pas la solution miracle à tous les problèmes (chaque techno passe par une phase où tout le monde y voit le messie avant de comprendre qu'elle a ses limites et ses faiblesses). Par contre c'est une alternative viable et performantes à Flash pour de nombreuses utilisations. Dans certains cas, cela peut même être une solution plus universelle et plus performante (il n'y a toujours pas de lecteur Flash sur l'iPhone à ma connaissance)

    23 mars 2010

    Un Nexus "agence"

    Au premiers temps, j'ai géré un "maven_proxy", lequel s'est rapidement noyé sous une masse de jars hétéroclites. Il faut dire qu'à cet époque il n'y avait pas de consensus sur le référencement des apis Java, sans parler de la migration vers Maven2 qui s'est jouée pour nous à cette époque. Il en ressort un répertoire maven_repo avec des doublons, triplets, voir plus (6 versions de EJB2.jar).

    J'ai alors contribué à Archiva pour supporter la conversion à la volée des requêtes Maven1 sur une repository Maven2. Ca m'a valu mon titre de committer puis de PMC sur le projet. Archiva a ainsi tourné quelques temps en version SNAPSHOT pour remplacer le proxy vieillissant. Si le service était là, ça restait du developpement "direct to production" pour corriger les divers problèmes rencontrés.

    Force est de constater qu'après cette date j'ai manqué de temps pour contribuer à Archiva, et que le repository associé, géré par un Archiva 1.0 en manque de suivi, est lui aussi parti en vrille. Au dernière nouvelles, il n'arrive plus à télécharger de nouveaux JARs (sans doute à cause des métadonnées), et la tentative de mise à jour vers une version récente d'Archiva a été un échec. Il faudrait reconstruire toute la conf et le repo, pas le temps ...

    Je me tourne donc vers Nexus, que j'ai du installer pour un gros projet afin de publier des SNAPSHOTs, évitant à chaque membre de l'équipe de devoir ouvrir 20 modules sous Eclipse. Il faut bien l'admettre, Nexus marche très bien et sa configuration de base est à la portée du premier venu.

    Le temps est donc venu de trahir ceux qui m'ont offert mon eMail en "@apache.org" et de renier Archiva pour passer à Nexus -- le côté obscur de la force, tout ça.

    Step 1 : demander la création d'une VM - avec un gros disque - et y installer un Ubuntu (y'a que ça de vrai)

    Step 2 : suivre la doc de Nexus qui est tellement bien faite que ça fait mal pour les autres

    Step 3 : configurer les proxies qui vont bien pour récolter sur le Net toutes les bibliothèques qui vont bien

    Step 4 [c'est là que ça devient intéressant] : jouer avec les rôles pour autoriser finement l'accès au repository private, là où chaque projet va pouvoir déployer ses propres artefacts. L'idée est de fournir un réceptacle commun, afin de limiter la conf, mais de restreindre l'accès en fonction des projets considérés pour ne pas risquer de se marcher sur les pieds. Je ne cherche pas à réinventer la poudre, je me base simplement sur les articles qu'on trouve sur le blog de sonatype [1] et [2].

    Résultat des courses : 
    En deux heures à peine, j'ai un système qui sert de cache pour les accès au repos central, jboss, apache.snapshots et compagnie. Pour chaque projet qui en fait la demande, je crée juste un nouveau rôle correspondant au groupId sélectionné et un user avec ce rôle. Le projet peut alors déployer à sa guise ses propres binaires.

    Dans les quelques cas où un binaire "commun" est proposé, si on me fournit des métadonnées propres, une identification de version bien faite et tout ça, j'upload dans le repo thirdParty pour tenir compagnie au driver jdbc Oracle et aux classes du client MQSeries.

    Pour les projets qui n'arrivent pas, ou n'ont pas l'habitude d'identifier la version exacte ou la provenance d'un binaire (généralement un legacy ou un progiciel), le déploiement est fait dans le groupId du projet, pour éviter de polluer le reste du repository avec des artifacts peu fiables.

    Conclusion :
    Les mécanismes avancés de Nexus en font une solution de choix. Si je n'ai pas fait un monitoring aussi poussé qu'Arnaud sur le sujet, il est clair qu'il est plus stable et moins consommateur qu'Archiva. Par ailleurs, installation et configuration sont un jeu d'enfant, qui plus est avec une doc d'une grande qualité. Et pour ceux à qui ça ne suffirait toujours pas, il y a encore la version "Pro" avec des fonctionnalités encore plus riches, à voir si vous en avez l'usage.

    Nexus me retire une aiguille du pied, nous avons maintenant un repo "agence" fiable et facile à administrer. Une ressource facile à mettre en commun et qui facilite la vie.


    18 mars 2010

    Revue de code...

    Je cherche depuis un moment un outil pour accompagner la revue de code, autre chose que l'impression des listings et le stabilo. Il y a évidemment l'excellente suite Atlassian, mais bien sûr accompagnée de son tarif - sans doute justifié - qui limite sensiblement mes chances de le voir accepté dans la boite à outils standard.

    Je tombe aujourd'hui sur cette vidéo qui présente un plugin "Code Review" pour Sonar. Et bien c'est tout simplement une bombe ! L'outil enregistre les remarques et le statut de la revue sous forme de commentaires dans le code source, sauvegardés directement dans SVN, ce qui permet de gérer l'historique de la revue au même endroit que le code source. N'importe qui peut alors consulter l'état de cette revue dans le code source.

    Ces commentaires sont annotés @SonarReviewComment, ce qui permet par la suite de prendre en compte les remarques et de "répondre" au responsable de la revue. L'idée est simple et bien mise en oeuvre (d'après la vidéo) dans Sonar.

    Pour être au top, il manque juste le complément côté Eclipse qui va bien pour
    • lister ces commentaires dans une vue dédiée, ce qui ne peut se faire en configurant les "Task markers" qui ne s'appliquent pas aux annotations JavaDoc
    • mettre en forme ces commentaires sous forme de marqueurs dans l'éditeur Java, comme le fait Jupiter (qui ne m'a pas vraiment convaincu)
    Si vous connaissez un super outil qui fait déjà tout ça encore mieux et pas cher, je prends :)

    10 mars 2010

    Fonzie s'invite dans Javac



    Julien Viet m'a suggéré une évolution sur Fonzie : Utilise le processeur d'annotations (APT) de JavaC à la place du compilo AspectJ.

    AspectJ fait très bien l'affaire pour Fonzie mais apporte de nombreuses contraintes :
    • la compilation n'est pas des plus véloces,
    • l'environnement de dev AJDT est particulièrement gourmand,
    • le plugin AspectJ doit être configuré dans le build Maven.
    Rien de bloquant, mais un ensemble de petites choses qui rendent Fonzie "moins" attractif qu'il le mérite (AMHA).

    L'idée de Julien est de détourner APT pour s'intégrer directement dans la compilation JavaC, ce qui est possible depuis Java6 avec une API standard. En utilisant des API internes de javac (com.sum.tools*) on peut faire plus que transformer les annotations en fichiers de ressources ou en nouveau code Java -- l'objectif initial d'APT. On peut aller directement modifier le code source qui va être compilé - sa représentation AST plus précisément - sans toucher pour autant au fichier source.

    Lombok utilise ce principe pour ajouter des getter/setter (entre autre) dans les beans. Plus besoin de polluer le code .java avec ces méthodes sans valeur, qui seront bel et bien présentes dans le code compilé.

    Ca, c'est la théorie.

    Reste à mettre en oeuvre. Même avec l'aide du code source de Julien (chromattic, reflext) et de Lombok, la manipulation des ces API internes est délicate, et leur code source n'est pas proposé dans le SRC.ZIP qui accompagne le JDK. Il y a heureusement google et OpenJDK pour retrouver ces sources, mais bien peu d'infos sur comment utiliser ces APIs.

    Toujours est-il qu'un premier jet bien modeste - mais faut bien commencer par quelque chose - est en place. Sur la base de ce code source :
    @Entity
    public class User
    {
    public native void persist();
    }
    Pour un projet utilisant le JDK6 pour compiler, et sans rien faire sauf ajouter Fonzie-0.4-SNAPSHOT en dépendance, le fichier .class décompilé donne ceci :
    @Entity
    public class User
    {
    public void persist()
    {
    Fonzie.instance();
    }
    }
    Pour ce premier jet, le code introduit dans la méthode n'est pas passionnant, mais au moins le squelette est en place. Reste à construire via l'AST le code d'invocation Fonzie qui va bien -- et ça, ça va être tout de suite plus toochy.

    Wait & See ...

    05 mars 2010

    IE9 ... ça donne envie (presque)



    Microsoft publie le positionnement de IE9 sur le blog MSDN

    Pas de lange de bois (pour une fois ?) : IE8 est nettement plus lent que ses concurrents, pour ceux qui ne l'auraient pas encore remarqué, et c'est un frein à l'adoption des "applis RIA". IE9 mise donc sur un moteur JS tout beau tout neuf qui devrait rattraper le retard pris sur les challengers. Le billet nous présente IE9 "today" comme comparable aux dernières versions des navigateurs, sans les dépasser, et ne nous sort même pas la promesse d'une version finale encore meilleure - ça nous change du discours habituel.

    Autre info clé : MS prend en considération les nouveaux standards du web (HTML5, CSS3), "détail" sur lequel IE s'est jusqu'ici assis sans regrets. Une nouvelle fois, on ne nous promet rien mais on affiche déjà un 32% de réussite au test Acid3, ce qui laisse lire entre les lignes qu'un score plus élevé est envisagé pour la version finale. On a même droit à un bel exemple de bords arrondis, oh comme c'est joli.

    Dernier point, IE9 fera appel à Direct2D pour son rendu graphique, ce qui boostera ses performances d'affichage. La première question qui me vient à l'esprit est de savoir COMMENT il est possible que les versions précédentes d'IE ne reposent pas sur cette API de base de Windows, pour un navigateur qui ne vise aucune autre plateforme. Autant je comprend que Mozilla ou WebKit tarde à s'y mettre vu que la couche graphique doit être portable, autant pour MS ça me semble inconcevable.

    A ce rythme on va apprendre que Windows Media Player 12 va utiliser DirectShow et consommer 50% de CPU en moins - ce qui expliquerait des choses soit dit en passant :)


    19 février 2010

    Actu Maven … suite

    Après avoir pesté toute la journée d’hier sur Eclipse, je viens de penser à une piste pour résoudre mon problème :

    J’ai utilisé dans mon POM le pseudo-plugin org.maven.ide.eclipse::lifecycle-mapping que proposait m2eclipse 0.9.9 pour activer la compilation incrémentale. En conservant ce plugin activé, m2eclipse 0.10 ne prend plus en charge la configuration d’Eclipse et je me retrouve donc avec mes soucis de WTP pas configuré et de target/generated-sources absents.

    En virant ce plugin, m2eclipse 0.10 retrouve son mode nominal et la configuration se passe donc “comme dans le manuel”.

    mea culpa donc, je suis un bête gars qui a essayé les pré-version et a cru que la compatibilité serait au rendez-vous, mais quel boulet celui-là.

    J’ai tout de même posté sur le sujet sur user@m2eclipse.codehaus.org,  en espérant que ça puisse servir à d’autres.

    18 février 2010

    Actu Maven

    L’actu Maven du mois de février est chargé :

    Le plugin Maven-Release passe (enfin) en 2.0, vous pouvez donc profiter d’un mécanisme très complet et bien ficelé de gestion des releases sans reposer sur un statut “beta”, ce qui pouvait en effrayer quelques-un.

    fini les m2eclipse-0.9.9-dev, avec la sortie officielle de m2e 0.10.0

    Non ce n’est pas un erreur, il ne s’agit pas d’une 1.0.0 de m2eclipse, celle qui aurait annoncé enfin l’intégration efficace de Maven dans Eclipse. C’est plutôt une milestone de ce que sera cette intégration .. un jour.

    Sans compter que Sonatype a choisi de mettre de côté l’intégration SVN, WTP ou AJDT faute de ressources pour les supporter efficacement, et préfère ce concentrer sur le noyau. Si le principe semble assez logique (on ne peut pas courir plusieurs lièvres à la fois) les utilisateurs vont vite être déçus de voir qu’il ont attendu 8 mois (la précédente version stable 0.9.8) pour ne toujours pas avoir un résultat complètement fonctionnel.

    Pour ma part, la configuration de WTP ne marche tout simplement pas, alors qu’elle fonctionnait avec une 0.9.9 récente (?). Aux questions sur ce sujet la réponse est systématiquement, “nos efforts se concentrent sur le code, on verra le reste après”.

    Je ne leur jetterais pas la pierre, car en tant que mainteneur de l’intégration m2eclipse / eclipse-checkstyle je me rend compte que le développement de plugin Eclispe est un art délicat et que j’y suis bien malhabile. Reste qu’on a pas fini de se plaindre de la piètre intégration du couple Eclipse + Maven comme environnement de développement. Wait & See, encore et toujours…

    Boostez votre environnement de dev

    Julien Dubois a lancé le débat sur son blog en présentant ses astuces pour un build plus réactif. Entre autres idées, il utilise un disque SSD pour espace de travail.

    Je ne suis pas du tout convaincu par cette option, vu que ce type de disque n’est pas très tolérant aux écritures multiples. Je pense que, si les perfs peuvent être meilleures sur le coup, la durée de vie de la bête risque d’en prendre un coup.

    Une autre option que je suis en train d’expérimenter, suite à la même analyse venant de Julien -- l’autre Julien, celui du BreizhJug ;)

    Comme mon PC est sous Windows XP 32bits je ne peux pas profiter à 100% de mes deux barettes de RAM de 2Go. Windows ne voit que 3Go adressables. Même le mode “PAE” n’y a rien changé. Cependant, il existe des RamDisk comme Gavotte RAMdisk qui savent contourner ce problème et récupérer cet espace perdu. Un RamDisk de 1Go, bien assez pour mettre mon workspace.

    mvn clean install -Dmaven.test.skip=true

    sur le HD “classique” :

    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 48 seconds

    sur le RamDisk :

    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 30 seconds

     

    Reste à voir ce que ça donne sous Eclipse …

    Autres pistes à creuser :

    • Tuer cette saloperie de process MacAffee
    • Utiliser JRebel (des licences offertes au BreizhJUG !)
    • Utiliser un disque SSD pour le repository maven (moins sujet aux écritures)
    • Se payer un PC (voir un Mac ?) plus adapté aux devs !

    Update (pour ceux qui ont la flemme de lire les commentaires)

    Placer le workspace en ramdisk booste un peu les perfs, mais pas autant que de placer le repository Maven ! Il faut dire que nos outils passent leur temps à charger des libs en tout genre. En plus, c’est un moyen simple pour faire du ménage dans le repo – à condition d’avoir un repo manager qui fournit les artefacts via le réseau local :)

    Ca pourrait être pas mal non plus de mettre l’OS en ramdisk :p

    04 février 2010

    L'art délicat de la compatibilité ascendante

    JavaEE 6 est sorti (oui je sais, ça fait déjà deux mois) et JPA 2.0 avec. Il est donc tentant de passer à Hibernate 3.5 (Beta 4 actuellement) et à Spring 3.0.0 ... sensé être JavaEE 6 compliant

    Là où ça se complique, c'est que JPA 2.0 définit (entre autre) de nouvelles méthodes dans l'interface PersistenceUnitInfo, référençant des enums propres à JPA2. Et Spring, pour faire sa cuisine interne, utilise un décorateur autour de cette interface (faut dire, c'est fait pour !)

    Le décorateur de Spring doit rester compatible JPA1. Le simple fait d'importer les enums JPA2 casserait cette compatibilité. Résultat: Spring 3.0.0 n'est pas compatible avec Hibernate 3.5-Beta3 et plus :'(

    Rassurez-vous, Spring 3.0.1 va corriger le problème, via un proxy construit à la volée si JPA2 est détecté et je vous passe les détails, mais avouez que c'est ballot de se coltiner ce genre de problème sur un changement d'API.

    Qu'est ce qu'il aurait fallu faire ?

    Peut être définir une nouvelle interface PersistenceUnitInfo2 pour étendre PersistenceUnitInfo ? Pas très joli mais au moins la compatibilité aurait été plus facile à gérer pour les développeurs de middlewares.

    Erreur de jeunesse ? Pensez-vous ! On a déjà eu le coup avec javax.sql.Connection lors de l'introduction des Savepoint de JDBC 3. Le build de commons-dbcp doit se tapper une mise en commentaire d'une partie du code pour produire la version JDBC 2, et a du remettre ça avec JDBC 4 !

    08 janvier 2010

    Oracle XE

    J’utilise Oracle eXpress pour les développement. Dans l’esprit “une base par développeur”, cette édition allégée (faut le dire vite) d’Oracle est bien pratique. Le dialecte SQL propre à la base est ainsi testé en phase de développement.

    Pour l’intégration continue, j’installe la base sur un système Ubuntu dans une VM, et c’est là que ça se complique … oracleXE n’étant dispo qu’en version 32 bits dans le dépot debian d’oss.Oracle.com

    Voici donc pour info la procédure à suivre :

    1- installer Ubuntu server 64 (sans blague ?)

    2- ajouter le paquet open-ssh. La console VMWare est pas terrible, alors qu’un putty permet de faire des copier/coller à la souris ;) -- se loguer en ssh pour la suite

    3- ajouter les paquet bc et libc6-i386

    $ sudo apt-get install bc libc6-i386

    4- créer un gros swap, nécessaire pour OracleXE

    $ sudo dd if=/dev/zero of=/swpfs1 bs=1M count=1000
    $ sudo mkswap /swpfs1
    $ sudo swapon /swpfs1

    5- télécharger les binaires d’oracleXE et de sa dépendance libaio en version i386

    $wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb

    6- installer tout ça, en demandant à Ubuntu de ne pas tenir compte du conflit d’architecture 64/x86

    $ sudo dpkg -i --force-architecture libaio_0.3.104-1_i386.deb
    $ sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb

    7- configurer OracleXE. Je vous déconseille de changer la conf par défaut, chez moi le choix d’un port autre que 8080 fait que l’appli d’admin Oracle est injoignable. On changera ça après coup

    $ sudo /etc/init.d/oracle-xe configure

    8- un petit vi pour mettre à jour votre ~/.bashrc

    ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
    PATH=$PATH:$ORACLE_HOME/bin
    export ORACLE_HOME
    export ORACLE_SID=XE

    9- on va maintenant changer la conf de l’appli d’admin d’OracleXE, sans quoi on ne peut pas y accéder – seul localhost est autorisé, et sur notre ubuntu server, y’a pas de navigateur puisque y’a pas d’environnement graphique ! sqlplus est dispo sous /usr/lib/oracle/…./server/bin

    $ sqlplus /nolog

    CONNECT SYS/password AS SYSDBA


    EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);



    EXEC DBMS_XDB.SETHTTPPORT(‘8081’);



     



    et voilà ! :)

    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.