Accueil > Java EE > Bol d’air à La Rochelle : retour sur le JUG Summer Camp 2012

Bol d’air à La Rochelle : retour sur le JUG Summer Camp 2012

JUG Summer Camp

Il y a quelques semaines, j’ai assisté pour la première fois au JUG Summer Camp de La Rochelle, pour sa troisième édition. Voici mes impressions.

Une ambiance chaleureuse

Ayant par le passé assisté à des conférences internationales comme les Sun Tech Days, j’en garde le souvenir d’une grand-messe avec des milliers de visiteurs, mettant en avant des produits et servant de vitrine commerciale aux principaux éditeurs du monde Java.

A La Rochelle, j’ai trouvé au contraire une conférence à taille humaine, ou quelques dizaines de développeurs passionnés venaient écouter et échanger sur les sujets qui leur tiennent à cœur. La nature même des conférences était très personnelle, animées par des développeurs exposant les choix et les problématiques qu’ils rencontrent dans le cadre de leur travail.

Après un accueil en forme d’échanges autour d’un petit déjeuner, la journée de conférences a commencé par une keynote d’ouverture animée par Nicolas de Loof, développeur breton leader du Breizh JUG. Reconnu comme un pitre notoire, il nous a gratifiés d’une bonne tranche de rire en passant en revue les différentes façons d’être un développeur en 2012, puis en pastichant l’émission phare des développeurs Java « Les Cast Codeurs » avec un jeu de marionnettes hilarant représentant les 4 développeurs animant l’émission. De quoi mettre à tout le monde la patate pour la journée !

Nicolas de Loof et ses "Cast Codeurs"

Pour le déjeuner, nous avons mangé tous ensemble, visiteurs et speakers, autour d’un buffet très bien garni. Les discussions étaient décontractées et sans prétention, entre personnes contentes d’échanger avec des semblables.

Des sessions vivantes

Suite à la keynote d’ouverture, l’assemblée s’est répartie dans les deux salles de conférence pour assister aux différentes sessions, toutes francophones. Dans chaque salle, se sont déroulées deux sessions d’une heure le matin, puis deux quickies (1/4h chacune) avant le déjeuner, puis à nouveau l’après-midi deux quickies suivis de quatre sessions.

Google, marchand de bonbons

Dans la première session à laquelle j’ai assisté (la seule à contenu promotionnel pour un des sponsors de la journée), deux employés de Google présentaient le potentiel des technologies développées chez Google.

Alexis Moussine-Pouchkine a montré comment faire du cloud avec Google App Engine en s’appuyant sur une application nommée « Candy Store » en référence au fameux « Pet Store » de Java EE, accessible pendant la conférence sur : http://jcandystore.appspot.com

L’application, utilisant JPA pour la persistance, JAX-RS et JSON, a été l’occasion d’exposer la puissance mise à disposition par l’App Engine :

  • il dispose à présent de plusieurs datacenters européens,
  • initialement doté d’une persistance NoSQL uniquement (le datastore), il est désormais enrichi de CloudSQL, une adaptation de MySQL,
  • une console disponible sur code.google.com permet de configurer nos besoins, notamment définir quelles applications accèdent à la base de données
  • possibilité d’avoir plusieurs versions en ligne, router une partie du trafic sur la nouvelle version (ou traffic splitting)
  • déboguer l’application directement sur un device Android (pour les tests sur Chrome)
  • possibilité d’enregistrer un device Android pour qu’il reçoive des notifications.

Alexis a d’ailleurs enregistré son propre téléphone et demandé à l’assistance de faire des commandes de bonbons sur le site, et on entendait son téléphone bipper plusieurs fois par minute !

Dans la seconde partie, Martin Görner a montré la panoplie d’effets visuels que permet HTML5, dans une présentation haute en couleurs intitulée « Hot summer picks from HTML5 » jouée comme un Powerpoint mais directement dans le navigateur (je vous laisse deviner lequel).

Il a ainsi égrené:

  • les différentes transitions et animations en CSS3,
  • les transformations 3D en CSS3,
  • le SVG,
  • WebGL, utilisé avec la couche d’abstraction THREE.js.

J’ai également appris l’existence d’une librairie Javascript, « Prefix Free« , qui permet de s’abstraire des préfixes CSS « -webkit », « -moz », « -ms », « -opera ». Il suffisait d’y penser !

Cette session Google s’est terminée par un quizz avec goodies et l’annonce d’un tirage au sort dans l’après-midi parmi ceux qui auront commandé des bonbons sur le Candy Store, pour gagner une place à Devoxx.

Realtime web applications and Play2

Nicolas Martignole nous a présenté dans cette session, à travers le site de l’agence de voyages en ligne ZapTravel qu’il développe depuis six mois, sa vision d’une programmation efficace et d’une architecture réactive.

Le site propose une approche originale avec une offre intégrée permettant de réserver en temps réel un avion, un hôtel, une voiture et des activités, en agrégeant les services de plateformes spécialisées.

Les défis techniques posées par ce genre d’offre sont nombreux :

  • l’enchaînement des prestations n’est pas toujours aisé : la possibilité de louer une voiture dépend de l’heure d’arrivée de l’avion
  • il faut pour chaque étape interroger plusieurs fournisseurs tout en gardant des temps de réponse corrects
  • le site doit être accessible avec tous les navigateurs, et tous les devices

Ceci l’a amené à faire les choix suivants :

  • un système non bloquant (NIO),
  • un modèle de programmation événementiel et réactif : la partie serveur notifie la thread qui répond au client,
  • un serveur sans état : la session existe pour identifier le client, mais l’état conversationnel n’y est pas conservé.

Le serveur est développé avec :

  • Play2, évolution du framework Play! réputé pour être extrêmement productif,
  • pour la persistance, une base NoSQL Redis (plus simple que MongoDB).

Play2 implique de développer en Scala, langage qu’il a appris et adopté en quelques semaines. Par rapport à la première version de Play!, Nicolas note que le développement est moins rapide, le typage devient fort. Il tourne très bien en production. Les nouveaux concepts de Iteratee et Enumerator permettent de manipuler efficacement les données.

Pour l’envoi de données au fil de l’eau au navigateur, Play2 permet de faire du streaming sur les navigateurs qui le supportent afin d’éviter le polling. Pour Internet Explorer, Play2 dégrade de lui-même en long polling.

Dans la foulée de cette session, Mathieu Ancelin a animé un quickie très vivant « Soon, in a galaxy not so far away » où il a présenté un jeu multi-joueurs de type « space war », développé avec Play2 et tirant parti du HTML5 (Canvas et transformations CSS3) . De nombreuses personnes de l’assistance se sont connectées au jeu pour un résultat assez impressionnant.

Tribulations d’un développeur Java dans le Cloud

Tugdual Grall a partagé dans ce quickie la façon dont il a développé un site personnel compilant des résultats de triathlon (http://www.resultri.com/), et les problèmes auxquels il a fait face.

Lorsqu’il a démarré son projet, en août 2011, désireux de mettre en place une solution de cloud il a choisi Google App Engine, qui était à ses yeux la meilleure solution disponible. Parmi ses critères, développant dans le train, il avait besoin de travailler en mode déconnecté.

Pour la persistance, il a choisi d’utiliser JDO car mieux documenté, puis basculé sur Datastore API pour la simplicité. Une limitation à l’époque, l’indexation Lucene de la persistance NoSQL ne permettait pas de recherche full text, ce qui l’a poussé à passer par CloudSQL pour avoir cette possibilité.

Une leçon qu’il a retenue de cette expérience est qu’il n’est pas évident de passer du relationnel à NoSQL. Quelques exemples de différences perturbantes :

  • la latence entre l’insertion et la disponibilité des données,
  • des restrictions surprenantes : pas de OU sur des colonnes différentes,
  • pour réduire la bande passante, il a utilisé Memcache, et s’est rendu compte qu’il faut penser différemment avec NoSQL, sans quoi le cache peut être très volumineux.

Enfin, l’utilisation gratuite de l’App Engine s’est avérée insuffisante, car le système de quotas implique que si on consomme le maximum de bande passante autorisée, le site n’est plus disponible pour le restant de la journée. Et avec la version payante, il a connu un autre problème : de la bande passante consommée tous les jours par GoogleBot lui a coûté un dépassement inattendu ! (problème résolu par l’ajout d’un fichier robots.txt).

La base de données Apache Cassandra

Sylvain Lebresne, qui contribue au développement de Cassandra comme employé de Datastax, a présenté cette base de données NoSQL dans un quickie.

Les caractéristiques les plus intéressantes de Cassandra sont :

  • une base de données distribuée et décentralisée (pas de master/slave contrairement à d’autres bases NoSQL),
  • la réplication avec le support d’architecture multi-datacenters,
  • scalable : elle est élastique, on peut ajouter dynamiquement des machines,
  • tolérantes aux pannes (pas de single-point-of-failure),
  • toujours disponible, performances solides.

Il est possible de configurer un mélange de réplication synchrone et asynchrone (ex: synchrone en Europe, asynchrone pour la mise à jour outre-Atlantique).

Cassandra possède des API temps réel (CQL) et analytiques (Hadoop Map-Reduce).

Quelques utilisations :

  • des données sociales : messages texte, commentaires, …
  • des activités, événements (time series), nouvelles, timelines, …

HTM5, Spring, NoSQL et mobilité

Julien Dubois a présenté dans cette session l’application sociale Tatami développée par Ippon Technologies, dont l’intégralité du code est disponible sur : http://github.com/ippontech/tatami

Cette application met en oeuvre HTML5 à l’aide des librairies Javascript Twitter Bootstrap, Backbone JS et jQuery. Ils ont utilisé les nouveaux types de champ (email, number), dont les navigateurs mobiles notamment savent tirer parti. Le SVG permet de présenter des graphiques vectoriels pilotés en Javascript (avec la solution JFreeChart). Le CSS3 et les Web Fonts donnent une grande liberté de rendu visuel.

En revanche, l’utilisation des Web sockets a montré que cette technologie est trop jeune :

  • le support des navigateurs est inégal,
  • les serveurs d’application en offre un support récent et non standard,
  • un mauvais support des proxys,
  • c’est compliqué à deboguer,
  • contesté au sein même de l’IETF (car basé sur HTTP).

Finalement Tatami recourt au long polling, et intégrera peut-être à terme Atmosphere.

Tatami utilise Spring 3.1 pour coordonner la partie serveur. Spring MVC a été choisi pour ses bonnes performances, ses faibles besoins en RAM. Combiné à Backbone JS, il permet une séparation entre le développement front et serveur.

La persistance est assurée par la base NoSQL Cassandra. Le choix de cette base est motivé par l’absence de single-point-of-failure (SPOF). Des inconvénients sont la difficulté à héberger, et la non-consistance des données (pas de gestion transactionnelle).

Pour la partie mobile, ils ont d’abord développé un site dédié, selon la recommandation de Jakob Nielsen. Pour ce faire ils ont eu recours à jQuery mobile et Spring Mobile. Mais cela a posé plusieurs problèmes :

  • version d’application mobile toujours en retard par rapport à celle du site web,
  • compliqué à maintenir et à tester,
  • faut-il faire une version pour tablette…

Finalement ils ont opté pour le responsive design, qui se révèle une approche beaucoup plus portable. Ce qui n’exempte pas de réfléchir, une tablette ne s’utilisant pas comme un ordinateur (ex : pas d’événement onmouseover sur une tablette !).

Big data avec Incanter et Clojure

Claude Falguière nous a présenté un langage DSL pour statisticiens nommé Incanter. Basé sur Clojure, le langage de script fonctionnel avec une syntaxe de type Lisp intégré à l’écosystème Java, Incanter permet de manipuler des matrices et des tables, d’extraire des statistiques, des diagrammes, d’établir des modèles, des tests d’hypothèses.

Un shell existe pour Incanter (REPL), et il est possible de créer un vrai projet tirant parti de l’infrastructure de Clojure : un système de build (lein), des repositories Maven (clojars, Sonatype), des tests unitaires (clojuretest, midge) et une intégration Eclipse avec CounterClockWise.

Pour le stockage des données, il y a une intégration avec MongoDB, avec la librairie Clojure CongoMongo. Claude nous a passé en revue la syntaxe du langage ainsi qu’un nombre impressionnant de directives utilisables, enfin les solutions pour produire des rapports HTML.

Programatoo : how your kid can code ?

Audrey Neveu et Ludovic Borie nous ont présenté dans une session très vivante une initiative de SFEIR pour démocratiser et diffuser l’apprentissage de la programmation aux enfants (voir le billet d’Eric).

Rentrer le sourire aux lèvres

Cette dernière session de la journée a achevé de me rendre enthousiaste et j’ai repris le train plein de bonnes résolutions. Et ma première action serait de montrer Scratch à mon fils de 4 ans. Et bien ça lui a vachement plu !

Ce JUG Summer Camp a vraiment été pour moi un bol d’air pur, qui donne d’autant plus envie de regarder de plus près ce qui se passe dans le monde, et d’aller voir ce genre de conférence de temps en temps.

Liens utiles

  1. Pas encore de commentaire
  1. Pas encore de trackbacks


quatre + 3 =