Agilité, Développement Java, Nouvelles technologies et plus…
  • rss
  • Accueil
  • Management
  • Programmation agile
  • Technologie
  • Linux
  • Evénement
  • App Android
  • Contact
  • A propos de l'auteur
  • English
  • Francais

Devoxx UK 2018 – Jour 1

Fabian Piau | lundi 21 mai 2018 - 22:46
  • Imprimer
  • Twitter
  • LinkedIn
  • Facebook
  • Pocket

 English version available

Cette année, j’ai assisté aux 2 jours de la conférence Devoxx UK à Londres les 10 et 11 mai. Cet article est un résumé des notes que j’ai prises pendant le premier jour. Si vous souhaitez obtenir plus de détails sur un talk, vous pouvez regarder la vidéo associée.

Devoxx UK a eu lieu au Business Design Centre à Londres

Devoxx UK a eu lieu au Business Design Centre à Londres


A Future without Servers, avec Danilo Poccia

Comment construire le meilleur logiciel avec la meilleure expérience utilisateur?

Travailler « en arrière » à partir des besoins du client (work backwards). Avant de commencer toute implémentation:

  1. Ecrire le Communiqué de presse
  2. Ecrire la FAQ
  3. Définir l’Expérience client
  4. Ecrire le Manuel de l’utilisateur

L’idée est de rendre votre système simple. Un système complexe était simple au début, il est devenu complexe!

L’architecture change:

  • Il y a 10 ans: nous splittons nos applications monolithes en utilisant XML et SOAP pour la communication
  • Il y a 5 ans: nous créons des architectures micro services en utilisant REST / JSON ou un protocole binaire pour la communication
  • Maintenant: nous construisons des architectures événementielles (event-driven) avec des fonctions éphémères

Qu’en est-il des données?

Les référentiels de données deviennent des sources d’événements. Chaque événement est une information immuable du métier.

Il y a une évolution de ACID (Atomic, Consistent, Isolated, Durable) vers ACID 2.0 (Associative, Commutative, Idempotent, Distributed).

Avec la conception pilotée par les événements, nous pensons cause / effet plutôt que qui déclenche quoi: « Le service B est causé par A » au lieu de « Service A déclenche B ». Nous utilisons un mécanisme de notification et d’accusé de réception.

Alors, à quoi ressemblera le futur?

Nous écrirons seulement le code de logique métier!


Let’s Get Lazy: Exploring the Real Power of Streams, avec Venkat Subramaniam

Venkat Subramaniam est un très bon speaker. C’était la première fois que je l’écoutais et j’ai été impressionné par sa façon de présenter, je vous suggère de regarder une de ses vidéos.

Haskell est un langage paresseux par défaut, les opérations qui peuvent être différées le seront. Avec Scala, c’est possible en utilisant le mot-clé « lazy ». Mais qu’en est-il de Java? Le mot-clé « lazy » n’existe pas, mais c’est possible avec le code fonctionnel et les streams introduits avec Java 8.

Le code impératif a une cérémonie haute et une complexité accidentelle. Vous dites quoi faire et comment le faire.

Le code fonctionnel a moins de cérémonie et moins de complexité. Vous dites quoi faire et c’est tout. Le code est très facile à lire de haut en bas.

Cependant, si le code est « joli », il peut ne pas être durable. Alors qu’en est-il de la performance? Par exemple, est-ce que nous traitons toute la collection pour ne prendre que le premier élément? FindFirst() est l’opération d’exécution terminale. Jusqu’à ce que nous l’appelions, rien (c’est-à-dire toutes les opérations intermédiaires) ne sera exécuté.

Un stream n’exécute pas de fonction pour chaque objet de la collection, mais il exécute une collection de fonctions pour chaque objet, mais seulement quand c’est nécessaire.

Un stream n’est pas une collection d’objets, c’est une collection de fonctions.

Les lambdas sont stateless.

List<Integer> numbers = Arrays.asList(1, 2, 3);
Stream<Integer> stream = numbers.stream()
                            .map (e -> e * 2); // Ceci est une lambda
stream.forEach(System.out::println);

Les closures portent les états immuables, soyez très prudent en les utilisant.

List<Integer> numbers = Arrays.asList(1, 2, 3);
final int factor = 2;
Stream<Integer> stream = numbers.stream()
                            .map (e -> e * factor); // Ceci est une closure
stream.forEach(System.out::println);

La paresse rend possible l’utilisation de stream infini, sinon le programme ci-dessous serait une boucle infinie.

Stream<Integer> infiniteStream = Stream.iterate(0, e -> e + 1);
List<Integer> numbers = infiniteStream 
                          .limit(5)
                          .collect(Collectors.toList());


Kotlin for Java Programmers, avec Venkat Subramaniam

Je suis resté dans la même salle, car j’ai beaucoup apprécié le premier talk de Venkat. Avec la même façon de présenter, cette deuxième présentation était toute aussi bonne.

Comme je n’ai jamais expérimenté Kotlin, c’était une bonne introduction pour moi. Ce langage basé sur la JVM devient vraiment populaire de nos jours, d’autant plus que Jetbrain le pousse pour être le langage principal pour la programmation Android. Venkat nous a donné beaucoup d’astuces pour rendre le code concis et nous a suggéré de jouer nous-mêmes avec en utilisant le REPL (kotlinc). Sans doute moins verbeux que Java et livré avec des fonctionnalités intéressantes (notamment la gestion des null et le lazy…). Je vais probablement l’essayer à un moment donné.


How to use AI and Java to train your application to recognize people by name, avec Ruth Yakubu

Ruth nous a présenté Microsoft Face API qui s’exécute sur la plate-forme de cloud computing Azure (bien évidement de Microsoft). Face API est l’un des services « cognitifs » fournit par Microsoft, par ex. il existe un service pour reconnaître la parole et traiter le langage naturel.

Elle nous a montré une application écrite avec Spring Boot qui interagit avec Face API. Tout d’abord, elle a uploadé une série de photos de l’acteur Matthew McConaughey (si vous ne le connaissez pas, il était le personnage principal dans Interstellar) pour former le modèle. Puis elle a uploadé une nouvelle photo de lui et de sa femme que le système ne connaissait pas encore. L’algorithme a reconnu l’acteur avec une grande précision alors qu’il ne savait pas qui était la femme l’accompagnant, mais il a été capable de donner une description précise d’elle (une femme souriante dans la trentaine, etc.).

Il est possible de créer votre propre algorithme d’apprentissage automatique avec Java, par exemple en utilisant la bibliothèque DeepLearning4J. Lors de la formation d’un modèle, il est important de séparer les données en 2 groupes, les données d’entraînement (80%) et les données de test (20%) afin de pouvoir vérifier que votre modèle a une bonne prédiction. Il est également important d’utiliser les GPUs et pas seulement les CPUs pour améliorer les performances, maintenant les bibliothèques en profitent, y compris DL4J.


Building a self-driving RC car, avec Tim van Eijndhoven

Ce fut une présentation intéressante pour suivre l’expérience de Tim et son équipe qui se sont lancés dans la création d’une voiture (jouet) autonome sans chauffeur basée sur un kit Radio Control (RC). Ils ont construit ce prototype dans le cadre d’un challenge. L’idée est que la voiture conduise de manière autonome et suive un itinéraire (tracé délimité par 2 lignes blanches) avec des courbes et des obstacles potentiels.

Si Tesla peut le faire, alors pourquoi pas nous? À notre échelle, bien sûr…

En plus du kit RC, ils ont ajouté un Raspberry Pi, un convertisseur de puissance/alimentation, une caméra et un mécanisme d’arrêt d’urgence (utile quand la voiture est hors de portée du WiFi et peut se crasher n’importe où…). Le budget total est d’environ 300 euros.

En ce qui concerne les technologies, ils ont utilisé:

  • Vert.x, application réactive sur la JVM, événementielle et non bloquante
  • La librairie OpenCV (Computer Vision) pour traiter le flux vidéo en temps réel et s’assurer que la voiture reste entre les lignes blanches

Il y a beaucoup de choses à penser, l’environnement est probablement la variable la plus incertaine. L’algorithme peut se tromper en fonction de:

  • La surface (moquette à motifs, carreaux, route sombre)
  • Le temps (ensoleillé, pluvieux, le programme est très sensible au changement de luminosité)
  • Et d’autres facteurs (réflexion sur une fenêtre, effet miroir)

Ils ont beaucoup d’idées d’amélioration pour le futur:

  • Il n’est pas nécessaire d’analyser toutes les images provenant du flux vidéo (en particulier sur une ligne droite). Actuellement, ils analysent une image toutes les 100ms (pourquoi 100ms?) Car c’est le temps qu’il faut pour en traiter une)
  • Il n’est pas nécessaire d’analyser toute l’image (certaines parties peuvent être ignorées, ce qui est au-dessus de l’horizon n’est pas nécessaire par exemple)
  • Déporter la logique de calcul sur la voiture elle-même au lieu d’un ordinateur portable sur le WiFi, pour éviter la latence du réseau (cependant la puissance de calcul de Raspberry Pi peut être limitée)
  • Utiliser l’IA et le Deep Learning pour que la voiture puisse apprendre à naviguer en utilisant des vidéos d’entraînement: des vidéos lorsque la voiture est contrôlée à distance par un humain (cependant, cela peut prendre beaucoup de temps et de nombreuses vidéos seront nécessaires sur des circuits et avec des conditions différentes)


Cloud Native Java, part deux, avec Josh Long

Josh est Spring Developer Advocate chez Pivotal, c’était la première fois que j’assistais à une de ses conférences. J’ai vraiment apprécié et j’ai été très impressionné par son débit de parole et de code simultané sans oublier de nombreuses blagues. Un brillant orateur.

Josh a utilisé https://start.spring.io/ pour générer un petit projet pour gérer des réservations en utilisant Spring Cloud (construit sur Spring Boot). Pourquoi devriez-vous utiliser cet outil en ligne pour initialiser votre projet? Regardez la vidéo pour obtenir la réponse de Josh, c’est amusant!

Il a choisi Kotlin pour le service (car pourquoi pas?) avec des endpoints pour obtenir les messages et les réservations en utilisant un datastore réactif MongoDB. Le service chargeait les données de manière réactive pendant le démarrage.

Il a choisi Java pour le client en utilisant diverses technologies out-of-the-box grâce à Spring (Eureka, Spring Security, Hystrix pour le load balancer interne et gestion du fallback). Le client a pu interroger le service pour récupérer les données.

A la fin de la démo, il nous montre également une architecture sans serveur utilisant RIFF, un FaaS pour Kubernetes. Il a écrit une fonction pour transformer une chaîne de caractère en majuscules, puis utilise le terminal pour invoquer la fonction déployée sur Kubernetes. Il n’a pas eu le temps de nous montrer l’appel à partir d’un service, mais nous avons compris le principe.


Ma première journée à Devoxx était géniale, cette année j’ai essayé d’assister à des conférences plus innovantes sur le Serverless et le Machine Learning, un mélange live-coding et de théorie. Je posterai bientôt mon résumé du jour 2, alors stay tuned!

Les lettres #DevoxxUK dans le hall

Les lettres #DevoxxUK dans le hall

Articles similaires

devoxxDevoxx UK 2018 – Jour 2 springQCon London 2016 – Spring Framework 5 – Preview et Roadmap Java 11Une migration Java 11 réussie Fosdem 2013Retour sur Fosdem 2013
Catégories
Evénement
Tags
conférence, devoxx, londres
Flux rss des commentaires
Flux rss des commentaires

« Wise, Revolut et Monzo, une petite révolution dans le monde des expatriés et voyageurs Devoxx UK 2018 – Jour 2 »

Télécharger l'app CarmaBlog

Flux RSS

  • Flux RSS RSS - Articles
  • Flux RSS RSS - Commentaires

Articles les plus vus

  • Changer la langue de Firefox - 115 579 vues
  • Réaliser un sondage en ligne avec Google Forms / Drive / Docs - 63 166 vues
  • FAQ – Sondage en ligne avec Google Forms / Drive / Docs - 52 403 vues
  • Personnaliser Gnome 3 (Shell) - 30 017 vues
  • La signification d’URL, URI et URN - 17 251 vues
  • Java EE & CDI vs. Spring - 15 442 vues
  • Open Street Map, une meilleure carte que Google Maps? - 14 648 vues
  • Comparaison NoSQL: Couchbase et MongoDB - 14 082 vues
  • Firefox Nightly, Aurora, Beta, Desktop, Mobile, ESR & Co. - 13 087 vues
  • API, REST, JSON, XML, HTTP, URI… Vous parlez quelle langue en fait? - 12 718 vues

Commentaires récents

  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsMerci Fabian, mais le but étant que nos clients pu…
  • Fabian Piau sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsProbablement mais ces options sont en général paya…
  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour Fabian, Merci de votre retour, oui j'avais…
  • Fabian Piau sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour Pauline, ce n'est pas possible de créer un…
  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour, Je suis en train de créer un Google Forms…

Articles récents

  • Comment écrire un article de blog? En tout cas à ma façon! - Il y a 3 mois et 2 semaines
  • Attaques de robots: vous n’êtes pas seul… - Il y a 1 an et 11 mois
  • Flagger – Monitorer vos déploiements Canary avec Grafana - Il y a 2 ans et 8 mois
  • Flagger – Déploiements Canary sur Kubernetes - Il y a 2 ans et 10 mois
  • Flagger – Premiers pas avec Istio et Kubernetes - Il y a 2 ans et 10 mois
  • CoderDojo Expedia à Londres - Il y a 3 ans et 7 mois
  • Etre bénévole à Devoxx4Kids - Il y a 3 ans et 10 mois
  • Une migration Java 11 réussie - Il y a 4 ans et 2 mois
  • Conseils pour sécuriser votre site WordPress - Il y a 4 ans et 5 mois
  • Devoxx UK 2018 – Jour 2 - Il y a 4 ans et 9 mois
  • Devoxx UK 2018 – Jour 1 - Il y a 4 ans et 9 mois
  • Wise, Revolut et Monzo, une petite révolution dans le monde des expatriés et voyageurs - Il y a 5 ans et 1 mois
  • Autocomplétion pour Git - Il y a 5 ans et 10 mois
  • Swagger, la documentation API automatisée - Il y a 6 ans et 2 semaines
  • Architecture Microservices – Les bonnes pratiques - Il y a 6 ans et 5 mois
Offre moi un café

Langue

  • Français
  • English

Suivez-moi!

Suivez-moi sur Linkedin
Suivez-moi sur Twitter
Suivez-moi sur Stackoverflow
Suivez-moi sur Github
Suivez-moi sur Rss
Link to my Contact

Abonnement email

Saisissez votre adresse email pour être informé des nouveaux articles.

Étiquettes

.net agile agilité android bash blog bonnes pratiques cache cloud conférence css devoxx docker développeur eclipse extreme programming firefox flagger google helm hibernate informatique intégration continue istio java jug kubernetes londres mobilité informatique métier outil panorama partage performance plugin programmeur script société spring sécurité tdd test ubuntu windows wordpress

Liens

  • Blog Ippon Technologies
  • Blog Publicis Sapient
  • Blog Zenika
  • Classpert
  • CommitStrip
  • Coursera
  • Le Touilleur Express
  • Les Cast Codeurs Podcast
  • OCTO talks !
  • The Twelve-Factor App

Catégories

  • Evénement (15)
  • Linux (3)
  • Management (8)
  • Programmation agile (29)
  • Technologie (45)

Archives

  • décembre 2022 (1)
  • avril 2021 (1)
  • juin 2020 (1)
  • mai 2020 (2)
  • juillet 2019 (1)
  • mai 2019 (1)
  • décembre 2018 (1)
  • octobre 2018 (1)
  • juin 2018 (1)
  • mai 2018 (1)
  • janvier 2018 (1)
  • mai 2017 (1)
  • mars 2017 (1)
  • octobre 2016 (1)
  • avril 2016 (2)
  • mars 2016 (1)
  • novembre 2015 (1)
  • mai 2015 (1)
  • février 2015 (1)
  • décembre 2014 (1)
  • novembre 2014 (1)
  • septembre 2014 (2)
  • août 2014 (1)
  • juillet 2014 (2)
  • juin 2014 (1)
  • avril 2014 (1)
  • mars 2014 (1)
  • février 2014 (2)
  • janvier 2014 (1)
  • décembre 2013 (1)
  • novembre 2013 (1)
  • octobre 2013 (3)
  • septembre 2013 (5)
  • juillet 2013 (1)
  • juin 2013 (1)
  • mai 2013 (1)
  • avril 2013 (1)
  • mars 2013 (2)
  • février 2013 (1)
  • janvier 2013 (2)
  • décembre 2012 (2)
  • octobre 2012 (1)
  • septembre 2012 (1)
  • juillet 2012 (1)
  • mai 2012 (1)
  • avril 2012 (1)
  • mars 2012 (1)
  • février 2012 (1)
  • janvier 2012 (2)
  • décembre 2011 (1)
  • novembre 2011 (2)
  • octobre 2011 (2)
  • septembre 2011 (1)
  • juillet 2011 (1)
  • juin 2011 (2)
  • avril 2011 (1)
  • mars 2011 (1)
  • février 2011 (1)
  • janvier 2011 (2)
  • novembre 2010 (2)
  • septembre 2010 (1)
  • août 2010 (1)
  • juillet 2010 (1)
  • juin 2010 (1)
  • mai 2010 (1)
  • avril 2010 (1)
  • mars 2010 (1)
  • février 2010 (1)
  • décembre 2009 (1)
  • novembre 2009 (1)
  • octobre 2009 (2)
  • septembre 2009 (2)
  • août 2009 (3)
  • juillet 2009 (1)
  • juin 2009 (2)
Suivez-moi sur Twitter
Suivez-moi sur Linkedin
Suivez-moi sur Stackoverflow
Suivez-moi sur Rss
Link to my Contact
Suivez-moi sur Github
 
Fabian Piau | © 2009 - 2023
Tous droits réservés | Haut ↑