LCC 315 - les températures ne sont pas déterministes
Description
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'ecosysteme
- quelques liens sur Babylon: Code reflection pour exprimer des langages etranger (SQL) dans Java: https://openjdk.org/projects/babylon/ et sont example 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 faire quelques changements et evolution incompatibles https://microprofile.io/2024/08/22/microprofile–7–0-release/#general
- enleve Metrics et remplace avec Telemetry (metrics, log et tracing)
- Metrics reste une spec mais standalone
- Microprofile 7 depende de Jakarta Core profile et ne le package plus
- Microprofile OpenAPI 4 et Telemetry 2 amenent des changements incompatibles
Quarkus 3.14 avec LetsEncrypt et des serialiseurs JAckson sans reflection https://quarkus.io/blog/quarkus–3–14–1-released/
- Hibernate ORM 6.6
- Serialisateurs JAckson sans reflection
- installer des certificats letsencrypt simplement (notamment avec la ligne de commande qui aide
- sympa notamment avec ngrok pour faire un tunnel vers son localhost
- retropedalage sur
@QuarkusTestResourcevs@WithTestResourcesuite aux retour de OOME et lenteur des tests mieux isolés
Les logs structurées dans Spring Boot 3.4 https://spring.io/blog/2024/08/23/structured-logging-in-spring-boot–3–4
- Les logs structurées (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 proprietaire avec source available https://www.cockroachlabs.com/blog/enterprise-license-announcement/
Polyform project offre des licences standardisees selon les besoins de gratuit vs payant https://polyformproject.org/
Cloud
Azure fonctions, comment le demarrage a froid est optimisé https://www.infoq.com/articles/azure-functions-cold-starts/?utm_campaign=infoq_content&utm_source=twitter&utm_medium=feed&utm_term=Cloud
- fonctions ont une latence naturelle forte
- toutes les lantences longues ne sont aps impactantes pour le business
- les demarrages a froid peuvent etre mesures avec les outils du cloud provider donc faites en usage
- faites des decentilers de latences
- experience 381 ms cold et 10ms apres
- tracing pour end to end latence
- les strategies
- keep alive pings: reveiller la fonctione a intervalles reguliers pour rester "warm"
- dans le code de la fonction: initialiser les connections et le chargement des assemblies dans l'initialization
- configurer dans host.json le batching, desactiver file system logging etc
- deployer les fonctions as zips
- reduire al taille du code et des fichiers (qui sont copies sur le serveur froid)
- sur .net activer ready to run qui aide le JIT compiler
- instances azure avec plus de CPU et memoire sont plus cher amis baissent le cold start
- dedicated azure instances pour vos fonctions (pas aprtage 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 floatants 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/
- en utilisant la classe
TextClassificationde LangChain4j, qui utilise une approche basée sur les vector embeddings pour comparer des textes similaires - en utilisant du few-shot prompting, sous différentes variantes, dans cet autre article : https://glaforge.dev/posts/202




