DiscoverLes Cast Codeurs PodcastLCC 333 - A vendre OSS primitif TBE
LCC 333 - A vendre OSS primitif TBE

LCC 333 - A vendre OSS primitif TBE

Update: 2025-12-15
Share

Description

Dans cet épisode de fin d'année plus relax que d'accoutumée, Arnaud, Guillaume, Antonio et Emmanuel distutent le bout de gras sur tout un tas de sujets. L'acquisition de Confluent, Kotlin 2.2, Spring Boot 4 et JSpecify, la fin de MinIO, les chutes de CloudFlare, un survol des dernieres nouveauté de modèles fondamentaux (Google, Mistral, Anthropic, ChatGPT) et de leurs outils de code, quelques sujets d'architecture comme CQRS et quelques petits outils bien utiles qu'on vous recommande. Et bien sûr d'autres choses encore.

Enregistré le 12 décembre 2025

Téléchargement de l'épisode LesCastCodeurs-Episode-333.mp3 ou en vidéo sur YouTube.

News

Langages

Un petit tutoriel par nos amis Sfeiriens montrant comment récupérer le son du micro, en Java, faire une transformée de Fourier, et afficher le résultat graphiquement en Swing https://www.sfeir.dev/back/tutoriel-java-sound-transformer-le-son-du-microphone-en-images-temps-reel/

  • Création d'un visualiseur de spectre audio en temps réel avec Java Swing.
  • Étapes principales :
    • Capture du son du microphone.
    • Analyse des fréquences via la Transformée de Fourier Rapide (FFT).
    • Dessin du spectre avec Swing.
  • API Java Sound (javax.sound.sampled) :
    • AudioSystem : point d'entrée principal pour l'accès aux périphériques audio.
    • TargetDataLine : ligne d'entrée utilisée pour capturer les données du microphone.
    • AudioFormat : définit les paramètres du son (taux d'échantillonnage, taille, canaux).
    • La capture se fait dans un Thread séparé pour ne pas bloquer l'interface.
  • Transformée de Fourier Rapide (FFT) :
    • Algorithme clé pour convertir les données audio brutes (domaine temporel) en intensités de fréquences (domaine fréquentiel).
    • Permet d'identifier les basses, médiums et aigus.
  • Visualisation avec Swing :
    • Les intensités de fréquences sont dessinées sous forme de barres dynamiques.
    • Utilisation d'une échelle logarithmique pour l'axe des fréquences (X) pour correspondre à la perception humaine.
    • Couleurs dynamiques des barres (vert → jaune → rouge) en fonction de l'intensité.
    • Lissage exponentiel des valeurs pour une animation plus fluide.

Un article de Sfeir sur Kotlin 2.2 et ses nouveautés - https://www.sfeir.dev/back/kotlin-2-2-toutes-les-nouveautes-du-langage/

  • Les guard conditions permettent d'ajouter plusieurs conditions dans les expressions when avec le mot-clé if
  • Exemple de guard condition: is Truck if vehicule.hasATrailer permet de combiner vérification de type et condition booléenne
  • La multi-dollar string interpolation résout le problème d'affichage du symbole dollar dans les strings multi-lignes
  • En utilisant $$ au début d'un string, on définit qu'il faut deux dollars consécutifs pour déclencher l'interpolation
  • Les non-local break et continue fonctionnent maintenant dans les lambdas pour interagir avec les boucles englobantes
  • Cette fonctionnalité s'applique uniquement aux inline functions dont le corps est remplacé lors de la compilation
  • Permet d'écrire du code plus idiomatique avec takeIf et let sans erreur de compilation
  • L'API Base64 passe en version stable après avoir été en preview depuis Kotlin 1.8.20
  • L'encodage et décodage Base64 sont disponibles via kotlin.io.encoding.Base64
  • Migration vers Kotlin 2.2 simple en changeant la version dans build.gradle.kts ou pom.xml
  • Les typealias imbriqués dans des classes sont disponibles en preview
  • La context-sensitive resolution est également en preview
  • Les guard conditions préparent le terrain pour les RichError annoncées à KotlinConf 2025
  • Le mot-clé when en Kotlin équivaut au switch-case de Java mais sans break nécessaire
  • Kotlin 2.2.0 corrige les incohérences dans l'utilisation de break et continue dans les lambdas

Librairies

Sprint Boot 4 est sorti ! https://spring.io/blog/2025/11/20/spring-boot-4-0-0-available-now

  • Une nouvelle génération : Spring Boot 4.0 marque le début d'une nouvelle génération pour le framework, construite sur les fondations de Spring Framework 7.
  • Modularisation du code : La base de code de Spring Boot a été entièrement modularisée. Cela se traduit par des fichiers JAR plus petits et plus ciblés, permettant des applications plus légères.
  • Sécurité contre les nuls (Null Safety) : D'importantes améliorations ont été apportées pour la "null safety" (sécurité contre les valeurs nulles) à travers tout l'écosystème Spring grâce à l'intégration de JSpecify.
  • Support de Java 25 : Spring Boot 4.0 offre un support de premier ordre pour Java 25, tout en conservant une compatibilité avec Java 17.
  • Améliorations pour les API REST : De nouvelles fonctionnalités sont introduites pour faciliter le versioning d'API et améliorer les clients de services HTTP pour les applications basées sur REST.
  • Migration à prévoir : S'agissant d'une version majeure, la mise à niveau depuis une version antérieure peut demander plus de travail que d'habitude. Un guide de migration dédié est disponible pour accompagner les développeurs.

Chat memory management dans Langchain4j et Quarkus https://bill.burkecentral.com/2025/11/25/managing-chat-memory-in-quarkus-langchain4j/

  • Comprendre la mémoire de chat : La "mémoire de chat" est l'historique d'une conversation avec une IA. Quarkus LangChain4j envoie automatiquement cet historique à chaque nouvelle interaction pour que l'IA conserve le contexte.
  • Gestion par défaut de la mémoire : Par défaut, Quarkus crée un historique de conversation unique pour chaque requête (par exemple, chaque appel HTTP). Cela signifie que sans configuration, le chatbot "oublie" la conversation dès que la requête est terminée, ce qui n'est utile que pour des interactions sans état.
  • Utilisation de @MemoryId pour la persistance : Pour maintenir une conversation sur plusieurs requêtes, le développeur doit utiliser l'annotation @MemoryId sur un paramètre de sa méthode. Il est alors responsable de fournir un identifiant unique pour chaque session de chat et de le transmettre entre les appels.
  • Le rôle des "scopes" CDI : La durée de vie de la mémoire de chat est liée au "scope" du bean CDI de l'IA. Si un service d'IA a un scope @RequestScoped, toute mémoire de chat qu'il utilise (même via un @MemoryId) sera effacée à la fin de la requête.
  • Risques de fuites de mémoire : Utiliser un scope large comme @ApplicationScoped avec la gestion de mémoire par défaut est une mauvaise pratique. Cela créera une nouvelle mémoire à chaque requête qui ne sera jamais nettoyée, entraînant une fuite de mémoire.
  • Bonnes pratiques recommandées :
    • Pour des conversations qui doivent persister (par ex. un chatbot sur un site web), utilisez un service @ApplicationScoped avec l'annotation @MemoryId pour gérer vous-même l'identifiant de session.
    • Pour des interactions simples et sans état, utilisez un service @RequestScoped et laissez Quarkus gérer la mémoire par défaut, qui sera automatiquement nettoyée.
    • Si vous utilisez l'extension WebSocket, le comportement change : la mémoire par défaut est liée à la session WebSocket, ce qui simplifie grandement la gestion des conversations.

Documentation Spring Framework sur l'usage JSpecify - https://docs.spring.io/spring-framework/reference/core/null-safety.html

  • Spring Framework 7 utilise les annotations JSpecify pour déclarer la nullabilité des APIs, champs et types
  • JSpecify remplace les anciennes annotations Spring (@NonNull, @Nullable, @NonNullApi, @NonNullFields) dépréciées depuis Spring 7
  • Les annotations JSpecify utilisent TYPE_USE contrairement aux anciennes qui utilisaient les éléments directement
  • L'annotation @NullMarked définit par défaut que les types sont non-null sauf si marqués @Nullable
  • @Nullable s'applique au niveau du type usage, se place avant le type annoté sur la même ligne
  • Pour les tableaux : @Nullable Object[] signifie éléments nullables mais tableau non-null, Object @Nullable [] signifie l'inverse
  • JSpecify s'applique aussi aux génériques : List signifie liste d'éléments non-null, List<@Nullable String> éléments nullables
  • NullAway est l'outil recommandé pour vérifier la cohérence à la compilation avec la config NullAway:OnlyNullMarked=true
  • IntelliJ IDEA 2025.3 et Eclipse supportent les annotations JSpecify avec analyse de dataflow</
Comments 
00:00
00:00
x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

LCC 333 - A vendre OSS primitif TBE

LCC 333 - A vendre OSS primitif TBE