Conférences et présentations de l’équipe R&D du comparateur d’assurance LesFurets.com.
Titre : Continuous merge : réconcilier feature branching et continuous delivery
Abstract : Cette présentation offre des solutions tangibles au continuous delivery, qui couvrent le versionnement du code, la gestion des développements parallèles et le déploiement des artefacts. Ces solutions s’articulent autour du “continuous merge”, rendu possible grâce à l’outil open-source “git-octopus” développé chez LesFurets.com. Le continuous merge est une pratique issue de nos 2 années de daily delivery et nous permet de détecter en amont les problèmes de merge entre les branches et de les résoudre rapidement. Cette pratique nous permet de livrer en production tous les jours sans sacrifier de qualité et sans alourdir le processus de développement.
Title : Continuous merge : Reconciling feature branching and continuous delivery
Abstract : This presentation tackles the subject of continuous delivery with tangible solutions, that covers code versioning, handling of multiple parallel developments and deployment of artifacts. The concept of “continuous merge”, made possible by the open-source tool git-octopus developed at LesFurets.com, is the most important part of our continuous delivery process. Continuous merge is a process that emerged from 2 years of daily delivery and enables the early detection of merge problems between branches. It is therefore possible to push to production everyday without sacrificing quality and without adding a burden on our development process.
Abstract : Pour faire du traitement de données, les listes, tableaux et maps sont les structures de données les plus faciles à manipuler. Malheureusement la plupart des applications sont conçues autour d’un modèle métier. Chez LesFurets.com nous avons résolu ce problème en développant un KVM (Key Value Mapping). Ce framework est utilisé au cœur de l’application et cohabite avec le modèle métier. Grâce au mapping bidirectionnel de notre modèle métier vers un modèle clé-valeur, les manipulations de données deviennent extrêmement simples à réaliser. La mise en place de ce nouveau paradigme a nécessité un important refactoring de l’application et a permis de l’ouvrir à de nombreux outils actuels (Stream Java 8, RxJava, Spark, Cassandra)
Code source pour live code : https://github.com/lesfurets/lesfurets-conferences/tree/gh-pages/src/apache-spark
Abstract : Apache Spark propose une API Java comme langage principal, mais est-elle aussi puissante que l’API Scala ? Utilise-t-elle toutes les fonctionnalités du langage, comme les lambdas ? Comment intégrer Spark à nos outils de tests unitaires et à notre code base existante ? Nous allons donc plonger dans l’API Java de Spark avec des exemples et du live coding, en couvrant l’usage du cœur de Spark, la gestion des dépendances, les tests unitaires avec JUnit, le lancement à partir d’un IDE et l’intégration du code Spark avec notre code base Java existante. Depuis Spark 2.0, l’API DataFrame unifiée entre les langages rend Spark plus facile à utiliser et plus rapide à exécuter en Java, mais il existe pour l’instant peu de documentation sur des cas d’usages spécifiques, et plusieurs particularités de syntaxe rendent le code Scala difficile à convertir en Java. Les slides et le live coding vont présenter les bons et les mauvais moments que notre équipe de développement Java a rencontrés en utilisant Spark.
Apache Spark : Deep dive into the Java API for developers : Apache Spark proposes a Java API as a first class citizen, but is it as powerful as the Scala API? Does it use every feature of the language, such as lambdas? Does it integrate properly with our unit test tooling and existing Java code base? We will dive into the Spark Java API through examples and live coding from our code base, by covering the basic usage and dependency management, unit testing with JUnit, launching from an IDE and integrating Spark code with our existing Java code base. Since Spark version 2.0, the unified DataFrame API makes Spark easier to use and faster to execute in Java, but there is still little documentation on specific use cases, and many syntax quirks make Scala code difficult to convert to Java. The slides and live coding will present the good, the bad and the ugly moments our Java development team encountered while using Spark.
Code source pour live code : https://github.com/lesfurets/lesfurets-conferences/tree/gh-pages/src/jOOQ
Abstract : JOOQ et JOOλ sont des solutions open-source permettant d’intégrer proprement votre application Java avec votre base de données. Quoi de nouveau sous le soleil me diriez-vous ? Après tout la problématique de mapping objet-relationnel est au moins aussi vieille que la plateforme Java. Mais depuis Java 8, JOOQ permet d’utiliser l’API Stream du JDK avec le mapping objet-relationnel, ce qui, couplé avec JOOλ, a pour effet d’écrire des DAO plus simples et dans un paradigme fonctionnel. Au cours de ce tools in action nous allons vous présenter les avantages que nous pouvons tirer des frameworks JOOQ et JOOλ, par rapport à du JDBC pur sucre, JPA sans oublier Spring JDBC Template. Cerise sur le gâteau, nous vous indiquerons comment simplement introduire JOOQ et JOOλ dans votre code existant.
JOOQ and JOOλ : How to write clean code with your Data Access Object : JOOQ and JOOλ are open-source solutions for integrating your Java application cleanly with your database. So, what’s new? After all object-relational mapping is at least as old as the Java platform. But since Java 8, JOOQ allows us to use the Stream API with object-relational mapping, which, coupled with JOOλ, has the effect of writing simpler DAOs in a functional paradigm. During this session we will show you the advantages we can obtain with JOOQ and JOOλ frameworks, compared to pure JDBC, JPA and Spring JDBC Template. And for the icing on the cake, we will show you how to simply introduce JOOQ and JOOλ into your existing code.
Abstract : Depuis 2014 le site lesfurets.com a été mis en production 694 fois. Que ce passe-t-il lorsque deux équipes fusionnent en une seule sans casser le rythme de continuous delivery ? Nous vous partageons ici les différents petits pas d’amélioration continue que nous avons effectués lors de ce copieux retour d’expérience.
Abstract : Lorsque vous effectuez une recherche d’assurance sur LesFurets.com, nous interrogeons jusqu’à 40 partenaires pour offrir un maximum d’offres à nos clients. Pour collecter ces offres, nous utilisons des patterns à base de locks, threads et files d’attentes en mémoire pour orchestrer des services au sein de la JVM. Bien que matures, ces constructions sont de très bas niveau et sont sujettes à de nombreuses erreurs : il manque des abstractions pour aider à mettre en œuvre des politiques pour l’optimisation des ressources, la résilience et la performance. La programmation réactive propose une approche différente pour aborder ces problèmes de concurrence en permettant aux développeurs de décrire les opérations sur les flux de données. Dans cette présentation, nous comparons différents patterns pour appliquer une programmation réactive sur un composant critique de notre architecture. Nous donnons des exemples de différentes API telles que RxJava2, Reactive Streams (Java 9 Flow) et CompletableFutures pour implémenter une orchestration de services tout en garantissant la qualité de services pour les utilisateurs.
From Legacy to Reactive : When you search for insurance on LesFurets.com, we invoke up to 40 partners to present the best offers to our customers. To collect these offers, we use programming patterns based on locks, threads, and in-memory queues to orchestrate services within the Java platform. Although mature, these constructs are of very low level and are subject to many errors: They lack suitable abstractions to help implement policies for resource optimization, resilience and performance. Reactive programming offers an alternative approach for addressing concurrency issues by allowing developers to describe operations on data streams. In this presentation, we discuss how we transformed a legacy module of our code base, the service orchestrator, into a reactive component using Reactive Extensions for Java (RxJava). We explore various possibilities this reactivity provides us, such as responding to surging requests and optimizing resources, while we continue to guarantee the quality of service for our users.
Abstract en: At LesFurets.com, we use Jenkins as our workhorse to automate our continuous delivery pipeline. Each day we test more than 30 parallel developments and deliver only those which are ready for production. From validation to deployment, every step of the pipeline is coded using Jenkins Pipeline DSL and checked into our code base. Although coding pipelines using this DSL is very powerful, pipeline scripts can easily get pretty complex. That’s why we developed a testing framework, which lets you write unit tests on the configuration and conditional logic of the pipeline code. The framework mocks built-in Jenkins commands and job configurations, executing pipeline scripts in a simulated environment. It allows to debug job executions and even track regressions between changes. In this presentation we present our extensive usage of Jenkins, our open source testing framework and best practices we learnt during our migration to the pipeline DSL.
Abstract fr : Chez LesFurets.com, nous testons en continu plus de 30 développements parallèles et nous livrons ceux qui sont prêts pour la production. En avril 2016, Jenkins 2.0 a ouvert de multiples possibilités grâce aux pipelines qui permettent de décrire un job en groovy, depuis nous avons migré nos jobs de validation et de déploiement. Mais comment s’assurer qu’un job pipeline se comportera bien comme attendu ? Pour cela, nous avons mis en place un framework de tests afin de tracer l’exécution d’un pipeline. Il fournit un environnement avec des mocks de commandes internes de Jenkins et simule la configuration d’un job. On peut ainsi déboguer les exécutions et même suivre les régressions entre deux changements.
Nous présenterons un retour d’expérience de notre utilisation de Jenkins et notre framework de test open-source. Nous ferons aussi part des difficultés rencontrées lors de notre migration vers le pipeline DSL et comment nous nous en sommes sortis.
Abstract: Fluent, stream-like API’s are great for writing type checked code, taking advantage of Java 8 functions and lambdas. Perhaps the best example of such project is jOOQ, which creates a fluent Java DSL for SQL. But what about creating your own DSL to manipulate and validate your model? We created an open-source framework for generating validation DSLs from a domain model. This presentation will demonstrate the efficiency and expressiveness of this framework to define validation constraints. We will refactor complex legacy business rules during a live code session.
Alexandre DuBreuil is a french Canadian software developer living in France working as a Java Architect at LesFurets.com. He really likes to code, talk about code in meetups, user groups and conferences.
Alexandre DuBreuil est un développeur québécois vivant en France et travaillant comme architecte Java chez LesFurets.com. Il aime écrire du code, et parler de code lors de meetups, BBL et conférences.
Mathieu Gandin est tech-lead chez lesfurets.com. Depuis 16 ans, il développe des applications, travaille sur le Design de code, la transmission de pratiques de développement logiciel, l’implication de l’équipe sur le produit, et le refactoring de code existant.
Ingénieur docteur avec 5+ ans d’expérience dans les systèmes distribués, l’Internet des objets et les processus de développement logiciels. Chez LesFurets.com je m’intéresse à l’amélioration de la qualité et du pipeline de livraison de logiciel.
Ozan has a PhD in Computer Science, with over 5 years of experience in distributed systems, Internet of Things and software development processes. He joined LesFurets.com more than a year ago and he is interested in improving the quality and software delivery pipeline.
Il faut avoir bower pour mettre à jour reveal.js, tout est commité dans bower_components/reveal.js
et linké dans les présentations.
sudo install -g bower
Pour savoir s’il y a une nouvelle version de reveal.js
bower info reveal.js
Ensuite il faut mettre à jour le bower.json