Le podcast Java en Français

Les Cast Codeurs est un podcast en français de, par et pour les développeurs.

Prenez connaissance des dernières nouvelles de la sphère Java et du développement en général. Plongez sur un sujet précis avec les épisodes interview.

Supportez les radotages de vos hôtes : Emmanuel Bernard (JBoss, Hibernate), Arnaud Héritier (CloudBees, Jenkins), Guillaume Laforge (Google, Groovy), Antonio Goncalves (Microsoft, auteur), Vincent Massol (XWiki, Maven), Audrey Neveu (Reactor/Spring, Devoxx4Kids).

LCC 275 - Interview sur le darwinisme numérique avec Didier Girard - partie 3

Posté le 21/03/2022

Cet épisode est un échange entre Guillaume, Antonio, Emmanuel et Didier Girard sur les réflexions de Didier autour du darwinisme numérique. Cette troisième et dernière partie nous emmène sur les chemins des choix organisationnels que ces natifs du numérique à succès emploient.

Enregistré le 17 février 2022

Téléchargement de l’épisode LesCastCodeurs-Episode-275.mp3

Interview

Ta vie ton œuvre

Twitter
SFEIR
Envision

Modèle organisationnel

Sociocratie
Holacratie

Deck Netflix

L’individu

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 274 - Interview le darwinisme numérique avec Didier Girard - partie 2

Posté le 07/03/2022

Cet épisode est un échange entre Guillaume, Antonio, Emmanuel et Didier Girard sur les réflexions de Didier autour du darwinisme numérique. Cette deuxième partie se concentre sur ce que veut dire le darwinisme numérique pour les entreprises et analyse les entreprises qui ont embrassé ses nouvelles contraintes ces vingt dernières années. En particulier, nous discutons de leur capacité d’adaptation comme principe fondamental et en filigrane de l’impact sur l’individu. On y invente aussi la notion d’équipe raclette.

Comme souvent l’actualité nous a rattrapé. Cette interview a été enregistrée quelques jours avant l’invasion de l’Ukraine par la Russie ce qui donne une couleur plus intense à la partie 1 de cette interview.

Enregistré le 17 février 2022

Téléchargement de l’épisode LesCastCodeurs-Episode-274.mp3

Interview

Ta vie ton œuvre

Twitter
SFEIR
Envision

L’entreprise

Tech
Système organisationnel
Génération surdiplômée - les 20% qui transforment la France
Les BATX

L’individu

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 273 - Interview sur le darwinisme numérique avec Didier Girard - partie 1

Posté le 24/02/2022

Cet épisode est un échange entre Guillaume, Antonio, Emmanuel et Didier Girard sur les réflexions de Didier autour du darwinisme numérique. Cette première partie discute des axiomes de ce concept et de ses impacts sur les nations. On y échange notamment sur la souveraineté et l’indépendance.

Enregistré le 17 février 2022

Téléchargement de l’épisode LesCastCodeurs-Episode-273.mp3

Interview

Ta vie ton œuvre

Twitter
SFEIR
Envision

Le darwinisme numérique

La nation

Souveraineté et indépendance sur les ressources critiques

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 272 - Interview sur Log4Shell avec this

Posté le 12/02/2022

Emmanuel et Arnaud reviennent sur la fameuse faille #log4shell qui a fait travailler beaucoup d’équipes Java en décembre et janvier.

Enregistré le 11 février 2022

Téléchargement de l’épisode LesCastCodeurs-Episode-272.mp3

Interview

Quelle est cette vulnérabilité et pourquoi est-elle si dangereuse ?

CVE-2021-44228

Reportée chez Apache le 24 novembre, enregistrée en CVE le 26 novembre Probablement connue depuis au moins Mars 2021 : https://github.com/nice0e3/log4j_POC

  • fix 2.15.0 le 10 décembre
  • Apache Log4j2 JNDI features do not protect against attacker controlled LDAP and other JNDI related endpoints.
  • Severity CVSS de 10 sur 10
    • jamais vu
  • back to basics: C’est quoi JNDI ?
  • the JNDI features used in configurations, log messages, and parameters do not protect against attacker-controlled LDAP and other JNDI related endpoints
  • l’attaquant trouve une donnée utilisateur qui est loguée
    • Pas que HTTP
  • et injecte {JNDI:ldap pointant vers un ldap malicieux qui retour du code java sérialisé
  • Log4j désérialise et exécute ce que l’on veut
  • que log4j-core, pas log4j-api
  • détail de Lunasec log4j zero day
    • mitigations initiales

CVE-2021-45046

  • 2.16.0 (change des fonctionnalités) le 13 décembre
  • Apache Log4j2 Thread Context Lookup Pattern vulnerable to remote code execution in certain non-default configurations
  • When the logging configuration uses a non-default Pattern Layout with a Context Lookup
    • $${ctx:loginId})
  • attackers with control over Thread Context Map (MDC / Mapped Diagnostic Context) input data can craft malicious input data using a JNDI Lookup pattern
  • donc on peut encore injecter une chaine JNDI
  • mais on doit savoir comment de l’utilisateur on peut pousser dans une Thread Context Map référencée par la config
  • ou alors l’attaquant a accès à la config et c’est game over
  • Initialement on parlait de denial of services
    • via une reference infinie probablement
  • c’est un chemin qui n’était pas protégé des interpolations de messages et donc de l’accès JNDI

CVE-2021-45105

  • fix dans 2.17.0 le 18 décembre
  • recursion non contrôlée dans un lookup autoréférentiel
  • When the logging configuration uses a non-default Pattern Layout with a Context Lookup (for example, $${ctx:loginId})
  • Besoin que l’attaquant contrôle la Thread Context Map (peut être une donnée injectée par un framework à partir d’une entrée utilisateur)
  • changer la config Log4j locale ?

CVE-2021-44832

  • 2.17.1 le 27 décembre
  • Apache Log4j2 vulnerable to RCE via JDBC Appender when attacker controls configuration
    • malicious configuration using a JDBC Appender with a data source referencing a JNDI URI which can execute remote code.
  • attaquant accède et modifie la config
    • pas simple
    • sauf si la plateforme permet la reconfiguration par un utilisateur ???
  • log

Google package analysis

  • montre 8% de packages sur central affectés par Log4j2
  • niveau de dépendance transitive monte jusqu’à 9
    • du coup il y a neuf vendeurs qui doivent corriger leurs dépendances

Toujours plus de 40% de téléchargement sur Maven central des versions impactées

Log4j1 n’est pas en reste :

  • JMSAppender
    • JMS dit JNDI et paf on recommence
  • JDBCAppender
    • SQL injection FTW
  • Log4j1 n’est plus maintenue ah merde !
    • Apache Kafka

Reload4j de ceki

Des exploitations ?

Peu finalement Car chaque usage de Log4j est unique Entrée quoi est logué etc Donc trop dur pour les script kiddies

Mais dans les metasploits et autres toolkits d’attaque

VMware vSphere et Horizon Ubiquity SolarWinds etc

Quel process suivre

  • vérifier la véracité de la CVE et comprendre ses vecteurs d’attaque
  • identifier ses dépendances et donc ses soft impacté
  • identifier les éléments fournis par l’utilisateur qui sont logués
  • définir le risque par software et par service
  • appliquer le patch de sécurité et reconstruire le package
  • déployer ou livrer chez les clients
  • répéter pour les semaines à venir

  • shading ? :)

Impact de l’industrie dans le futur

La Chine a tapé sur les doigts Alibaba qui n’a pas donné cette faille d’abord au gouvernement chinois

The Gift of It’s Your Problem Now

  • Discussion sur le paiement et l’open source
    • Pour un individuel l’open source est un cadeau et donner de l’argent n’améliore pas le cadeau
    • Injecter de la compensation financière dans un cadeau casse le cadeau et ne change pas la motivation (ou la casse)
    • Pour une société, l’open source est un moyen de récupérer du feedback et du marketing, donc c’est une transaction et pas un cadeau
  • Un autre article similaire : The burden of an Open Source maintainer

Open source maintainer pulls the plug on npm packages colors and faker, now what?

Reflection on log4shell par diabolical developer

  • marathon pas un sprint, on fatigue après 5 ou 6 jours à fond, donc faites des rotations
  • comm sur le réseau, que regarder : Adding encryption, Auth/Auth, I sanitize data that goes over the wire, I sanitize input that could execute, DOS protection – backoff strategies and more.
  • supply chain sécurisation and component governance
  • OSS funding (hum ?)

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 271 - UPX version Spinal Tap

Posté le 17/01/2022

Antonio, Guillaume et Emmanuel discutent 11, le 42 du rockeur, Quarkus, Java 17, limites de Kubernetes, #Y2k22, web3, Maven, Log4J, et et et cloud souverain.

Enregistré le 14 janvier 2022

Téléchargement de l’épisode LesCastCodeurs-Episode-271.mp3

News

Langages

Quoi de neuf dans Java 18 de Loïc Mathieu

  • Feature complete (mais encore des bugs)
  • UTF-8 par défaut
  • exemples de code dans la javadoc avec @snippet y compris des references a des fichiers extérieurs
  • Simple Web Server pour des resources statiques (comme d’autres plateformes comme Ruby ou Python je crois). En code ou via la commande jwebserver
  • le mécanisme de finalisation proposé à la suppression --finalization=disabled pour tester. Celui-là il ne nous manquera pas
  • ré-implementation de la reflection avec les MethodHandle

Le calendrier de l’Avent Java 2021 a plein d’articles très intéressants

Cinq choses que vous ne saviez pas sur la concurrence en Java

  • l’ordre du programme et l’ordre d’exécution n’est pas le même, mais il est sémantiquement similaire
  • le nombre de threads dans une JVM est limité (dépend de la machine)
  • plus de threads ne veut pas dire plus de perfs

Librairies

Quarkus 2.5 et 2.6 sont sortis :

  • API programmatique pour interagir avec le cache
  • Kotlin 1.6
  • Java 17 par défaut pour les nouveaux projets générés
  • des extensions ont bougé du core vers le quarkiverse hub, peut-être quelques impacts de migration
  • images container plus petites en natif et compression UPX possible
    • plus petit sur disque, mais plus gros en memoire (pour la décompression)
    • quarkus.native.compression.level de 1 à 10 dans le fichier de config
  • dev service pour Oracle DB

Utiliser Neo4J pour analyser le chemin de code et pourquoi un bout de code est inclus en natif

  • super utile pour les compilations natives
  • quarkus.native.enable-reports pour avoir le rapport exploitable par neo4j

SmallRye Stork

  • service discovery et client side load balancing
  • support pour Consul, Eureka, and Kubernetes
  • extensible notamment pour le load balancing
  • intégration avec Quarkus REST Client et gRPC
  • dans la config stork://hello-service

Infrastructure

Pourquoi et comment de la taille des containers Kubernetes

  • Quand on ne partage pas, inefficient mais sécurisé
  • Avec des VM, on peut overcommitter des resources sur l’hyperviseur, mais risque sur mésentente
  • Ne remplace pas le capacity planning
  • Les containers définissent des filtrages plus fins et tuent les process qui dépassent
  • Discussion cpu_share (proportion en balance), cpu_quota, cpu_period pour définir les limites basses et hautes
  • mais si ça reste statique par host ce n’est pas très pratique
  • Orchestration de container via Kubernetes (request = min, limit = max)
  • Kube donne au minimum request mais peut donner plus si le nœud n’est pas occupé à 100%
  • Attention, la partie libre n’est pas distribuée équitablement, mais en proportion du ratio de request demandé vs les autres. Donc les containers avec des grosses request sont privilégiés. Donc mettre limit est important
  • Donc jouer le jeu request et monitored pour ajuster à la baisse si nécessaire. Tous les workloads doivent jouer le jeu.
  • Kubernetes QoS (best effort, burstable et guaranteed) utilisé lorsqu’on tourne bas en mémoire (pas en cpu !)
  • Discussion de la sélection du nœud (selector, affinity, taints and tolerations ou isolation/ restriction) pour isoler des qualités de service ou prédictibilité, pour la sécurité etc
  • besoins mémoire : si utilisation max, pod killed. Besoins CPU : si utilisation max, on est throttled -> slow
  • Mettre mémoire request = limit sauf si le process peut rendre de la mémoire (pas fait avant java 11)
  • CPU request = limit si la prédictibilité de l’application est très important.
  • Étudier conso CPU de l’appli en percentile et targeted par exemple une garantie à 99% ou 90 ou moins si pas sensible
  • Article ne parle pas du scale out

Exchange 2016 et 2019 souffrent du bug de l’an 2022 Y2K22

  • Après Matrix et son opus Resurrections, Microsoft relance le bug de l’an 2000, 22 ans après, Y2k22
  • dans Exchange server 2016 et 2019 et d’autres systems non microsoft
  • pour Exchange c’est dû au système de scan d’antivirus qui ne reconnaissait pas les dates des signatures de virus 22010100001 parce que le software stocke les dates dans un entier signé 2^31-1=2147483647 et la date est stockée sur les deux premiers chiffres.
  • le workaround initial est assez marrant, le software considère qu’on est le 33 décembre 2021 2112330001

Web

Moxy de Signal (ex) discute web3

  • web1 était décentralisé, web2 est riche mais centralisé, web3 sera riche et décentralisé
  • problème: les gens n’aiment pas faire tourner leurs propres serveurs et ne l’aimeront jamais
  • même les entreprises ne font plus tourner leurs serveurs
  • un protocole (standard) bouge beaucoup plus lentement qu’une plateforme
    • exemple Spring, exemple Quarkus vs Microprofile ou Jakarta EE
  • puis discute blockchain et NFT
  • l’état et la logique / les permissions pour mettre a jour sont décentralisées, mais pas l’interface avec l’utilisateur
  • blockchain est une confiance entre serveurs plus qu’entre clients
  • avec le mobile, les clients ne peuvent pas acter en tant que server (voir Bitcoin)
  • donc des gens vendent des accès centralisés aux nœuds de la blockchain
  • et les clients de ses APIs ont une confiance implicite (et pas par le système)
  • et centralisation des accès et donc mining de ces informations
  • NFTs stockent l’URL de l’objet (sans hash) donc pas sécurisé sans parler du rachat de domaine
  • il a fait un NFT qui se change en émoji caca pour celui qui l’a acheté
  • et il s’est fait virer son NFT ET sa preuve de possession
  • mais c’est une blockchain ???
  • sauf que le wallet passe par des fournisseurs centralisés
  • pour faire web3, les gens se concentrent autour de plateformes, un comportement tres web2
  • donc la blockchain et NFT ont du succès non pas parce que c’est distribué, mais parce que c’est un gold rush
  • la dynamique rend les projets web3 successful mais fondamentalement les mêmes dynamiques vont les centraliser
  • propositions
    • accepter que les gens ne font pas tourner leur serveur et utiliser la crypto pour distribuer la confiance

Outillage

Maven 3 à 5 une explication

  • le POM est figé parce que c’est ce que publie maven central, donc maven 3 ne fera que des améliorations mineures
  • Maven 5 la proposition : avoir un POM de build (v5) et produire un POM de consommation en v4, comme les autres systèmes de builds font
  • Maven 4 va faire la même séparation, mais en faisant un POM v4 build to POM v4 consumer conversion en étape intermédiaire
  • maven 4 alpha 1 se rapproche, il attend juste des contributions de @aheritier
  • blog de Hervé Boutemy
  • Maven Wrapper (ex takari) est désormais un projet officiel apache maven : https://maven.apache.org/wrapper/maven-wrapper-plugin/
  • idem pour Maven Daemon https://github.com/apache/maven-mvnd
  • Le maven Build Cache arrive : https://github.com/apache/maven-build-cache-extension

Sécurité

Comme prévu, la saga log4j continue avec Log4j 2.17 et 2.17.1

  • avec l’augmentation de la visibilité, plus de problèmes vont être trouvés
  • Log4J 2.17 corrige un appel récursif infini exploitable en déni de service. Besoin d’avoir un pattern non standard dans la config (utilisant les context lookup) et un accès au Thread Context Map par l’attaquant (5.9) https://logging.apache.org/log4j/2.x/security.html#CVE-2021-45105
  • Log4J 2.17.1 fixe un abus du JDBCAppender qui peut référencer une URL JNDI et exécuter du code à distance, mais l’attaquant doit pouvoir modifier la configuration de log4j (6.6) https://logging.apache.org/log4j/2.x/security.html#CVE-2021-44832
  • doit-on quitter le navire ? équilibre entre fonctionnalités et sécurité
  • on fera un épisode spécial Log4Shell bientôt

H2 vulnérable à une attaque JNDI

  • fondamentalement comme Log4Shell
  • Mais exploitable pour ceux qui passent une url ou un login mot de passe via des infos utilisateur
  • Par exemple h2 console
  • Mais localhost par défaut
  • Sauf dans jhipster

Loi, société et organisation

Tribune de Didier Girard sur le cloud souverain

  • investissement de 1,8 milliard sur 4 ans dans le cloud français sur 4 ans. C’est moins que chaque grand cloud provider par an
  • consortiums européens, mais mauvaise histoire CloudWatt, Gaia-x et ses problèmes de gouvernance
  • initiative Soutenu par la dépense publique
  • Cloud de confiance est un moyen pour Didier du transfert technologique et de casser l’asymétrie de compétence et d’investissement
  • Ça ne répond pas aux problèmes clés levés par Quentin dans l’interview

La Maison Blanche demande à Oracle et Microsoft de réfléchir à la sécurisation des logiciels libres

Outils de l’épisode

Rambox

  • en general je préfère les applis natives pour chaque service
  • Mais avec les messageries instantanées, c’est la chienlit
  • Et il y a les apps qui sont des tabs dans le navigateur (Trello, Gmail, calendar etc)
  • Là tout est centralisé dans une seule app (notifications etc)
  • C’est comme un mini browser dédié avec des sites webs fixes
  • Et contre toute attente j’aime bien
  • Version gratuite et version pro.
  • Encore des limitations (vue de deux apps en parallèle) mais ils travaillent à une nouvelle version

Conférences

Sunny Tech à Montpellier le 30 juin et 1er juillet — CfP ouvert jusqu’au 28 février

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 270 - Interview de Nicolas De Loof sur Docker Compose

Posté le 03/01/2022

Nicolas De Loof rejoint Emmanuel et Antonio pour discuter de Docker Compose.

Enregistré le 17 décembre 2021

Téléchargement de l’épisode LesCastCodeurs-Episode-270.mp3

Interview

Ta vie ton œuvre

Nicolas De Loof

Introduction à la techno

Docker en 1 minute
Docker compose d’où vient l’idée et le besoin

La techno en concepts

Un container c’est quoi ?
Ça tourne comment ?

Du coup, on veut en faire tourner plusieurs
Comment on les “lie” ?
Network
autre chose ?

Mais c’est pas le job de Kubernetes ?

  • deploy
  • scaling
  • rollback

La spécification

Discussion sur les notions :

  • service
  • build
  • label
  • network
  • sécurité (cap_add)

docker-compose vs docker compose

Comment on l’utilise en pratique pour un dev

Comment je définis mon multi-container
Lien vers des dockerfiles ?
Échange d’infos (par exemple DB connection ou mot de passe entre DB et l’appli)
Ma DB doit démarrer avant mon app
Ça fait les health check ?

Je commite ce fichier où typiquement ? Comment je partage avec mon équipe ? Et ma CI ?

Comment je mets en prod ? Je mets en prod hein, ça marche sur ma machine.

v2 vs v3

Sous le capot

Et donc comment ça marche docker compose?
Zoom sur le network

La sécurité

La communauté, le futur

Roadmap
Docker desktop payant

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 269 - Log4J devient Turing-complet

Posté le 23/12/2021

Antonio et Guillaume discutent de nouvelle crèmerie, des fêtes de fin d’années, des cadeaux du père Noël, et… de log4j, le feuilleton de fin d’année !

Enregistré le 20 décembre 2021

Téléchargement de l’épisode LesCastCodeurs-Episode-269.mp3

News

Décès de Stéphane Maldini (14 Dec 2021)

  • Une triste nouvelle pour commencer l’épisode avec l’annonce du décès soudain de Stéphane Maldini
  • Un acteur de l’écosystème Grails à la fin des années 2000, grâce à de nombreux plugins
  • Mais plus connu pour avoir cofondé le project Reactor, et popularisé le Reactive Programming au sein de la communauté Java
  • Également à l’origine de R2DBC pour rendre l’accès aux bases de données plus réactif
  • Après de nombreuses années chez Pivotal, il avait rejoint plus récemment Netflix, et c’est peut-être en partie grâce à lui que vous pouviez matter plein de séries !

CloudBees clot un tour de table de 150 millions de dollars valorisant l’entreprise à 1 milliard de dollars

Le feuilleton Log4j2 (9 Dec 2021)

  • Grosse faille de sécurité liée à l’utilisation des versions <2.15 de Log4j2
  • Découverte par un chercheur en sécurité d’Alibaba Cloud
  • Détails publiés par LunaSec
    • Log4j2 permet de faire de l’interpolation de texte en remplaçant des parties variables d’un message à logguer
    • Hors il est possible d’ajouter des appels à des informations JNDI provenant d’un serveur LDAP
    • Un serveur LDAP peut retourner une classe compilée que JNDI va exécuter en local lorsque Log4j2 va vouloir insérer l’information JNDI
    • Donc potentiellement, la classe distante exécutée localement pourra exfiltrer des données, avoir accès aux processus qui tournent, etc.
  • Log4j2 a été patché rapidement, mais d’autres failles sont apparues
  • Différentes stratégies de mitigations ont été publiées
  • Snyk a publié une “cheat sheet” pour remédier à la faille

Langages

Kotlin à l’assaut du K2 avec son nouveau compilo (11 Nov 2021)

  • Lors de sa conférence Kotlin 2021 Premier annoncent des nouveautés autour du langage
  • Le nouveau compilateur plus rapide K2
    • qui sert dorénavant de base pour toutes les plateformes cibles supportées
    • qui apporte une nouvelle API pour créer des extensions au compilateur
    • utilise un langage intermédiaire (IR) au lieu de compiler directement en natif
    • avec un nouveau frontal avec sa propre représentation intermédiaire qui permet de simplifier la compréhension du langage dans les IDEs, pour désugariser le sucre syntaxique
    • rapidité accrue potentiellement jusqu’à 2 fois
  • Le support de WebAssembly avec Kotlin/WASM
    • Kotlin/JS continue d’exister, pour des applis Web, pour l’intégration JavaScript
    • mais Kotlin/WASM apporte le support natif de WebAssembly
  • Kover, un nouveau plugin de couverture de code pour Kotlin/JVM, utilisable avec un plugin Gradle, compatible avec JaCoCo
  • Le Kotlin Symbol Processor, KSP, drivé par Google, est maintenant stable, plus rapide, plus ergonomique d’utilisation (remplace Kapt)

Groovy 4, on y est presque !

  • Sortie de la release candidate de Groovy 4, la finale est proche !
  • Changement des coordonnées Maven pour passer à org.apache.groovy (bye bye Codehaus)
  • Suppression de vieilles coordonnées de packages ou classes mal-situées, à cause des modules Java (XmlSlurper, XmlParser, AntBuilder, GroovyTestCase)
  • Le module groovy-yaml est rajouté au pom groovy-all et le module groovy-testng devient optionnel
  • Le vieux parseur basé sur Antlr2 est supprimé et le parseur introduit dans Groovy 3, “parrot”, reste le seul parseur
  • Le bytecode généré n’utilise plus que l’instruction invokedynamic partout où c’est possible
  • Support des expressions switch
  • Support des sealed types
  • Incubation du support des records
  • Inclusion de type-checkers, par exemple avec le premier pour valider les expressions régulières à la compilation
  • Inclusion de macro pour faciliter le débogage
  • Intégration de JavaShell dans la console Groovy pour faciliter les expérimentations cross-language
  • Nouvelle annotation @POJO pour créer des POJO Java, sans la surcharge de bytecode spécifique à Groovy (pratique pour la compilation statique)
  • Incubation de design by contract avec l’intégration de l’ancien module GContracts
  • GINQ (Groovy Integrated Query) qui propose un langage proche de SQL, similaire à LINQ en .Net, pour faciliter le travail avec les collections
  • Incubation du support pour le langage de configuration TOML

Trisha Gee partage ses nouvelles Java annotés pour le mois de décembre (3 Dec 2021)

Librairies

Nouvelle paire de bottes 2.6 pour Spring Boot (19 Nov 2021)

  • Support des attributs SameSite sur les cookies de session cookies pour les applications à base de servlet
  • Support pour configurer les health groups sur le port principal ou de management
  • Amélioration du endpoint /info avec des infos sur le runtime Java
  • Support pour tester les applis Spring MVC en utilisant WebTestClient
  • Auto-configuration de spring-rabbit-stream
  • Support pour des règles personnalisées de nettoyage/filtrage des propriétés dans /env et configprops

Micronaut 3.2 (23 Nov 2021)

  • Nouvelle version de Micronaut
  • Passage de GraalVM à la version 21.3 avec le support de JDK 17 (il faut maintenant développer a minima avec la distribution GraalVM JDK 11 et non plus 8)
  • Version 3 du plugin GraalVM pour Gradle
  • Support de Kotlin 1.6
  • Fonctionnalités HTTP
    • Annotation @JsonView sur les paramètres annotés @Body
    • Timeout configurable pour le handshake SSL
    • Support amélioré du server push HTTP/2 pour envoyer les resources en parallèle
    • Amélioration WebSocket avec le paramètre WebSocketPongMessage pour l’annotation @OnMessage pour répondre au Ping des WebSockets
    • Support du protocole WS/WSS des WebSockets
  • Différentes mises à jour des modules fonctionnels (Data, Security, Reactive, OpenAPI, Kubernetes, ElasticSearch)

Cédric Champeau compare Gradle et Maven niveau composition et héritage (1 Dec 2021)

  • Gradle et Maven prennent l’approche de “convention over configuration”
  • Couvre les approches différentes entre Gradle et Maven : Maven prends une approche plutôt héritage, tandis que Gradle l’approche composition
  • Les plugins Gradle sont plus faciles à maintenir grâce à la composition et permet de créer ses propres conventions

Infrastructure

GitHub collabore à la sécurité des packages NPM (15 Nov 2021)

  • GitHub est un des stewards du registre des packages NPM
  • GitHub partage des détails sur les incidents de sécurités récents
    • malwares injectés récemment dans ua-parser-js, coa, et rc car un tiers avait réussi à usurper le compte d’un contributeur
    • temporairement, les packages privés étaient potentiellement découvrables sur le réplica de npmjs.com
    • une faille qui a été découverte grâce à un bug bounty qui permettait de publier des versions de certains modules avec des comptes mal-sécurisés
  • GitHub investit dans la sécurité, en particulier en rendant obligatoire la 2-factor-authentication pour les administrateurs et admins des packages les plus populaires hébergés sur GitHub, en rajoutant de la détection de malwares automatique

Jérôme Petazzoni et les anti-patterns Docker (30 Nov 2021)

  • Jérôme partage une liste d’anti-patterns qu’il voit fréquemment quand il aide les gens à construire leurs images de conteneur
  • Parmi les anti-patterns :
    • les trop grosses images, comment les optimiser, comment monter des volumes plutôt que d’inclure de gros dataset dans l’image
    • les trop petites images, mais attention, car parfois on ne peut pas investiguer plus finement ce qui s’y passe
    • utilisation de zip et tar, mieux vaut éviter de compresser pour ne pas utiliser trop de CPU ou d’espace dans l’image
    • re-builder les bases communes : autant mettre l’image de base dans un registry, plutôt que de la re-construire à chaque fois
    • construire l’image à partir d’un monorepo géant et comment organiser ses sources et la localisation de son Dockerfile avec chaque projet
    • ne pas utiliser BuildKit
    • avoir besoin de rebuilder pour chaque changement minime
    • utiliser des scripts customs au lieu des outils existants comme Compose, Skaffold, Tilt et faire ses propres sh
    • obliger les gens à faire tourner certaines choses dans des conteneurs alors que ça peut très bien tourner en local sur la machine du développeur
    • utilisation d’outils trop complexes, autant utiliser des outils appropriés
    • conflit de noms entre scripts et images
    • builder dans des Dockerfiles

Cloud

Le runtime Java pour Google App Engine en Open Source (16 Dec 2021)

  • Toujours dans un esprit d’ouverture pour éviter le lock-in, Ludovic Champenois qui dirige le runtime Java de Google App Engine Java a open sourcé les sources du runtime, du SDK.

Azure : comment les développeurs migrent leurs applis Spring Boot dans le Cloud (2 Dec 2021)

  • Cible en majorité Kubernetes, 2x plus que sur des VMs
  • Challenges spécifiques Spring rencontrés
    • Passer d’un monolith à une version cloud-friendly
    • Migrer d’anciennes versions des composants Spring Cloud
    • Migrer d’anciennes versions de Spring Boot
    • Migrer de servlet vers Boot
  • Migration de Java vers Spring Boot
    • Java vers Boot
    • Java EE vers Boot
    • Spring Framework vers Spring Boot
    • Mainframe vers Spring
  • Challenges spécifiques au Cloud
    • Migration de base de données
    • Monitoring end-to-end
  • Outils d’APM les plus fréquents
    • Outils du provider cloud
    • Prometheus
    • Dynatrace
    • AppDynamics
  • End-to-End monitoring
    • Splunk
    • Elastic
    • Outil du provider cloud
  • Composants Spring les plus fréquemment utilisés
    • Spring Cloud Config Server
    • Spring Cloud Gateway
    • Spring Cloud Service Registry
    • Spring Cloud Load Balancer
    • Spring Cloud Circuit Breaker (Resilience4J)

Web

CSS défensif (7 Dec 2021)

  • Ahmad Shadeed partage de bonnes pratiques CSS, comment écrire du CSS propre, sans comportement bizarroïde suivant les navigateurs, ou qui répond bien de manière responsive
  • Avec des exemples sur l’utilisation de Flexbox, de l’espacement, la gestion du contenu long (et donc du clipping), de l’apparence des images suivant la taille de la fenêtre, les media queries en vertical, le texte au-dessus des images, la gestion des scrollbars.

Le custom CSS Reset de Josh Comeau (23 Nov 2021)

  • Josh Comeau partage une nouvelle version de CSS Reset, non-opinionated pour ce qui est design et cosmétique, mais qui prends certains partis pris (par exemple de l’italique reste italique)
  • Couvre en détail chaque aspect : le box-sizing, les marges par défaut, la hauteur de ligne, des hauteurs basées sur les pourcentages, rendre les polices antialiasées, le word wrapping pour la gestion du retour à la ligne

Google Fonts propose des articles sur l’utilisation des polices de caractères (7 Dec 2021)

  • Elliot Jay Stocks a participé à la base de connaissance et d’articles du Google Fonts Knowledge
  • Introduction à la typographie, comment choisir une bonne taille d’interligne, comprendre les mesures des caractères et des lignes
  • Comment choisir une typographie et une police de caractères
  • Un glossaire sur les termes relatifs aux polices de caractères, à la typographie

Outillage

JetBrains annonce Fleet un nouvel IDE (29 Nov 2021)

  • Développé from scratch
  • Basé sur l’experience de 20 ans à developer des IDEs
  • Fleet utilise le code-processing d’IntelliJ (polyglot)
  • Nouvelle interface graphique
  • Basé sur la librairie graphique 2D Skia (utilisée dans Chrome, Flutter, Android, Firefox…)
  • Rapide et léger (démarre en quelques secondes)
  • Architecture distribuée (tourne sur le PC, remote PC, dans le Cloud)
  • Early Preview, pas encore accessible publiquement à tout le monde

Mac: display_manager et Rectangle (29 Nov 2021)

  • display_manager permet de scripter en ligne de commande la configuration des résolutions des écrans (interne ou externe), de changer la luminosité, la densité de pixel, la fréquence de rafraichissement
  • Rectangle : cette petite application propose des raccourcis clavier pour positionner et retailler les fenêtres, pour les mettre rapidement en plein écran, à gauche/à droite, en quart, en tiers
  • Hammerspoon qui permet d’automatiser mac OS, en rajoutant des raccourcis clavier, en réagissant à des événements comme le branchement d’un appareil sur un port USB, le fait de rejoindre un réseau Wifi

Loi, société et organisation

Un document du FBI liste les données des messageries chiffrées pouvant être récupérées (30 Nov 2021)

  • Même si le contenu des messages n’est pas récupérable, des informations de type méta-données peuvent l’être (date de dernière connection ou de création du compte, avatar, clé publique ou token, nombre de messages postés)

Conférences

Devoxx France du 20 au 22 avril 2021
SunnyTech les 30 juin et 1er juillet 2022 à Montpellier

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 268 - Interview sur GraalVM avec Gilles Duboscq - partie 2

Posté le 01/12/2021

Gilles Duboscq de OracleLabs discute des multiples facettes du projet GraalVM avec Emmanuel. La partie 2 nous emmène vers GraalVM Native image, comment utiliser GraalVM en pratique en fonction des différents usages discutés, les versions, la communauté, comment c’est fait sous le capot et plein d’autres choses encore. Si vous n’avez pas écouté la partie 1, je vous encourage à le faire.

Enregistré le 16 septembre 2021

Téléchargement de l’épisode LesCastCodeurs-Episode-268.mp3

Interview

Ta vie, ton œuvre

Twitter de Gilles

Les concepts clés

La plupart des concepts sont couverts dans la partie 1. La partie 2 fini sur la compilation native avant de passer à la suite.

Native:

  • comment ça fonctionne
  • Un JIT?
  • quel GC
  • Quels avantages
  • Quels inconvénients?

Donc GraalVM c’est une JVM, quelles parties sont reprises de OpenJDK ?

Comment on l’utilise en pratique

Je veux utiliser GraalVM pour mon code nodeJS, je fais comment ?
Je veux utiliser GraalVM comme ma JVM de mon appli Java, je fais comment ?

Je veux faire du native, comment je fais ?

  • concrètement, je dois faire gaffe à quoi ?

GraalVM Community vs Enterprise, quelles sont les différences ?

Sous le capot

Comment on implémente un nouveau langage sur GraalVM ?

Comment on implémente Java sur Java
C’est dur de supporter des nouveaux langages avec leur sémantique et leurs types != de la JVM

Comment l’interprétation de langages s’optimise

Comment les optimisations sont construites ?
Des trucs cools à raconter sur les optimisations ?

C’est un chemin de combien d’années ?

WASM vs GraalVM, comment vous voyez la “standardisation de la VM” derrière WASM ?

La communauté et le futur

Quelle license ?
C’est juste Oracle ?
Pourquoi c’est pas dans OpenJDK ?
Comment la communauté code ensemble ?

Des idées sur là où vous voulez aller ?

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 267 - Lagom efface sa dette technique

Posté le 15/11/2021

Antonio et Emmanuel discutent Microsoft et Java, cryostat, Java 17, Micronaut, Quarkus, Play framework, Lagom, Amazon, CORS, CSS (si si), Hibernate Reactive, AtomicJar, canary, amplification algorithmique.

Enregistré le 12 novembre 2021

Téléchargement de l’épisode LesCastCodeurs-Episode-267.mp3

News

Langages

Blog sur les extraits de code dans les JavaDocs (18 Oct 2021)

  • C’est plus agréable à utiliser que les balises pre, pas besoin d’escaping (pour < et >), l’espace à gauche est normalisé
  • On peut mettre en valeur certaines portions ou remplacer par une expression régulière certains bouts
  • Et on peut également externaliser d’où vient l’extrait de code, au lieu de le mettre dans la JavaDoc, on peut référencer une région de son vrai code.
  • Donc au moins, on est sûr que c’est du code valide et qui compile évidemment
  • Gunnar explique comment reprendre le code provenant de nos classes de test, pour le faire apparaître dans les JavaDocs, créant ainsi une vraie documentation “exécutable”

Compress class space (27 Mars 2019)

  • Compressed object ou class pointer sur 64 bits en 32 bits via une adresse relative
  • À cause de l’adresse relative, la Klass structure dans le metaspace doit être mémoire contiguë et pré allouée initialement (risque de non-réallocation si mémoire libre non contiguë)
  • Donc le class part et le non-class part séparés dans le meta space. Klass is 32G max et contiguë et la klass part est appelée compressed class space
  • Par défaut 1G mais configurable jusqu’à 3G. C’est virtual mémoire, juste une réservation.
  • 1K par classe environ donc un million de classes max
  • Uniquement quand on utilise compressed oops
  • Uniquement pour Java heap size de 32G max

Cryostat 2.0 (18 Oct 2021)

  • Fournit une API sécurisée pour profiler et monitorer les applis Java dans les containers avec Java Flight Recorder
  • Cryostat peut récupérer, stocker et analyser les enregistrements flight recorder des containers
  • Ensuite consommé par Grafana ou l’appli JDK Mission Control desktop
  • Fichier reste local au container par défaut donc pas pratique
  • Connection via JMX directe pas pratique ni secure par défaut
  • Cryostat récupère les recording via HTTPS
  • A un opérateur kubernetes
  • Etc

Microsoft augmente ses investissements dans Java. (4 Nov 2021)

  • Microsoft rejoints le JCP
  • Travaille sur VSCode for Java avec Red Hat
  • Est OK avec le LTS passant à 2 ans et va aider à supporter ces releases plus fréquentes

Librairies

Micronaut 3.1 (11 Oct 2021)

  • support d’applications utilisant JDK 17
  • améliorations d’injections de dépendances (repeatable scopes, primitive beans, etc)
  • les classes générées sont plus petites et amélioration de consommation mémoire sous GraalVM
  • routes HTTP par regexp
  • random port binding (pour les conflits de tests)
  • Changement certificats TLs via refresh sans arrêter le serveur
  • Kotlin coroutines supportées dans micronaut data
  • extension de la couverture de support JPA (par exemple attribute converter)
  • support des informers Kubernetes via le Kubernetes SDK
  • integration Oracle Coherence sortie du mode preview

Quarkus 2.4 (27 Oct 2021)

  • Hibernate Reactive 1.0.0.Final
  • Introducing Kafka Streams DevUI (c’est cool pour développer ça et savoir ce qui se passe)
  • Support continuous testing for multi module projects
  • Support AWT image resize via new AWT extension

Lightbend lâche Play Framework (20 Oct 2021)

  • lightbend construit sur Scala, Akka, et Play Framework
  • C’est le moment de la 2.0 je crois
  • Mais avec le cloud, ils veulent se focaliser sur les systèmes distribués
  • Akka Open Source et Akka Serverless (leur PaaS)
  • Laisse Play à la communauté et Lightbend arrête d’investir dedans
  • Dans une orga séparée
  • Besoin de sponsors et de contributeurs
  • Question : ils n’avaient pas déjà arrêté Scala ?

Lightbend se désinvesti de Lagom aussi (27 Oct 2021)

  • Lagom effacé par Akka Platform et Akka Serverless
  • Trop de contraintes limitantes dans le framework
  • Mais si client de Lightbend, supporté sur Lagom mais sans nouvelle fonctionnalité

Infrastructure

Installer et utiliser podman-machine sur macOS (19 Oct 2021)

  • La virtualisation s’appuie sur qemu et met en place une VM dans laquelle les pods tournent.
  • Podman Machine pour installer une VM Linux avec les outils
  • fonctionne aussi sous Linux pour ceux qui ne supportent pas Podman ou pour sandboxer
  • fonctionne sous M1
  • Homebrew pour l’installation
  • comme Docker Machine avant en gros
  • il y a aussi une belle présentation de Devoxx France

Cloud

Amazon déclaré la guerre à Microsoft en utilisant les arguments “Propriétaire” (28 Oct 2021)

  • Aurora a un front qui sait parler le protocole Microsoft SQL Server (Babelfish pour Aurora PostgreSQL).
  • Et convertit les T-SQL
  • Open source le T-SQL vers Postgres (debug), sous license ASL
  • Pas tout open sourcé encore

Web

CORS expliqué (12 Oct 2021)

  • inclue images d’autres sites, c’est l’origine
  • les cookies, credentials… étaient envoyés
  • Yahoo Mail pouvait filer les credentials des utilisateurs
  • une iFrame pouvait lire le contenu d’une autre iFrame (Netscape met en place le Cross-Frame Scripting)
  • Access-Control-Allow-Origin: * est ok si pas de données privées

Rendre une page HTML brute jolie en 100 caractères de CSS (16 Oct 2021)

  • basique, mais expliqué ligne par ligne
  • 60-80 caractères pour la lecture
  • Et 100 bytes de plus pour améliorer

Data

Elasticsearch 8.0 will require java 17 (3 Nov 2021)

  • definitely easier for something standalone than a library or anything that needs to share the JDK with all its apps
  • PR GitHub

Hibernate Reactive 1.0.0, ça vaut le coup ? (27 Oct 2021)

  • PostgreSQL, MySQL, MariaDB, Db2, SQL Server, and CockroachDB
  • Bases de donnés désignées pour des interactions classiques
  • Donc les constructions haut niveau ont tendances à être limitées par le protocole sous-jacent ce qui ne se voyait pas ou peu en JDBC
  • Utiliser HR si votre appli est déjà réactive au cœur (par exemple RESTEasy reactive dans Quarkus ou une appli Vert.x)
  • Compare perfs avec Techempower mais avec angle latence à un volume donné et pas throughout max
  • 20 requêtes d’affilée 20k request/s → 35k sous 10 ms de latence. C’est la valeur relative qui est intéressante
  • Une requête et du processing pour rendre au client, peu de différence
  • Throughput tend à être meilleur
  • Amélioration de réactive sur un an
  • Un vidéo cast sur le sujet

Outillage

AtomicJar se lance dans une offre Cloud (04 Nov 2021)

  • les containers de test containers ne tournent plus en local
  • Mais dans le cloud de AtomicJar
  • A plus de spores source qu’une machine locale typique (2 cores et 8GB ram pour la docker machine)
  • peut utiliser la machine quand les tests tournent
  • Pour CI limitées vs containers ou les cloud IDE pour pas trop dépenser
  • Pas de problème avec M1
  • Un petit binaire à installer (par exemple via curl)
  • TestContainers et Quarkus : TestContainer Cloud fonctionne avec Dev Service (les containers lancés et configurés automatiquement)
  • Encore en cours de développement (beta privée, on peut demander une invitation)

Méthodologies

Canary releases ou avoir des testeurs (04 Nov 2021)

  • Canary release est une release en prod, mais sur un petit sous ensemble des utilisateurs
  • Peut aider à voir si une nouvelle fonctionnalité intéresse les utilisateurs avant de commiter sur le long terme
  • Toujours option du retour arrière
  • Donc peut-on réduire les tests internes ?
  • Risque de réputation ou abandon utilisateur (acquisition et rétentions sont chères)
  • Tests automatisés compréhensifs permettent le risque de canary
  • Tests exploratoires pour compléter les tests automatiques

Loi, société et organisation

Le droit à decompiler pour corriger des erreurs confirmé légal (21 Oct 2021)

  • Arrêt du 6 octobre 2021
  • Pour corriger une erreur affectant le fonctionnement y compris via la désactivation d’une fonction affectant le bon fonctionnement de l’application

Influence de l’amplification algorithmique sur le contenu politique (21 Octo 2021)

  • Les recommendations algorithmiques amplifient-elles le contenu politique ?
  • Dans le cas des timeline organisées algorithmiquement et pas reverse chronologique
  • Est-ce que ça varie entre partis politiques ou groupes politiques
  • Des sources de nouvelles plus amplifiées que d’autre
  • Les élus sont plus amplifiés que le contenu politique général
  • Pas d’amplification particulière d’individus ces d’autres au sein du même parti ????
  • La droite tend à avoir une amplification plus importante que la gauche
  • Les sources de nouvelles orientées à droite sont aussi plus amplifiées que celles de gauche
  • La méthodologie est détaillée sur par exemple ce qu’est un journal de droite
  • Pourquoi c’est amplifié différemment est une question plus difficile à répondre
  • Amplification n’est pas mauvaise par défaut, mais elle l’est si elle amène à un traitement préférentiel dû à l’algorithme (vs comment les gens interagissent sur la plateforme)
  • Le PDF de l’étude intégrale

Conférences

DevFest Lille le 19 novembre 2021
Devoxx France du 20 au 22 avril 2021
SunnyTech les 30 juin et 1er juillet 2022 à Montpellier

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/


LCC 266 - Interview sur GraalVM avec Gilles Duboscq - partie 1

Posté le 22/10/2021

Gilles Duboscq de OracleLabs discute des multiples facettes du projet GraalVM avec Emmanuel. Dans cette première partie, nous discutons de l’histoire de GraalVM, de ses concepts fondamentaux et nous zoomons sur Truffle, Polyglot et Espresso, le support de JavaScript, Ruby, R, Python, LLVM, WASM… et Java dans GraalVM. La partie 2 nous emmènera vers GraalVM Native image, comment utiliser GraalVM en pratique en fonction des différents usages discutés, les versions, la communauté, comment c’est fait sous le capot et plein d’autres choses encore.

Enregistré le 16 septembre 2021

Téléchargement de l’épisode LesCastCodeurs-Episode-266.mp3

Interview

Ta vie, ton œuvre

Twitter de Gilles

GraalVM pour comprendre l’enjeu

GraalVM

GraalVM en 3 phrases
Les cas d’utilisation typique

Maxine VM

Les concepts clés

Graal le compilateur et le JIT

  • c’est quoi un JIT
  • Pourquoi pas basé sur HotSpot
  • Pourquoi en Java ?
  • des cas d’utilisations préférés par GraalVM JIT vs HotSpot (et vice versa)

Truffle et polyglot

  • Java qui tourne d’autres langages, lesquels ?
  • comment ça marche, génère du byte code ? Interprète ?
  • Comment les codes de différents langages interagissent ?

JavaScript, Ruby, R, Python, LLVM, WASM… et Java
Arbre syntaxique

Espresso:

  • Java sur Java (what??!), ca veut dire quoi exactement?
  • Quels usages?
  • niveau de stabilité, maturité ?

Nous contacter

Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Faire un crowdcast ou une crowdquestion
Contactez-nous via twitter https://twitter.com/lescastcodeurs
sur le groupe Google https://groups.google.com/group/lescastcodeurs
ou sur le site web https://lescastcodeurs.com/