Katia, Guillaume, Emmanuel et Antonio discutent Kotlin, Micronaut, Spring Boot, Quarkus, Langchain4j, LLMs en Java, builds reproductibles et la question AMA du jour, comment fait-on carrière de dev à 40 ans ?

Enregistré le 14 juin 2024

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

News

Langages

Android avec Kotlin Multiplatform our Flutter avec Dart ? https://developers.googleblog.com/en/making-development-across-platforms-easier-for-developers/

  • Des licenciements ont continué chez Google et l’équipe Flutter/Dart comme plein d’autres ont été touchées, mais sur les réseaux sociaux les gens ont pensé que Google désinvestissait dans Flutter et Dart.
  • Par ailleurs, côté Android, ils poussent plutôt du côté de Kotlin et KMP, mais naturellement aussi les gens se sont demandé si Google avait pris parti pour pousser plus Kotlin/KMP plutôt que Flutter/Dart.
  • Pour essayer de mieux faire comprendre aux développeurs l’intérêt des deux plateformes, et leurs avantages et inconvénients, les directeurs des deux plateformes ont rédigé un article commun.
  • Si l’on souhaite une expérience plus proche du hardware et des dernières nouveautés d’Android, et d’avoir aussi une UI/UX vraiment native Android, mieux vaut aller du côté de Kotlin/KMP.
  • Si l’on souhaite par contre une expérience multiplateforme Web, mobile, desktop avec une UX commune cross-plateforme, avec également le partage de business logic à partir d’une même base de code, Flutter et Dart sont plus adaptés.

Recap de KotlinConf https://x.com/gz_k/status/1793887581433971083?s=46&t=C18cckWlfukmsB_Fx0FfxQ

  • RPC multiplatform
  • La présentation Grow with the flow montrant la réécriture en Kotlin plus simple que des solutions complexes ailleurs.
  • Power-assert pour écrire des tests
  • Kotlin 2.0 et les évolutions majeures
  • Kotlin multiplatform maintenant stable
  • Kotlin Compose Multiplatform continue a maturer
  • Retour d’expérience de la migration d’Android Jetpack vers Kotlin Multiplatform
  • Use cases de coroutines et scope.

Librairies

Quarkus veut aller dans une fondation https://quarkus.io/blog/quarkus-in-a-foundation/

  • Améliorer l’adoption (encore plus), améliorer la transparence, et la collaboration, encourager la participation multi-vendeur
  • Première étape : une gouvernance plus ouverte.
  • Deuxième étape : bouger dans une fondation.
  • Échange avec la communauté sur la proposition et les fondations cibles.
  • Des critères pour la fondation (notamment la rapidité de delivery).

Quarkus 3.11 https://quarkus.io/blog/quarkus-3-11-0-released/

  • Websocket.next en cours.
  • Dev services pour observabilité (Grafana, Jaeger, Open Telemetry).
  • Extension Infinispan cache.
  • #38448 - Observability extensions - Dev Services, Dev Resources, LGTM.
  • #39836 - Infinispan Cache Extension.
  • #40309 - WebSockets Next: client endpoints.
  • #40534 - WebSockets Next: initial version of security integration.
  • #40273 - Allow quarkus:run to launch Dev Services.
  • #40539 - Support for OIDC session expired page.
  • #40600 - Introduce OidcRedirectFilter.

LangChain4j 0.31 est sorti https://github.com/langchain4j/langchain4j/releases/tag/0.31.0

  • Recherche Web pour le RAG avec Google et Tavily.
  • RAG avec les bases de données SQL (expérimental).
  • Récupération des resources remontées par le RAG lorsque AiServices retourne un Result<T>.
  • Observabilité LLM pour OpenAI pour être notifié des requêtes, réponses et erreurs.
  • Intégration de Cohere (embedding), Jina (embedding et re-ranking scoring), Azure CosmosDB comme embedding store.
  • Mise à jour de Gemini avec le parallel function calling et les instructions système.

Spring Boot 3.3.0 est sorti https://spring.io/blog/2024/05/23/spring-boot-3-3-0-available-now

  • Support DE Class Data Sharing (CDS).
  • Micrometer support de spantag, etc.
  • Amelioration Spring Security comme JwtAuthenticationConverter.
  • Support docker compose pour les images de conteneur Bitnami.
  • Virtual thread pour les websockets.
  • Support SBOM via an actuator.
  • SNI for embedded web servers.
  • Une nouvelle doc via Antora.

Micronaut 4.5 est sortie https://github.com/micronaut-projects/micronaut-platform/releases/tag/v4.5.0

  • Le serveur basé sur Netty inclus la détection d’opération bloquante et les modules l’utilisant indiqueront à l’utilisateur quand certaines opérations peuvent être redirigées plutôt sur un virtual thread ou dans le thread pool IO.
  • Micronaut Data inclus le support de la multitenance avec partitionnement par discriminateur pour JDBC et R2DBC.
  • Micronaut Data rajoute la pagination par curseur pour JDBC et R2DBC (important aussi pour Jakarta Data).
  • Support des annotations Jakarta Servlet pour configurer par exemple les servlet filters.
  • Support virtual thread et HTTP/2 .
  • Un nouveau module JSON Schema pour générer des JSON Schemas pour les records Java.
  • Un nouveau module Source Gen pour faire de la génération de source pour Java et Kotlin cross-langage.
  • Un nouveau module Guice pour importer des modules Guice existants.

Web

Angular 18 est sorti https://blog.angular.dev/angular-v18-is-now-available-e79d5ac0affe

  • Support expérimental pour la détection de changement sans zone.
  • Angular.dev est désormais le nouveau site pour les développeurs Angular.
  • Material 3, les deferrable views, le built-in control flow sont maintenant stables et intègrent une série d’améliorations.
  • Améliorations du rendu côté serveur telles que le support de l’hydratation i18n, un meilleur débogage, le support de l’hydratation dans Angular Material, et la event replay qui utilise la même bibliothèque que Google Search.

Data et Intelligence Artificielle

Une version pure Java du LLM Llama3 de Meta https://github.com/mukel/llama3.java/tree/main

  • Utilise la future API Vector de Java.

JLama, un moteur d’exécution de LLM en Java avec l’API vector https://www.infoq.com/news/2024/05/jlama-llm-inference-java/

  • Basé sur llama.c qui est un moteur d’inférence de LLM (l’exécution des requêtes).
  • JLama implémenté avec vector APIs et PanamaTensorOperations.
  • Plusieurs alternatives (native binding, implementation pure en Java, Scala, Kotlin).

Target Speech Hearing https://www.infoq.com/news/2024/05/target-speech-hearing/

  • Nouvel algo de Deep Learning de l’Université de Washington permet d’écouter une seule personne de ton choix et effacer tout le bruit autour.
  • le système nécessite que la personne portant les écouteurs appuie sur un bouton tout en regardant quelqu’un parler ou simplement en le fixant pendant trois à cinq secondes.
  • Permet à un modèle d’apprendre les schémas vocaux du locuteur et de s’y attacher pour pouvoir les restituer à l’auditeur, même s’il se déplace et cesse de regarder cette personne.
  • Selon les chercheurs, cela constitue une avancée significative par rapport aux écouteurs à réduction de bruit existants, qui peuvent annuler efficacement tous les sons, mais ne peuvent pas sélectionner les locuteurs en fonction de leurs caractéristiques vocales.
  • Actuellement, le système ne peut enregistrer qu’un seul locuteur à la fois. Une autre limitation est que l’enregistrement ne réussira que si aucune autre voix forte ne provient de la même direction.
  • L’équipe a mis en open source leur code et leur jeu de données afin de faciliter les travaux de recherche futurs pour améliorer l’audition de la parole cible.

Outillage

Utiliser LLM pour migrer du framework de testing https://www.infoq.com/news/2024/06/slack-automatic-test-conversion/

  • Slack a migré 15.000 tests de Enzyme à React Testing Library avec un succès de 80%.
  • Migration nécessaire pour le manque de support de Enzyme pour React 18.
  • L’équipe a essayé d’automatiser la conversion avec des transformations AST, mais n’a atteint que 45 % de succès à cause de la complexité des méthodes d’Enzyme et du manque d’accès aux informations contextuelles du DOM.
  • L’équipe a utilisé Claude 2.1 pour la conversion, avec des taux de réussite variant de 40 % à 60 %, les résultats dépendant largement de la complexité des tâches.
  • Suite aux résultats insatisfaisants, l’équipe a décidé d’observer comment les développeurs humains abordaient la conversion des tests unitaires.
  • Les développeurs humains utilisaient leurs connaissances sur React, Enzyme et RTL, ainsi que le contexte du rendu et les conversions AST de l’outil initial pour mieux convertir les tests unitaires.
  • Finalement les ingénieurs de Slack ont combiné transformations AST et LLM en intégrant des composants React rendus et des conversions AST dans les invites, atteignant un taux de réussite de 80 % démontrant ainsi la complémentarité de ces technologies.
  • Claude 2.1 est un modèle de langage de grande taille (LLM) annoncé en novembre 2023 par Anthropic. Il inclut une fenêtre contextuelle de 200 000 tokens, des réductions significatives des taux d’hallucination du modèle, des invites système et permet l’utilisation d’outils. Depuis, Anthropic a introduit la famille de modèles Claude 3, composée de trois modèles distincts, avec des capacités multimodales et une compréhension contextuelle améliorée.
  • Un arbre de syntaxe abstraite (AST) est une représentation arborescente de la structure syntaxique abstraite du code source écrit dans un langage de programmation. Chaque nœud de l’arbre représente une construction du code source. Un arbre de syntaxe se concentre sur la structure et le contenu nécessaires pour comprendre la fonctionnalité du code. Les AST sont couramment utilisés dans les compilateurs et les interpreters pour analyser et examiner le code, permettant diverses transformations, optimisations et traductions lors de la compilation.

IDE de test de JetBrains https://blog.jetbrains.com/qa/2024/05/aqua-general-availability/

  • Aqua, le premier IDE conçu pour l’automatisation des tests, supporte plusieurs langages (Java, Python, JavaScript, TypeScript, Kotlin, SQL) et frameworks de tests (Selenium, Playwright, Cypress).
  • Pourquoi ? Les tests d’applications nécessitent des compétences spécifiques. Aqua, un IDE adapté, est recommandé par les ingénieurs en automatisation des tests.
  • Aqua propose deux plans de licence : un gratuit pour les usages non commerciaux et un payant pour les usages commerciaux.
  • Ça me parait un peu contre intuitif à l’heure du devops et du TDD de faire des outils dédiés et donc des équipes ou personnes dédiées.

Méthodologies

Les 10 principes à suivre, selon le créateur de cURL, pour être un bon BDFL (Benevolent Dictator For Life) https://daniel.haxx.se/blog/2024/05/27/my-bdfl-guiding-principles/

  • Être ouvert et amical.
  • Livrer des produits solides comme le roc.
  • Être un leader de l’Open Source.
  • Privilégier la sécurité.
  • Fournir une documentation de premier ordre.
  • Rester indépendant.
  • Répondre rapidement.
  • Suivre l’actualité.
  • Rester à la pointe de la technologie.
  • Respecter les retours d’information.
  • Dans un vieil article de Artima, Guido Van Rossum, le créateur de Python et premier BDFL d’un projet, se remémore un échange de 1995 qui est à l’origine de ce concept https://www.artima.com/weblogs/viewpost.jsp?thread=235725.
  • Guido Van Rossum a été le premier à endosser ce “rôle”.

Un site compréhensif sur les build reproductibles https://reproducible-builds.org

  • Longue doc.
  • De la définition aux méthodes pour résoudre des problèmes spécifiques.

Masterclass de Fabien Olicard : Le Palais Mental https://www.youtube.com/watch?v=u6wu_iY4xd8

  • Technique pour retenir de l’information plus longtemps que dans sa mémoire courte.

Les APIs web ne devraient pas rediriger HTTP vers HTTPS https://jviide.iki.fi/http-redirects

  • Grosso modo le risque majeur est d’envoyer des données confidentielles en clair sur le réseau.
  • Le mieux serait de ne pas rediriger vers HTTPS, mais par contre de retourner une vraie erreur explicite.
  • Notamment les clés d’API et c’est facile de ne pas le voir vu les redirects.

Sécurité

Blog de GitHub sur la provenance et l’attestation https://github.blog/2024-04-30-where-does-your-software-really-come-from/

  • Discute les concepts de sécurisation de chaine d’approvisionnement de logiciel et comment elles s’articulent entre elle, à haut niveau.
  • Discute les hash pour garantir le même fichier.
  • La signature asymétrique pour prouver que j’ai signé (le hash) et donc que je garantis.
  • L’attestation qui déclare des faits sur un artifact.
  • Attestation de provenance : source code et instructions de build (SLSA provenance).
  • Mais il faut garantir les signatures avec une autorité de certification et avec des certificats à courte durée de vie idéalement, c’est sigstore.
  • Mentionne aussi The Update Framework pour s’appuyer sur cela et garantir des updates non compromis.

Keycloak 25 est sorti https://www.keycloak.org/2024/06/keycloak-2500-released.html

  • Argon2 pour le hashing de mots de passe.
  • Dépreciation des adaptateurs (Tomcat, servlet etc).
  • Java 21 et dépreciation de Java 17.
  • Session utilisateur persistente même pour les instances online (pour survivre à une rotation de keycloak).
  • Améliorations autour des Passkeys.
  • Management et health endpoint sur un port différent.
  • Et plus.

Demande aux cast codeurs

À 40 ans, tu peux encore être codeur reconnu ?

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/