17 novembre 2012

Devoxx Day 5

La dernière journée de Devoxx est particulière. D'une part, on est quelque peu lessivés par la soirée au Nox une longue semaine de dur labeur. Par ailleurs, le planing est réduit à 4 salles en parallèle car de nombreux participants sont déjà partis (ou n'arrivent pas à se lever ?)

J'arrive pour ma part à être présent pour la première session du matin, présentant les évolutions des annotations dans Java 8. Nous aurons donc un peu plus de flexibilité dans les annotations, comme par exemple la possibilité de répéter une annotation sans devoir l'empaqueter dans une annotation plurielle (@Schedules( { @Schedule( "daily"), @Schedule( "weekly" ) })), mais au prix de certaines accrobaties dans le compilo. Ce simple changement nécessite en effet de considérer avec soin la compatibilité ascendante. Comme pour les lambda, ce problème est un énorme frein à l'évolution de Java, qui impose de mesurer avec soin les impacts et à privilégier des choix non définitifs (voir cet article). Une nouvelle API est également introduite, sur le modèle de ce qui est disponible dans les annotation processors (compilte-time), mais cette fois au runtime. Cela permettra d'avoir un niveau d'abstraction comparable entre un processor APT et du code runtime qui devait jusqu'ici passer par la réflexion.

Enfin, si de nombreux efforts sont faits pour corriger le tir, c'est un peu dommage de se rendre compte aujourd'hui qu'il peut être utile d'utiliser une même annotation deux fois :-/

La session suivant c'est l'enregistrement de l'épisode 68 des cast-codeurs, en public. Tous les frenchies sont au rendez-vous, ce qui permet de constater que DevoxxFrance ne les a pas fait déserter leur rendez-vous annuel en terre flamande (moi j'ai une excuse, c'est la terre de mes aïeux). Quelques sujets sérieux, d'autres moins, d'autres pas du tout.

José et David se sont emballés sur un point qui mérite en effet qu'on s'y attarde, la "nouvelle" syntaxe des parallel collection, introduites plus ou moins en douce. L'an dernier, quand on nous a présenté les parallel collection, on nous a promis ceci :

for (Foo foo : bar.filter( blah ).map( buzz )) { // je traite des foo }

Java 8 étant trop bien fait, il nous permettait donc de faire du filter/map/reduce sur des collections et de profiter du parallélisme lorsque c'était utile. Sauf qu'au final cela va plutôt ressembler à ça :


for (Foo foo : bar.stream().filter( blah ).map( buzz ).toList() ) { // je traite des foo }


autrement dit, il faudra explicitement demander le mode "parallel collection" et revenir au mode "séquentiel" à la fin du traitement. On arrive ainsi à une syntaxe merdique d'une part, mais surtout à l'absence de filter/map/reduce sur les collections en standard, sauf à s'obliger à utiliser un algo conçu pour traiter des BigData sur du multi-core. Les explications demandé par José aux personnes intéressées ont jusqu'ici été de la forme "c'était compliqué à implémenter". Non-officiel bien sur, mais attention Java 8 sort l'été prochain, aussi si rien n'ai fait les choses seront entérinées sous cette forme et on se les coltinera 15 ans - ou plutôt, on utilisera guava ou autre plutôt que les collections standard ...

Atlassian offrait ensuite des pizzas (attaquer des bières à 10h30 aurait été un peu violent) pour conclure ce très beau Devoxx 2012, et nous avons été quelques-uns à aller faire un dernier repas ensemble avant de prendre le Thalys.

J'espère que ces billets sur Devoxx vous auront donné envie, rendez-vous en 2013 (ne vous y prenez pas trop tard, les places partent vite), et/ou pour Devoxx UK puis Devoxx France !

16 novembre 2012

Devoxx Day 4

Deuxième journée de conférence, et surtout quatrième journée à dormir peu après une soirée mouvementée, j'accuse un peu le coup :)

Les keynote commencent avec l'annonce de JBoss de la "short-list" pour le nouveau nom de JBoss AS. J'ai d'abord cru à une blague mais ce sont bien les propositions retenues. On aura donc peut être droit à un "J-Béret by RedHat" :-/

On passe à la keynote de Google, présentant les nouveaux Nexus 4 et 10, l'intégration Jenkins (by Cloudbees, youpi!) dans AppEngine, et les dernières fonctionnalités "hype" de Chrome, sur fond de talk sur la "vie online" et notre responsabilité de développeurs et d'early-adopters pour mettre en place une vraie sécurité, du genre 2-step verification login, utilisation systématique de https, ... sans perdre de vue l'expérience utilisateur. On conclut rapidement sur l'utilisation d'OpenId et le "one click signup" qui se multiplie sur les sites web.

Je zappe la session suivante pour discutter un peu, avant de rejoindre les London-Jug guys présentant un talk sur les anti-patterns de développement,  sur le mode "gentil et méchant flic", très sympa et pleine d'humour.

Après le casse croute passé au côté de l'équipe CodeStory, je suis une session sur les test en Javascript. Le framework Jasmine y est mis en oeuvre pour modulariser une appli JS en fragments testables unitairement. Pour la partie graphique, après un premier essai utilisation Selenium (12 secondes pour exécuter 3 tests basiques), le speaker présente un runner JavaScript permettant d'exécuter les tests dans la JVM en mode émulation. Très rapide et avec feedback dans l'IDE on a donc un outil performant. Dernière option proposée : utiliser PhantomJS (browser headless basé sur webkit) plus proche de la réalité mais qui est plus délicat à intégrer (maven-exec) - amha un Custom Runner JUnit devrait pouvoir y remédier, si ça tente quelqu'un ;) Une combinaison de ces recettes permet donc de monter un CI Javascript très productif.

J'ai apprécié ce talk car j'avais été interpelé par l'équipe CodeStory qui utilise Mocha et Zombie pour obtenir des tests web rapides et fonctionner efficacement en full TDD. Avec le talks sur Testacular plus tôt cette semaine, je vois que l'écosystème JavaScript est toujours aussi prolifique et de mieux en mieux outillé.

Merci à Arnaud qui me prête un tournevis pour remettre en état mon MacBook qui souffre un peu (trop de bière, petite nature) avant de passer à une façon plus DevOps de gérer l'infrastructure, présentée par Patrick Debois himself. Initiée par CFEngine, puis Puppet et Chef, la catégorie des "Configuration Manager" adresse un besoin de traçabilité/reproductibilité que l'on connait bien dans le développement logiciel et qui s'applique aujourd'hui à l'identique dans le monde des Ops.

Patrick présente en parallèle Chef et Puppet en comparant les concepts avec leur équivalent en programmation java : class <-> definitions, héritage <-> attribut "cookbook", etc. Puppet et Chef se distinguent essentiellement par la culture qui les sous-tends. Le premier propose un DSL volontairement restreint, plutôt contraignant (pas de boucles !) - le second en permettant d'écrire n'importe quoi en Ruby ouvre la porte à des utilisations maladroites et ingérables. Puppet utilise par ailleurs un graphe des tâches à exécuter qui peut être interrogé alors que Chef exécute purement les cookbooks de manière séquentielle, mais ainsi de façon plus prédictible. 

Avec le développement de ces outils d'infrastructure as code, on voit apparaître de l'outillage (Gepetto, RubyMine), règles de codage, patterns et anti-patterns, gestion de dépendances, visualisation, debugging (encore naissant), testing qui nous sont familiers.

La taille relative de mes notes par rapport aux autres talks montrent à quel point ce talk m'a intéressé ;)

Je m'offre un petit moment de calme avant d'aller découvrir les nouveautés de Groovy 2.0 (j'aime bien Groovy, il me permet de coder du Java comme d'hab tout faisant des trucs géniaux lorsque c'est utile). Les AST transformation en particulier me donnent envie de creuser le sujet. Je vous renvoie sur la chaîne Parleys du BreizhJug si vous voulez suivre ce talk en version FR

La journée aurait du se terminer ici, mais après le succès de son quickie, nous avons droit à un "replay" de Chet Haase présentant d'une manière délirante un nouveau process de développement. Un pur moment de délire qui fait du bien, avec un Chet qui arrive a garder un sérieux sans faille dans son costume de consultant d'un jour.

La fin de journée permet de joindre le BOF des JUG-Leaders, occasion annuelle de faire le point sur les relations entre JUGs, avant de rejoindre le NoX pour la Devoxx Party, qui permet de dépenser un peu des calories que la bière belge nous aura fait prendre cette semaine, et aussi de faire connaissance avec la gente féminine à péage qui occupe le night-club.

15 novembre 2012

Devoxx Day 3

On attaque le gros morceau avec les journées "conférence"

La matinée est occupeé par les "keynotes" :

Le ton est donné avec une "danse" des robots Nao d'Aldebaran-Robotics. Bluffant !
Stephan Jansenn intervient alors pour accueillir les 1400 participants de la conf, les apostrophant sur ses robots-jouets de luxe qui pourraient être "le comodore 64 de la prochaine génération".
Restant sur le sujet, passe alors un vidéo présentant Devox4Kids, un programme super sympa sur la robotique pour les plus jeunes. S'il y en a que ça tente j'aimerais bien faire ce genre de chose à Rennes, bippez moi.

Suit l'annonce, toujours en vidéo, de DevoxxFrance du 27 au 29 mars, et un passage sur scène de Nicolas, José et Antonio (qui, mal réveillé, s'est trompé de couleur pour le polo DevoxxFrance :P). Suit alors une autre vidéo, extraite des Monthy Python, sur l'affrontement des chevaliers d'Arthur fàce aux français. La vidéo s'arrête sur "j'ai un plan" et l'équipe du LondonJug débarque habillée en chevalier et annonce ...

Devoxx UK les 26 et 27 mars (oui, il y a recouvrement) et invite les speakers à considérer les 2h30 d'Eurostar pour faire d'une pierre deux coups.

On passe ensuite à la keynote Oracle. J'en profite pour aller satisfaire un besoin naturel et consulter mes mails, et je reviens pour la dernière démo JavaFX (certains prétendent qu'il y a eu à Devoxx plus de sujets sur JavaFX que d'utilisateurs :P). A priori je n'ai pas raté grand chose.

Neal Ford présente ensuite "Geek Leak", ou "comment l'esprit geek transpire sur des activités non-informatique. Autant Neal est un super speaker, autant j'ai trouvé son show très moyen, complètement décousu.

Le marathon commence alors avec les Conférences, qui vont s'enchainer toute l'après midi jusqu'à 19h.

Je vais voir la conf sur AppEngine, avec un coup de main à  Ludovic Champenois pour mettre un peu d'huile dans sa démo de l'intégration de DEV@Cloud avec AppEngine. Google Execute Engine, concurrent direct d'Amazon EC2, est une bénédiction pour les dévelopeurs GAE qui doivent faire avec les contraintes de la plateforme. Par contre, ne pas oublier de tuer les instances après la démo sous peine de payer une grosse facture :)

Je fais une pause en allant voir l'équipe de CodeStory en action. Mal placés, ils doivent subir un environnement bruyant qui nuit à la qualité du show, qui est pourtant toujours aussi bluffant. Le public de Devoxx n'était pas aussi préparé que celui de DevoxxFrance, c'est dommage pour eux même si la performance est tout de même appréciée de tout ceux qui viennent "perdre" une heure à les suivre.

Je vais ensuite à une présentation sur Vert.X, qui m'a déçue. Beaucoup de théorie pas super intéressante que j'aurais préféré voir remplacée par des démos. Pendant ce temps, Arnaud suit la conf sur Nao et a bien du mal pour se retenir de faire un gros chèque à Aldébaran-Robotics pour remplacer son Karotz.

Après la pause j'enchaine avec un talk sur Dart, qui manquait un peu de peps mais était tout de même très bien mené, avec beaucoup d'exemples. Je reste TRES perplexe sur les web components, qui permettront à termes de "pluger" de nouvelles balises HTML riches. En l'absence de namespace, l'usage est de préfixer ces tags custom : . Seulement, apparaitront inévitablement des librairies de web composants, et donc des possibles conflits de noms de tags. Pourquoi ne pas avoir repris les namespaces xml ? A priori, c'est juste "trop tôt" pour être un problème :-/

Je zappe la dernière session qui m'inspire modérément pour aller "socializer" sur le stand Google, puis rejoindre les J/GT- User Group leaders qui sont invités par le géant du web pour un meeting dans le pub d'à côté. La soirée se finit inévitablement au Kelly's, lieu de toutes les débauches mais dont je ne dirais rien : "ce qui se passe à Devoxx reste à Devoxx" :D





14 novembre 2012

Devoxx day 2

Pour la seconde journée de Devoxx j'ai suivi le début de la session de John Smart sur l'automatisation des tests d'acceptance et son outil thucydide. J'avoue avoir un peu décroché, le début de la session étant un peu "lent" à mon gout, aussi je vous renvoie sur Parleys pour vous en faire une meilleure opinion :) J'ai donc profité de la pause pour rejoindre le hackergarten, occupé en force par l'équipe JBoss. Ce format est vraiment super intéressant, permettant aux technical lead d'inspirer de nouveaux contributeurs et d'interagir directement avec leur communauté, et aux participants d'avoir des réponses de premier choix à toutes leurs questions techniques, plus la fierté de contribuer efficacement à leur projet préféré.

L'après midi, je me dépêche de rejoindre avec 20 minutes d'avance le lab Angular.JS qui promet d'avoir un grand succès, et je me retrouve au fond en bout de table. La salle est comble, le lab est un succès énorme. Pendant 2h30 nous développons donc pas à pas une application en partant d'un design html statique, ce qui permet d'introduire progressivement les concepts d'Angular ainsi que l'outillage associé. Vous pouvez d'ailleurs rejouer le lab chez vous. Super framework, qui me réconcilie avec JavaScript, j'en profite d'ailleurs pour découvrir l'excellent support de JavaScript et d'Angular dans Intellij Idea.
Un framework que vous découvrirez au BreizhJug en 2013 :-)

A nouveau la journée "university" se termine par des Tools in Action. J'en profite pour découvrir Testacular, outil de CI javascript développé par Google. Le talk manquait clairement de préparation et a été un semi-bide mais l'outil reste extrêmement intéressant. Les 15 minutes "utiles" que j'ai pu tirer de cette session m'ont donné une très bonne impression sur le potentiel de l'outil, pour sortir du mode "je code, je refesh mon browser" et passer à du vrai TDD en javascript.

On enchaine avec le "Maven Dependency Puzzler", qui nous expose quelques POM maven avec des cas de dépendances bien merdiques et la gestion de conflit parfois "non-intuitive" de Maven. Les trois premier gagnant une bière je commence la soirée très fort et j'enchaine ensuite sur le stand Oracle où la tireuse coule à flot, avant de rejoindre les frenchies au resto asiatique du coin qui sera content de ne pas nous revoir avant l'an prochain ;)

rendez-vous demain :D







13 novembre 2012

Devoxx 2012, day 1

C'est donc reparti pour 5 jours à Devoxx, La conférence java à ne pas manquer.

Premier jour, je suis l'université "Scala" pour en savoir un peu plus sur ce langage qui est autant défendu bec et ongles par ses fans que décriée par ses détracteurs. Pendant 2h30, les constructions de base du langage sont présentées en expliquant comment le compilateur interprète la syntaxe et la transcrit en invocations de méthodes. Pédagogiquement parlant, le talk est un régal. J'adore l'approche qui consiste à d'abord montrer un concept avec une approche très procédurale, puis à refactorer pour donner plus de "fonctionnel" et introduire les simplification de syntaxe, pour aboutir à du "beau" code scala, et dans les exemples qui suivent à toujours rappeler l'opération inverse, par exemple que "2 + 3" est interprété par le compilo comme "(2).+(3)" - évidemment, hors contexte ça fait un peu zarbi :)

Session intéressante qui donne (presque) envie de s'y mettre :D

Pendant l'après midi j'ai suivi la session "from syncrhonized() to parallel()" de Jausé Paumard. Après des rappels présentés avec précision sur le multi-threading et le pourquoi du "le double check ne fonctionne pas", José nous montre comment les librairies low-level utilisent des hacks pour contourner les problèmes de synchronisation du cache L1 (padding de la ligne de cache). On passe ensuite au niveau framework avec les SMT et le framework Akka, et enfin à l'évolution de Java avec le fork-join de Java 7 et les parallel collections de Java 8. J'ai adoré la conclusion du talk : après avoir vu pendant 2 heures les technos de paralélisation, José nous expose les conclusions d'un concours sur du calcul de suite de Fibonacci. Le record absolu est obtenu avec un algo séquentiel sur mono-coeur, en optimisant les éléments de bas niveau et l'algorithmique. Rien ne sert d'avoir 128 coeurs avec un algo pourri, et tous les algorithmes ne se paralélisent pas bien, nous sommes donc au début d'une nouvelle aire de l'algorithmique où nous allons devoir (ré)inventer des algorithmes pour tirer partie d'une informatique toujours plus distribuée.

La journée continue avec les Tools in Action, dont celui de Julien Viet sur CRaSH, le shell de votre JVM, que j'aimerais bien intégrer dans un plugin Jenkins pour faire du deboggage de builds - une idée pour le hackergarten du mardi ?

Fin de journée autour de quelques bières à échanger nos souvenirs de vieux geeks, mais bon, il faut être sage on est que lundi ...