18 novembre 2010

Keynote day 2

Après le traditionnel tour des stands à la pêche aux goodies - pas de canard Adobe cette année :'( - je m'y prend un peu plus tôt ce matin pour m'installer dans les confortables fauteuils de la salle 8, qui accueille la keynote. L'immense écran (Devoxx se tient dans un cinéma multiplex) affiche un twitt-wall gigantesque sur lequel nous sommes quelques-un a jouer au social-network sur écran géant :


Stéphan Jansen fait une rapide intervention - et interrompt le jeu des twitts :'( - pour nous annoncer qu'il y a déjà 70 inscrits au channel payant de Devoxx 2010,  qui donnera accès dans quelques jours à TOUS les talks de devoxx, alors que les autres devront attendre leur publication au compte goute au cours de l'année, et qui permet de suivre les keynote en streaming direct.

On passe ensuite (enfin ?) à la keynote, consacrée à l'avenir de JavaEE.

Si JavaEE propose un modèle fiable et reconnu, lorsqu'on considère la montée en puissance du Cloud il manque de nombreuses API standardisées pour la gestion propre à ce mode de fonctionnement (stockage distribué à la S3 par exemple). JavaEE doit aussi repenser son modèle de packaging : le déploiement de versions concurrentes d'une même application, l'upgrade de version, le versionning des données associées, sont des éléments indispensables pour une utilisation en mode cluster/cloud, mais encore absents de la norme.

Pour ne pas rester sur de la théorie, on passe maintenant à une démo de ce que propose GlassFish en mode cloud. Pour la petite histoire, la démo est faite sur un MacBook ... sous Ubuntu ! C'est vraiment une conférence de geeks ;) Sur la base d'une image JeOS ("Just Enough OS", un OS réduit et optimisé pour la VM) Glassfish, un cluster virtuel est lancé. Les commandes asadmin proposée par glassfish permettent de lancer et d'administrer un cluster Glassfish en trois commandes sur une IaaS.

Retour sur les slides. JavaEE 7 exploitera la modularité JavaSE 7 (donc, oubliez OSGi pour l'instant). La modularité permet d'identifier les composants redondants et de les partager automatiquement, évitant les doublons et autres conflits dans le classpath.

JSF de son côté va profiter de quelques évolutions dans la version 2.1, mais le plus intéressant viendra avec JSF 2.2 et le support d'HTML 5. JMS va également subir un lifting pour clarifier quelques points et s'ouvrir aux nouvelles tendances expérimentés dans le monde du MOM. La couche Web se met à jour avec le support des web-Sockets, de JSON, de HTML5, et l'utilisation des nouvelles nouvelles I/O (NIO-2) pour le connecteur HTTP (ce qui devrait reléguer le couple Apache-JK au rang d'antiquité).

Linda DeMichiel prend la parole pour faire un focus plus approfondi sur JPA 2.1. Basé sur les demandes de la communautés, une liste de fonctionnalités candidates est présenté :

  • les types custom
  • les fetch plans
  • de nouvelles méta-données de mapping
  • des stratégies de nommage définies par l'utilisateur
  • plus de flexibilité sur les valeurs générées (et pas seulement les clés)
  • la gestion des attributs immuable (readonly)
  • plus de flexibilité dans le descripteur XML
L'API évolue aussi pour dévoiler les fonctionnalités internes du mapper O/R: listeners, extension du méta-modèle, détection de l'état "dirty" des entités... Le langage de requête s'enrichit pour accéder aux procédures stockées, downcasing (accès à un sous-type précis), outer-joins avec condition "ON", élargissement de l'API Critéria aux Updates et Delete.

Globalement, JPA 2.1 cherche donc à consolider sa place de norme largement adoptée en restant à l'écoute du terrain et en intégrant les extension / évolutions réclamées par les utilisateurs. Exemple : l'unwrapping de l'EntityManager pour accéder à l'implémentation sera explicite, permettant d'utiliser quand c'est nécessaire les fonctionnalités propres à Hibernate ou EclipseLink.

On passe enfin à JAX-RS. Exclu du web profile de JavaEE 6, JAX-RS est cependant une norme majeure avec de nombreuses implémentations open-source. Dans les deux années qui nous séparent de JAX-RS 1.0, ces framework ont beaucoup évolué et innové. Il est temps d'intégrer les innovations qui ont fait leur preuve dans la norme : Premature Standardization is Evil ;)

La fonctionnalité la plus attendue et l'API cliente JAX-RS. Jusqu'ici on pouvant écrire des service mais pas les consommes sans partir sur du code propre à une implémentation, c'est donc un complément indispensable. L'intégration avec les autres briques JavaEE avance, avec le support de @Inject et de gros progrès dans l'intégration avec CDI. De nombreux points restent encore en suspens pour une syntaxe légère et non surchargée d'annotations.

 La gestion asynchrone, basée sur Atmosphere, est aussi au rendez-vous. L'API de @Broadcast est d'une grande simplicité et masque complètement la complexité de la technologie. Il faudra qu'on fasse une session sur le sujet au BreizhJUG ;)

17 novembre 2010

Devoxx, quand y'en a plus, y'en a encore

Devoxx, c'est aussi l'après Devoxx.

D'une part il y a la soirée frite + bière, avec un petit bonus sur chaque stand. JBoss offre de la bière (des fois que les 10 bombones ne suffiraient pas), Oracle fait son super-tirage (j'ai gagné un stylo qui clignote, cool), IBM sort le champagne. Au final on est donc bien frais.

Ensuite il y a "officiellement" les BOF (Birds Of a Feather flock together) de 19h à 23h, permettant à chaque communauté de se rencontrer "In Real Life". BOF Jug-leaders demain, BOF Parleys ce soir, BOF JavaFx, BOF Scala, etc.

A côté il y a les BOF non-officiels, comme le rencard Play! suivi du rencard JUG au resto mexicain d'à côté (le seul resto du coin en fait, en dehors du MacDo)

Et si ça ne suffit pas il y a les plans tribus, comme le repas opensource dieux sait ou dans un resto en centre ville (les infos circulent sur twitter : voir le twittwal).

Inutile de dire qu'une semaine de Devoxx, ça calme ...

Performance Anxiety

Joshua Bloch fait salle ultra-comble, comme Brian Goetz il y a une heure que je n'ai pas pu suivre. Les allées et les escaliers sont pris d'assaut, le couloir reste encombré, n'imaginez même pas accéder à  la salle (je ne suis pas complètement sur que ce soit conforme aux règles de sécurité pour la salle d'ailleurs). Dur pour les speakers qui sont programmés au même moment dans l'une des 5 autres salles. Sujet du jour - les performances :D

En attendant que la conf démarre (parce qu'il ne suffit pas d'arriver 10 minutes à l'avance, je suis assis sur les marches et je ne suis pas le moins bien lotti) un détail sur Devoxx pour ceux qui voudraient venir l'an prochain : Devoxx c'est 3000 personnes et beaucoup de français. On peut donc y rencontrer plein de gens biens, en plus d'assister à des confs passionnantes, à condition de bien gérer son emploi du temps. L'effet de bord c'est qu'on se retrouve convié à des BOF le soir et/ou à des repas de JUG-leaders, Opensource-man, Truc-community. Ce soir je vais devoir me cloner ;)

Joshua est sur les starting blocs et commence avant l'enregistrement, ils faut donc l'arrêter déjà lancé dans son discours - comme quoi les problèmes de performance ne sont pas limités à l'informatique :P Bon, ça suffit pour les crétineries, soyons sérieux deux minutes.

Parlons donc performances et optimisation, avec un disclaimer "Premature Optimization is Evil" ...

Avec l'augmentation de l'abstraction et la programmation devenue une discipline empirique, on ne peut plus que mesurer les performance et plus les estimer. librairies, langage, VM ou processeurs sont de plus en plus complexes et abstrait, et introduisent une dimension d'imprévisibilité dans nos estimations de performance. Que ceux qui peuvent dire qui d'un AND conditionnel (&&) et d'un AND logique (&) est le plus rapide lèvent la main ;) La prédiction de branchement dans nos processeurs fausse notre interprétation naïve du problème. La réponse est ... ça dépend !

La performance de lecture d'un attribut dans un objet ? ça dépend ! Est-il volatile ? Sur quel processeur ? Est-il un attribut d'une classe imbriquée - dans ce cas, c'est un appel de méthode, sauf si le compilo l'à inliné. Ca dépend, il faut mesurer !

Un bench simpliste montre déjà l'effet du premier lancement par rapport à la répétition : le warm-up de la JVM et la stabilisation de ses optimisations. Pas de grosse surprise jusqu'ici. Cependant, après plusieurs tirs (même si Joshua n'arrive pas de le montrer sur sa démo) les résultats peuvent être très différents sur un autre tir. Il est donc très difficile de comparer des résultats, et donc de voir les effets de changements dans le code.

La complexité de notre stack matérielle et logicielle nous oblige à renoncer à la prédictibilité. Rien qu'en analysant les possibilités d'inlining que la VM peut appliquer à un fragment de code simpliste, la combinatoire donne des résultats très variables. Or le "Compilation Planing" de la JVM Just-In-Time est un processus en tâche de fond, non-déterministe lors de notre mesure :'( Les mêmes dérives sont constatées sur du code C/C++ (la VM n'explique donc pas tout) ni même sur du code assembleur. L'outillage (comme un profiler) peut d'ailleurs fausser la mesure au point d'invalider toute l'analyse : 6 profilers testés sur un même code on détecté des "hot-spots" différents :'(

Notre seule solution : une approche statistique ! En multipliant les runs, en groupant les données et en effectuant une analyse statistique on obtient une meilleure vision de nos performances, et la moyenne n'est pas le seul résultat à retenir : l'étalement des mesures peut être impressionnant.

En tant que développeur d'application nous ne pouvons donc que reposer sur des constructions validées et stables en conservant un niveau d'abstraction maximal. En tant que développeur de librairie, nous devons étudier soigneusement les recommandations des spécialistes pour éviter les constructions hasardeuses (classes imbriquées de visibilité private par exemple) qui ajoutent du flou dans le traitement du compilateur, et donc dégradent d'autant la prédictibilité. Comment les connaître ? Demandez à Doug Lea - ou achetez son livre ;)

L'art du benchmark est très délicat, largement détaillé par Cliff Click (JavaOne 2009). Caliper est un framework qui peut aider à en construire avec un bon niveau de fiabilité. Quoi qu'il en soit, Joshua conclut que nous vivons une époque passionnante dans laquelle le prédictif se perd et où nous devons apprendre à mesurer notre travail avec de nombreuses précautions.

Cassandra

NoSQL est à l'honneur de cette édition de Devoxx, avec des speakers de Facebook, Twitter ou LinkedIn. Cassandra, projet Apache opensourcé par FaceBook, basé sur les travaux de Google BigTalbe et Amazon Dynamo, est présenté au cours d'une de ces sessions.

Retour en arrière sur les documents d'architecture d'eBay et l'approche BASE, qui prend le contrepied de l'ACID qui sous-tend nos bases de données relationnelles. En considérant la base de donnée comme un flux de données et non comme un ensemble synchronisé à coup de verrous pessimistes, une nouvelle architecture se profile.

Cassandra utilise des tables en mémoire qui sont flushées sur disque de manière asynchrone. Ce découplage avec les I/O donne à la base un avantage qui booste ses performances, le risque étant compensé par une gestion de version des données via un commit log. Contrairement au mythe, la scalabilité de la base ne concerne pas exclusivement les énormes sites de réseaux sociaux. De la même manière, l'abandon de l'ACID ne signifie pas que les données stockées ne peuvent pas être stratégiques : la gestion de version assure qu'aucune donnée n'est perdue. L'argument type pour justifier un stockage NoSQL est de considérer les applications qui ajoutent un cache distribué au dessus de leur accès base. Le résultat est équivalent sans avoir la puissance d'une base NoSQL.

Une fois cette nouvelle logique acceptée, Cassandra apporte une souplesse sans précédent en terme de scalabilité, de réplication, d'absence d'un "single point of failure". Voilà qui chamboule fondamentalement notre point de vue sur les bases de données et leur administration : la réplication naturelle des noeuds assure une fiabilité et une re-synchronisation des données sans opération d'administration dédiée.

Le format de données utilisé par Cassandra, comme pour Google BigTable, est une série de clé:valeur libres associée à un ID (ColumnFamily). Ce formalisme particulier, très différent du SQL traditionnel, change la donne au problème du dimensionnement et de l'indexation. twissandra (démo ici) sert de base aux démos et explication sur la structure et la manipulation très particulière de ces données. Le modèle simple et connu de tous de twitter et la comparaison avec l'équivalent SQL en font un exemple concret et très parlant. Les requêtes en base ne se basent plus sur des approches ensemblistes mais sur des parcours "sliceQuery" des entrées d'une "table".

La manipulation des données de Cassandra peut monter d'un niveau d'abstraction, avec des frameworks comparables à notre pile Driver / JDBC / JPA. Un portage de Lucene (Lucandra) permet par exemple pour apporter la recherche à notre base NoSQL.

Next Big Java Language

Qu'y aura t-il après Java ? Il ne s'agit pas de trouver ici le prochain langage de geek, mais celui qui accompagnera les millions de développeurs "collet bleu" qui ne vont pas aux conférences, ne bénéficient pas de formation avancées.

Partant de ce que 15 années de Java nous a appris, XX établit une liste de constats.

  • les exceptions"checked" compliquent le code plus qu'elles nous aident
  • le fait que les primitifs et les tableaux ne soient pas des objet complique le langage (mais améliorent les perfs), en particulier avec la surcharge des méthodes : foo( (short) 2) appel t-il  foo( Integer ), foo( int ) ou foo( Object ) ?
  • les génériques de Java, avec leurs "super" et "extends" sont un nid de confusion


D'où quelques critères - le prochain "gros" langage de la JVM devra :

  • avoir une syntaxe C-like pour s'apprendre facilement - considérant la base installée de développeurs
  • être orienté-objet ET fonctionnel, non puriste d'un de ces deux paradigmes 
  • typé statiquement, mais sans la rigueur excessive de Java, en particulier pour la réflexion. Invoquer dynamiquement une méthode devrait être trivial
  • intégrer nativement les patterns que nous employons couramment et qui alourdissent le code : JavaBeans vs Propriétés, gestion du Null, Concurrence et Threads, Modules et visibilité, etc
  • être adapté pour l'outillage, IDE, debuggers et profilers. L'IDE ne peut pas tout deviner tout seul, le langage peut l'aider dans son travail
  • Etre raisonnablement ouvert aux extensions


Que donnent les langages alternatifs actuels au travers de ce prisme ?
Groovy est un assez bon candidat, mais son aspect dynamique le rend trop souple et mal adapté pour remplacer Java. Par contre il en est un excellent complément.
Scala est trop puriste du fonctionnel, trop strict, trop élitiste, trop différent de l'historique C/Java
Fantom a un bon potentiel, mais ne propose pas un modèle de typage suffisant. L'absence de génériques (en dehors des listes et maps) est un recul inacceptable.

Alors ? La solution pourrait être un Java ... sans compatibilité ascendante. On prend Java et on en retire tout ce qu'on sait aujourd'hui ne pas être un bon choix. L'outillage peut assurer la conversion du legacy si besoin. Peut être pour Java 9 ... à suivre sur twitter via #bijava !

Dev/Ops, mais sans le "/"

Devoxx propose toujours des sessions plus "méthodologie" avec une mise en avant de l'agilité. Cette session se consacre au mouvement DevOps, sur fond de licornes, de vampires et de loup-garous - illustration inhabituelle mais bien menée.

Le constat est simple : nous, développeurs, ne sommes pas sensibles au problématiques de opérationnels, qui n'ont aucune considération pour nos choix organisationnels. L'agilité de nos développement ne peut-elle pas être transposée au monde de l'opérationnel ?

L'idée des DevOps est d'intégrer les opérationnels à l'équipe, comme nous l'avons fait des testeurs. Déployer, c'est compliqué, ça marche parfois mal. Donc déployons souvent, avec un maximum d'automatisation. Déployons sur des plateforme de développement et de test iso-production, et toujours avec le même outillage. Gérons en configuration tous nos environnements.

Ce discours rejoint "Continuous Delivery" que je lis en ce moment, livre passionnant qui pousse de nombreuses idées très novatrices (au moins pour moi). On retrouve les concept du "Stop the line", de la tolérance 0 au défauts, de la gestion de la dette technique, etc.

Si organisationnellement les choses doivent être bien moins simples que sur les slides (un peu comme Scrum qui nous dit qu'il n'y a qu'un seul Product Owner, sans dire comment on en arrive là), c'est un mouvement à suivre de près et dont sortirons certaines des pratiques de développement de la prochaine décennie (enfin, d'après ma petite Mme Irma de poche).

The State of the Web

"The State of the Web" seconde partie de la keynote de ce mercredi, présentée par Dion Almaer et Ben Galbraith est rodée de longue date. Si le sujet a déjà été présenté, le contenu reste d'actualité.

Qu'est ce qui fait le succès d'une application ? Partant du constat que les applications actuelles sont consommées comme le contenu multimédia, avec un "hit" au lancement, un effet de masse, etc, les rouages du succès sont décortiqués. Trois piliers fondamentaux :

  • une plateforme largement distribuée.
  • un marchandising soigné pour accueillir le consommateur
  • une capacité adaptée de la plateforme


Les applications web souffrent de ce point de vue.

  • La plateforme est très largement distribuée mais pas du tout homogène, ce qui est un prérequis (avec quelques citations à l'appui de grosses réussites commerciales comme Microsoft ou Apple). Une norme réellement supportée est nécessaire.
  • Le marchanising s'appelle de nos jour un "AppStore". Google ou Mozilla explorent cette piste mais il n'y a pas encore d'équivalent aussi incontournable que l'AppleStore pour le web
  • Les capacités de la plateforme web sont largement sous-évaluées. Habitués aux limites d'IE6 les applis "web" sont un pâle reflet de leur équivalent iPhone; pourtant la même ergonomie est techniquement possible. Chrome Frame est la contribution de Google pour ne pas devoir attendre 10 ans la migration massive vers IE 9.


Toutes les briques ne sont pas en place, mais le web et la norme HTML 5 promettent un écosystème applicatif sans précédent en terme de diffusion.

Devoxx Keynote

La première journée de conférence de Devoxx s'ouvre sur le traditionnel Keynote. J'ai loupé l'heure et me retrouve déporté dans une seconde salle ou la session est retransmise live, nettement moins vivant que d'avoir le speaker en face, ça me servira de lesson ...

Après quelques chiffres sur l'événement (3000 inscrits, et quelques centaines qui sont restés derrière la porte... ça fait rêver), Stephan Jansen nous fait une démo du nouveau Parleys et de ses clients mobiles (Android, iPhone, iPad) - démo live basée sur le réseau wifi doppé aux stéroïdes cette année, le touilleur peut même uploader ses vidéos en live ! Leçon à retenir pour ceux qui ont un réseau wifi pourri, et qui invoquent des limites techniques infranchissables - Parleys va devenir une plateforme incontournable pour la diffusion de vidéos avec toutes ces avancées techniques : mpeg4, meilleure résolution vidéo, client mobile qui se synchronise au client desktop (et peut alors servir de télécommande :P) et même streaming live (allez voir les keynotes !)

Suit la keynote de Mark Reinhold, consacrée à la roadmap Java. Les évolutions de la syntaxe Java 7 sont présentées, ce qui n'est pas une révolution vu que c'était déjà annoncé l'an dernier. Disons que ça confirme, ce qui est déjà bien vu les changements et les délais associés à Java 7 depuis plusieurs années.

On aborde ensuite un sujet clé : le parallélisme. Les processeurs à 128 coeurs sont déjà dans les labs et équiperont sous peu les serveurs haut de gamme. Comment programmer efficacement sur de telles architectures ? La réponse semble être dans un changement de paradigme, porté par le projet lambda. Les lambda expression permettent d'exprimer des traitements selon une approche ensembliste, ce qui laisse au compilo / JVM la possibilité de paralléliser massivement. Une idée pour Java 7 est de "compléter" l'API des collections avec des notions de filtres, regroupements, conversion, ce qui apporte une syntaxe fluide pour transformer sur des collections. Avec cette évolution, le même code pourra ainsi fonctionner sur mono-processeur (pensez à Java SE Embedded sur les mobiles) et sur serveur massivement multi-coeur. "Run anywhere", ça vous dit quelque chose ? On va passer au "Scale anywhere" (© nmartignole)

Plusieurs autres évolutions sont présentées, je note en particulier la notion de "value Class" qui permet de manipuler des propriétés SANS définir les méthodes accesseurs. Je vous en est déjà parlé sur ce blog, c'est une évolution que je soutiens de tout mon modeste poids ;)

La JVM ne se limite pas au seule langage Java, mais supporte un joli pannel de langages alternatifs, dont Groovy, jRuby ou Jython ne sont que la partie émergée et médiatisée de l'iceberg. La JSR 292 "DaVinci Machine" propose d'améliorer ce support avec les invocations dynamiques de méthodes. Si ça n'a l'air de rien, cela ouvre la voie à un développement beaucoup plus ouvert sur d'autres langages, d'autres pratiques. Pas forcément évident pour éviter de se disperser, mais potentiellement fort si o,n veut définir des DSL groovy pour une partie métier, intégrer une interface web avec des développeurs PHP, et que sais-je.

On revient ensuite sur l'arlésienne de la modularité Java, qui chasse sur les terres d'OSGi avec une syntaxe différente et bien moins d'expérience du terrain, et reprend une partie des fonctionnalités de gestion de dépendances de Maven / ivy. Je n'arrive pas à me faire une opinion claire sur la pertinence de cette approche et sur son intérêt pour notre quotidien de développeur. L'idée de base est de faire disparaître le concept de classpath, qui prend le risque d'être incomplet pour une exécution correcte de l'application, et de reposer sur des descripteurs pour valider les dépendances au démarrage. L'approvisionnement reposerait donc sur des mécanismes de dépot à la RPM, DEB ou Maven. Si cela permettrait de mettre un peu de standardisation dans tout ça, je ne suis pas sûr que mon client s'attende sur ses serveurs à une installation de ce type ... surtout sans accès à Internet depuis les machines de production.

Point sur la convergence des JVM : Hotspot et JRockIt fusionnent dans OpenJDK, rejoint par IBM (et donc sa JVM J9) ainsi que Apple qui renonce à sa JVM spécifique. Si une meilleur JVM peut émerger de ces efforts conjoints, et que chacun peut apporter son expérience, on perd tout de même en diversité. Chaque éditeur va probablement garder ses outils de diagnostic comme chasse gardée, étant la base de la plus-value qu'ils peuvent vendre sur une JVM payante.

On conclut sur le "plan B", qui repousse les fonctionnalités les plus polémiques de Java 7 (lambda et modularisation) à ... plus tard, mais permet d'avoir (enfin) une roadmap réaliste pour la sortie de Jav 7 en 2011. Un point important est qu'une JSR est (enfin aussi) définie pour porter Java 7, qui ne reposera donc pas exclusivement sur le fonctionnement "de fait" d'OpenJDK pour définir le future version majeur  de Java.

16 novembre 2010

rendez-vous à Antwerppen

Je pars cet après-midi pour Anvers, pour rejoindre mes petits camarades sur Devoxx.

On ne présente plus Devoxx, ex-JavaPolis, LA conférence européenne autour des technologies Java qui s'étale sur 5 jours dans 6 salles de 800 places, bref la grosse artillerie.

Devoxx c'est une journée chargée en conférences de très haut niveau, un concentré de toutes les formations que j'aurais pu demander au cours de l'année

Devoxx c'est des échanges nombreux, en particulier lors des BOF qui permettent à une communauté de se rencontrer "In Real Life" et de faire le point

Devoxx c'est aussi de l'ambiance, après tout on est en Belgique et les bars à bière ne manquent pas

Devoxx c'est encore les Quickies, ou comment présenter en 1/4 heure un outil sympa devant un public qu'on aurait jamais pu espérer

Devoxx c'est aussi les universités, auxquelles je n'ai pas participé cette année, mais qui sont un bon complément aux trois journées de conférence

Devoxx c'est aussi le stand Pearson, soit la meilleure librairie spécialisée d'Anvers ;) Pour l'occasion, mon bouquin sera proposée pour une séance dédicace mercredi 17, à 13h30, en compagnie d'Arnaud. Double dédicace, on croirait du VanDamme, mais ça fera de ces bouquins des exemplaires uniques.

Au plaisir de vous croiser si vous êtes sur place, dommage pour tous les autres ;)

20 octobre 2010

Architecte ou Agile ?

Sur l'AgileTour, j'ai eu la surprise d'entendre un mythe sur l'architecture et son incompatibilité avec l'agilité. Cette fois, le propos était étoffé par un cas concret : une application qui a développé un module en local avant de constater qu'un service équivalent existait par ailleurs et centralisait cette information. Résultat : une migration à prévoir et un surcoût.
Conclusion de l'intervenant : l'architecte doit intervenir en amont pour éviter ce genre d'erreur.

Evidemment, je n'ai pas les détails du contexte, mais cette conclusion heurte mes conviction. Revoyons donc la scène au ralenti au travers de la loupe des 4 valeur eXtreme Programming :

Communication
De toute évidence, il n'existe pas de manière visible un diagramme des applications du S.I. Elles sont pourtant toutes fortement liées, donc cette information serait primordiale. Sans vouloir faire de scrum-urbanisme, un schéma logique des composants majeurs me semble indispensable. De manière plus générale, la communication ne doit pas s'arrêter au portes de l'équipe.




Simplicité
Est-ce que s'interfacer dès le début avec ce système externe aurait été bénéfique ? Le risque est de développer directement avec ses API, et de coupler les applications. En définissant une API neutre avec ses propres métaphores et son niveau d'abstraction, on découple les composants. Le code initial peut également servir de simulateur ou d'outil de test, ce qui n'est pas une perte de temps. Le concept de Simplicité est délicat à assimiler : il ne s'agit pas de faire du code naïf, ni même de faire le moins de lignes de code, mais de faire quelque chose de clair, concis, avec des rôles bien séparés et un bon niveau d'abstraction. Les métriques de cette architecture émergente sont difficiles à quantifier.
Par ailleurs, la maturité obtenue sur ce premier jet est en soi une avancée. On a toujours tendance à évaluer le coût en considérant nos connaissances actuelles, et non celles qu'on avait à l'instant t.

Feedback
Quelqu'un s'est rendu compte que le système existait déjà dans le SI, mais trop tard. De toute évidence il n'intervenait pas dans la boucle de feedback. D'où l'importance de lier aux démos un maximum de personnes d'horizons variés, de faire tourner en continue les tests d'inter-opérabilité, de publier ses API auprès des autres équipes, etc.

Courage
Il faut avoir le courage de faire un refactoring en profondeur pour abstraire l'application de ses dépendances externes. Dans cette optique, les bonnes pratiques de masquage par des interfaces nous aide  fortement. A ma connaissance, la seule difficulté majeur est de déterminer si un service est synchrone ou non, ce qui induit fortement nos interfaces. En dehors de ça, local, disant, XML, JMS, ou base de données, peu importe. Il faut aussi avoir le courage de développer son propre modèle de données et une couche de traduction, plutôt que de bondir sur le code généré depuis un WSDL. Le courage de défendre ce choix, qui coûte un peu initialement, mais qui permet une souplesse sans comparaison par la suite.

Alors ?
Si l'équipe agile a pondu une solution locale, même si elle n'est pas adaptée à la cible du S.I, elle a finalement apporté de la valeur métier rapidement. Elle a développé un mécanisme proche de ses propres besoins, respectant le critère de simplicité. Dire que le refactoring associé à une étape d'intégration dans le SI est un surcout est (AMHA) une erreur; au contraire, le système développé permet d'avoir un feedback rapide, et le refactoring nécessaire peut ne pas être si coûteux (en fonction de la maturité technique de l'équipe et de la propreté de son design). Le risque de faire intervenir une phase amont d'architecture, c'est de figer le périmètre, et de décharger l'équipe de ses engagements : "Ca ne tiens pas 1000 utilisateurs simultanés ? C'est pas nous, c'est l'architecte !"

Ma conclusion est que les architectes sont paradoxalement ceux qui défendent l'agilité pour avoir bouffé trop de projets mal ficelés, mais qui ne se l'appliquent pas à eux même. Un peu comme de vouloir une liaison TGV, mais dans le bled d'à côté. Ma conclusion secondaire, appuyé sur de nombreux autres exemples, c'est que beaucoup (trop) de gens s'arrêtent à Scrum pour mettre en place l'agilité, et ne poussent pas assez les pratiques de développement et de responsabilisation de l'équipe, ce qui est le coeur de l'eXtreme Programming.



Ah, et tant qu'on en est à parle de mythes ...
www.youtube.com/watch?v=DUoRtivgjao

19 octobre 2010

Les CastCodeurs

J'ai participé jeudi dernier à l'enregistrement de l'épisode #29 des CastCodeurs. Le sujet de cet interview à deux et demis est la "forge logicielle". Vincent Massol était obligé de s'y coller, après avoir séché les enregistrements depuis quelques temps. Arnaud Hériter était aussi de la partie, mais a dû nous quitter précipitamment pour une sombre histoire de cassage de nez à l'école, ah ces jeunes j'vous jure.


Un grand merci à Emmanuel Bernard qui se coltine le mixage de tout nos enregistrements sur son temps libre, entre deux versions d'hibernate-search.

Ecoutez l'épisode, et dites moi ce que vous en pensez !

Apple n'aime pas Sony

Tout le monde vous le dis, sur Mac c'est magique ça marche tout seul, youkaïdi.
La réalité est plus subtile.

Pour le BreizhJug nous utilisons un caméscope Sony à disque dur, qui enregistre en MPEG2+AC3. Lorsque j'essaie de lire ces fichiers sur le Mac, QuickTime, sensé être le centre multimédia ultime, ne sait pas décoder le format. Apple vend 20€ une extension MPEG2 pour Quicktime - y'a pas de petits profits - mais je préfère installer VLC qui passe sans soucis.

Voici que j'installe Adobe Première pour faire mon montage. J'utilise CS3 sur PC, je veux donc vérifier le portage Mac de la suite. Première refuse purement et simplement l'import des fichiers MPG (sans plus de précision : "erreur lors de la décompression audio ou vidéo"). Sous Windows j'ai du ajouter une DLL pour qu'il supporte le flux audio AC3, dll récupérée sur un autre soft de la suite CS3 - va comprendre. Par contre sur Mac ce type de manipulation n'est pas à ma portée.

Faut-il en déduire que la plateforme Apple ne supporte pas le MPEG, ce qui ne l'empêche pourtant pas de lire les DVD vidéo ? A moins que ce soit mon caméscope Sony qui est dans la liste noire d'Apple ? (Ou bien peut être est-ce un complot ?). La lecture de la documentation Adobe semble indiquer que l'orientation actuelle porte sur les contenus HD, mon caméscope et son format basique est donc passé de mode.

Ceci dit, AviDemux s'en sort très bien pour convertir mon fichier MPG+AC3, je me contente donc de "perdre" cinq minutes à décoder la bande son et à produire un fichier intermédiaire (un AVI, quelle honte), qui est alors accepté sans sourciller dans Première. Comme quoi l'ouverture inhérente à un logiciel opensource n'a pas de prix.

15 octobre 2010

Agile Tour 2010 : Vannes

Seconde étape de la tournée bretonne Agile Tour, Vannes !
L'organisatrice a du passer quelques mauvaises nuits en cumulant une première sur cet évènement avec des grèves SNCF et les menaces de pénurie de carburant. Cependant, tous les speakers ont répondu présent à cette édition qui fut un grand succès.

Les thèmes abordés, sur 4 sessions simultanées, permettait à chacun de trouver son compte dans un large choix de sujets. Pour ma part, j'ai assisté ...

à une présentation de l'Holacracy, condensé de pratiques innovantes pour l'organisation d'une entreprise. Le principe clé est de comparer l'entreprise à un organisme vivant : chaque cellule à sa propre identité et un degré de liberté, mais elle participe à un organe, qui participe au fonctionnement global et inconscient du corps, qui lui même joue un rôle dans une société. Les fondamentaux du modèle hiérarchiques sont conservés, mais épaulés de nombreux mécanismes de feedback, d'équilibrage et d'autonomie à chaque niveau. La conférence a été perturbée par des réactions assez épidermiques lorsqu'on remet en cause les rôles bien établis de chacun dans l'organigramme de l'entreprise, comme quoi le refus du changement est présent partout, même sur l'Agile Tour ;).

à une démonstration de la table interactive "Surface" de Microsoft, très sympa pour la gestion de projet : vos post-its de tâche, bien que dématérialisés, restent quasiment des objets physiques manipulés à la main. Prochaine étape pour Microsoft : LigthSpace, qui utilise une simple projection et une détection de mouvement (même techno que sur la console X-Box ?). A n'en pas douter avec cette variante bien plus légère et riche en interactions, notre façon de travailler avec les outils de planification et de communication va évoluer à vitesse grand V. Démo est infos ici


à une présentation sur la place de l'architecture en agilité. Pour rompre avec la légende qui veut que l'architecture ne puisse pas rentrer dans un mode agile, itératif et incrémental, mais doit se faire en amont, jean-philippe gouigoux nous met en face d'une application développée en eXtrem Programming et applique au pied de la lettre les concepts de simplicité, test-driven et refactoring. D'un bout de code naïf on aboutit rapidement à une structure claire, élégante, sans redondance, et facilement extensible, c'est l'architecture émergente. La difficulté de cet exercice est de bien clarifier la notion de "simple" : simple à lire pour le novice qui connait mal les astuces du langage ? simple à lire en proposant à une personne du métier quelques classes qui résument tout son problème, en isolant les détails techniques ailleurs ?

Je n'ai pas pu assister aux autres sessions, dont le Coding Dojo TDD qui m'aurait bien tenté, car je participais à l'enregistrement des CastCodeurs #29, avec quelques difficultés techniques pour obtenir une liaison skype fiable ;)

En conclusion, une excellente journée, avec des rencontres enrichissantes et des sujets très variés. Si vous avez (encore?) raté l'AgileTour, il vous reste une séance de rattrapage à Nantes Jeudi 21 !

08 octobre 2010

Maven 3.0 FINAL

Tout est dans le titre,
Après des mois (des années) à attendre Maven "2.1", finalement renommé Maven 3, de nombreux (re)développements et une interminable suite de tests de non-régression, voici enfin venu le renouveau de Maven.

Quel changements pour l'utilisateur ? Aucun ou presque - à part un build plus rapide et moins consommateur de mémoire - car le premier objectif de Maven 3 est d'être compatible (à quelques détails près) avec son prédécesseur. Par contre, le socle technique est autrement plus propice à de futures évolutions, et à son intégration dans d'autres outils comme en témoignent polyglot, tycho, mvnShell ou m2eclipse, et les premiers plugins hudson maven3.

Le meilleur est à venir.

Agile Tour 2010 : Rennes

Pour sa seconde édition Rennaise, l'Agile Tour remporte un énorme succès, avec 200 inscrits (le max) et de nombreuses propositions de sujets. Il faut reconnaître que pour 20€ (contribution casse-croûte) c'est un évènement à ne pas manquer !

Après l'introduction, les sessions se répartissaient dans 4 salles, dont deux orientées ateliers. J'ai eu le plaisir d'ouvrir le feu, avec un public nombreux et de bonnes questions : l'interaction du public sur cette conférence est très bonne.

Entre autres sessions, j'ai beaucoup aimé celle de Sébastien Tanguy "Scrum vs XP (charue et boeufs)". Sébastien y a souligné la grande popularité de Scrum, orienté rôle, communication et processus, et son absence de solutions pour les dérives qu'il permet de constater dans la dégradation de la vélocité. XP est donc un complément indispensable pour l'agilité, et la conférence a permis de faire le point sur 4 pratiques XP, le TDD, le refactoring, le pair-programming et l'intégration continue. Détail notable : Sébastien a fait le lien avec des sessions de l'Agile Tour 2009 et celles proposés sur cette édition - dont la mienne ;) - ce qui est un point très positif pour les choix éditoriaux des organisateurs. Les références incontournables à Uncle Bob n'ont pas manquées, même si Sébastien a choisi de se limiter aux plus softs.

Pages Jaunes faisait un retour d'expérience sur son passage au tout agile pour sortir d'un "Time To Market" bien trop long. Ils sont passés de 12 à 4 mois, avec 10 versions mises en production par an - excusez du peu. De leur propre aveux, leur approche est encore perfectible et il manque des briques importantes dans l'outillage du projet pour soutenir efficacement le processus. Le secret de leur succès : impliquer tous les maillons de la chaîne, avec une généralisation des KanBan de l'expression de besoin marketing à la phase de maintenance. Un sujet particulièrement pointé du doigt est la difficulté de marier maintenance et développement, soit avec une équipe dédiée, soit en intégrant des tâches de maintenance. Les deux approches ont des défauts significatifs qui va obliger pagesjaunes à expérimenter d'autres organisations.

J'ai aussi suivi l'atelier rétrospective pendant lequel je me suis retrouvé transformé en Renne gréviste du père noël. Ce format atelier est très intéressant pour comprendre les processus de travail en équipe et les techniques proposées par l'agilité. Dans le cadre de la rétrospective, comment amener chaque participant à identifier les éléments positifs et négatifs et à envisager ensemble des axes d'amélioration de l'équipe, loin des règlements de compte et du classement dans l'armoire IQ d'un bilan de projet "traditionnel".

J'ai aussi suivi une conférence plus "outil" sur la mise en place de tests d'acceptance avec Concordion. Mis en place sur un projet wrokflow délicat à valider avant la recette, et qui faisait l'objet de nombreuses versions correctives, il a fallu 6 mois de lobbying pour passer du premier PoC à la généralisation, mais le succès est au rendez-vous et l'outil s'est progressivement propagé dans d'autres domaines du SI. Si le coût de maintenance des tests et des "fixtures" n'est pas nié, il s'avère "linéaire" en fonction des évolutions fonctionnelle, ce qui est un avantage majeur par rapport à une approche plus bas-niveau à base de jUnit.

Sans compter toutes les autres sessions pour lesquelles je n'ai pas pris de notes ou que je n'ai pas pu suivre, l'AgileTour Rennes 2010 était donc une réussite incontestable, avec une excellente ambiance et de très bons échanges entre participants. Si vous avez raté cet évènement,  il y a des dates programmés dans de nombreuses villes françaises dans les semaines à venir.

05 octobre 2010

@Properties

Comme de bons petit soldats, nous avons appris à définir nos attributs de classe en private et à générer des getter/setter pour y accéder. Nos classes se trouvent ainsi encombrées de ces méthodes sans grand intérêt. Après tout, pourquoi ne pas laisser nos attributs publics ? Pour l'encapsulation vous répondra maître Yoda, en ayant la possibilité (s'il le faut un jour) d'intervenir lors d'un accès aux données de la classe. OK, mais c'est bien dommage de polluer ainsi notre code :'(

On peut bien sûr utiliser exceptionnellement une syntaxe compacte, mais encore faut-il que le formateur de code et les règles Checkstyle de votre Q&A soient réglées en conséquence.

Des langages comme Groovy ou Scala disposent nativement du concept de propriété, qui permet d'intercepter les accès aux données de la classe via un getter/setter, mais seulement quand c'est nécessaire. Pour Java 7, le projet Coin proposait d'ajouter le concept de propriété dans le langage Java. Le sujet a fait débat et je ne suis même pas sur du statut de cette proposition.

Cependant, pour ceux qui aiment bien cette idée, il y a une alternative à attendre cette fonctionnalité dans Java 7 (ou 8 ? ou 9 ?) : lombok

Lombok utilise un hack de l'annotation processor de Java 6 : il vient modifier la structure du code source (la structure AST, pas le fichier .java) pour ajouter des getter et setter à chaque attribut annoté en conséquence. Votre .class comporte donc bien ces méthodes et votre IDE vous laissera les utiliser, mais elles resteront absentes du code source, tant que vous n'avez pas besoin de les définir vous même. Lombok peut faire même beaucoup plus, comme générer equals(), hashcode() et toString(), ou gérer les exceptions ou la synchronisation par simple apposition d'une annotation (dites "méta-programmation", ça fait plus classe). Si cette dernière option peut faire peur - mais rappeler vous la première fois que vous avez fait du spring-aop avec @Transactional - l'utilisation sur les getter/setter justifie l'outil à elle seule.

A tester d'urgence : http://projectlombok.org

04 octobre 2010

Mangez des pommes !

Premiers retours sur ma migration sous Mac ...

Le hard
La machine est particulièrement bien finie, avec son habillage aluminium on est loin de certains PC en mauvais plastique. Le clavier typique, aux touches plates et carrées, rappelle celui du minitel, mais est pourtant très confortable. Par contre, les petits cachottiers d'Apple ont caché les touches utiles (pour un développeur) derrières des combinaisons : pas d'indication sur l'accolade "{" à moins d'avoir le petit guide du Mac-iste sous les yeux. Le pad est large et réactif, et on s'y fait très vite. Je le trouve par contre plutôt dur au clic, et je n'aime pas non plus le mode "frappe" pour cliquer.

L'OS
MacOS est basé sur un coeur FreeBSD, et a été fortement optimisé pour la plateforme 64 bits multi-coeurs. Je ne sais pas si c'est la seule explication, mais je constate que l'OS est très réactif et réparti très bien les ressources entre process. Je ne constate aucun de ces "gels" si fréquents sous Windows lorsqu'on lance une grosse appli (genre, un document Word :P ). L'installation d'application est simple comme bonjour (glisser, déposer), et a priori la désinstallation tout aussi triviale et propre. Je ne parle pas de l'esthétique qui est un élément pour lequel on connait le soin d'Apple.

Les applications
Le Mac est livré avec tout un tas d'applications de bonne facture, qu'on complétera avec quelques outils complémentaires selon le travail qu'on désire réaliser. Je regrette qu'iWork ne soit pas packagé. Il ne coûte que 79€ et serait un argument pour un système "tout compris", mais il n'y a pas de petit profit chez Apple, comme en témoigne le prix des accessoires, ou la sortie mini DisplayPort, qui oblige à acheter un adaptateur, alors qu'un port HDMI ou DVI ferait le job (mais nécessiterait à Appel de reverser 4cts par Mac !)

On s'habitue assez vite à la disposition du clavier et au pad (le passage régulier du Mac au PC est assez perturbant, on fait des trucs bizarres pendant quelques minutes). Pour ma part, je n'ai pas rencontré de problèmes insoluble, surtout avec l'aide du support en ligne 24/24 : @aheriter et @jollivetc !

Le côté obscur
MacOS est donc basé sur un socle Unix-BSD. C'est aussi ce qui en fait l'intérêt pour les développeurs ! Le passage de la barrière est cependant assez net. La console bash utilise les raccourcis propres à ce terminal, à savoir [Esc + B] pour revenir un mot en arrière. Ca rappelle l'apprentissage douloureux de VI, mais après tout c'est aussi un garde fou pour ceux qui ne devraient pas s'aventurer au delà de la partie graphique. Rassurez-vous, on peut définir ses propres combinaisons de touches pour améliorer la convivialité de cette console.

En conclusion, après quelques jours d'utilisation, je m'habitue bien à la bête et j'ai contourné les principales difficultés. Je ne suis pas encore aussi efficace que sous Windows et je me goure encore souvent de combinaisons de touches, mais ça vient vite. De là à savoir si ça justifie le tarif de ce jouet, je vous le dirait dans un prochain biller. Prochaine étape : intégrer le Mac dans mon environnement de travail (Exchange, Office Communicator, etc) et l'utiliser au quotidien...

26 septembre 2010

A vos Mac, prêts, ...

Et bien voilà, j'ai franchi le pas et je viens de commander un MacBook Pro sur l'appleStore. Avec les -16% que j'ai obtenu sur le refurb, cela amènent la bête à à peine le double de ce que j'étais prêt à mettre dans un portable, soit 1700€ :-/ Si on ne rate pas l'heure des annonces du jour, le refurb est une bonne adresse pour avoir des machines à un prix moins déraisonnable.

Pour la petite histoire, j'ai craqué pour un 15" i5 2,53GHz avec écran Hi-Res anti-reflet. En ayant eu celui d'Arnaud sous le nez au ParisJug, le choix de la dalle était non négociable. Mais rassurez-vous, il me restera toujours mon super Dell Low-Res @boulot pour me rappeler ce que c'est que de programmer pour les gens normaux ;)


J'espère que la légende se vérifiera, en terme de puissance, d'ergonomie, de "l'essayer c'est l'adopter". Il me reste aussi à convaincre Madame que nos économies de l'été n'ont pas été claquées dans un simple caprice de gosse. Ca va me faire quelques heures sup' à planifier, ou bien 50h de cours à donner, ou encore 850 exemplaire de mon bouquin à vendre en plus - à moins de trouver un mécène, ou encore de détourner le budget du BreizhJug ?

Tiens du coup ça me donne une idée : à tous ceux qui me donnent 1€ pour financer cet achat (mince, 1€ c'est rien, faites un geste), je promet de citer leur nom sur ce blog. Il "suffit" que vous soyez 1700 à jouer le jeu (un peu comme dans le club Dorothée à l'heure des voeux d'anniversaire où on était obligé d'enregistrer et de repasser au ralenti)

Pour commencer, merci à Christophe Jollivet qui me donne plein de bons tuyaux ;)

20 septembre 2010

cryptographie quantique

Réflexion comme ça au détour d'un article sur la cryptographie quantique (dossier de pour la science de cet été) :

L'autorisation d'utiliser un système de cryptage est soumis à diverses autorisations, généralement liées à la possibilité des états d'accéder en cas de besoin aux données. En france, le cryptage avec une clé de plus de 128 bits est ainsi autorisé sous réserve que le logiciel soit déclaré (mais il y a plusieurs décrets sur le sujet, je ne suis sans doute pas très à jour). Aux US, les oreilles de la NSA ne sont un secret pour personne.

Vous vous souvenez peut-être avoir répondu à un questionnaire étonnant lors du téléchargement de JCE (Java Cryptography Extensions), vous demandant si vous résidiez en Afghanistan ou un pays hostile aux Etats-Unis. Ca fait sourire mais ça résume bien l'importance des mécanismes juridiques en place pour être en mesure de surveiller les activités numériques.

Quid de l'information quantique ? Le jour ou l'Internet commencera à proposer des liens sécurisés quantiques (et ça ne va pas tarder, les premières expérimentations se font déjà sur quelques kilomètres), les états ne vont-il pas réclamer leur droit à l'écoute pour toutes les bonnes raisons que la sécurité nationale peut invoquer ? Et là point de salut : un flux crypté quantiquement est ... définitivement inviolable.

Le jeu de la cryptographie quantique est de "déléguer" la sécurité à un système physique inviolable par nature, et non à un algorithme "compliqué" qui nécessite des puissances de calcul inaccessible au commun des mortels - mais pas aux états. Un échange sécurisé par l'algorithme BB84 est totalement inviolable, à savoir que la présence d'une écoute est détectée sans contournement possible. L'information ne peut être copiée ou écoutée sans casser le lien et dénoncer l'espion. Même 007 n'y peut rien.

Si la NSA n'en est pas encore à revendre ses serveurs sur eBay, je m'interroge sur l'opportunité réelle de ces technologies émergentes et suivies de très très près par tous les investisseurs du domaine. Je doute que les US autorisent l'export hors de leur territoire d'une technologie sur laquelle ils n'auront pas de moyen de contrôle (d'où l'importance d'avoir des labos de recherches en Europe ;P ).

Si on est encore loin d'avoir des qBit sous le capot, la révolution quantique va changer la donne dans pas mal de domaines de l'informatique. Déjà qu'on a du mal à coder pour des multi-coeurs, ça va donner :-/

17 septembre 2010

Quelle adoption pour Git en entreprise ?

Lors de ma conférence au JugSummerCamp Emmanuel Bernard a soulevé une question pleine de bon sens :
"Comment vois-tu l'adoption de Git en entreprise".

C'est clair que Git est pénalisé par l'image de Geek qui lui colle à la peau : construit par Linus Torvald, utilisant la ligne de commande avec des options tortueuses, ...

FlashBack :

Quand j'ai commencé à bosser, on attaquait tous en telnet un serveur de dev, sur lequel code source et résultat de compilation était allègrement mélangés dans des répertoire ou tout le monde tapait son code sous vi/emacs, sans plus de gestion de version en dehors de la sauvegarde hebdomadaire sur bande.

Quelques années plus tard, première révolution avec Visual Age et son gestionnaire de version centralisé, basé sur la prise de verrous sur les fichiers. On entre dans un mode de concurrence et de gestion collaborative, où chacun dispose d'une copie de travail dédiée sur son poste de développement.

Plus tard, seconde révolution avec CVS puis SVN : l'absence de verrous permet de travailler sans "subir" les actions en cours des autres développeurs. La problématique des merge apparaît, mais l'outil est tout de même assez efficace pour les gérer, en particulier sous Eclipse qui devient notre environnement quotidien.

Aujourd'hui, les DVCS portent une nouvelle révolution : la séparation du workflow projet et de celui du développeur. Le travail local, basé sur des tentatives multiples, des retours arrière, des recherches dans l'historique, bénéficie pleinement d'un gestionnaire de version. Pour autant, le reste de l'équipe ne subit pas vos diverses branches et commits en tout genre. Le merge de branche devient étonnement efficace, le mot "branche" n'est plus synonyme de "galère".

Il ne fait aucun doute pour moi que les DVCS vont s'imposer, alors to Git or not to Git ?

D'une part, Git est nativement supporté dans Eclipse (bien que ce soit encore améliorable) ce qui devrait faciliter les choses. Les outils graphiques comme TortoiseGit facilitent aussi son utilisation. La ligne de commande reste le plus efficace, mais avec le temps et le murissement de ces outils, on devrait pouvoir s'en passer progressivement (enfin, pour ceux qui veulent).

Reste que les concepts sont encore neufs et qu'il va falloir ses les approprier. Pour ça il faut des précurseurs, qui porteront ainsi le reste de l'équipe et assureront le support de niveau 1 - et Git-svn va nous y aider.

Git-svn permet d'utiliser Git en local avec tous les avantages que cela implique, sans que la référence svn soit impactée. Ceux qui doivent effectuer des opérations non triviales (refacotring), ou bien passer souvent d'une tâche  à l'autre (corrections de bugs), ou encore qui ont une culture geek pourront le tester, l'apprivoiser, puis l'adopter. Contrairement aux autres "révolutions" que j'ai évoqué, celle-ci va se faire en douceur. Une fois que  l'équipe aura utilisé au moins une fois Git sur son poste, le remplacement de SVN sera naturel.

Après tout, il y a 13 ans (putain, 13 ans !) si j'avais parlé de faire une branche alors qu'on avait besoin d'éditer avec vi un même fichier depuis notre telnet, je serais passé pour un geek (en fait, c'était déjà le cas pour d'autres raisons). Je me rappelle aussi une discussion interminable avec un I.Q. lors du passage à CVS, lorsque j'expliquais qu'on travaillait à plusieurs sur le même fichier, sans mécanisme de verrou ...

Aucun DSI n'imposera Git à ses équipes, par contre les équipes qui y ont goûté le réclameront rapidement. Il y aura donc, comme toujours, les boîtes qui savent suivre le mouvement à temps et celles qui courent derrière le train. C'est aussi à toi, fidèle lecteur, de faire du lobbying, selon la catégorie dans laquelle tu veut entrer. Fais toi la main, parles en et montre le à tes collègues, râle un bon coup sur SVN, et le projet "pilote" pointera le bout de son nez.

14 septembre 2010

La face B des JUG

En tant que JUG-Leader je suis confronté à un cas de conscience : j'ai des tonnes d'idées, mais pas assez de temps pour tout faire. En particulier, l'organisation de "grosses" soirées-conférence me bouffe la majorité de mon temps. Il existe pourtant une autre dimension dans un JUG : l'aspect communautaire, celui qui nous pousse à donner de notre temps pour recevoir autant sinon plus de la part des autres membres.

Au détour d'un ParisJug j'ai rencontré les JavaDuchess. Comme probablement une majorité d'entre vous je ne comprenais pas bien le sens de ce groupe. Défendre le droit des femmes dans un monde machiste ?

JavaDuchess n'est pas un mouvement féministe. Bien sûr il s'agit de montrer que les femmes aussi ont leur place dans un monde technique et de couper court à toutes ces petites réflexions qu'on a tous fait un jour ou l'autre, parfois sur le ton de la plaisanterie, parfois avec moins de tact.

Pour vous expliquer ce que représente JavaDuchess, la métaphore qui me vient à l'esprit c'est la "face B" :

Quand vous achetez le best-of de Sting and The Police, vous trouvez sur le premier CD les incontournables Roxane, Russians, Message in a bottle et compagnie. Mais à côté de ce CD dont les titres ont fait le succès du groupe et qui passent encore en boucle sur toutes les ondes, il y a le second CD, les "faces B". Tous les titres qui n'ont pas été retenu pour le "gros" album, des choses plus expérimentales, plus personnelles, plus intimistes, et dans pas mal de cas des petites perles qu'on écoute avec plaisir.

Les Duchess, c'est pour moi la face B des JUGs. Ce n'est pas un Virtual JUG à la développez.com, car la convivialité est un pilier du groupe, et les rencontres 'IRL" sont le meilleur moyen de souder l'équipe. Ce n'est pas non plus un JUG au sens traditionnel car il n'a pas de lieu physique précis et elles n'organisent pas des événements come ceux auquels vous êtes habitués. Par contre, en marge du JUG il y a de nombreuses actions qui profitent à tous et permettent aux Duchess de créer des liens forts et de prendre une place dans la communauté qu'elles n'auraient jamais obtenues individuellement (vous savez, le total supérieur à la somme des parties, tout ça).

Parmi les actions des Duchess que j'apprécie, (excusez moi les filles si j'oublie des trucs) :

  • Les rencontres avant/après JUG ! Convivialité, rencontre, échanges. De ce point de vue la mixité est une force pour assurer une super ambiance - hé oui, les réunions des Duchess n'est pas réservé au filles!
  • Le blog. Peu de gens ont le temps et la matière pour animer un blog et s'assurer un public significatif (pour en arriver là il faut troller à mort sur Maven vs Sonatype, et encore...). Ce que ne veut pas dire qu'ils n'aient rien à dire. Le blog des duchess est "collaboratif". Chacun(e) peut y publier un billet, demander de l'aide ou une relecture. Même si vous n'êtes pas technique, juste faire un compte rendu de la dernière conf c'est déjà très bien pour animer la communauté et "se lancer".
  • L'agenda, qui recense les événements et permet de savoir ce qui se passe dans le coin. Tiens, une soirée Agile ? Tiens, Julien Dubois refait sa pres' Spring en production au SUG ? Seul regret : que l'agenda ne soit pas géolocalisé pour nous offrir une vue mixant planing temporel et proximité géographique (qui se lance pour nous faire un mashup Google Maps + Google Agenda ?)
  • Les groupes de travail. Pour l'instant à ma connaissance uniquement autour de la certification SCJP, mais pourquoi pas d'autres sujets ? C'est toujours plus motivant de travailler à plusieurs.
  • Le "covoiturage". C'est déjà pas facile d'être la seule fille dans une assemblée de 50 mecs, alors pour se motiver à aller à une conférence de techos ... sauf si on trouve du monde pour y aller à plusieurs, des "copines" rencontrées sur le Net. Le concept ne se limite pas qu'au filles d'ailleurs : combien d'entre vous sont le seul de la boîte à aller au soirées JUG ? Combien passent pour des allumés en expliquant ce concept geekesque aux collègues - "Tu n'as pas assez de ta journée de boulot ?"

Probablement plein d'autres idées (sans compter toutes celles que j'oublie) à fleurir de ce côté. Des tas de petites choses, qui ne fonctionnement que grace au groupe, mais qui en font que la communauté Java fonctionne dans les deux sens, et pas juste un rendez-vous mensuel de conférence où l'on vient consommer sa dose de technique, puis "salut, au mois prochain".

PS : je suis désormais membre des Duchess moi aussi, si vous avez des idées pour mettre en place un truc à Rennes mais que vous avez besoin d'un coup de pouce, vous savez où me trouver.

10 septembre 2010

Excellente présentation "Spring 3 en production" de Julien Dubois

Pour ceux qui n'auront pas pu suivre l'excellente session "Spring 3 en production" de Julien, sans doute meilleure que la mienne ;), une séance de rattrapage est organisée au Paris Spring User Group le 16 septembre  !

Un grand merci à Julien pour avoir bien voulu participer avec moi à cette petite guerre par blogs interposés :) Bien entendu, c'était une blague, comme vous pourrez également le constater.





Rendez-vous ce soir sur le port de La Rochelle pour fêter la fin de la conférence !

09 septembre 2010

Choisissez-votre camp pour le JugSummerCamp

Le JugSummerCamp, je ne le présente plus, va vous poser un réel défit : faire un choix dans le programme entre les deux tracks de conférences.

En particulier, aux alentours de 15h ça va être très compliqué, pour choisir entre ma session "Maven 3 au coeur de la Forge Logicielle" et la présentation de Julien Dubois "Spring 3 en production" alors voici des pistes pour vous guider :


  • Spring c'est complètement has been, maintenant qu'on a JavaEE 6. Plus rien dans le tuyau, passez votre chemin ;
  • La session de Julien ne va pas vous apprendre grand chose vu que tout est déjà disponible dans le livre blanc publié par SpringSource ;
  • Julien ne vient pas pour donner une conférence sérieuse mais juste pour retrouver tous ses anciens potes de La Rochelle, alors il n'a rien préparé à part le programme des festivités nocturnes, et ça va être un grand n'importe quoi ;
  • Dans l'hypothèse où vous voudriez apprendre quelque chose sur Spring 3, il serait plus rentable de consulter le livre "Spring par la Pratique" et le site web associé ;
  • Et si vous avez des questions sur Spring et la mise en production, posez les plutôt sur Responcia ça sera plus efficace.

Moralité, ne perdez pas votre temps, n'écoutez pas les balivernes de Julien et venez plutôt à ma session !



02 septembre 2010

GWT 2.1 will be maven compliant !

Developping gwt-maven-plugin was a pain. GWT was clearly not designed with Maven conventions in mind and we had to find many hacks and workarounds. Google Eclipse Plugin didn't made things simplier as it came with some hard-coded path and we had then to satisfy 3 conflicting points of view...

But things change

With 2.1 release, GWT Team is looking to nicelly integrate with Maven. We are in contact to see what changes could occur on GWT side to better fit into Maven. The first visible effort is a new "-maven" option in webAppCreator script to generate a maven compliant project structure and the adequate POM.

The maven plugin allready includes an archetype for same purpose. I'll upgrade it to match the webAppCreator one, with some improvements (including Google Eclipse configuration). I've sent the GWT / Google Eclipse Team a list of feature requests to make Maven / Eclipse / GWT work better together.

As a result, I expect to release a 2.1.0 preview releases of gwt-maven plugin for next GWT Milestones, so that the plugin could benefict from changes made on Google side, and the POM generated by webAppCreator could also use those new features.

I also called for a vote on Mojo Dev List to change the development process so that new release of he plugin match a GWT release, and don't support anymore all SDK history. This will make things technically simplier and will drop a large set of obsolete parameters.

Good days Maven users, GWT will become your favorite toolkit in near future !

Update :
You can test a first preview early-adopter draft SNAPSHOT.
Doc is deployed at http://people.apache.org/~nicolas/gwt-maven-plugin-2.1/ (much cleanup needed)
same URL is a maven repo to get the plugin. Test it using (as a single line) :

mvn archetype:generate -DarchetypeRepository=http://people.apache.org/~nicolas/gwt-maven-plugin-2.1 \
 -DarchetypeGroupId=org.codehaus.mojo \
 -DarchetypeArtifactId=gwt-maven-plugin _\
 -DarchetypeVersion=2.1-SNAPSHOT  

01 septembre 2010

We'll be at JugSummerCamp !

Vous le savez forcément déjà, mais j'en remet une couche : le 10 septembre aura lieu à La Rochelle le JugSummerCamp, un concentré de JUG dans une journée de conférence, gratuit et indispensable, avec un week-end à la plage à embrayer pour ceux qui veulent bien finir l'été.
Vous n'êtes pas encore inscrit ? Qu'est ce que vous attendez ?

Pour ce qui me concerne, j'y vais avec la bénédiction de mon chef, pour défendre les couleurs d'Orange Business Services IT&Labs, youkaïdi. Pour l'occasion je pourrais mettre un T-Shirt orange, ça me changera...

Et comme mon chef est aussi un artiste passionné (et oui, on peut faire autre chose de sa vie que de l'informatique !), en guise de réponse à la question "est-ce que tu me sponsorise pour le JugSummerCamp ?", il m'a peint une toile !

Vous en avez, vous, un chef comme ça ?

bye bye bikshed

Pas facile de suivre l'évolution de GWT, dont la version 2.1 poursuit son chemin de Milestone en Milestone...

En 2009, lors de la conférence Google I/O, la session Best Practices for GWT nous présentait les patterns MVP et Event Bus, et leur application en GWT. S'en est suivi une poignée d'implémentations opensource sur googlecode (ici, ou ) pour mettre en pratique ces bons conseils.

Pour 2010, la roadmap GWT nous annonçait un MVP "officiel", d'où de nombreuses interrogations de la part de ces communautés et une grosse attente du côté du forum des utilisateurs. Vient alors la wave de "design collaboratif" de Ray Rayan, qui sème un sérieux trouble. On y parle de data-binding, d'une nouvelle mécanique client serveur, et pas tellement de MVP ... en tout cas pas dans les termes de 2009 !

Voici qu'arrive bikeshed et sa démo Expense. L'analyse du code de l'exemple montre une véritable usine à gaz dont on comprend mal les rouages, avec pléthore de classes techniques. On comprend rapidement que cette infrastructure doit in fine être générée par l'outillage. Tiens, justement, Google annonce son rapprochement avec Spring Roo sur ce sujet !

Et hier, poum, la nouvelle tombe : bikeshed est mis au placard et retiré du trunk - ce nom étrange était-il prémonitoire ? Il n'en reste que le mécanisme d'échange avec le serveur RequestFactory (basé sur JSON) permettant de faire le lien entre un backend JPA et des DTO utilisés dans l'IHM GWT, et la génération de squelette est déportée dans Spring Roo.

bikeshed était très - trop - ambitieux et complexe. Si un socle MVP fait bien sont apparition dans GWT 2.1 (com.google.gwt.app) il ne reprend pas le vocabulaire de la session Google I/O 2009 et manque cruellement de documentation, en étant de plus marqué "Expérimental". Je regrette que l'équipe GWT se soit embarquée sur un terrain aussi glissant, plutôt que d'inclure un développement externe qui a déjà fait ses preuves et porté par une communauté, comme ils l'ont fait au préalable avec l'incubateur. Les diverses approches MVP proposées en opensource ont fait leur preuves et ne vont même pas souffrir de la concurrence d'un framework mal documenté et expérimental, même intégré au SDK.

Je ne pense pas que cela empêche l'innovation : de très bonnes extensions comme gwt-fx ou gwt-dnd proposent des fonctionnalités qui étendent le scope de GWT vers plus d'interactivité. Flex comme Java/Fx proposent un mécanisme de data-binding pour lier le modèle à la vue en une ligne de code, ce que nous devons faire à grand coup de Handlers et d'événements sur l'Event-Bus en GWT. Des solutions de binding GWT existent pourtant de longue date en opensource : le support des ProperyChangeListeners JavaBean - élément clé du DataBinding - a été proposé dès GWT 1.4, mais le sujet reste non-prioritaire

Wait & See comme on dit ...

17 août 2010

From SVN to Git

Vous l'aurez compris, Git est mon nouveau dada. Avec toutes ces années de "centralisé" j'ai tout de même du mal à me sortir de mes habitudes sous Subversion. Voici donc un petit pense bête pour ceux qui sont dans le même cas que moi, et qui ont du mal avec les innombrables options de Git, surtout si on le couple avec le SVN de l'équipe.


Le travail avec l'équipe
Dans ce mode, SVN reste le dépôt de référence du projet, donc il va bien falloir faire le lien avec le reste du monde.





Créer le repo Git/SVN : 
git svn clone -s [urlsvn] -r yapalongtemps:HEAD

le -r permet de limiter l'historique pour ne pas avoir un repo Git trop gros en indiquant un numéro de révision SVN de départ.
-s pour "standard", trunk/branches/tags. Si votre URL svn ne commence pas à ce niveau, ajoutez -T avec le dernier niveau de répertoire comme si c'était le "trunk".

Si vous utiliser une saloperie de proxy non transparent, vous devrez peut être éditer $HOME/.subversion/servers pour ajouter vos identifiants, et/ou définir la variable d'environnement HTTP_PROXY

Exclure les fichiers non versionnés : 
il faut créer des .gitignore pour les fichiers exclus (.classpath, .project, target ...). Il est dommage qu'il n'y ai pas une synchronisation entre ce fichier et les svn:ignore, mais bon c'est pas la mort. En plus, ça va attirer l'attention de quelques curieux qui viendront vous voir pour découvrir Git à leur tour :P

Committer ses modifs : 
git svn dcommit
Git va rejouer tous vos commits sur SVN. C'est là que la réorganisation de vos commits et des logs associés peut être intéressant pour vous la jouer "j'ai tout fait super propre en un seul coup". Cela va surtout éviter de committer des bouts de trucs inconsistants qui pénalisent tout le monde, comme on le fait trop souvent sous SVN.

Mettre à jour son environnement :
git svn rebase
Git va faire une update svn puis rejouer toutes les modifs committées en local. Attention de partir d'une environnement propre (cf git slash plus loin)

Ces deux commandes sont assez peu naturelles, l'équivalent sur un repo Git étant git push / pull, mais bon.

Le travail en local

C'est là que Git va montrer son intérêt : Git nous sert à structurer notre façon de bosser là où jusqu'ici on était  obligé, soit d'avoir plusieurs workspaces, soit de "pousser" notre workflow sur le SVN commun, soit d'avoir plein de travaux en cours dans le même workspace et de commiter un peu tout et n'importe quoi (suivi de quelques commits "fix").

On va donc bénéficier d'une gestion de version très puissante et performante en local, plutôt que d'un foutoir plus ou moins organisé.

Démarrer une nouvelle tâche :
git checkout -b maTache


le "-b" crée la branche locale à la volée
faire sa tambouille, je suppose que vous utilisez eGit ou équivalent : add, commit, etc

Faire une pause et passer en urgence sur une autre tâche :
git stash
git checkout monAncienneTache
// correction et tout ça sur monAncienneTache
git checkout maTache 
git stash pop

"stash", c'est la boite à idées de Git, la pile où on met tous les trucs en cours, en attente de "plus tard, quand j'aurais le temps"

Intégrer une branche dans le master une fois que tout marche comme sur des roulettes :
git merge maTache master


supprimer la branche une fois le boulot terminé / validé / livré :
git branch -d maTache 

Savoir où on en est après une soirée un peu trop arrosée (une soirée au ParisJug par exemple) :




git status
indique les modifications en cours, fichiers non suivis, etc
git branch  

indique les branches existantes, quand on a oublié le nom qu'on leur a donné



Faire un gros ménage après un cafouillage
git reset --hard HEAD
toute les modifs non committées partent à la poubelle. C'est l'équivalent du svn revert.
en indiquant un ID de commit on peut même revenir en arrière pour changer le futur (à la McFly).





J'espère ne pas avoir dit trop d'âneries et que ça vous aidera pour vos premiers pas avec Git.