LCC 301 - Minoritaire ou majoritaire, là est la question!

Épisode de Les Cast Codeurs Podcast par Emmanuel Bernard, Guillaume, Antonio, Arnaud, Katia · 23 octobre 2023 · 1 h 46 min

Dans cet épisode, Emmanuel et Guillaume reviennent sur les nouveautés de l'écosystème Java (Java 21, SDKman, Temurin, JBang, Quarkus, LangChain4J, …) mais aussi sur des sujets plus généraux comme Unicode, WebAssembly, les bases de données vectorielles, et bien d'autres sujets orientés IA (LLM, ChatGPT, Anthropic, …).

Enregistré le 20 octobre 2023

Téléchargement de l'épisode LesCastCodeurs-Episode-301.mp3

News

Langages

Gérer facilement des versions multiples de Java grâce à SDKman https://foojay.io/today/easily-manage-different-java-versions-on-your-machine-with-sdkman/

sdkman support java mais aussi graalVM, jbang, Quarkus, Micronaut etc (les CLIs)

la CLI UI est toujours un peu chelou donc cet article est utile pour un rappel

Tous les changements de Java 8 à Java 21 https://advancedweb.hu/a-categorized-list-of-all-java-and-jvm-features-since-jdk-8-to-21/

Nous avons déjà partagé ce lien par le passé, mais l'article est mis à jour à chaque release majeure de Java pour couvrir les dernières nouveautés. Et en particulier, Java 21 qui vient de sortir.

Eclipse Temurin ne va pas sortir son Java 21 tout de suite https://adoptium.net/en-GB/blog/2023/09/temurin21-delay/

Apparemment, une nouvelle licence pour le TCK (qui valide la compliance) doit être approuvée

Oracle semble avoir sorti de nouveaux termes, à quelques jours de la sortie officielle de Java 21

la mise a jour du TCK est arrivée le 9 octobre.

comment Microsoft a pu sortir le sien avant?

Le Financial Times propose un bel article avec des animations graphiques expliquant le fonctionnement de l'architecture de réseau de neurones de type transformers, utilisé dans les large language model https://ig.ft.com/generative-ai/

LLM via relation entre les mots

notion de transformer qui parse les "phrases" entières ce qui capture le contexte

discute le beam search vs greedy search pour avoir pas le prochain mot mais l'ensemble de prochains mots

parle d'hallucination

l'article parle de texte/vector embeddings pour représenter les tokens et leurs relations aux autres

il décrit le processus d'attention qui permet aux LLM de comprendre les associations fréquentes entre tokens

le sujet des hallucinations est couvert

et pour éviter des hallucinations, utilisation du "grounding"

The Absolute Minimum Every Software Developer Must Know About Unicode in 2023 https://tonsky.me/blog/unicode/

Un bel article qui explique Unicode, les encodings comme UTF-8 ou UTF-16, les code points, les graphèmes, les problèmes pour mesurer une chaîne de caractères, les normalisation de graphèmes pour la comparaison de chaîne

Si vous voulez mieux comprendre Unicode, c'est l'article à lire !

unicode c'est un mapping chiffre - caractère en gros

1,1 millions disponibles dont 15% définis et 11% pour usage privé, il reste de la place. Et non les meojis ne prennent pas beaucoup de place.

usage prive est par exemple utilise par apple pour délivrer le logo apple dans les fonts du mac (mais pas ailleurs)

UTF est l'encoding du chiffre de l'unicode

UTF-32: 4 bytes tout le temps, UTF-8, encodage variable de 1 a 4 bytes (compatible avec ASCII) ; il a aussi un peu de détection d'erreurs (prefix des bytes différents),

optimise pour le latin et les textes techniques genre HTML

problème principal, on peut pas déterminer la taille en contant les bytes ni aller au milieu d'une chaine directement (variable)

UTF-16 utilise 2 ou plus de bytes et est plus sympa pour les caractères asiatiques

un caractère c'est en fait un graphème qui peut être fait de plusieurs codepoints : é = e U+0065 + ´ U+0301 ; ☹️ (smiley qui pleure) is U+2639 + U+FE0F

D'ailleurs selon le langage ":man-facepalming::skin-tone-3:".length = 5, 7 (java) ou 17 (rust) ou 1 (swift). Ça dépend de l'encodage de la chaine (UTF-?).

""I know, I'll use a library to do strlen()!" — nobody, ever."

En java utiliser ICU https://github.com/unicode-org/icu

Attention java.text.BreakIterator supporte une vieille version d'unicode donc c'est pas bon.

Les règles de graphème change a chaque version majeure d'unicode (tous les ans)

certains caractères comme Å ont plusieurs représentations d'encodage, donc il ya de la normalisation: NFD qui éclate en pleins de codepoints ou NDC qui regroupe au max

normaliser avant de chercher dans les chaines

certains unicode sont représentés différemment selon le LOCALE (c'est la life)

et ça continue dans l'article

JBang permet d'appeler Java depuis Python via un pypi https://jbang.dev/learn/python-with-jbang/

c'est particulièrement interessant pour appeler Java de son Jupyter notebook

ça fait un appel a un autre process (mais installe jbang et java au besoin)

Librairies

Quarkus 3.4 est sorti https://quarkus.io/blog/quarkus-3-4-1-released/

un CVE donc mettez a jour vos Quarkus

support de Redis 7.2

plus de granularité sur la desactivation de flyway globalement ou par data source. Depuis l'activation transparente et automatique en 3.3

quarkus update est l'approche recommandée pour mettre à jour.

Comment tester si un thread virtuel "pin" https://quarkus.io/blog/virtual-threads-3/

exemple avec quarkus

comment générer la stackstrace

et un utilitaire JUnit qui fait échouer le test quand le thread pin

une série d'articles de Clements sur les threads virtuels et comment les utiliser dans quarkus https://quarkus.io/blog/virtual-thread-1/

À la découverte de LangChain4J, l'orchestration pour l'IA générative en Java https://glaforge.dev/posts/2023/09/25/discovering-langchain4j/

Guillaume nous parle du jeune projet LangChain4J, inspiré du projet Python LangChain, qui permet d'orchestrer différents composants d'une chaine d'IA générative

Grâce à ce projet, les développeurs Java ne sont pas en reste, et n'ont pas besoin de se mettre à coder en Python

LangChain4J s'intègre avec différentes bases vectorielles comme Chroma ou WeAviate, ainsi qu'une petite base en mémoire fort pratique

LangChain4J supporte l'API PaLM de Google, mais aussi OpenAI

Il y a différents composants pour charger / découper des documents et pour calculer les vector embeddings des extraits de ces documents

Vidéo enregistrée à Devoxx sur ce thème : https://www.youtube.com/watch?v=ioTPfL9cd9k

Infrastructure

OpenTF devient OpenTofu https://www.linuxfoundation.org/press/announcing-opentofu

Dans les Dockerfiles, on peut utiliser la notation "heredocs" https://www.docker.com/blog/introduction-to-heredocs-in-dockerfiles/

C'est comme faire un seul RUN avec des commandes séparées par des &&, mais en plus sympa parce que ça ressemble à un script bash classique

Par contre, c'est spécifique Docker et n'est pas portable sur podman ou autre

Docker annonce un nouveau protocole pour signer ses images OpenPubkey https://www.linuxfoundation.org/press/announcing-openpubkey-project

sigstore répond https://blog.sigstore.dev/openpubkey-and-sigstore/

OpenPubkey s'appuie sur OIDC

c'est un repo GitHub pour l'instant

pas de partie de confiance en dehors du OIDC provider.

OIDC lie une identité a une clé de chiffrement via une extension du id token.

OIDC devient une preuve de possession

purement client side via la signature du id token

ils utilisent le nonce pour stocker la clé publique et la signer cryptographiquement

vs Sigstore: plus d'élément central comme le transparency log et l'autorité de certification

pour le projet sigstore, ils n'ont pas utilisé cette architecture parce que la privacy des identités notamment en cas de renommage et sur le long terme n'est pas respecté

la rotation de clés et la partie client side devient beaucoup plus complexe (OIDC quoi) et ouvre des risques de sécurité (bugs d'implémentation)

la clé des OIDC providers est rotaté et ce n'est pas expliqué dans le flow OpenPubkey

la complexité passe de server side a client side (vu que le nonce est la clé du système)

le client notamment va devoir tracker les clés de signature des providers OIDC tout le temps (ou un system devra le faire)

le id token typiquement a plus d'infos qui vont leaké en tant que certificat du truc signé (privacy)

Cloud

Oracle Cloud rajoute GraalOS https://blogs.oracle.com/java/post/introducing-graalos

plateforme serverless sans container

Autres épisodes de « Les Cast Codeurs Podcast »

À propos du podcast

Les Cast Codeurs : le 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 (ex Red Hat,…

Les Cast Codeurs Podcast

Épisodes similaires

Tous les épisodes de Les Cast Codeurs Podcast · Plus de podcasts Actualités