Less than a month to Devoxx Poland! đŸ‡”đŸ‡±
Looking forward to be back on stage, this time talking about observability for AI workloads, and the new paradigm we need to adopt.

And of course I can't wait to catch up with the local gang. if you're around, DM me and let's catch up.

See you 17-19 June in beautiful Krakow.
#devoxx #devoxxPL #AI #observability

Understanding Prompt Injection - Techniques, Challenges, and Advanced Escalation

https://video.ut0pia.org/w/da5UiuCPfisAoCNFpvjRy6

Understanding Prompt Injection - Techniques, Challenges, and Advanced Escalation

PeerTube
Avec mon excellent collÚgue Clément on a parlé à Devoxx de ce qu'il se passe dans votre cerveau, en particulier quand vous lisez du code. https://www.youtube.com/watch?v=waWnP1PJ3a0 #programming #cerveau #neuroscience #vidéo #conférence #devoxx
Comment les développeurs lisent du code ?

YouTube

Comment les vidéos Devoxx France sont préparées et mise en ligne sur YouTube

https://video.ut0pia.org/w/3YqPTq1RfsiciDzBRoGHCC

Comment les vidéos Devoxx France sont préparées et mise en ligne sur YouTube

PeerTube

Je suis de retour du #devoxx 2026 Ă  Paris, pleins de supers prĂ©sentations, pleins de super discussions... 👍👍

mais hĂ©las je n'ai pas repĂ©rĂ© un seul lien vers des comptes mastodon sur les pages des prĂ©sentateurs đŸ˜©

il va falloir évangéliser plus.

Retour sur Devoxx France 2026

https://litote.org/blog/billets/retour-sur-devoxx-france-2026/

Focus sur l'IA générative

#ia #Devoxx

[Devoxx] Tu te mets combien en responsive CSS ? Edition 2026

Jusqu’en 2008, il n’y avait pas besoin de responsive css, parce que les Ă©crans avaient Ă  peu prĂšs les mĂȘmes formes. Mais en 2008, avec l’introduction de l’iPhone, on se retroue avec des Ă©crans qui ont des formes trĂšs diffĂ©rentes.

En 2010, l’article Responsive Web Design invente la mĂ©thode, inspirĂ©e de l’architecture. L’idĂ©e, c’est de crĂ©er un design qui, sans ĂȘtre parfait partout, peut rester fonctionnel dans tous les Ă©crans.

Allez, on commence

La page vide

Julien et Théo ont conçu un éditeur WYSIWYG pour montrer les différents rendus, et ils arrivent bien à afficher leur page blanche.

Le paragraphe

Pour afficher un paragraphe, ça peut ĂȘtre intĂ©ressant de limiter la taille du bloc pour qu’il ne prene pas tout l’écran, en donnant en plus une taille maximal. Mais attention, parce que pour l’accessibilitĂ©, il faut pouvoir supporter une grande taille. Donc pour ça, il faut passer Ă  une unitĂ© basĂ©e sur la taille de la police, l’incroyable em.

Le jeu de morpion

C’est une belle grille 3×3, et on voit que sur les grands Ă©crans ça semble bizarre. Et on passe Ă  une width en vmin. Et il faut ajouter une taille minimale, ce qui se fait avec clamp. Les tailles d’écran, ça marche bien sur ordinateur, mais moins bien sur les tĂ©lĂ©phones pour lesquels des unitĂ©s complĂ©mentaires ont Ă©tĂ© dĂ©finies (lvh, svh, dvh). Et c’est utilisable sur la plupart des navigateurs (dont tous les navigateurs rĂ©cents) !

L’image de fond

Ici, ThĂ©o va utiliser du responsive HTML avec une balise picture , l’img de base en mode par dĂ©faut, et diffĂ©rentes source selon la taille de l’écran. On peut aussi les Ă©crans de rĂ©solution trĂšs diffĂ©rents en ajoutant des conditions dans l’attribut media. Et ça marche aussi avec les vidĂ©os.

La documentation

On va faire une page de documentation classique avec trois colonnes.

Et pour l’instant, Julien et ThĂ©o ne nous ont pas parlĂ© de media queries. Mais ça change maintenant !

Et il utilise encore une nouvelle unité : le fr. Et en combinant une media query et une grid, ça se fait trÚs facilement.

Mais pourquoi on fait du mobile first ?

GĂ©nĂ©ralement, il faut moins de CSS pour faire l’affichage mobile que pour faire l’affichage de bureau. Et si le design mobile rentre plus facilement sur un Ă©cran plus grand.

La galerie de photos

Ils vont faire maintenant une galerie de photos avec des miniatures adaptĂ©es Ă  l’écran.

Pour ça, un display: flex, du contenu centrĂ©, et ça a l’air sympa. Mais il ya parfois des marges. Ca se comble avec flex-grow qui a l’inconvĂ©nient que la derniĂšre ligne contient des images d’une taille incohĂ©rente.

Essayons autrement, avec une grid. Et en mettant un autofill, le nombre de colonnes s’adapte Ă  la taille de l’écran, sauf dans certains cas.

La rĂšgle d’or chez les front, c’est que flex est plutĂŽt bien adaptĂ© quand il faut manipuler une dimension, et grid plutĂŽt adaptĂ© quand il faut manipuler deux dimensions.

La plateforme de contenu

C’est une espĂšce de youtube-like avec des prĂ©sentations variables. Et pour les afficher, on va utiliser des container queries, qui vont modifier le rendu selon l’espace disponible pour le container. Et ils font des dĂ©mos qui me font penser Ă  un trĂšs vieil article Swing sur les « transmogrifying widgets Â». Le rĂ©sultat est en franchement spectaculaire en terme d’adaptabilitĂ©.

Dans les design systems, les container queries sont trĂšs utiles (voir par exemple le Karkinos Design System).

Ca vaut le coup de nommer les containers. On peut combiner les container queries et les media queries. En revanche, il faut Ă©viter de trop s’en servir pour Ă©viter l’effet sapin de NoĂ«l. Et il existe Ă©videment des unitĂ©s spĂ©cifiques au container qu’il vaut mieux utiliser avec parcimonie.

Le monde réel

Il faut maintenant adapter ces techniques au monde rĂ©el. Et utiliser ces techniques vous aidera beaucoup, parce que les agents IA sont incapables pour l’instant de les mettre en oeuvre correctement.

#conférence #css #devoxx
Responsive Web Design

Les meilleurs livres pour maĂźtriser le web

Alsacréations

[Devoxx] Eloge de la simplicitĂ©

Pour l’orateur, si on pense Ă  un logiciel qu’on dĂ©teste, c’est un logiciel professionnel. Parce que dans le monde de l’entreprise, il faut uniformiser. Et si on veut crĂ©er un peu de variĂ©tĂ©, il faut demander Ă  un comitĂ©.

Les utilisateurs ne vont pas regarder les roadmaps, la seule chose qui compte, c’est le produit. Pour l’orateur, la dĂ©finition d’un planning est quasiment une trahison des utilisateurs. Et c’est le quiproquo de l’agilitĂ©.

Parce que le but, c’était d’ĂȘtre plus simple. Mais aujourd’hui, on remplace des plannings tous les trois mois par des planning trimestriels. Et souvent les backlogs sont en fait simplement des plannings verticaux.

Le planning, c’est un amas d’informations qui sont inutiles aujourd’hui, et fausses demain. Le planning, c’est un imaginaire qui rassure, un doudou organisationnel. Au contraire, le backlog indique juste ce qu’il faut faire maintenant.

Les organisations qui s’appuient sur es plannings sont dans l’incertitude, mais elles ne le savent pas. Pour le speaker, la transformation agile embrasse l’incertitude.

Si on se concentre sur l’estimation des tĂąches, on constate que le monde de l’informatique est terriblement mauvais : on ne sait pas estimer le dĂ©lai, et donc les coĂ»ts, ni l’adoption par les utilisateurs, et donc les gains. Ca fait que les estimations sont complĂštement farfelues. Et c’est comme ça que nous dĂ©cidons ?! Et pourtant, nous sommes dĂ©bordĂ©s par des nombres construits de maniĂšre fantaisiste.

On peut remplacer ces estimations par le fait de demander aux utilisateurs. Les conflits de priorisation se dissolvent par les rencontres avec les utilisateurs. Et les utilisateurs peuvent mĂȘme proposer des solutions Ă  leurs irritants.

Ca vaut mieux que la mĂ©thode qui consiste Ă  rĂ©flĂ©chir pour ne pas agir, ce qu’on fait avec les Ă©tudes. Il vaut mieux agir pour apprendre, en l’occurence en Ă©coutant les retours des utilisateurs. C’est l’empathie qui nous fera agir sur les sujets les plus importants. Et pour maximiser le retour sur investissement, il faut aller vers la simplicitĂ© et l’amour.

La seule chose qui fait que les gens conservent les plannings, c’est le fait que les gens sont convaincus qu’ils ne peuvent pas fonctionner sans planning.

Le speaker est convaincu que les urgences peuvent aider Ă  comprendre comment une organisation peut ĂȘtre efficace sans planning. Il faut savoir que les urgences sont Ă©tudiĂ©es scientifiquement dans l’objectif de minimiser le taux de mortalitĂ©. Ca marche avec un accueil administratif qui liste les nouveaux arrivants, enchaĂźnĂ© Ă  un accueil infirmier qui priorise les patients. Quand on est patient, on ne sait jamais quand on sera soignĂ©. Mais le maximum de vies sera sauvĂ©, et les cas les plus graves seront forcĂ©ment traitĂ©s en premier. Les urgences sont totallement imprĂ©dictibles, et pourtant extrĂȘmement efficaces.

Les plannings n’existent pas parce qu’il y a un enjeu, mais parce qu’on ne sait pas faire autrement.

Et ça marche aussi pour la synchronisation : les urgentistes envoient des patients en radiologie qui ont pourtant un planning, et ça marche grùce à la communication permanente.

Dans les organisations qui se basent sur un planning, l’adaptation est impossible.

En fait, il y a une alternative Ă  l’agilitĂ© Ă  l’échelle : l’agilitĂ©. Le problĂšme, c’est que les gens cherchent Ă  faire des plannings, mĂȘme en Ă©tant agiles. En fait, le vrai dĂ©fi, c’est de trouver comment travailler sans planning.

#agile #conférence #devoxx #organisation

[Devoxx] Kubernetes et la JVM

Java sur K8s, c’est plein de prĂ©jugĂ©s : lent Ă  dĂ©marrer, compliquĂ© Ă  exploiter, gourmand en ressources.

Pour commencer, on peut utiliser K8s sur le pote de dĂ©v avec des outils comme minikube, k3s, kind, ou flox (qui semble s’inspirer de nix, et permet de crĂ©er un environnement de dĂ©veloppement reproductible).

Alain nous montre alors comment utiliser flox pour installer kind et dĂ©marrer un namespace. On peut mĂȘme choisir une version spĂ©cifique de K8s.

Passons maintenant Ă  la construction des images et aux bonnes pratiques :

  • faire de petites images
  • utiliser du multistage build
  • utiliser Kaniko ou Jib qui optimisent la construction des images


Dans Kubernetes, il ne faut pas oublier d’alimenter les probes, parce que K8s envoie du trafic dĂšs que l’image est dĂ©marrĂ©e. Et il ne faut pas mettre le mĂȘme endpoint dans la liveness et la readiness. Pensez aussi Ă  dĂ©clarer des requests et des limits pour Ă©viter que le pod soit tuĂ© trop facilement.

Dans la suite de la dĂ©mo, ils vont utiliser une application Java qui se connecte Ă  la Chuck Norris API. Une fois l’application Ă©crite, on peut la dĂ©ployer dans kind avec un kind deploy docker-image

Son application démarre 
 en 37 secondes avec 0.2 vCPU, mais instantanément avec 1 vCPU.

Il faut aussi penser Ă  gĂ©rer le shutdown hook pour que l’application s’arrĂȘte correctement.

Passons à la JVM. Dans cet outil incroyable, deux éléments sont intéressants dans notre cas :

  • Le JIT qui amĂ©liore l’exĂ©cution, une fois que le dĂ©marrage est effectuĂ©, celui-ci pouvant ĂȘtre assez long. Une mĂ©thode est compilĂ©e nativement aprĂšs 10.000 appels par un compilateur de niveau C1, et il sera par la suite optimisĂ© encore plus.
  • La gestion de mĂ©moire, et en particulier le garbage collector. La JVM en fournit plusieurs, qui Ă©voluent en performance avec les versions de la JVM. On sĂ©lectionne rarement le GC, parce que la JVM le fait automatiquement. C’est fait selon trois critĂšres : throughput, empreinte mĂ©moire, et latence.

Depuis Java 5, les ergonomics permettent d’auto-configurer la JVM selon le nombre de CPU ou d’autres facteurs. On peut nĂ©anmoins forcer les valeurs de ces paramĂštres. On peut aussi les lister, soit par une commande spĂ©cifique, soit dans les logs. Dans les ergonomics, il y a aussi le choix de la taille mĂ©moire. Les valeurs par dĂ©faut sont bonnes pour les postes de dev, moins pour les environnements conteneurisĂ©s. Et de la mĂȘme maniĂšre, ces ergonomics dĂ©terminent automatiquement le garbage collector. Et les contraintes de mĂ©moire font que dans les conteneurs, on se retrouve souvent avec SerialGC (qui arrĂȘte l’application de temps en temps).

Passons maintenant Ă  l’exĂ©cution du code Java dans K8s. Avant Java 10, les ergonomics rĂ©cupĂ©raient les informations de CPU et de RAM du noeud, et pas celles dĂ©finies dans le conteneur. AprĂšs Java 10, on prend les informations du conteneur. Mais on peut les changer avec XX:MaxRAMPercentage pour lequel la bonne pratique est de mettre 75%.

La JVM a besoin de CPU avec certains pics. Et c’est pour ça que les applications Java deviennent trĂšs lentes quand la mĂ©moire est limitĂ©e.

Et c’est pire pour la mĂ©moire : si il n’y a pas assez de mĂ©moire, ça tue le conteneur. (OutOfMemoryError par Java ou OOMKill par Kubernetes). Et attention, parce que la JVM n’a pas de mĂ©moire que dans la heap, il y aussi le metaspace, les threads, et la mĂ©moire native. Ca complique bien sĂ»r l’évaluation de la mĂ©moire nĂ©cessaire pour faire tourner un conteneur.

On peut amĂ©liorer le temps de dĂ©marrage de l’application avec diffĂ©rentes techniques. CDS (class data sharing) permet d’accĂ©lĂ©rer les dĂ©marrages successifs des applications. Ca s’appuie sur l’ahead of time compiling, issu des travaux du projet Leyden. On peut aussi utiliser GraalVM qui compile le code Java en code natif. Attention, parce que ça double la charge de test.

Pour finir, Alain nous montre comment compiler une application Java en natif. Le processus n’est pas immĂ©diat, puisque GraalVM vĂ©rifie beaucoup de choses.

Pour conclure, Java et K8s sont deux technologies complexes qui, lorsqu’elles sont utilisĂ©es ensemble, nĂ©cessitent pas mal d’attention, une bonne coordination, et une bonne collaboration.

#conférence #devoxx #java #kubernetes
kind

[Devoxx] Jujutsu, la cerise sur le git, oh !

Jujutsu est un outil de contrĂŽle de source avec lequel on peut utiliser quand mĂȘme les commandes Git.

Jujutsu n’utilise pas des commits, mais des refsets que jj sait mapper sur des commits Git.

Et Siegfried nous fait ensuite le tour des fonctionnalitĂ©s de jj, qui sont assez proches de celles git : on peut commiter, on peut merger, et tout le reste, mais avec des Ă©lĂ©ments assez particuliers, comme par exemple les bookmarks (qui semblent ĂȘtre les branches).

La configuration de jj permet de créer des commandes personnelles, avec une grammaire qui semble bien sympathique.

La gestion des conflits est un peu plus intĂ©ressante, puisqu’elle est stockĂ©e dans les donnĂ©es du commit, et pas directement dans les fichiers (ce qui rend le conflit non bloquant, contrairement Ă  Git).

jj dispose d’une commande absorb, qui permet en un commit de faire une espĂšce de git commit --amend, mais potentiellement sur plusieurs branches en mĂȘme temps (et sur des commits plus anciens).

A noter qu’il n’y a pas à faire de jj add : jj prend toujours tous les fichiers du repository dans ses commits.

Quand on modifie un fichier dans un commit ancien, jj rebase automatiquement les commits basés sur celui qui a été modifié.

Pour apprendre, la documentation est trÚs fournie. Steeve Klabnik a aussi écrit un tutorial. Et il y a aussi un jj-workshop. Et pour partager le code, https://tangled.org/ est une plateforme à la GitHub.

Par dĂ©faut, jj limite la taille des fichiers dans le repository Ă  1 Mb (mais c’est Ă©videment configurable).

Siegfried a par ailleurs repris cette présentation dans un article bien plus complet, disponible sur son blog.

#conférence #devoxx
Jujutsu docs