{"id":4648,"date":"2018-06-06T11:52:37","date_gmt":"2018-06-06T10:52:37","guid":{"rendered":"https:\/\/blog.fabianpiau.com\/?p=4648"},"modified":"2023-08-09T16:08:02","modified_gmt":"2023-08-09T15:08:02","slug":"devoxx-uk-day-2","status":"publish","type":"post","link":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/","title":{"rendered":"Devoxx UK 2018 &#8211; Jour 2"},"content":{"rendered":"<p><a class=\"lang\" href=\"https:\/\/blog.fabianpiau.com\/en\/2018\/06\/06\/devoxx-uk-day-2\/\" title=\"Read in english\"><strong class=\"labellang\"><span class=\"en\">&nbsp;<\/span>English version available<\/strong><\/a><\/p>\n<p>Cette ann\u00e9e, j&rsquo;ai assist\u00e9 aux 2 jours de la conf\u00e9rence <a href=\"https:\/\/www.devoxx.co.uk\/\" target=\"_blank\" title=\"Devoxx UK\" rel=\"noopener noreferrer\">Devoxx UK<\/a> \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des notes que j&rsquo;ai prises pendant le deuxi\u00e8me jour. Vous pouvez lire <a href=\"https:\/\/blog.fabianpiau.com\/fr\/2018\/05\/21\/devoxx-uk-day-1\/\" title=\"Devoxx UK 2018 - Day 1\">l&rsquo;article pr\u00e9c\u00e9dent \u00e0 propos du premier jour<\/a>. Et si vous souhaitez obtenir plus de d\u00e9tails sur un talk, vous pouvez regarder la vid\u00e9o associ\u00e9e.<\/p>\n<div style=\"max-width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00091\/devoxx-3.jpg?ssl=1\" rel=\"shadowbox[sbpost-4648];player=img;\" title=\"Devoxx UK a eu lieu au Business Design Centre \u00e0 Londres\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00091\/devoxx-3-thumbnail.jpg?resize=550%2C367&#038;ssl=1\" alt=\"Devoxx UK a eu lieu au Business Design Centre \u00e0 Londres\" title=\"Devoxx UK a eu lieu au Business Design Centre \u00e0 Londres\" width=\"550\" height=\"367\" class=\"size-medium wp-image-259\" \/><\/a><p class=\"wp-caption-text\">Devoxx UK a eu lieu au Business Design Centre \u00e0 Londres<\/p><\/div>\n<p><br clear=\"none\" \/><\/p>\n<h4>Deep Learning: The Future of Artificial Intelligence, avec Matthew Renze<\/h4>\n<p>Par le pass\u00e9, nous devions programmer un ordinateur de mani\u00e8re explicite, \u00e9tape par \u00e9tape, pour r\u00e9soudre un probl\u00e8me (impliquant des instructions if-then, des boucles et d&rsquo;autres op\u00e9rations logiques). A l&rsquo;avenir, les machines vont apprendre \u00e0 r\u00e9soudre un probl\u00e8me par elles-m\u00eames, nous devons juste leur fournir les donn\u00e9es.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Qu&rsquo;est ce que le Deep Learning?<\/strong><\/p>\n<p>Deep Learning (apprentissage en profondeur en bon fran\u00e7ais) est une forme d&rsquo;Intelligence Artificielle (IA) qui utilise un type de Machine Learning (ML) appel\u00e9 R\u00e9seau Neuronal Artificiel constitu\u00e9 de plusieurs couches cach\u00e9es pour tenter d&rsquo;apprendre les repr\u00e9sentations hi\u00e9rarchiques des donn\u00e9es sous-jacentes afin de faire des pr\u00e9dictions sur des donn\u00e9es nouvelles.<\/p>\n<p>L&rsquo;apprentissage automatique (ou Machine Learning) est essentiellement l&rsquo;utilisation des statistiques appliqu\u00e9es aux probl\u00e8mes de l&rsquo;intelligence artificielle. Nous enseignons aux machines la r\u00e9solution de probl\u00e8mes en identifiant des mod\u00e8les statistiques \u00e0 partir des donn\u00e9es.<\/p>\n<p>Utilisation de <strong>Donn\u00e9es<\/strong> (existantes) -> pour apprendre une <strong>Fonction<\/strong> -> afin d&rsquo;effectuer une <strong>Pr\u00e9diction<\/strong> (sur des nouvelles donn\u00e9es)<\/p>\n<p>Un r\u00e9seau de neurones est un algorithme ML bas\u00e9 sur une approximation tr\u00e8s grossi\u00e8re de la fa\u00e7on dont nous pensons que le cerveau et les neurones fonctionnent (le cerveau est toujours une bo\u00eete noire pour les scientifiques).<\/p>\n<p>Un neurone artificiel prend un ensemble d&rsquo;entr\u00e9es, applique une fonction pour produire un ensemble de sorties. Nous repr\u00e9sentons ce neurone math\u00e9matiquement (c&rsquo;est-\u00e0-dire que les entr\u00e9es et les sorties sont des nombres) dans le but de l&rsquo;utiliser dans un mod\u00e8le de calcul.<\/p>\n<p>Un r\u00e9seau de neurones est compos\u00e9 de plusieurs neurones organis\u00e9s en diff\u00e9rentes couches: la couche d&rsquo;entr\u00e9e (les donn\u00e9es que nous fournissons), 1 ou plusieurs couches cach\u00e9es et la couche de sortie (la pr\u00e9diction). Un r\u00e9seau neuronal profond (deep neural network) a plus d&rsquo;une couche cach\u00e9e. L&rsquo;utilisation de plus d&rsquo;une couche cach\u00e9e permet principalement de mod\u00e9liser une fonction beaucoup plus complexe qu&rsquo;avec une simple couche.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Un exemple de Deep Learning<\/strong><\/p>\n<p>Un exemple de r\u00e9seau neuronal profond est un mod\u00e8le de reconnaissance de personne bas\u00e9 sur une image. Les couches cach\u00e9es inf\u00e9rieures repr\u00e9sentent des formes abstraites comme les primitives g\u00e9om\u00e9triques (par exemple, les lignes horizontales et verticales) tandis que les couches interm\u00e9diaires repr\u00e9sentent des entit\u00e9s plus complexes comme des parties sp\u00e9cifiques du corps (bouche, nez, oeil, etc.), le visage est repr\u00e9sent\u00e9 dans les couches cach\u00e9es les plus hautes, pour \u00eatre en mesure d&rsquo;identifier la personne. La pr\u00e9cision augmente lorsque nous approchons de la derni\u00e8re couche pour finalement \u00eatre en mesure de faire une pr\u00e9diction.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Pourquoi parlons-nous de Deep Learning seulement maintenant?<\/strong><\/p>\n<p>Apr\u00e8s tout, le <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Perceptron\" target=\"_blank\" title=\"Perceptron sur Wikipedia\" rel=\"noopener noreferrer\">premier algorithme ML Perceptron<\/a> a \u00e9t\u00e9 cr\u00e9\u00e9 en 1957, il y a plus de 60 ans!<\/p>\n<ul>\n<li>Nous vivons \u00e0 l&rsquo;\u00e8re du Big Data. Au cours des deux derni\u00e8res ann\u00e9es, nous avons cr\u00e9\u00e9 plus de donn\u00e9es que pendant toute l&rsquo;histoire humaine. Nous n&rsquo;avons jamais eu autant de donn\u00e9es disponibles, ces donn\u00e9es sont essentielles pour entra\u00eener des mod\u00e8les complexes.<\/li>\n<li>Les ordinateurs n&rsquo;ont jamais \u00e9t\u00e9 aussi puissants: des processeurs plus rapides, plus de m\u00e9moire, des disques SSD. Nous pouvons aussi tirer parti de la puissance de calcul des GPU, les op\u00e9rations matricielles sont n\u00e9cessaires pour les graphismes des jeux vid\u00e9o, mais aussi pour le ML. Nous avons \u00e9galement acc\u00e8s \u00e0 des technologies de calcul distribu\u00e9 o\u00f9 nous pouvons partager le traitement de donn\u00e9es entre plusieurs machines.<\/li>\n<\/ul>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Que pouvons-nous faire avec le Machine Learning?<\/strong><\/p>\n<ul>\n<li>Classification. Nous voulons pr\u00e9dire une variable discr\u00e8te qui ne peut prendre qu&rsquo;un certain nombre de valeurs. Est-ce un chat ou un chien? Cet email est-il un spam ou non? Est-ce que cette personne a un cancer ou pas? Quelle est la cat\u00e9gorie de cet article?<\/li>\n<li>R\u00e9gression. Nous voulons pr\u00e9dire une variable continue qui a un nombre infini de valeurs possibles. A quel prix devrais-je vendre cette maison? Quel est le niveau de risque cr\u00e9dit pour ce demandeur?<\/li>\n<li>G\u00e9n\u00e9ration de texte. G\u00e9n\u00e9rer le titre d&rsquo;un article, la description d&rsquo;une image en fonction de son contenu, convertir la voix en texte pour du sous-titrage automatique.<\/li>\n<li>G\u00e9n\u00e9ration d&rsquo;image. Simuler le vieillissement du visage, <a href=\"https:\/\/www.youtube.com\/watch?v=IuygOYZ1Ngo\" target=\"_blank\" title=\"The Next Rembrandt\" rel=\"nobox noopener noreferrer\">peindre un nouveau Rembrandt<\/a> que m\u00eame un expert ne pourrait pas identifier comme un faux, <a href=\"https:\/\/www.nytimes.com\/interactive\/2018\/01\/02\/technology\/ai-generated-photos.html\" target=\"_blank\" title=\"How an A.I. \u2018Cat-and-Mouse Game\u2019\nGenerates Believable Fake Photos\" rel=\"noopener noreferrer\">cr\u00e9er des c\u00e9l\u00e9brit\u00e9s<\/a> qui semblent famili\u00e8res, mais qui n&rsquo;existent pas, <a href=\"https:\/\/github.com\/hanzhanggit\/StackGAN\" target=\"_blank\" title=\"StackGAN: Text to Photo-realistic Image Synthesis\" rel=\"noopener noreferrer\">cr\u00e9er une image bas\u00e9e sur une description textuelle<\/a>.<\/li>\n<li>G\u00e9n\u00e9ration audio. <a href=\"https:\/\/www.youtube.com\/watch?v=D5VN56jQMWM\" target=\"_blank\" title=\"Google Duplex: A.I. Assistant Calls Local Businesses To Make Appointments\" rel=\"nobox noopener noreferrer\">Mettre en relation un algorithme et un humain<\/a> lors d&rsquo;un appel t\u00e9l\u00e9phonique (Google Duplex), <a href=\"https:\/\/www.youtube.com\/watch?v=I3l4XLZ59iw\" target=\"_blank\" title=\"#VoCo. Adobe MAX 2016 (Sneak Peeks) | Adobe Creative Cloud\" rel=\"nobox noopener noreferrer\">\u00e9diter votre voix<\/a> en fonction d&rsquo;un texte pour \u00e9viter de refaire un enregistrement dans le cas d&rsquo;une erreur dans votre speech.<\/li>\n<li>G\u00e9n\u00e9ration de vid\u00e9os. Bas\u00e9 sur des rushes de vid\u00e9os et d&rsquo;audios de Barack Obama, cr\u00e9er une <a href=\"https:\/\/www.youtube.com\/watch?v=9Yq67CjDqvw\" target=\"_blank\" title=\"Synthesizing Obama: Learning Lip Sync from Audio\" rel=\"nobox noopener noreferrer\">nouvelle vid\u00e9o avec une synchronisation labiale g\u00e9r\u00e9e par l&rsquo;IA<\/a>.<\/li>\n<\/ul>\n<p>Si vous avez examin\u00e9 plus en d\u00e9tail certains des exemples ci-dessus, vous avez probablement eu du mal \u00e0 faire la diff\u00e9rence entre un contenu r\u00e9el et un contenu g\u00e9n\u00e9r\u00e9 par ordinateur. C&rsquo;est assez effrayant quand on y pense et on peut \u00e0 peine imaginer comment \u00e7a sera dans 10 ans!<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Comment puis-je commencer si je veux faire du ML dans mon entreprise?<\/strong><\/p>\n<p><strong>Option 1 &#8211; Deep Learning as a Service<\/strong> (Google Cloud, AWS, Microsoft Cognitives, IBM Watson&#8230;)<br \/>\nCela implique qu&rsquo;une soci\u00e9t\u00e9 tierce poss\u00e8de le mod\u00e8le et les donn\u00e9es. Vous pouvez interroger leur API avec vos nouvelles donn\u00e9es afin de faire une pr\u00e9diction.<br \/>\nCette option est utile pour les cas d&rsquo;utilisation restreints, si vous ne souhaitez pas r\u00e9inventer la roue et utiliser un mod\u00e8le d\u00e9j\u00e0 entrain\u00e9.<br \/>\nPour: Simple, rapide, peu co\u00fbteux<br \/>\nContre: Restriction sur les usages, \u00e9loign\u00e9 (par exemple, vous n&rsquo;\u00eates pas prot\u00e9g\u00e9 contre les pannes de r\u00e9seau ou la latence), paiement \u00e0 l&rsquo;usage (si votre utilisation augmente, le co\u00fbt \u00e9galement)<\/p>\n<p><strong>Option 2 &#8211; Deep Learning platform<\/strong> (Microsoft Azure, Cognitive Services&#8230;)<br \/>\nCette option est utile pour les cas d&rsquo;utilisation personnalis\u00e9s. Vous uploadez vos donn\u00e9es pour entra\u00eener le mod\u00e8le (transfert d&rsquo;apprentissage), puis vous pouvez interroger une API pour obtenir vos pr\u00e9visions.<br \/>\nPour: Simple, rapide, peu co\u00fbteux<br \/>\nContre: Vous avez besoin de donn\u00e9es d&rsquo;entra\u00eenement pour entra\u00eener votre mod\u00e8le, \u00e9loign\u00e9, paiement \u00e0 l&rsquo;usage (par transaction pour la pr\u00e9diction, mais aussi les transactions li\u00e9es \u00e0 l&rsquo;entra\u00eenement)<\/p>\n<p><strong>Option 3 &#8211; Do it yourself<\/strong> (TensorFlow, Torch&#8230;)<br \/>\nA utiliser si les options 1 et 2 ne suffisent pas. Vous cr\u00e9ez votre propre algorithme \u00e0 partir de z\u00e9ro, fournissez les donn\u00e9es et vous l&rsquo;h\u00e9bergez vous-m\u00eame.<br \/>\nPour: Personnalis\u00e9 (vous pouvez optimiser et tuner le mod\u00e8le comme vous l&rsquo;entendez), local, priv\u00e9 (au cas o\u00f9 vous avez affaire \u00e0 des donn\u00e9es sensibles)<br \/>\nContre: Complexe, pas mal de travail, cher<\/p>\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"550\" height=\"310\" src=\"https:\/\/www.youtube.com\/embed\/AktmFvRVPsI?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<p><br clear=\"none\" \/><\/p>\n<h4>Teaching kids about machine learning, avec Dale Lane<\/h4>\n<p>Dale a cr\u00e9\u00e9 <a href=\"https:\/\/machinelearningforkids.co.uk\/\" target=\"_blank\" title=\"Machine Learning for Kids\" rel=\"noopener noreferrer\">un site Web pour enseigner le Machine Learning aux enfants<\/a> en utilisant la plate-forme de programmation visuelle <a href=\"https:\/\/scratch.mit.edu\/\" target=\"_blank\" title=\"Scratch - Imagine, Program, Share\" rel=\"noopener noreferrer\">Scratch<\/a>. Scratch est un moyen d&rsquo;aborder la programmation pour les enfants avec une interface simple o\u00f9 vous pouvez glisser\/d\u00e9poser des blocs repr\u00e9sentant des op\u00e9rations de programmation (boucles, d\u00e9clarations if-then&#8230;) et les assembler pour cr\u00e9er une logique plus avanc\u00e9e. Dale utilise <a href=\"https:\/\/en.scratch-wiki.info\/wiki\/ScratchX\" target=\"_blank\" title=\"Experimental Extensions to Scratch!\" rel=\"noopener noreferrer\">ScratchX<\/a> (extensions exp\u00e9rimentales pour Scratch) et a cr\u00e9\u00e9 de nouveaux blocs li\u00e9s au Machine Learning (en utilisant IBM Watson sous le capot).<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p>Il a imagin\u00e9 de nombreux exercices pour que les enfants puissent appr\u00e9hender les diff\u00e9rents concepts de ML en utilisant des exemples concrets et amusants. Les exercices m\u00e9langent la reconnaissance de texte, de nombre et d&rsquo;image. Chaque exercice est g\u00e9n\u00e9ralement compos\u00e9 d&rsquo;une phase d&rsquo;entra\u00eenement du mod\u00e8le depuis l&rsquo;application web et d&rsquo;une phase d&rsquo;\u00e9valuation avec la pr\u00e9diction visualisable depuis Scratch. Vous pouvez \u00e9galement affiner les donn\u00e9es d&rsquo;entra\u00eenement et voir les effets sur le mod\u00e8le et sa pr\u00e9diction.<\/p>\n<ul>\n<li>Cr\u00e9er un chatbot, par ex. un animal capable de r\u00e9pondre \u00e0 des questions sur son esp\u00e8ce.<\/li>\n<li>Pr\u00e9dire \u00e0 partir de quel journal un article a \u00e9t\u00e9 extrait en utilisant son titre.<\/li>\n<li>Faire en sorte que Pacman \u00e9vite les fant\u00f4mes en jouant plusieurs fois au jeu. Plus vous jouez et entra\u00eenez le mod\u00e8le, plus Pacman sera bon.<\/li>\n<li>Cat\u00e9goriser des images. Uploader des images de tasses et de voitures pour entra\u00eener le mod\u00e8le, de sorte qu&rsquo;il puisse classer une nouvelle image encore inconnue dans une de ces 2 cat\u00e9gories. Uploader des images de couverture de livres pour diff\u00e9rentes cat\u00e9gories (science-fiction, romance, thriller&#8230;), de sorte que le mod\u00e8le puisse pr\u00e9dire la cat\u00e9gorie d&rsquo;une nouvelle couverture. Pour rendre l&rsquo;exercice plus interactif, vous pouvez \u00e9galement uploader des images \u00e0 partir de la webcam, par exemple prendre des photos de votre main pour le jeu pierre \/ papier \/ ciseaux et jouer contre l&rsquo;ordinateur. L&rsquo;algorithme reconna\u00eetra la forme que vous faites avec vos mains si vous l&rsquo;entra\u00eenez suffisamment.<\/li>\n<li>Reconna\u00eetre un code postal \u00e9crit \u00e0 la main pour savoir dans quelle ville le courrier doit \u00eatre livr\u00e9, un bon exemple tir\u00e9 de la vraie vie.<\/li>\n<li>Jouer au jeu \u00ab\u00a0O\u00f9 est Charlie?\u00a0\u00bb. L&rsquo;ordinateur d\u00e9tecte automatiquement o\u00f9 Scratch le chat est situ\u00e9 dans une image.<\/li>\n<li>Et beaucoup d&rsquo;autres exercices.<\/li>\n<\/ul>\n<p><br clear=\"none\" \/><\/p>\n<p>Dale a \u00e9galement mentionn\u00e9 les probl\u00e8mes li\u00e9s \u00e0 l&rsquo;IA:<\/p>\n<ul>\n<li>Les probl\u00e8mes avec l&rsquo;arri\u00e8re-plan ou les conditions m\u00e9t\u00e9orologiques. Si c&rsquo;est \u00e9vident pour un humain, un ordinateur peut commettre des erreurs idiotes si le jeu de donn\u00e9es d&rsquo;entra\u00eenement est incomplet.<\/li>\n<li>L&rsquo;histoire des chars russes o\u00f9 le mod\u00e8le a \u00e9t\u00e9 entra\u00een\u00e9 avec des images haute r\u00e9solution pour les chars am\u00e9ricains, mais avec des images basse r\u00e9solution et floues pour les chars russes. Dans la r\u00e9alit\u00e9, le mod\u00e8le s&rsquo;est av\u00e9r\u00e9 \u00eatre mauvais pour identifier les chars.<\/li>\n<li>Google photo peut ajouter automatiquement un texte pour d\u00e9crire une image, certaines personnes noires se sont vu \u00eatre qualifi\u00e9 de gorilles&#8230;<\/li>\n<li>Un mod\u00e8le qui peut conseiller des m\u00e9dicaments, mais qui est sponsoris\u00e9 par un g\u00e9ant pharmaceutique. Que se passe-t-il si l&rsquo;entreprise demande d&rsquo;ajouter plus de r\u00e9f\u00e9rences de son produit phare dans le jeu d&rsquo;entra\u00eenement, est-ce une bonne chose?<\/li>\n<\/ul>\n<ul>\n<p>Il y a beaucoup de notions importantes autour de l&rsquo;\u00e9thique, des pr\u00e9jug\u00e9s, du surajustement (overfitting) des mod\u00e8les et de la qualit\u00e9 du jeu d&rsquo;entra\u00eenement. Il est important que les enfants comprennent cela par eux-m\u00eames, et habituellement c&rsquo;est le cas!<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p>A la fin, Dale nous a donn\u00e9 quelques liens pour aller plus loin:<\/p>\n<ul>\n<li><a href=\"https:\/\/machinelearningforkids.co.uk\" target=\"_blank\" title=\"Machine Learning for Kids\" rel=\"noopener noreferrer\">Machine Learning for Kids<\/a> le site de Dale o\u00f9 vous pouvez trouver tous ses exercices.<\/li>\n<li><a href=\"https:\/\/teachablemachine.withgoogle.com\" target=\"_blank\" title=\"Teachable Machine from Google\" rel=\"noopener noreferrer\">Teachable Machine from Google<\/a> pour entra\u00eener un mod\u00e8le avec votre webcam.<\/li>\n<li><a href=\"https:\/\/quickdraw.withgoogle.com\" target=\"_blank\" title=\"Quick, Draw! from Google\" rel=\"noopener noreferrer\">Quick, Draw! from Google<\/a> pour reconna\u00eetre un dessin.<\/li>\n<li><a href=\"https:\/\/www.moralmachine.net\/\" target=\"_blank\" title=\"Moral Machine - MIT\" rel=\"noopener noreferrer\">Moral Machine from MIT<\/a> pour juger diff\u00e9rentes situations impliquant une voiture autonome.<\/li>\n<\/ul>\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"550\" height=\"310\" src=\"https:\/\/www.youtube.com\/embed\/h2KqwwfKOuY?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<p><br clear=\"none\" \/><\/p>\n<h4>Easy Microservices with JHipster, avec Sendil Kumar N<\/h4>\n<p>Cette pr\u00e9sentation \u00e9tait une session de live-coding. J&rsquo;ai entendu parler de <a href=\"https:\/\/www.jhipster.tech\/\" target=\"_blank\" title=\"JHipster, Generate your Spring Boot + Angular\/React applications!\" rel=\"noopener noreferrer\">JHipster<\/a> depuis pas mal de temps, mais je n&rsquo;ai jamais eu l&rsquo;occasion de le voir en action et le fait que le projet ait \u00e9t\u00e9 initi\u00e9 par un d\u00e9veloppeur fran\u00e7ais \u00e9tait une autre raison d&rsquo;y aller.<\/p>\n<p>JHipster acc\u00e9l\u00e8re la cr\u00e9ation de nouvelles applications en g\u00e9n\u00e9rant le code boilerplate et en g\u00e9rant la majeure partie de la configuration (par exemple la configuration des fichiers Kubernetes, des POM Maven, etc.). Il s&rsquo;agit d&rsquo;un outil en ligne de commande avec lequel vous pouvez choisir de cr\u00e9er une application de type monolithe, un microservice ou un UAA (User Accounting and Authorizing service pour s\u00e9curiser votre app avec OAuth2). Une fois que vous avez choisi votre type d&rsquo;application, beaucoup d&rsquo;options s&rsquo;offrent \u00e0 vous pour la stack technique: frontend, backend, source de donn\u00e9es, build, logging, d\u00e9ploiement CI\/CD, registre de service, documentation (par exemple <a href=\"https:\/\/blog.fabianpiau.com\/fr\/2017\/03\/01\/swagger-automated-api-documentation\/\" title=\" Swagger, la documentation API automatis\u00e9e \">Swagger<\/a>) sans oublier les frameworks de tests.<\/p>\n<p>Pour la d\u00e9mo, Sendil a cr\u00e9\u00e9 une application Gateway qui interrogeait un microservice. Il a ex\u00e9cut\u00e9 l&rsquo;application localement et l&rsquo;a ensuite d\u00e9ploy\u00e9 sur Google Cloud Platform (GCP) via Kubernetes, sans avoir \u00e0 taper une seule ligne de code.<\/p>\n<p>Choisir les frameworks et les technologies sera probablement la partie la plus difficile, car il y a tellement d&rsquo;options. Vous devez \u00e9galement garder \u00e0 l&rsquo;esprit que vous devez affiner la configuration (par exemple, la configuration par d\u00e9faut qu&rsquo;ils fournissent pour Kubernetes peut ne pas convenir \u00e0 vos besoins).<\/p>\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"550\" height=\"310\" src=\"https:\/\/www.youtube.com\/embed\/zW4GOiZUKuE?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<p><br clear=\"none\" \/><\/p>\n<h4>Troubleshooting &#038; Debugging Production Microservices in Kubernetes, avec Ray Tsang<\/h4>\n<p>Ray nous montre une petite application de livre d&rsquo;or o\u00f9 un utilisateur peut poster un message avec un nom (\u00ab\u00a0Guestbook service\u00a0\u00bb) et recevoir \u00e9galement des salutations apr\u00e8s avoir post\u00e9 son message (\u00ab\u00a0Hello service\u00a0\u00bb). Il s&rsquo;agit d&rsquo;une application Spring Boot d\u00e9ploy\u00e9e sur Kubernetes, compos\u00e9e d&rsquo;une interface utilisateur et de 2 microservices (chacun a plusieurs instances). Une page d&rsquo;erreur 500 appara\u00eet quand il essaye d&rsquo;y acc\u00e9der en indiquant <code>null<\/code> et 404. Cette fois, ce n&rsquo;\u00e9tait pas un effet d\u00e9mo o\u00f9 la loi de Murphy en action et cela faisait bien partie de la pr\u00e9sentation. Il a donc continu\u00e9 pour d\u00e9bugger l&rsquo;application et r\u00e9soudre le probl\u00e8me \u00e9tape par \u00e9tape en utilisant <a href=\"https:\/\/cloud.google.com\/products\/\" target=\"_blank\" title=\"Products and Services provided by Google Cloud\" rel=\"noopener noreferrer\">diff\u00e9rents outils fournis par Google Cloud Platform<\/a>.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p>En consultant les logs, il a pu identifier 2 instances du service g\u00e9rant l&rsquo;interface utilisateur qui avaient beaucoup d&rsquo;erreurs par rapport aux autres instances. Kill\/restart n&rsquo;est pas la solution, car elle n&#8217;emp\u00eachera pas l&rsquo;erreur de se reproduire. Il a donc d\u00e9cid\u00e9 de sortir l&rsquo;une des instances d\u00e9fectueuses du load balancer avec une commande <code>kubectl<\/code> (une interface en ligne de commande pour ex\u00e9cuter des commandes sur les clusters Kubernetes) en changeant le flag <code>serving<\/code> \u00e0 false. L&rsquo;id\u00e9e est d&rsquo;isoler l&rsquo;instance du trafic de production et d&rsquo;\u00eatre libre de la d\u00e9boguer. Notez qu&rsquo;en d\u00e9sactivant cette instance, Kubernetes cr\u00e9e automatiquement une autre instance du service. Ensuite, il a configur\u00e9 la redirection de port sur ce pod pour pouvoir interroger cette instance sp\u00e9cifique depuis son environnement local. Avec Stackdriver Trace, il \u00e9tait capable de tracer les appels et identifier la pile d&rsquo;appel. Filtrant sur les erreurs 5xx et cette instance particuli\u00e8re, il a alors r\u00e9alis\u00e9 qu&rsquo;un probl\u00e8me survenait au niveau du service \u00ab\u00a0Hello service\u00a0\u00bb et plus pr\u00e9cis\u00e9ment quand l&rsquo;endpoint \u00ab\u00a0hello\u00a0\u00bb est appel\u00e9, dans certains cas, une r\u00e9ponse 404 est retourn\u00e9e. Cela semblait \u00eatre le cas lorsque le nom \u00e9tait manquant. Pour confirmer le comportement, il a ajout\u00e9 quelques lignes de logs \u00e0 la vol\u00e9e pour afficher le nom et, en effet, celui-ci \u00e9tait vide et l&rsquo;application affichait l&rsquo;erreur. En fait, une validation manquait sur le formulaire pour rendre le nom obligatoire.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p>Pour r\u00e9capituler, nous pouvons mentionner <a href=\"https:\/\/cloud.google.com\/products\/operations\" target=\"_blank\" title=\"Monitoring, logging, and diagnostics for applications on Cloud Platform and AWS\" rel=\"noopener noreferrer\">les 4 principaux outils de d\u00e9bogage fournis avec GCP<\/a>:<\/p>\n<ul>\n<li>Interroger et consulter les logs avec Stackdriver Logging (un outil similaire \u00e0 Splunk)<\/li>\n<li>Tracer la pile d&rsquo;appels avec Stackdriver Trace (un outil similaire \u00e0 Zipkin)<\/li>\n<li>Ajouter des logs et des breakpoints \u00e0 la vol\u00e9e sur une instance en prod avec Stackdriver Debug<\/li>\n<li>Acc\u00e9der \u00e0 l&rsquo;historique des erreurs http depuis les logs ainsi que diverses m\u00e9triques sur les services (temps de r\u00e9ponse&#8230;) avec Stackdriver Monitoring<\/li>\n<\/ul>\n<p><br clear=\"none\" \/><\/p>\n<p>La pr\u00e9sentation fut int\u00e9ressante, mais je peux juste regretter que le titre ne mentionnait pas le fait que la d\u00e9mo se basait principalement les outils commerciaux de Google Cloud, je pensais qu&rsquo;elle serait plus centr\u00e9e sur Kubernetes. Mais cela vaut quand m\u00eame la peine de savoir ce que Google fournit. Et je dois admettre qu&rsquo;ajouter des breakpoints et des logs dans le code d&rsquo;une instance en prod \u00e0 partir d&rsquo;une interface web \u00e9tait assez impressionnant.<\/p>\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"550\" height=\"310\" src=\"https:\/\/www.youtube.com\/embed\/59yCUlQAe-s?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<p><br clear=\"none\" \/><\/p>\n<h4>Fully serverless, a case study, avec Stephen Colebourne &#038; Chris Kent<\/h4>\n<p>A OpenGamma, ils ont cr\u00e9\u00e9 une nouvelle plate-forme financi\u00e8re bas\u00e9e sur AWS et d\u00e9cid\u00e9 d&rsquo;utiliser les technologies serverless (<a href=\"https:\/\/aws.amazon.com\/lambda\/\" target=\"_blank\" title=\"AWS Lambda\" rel=\"noopener noreferrer\">AWS Lambda<\/a>).<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Qu&rsquo;est-ce que l&rsquo;informatique sans serveur et Lambda?<\/strong><\/p>\n<p>Serverless est essentiellement lorsque l&rsquo;infrastructure est invisible, vous ne savez pas o\u00f9 le code s&rsquo;ex\u00e9cute et vous n&rsquo;avez pas le contr\u00f4le.<br \/>\nUne AWS Lambda est fondamentalement constitu\u00e9e de 2 classes: une interface simple et son impl\u00e9mentation, o\u00f9 vous impl\u00e9mentez la m\u00e9thode <code>handleRequest<\/code>. La Lambda est d\u00e9truite une fois la m\u00e9thode termin\u00e9e.<br \/>\nVous packagez le code dans un JAR (qui inclut toutes les d\u00e9pendances n\u00e9cessaires) et l&rsquo;uploadez dans AWS pour qu&rsquo;elle soit ex\u00e9cut\u00e9e.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Comment d\u00e9clencher une Lambda?<\/strong><\/p>\n<ul>\n<li>Vous pouvez utiliser <a href=\"https:\/\/aws.amazon.com\/cloudwatch\/\" target=\"_blank\" title=\"Amazon CloudWatch\" rel=\"noopener noreferrer\">CloudWatch<\/a> (similaire \u00e0 un CRON).<\/li>\n<li>Vous pouvez utiliser un \u00e9v\u00e9nement. Il peut s&rsquo;agir d&rsquo;un appel d&rsquo;API REST, un fichier est enregistr\u00e9 dans AWS S3, un message arrive dans une queue, une ligne est ajout\u00e9e \u00e0 une table ou un appel directement \u00e0 partir d&rsquo;une autre Lambda&#8230;<\/li>\n<\/ul>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Limites, des limites partout!<\/strong><\/p>\n<p>Lorsque vous travaillez avec des Lambdas, vous devez \u00eatre tr\u00e8s prudent avec <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/gettingstarted-limits.html\" target=\"_blank\" title=\"AWS Lambda Limits\" rel=\"noopener noreferrer\">les limites AWS Lambda<\/a>.<\/p>\n<ul>\n<li>Un d\u00e9lai d&rsquo;ex\u00e9cution par d\u00e9faut: 5 minutes<\/li>\n<li>Une quantit\u00e9 maximale de m\u00e9moire que vous pouvez utiliser: 3Go<\/li>\n<li>Une taille maximale pour un fichier JAR que vous pouvez uploader: 50Mo<\/li>\n<li>Un maximum d&rsquo;espace disque que vous pouvez utiliser: 512Mo<\/li>\n<\/ul>\n<p><br clear=\"none\" \/><\/p>\n<p>Pour certains traitements lourds sp\u00e9cifiques, ils ont atteint la plupart de ces limites et ils ont d\u00fb trouver des solutions de contournement ou m\u00eame des alternatives:<\/p>\n<ul>\n<li>L&rsquo;utilisation d&rsquo;<a href=\"https:\/\/aws.amazon.com\/batch\/\" target=\"_blank\" title=\"AWS Batch - Fully Managed Batch Processing at Any Scale\" rel=\"noopener noreferrer\">AWS Batch<\/a> au lieu de Lambda. L&rsquo;inconv\u00e9nient est qu&rsquo;ils ne peuvent pas d\u00e9clencher le traitement instantan\u00e9ment, par exemple lorsque vous soumettez un job Batch, il sera trait\u00e9 \u00e0 un moment donn\u00e9, mais vous ne pouvez pas supposer que cela sera instantan\u00e9 (cela peut prendre 2 ou m\u00eame 10 minutes avant l&rsquo;ex\u00e9cution). Cette limitation n&rsquo;\u00e9tait pas un probl\u00e8me pour eux, \u00e9videmment cela ne marchera pas pour tout le monde.<\/li>\n<li>Divisez et pr\u00e9traitez autant que possible les donn\u00e9es en entr\u00e9e avant de les transmettre \u00e0 la Lambda. La Lambda ne devrait pas avoir \u00e0 faire de pr\u00e9traitement lourd en CPU ou avec une empreinte m\u00e9moire forte. De plus, comme les donn\u00e9es sont charg\u00e9es \u00e0 la demande, cela introduit un peu de latence, mais c&rsquo;\u00e9tait acceptable pour eux.<\/li>\n<li>Au lieu de passer une copie des donn\u00e9es entre les Lambdas qui peuvent \u00eatre co\u00fbteuses en m\u00e9moire\/r\u00e9seau, ils sauvegardent les donn\u00e9es dans S3 et ensuite utilisent une r\u00e9f\u00e9rence (m\u00e9tadonn\u00e9es).<\/li>\n<\/ul>\n<p>La plateforme est actuellement constitu\u00e9e de 4 services, form\u00e9s d&rsquo;un total de 23 Lambdas et 2 Batch.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<p><strong>Retour d&rsquo;exp\u00e9rience<\/strong><\/p>\n<p>La scalabilit\u00e9 automatique (automatic scaling) avec Lambda est le principal avantage. C&rsquo;est totalement transparent et g\u00e9r\u00e9 par AWS. Quand il y a beaucoup de requ\u00eates, des Lambdas sont cr\u00e9\u00e9es et partagent la charge. Lorsque toutes les demandes ont \u00e9t\u00e9 trait\u00e9es, les Lambdas sont d\u00e9truites (pour atteindre 0 lorsqu&rsquo;elles sont inactives). Cependant, ce n&rsquo;est pas une solution miracle, car vous pouvez avoir un goulot d&rsquo;\u00e9tranglement \u00e0 un autre niveau de votre syst\u00e8me (par exemple, votre base de donn\u00e9es est trop lente) et vous ne pourrez pas exploiter pleinement l&rsquo;\u00e9lasticit\u00e9 des Lambdas.<\/p>\n<p>Un inconv\u00e9nient des Lambdas est le d\u00e9marrage \u00e0 froid (cold start), il leur faut du temps pour d\u00e9marrer. En fait, une Lambda n&rsquo;est pas vraiment d\u00e9truite une fois le traitement termin\u00e9, car elle peut \u00eatre r\u00e9utilis\u00e9e pour la prochaine requ\u00eate, AWS dispose d&rsquo;un m\u00e9canisme pour maintenir en vie, ce qui signifie que les Lambdas restent disponibles g\u00e9n\u00e9ralement quelques minutes apr\u00e8s leur ex\u00e9cution. Ils ont donc d\u00e9cid\u00e9 d&rsquo;appeler la Lambda avec un volume de donn\u00e9es n\u00e9gligeable toutes les minutes pour la garder disponible et \u00ab\u00a0ti\u00e8de\u00a0\u00bb. \u00c9videmment, c&rsquo;est un hack et ce n&rsquo;est pas garanti que cela marchera encore dans le futur, mais Chris nous a dit que c&rsquo;\u00e9tait une pratique assez commune parmi les d\u00e9veloppeurs&#8230;<\/p>\n<p>Pour le d\u00e9bogage, les choses ne sont pas faciles, vous devez d\u00e9ployer sur AWS pour tester votre code. De nos jours, il existe des biblioth\u00e8ques et des frameworks pour vous aider.<\/p>\n<p>Les logs des Lambdas sont index\u00e9es dans AWS CloudWatch Logs. D\u2019apr\u00e8s eux, l&rsquo;exp\u00e9rience utilisateur de cet outil n&rsquo;est pas g\u00e9nial, ils ont donc cr\u00e9\u00e9 une Lambda pour copier les logs d&rsquo;AWS vers un outil d&rsquo;agr\u00e9gation d\u00e9di\u00e9: <a href=\"https:\/\/www.sumologic.com\/\" target=\"_blank\" title=\"Sumo Logic: Log Management and Security Analytics, Continuous Intelligence\" rel=\"noopener noreferrer\">Sumo Logic<\/a>, un outil de type Splunk. Pour les alertes et le monitoring, ils utilisent CloudWatch Metrics et ils ont \u00e9galement configur\u00e9 des alertes dans Sumo Logic pour faciliter la recherche dans les logs.<\/p>\n<p>Construire une architecture \u00e0 partir de petites pi\u00e8ces simples pousse la complexit\u00e9 ailleurs au niveau de l&rsquo;infrastructure (pendant la construction) et aussi vers les interactions entre les composants (pendant l&rsquo;ex\u00e9cution). Le monitoring et la mise en place d&rsquo;alertes sont \u00e9galement plus complexes \u00e0 mesure que le syst\u00e8me devient encore plus fragment\u00e9. Il est important de garder \u00e0 l&rsquo;esprit qu&rsquo;une Lambda a des limites tr\u00e8s restrictives, aller au-dessus de l&rsquo;une d&rsquo;entre elles et votre Lambda sera tu\u00e9e. Notez que les limites \u00e9voluent et sont lev\u00e9es au fil du temps. La technologie est encore jeune et l&rsquo;outillage et les frameworks disponibles assez limit\u00e9s, mais vu le niveau d&rsquo;excitation autour des Lambdas, il est clair que cela va s&rsquo;am\u00e9liorer.<\/p>\n<p>D&rsquo;un autre c\u00f4t\u00e9, vous n&rsquo;avez pas besoin de penser aux serveurs et \u00e0 leur maintenance. L&rsquo;auto scaling est transparent et g\u00e8re automatiquement la charge. Lambda vous permet de r\u00e9aliser d&rsquo;importantes \u00e9conomies, par exemple, si votre syst\u00e8me est sp\u00e9cifique \u00e0 un pays, vous savez que le trafic sera tr\u00e8s limit\u00e9 pendant la nuit. Enfin, le mod\u00e8le de programmation est tr\u00e8s simple, juste un fichier JAR juste une fonction.<\/p>\n<span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe loading=\"lazy\" class=\"youtube-player\" width=\"550\" height=\"310\" src=\"https:\/\/www.youtube.com\/embed\/8mj-Q_oknd8?version=3&#038;rel=1&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;fs=1&#038;hl=fr-FR&#038;autohide=2&#038;wmode=transparent\" allowfullscreen=\"true\" style=\"border:0;\" sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation allow-popups-to-escape-sandbox\"><\/iframe><\/span>\n<p><br clear=\"none\" \/><\/p>\n<p>Ce deuxi\u00e8me jour \u00e0 Devoxx \u00e9tait g\u00e9nial, surtout les talks du matin sur le Machine Learning. Je suis sorti de ces 2 jours avec beaucoup d&rsquo;id\u00e9es innovantes. Merci Devoxx UK et peut-\u00eatre \u00e0 l&rsquo;ann\u00e9e prochaine!<\/p>\n<p><div style=\"max-width: 560px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00091\/devoxx-4.jpg?ssl=1\" rel=\"shadowbox[sbpost-4648];player=img;\" title=\"Keynote de cl\u00f4ture - Merci Devoxx UK!\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00091\/devoxx-4-thumbnail.jpg?resize=550%2C367&#038;ssl=1\" alt=\"Keynote de cl\u00f4ture - Merci Devoxx UK!\" title=\"Keynote de cl\u00f4ture - Merci Devoxx UK!\" width=\"550\" height=\"367\" class=\"size-medium wp-image-260\" \/><\/a><p class=\"wp-caption-text\">Keynote de cl\u00f4ture - Merci Devoxx UK!<\/p><\/div><br \/>\n<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;English version available Cette ann\u00e9e, j&rsquo;ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des notes que j&rsquo;ai prises pendant le deuxi\u00e8me jour. Vous pouvez lire l&rsquo;article pr\u00e9c\u00e9dent \u00e0 propos du premier jour. Et si vous souhaitez obtenir plus de d\u00e9tails sur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4643,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[6],"tags":[175,283,284],"class_list":["post-4648","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-event","tag-conference","tag-devoxx","tag-london"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Devoxx UK 2018 - Jour 2 | CarmaBlog<\/title>\n<meta name=\"description\" content=\"&nbsp;English version available Cette ann\u00e9e, j&#039;ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Devoxx UK 2018 - Jour 2 | CarmaBlog\" \/>\n<meta property=\"og:description\" content=\"&nbsp;English version available Cette ann\u00e9e, j&#039;ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/\" \/>\n<meta property=\"og:site_name\" content=\"CarmaBlog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-06T10:52:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-09T15:08:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Fabian Piau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:site\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabian Piau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"35 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/\"},\"author\":{\"name\":\"Fabian Piau\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"headline\":\"Devoxx UK 2018 &#8211; Jour 2\",\"datePublished\":\"2018-06-06T10:52:37+00:00\",\"dateModified\":\"2023-08-09T15:08:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/\"},\"wordCount\":7190,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/devoxx.png?fit=500%2C500&ssl=1\",\"keywords\":[\"conf\u00e9rence\",\"devoxx\",\"londres\"],\"articleSection\":[\"Ev\u00e9nement\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/\",\"name\":\"Devoxx UK 2018 - Jour 2 | CarmaBlog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/devoxx.png?fit=500%2C500&ssl=1\",\"datePublished\":\"2018-06-06T10:52:37+00:00\",\"dateModified\":\"2023-08-09T15:08:02+00:00\",\"description\":\"&nbsp;English version available Cette ann\u00e9e, j'ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[[\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/\"]]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/devoxx.png?fit=500%2C500&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2018\\\/05\\\/devoxx.png?fit=500%2C500&ssl=1\",\"width\":500,\"height\":500,\"caption\":\"devoxx\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2018\\\/06\\\/06\\\/devoxx-uk-day-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Homepage\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ev\u00e9nement\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/category\\\/event\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Devoxx UK 2018 &#8211; Day 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\",\"name\":\"CarmaBlog\",\"description\":\"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\",\"name\":\"Fabian Piau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"width\":567,\"height\":667,\"caption\":\"Fabian Piau\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\"},\"description\":\"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.\",\"sameAs\":[\"https:\\\/\\\/blog.fabianpiau.com\",\"https:\\\/\\\/www.facebook.com\\\/fabian.piau\",\"https:\\\/\\\/www.instagram.com\\\/fabianpiau\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fabianpiau\\\/\",\"https:\\\/\\\/x.com\\\/fabianpiau\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Devoxx UK 2018 - Jour 2 | CarmaBlog","description":"&nbsp;English version available Cette ann\u00e9e, j'ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Devoxx UK 2018 - Jour 2 | CarmaBlog","og_description":"&nbsp;English version available Cette ann\u00e9e, j'ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des","og_url":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/","og_site_name":"CarmaBlog","article_publisher":"https:\/\/www.facebook.com\/fabian.piau","article_author":"https:\/\/www.facebook.com\/fabian.piau","article_published_time":"2018-06-06T10:52:37+00:00","article_modified_time":"2023-08-09T15:08:02+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png","type":"image\/png"}],"author":"Fabian Piau","twitter_card":"summary_large_image","twitter_creator":"@fabianpiau","twitter_site":"@fabianpiau","twitter_misc":{"\u00c9crit par":"Fabian Piau","Dur\u00e9e de lecture estim\u00e9e":"35 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/#article","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/"},"author":{"name":"Fabian Piau","@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"headline":"Devoxx UK 2018 &#8211; Jour 2","datePublished":"2018-06-06T10:52:37+00:00","dateModified":"2023-08-09T15:08:02+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/"},"wordCount":7190,"commentCount":0,"publisher":{"@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png?fit=500%2C500&ssl=1","keywords":["conf\u00e9rence","devoxx","londres"],"articleSection":["Ev\u00e9nement"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/","url":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/","name":"Devoxx UK 2018 - Jour 2 | CarmaBlog","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/#primaryimage"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2018\/06\/06\/devoxx-uk-day-2\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png?fit=500%2C500&ssl=1","datePublished":"2018-06-06T10:52:37+00:00","dateModified":"2023-08-09T15:08:02+00:00","description":"&nbsp;English version available Cette ann\u00e9e, j'ai assist\u00e9 aux 2 jours de la conf\u00e9rence Devoxx UK \u00e0 Londres les 10 et 11 mai. Cet article est un r\u00e9sum\u00e9 des","breadcrumb":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":[["https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/"]]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/#primaryimage","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png?fit=500%2C500&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png?fit=500%2C500&ssl=1","width":500,"height":500,"caption":"devoxx"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.fabianpiau.com\/fr\/2018\/06\/06\/devoxx-uk-day-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Homepage","item":"https:\/\/blog.fabianpiau.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Ev\u00e9nement","item":"https:\/\/blog.fabianpiau.com\/fr\/category\/event\/"},{"@type":"ListItem","position":3,"name":"Devoxx UK 2018 &#8211; Day 2"}]},{"@type":"WebSite","@id":"https:\/\/blog.fabianpiau.com\/fr\/#website","url":"https:\/\/blog.fabianpiau.com\/fr\/","name":"CarmaBlog","description":"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...","publisher":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.fabianpiau.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14","name":"Fabian Piau","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","width":567,"height":667,"caption":"Fabian Piau"},"logo":{"@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1"},"description":"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.","sameAs":["https:\/\/blog.fabianpiau.com","https:\/\/www.facebook.com\/fabian.piau","https:\/\/www.instagram.com\/fabianpiau\/","https:\/\/www.linkedin.com\/in\/fabianpiau\/","https:\/\/x.com\/fabianpiau"]}]}},"views":965,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2018\/05\/devoxx.png?fit=500%2C500&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbSHyl-1cY","_links":{"self":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/4648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/comments?post=4648"}],"version-history":[{"count":0,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/4648\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media\/4643"}],"wp:attachment":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media?parent=4648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/categories?post=4648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/tags?post=4648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}