Published: July 16, 2024, 9:17 a.m.
Emmanuel, Guillaume et Arnaud discutent des nouvelles de l\u2019\xe9t\xe9. JEPs, transactional outbox pattern avec Spring, LLM dans Chrome, faille polyfill.io, TOTP, cong\xe9s illimit\xe9s et IDE payant ou pas payant ?
Enregistr\xe9 le 12 juillet 2024
T\xe9l\xe9chargement de l\u2019\xe9pisode LesCastCodeurs-Episode-314.mp3
News Langages
Les fonctionnalit\xe9s de JDK 23 ont \xe9t\xe9 fig\xe9es d\xe9but Juin (release pr\xe9vue en septembre) https://openjdk.org/projects/jdk/23/ https://www.youtube.com/watch?v=kzjGp7LmW0I
- JEPs finales:
- 467: Markdown Documentation Comments
- 471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
- 474: ZGC: Generational Mode by Default
- JEPs en incubation / preview
- 455: Primitive Types in Patterns, instanceof, and switch (Preview)
- 466: Class-File API (Second Preview)
- 469: Vector API (Eighth Incubator)
- 473: Stream Gatherers (Second Preview)
- 476: Module Import Declarations (Preview)
- 477: Implicitly Declared Classes and Instance Main Methods (Third Preview)
- 480: Structured Concurrency (Third Preview)
- 481: Scoped Values (Third Preview)
- 482: Flexible Constructor Bodies (Second Preview)
Librairies
Le transactional outbox pattern avec Spring Boot https://www.wimdeblauwe.com/blog/2024/06/25/transactional-outbox-pattern-with-spring-boot/
- transactional outbox permet d\u2019\xe9viter des 2PC ou des d\xe9synchronisations de resources: typiquement un commit dans une base et un envoie de message dans un bus
- on ecrit le message dans une table de la base de donn\xe9es, et un process s\xe9par\xe9 r\xe9cup\xe8re les messages et les envoient dans le bus
- impl\xe9mentation utilise Spring Integration
- dans l\u2019article, la seconde resource est l\u2019envoie d\u2019email
- montre une approche de tests
- le flow descrit pas psring integration est pas super trivial a lire quand on est pas familier mais cela poll la table toutes les secondes et envoie email et si succes de l\u2019appel de service, vide le message de la table
- Deuxieme exemple avec Spring modulith qui a un event bus interne qui peut \xeatre persist\xe9
- d\xe9crit les differences avec spring integration et les limites de l\u2019approche modulith (message order, retry etc)
Comment tester des valeurs de propri\xe9t\xe9s diff\xe9rentes dans un test Quarkus https://quarkus.io/blog/overriding-configuration-from-test-code/
- on a tendance a ne pas tester les propri\xe9t\xe9s de config
- ce blog montre 5 (enfin 4 utiles) fa\xe7ons de le faire avec Quarkus.
- les profils de test, mocker l\u2019objet de config, les test components (experimental), l\u2019injection dans les constructeurs
Quarkus 3.12 https://quarkus.io/blog/quarkus-3-12-0-released/
- centralisation des configs TLS
- support pour le load shedding (reject requests on service overload)
- \xe9v\xe9nements JFR specific a Quarkus
- native image agent
- support Spring Boot 3 (compat layer)
- Support Kotlin 2
- etc
Cloud
On vous parlait dans un \xe9pisode pr\xe9c\xe9dent de ce probl\xe8me de co\xfbts S3 sur des requ\xeates non autoris\xe9es. C\u2019est Graphana Loki qui a mis ce probl\xe8me sous les projecteurs https://grafana.com/blog/2024/06/27/grafana-security-update-grafana-loki-and-unintended-data-write-attempts-to-amazon-s3-buckets/
- le probl\xe8me venait des valeurs par d\xe9faut des buckets d\xe9clar\xe9s dans le chart helm de Loki, en particulier celui nomm\xe9 \u2018chunks\u2019
Data et Intelligence Artificielle
Guillaume avait partag\xe9 l\u2019information sur la disponibilit\xe9 prochaine d\u2019un mini modele LLM dans chrome. C\u2019est maintenant une r\xe9alit\xe9 et vous pouvez le tester.
https://ai-sdk-chrome-ai.vercel.app/
- N\xe9cessite Chrome 127 (version stable \xe0 partir de mi-juillet)
- Utilise le SDK Vercel AI
Guillaume nous parle de toutes les nouveaut\xe9s li\xe9es au mod\xe8le Gemini de Google dans la derni\xe8re release de LangChain4j https://glaforge.dev/posts/2024/07/05/latest-gemini-features-support-in-langchain4j/
Outillage
1% des utilisateurs de Maven Central utilisent 83% de sa bande passante. Installez un repository manager qui fait proxy (et cela pour tous les types de d\xe9pendances)!!!
https://www.sonatype.com/blog/maven-central-and-the-tragedy-of-the-commons
- rien n\u2019est r\xe9ellement gratuit et l\u2019abus d\u2019une minorit\xe9 peut nuire \xe0 l\u2019ensemble. Cela fait maintenant plus de 20 ans que les communaut\xe9s le r\xe9p\xe8te: installer un gestionnaire de d\xe9pendances dans votre infrastructure (nexus, artifactory, CodeArtifact, \u2026). En plus de prot\xe9ger le bien commun cela vous permet de raffiner le filtrage des d\xe9pendances, d\u2019assurer la reproductibilit\xe9 de vos builds, d\u2019optimiser les performances (et r\xe9duire les co\xfbts) en ne t\xe9l\xe9chargeant que depuis votre propre infrastructure, etc \u2026
- Maven Central est un commun qui ne coute rien \xe0 l\u2019utilisteur
- mais qui est indispensable \xe0 tous
- 1000 milliards de t\xe9l\xe9chargements l\u2019ann\xe9e derni\xe8re
- 83% de la bande passante consomm\xe9 par 1% des IPs
- Beaucoup des ces IP viennent des companies les plus larges
- proxy pour r\xe9duire charge sur central, r\xe9duire couts ingress/egress
- ils vont implementer un m\xe9canisme de throttling
- question est-ce que la concentration des IPs veut juste dire que c\u2019est le dernier noeud mais que cacher n\u2019est pas effectif pour eux et qu\u2019il y a des milliers de clients derri\xe8re une IP?
- le trotting ferait mal
- et le proxy ne marche plus dans un monde ou le dev est dans le cloud et distribue g\xe9ographiquement
Comment mettre en place backstage, ici avec un projet Spring Boot utilisant CircleCi, Renovate, SonarCloud\u2026
https://piotrminkowski.com/2024/06/13/getting-started-with-backstage/
- Cet article explique comment utiliser backstage pour fournir \xe0 vos \xe9quipes un template d\u2019une application spring-boot.
- Elle est automatiquement cr\xe9e sous forme d\u2019un repository git(hub) avec les integrations classiques pour g\xe9rer la CI (via CircleCI), la qualit\xe9 (via SonarCloud), la mise \xe0 jour de d\xe9pendances (via Renovate) et bien sur son r\xe9f\xe9rencement sur le portail backstage.
- tutoriel tres complet
- tres facilement remplacable pour un project avec votre technologie preferee (pas specifique a Spring Boot, ou Java)
Architecture
Que se passe t\u2019il quand vous faites un push sur GitHub? https://github.blog/2024-06-11-how-we-improved-push-processing-on-github/
- GitHub explique comment ils ont am\xe9lior\xe9 leur architecture, notamment en mettant en place Kafka pour distribuer les actions qui d\xe9coulent d\u2019un push sur GitHub.
- paralelisation des taches (avant sequentiel)
- limitation des dependances entre etapes effectu\xe9es lors d\u2019un push
- plus de taches peuvent faire un retry
- un classique de decoupling via un EDA
S\xe9curit\xe9
Attaque du CDN polyfill.io https://sansec.io/research/polyfill-supply-chain-attack
- polyfill c\u2019est un support de nouvelles fonctionalites dans les ancien navigateurs
- servi par cdn notamment
- une societe chinoise a achete le domaine et le github
- et injecte du malware qui pointe sur des serveurs qui servent le malware selectivement (device, admin ou pas, heure de la journ\xe9e)
- Fastly et Cloudflare on des deploiements alternatiuve
Une faille de s\xe9curit\xe9, de type Remote Code Execution, vieille de 10ans, dans CocoaPods, un gestionnaire de d\xe9pendances tr\xe8s utilis\xe9 dans le monde Apple (macOS et iOS)
https://securityboulevard.com/2024/07/cocoapods-apple-vulns-richixbw/
- https://cocoapods.org/ / https://cocoapods.org/ est un gestionnaire de d\xe9pendances pour les projets Xcode. Les dependances (Pods) sont publi\xe9es sous forme de Specs qui sont r\xe9f\xe9renc\xe9es dans un Specs Repo (une sorte de Maven central mais seulement avec des metadonn\xe9es)
- CVE-2024-38366 est une vuln\xe9rabilit\xe9 de type remote code execution avec un score CVSS de 10
- La faille existait depuis 10 ans et a \xe9t\xe9 corrig\xe9e en Sept 2023. Elle permettait d\u2019avoir un acc\xe8s root sur trunk.cocoapods.org qui stock les Specs. Elles auraient donc pu \xeatre modifi\xe9es sans que les auteurs ne s\u2019en apper\xe7oivent.
- Pas de preuve pour l\u2019instant que la faille ait \xe9t\xe9 exploit\xe9e
Mieux comprendre la double authentification avec TOTP
https://hendrik-erz.de/post/understanding-totp-two-factor-authentication-eli5
- Cet article revient sur le fonctionnement de TOTP et comment l\u2019implementer avec des exemples en python
- the QR code est une URL qui contient: le secret en base 32. le nom du totp, qui a fournit le TOTP, combien de chiffres et la dur\xe9e de vie du TOTP
- pour generer les chiffres, prends le secret, le temps et hash le tout, prendre 4 bytes et les convertir le chiffres
- typiquement le serveur genere les deux d\u2019avant, les deux d\u2019apres et le courant pour comparer
Loi, soci\xe9t\xe9 et organisation
L\u2019\xe9quipe Apache Maven gagne le troisi\xe8me prix BlueHats https://nlnet.nl/bluehatsprize/2024/3.html
- le projet remporte un gain de 10000\u20ac. Ce prix est organis\xe9 par le gouvernement fran\xe7ais afin de r\xe9compenser les projets open sources les plus impactants.
La clause de cong\xe9s illimit\xe9s en Europe
https://www.osborneclarke.com/insights/why-your-unlimited-vacation-policy-may-be-of-limited-use-in-europe
- Les politiques de cong\xe9s illimit\xe9s, populaires aux \xc9tats-Unis, ne sont pas aussi avantageuses en Europe.
- En Europe, les employeurs doivent suivre les cong\xe9s pris pour respecter les minima l\xe9gaux de quatre semaines par an donc ils ne peuvent pas economiser sur le faire de ne plus les g\xe9rer.
- Les cong\xe9s illimit\xe9s permettent aux US de ne plus \xe0 devoir les payer au d\xe9part de l\u2019employ\xe9. En Europe les employeurs doivent payer les cong\xe9s non utilis\xe9s lors de la fin du contrat.
- Les employ\xe9s europ\xe9ens pourraient prendre davantage de cong\xe9s, car ils sont mieux prot\xe9g\xe9s contre le licenciement.
- Les jours de maladie sont plus cadr\xe9s en europe. Un employ\xe9 qui souffre d\u2019une maladie longue pourrait utiliser les cong\xe9s illimit\xe9s mais ce ne sont pas les m\xeame r\xe8gles qui s\u2019appliquent
OpenDNS n\u2019est plus disponible en France et au Portugal
https://support.opendns.com/hc/en-us/articles/27951404269204-OpenDNS-Service-Not-Available-To-Users-In-France-and-Portugal
- A priori Cisco qui op\xe8re openDNS en a marre des demandes de restrictions sp\xe9cifiques \xe0 nos pays et pr\xe9f\xe8re donc retirer enti\xe8rement l\u2019acc\xe8s au service plut\xf4t que de se conformer \xe0 la ni\xe8me demande de restrictions qui faisait suite \xe0 la plainte du groupe Canal+ portant sur l\u2019acc\xe8s \xe0 des sites illicites de streaming pour du sport
Ask Me Anything
Salut ! \xcates-vous plut\xf4t IDE payants (ex : IJ Ultimate, ou des plugins payants), ou ne jurez-vous que par des outils gratuits ? Un peu des deux ? Si adaptes du payant, \xe7a ne vous d\xe9prime pas qu\u2019un nombre consid\xe9rable d\u2019employeurs rechignent \xe0 nous payer nos outils ? Que \u201cde toute fa\xe7on VSCode c\u2019est gratuit\u201d (\xe0 prononcer avec une voix m\xe9prisante) ? Quid du confort, ou de la productivit\xe9 et/ou qualit\xe9 accrue quand on ma\xeetrise de tels outils ? Merci !
Conf\xe9rences
La liste des conf\xe9rences provenant de Developers Conferences Agenda/List par Aur\xe9lie Vache et contributeurs :
Nous contacter
Pour r\xe9agir \xe0 cet \xe9pisode, 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 \xe9pisodes et toutes les infos sur https://lescastcodeurs.com/