JVM summit, virtual threads, stacks applicatives, licences, déterminisme et LLMs, quantification, deux outils de l’épisode et bien plus encore.

Enregistré le 13 septembre 2024

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

News

Langages

Netflix utilise énormément Java et a rencontré un problème avec les Virtual Thread dans Java 21. Les ingénieurs de Netflix analysent ce problème dans cet article : https://netflixtechblog.com/java-21-virtual-threads-dude-wheres-my-lock-3052540e231d

  • Les threads virtuels peuvent améliorer les performances, mais posent des défis.
  • Un problème de locking a été identifié : les threads virtuels se bloquent mutuellement.
  • Cela entraîne des performances dégradées et des instabilités.
  • Netflix travaille à résoudre ces problèmes et à tirer pleinement parti des threads virtuels.

Une syntax pour indiquer qu’un type est nullable ou null-restricted arriverait dans Java https://bugs.openjdk.org/browse/JDK-8303099

  • Foo! interdirait null.
  • Foo? indiquerait que null est accepté.
  • Foo?[]! serait un tableau non-null de valeur nullable.
  • Il y a aussi des idées de syntaxe pour initialiser les tableaux null-restricted.
  • JEP: https://openjdk.org/jeps/8303099.

Les vidéos du JVM Language Summit 2024 sont en ligne https://www.youtube.com/watch?v=OOPSU4LnKg0&list=PLX8CzqL3ArzUEYnTa6KYORRbP3nhsK0L1

  • Project Leyden Update.
  • Project Babylon - Code Reflection.
  • Valhalla - Where Are We? .
  • An Opinionated Overview on Static Analysis for Java Rethinking Java String Concatenation.
  • Code Reflection in Action - Translating Java to SPIR-V Java in 2024.
  • Type Specialization of Java Generics - What If Casts Have Teeth ? (avec notre Rémi Forax national !).
  • Aussi tip or tail pour tout l’écosystème.
  • Quelques liens sur Babylon : Code reflection pour exprimer des langages étrangers (SQL) dans Java (https://openjdk.org/projects/babylon/) et son exemple en emulation de LINQ (https://openjdk.org/projects/babylon/articles/linq).

Librairies

Micronaut sort sa version 4.6 https://micronaut.io/2024/08/26/micronaut-framework-4-6-0-released/

  • essentiellement une grosse mise à jour de tonnes de modules avec les dernières versions des dépendances

Microprofile 7 va faire quelques changements et évolutions incompatibles https://microprofile.io/2024/08/22/microprofile-7-0-release/#general

  • Remplacement de Metrics par Telemetry (metrics, log et tracing).
  • Metrics reste une spec mais standalone.
  • Microprofile 7 depend de Jakarta Core profile et ne le package plus.
  • Microprofile OpenAPI 4 et Telemetry 2 amènent des changements incompatibles.

Quarkus 3.14 avec LetsEncrypt et des sérialiseurs Jackson sans reflection https://quarkus.io/blog/quarkus-3-14-1-released/

  • Hibernate ORM 6.6.
  • Sérialiseurs Jackson sans reflection.
  • Installation simple des certificats LetsEncrypt (notamment avec la ligne de commande qui aide).
  • Sympa notamment avec ngrok pour faire un tunnel vers son localhost.
  • Rétropédalage sur @QuarkusTestResource vs @WithTestResource suite aux retours de OOME et lenteur des tests mieux isolés.

Les logs structurés dans Spring Boot 3.4 https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot-3-4

  • Les logs structurés (souvent en JSON) vous permettent de les envoyer facilement vers des backends comme Elastic, AWS CloudWatch…
  • Vous pouvez les lier à du reporting et de l’alerting.
  • Spring Boot 3.4 prend en charge la journalisation structurée par défaut. Il prend en charge les formats Elastic Common Schema (ECS) et Logstash, mais il est également possible de l’étendre avec vos propres formats.
  • Vous pouvez également activer la journalisation structurée dans un fichier. Cela peut être utilisé, par exemple, pour imprimer des journaux lisibles par l’homme sur la console et écrire des journaux structurés dans un fichier pour l’ingestion par machine.

Infrastructure

CockroachDB, qui avait une approche Business Software License (source available puis ALS 3 ans apres), passe maintenant en license propriétaire avec source available https://www.cockroachlabs.com/blog/enterprise-license-announcement/

Polyform project offre des licences standardisées selon les besoins de gratuit vs payant https://polyformproject.org/

Cloud

Azure fonctions, comment le démarrage à froid est optimisé https://www.infoq.com/articles/azure-functions-cold-starts/

  • Les fonctions ont une latence naturelle forte.
  • Toutes les latences ne sont pas impactantes pour le business.
  • Les démarrages à froid peuvent être mesurés avec les outils du cloud provider, donc faites en usage.
  • Faites des tests de latences.
  • Expérience : 381 ms cold et 10ms après.
  • Tracing pour la latence end-to-end.
  • Les strategies :
    • Keep alive pings : réveiller la fonction à intervalles réguliers pour rester “warm”.
    • Dans le code de la fonction : initialiser les connections et le chargement des assemblies dans l’initialisation.
    • Configurer dans host.json le batching, désactiver le file system logging…
    • Déployer les fonctions en tant que ZIPs.
    • Réduire la taille du code et des fichiers (qui sont copiés sur le serveur froid).
    • Sur .NET, activer ReadyToRun qui aide le compilateur JIT.
    • Les instances Azure avec plus de CPU et de mémoire sont plus chères, mais baissent le cold start.
    • Instances Azure dédiées pour vos fonctions (pas partagées avec les autres tenants).
  • ensuite montre des exemples concrets

Web

Sortie de Vue.js 3.5 https://blog.vuejs.org/posts/vue-3-5

  • Vue.JS 3.5 : Nouveautés clés
  • Optimisations de performance et de mémoire :
    • Réduction significative de la consommation de mémoire (-56%).
    • Amélioration des performances pour les tableaux réactifs de grande taille.
    • Résolution des problèmes de valeurs calculées obsolètes et de fuites de mémoire.
  • Nouvelles fonctionnalités :
    • Reactive Props Destructure : Simplification de la déclaration des props avec des valeurs par défaut.
    • Lazy Hydration : Contrôle de l’hydratation des composants asynchrones.
    • useId() : Génération d’ID uniques stables pour les applications SSR.
    • data-allow-mismatch : Suppression des avertissements de désynchronisation d’hydratation.
    • Améliorations des éléments personnalisés : Prise en charge de configurations d’application, d’API pour accéder à l’hôte et au shadow root, de montage sans Shadow DOM, et de nonce pour les balises.
    • useTemplateRef() : Obtention de références de modèle via l’API useTemplateRef().
    • Teleport différé : Téléportation de contenu vers des éléments rendus après le montage du composant.
    • onWatcherCleanup() : Enregistrement de callbacks de nettoyage dans les watchers.

Data et Intelligence Artificielle

On entend souvent parler de Large Language Model quantisés, c’est-à-dire qu’on utilise par exemple des entiers sur 8 bits plutôt que des flottants sur 32 bits, pour réduire les besoins mémoire des GPU tout en gardant une précision proche de l’original. Cet article explique très visuellement et intuitivement ce processus de quantisation : https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization

Guillaume continue de partager ses aventures avec le framework LangChain4j. Comment effectuer de la classification de texte : https://glaforge.dev/posts/2024/07/11/text-classification-with-gemini-and-langchain4j/

Pour faire varier la prédictibilité ou la créativité des LLMs, certains hyperparamètres peuvent être ajustés, comme la température, le top-k et le top-p. Mais est-ce que vous savez vraiment comment fonctionnent ces paramètres ? Deux articles très clairs et intuitifs qui expliquent leur fonctionnement : https://medium.com/google-cloud/is-a-zero-temperature-deterministic-c4a7faef4d20, https://medium.com/google-cloud/beyond-temperature-tuning-llm-output-with-top-k-and-top-p-24c2de5c3b16

  • La température va écraser la probabilité du prochain token, mais il reste des variables : approximation des calculs flottants, stacks différentes effectuant ces choix différemment, que faire en cas d’égalité de probabilité entre deux tokens.
  • Mais il y a d’autres approches de configuration des réactions du LLM : top-k, qui évite les tokens peu frequents, et top-p pour avoir les n tokens qui totalisent p% des probabilités.
  • Température d’abord, puis top-k, et ensuite top-p.
  • Explique quoi utiliser quand.

L’OSI propose une definition de l’IA open source https://www.technologyreview.com/2024/08/22/1097224/we-finally-have-a-definition-for-open-source-ai/

  • Gros débats ces derniers mois.
  • Utilisable pour tous les usages sans besoin de permission.
  • Les chercheurs peuvent inspecter les composants et étudier comment le système fonctionne.
  • Le système est modifiable pour tout objectif, y compris changer son comportement.
  • Et partager avec d’autres avec ou sans modification quelque soit l’usage.
  • Définit des niveaux de transparence (donnees d’entraînement, code source, poids).

Une longue rétrospective de PostgreSQL à des volumes de malades et les problèmes de lock https://ardentperf.com/2024/03/03/postgres-indexes-partitioning-and-lwlocklockmanager-scalability/

  • Un article pour vous rassurer que vous n’aurez probablement jamais le problème.
  • Histoire sous forme de post mortem.
  • Des conseils pour éviter ces falaises.

Outillage

Un premier coup d’œil à la future notation déclarative de Gradle https://blog.gradle.org/declarative-gradle-first-eap

  • Un article qui explique à quoi ressemble cette nouvelle syntaxe déclarative de Gradle (en plus de Groovy et Kotlin).
  • Quelques vidéos montrent le support dans Android Studio (pour le moment) ainsi que dans un outil expérimental, en attendant le support dans tous les IDEs.
  • L’idée est d’éviter le scripting et d’avoir vraiment qu’une description de son build.
  • Cela devrait améliorer la prise en charge de Gradle dans les IDEs et permettre d’avoir de la complétion rapide, etc.
  • C’est moi ou on a Maven là ?

Support de Firefox dans Puppeteer https://hacks.mozilla.org/2024/08/puppeteer-support-for-firefox/

  • Puppeteer, la bibliothèque d’automatisation de navigateur, supporte désormais officiellement Firefox dès la version 23.
  • Cette avancée permet aux développeurs d’écrire des scripts d’automatisation et d’effectuer des tests de bout en bout sur Chrome et Firefox de manière interchangeable.
  • L’intégration de Firefox dans Puppeteer repose sur WebDriver BiDi, un protocole inter-navigateurs en cours de standardisation au W3C.
  • Le WebDriver BiDi facilite la prise en charge de plusieurs navigateurs et ouvre la voie à une automatisation plus simple et plus efficace.
  • Les principales fonctionnalités de Puppeteer, telles que la capture de journaux, l’émulation de périphériques, l’interception réseau et le préchargement de scripts, sont désormais disponibles pour Firefox.
  • Mozilla considère WebDriver BiDi comme une étape importante vers une meilleure expérience de test inter-navigateurs.
  • La prise en charge expérimentale de CDP (Chrome DevTools Protocol) dans Firefox sera supprimée fin 2024 au profit de WebDriver BiDi.
  • Bien que Firefox soit officiellement pris en charge, certaines API restent non prises en charge et feront l’objet de travaux futurs.

Guillaume a créé une annotation @Retry pour JUnit 5, pour retenter l’exécution d’un test qui est “flaky” https://glaforge.dev/posts/2024/09/01/a-retryable-junit-5-extension/

Architecture

Un ancien fan de GraphQL en a fini avec la technologie GraphQL et réfléchit aux alternatives https://bessey.dev/blog/2024/05/24/why-im-over-graphql/

  • Problèmes de GraphQ L:
    • Sécurité :
      • Attaques d’autorisation
      • Difficulté de limitation de débit
      • Analyse de requêtes malveillantes
    • Performance :
      • Problème N+1 (récupération de données et autorisation)
      • Impact sur la mémoire lors de l’analyse de requêtes invalides
    • Complexité accrue :
      • Couplage entre logique métier et couche de transport
      • Difficulté de maintenance et de tests
  • Solutions envisagées :
    • Adoption d’API REST conformes à OpenAPI 3.0+
      • Meilleure documentation et sécurité des types
      • Outils pour générer du code client/serveur typé
    • Deux approches de mise en œuvre d’OpenAPI :
      • “Implementation first” (génération de la spécification à partir du code)
      • “Specification first” (génération du code à partir de la spécification)
  • retour intéressant de quelqu’un qui n’utilise pas GraphQL au quotidien. C’étaient des problèmes qui devaient être corrigés avec la maturité de l’écosystème et des outils, mais ça a montré ses limites pour cette personne.

Presentation de Grace Hopper en 1980 sur le futur des ordinateurs https://youtu.be/AW7ZHpKuqZg?si=w_o5_DtqllVTYZwt

  • C’est fou la modernité de ce qu’elle décrit.
  • Des problèmes qu’on a encore aujourd’hui.
  • Positive leadership.
  • Elle décrit l’avantage de systèmes fait de plusieurs ordinateurs.
  • Récemment déclassifié.

Leader election avec les conditional writes sur les buckets S3/GCS/Azure https://www.morling.dev/blog/leader-election-with-s3-conditional-writes/

  • L’élection de leader est le processus de choisir un nœud parmi plusieurs pour effectuer une tâche.
  • Traditionnellement, l’élection de leader se fait avec un service de verrouillage distribué comme ZooKeeper.
  • Amazon S3 a récemment ajouté le support des écritures conditionnelles, ce qui permet l’élection de leader sans service séparé.
  • L’algorithme d’élection de leader fonctionne en faisant concourir les nœuds pour créer un fichier de verrouillage dans S3.
  • Le fichier de verrouillage inclut un numéro d’époque, qui est incrémenté à chaque fois qu’un nouveau leader est élu.
  • Les nœuds peuvent déterminer s’ils sont le leader en listant les fichiers de verrouillage et en vérifiant le numéro d’époque.
  • Attention : il peut y avoir plusieurs leaders élus (horloges qui ont dérivé) donc c’est à gérer aussi.

Méthodologies

Guillaume Laforge interviewé par Sfeir, où il parle de l’importance de la curiosité, du partage, de l’importance de la qualité du code, et parsemé de quelques photos des Cast Codeurs ! https://www.sfeir.dev/success-story/guillaume-laforge-maestro-de-java-et-esthete-du-code-propre/

Sécurité

Comment crowdstrike met à genoux windows et de nombreuses entreprises https://next.ink/144464/crowdstrike-donne-des-details-techniques-sur-son-fiasco/

Les benchmarks CIS, un pilier pour la sécurité de nos environnements cloud, et pas que ! (Katia HIMEUR TALHI) https://blog.cockpitio.com/security/cis-benchmarks/

  • Le CIS est un organisme à but non lucratif qui élabore des normes pour améliorer la cybersécurité.
  • Les référentiels CIS sont un ensemble de recommandations et de bonnes pratiques pour sécuriser les systèmes informatiques.
  • Ils peuvent être utilisés pour renforcer la sécurité, se conformer aux réglementations et normaliser les pratiques.

Loi, société et organisation

Microsoft signe un accord avec OVHCloud pour qu’ils arrêtent leur plainte d’antitrust https://www.politico.eu/article/microsoft-signs-antitrust-truce-with-ovhcloud/

  • La plainte était en Europe.
  • Permet à des clients de plus facilement déployer les solutions Microsoft dans le fournisseur de cloud de leur choix.
  • La plainte avait été posée à l’été 2021.
  • Ça rendait à faire tourner les solutions MS plus chères et non compétitives vs MS.

ElasticSearch et Kibana sont de nouveau Open Source, en ajoutant la license AGPL à ses autres licences existantes https://www.elastic.co/fr/blog/elasticsearch-is-open-source-again

Outils de l’épisode

MailMate un client email Markdown et qui gère beaucoup d’emails https://medium.com/@nicfab/mailmate-a-powerful-client-email-for-macos-markdown-integrated-email-composition-e218fe2accf3

  • Emmanuel l’utilise sur ses boites email secondaires.
  • Un peu lent à démarrer (synchro) et le reste est rapide.
  • Boîtes virtuelles (par requête).
  • SpamSieve.
  • Que macOS je crois.

Trippy, un analyseur de réseau https://github.com/fujiapple852/trippy

  • Il regroupe dans une CLI traceroute et ping.

Conférences

La liste des conférences provenant de Developers Conferences Agenda/List par Aurélie Vache et contributeurs :

Nous contacter

Pour réagir à cet épisode, venez discuter sur le groupe Google https://groups.google.com/group/lescastcodeurs

Contactez-nous via twitter https://twitter.com/lescastcodeurs
Faire un crowdcast ou une crowdquestion
Soutenez Les Cast Codeurs sur Patreon https://www.patreon.com/LesCastCodeurs
Tous les épisodes et toutes les infos sur https://lescastcodeurs.com/