Mon retour sur Devoxx France 2018

yannick grenzinger
10 min readMay 1, 2018

--

Bonjour à tous,

Déjà un grand merci à CARBON IT qui m’a offert cette place ainsi que 16 (!!) de mes collègues. Vous pouvez d’ailleurs lire le super retour d’Erwan.

Dans ce retour, je vous propose de vous faire un résumé de mes 3 jours de cette 7ème édition de Devoxx 2018. Pourquoi “mes” 3 jours ? Parce que la conférence est tout simplement devenu énorme depuis son arrivée au palais des congrès, plus de 200 conférences, presque 3000 participants par jour … autant dire que chacun va vivre sa propre expérience. J’ai même réussi à ne pas croiser des collègues !

Pour info, toutes les conférences sont dorénavant disponibles ici : https://www.youtube.com/playlist?list=PLTbQvx84FrARa9pUtZYK7t_UfyGMCPOBn

Les keynotes.

Les keynotes cette année c’était 6 sessions introduites en costume 18ème par Charles Sabourdin et Betty Moreau.

Ce fut une surtout une excellente conférence sur l’ordinateur quantique par David Rousset. Commençant par les limites de la technologie que nous utilisons car nous ne pouvons continuer à diminuer la taille des transistors (de l’ordre de quelques nanomètres) sans voir apparaître des phénomènes quantiques puis introduisant les principes contre intuitifs de la mécanique quantique comme la superposition, les principes d’incertitudes ou encore l’intrication quantique, David a expliqué le fonctionnement (les Qbits et leurs états), les avantages (calculs massivement parallèles permettant de résoudre des problèmes normalement inaccessibles) et leurs algorithmes. Il finit en nous proposant d’expérimenter sur Microsoft Q# ou Google Quantum Playground.

Les keynotes furent l’occasion de parler de la modernisation numérique de l’état. D’abord le jeudi, l’état de l’art avec la e-residence estonienne et l’entrepreneuriat sans frontières par Arnaud Castaignet. En 1991 l’Estonie reprend son indépendance et repart de rien. C’est la chance de recréer son administration de zéro et lui permet de partir sur un tout numérique. Au point de lancer la carte de e-Résidence fondée sur 3 éléments: confidentialité (carte + code Pin), disponibilité (accessible de n’importe où) + fiabilité (blockchain). Ainsi n’importe qui peut devenir e-résident et peut facilement créer une entreprise en Estonie. Ensuite le vendredi ce fut Emmanuel Pesenti qui est venu nous parler d’une volonté similaire avec la French Road http://french-road.fr/. Lui aussi nous présente les objectifs et les avantages d’une e-carte française mais malheureusement son discours est moins naturel et sonne beaucoup plus politique.

Olivier Sellès est venu nous parler de Smart building. Il a commencé par faire le constat que la construction de bâtiment est en crise: plus le temps passe, plus la productivité baisse. Au point que les bâtiments neufs sont concurrencés par les bâtiments Haussmanien (c’est comme si l’iPhone 10 était concurrencé par le 1). D’où le besoin de révolutionner le secteur avec ce qu’on nomme le “Smart Building” Pourquoi “smart” ? Parce qu’il peut devenir un outil facilitant la communication et la décision. Par exemple, ce sont des outils facilitant le fait de trouver une salle de réunion libre ou prévenir quand une ampoule va être en panne. L’objectif est aussi écologique et un moyen de mettre en oeuvre une économie positive. Cependant le smart building représente un réel enjeux sur la sécurité et les protocoles de ces technologies. Olivier finit sur la question : peut-on utiliser la force de la communauté (open source) ou va-t-on faire laisser les GAFAs gérer cette complexité.

Nous avons eu aussi :

Roberto Di Cosmo venu nous expliquer pourquoi et comment préserver le logiciel en tant que patrimoine de l’Humanité (les slides).

Richard Heidmann venu nous parler de l’homme sur Mars, les enjeux, les difficultés de la colonisation et la force des initiatives privés (surtout celle d’Elon Musk) comparées aux initiatives publiques.

Laure Némée nous a parlé de l’importance et de l’ampleur prise par l’économie collaborative et comment on peut agir sur notre environnement en soutenant des initiatives.

Le mercredi.

Le mercredi c’est principalement une journée de sessions longues. Il faut choisir 2 sessions entre des universités et des labs.

J’ai commencé par Speleo Reactor présenté par Simon Baslé. Les 30 premières minutes étaient un passage rapide sur les concepts de base (Publisher, Subscriber, Asynchronous Push Pull, Flux, Mono). On arrive rapidement sur des éléments moins connus. Par exemple, si les données circulent de haut en bas (comme on a l’habitude d’écrire du code), la souscription se propage dans le sens inverse en parcourant chaque opérateur jusqu’au générateur de données. En fait chaque opérateur décore l’opérateur précédent. Il faut donc toujours veiller à enchaîner les opérateurs dans un style « fluent ». Ensuite Simon Baslé a commencé à rentrer dans l’implémentation des opérateurs dans Spring Reactor (comme Map ou Concat) en expliquant les éléments de synchronisation et de fusion des opérateurs. J’avoue je n’ai pas accroché sur ces éléments trop “profonds” et je n’ai pas suivi la dernière heure. Mais c’est à voir pour ceux qui aimeraient comprendre l’implémentation du framework.

L’après midi, j’ai fait mon fanboy, je suis allé (re)voir Thomas Pierrain, Bruno Boucard et Jérémie Grodziski, organisateurs de #DDDReboot nous faire une très bien mené session mêlant refactoring de code legacy et DDD. Clairement une excellente présentation à voir une fois. Le seul défaut est que le format soit trop court face à l’ampleur de ses deux sujets.

Enfin j’ai fini par 2 tools in actions. D’abord JWT vs Macaroons par Julien Tanguy, très axé sur une démo de leur utilisation en Scala et malheureusement expliquant peu le pourquoi de ces deux technologies. Ensuite les bonnes pratiques de Java dans Docker de Charles Sabourdin et Jean-Christophe Sirot qui concerne surtout les éléments de gestion de la mémoire indispensable à connaître.

Le jeudi.

Les cookies HTTP par Hubert Sabloniere

Surement une de mes meilleurs conférences aussi bien sur la forme que le fond sur un sujet à la fois méconnu et connu de tous : les cookies. Les cookies sont inventés chez Netscape en 1994 par Lou Montulli (aussi inventeur de Lynx et du gif animé). Petite note intéressante le détenteur du brevet est maintenant Facebook. Mais c’est quoi un cookie http ? c’est tout simplement un protocole client — serveur qui permet de stocker un état côté client. Ce protocole permet de poser (Set-Cookie) un élément de texte (le plus souvent un identifiant) avec une durée limite (max-age) ou une date d’expiration (expire). Quand l’utilisateur retourne sur un site web, on envoie le cookie associé (re authentification). C’est ce mécanisme qui fait à la fois tout l’intérêt des cookies et aussi leur plus gros risque en terme de sécurité. Il faut donc falloir bien maîtriser la portée avec l’attribut domain (mais aussi Path) mais aussi forcer https et assurer la sécurité avec l’attribut Secure (on peut même encore aller plus loin avec Header HTS). Il faut aussi gérer les attaques de type CSRF pour éviter l’envoi des cookies sur un autre site (SameSite=Strict) ou de type XSS lié à l’api navigateur document.cookie en utilisant l’attribut HttpOnly. Hubert nous explique aussi comment les cookies sont utilisés dans le cadre du tracking. Le meilleur est que pour l’occasion il a créé 3 sites pour mettre en exemple tout ça http://cookies.rocks/ http://example-foo.com/ et http://example-bar.com/

L’après midi ce fut surtout un atelier nommé “pratiquer git au niveau supérieur” animé par Jérôme Tamborini, Thomas Collignon et Alexis Dmytryk. Une très bonne occasion de découvrir des outils avancés comme worktree, bisect, le reflog, apprendre à maîtriser le rebase interactive mais aussi les alias et les hooks.

Ce fut aussi l’occasion de voir :

Troubleshooting & Debugging Production Microservices in Kubernetes par Ray Tsang et Baruch Sadogursky.

Dans une forme assez vivante, la présentation a montré comment débugger une application sous Kubernetes. D’abord en utilisant les logs puis en isolant une instance et en la rendant accessible de votre machine locale mais aussi en utilisant le graphe de dépendance des services ou StackDriver permettant de déboguer pas à pas directement l’application tournant dans Kubernetes. Seul regret je m’attendais à plus d’information et dans un contexte moins associé à Google Cloud Platform. L’ensemble de la démo et des outils utilisés sont disponibles ici.

Effective Java, Third Edition: Keepin’ it Effective par Joshua Bloch.

Une très bonne conférence où Joshua distille ses conseils pour Java 8 tirés de la 3ème édition de son célèbre livre. Pour les lambdas, il faut obligatoirement utiliser les generics. Il faut que celles-ci soient explicites et comportant le minimum de lignes (une si possible). Il ne faut pas hésiter à utiliser l’extraction de méthode. L’utilisation des références de méthodes est aussi conseillé. Joshua nous conseille aussi d’être toujours pragmatique pour maintenir la lisibilité du code. Par exemple, il faut peut être mieux utiliser map(x -> x) que map(Function::identity). Avec les lambdas, on peut aussi convertir le classique pattern “patron de méthode” en Stratégie. La présentation finie sur les streams principalement en conseillant de savoir quand ne pas les utiliser ou encore quand activer le parallélisme car cela peut ralentir les performances.

Glowroot, l’APM qui vous veut du bien par Henri Gomez.

Un Aplication Performance Management est un outil de mesure des performances des applications dont l’indicateur principal est le Transaction par Seconde. Normalement très onéreux, Glowroot offre une alternative gratuite et Open Source sous la forme d’un agent Java pouvant fonctionner en mode standalone ou connecté avec un cout mémoire et cpu minime. L’idée d’un APM est de mesurer les performances à pleine puissance et de voir les points de contention et zone de ralentissement. Glowroot supporte ainsi beaucoup de pistes d’exécutions (bien sur les endpoints http et les requêtes SQL). Vous pouvez même définir des alertes lorsque des seuils sont dépassés. En mode connecté, un ensemble d’applications peuvent remonter leurs métriques dans Cassandra. (les slides ici)

Accélérez vos tests end-to-end avec Cypress par Rodolphe Bung.

Ma dernière session de la journée. Je n’ai pas pris beaucoup de notes mais la conférence était très bien menée et Cypress semble être un outil très intéressant pour les tests End to End dans un domaine dominé par Selenium. Cypress est un framework qui repart de zéro afin d’offrir une expérience développeur (et testeur) optimale et clairement la démo semble confirmer ce point. Quand on creuse, la force de l’outil est de s’exécuter dans le même contexte que l’application (l’event loop). Cela permet à Cypress de se synchroniser avec l’application. Autre élément très intéressant Cypress prend le contrôle des appels réseaux permettant ainsi de modifier ce qui rentre et sort du navigateur. Clairement une excellente découverte qui est peut être le graal du test UI E2E. (Le github ici)

Le vendredi.

Angular et performances par Cyril Balit et Wassim Chegham.

Une présentation complète et bien faite sur les optimisations liés à Angular qui se retrouvent à 3 niveaux:

  1. Compilation. Contrairement à AngularJS, il y a maintenant une phase de compilation qui permet d’avoir du code “VM friendly” (dynamic lookup et inline cache) appelé Ahead of Time compilation. Il faut rendre les attributs de composants visibles aux templates associés et éviter le type <any> dans Typescript. Il faut aussi mieux remplacer les imports comme import ‘rxjs’ par import { XXX } from ‘rxjs/operators’. Enfin il faut activer le mode production ( — prod avec angular cli ou enableProdMod()). Avec Angular CLI, on peut aussi activer facilement les sources map avec — sm. Dernière info, Webpack serait remplacer par Bazel dans les futures versions.
  2. Load time. La meilleure solution pour le temps de chargement c’est le rendu côté serveur avec Angular Universal mais attention cela contraint la façon dont on utilise les frameworks (par exemple il ne faut pas chercher à utiliser directement les APIs du navigateur et toujour passer par les libs Angular). Pour améliorer les performances côté navigateur, on peut mettre en place le chargement différé des modules.
  3. Runtime. C’est la qu’on trouve les éléments les plus techniques avec le tuning de la détection de changements (ChangeDetectionStrategy). Il faut alors faire attention à l’immutabilité et, pour les observables, utiliser ChangeDetectorRef. On peut aussi gérer certains comportements (comme le drag’n’drop) en dehors de la détection de changement (ZoneJS) pour gagner en performance.

Les améliorations du load time et runtime sont assez complexes et donc à mettre en oeuvre uniquement si le besoin est la.

La persistance sur Kubernetes par Florian Woerner.

Kubernetes un framework de gestion de système distribué. Si il est facile de gérer une application sans état sur Kubernetes, très rapidement on va être obligé de gérer un état. C’est à ce moment que la notion de volumes entre en jeu. Il y a plusieurs types de volumes principalement ceux liés à des fournisseurs de service cloud comme Google et les indépendants comme Ceph. Un standard a été créé pour exposer des volumes à des containers avec le Container Storage Interface supporté par Mesos, Cloud Foundry et Kubernetes. La présentation (entièrement disponible ici) met ensuite en démo deux scénarios d’utilisation des volumes : Persistent Volumes + Claims puis Dynamic Volumes.

Just one more thing with Spring in IntelliJ IDEA par Yann Cébron.

Une très bonne présentation à voir quand la video sera disponible qui permet de découvrir l’intégration impressionnante de Spring avec IntelliJ. Etant un utilisateur journalier d’IntelliJ, je n’ai, par contre, pas découvert grand chose.

Mes Applications en production sur Kubernetes par Michael Morello.

Un très bon retour d’expérience de l’utilisation de Kubernetes à la Caisse d’Assurance Maladie. La présentation est divisée en 3 thèmes : résilience, sécurité et observabilité. Yann y évoque les notions de Pod, de sécurité (Security Context Constraints avec OpenShift, Pod Security Policy, RBAC), de surveillance et de limitation de l’utilisation des ressources (en particulier avec Prometheus et Grafana), les notions importantes de santé des services (livenessProbe et readinessProbe) mais aussi des outils comme Horizontal Pod Autoscaler ou Pod Disruption Budget. Les sources de la démo associée sont disponibles ici.

Monitorer l’inconnu, 1000 * 100 series par jour par Clément Delafargue et Quentin Adam.

Comme d’habitude une très bonne présentation nous venant de CleverCloud qui commence par un rappel sur l’importance des métriques aussi bien pour les devs que les ops. Il existe deux façons principales de remonter les métriques en tirant les données avec un outil externe ou en poussant directement les données dans une base de données timeseries. Ils ont ensuite testé les timeseries les plus connus (bien sur InfluxDB et Prometheus) mais aucune n’a pu survivre aux besoins et à la charge de CleverCloud. Ils ont alors découvert Warp 10 (développé en France!) basé sur Java et LevelDB comme backend. En plus de ces performances, les point forts sont aussi l’accès par token (permettant un système d’authentification moderne) et un langage très efficace nommé WarpScript. (les slides ici)

Les photos de la conférence:

--

--

yannick grenzinger

Software gardener since 1999. Coach Craft & Flow @benextcompany Continuous learner passionate about Software, product, UX & psychology.