Après une première journée bien remplie, place à la deuxième journée, qui s’annonce très chargée elle aussi…
“Annonce” JBoss
La journée commence par 2 sessions plénières. Tout d’abord, une “annonce” par JBoss. Voilà un exemple parfait d’annonce ratée. Dans les faits, JBoss veut renommer son serveur d’applications (JBoss AS) et nous demande donc de voter pour notre préférence, parmi les noms suivants :
- BaseJump
- WildFly
- jBeret
- Petasos
- Jocron
Personnellement, je ne les trouve pas terrible, le 4e est carrément affreux (du moins en français). Bref, on s’ennuie. Le bon côté des choses, c’est que cela ne dure que 10 minutes. Place à Google !
Google, Life online
Durant environ une heure, nous avons un discours de Tim Bray qui a parlé de la vie en ligne (Life online), ainsi que quelques démonstrations - plus commerciales que techniques - de certains produits de Google. Tim Bray a donc abordé le sujet de la vie en ligne, en insistant particulièrement sur un point : la sécurité. Premièrement, il est absolument indispensable de mettre en place le HTTPS sur son site, car il est de notre responsabilité de sécuriser la connexion avec nos utilisateurs. Certes cela coûte un peu d’argent (la génération des certificats étant payante), mais cela est simplement vital. Un autre message de Tim Bray concernait les mots de passe. Utiliser un même mot de passe pour plusieurs sites est généralement une mauvaise idée, on l’a vu récément avec le piratage de LinkedIn, laissant filer dans la nature des millions de mot de passes. Il insiste aussi sur l’intérêt d’utiliser les authentifications par tiers, comme avec Google, Twitter ou Facebook, bien que tous ces boutons enlaidissent un peu les pages de connexions… Dernier point important, la vérification en deux étapes, que tout le monde devrait adopter pour son compte Google. Le principe est d’utiliser une 2e méthode d’authentification en plus du mot de passe, à savoir un code reçu par texto pour se logguer. Si cette opération peut paraitre un peu contraignante, il n’en est rien en réalité, et cela peut vous éviter de bien graves désagréments, comme cela a pu arriver à certaines personnes.
Bref, un discours pas forcément joyeux, mais plein de remarques de bon sens. La suite sera un peu plus légère, avec entre autre la présentation des nouveaux produits de Google, en particulier le téléphone Nexus 4, la tablette Nexus 10, ainsi que la dernière version d’Android, Jelly Bean 4.2. De bien belles machines, présentées par Chet Haase ainsi que Romain Guy, bien que le discours paraissait plutôt commercial…
Il a été aussi question des nouveautés de Google App Engine, comme l’intégration de Jenkins grâce à Cloudbees, ainsi que d’une fonctionnalité très intéressante, le Traffic Splitting. L’idée est de dire à GAE de rediriger une partie du trafic de son site (exprimée en %) vers une autre version de son application, pour par exemple, permettre à quelques utilisateurs de tester la toute dernière version de son site. Simple et pratique !
Bean Validation 1.1: It’s not beansland anymore
Allons jeter un oeil maintenant sur la présentation d’Emmanuel Bernard sur la nouvelle version de Bean Validation (JSR 349).
Rappels sur la version 1.0
Tout d’abord, un petit rappel de la version 1.0, qui a défini les bases de la validation, son standard. Des frameworks comme JPA, JSF, GWT, etc. l’utilisent déjà, ce qui est une bonne chose.
Des contraintes existent déjà, comme @NotNull
, @Size
, etc. Il est toutefois possible de créer ses propres contraintes, tel que @ZipCode
.
La notion de groupes avait aussi été introduite : validation partielle, ordre des contraintes. On définit un groupe comme ceci :
1 2 3 4 5 |
|
Le groupe étant une interface, ce qui plus facile à en contrôler la validité d’un point de vue du code qu’une chaine de caractères.
Bean Validation 1.1
Les annotations de Bean Validation peuvent être aussi utilisées pour valider des paramètres d’une fonction, d’un constructeur, comme par exemple ici :
1
|
|
Mais il est aussi possible de demander de valider un objet, voire un graphe d’objets grâce à @Valid
:
1
|
|
Si l’on souhaite également valider la valeur retournée par une méthode, alors on ajoutera simplement l’annotation au niveau de la méthode elle-même.
Emmanuel Bernard vient à poser une question à l’assemblée. Doit-on valider les getters? La majorité de la salle vote “Non”, considérant ainsi que les getters sont de simples accesseurs à une propriété, et qu’ils ne doivent donc pas lever d’exception si par exemple le champ à retourner vaut null
. Le problème principal si l’on veut valider ces getters est que cela pourrait casser du code existant, car l’interprétation d’une violation peut être différente selon les frameworks.
Autre nouveauté de la version 1.1 est l’introduction des conversions de groupes. Sous ce titre un peu barbare se cache la fonctionnalité qui permet d’altérer un groupe de validation lors du cascading de validation, c’est-à-dire que potentiellement, certaines règles de validation pourront être activées en fonction de la valeur de certains champs. Par exemple, on peut disposer de 2 types de validation d’une adresse : une validation simple et une validation complète, le choix de la validation étant fait selon certains critères du contexte.
Bean Validation dispose également d’une meilleure intégration avec JAX-RS, JPA, CDI, etc. JAXB ne semble hélas pas faire partie du lot, les délais des JSR étant trop courts pour intégrer les nouveautés de la validation à JAXB.
Question timing, normalement, la release du JCP est prévue pour mi-mars. Hibernate Validator 5 alpha 1 vient de sortir, donc si vous souhaitez y jeter un oeil, allez-y !
Il est l’heure de la pause déjeuner, je n’assiste pas aux sessions de midi, la salle où je voulais aller étant pleine. Un petit détour par Code Story, puis viennent les Quickies. Le premier, c’est From Zero to JavaEE in 15 minutes, présentée par Koean Aers ainsi qu’un autre collègue de JBoss. La démonstration consiste à utiliser JBoss Forge pour générer une application JSF à partir uniquement d’un schéma de base de données. L’application reste bien entendu basique, essentiellement destinée à des opérations de CRUD. Je suis moyennement convaincu, certes ça marche, mais j’ai déjà vu un peu mieux comme solutions, tel que Celerio, voire même Play! (qui ne génère certes pas le code depuis la base - quoique - mais qui dispose de toutes les briques pour faire du CRUD facilement).
Le Quickie suivant était le mien, sur Hibernate Envers. Vous pouvez lire tout le détail dans un billet précédent.
Javascript unit testing and build integration<
Wouter Groeneveld nous parle des test en Javascript. A vrai dire, certaines parties m’ont rappelé ma session à Devoxx France, la mienne ayant toutefois été plus axée sur la partie industrialisation, avec l’intégration de Sonar dans l’analyse du code. Wouter va plus dans le détail, en montrant les forces et les faiblesses des solutions proposées.
Il part donc sur l’utilisation de Jasmine pour réaliser des tests du code Javascript, en montrant quelques exemples de code. Puis il en vient à la partie visuelle de son application. Comment la tester ? Tout d’abord, il opte pour Selenium, mais la relative lenteur et le besoin d’un navigateur sont des inconvénients assez importants dès que l’on a une grosse base de tests. Après avoir montré un runner spécifique, il parle de PhantomJS, un headless browser basé sur WebKit et offrant une API pour interagir avec le JavaScript. Du coup, plus besoin de “vrai” navigateur pour exécuter et tester son code JavaScript. Les tests s’exécutent très rapidement, le seul problème étant qu’aucun pont avec la JVM n’existe actuellement (les tests sont exécutés via Ant), et donc il n’y a pas vraiment d’intégration avec l’IDE ou un serveur d’intégration continue. Cela rend également le déboggage assez difficile.
Code but not as we know it - Infrastructure as code
Patrick Debois nous fait un état des lieux assez complet sur la gestion de la configuration, en parlant des principales solutions existantes aujourd’hui, à savoir :
Il faut cependant dire qu’il insistera avant tout sur les deux plus connus, Puppet et Chef. En guise d’introduction, un rappel de pourquoi ces solutions existent, ainsi que des principes élémentaires, comme par exemple l’idempotence, qui stipule que si je relance le même “code”, jalors e dois retrouver le même état à chaque fois. Ensuite, une explication rapide mais claire sur le langage utilisé par ces outils, ainsi que quelques notions importantes à savoir. Par exemple, Puppet utilise des manifests (fichiers .pp), et fait une compilation du catalogue avant son exécution, alors que Chef, qui utilise des recipes (fichiers .rb), va réaliser une exécution linéaire des scripts.
Ensuite, Patrick Debois nous parle d’outils, d’éditeurs, en nous citant quelques solutions :
- Lexers
- vi(m)
- Geppetto, un plugin Eclipse
- JetBrains Rubymine support for Puppet
Grâce à tout cela, ce domaine se rapproche de plus en plus à notre domaine de prédilection, le développement logiciel. On voit apparaitre des notions de règle de “codage”, de patterns ou d’anti-patterns, voire même de tests et de déboggage (bien que cela est encore très restreint). C’est un sujet qui ne tient bien évidemment pas en une heure, mais cette session a le mérite d’exposer clairement la situation actuelle en la matière. A approfondir !
Re-imagining the browser with AngularJS
La conférence sur AngularJS présentée par Igor Minar et Miško Hevery est, de l’avis d’une majorité des spectateurs, LA conférence qu’il fallait voir à Devoxx. Elle était quasi-parfaite sur tous les plans : 2 speakers excellents et parfaitement complémentaires, présentant un numéro sans faille, sur une technologie très attrayante. Bref, du 10/10.
Cette conférence m’a vraiment beaucoup plu, et je vais essayer de faire un billet spécifiquement sur elle d’ici quelques jours. En attendant, les slides sont visibles sur Internet, bien qu’une bonne partie de la présentation était une démo…
Progressing Parleys
Pour la dernière conférence de la journée, je choisis de m’intéresser à l’évolution de Parleys. Parleys.com est un site hébergeant de nombreuses vidéos liées à l’informatique, ainsi que toutes les sessions des Devoxx, et certains JUG (Java Users Group). Stephan Janssen l’a créé en 2006. Il est également le fondateur du JUG Belge (BeJUG), et, excusez du peu, fondateur également de Devoxx (Javapolis à l’origine). Bref, lors de cette session, Stephan Janssen, Jo Voordeckers et Benjamin Dobler, nous parlent de la prochaine version de Parleys, disponible au plus tard pour Devoxx France. La stack technique est intéressante, comme on peut le voir ici :
Et encore, cela ne semble pas tout, puisqu’ils utilisent également ElasticSearch… Le but final est de proposer une application plus riche, et moins limitée pour les solutions mobiles. En effet, le lecteur actuel étant basé sur Flash, il n’est ainsi pas compatible avec les iPhones ou les iPads. L’utilisation d’HTML 5 semble avoir été poussée loin, en particulier pour la partie d’édition des vidéos. L’autre objectif de cette nouvelle version de Parleys est justement de simplifier l’édition de ces vidéos, afin de les rendre accessibles le plus rapidement possible après leur enregistrement. Pour Devoxx France, il avait fallu attendre plusieurs semaines pour voir les vidéos des sessions disponibles sur Parleys. L’équipe veut ainsi réduire ce délai à seulement quelques jours ! En plus de cela, si j’ai bien compris, il est envisagé que les personnes regardant les vidéos puissent les éditer, par exemple s’il y a un décalage entre la vidéo et les slides diffusés en parallèle.
Une session intéressante, où le choix techniques sont bien expliqués, et qui donne envie d’avoir en main cette nouvelle version de Parleys !
La deuxième journée de Devoxx 2012 se termine sur cette session, avant d’aller voir Skyfall, le dernier James Bond, dont la diffusion nous était offerte par Devoxx (ainsi que les popcorns :) ). D’ailleurs, j’ai vraiment beaucoup aimé ce James Bond. Beaucoup de personnes sont allés ensuite à la soirée au NoX, une boite de nuit proche du Métropolis. J’ai fait mon petit joueur en retournant à l’hôtel vers 23h30, encore un peu fatigué de la veille…