Explorez tous les épisodes du podcast Les Cast Codeurs Podcast
Plongez dans la liste complète des épisodes de Les Cast Codeurs Podcast. Chaque épisode est catalogué accompagné de descriptions détaillées, ce qui facilite la recherche et l'exploration de sujets spécifiques. Suivez tous les épisodes de votre podcast préféré et ne manquez aucun contenu pertinent.
Rows per page:
50
1–50 of 340
Titre
Date
Durée
LCC 332 - Groquik revient, Emmanuel s'en va
18 Nov 2025
01:32:07
Dans cet épisode, Emmanuel, Katia et Guillaume discutent de Spring 7, Quarkus, d'Infinispan et Keycloak. On discute aussi de projets sympas comme Javelit, de comment démarre une JVM, du besoin d'argent de NTP. Et puis on discute du changement de carrière d'Emmanuel.
Trois approches d'implémentation disponibles : classes Java pour la performance maximale, JavaScript/TypeScript pour la facilité de développement, ou webhooks pour une flexibilité totale
Configuration via un simple fichier JSON pointant vers les implémentations des composants personnalisés
Les scripts JavaScript sont exécutés via QuickJS dans un environnement sandboxé sécurisé
Un package npm TypeScript fournit l'autocomplétion et la sécurité de type pour le développement
Six composants optionnels configurables : détection automatique de type, validation, vérification de compatibilité, canonicalisation, déréférencement et recherche de références
Cas d'usage typiques : formats propriétaires internes, support RAML, formats legacy comme WADL, schémas spécifiques à un domaine métier
Déploiement simple via Docker en montant les fichiers de configuration et scripts comme volumes
Les performances varient selon l'approche : Java offre les meilleures performances, JavaScript un bon équilibre, webhooks la flexibilité maximale
Le truc interessant c'est que c'est Quarkus based et donc demandait le rebuilt
donc pour eviter cela, ils ont ajouter QuickJS via Chicorey un moteur WebAssembly
C'est le meilleur puisque c'est le dernier :slightly_smiling_face:
Raisonnement Adaptatif et Efficace : GPT-5.1 ajuste dynamiquement son temps de réflexion en fonction de la complexité de la tâche, le rendant nettement plus rapide et plus économique en jetons pour les tâches simples, tout en maintenant des performances de pointe sur les tâches difficiles.
Nouveau Mode « Sans Raisonnement » : Un mode (reasoning_effort='none') a été introduit pour les cas d'utilisation sensibles à la latence, permettant une réponse plus rapide avec une intelligence élevée et une meilleure exécution des outils.
Cache de Prompt Étendu : La mise en cache des invites est étendue jusqu'à 24 heures (contre quelques minutes auparavant), ce qui réduit la latence et le coût pour les interactions de longue durée (chats multi-tours, sessions de codage). Les jetons mis en cache sont 90 % moins chers.
Améliorations en Codage : Le modèle offre une meilleure personnalité de codage, une qualité de code améliorée et de meilleures performances sur les tâches d'agenticité de code, atteignant 76,3 % sur SWE-bench Verified.
L'outil apply_patch pour des modifications de code plus fiables via des diffs structurés.
L'outil shell qui permet au modèle de proposer et d'exécuter des commandes shell sur une machine locale, facilitant les boucles d'inspection et d'exécution.
Disponibilité : GPT-5.1 (ainsi que les modèles gpt-5.1-codex) est disponible pour les développeurs sur toutes les plateformes API payantes, avec les mêmes tarifs et limites de débit que GPT-5.
Composer est un modèle d'agent conçu pour l'ingénierie logicielle qui génère du code quatre fois plus rapidement que les modèles similaires
Le modèle est entraîné sur de vrais défis d'ingénierie logicielle dans de grandes bases de code avec accès à des outils de recherche et d'édition
Il s'agit d'un modèle de type mixture-of-experts optimisé pour des réponses interactives et rapides afin de maintenir le flux de développement
L'entraînement utilise l'apprentissage par renforcement dans divers environnements de développement avec des outils comme la lecture de fichiers, l'édition, les commandes terminal et la recherche sémantique
Cursor Bench est un benchmark d'évaluation basé sur de vraies demandes d'ingénieurs qui mesure la correction et le respect des abstractions du code existant
Le modèle apprend automatiquement des comportements utiles comme effectuer des recherches complexes, corriger les erreurs de linter et écrire des tests unitaires
L'infrastructure d'entraînement utilise PyTorch et Ray avec des kernels MXFP8 pour entraîner sur des milliers de GPUs NVIDIA
Le système exécute des centaines de milliers d'environnements de codage sandboxés concurrents dans le cloud pour l'entraînement
Composer est déjà utilisé quotidiennement par les développeurs de Cursor pour leur propre travail
Le modèle se positionne juste derrière GPT-5 et Sonnet 4.5 en termes de performance sur les benchmarks internes
Téléchargements Parallèles par Défaut : Le paramètre HOMEBREW_DOWNLOAD_CONCURRENCY=auto est activé par défaut, permettant des téléchargements concurrents pour tous les utilisateurs, avec un rapport de progression.
Support Linux ARM64/AArch64 en Tier 1 : Le support pour Linux ARM64/AArch64 a été promu au niveau "Tier 1" (support officiel de premier plan).
Feuille de Route pour les Dépréciations macOS :
Septembre 2026 (ou plus tard) : Homebrew ne fonctionnera plus sur macOS Catalina (10.15) et versions antérieures. macOS Intel (x86_64) passera en "Tier 3" (fin du support CI et des binaires précompilés/bottles).
Septembre 2027 (ou plus tard) : Homebrew ne fonctionnera plus sur macOS Big Sur (11) sur Apple Silicon ni du tout sur Intel (x86_64).
Sécurité et Casks :
Dépréciation des Casks sans signature de code.
Désactivation des Casks échouant aux vérifications Gatekeeper en septembre 2026.
Les options --no-quarantine et --quarantine sont dépréciés pour ne plus faciliter le contournement des fonctionnalités de sécurité de macOS.
Nouvelles Fonctionnalités & Améliorations :
Support officiel pour macOS 26 (Tahoe).
brew bundle supporte désormais l'installation de packages Go via un Brewfile.
Ajout de la commande brew info --sizes pour afficher la taille des formulae et casks.
La commande brew search --alpine permet de chercher des packages Alpine Linux.
Java reste pertinent à l'ère de l'IA, pas besoin d'apprendre une pile technique entièrement nouvelle.
Capacité d'adaptation de Java ("anticorps") aux innovations (Big Data, cloud, IA), le rendant idéal pour les contextes d'entreprise.
L'écosystème JVM offre des avantages sur Python pour la logique métier et les applications sophistiquées, notamment en termes de sécurité et d'évolutivité.
Embabel (par Rod Johnson, créateur de Spring) : un framework d'agents fortement typé pour JVM, visant le déterminisme des projets avant la génération de code par LLM.
LangChain4J : facilite l'accès aux capacités d'IA pour les développeurs Java, s'aligne sur les modèles d'entreprise établis et permet aux LLM d'appeler des méthodes Java.
Koog (Jetbrains) : framework d'agents basé sur Kotlin, typé et spécifique aux développeurs JVM/Kotlin.
Akka : a pivoté pour se concentrer sur les flux de travail d'agents IA, abordant la complexité, la confiance et les coûts des agents dans les systèmes distribués.
Le Model Context Protocol (MCP) est jugé insuffisant, manquant d'explicabilité, de découvrabilité, de capacité à mélanger les modèles, de garde-fous, de gestion de flux, de composabilité et d'intégration sécurisée.
Les développeurs Java sont bien placés pour construire des applications compatibles IA et intégrer des agents.
Des acteurs majeurs comme IBM, Red Hat et Oracle continuent d'investir massivement dans Java et son intégration avec l'IA.
La JVM effectue une initialisation complexe avant d'exécuter le code : validation des arguments, détection des ressources système et sélection du garbage collector approprié
Le chargement de classes suit une stratégie lazy où chaque classe charge d'abord ses dépendances dans l'ordre de déclaration, créant une chaîne d'environ 450 classes même pour un simple Hello World
La liaison de classes comprend trois sous-processus : vérification de la structure, préparation avec initialisation des champs statiques à leurs valeurs par défaut, et résolution des références symboliques du Constant Pool
Le CDS améliore les performances au démarrage en fournissant des classes pré-vérifiées, réduisant le travail de la JVM
L'initialisation de classe exécute les initialiseurs statiques via la méthode spéciale clinit générée automatiquement par javac
Le Project Leyden introduit la compilation AOT dans JDK 24 pour réduire le temps de démarrage en effectuant le chargement et la liaison de classes en avance de phase
Dans cet épisode, Arnaud et Guillaume discutent des dernières évolutions dans le monde de la programmation, notamment les nouveautés de Java 25, JUnit 6, et Jackson 3. Ils abordent également les récents développements en IA, les problèmes rencontrés dans le cloud, et l'état actuel de React et du web. Dans cette conversation, les intervenants abordent divers sujets liés à la technologie, notamment les spécifications de Wasteme, l'utilisation des UUID dans les bases de données, l'approche RAG en intelligence artificielle, les outils MCP, et la création d'images avec Nano Banana. Ils discutent également des complexités du format YAML, des récents dramas dans la communauté Ruby, de l'importance d'une bonne documentation, des politiques de retour au bureau, et des avancées de Cloud Code. Enfin, ils évoquent l'initiative de cafés IA pour démystifier l'intelligence artificielle.
Groovy 5: Évolution des versions précédentes, nouvelles fonctionnalités et simplification du code.
Compatibilité JDK étendue: Full support JDK 11-25, fonctionnalités JDK 17-25 disponibles sur les JDK plus anciens.
Extension majeure des méthodes: Plus de 350 méthodes améliorées, opérations sur tableaux jusqu'à 10x plus rapides, itérateurs paresseux.
Améliorations des transformations AST: Nouveau @OperatorRename, génération automatique de @NamedParam pour @MapConstructor et copyWith.
REPL (groovysh) modernisé: Basé sur JLine 3, support multi-plateforme, coloration syntaxique, historique et complétion.
Meilleure interopérabilité Java: Pattern Matching pour instanceof, support JEP-512 (fichiers source compacts et méthodes main d'instance).
Standards web modernes: Support Jakarta EE (par défaut) et Javax EE (héritage) pour la création de contenu web.
Vérification de type améliorée: Contrôle des chaînes de format plus robuste que Java.
Additions au langage: Génération d'itérateurs infinis, variables d'index dans les boucles, opérateur d'implication logique ==>.
Améliorations diverses: Import automatique de java.time.**, var avec multi-assignation, groupes de capture nommés pour regex (=~), méthodes utilitaires de graphiques à barres ASCII.
Changements impactants: Plusieurs modifications peuvent nécessiter une adaptation du code existant (visibilité, gestion des imports, comportement de certaines méthodes).
**Exigences JDK*: Construction avec JDK17+, exécution avec JDK11+.
ADK pour Java 0.2.0 : Nouvelle version du kit de développement d'agents de Google.
Intégration LangChain4j : Ouvre ADK à des modèles de langage tiers.
Plus de choix de LLM : En plus de Gemini et Claude, accès aux modèles d'OpenAI, Anthropic, Mistral, etc.
Modèles locaux supportés : Utilisation possible de modèles via Ollama ou Docker Model Runner.
Améliorations des outils : Création d'outils à partir d'instances d'objets, meilleur support asynchrone et contrôle des boucles d'exécution.
Logique et mémoire avancées : Ajout de callbacks en chaîne et de nouvelles options pour la gestion de la mémoire et le RAG (Retrieval-Augmented Generation).
Build simplifié : Introduction d'un POM parent et du Maven Wrapper pour un processus de construction cohérent.
Panne majeure d'AWS (région US-EAST-1) : problème DNS affectant DynamoDB, service fondamental, causant des défaillances en cascade de nombreux services internet.
Réponse lente : 75 minutes pour identifier la cause profonde; la page de statut affichait initialement "tout va bien".
Cause sous-jacente principale : "fuite des cerveaux" (départ d'ingénieurs AWS seniors).
Perte de connaissances institutionnelles : des décennies d'expertise critique sur les systèmes AWS et les modes de défaillance historiques parties avec ces départs.
Prédictions confirmées : un ancien d'AWS avait anticipé une augmentation des pannes majeures en 2024.
Preuves de la perte de talents :
Plus de 27 000 licenciements chez Amazon (2022-2025).
Taux élevé de "départs regrettés" (69-81%).
Mécontentement lié à la politique de "Return to Office" et au manque de reconnaissance de l'expertise.
Conséquences : les nouvelles équipes, plus réduites, manquent de l'expérience nécessaire pour prévenir les pannes ou réduire les temps de récupération.
Perspective : Le marché pourrait pardonner cette fois, mais le problème persistera, rendant les futurs incidents plus probables.
React domine par défaut, non par mérite technique, étouffant ainsi l'innovation front-end.
Choix par réflexe ("tout le monde connaît React"), freinant l'évaluation d'alternatives potentiellement supérieures.
Fondations techniques de React (V-DOM, complexité des Hooks, Server Components) vues comme des contraintes actuelles.
Des frameworks innovants (Svelte pour la compilation, Solid pour la réactivité fine, Qwik pour la "resumability") offrent des modèles plus performants mais sont sous-adoptés.
La monoculture de React génère une dette technique (runtime, réconciliation) et centre les compétences sur le framework plutôt que sur les fondamentaux web.
L'API React est complexe, augmentant la charge cognitive et les risques de bugs, contrairement aux alternatives plus simples.
L'effet de réseau crée une "prison": offres d'emploi spécifiques, inertie institutionnelle, leaders choisissant l'option "sûre".
Nécessité de choisir les frameworks selon les contraintes du projet et le mérite technique, non par inertie.
Les arguments courants (maturité de l'écosystème, recrutement, bibliothèques, stabilité) sont remis en question; une dépendance excessive peut devenir un fardeau.
La monoculture ralentit l'évolution du web et détourne les talents, nuisant à la diversité essentielle pour un écosystème sain et innovant.
Promouvoir la diversité des frameworks pour un écosystème plus résilient et innovant.
Cause des problèmes de performance dans les bases de données relationnelles (ex: PostgreSQL, MySQL, SQL Server) utilisant des index B-Tree.
Inserts aléatoires réduisent l'efficacité du cache, entraînent des divisions de pages et la fragmentation.
UUIDv7 : nouveau standard conçu pour résoudre ces problèmes.
Intègre un horodatage (48 bits) en préfixe de l'identifiant, le rendant ordonné temporellement et "k-sortable".
Améliore la performance dans les bases B-Tree en favorisant les inserts séquentiels, la localité du cache et réduisant la fragmentation.
Problème de UUIDv7 pour certaines bases de données distribuées et scalables horizontalement comme Spanner :
La nature séquentielle d'UUIDv7 (via l'horodatage) crée des "hotspots d'écriture" (points chauds) dans Spanner.
Spanner distribue les données en "splits" (partitions) basées sur les plages de clés. Les clés séquentielles concentrent les écritures sur un seul "split".
Ceci empêche Spanner de distribuer la charge et de scaler les écritures, créant un goulot d'étranglement ("anti-pattern").
Quand ce n'est PAS un problème pour Spanner :
Si le taux d'écriture total est inférieur à environ 3 500 écritures/seconde pour un seul "split".
Le hotspot est "bénin" à cette échelle et n'entraîne pas de dégradation de performance.
Solutions pour Spanner :
Principe clé : S'assurer que la première partie de la clé primaire est NON séquentielle pour distribuer les écritures. UUIDv7 peut être utilisé, mais pas comme préfixe.
Nouvelle conception ("greenfield") :
▪︎ Utiliser une clé primaire non-séquentielle (ex: UUIDv4 simple).
Pour les requêtes basées sur le temps, créer un index secondaire sur la colonne d'horodatage, mais le SHARDER (ex: shardId) pour éviter les hotspots sur l'index lui-même.
Migration (garder UUIDv7) :
▪︎ Ajouter un préfixe de sharding : Introduire une colonne `shard` calculée (ex: `MOD(ABS(FARM_FINGERPRINT(order_id_v7)), N)`) et l'utiliser comme PREMIER élément d'une clé primaire composite (`PRIMARY KEY (shard, order_id_v7)`).
Réordonner les colonnes (si clé primaire composite existante) : Si la clé primaire est déjà composite (ex: (order_id_v7, tenant_id)), réordonner en (tenant_id, order_id_v7). Cela aide si tenant_id a une cardinalité élevée et distribue bien. (Un tenant_id très actif pourrait toujours nécessiter un préfixe de sharding supplémentaire).
Claude Code : outil de développement "AI-first" créé par Boris Cherny, Sid Bidasaria et Cat Wu.
Performance impressionnante : 500M$ de revenus annuels, utilisation multipliée par 10 en 3 mois.
Adoption interne massive : Plus de 80% des ingénieurs d'Anthropic l'utilisent quotidiennement, y compris les data scientists.
Augmentation de productivité : 67% d'augmentation des Pull Requests (PR) par ingénieur malgré le doublement de l'équipe.
Origine : Commande CLI simple évoluant vers un outil accédant au système de fichiers, exploitant le "product overhang" du modèle Claude.
Raison du lancement public : Apprendre sur la sécurité et les capacités des modèles d'IA.
Pile technologique "on distribution" : TypeScript, React (avec Ink), Yoga, Bun. Choisie car le modèle Claude est déjà très performant avec ces technologies.
"Claude Code écrit 90% de son propre code" : Le modèle prend en charge la majeure partie du développement.
Architecture légère : Simple "shell" autour du modèle Claude, minimisant la logique métier et le code (suppression constante de code superflu).
Exécution locale : Privilégiée pour sa simplicité, sans virtualisation.
Sécurité : Système de permissions granulaire demandant confirmation avant chaque action potentiellement dangereuse (ex: suppression de fichiers).
Développement rapide :
Jusqu'à 100 releases internes/jour, 1 release externe/jour.
5 Pull Requests/ingénieur/jour.
Prototypage ultra-rapide (ex: 20+ prototypes d'une fonctionnalité en quelques heures) grâce aux agents IA.
Innovation UI/UX : Redéfinit l'expérience du terminal grâce à l'interaction LLM, avec des fonctionnalités comme les sous-agents, les styles de sortie configurables, et un mode "Learning".
Arnaud et Emmanuel discutent des nouvelles de ce mois. On y parle intégrité de JVM, fetch size de JDBC, MCP, de prompt engineering, de DeepSeek bien sûr mais aussi de Maven 4 et des proxy de répository Maven. Et d'autres choses encore, bonne lecture.
JavaScript Temporal est un nouvel objet conçu pour remplacer l'objet Date, qui présente des défauts.
Il résout des problèmes tels que le manque de prise en charge des fuseaux horaires et la mutabilité.
Temporal introduit des concepts tels que les instants, les heures civiles et les durées.
Il fournit des classes pour gérer diverses représentations de date/heure, y compris celles qui tiennent compte du fuseau horaire et celles qui n'en tiennent pas compte.
Temporal simplifie l'utilisation de différents calendriers (par exemple, chinois, hébreu).
Il comprend des méthodes pour les comparaisons, les conversions et le formatage des dates et des heures.
La prise en charge par les navigateurs est expérimentale, Firefox Nightly ayant l'implémentation la plus aboutie.
Un polyfill est disponible pour essayer Temporal dans n'importe quel navigateur.
On demande directement à l'IA de répondre à une question sans lui fournir d'exemple préalable. C'est comme si on posait une question à une personne sans lui donner de contexte.
Few-Shot Prompting:
On donne à l'IA un ou plusieurs exemples de la tâche qu'on souhaite qu'elle accomplisse. C'est comme montrer à quelqu'un comment faire quelque chose avant de lui demander de le faire.
System Prompting:
On définit le contexte général et le but de la tâche pour l'IA. C'est comme donner à l'IA des instructions générales sur ce qu'elle doit faire.
Role Prompting:
On attribue un rôle spécifique à l'IA (enseignant, journaliste, etc.). C'est comme demander à quelqu'un de jouer un rôle spécifique.
Contextual Prompting:
On fournit des informations supplémentaires ou un contexte pour la tâche. C'est comme donner à quelqu'un toutes les informations nécessaires pour répondre à une question.
Step-Back Prompting:
On pose d'abord une question générale, puis on utilise la réponse pour poser une question plus spécifique. C'est comme poser une question ouverte avant de poser une question plus fermée.
Chain-of-Thought Prompting:
On demande à l'IA de montrer étape par étape comment elle arrive à sa conclusion. C'est comme demander à quelqu'un d'expliquer son raisonnement.
Self-Consistency Prompting:
On pose plusieurs fois la même question à l'IA et on compare les réponses pour trouver la plus cohérente. C'est comme vérifier une réponse en la posant sous différentes formes.
Tree-of-Thoughts Prompting:
On permet à l'IA d'explorer plusieurs chemins de raisonnement en même temps. C'est comme considérer toutes les options possibles avant de prendre une décision.
ReAct Prompting:
On permet à l'IA d'interagir avec des outils externes pour résoudre des problèmes complexes. C'est comme donner à quelqu'un les outils nécessaires pour résoudre un problème.
le direct prompt qui est un appel direct au LLM: limitations de connaissance et de controle de l'experience
eval: evaluer la sortie d'un LLM avec plusieurs techniques mais fondamentalement une fonction qui prend la demande, la reponse et donc un score numerique
evaluation via un LLM (le meme ou un autre), ou evaluation humaine
tourner les evaluations a partir de la chaine de build amis aussi en live vu que les LLMs puvent evoluer.
Decrit les embedding notament d'image amis aussi de texte avec la notion de contexte
Création d'un générateur automatisé de nouvelles de science-fiction à l'aide de Gemini et Imagen en Java, LangChain4j, sur Google Cloud.
Le système génère chaque nuit des histoires, complétées par des illustrations créées par le modèle Imagen 3, et les publie sur un site Web.
Une étape d'auto-réflexion utilise Gemini pour sélectionner la meilleure image pour chaque chapitre.
L'agent utilise un workflow explicite, drivé par le code Java, où les étapes sont prédéfinies dans le code, plutôt que de s'appuyer sur une planification basée sur LLM.
Le code est disponible sur GitHub et l'application est déployée sur Google Cloud.
L'article oppose les agents de workflow explicites aux agents autonomes, en soulignant les compromis de chaque approche. Car parfois, les Agent IA autonomes qui gèrent leur propre planning hallucinent un peu trop et n'établissent pas un plan correctement, ou ne le suive pas comme il faut, voire hallucine des "function call".
Le projet utilise Cloud Build, le Cloud Run jobs, Cloud Scheduler, Firestore comme base de données, et Firebase pour le déploiement et l'automatisation du frontend.
Dans le deuxième article, L'approche est différente, Guillaume utilise un outil de Workflow, plutôt que de diriger le planning avec du code Java.
L'approche impérative utilise du code Java explicite pour orchestrer le workflow, offrant ainsi un contrôle et une parallélisation précis.
L'approche déclarative utilise un fichier YAML pour définir le workflow, en spécifiant les étapes, les entrées, les sorties et l'ordre d'exécution.
Le workflow comprend les étapes permettant de générer une histoire avec Gemini 2, de créer une invite d'image, de générer des images avec Imagen 3 et d'enregistrer le résultat dans Cloud Firestore (base de donnée NoSQL).
Les principaux avantages de l'approche impérative sont un contrôle précis, une parallélisation explicite et des outils de programmation familiers.
Les principaux avantages de l'approche déclarative sont des définitions de workflow peut-être plus faciles à comprendre (même si c'est un YAML, berk !) la visualisation, l'évolutivité et une maintenance simplifiée (on peut juste changer le YAML dans la console, comme au bon vieux temps du PHP en prod).
Les inconvénients de l'approche impérative incluent le besoin de connaissances en programmation, les défis potentiels en matière de maintenance et la gestion des conteneurs.
Les inconvénients de l'approche déclarative incluent une création YAML pénible, un contrôle de parallélisation limité, l'absence d'émulateur local et un débogage moins intuitif.
Le choix entre les approches dépend des exigences du projet, la déclarative étant adaptée aux workflows plus simples.
L'article conclut que la planification déclarative peut aider les agents IA à rester concentrés et prévisibles.
Quelque soit le langage, la techno, il est hautement conseillé de mettre en place des gestionnaires de repositories en tant que proxy pour mieux contrôler les dépendances qui contribuent à la création de vos produits
Michael Stepankin de l'équipe GitHub Security Lab a cherché a savoir si ces derniers ne sont pas aussi sources de vulnérabilité en étudiant quelques CVEs sur des produits comme JFrog Artifactory, Sonatype Nexus, et Reposilite
Certaines failles viennent de la UI des produits qui permettent d'afficher les artifacts (ex: mettez un JS dans un fichier POM) et même de naviguer dedans (ex: voir le contenu d'un jar / zip et on exploite l'API pour lire, voir modifier des fichiers du serveur en dehors des archives)
Les artifacts peuvent aussi être compromis en jouant sur les paramètres propriétaires des URLs ou en jouant sur le nomage avec les encodings.
Bref, rien n'est simple ni niveau. Tout système rajoute de la compléxité et il est important de les tenir à mettre à jour. Il faut surveiller activement sa chaine de distribution via différents moyens et ne pas tout miser sur le repository manager.
Julien de Provin: J'aime beaucoup le mode "continuous testing" de Quarkus, et je me demandais s'il existait une alternative en dehors de Quarkus, ou à défaut, des ressources sur son fonctionnement ? J'aimerais beaucoup avoir un outil agnostique utilisable sur les projets non-Quarkus sur lesquels j'intervient, quitte à y metttre un peu d'huile de coude (ou de phalange pour le coup).
Dans cet épisode, Audrey et Emmanuel se retrouvent en tête à tête pour discuter du nouveau drama à venir dans l'écosystème Java (Leyden), de l'actualité des librairies, des annonces de GitHub, de bonnes pratiques en matière d'outils et d'architecture et bien évidemment de la prochaine appli tendance : Stop Covid.
si on downgrade sur le gratuit, on perd quoi https://help.github.com/en/github/getting-started-with-github/faq-about-changes-to-githubs-plans#if-i-downgrade-from-github-team-or-a-legacy-plan-to-github-free-what-features-will-i-lose
LCC 231 - Interview sur Vim avec Romain Lafourcade
04 May 2020
01:45:55
Romain Lafourcade échange avec Guillaume et Emmanuel sur Vim: comment il y est venu, ce qu'il a d'unique, comment l'appréhender, et bien d'autres choses encore.
GitHub de Romain Je m'appelle Romain Lafourcade. Je suis Graphiste de formation et j'ai chopé le virus du développement en montant mon premier site en 1999. Je suis Développeur pour de vrai depuis 2007. J'ai beaucoup fait de JS, bien sûr, ainsi que du Flash et du Silverlight. Ça fait quelques années que je me concentre sur React et Vue.js.
Aujourd'hui je suis chez Publicis Sapient France, une "agence digitale" de premier plan où je m'amusais déjà très bien jusqu'à l'arrivée des ex-Xebians. Et maintenant c'est encore mieux. Je participe actuellement à la préparation d'une conférence "front" pointue pour la fin de l'année : FrontSide.
Mes intérêts personnels gravitent autour de la programmation fonctionnelle : Haskell, Elixir.
Vim est un éditeur de texte orienté programmation, puissant et non-conformiste.
Que peut on dire de la différence entre un IDE et un éditeur ?
Dans son expression la plus simple, un éditeur de texte est un outil permettant l'édition de fichiers de texte brut. Certains sont "standalone", comme Vim, Nano ou Gedit, se concentrant pour la majeure partie sur des questions liées à l'édition de texte et déléguant les autres tâches liée au développement logiciel à d'autres outils "standalone". C'est la vision UNIX traditionnelle :
"Écrivez des programmes qui effectuent une seule chose et qui le font bien."
D'autres sont "intégrés" avec d'autres outils pour offrir une expérience plus "clé en main", les IDEs.
L'histoire de Vim
Vim est né au début des années 90 sur Amiga, pour la même raison que tous les autres clones de vi : l'impossibilité légale d'utiliser vi sur tel ou tel système. De tous les clones, c'est celui qui s'est le plus démarqué de l'original et c'est le seul qui est encore développé activement en 2020.
Les archéologues en herbe trouveront quelques liens sur le sujet en bas de page.
Disponibilité de Vim sur les distros de base
Un des arguments les plus souvent mis en avant pour convaincre les mécréants de l'utilité d'apprendre Vim est "Vim est partout".
Mais l'ubiquité légendaire de Vim est un mythe. Ce qui est disponible dans tous les dérivés d'UNIX, c'est la commande vi. Le programme qui assure le boulot peut être Vim comme il peut être Elvis, Nvi, Busybox vi ou même le vi original. Et même quand c'est Vim, c'est souvent un build limité. Du coup, connaître Vim n'est peut-être pas aussi utile que connaître vi.
Et c'est sans compter sur le fait que le système d'exploitation le plus largement utilisé, n'a pas de commande vi ou vim du tout.
Vim vs emacs: la guerre ancestrale
et aussi débile que toutes les guerres ancestrales.
Les variantes de Vim
Neovim est un fork récent promettant une modernisation des processus de développement et du code.
Vim au quotidien Pas de curseur?????
On a bien un curseur, mais les dispositifs de pointage sont rarement activés par défaut. Même si c'est tout à fait possible d'utiliser la souris ou le trackpad (:help 'mouse'), on est clairement dans un monde centré autour du clavier.
Les modes (normal, insert, visual, etc.)
L'édition modale, un concept initié par vi, ne fait pas l'unanimité. L'idée, c'est qu'on est toujours dans un mode réservé à une certaine catégorie d'activités. Un des effets positifs, et aussi un des repoussoirs de ce mécanisme est que ça permet d'avoir un vocabulaire plus varié et expressif que dans un éditeur classique. Le déplacement du curseur, par exemple, se fait traditionnellement avec une combinaison de 4 touches de directions et 1 modificateurs, donc 8 déplacements possibles : 1 caractère vers la droite ou la gauche, 1 mot vers la droite ou la gauche, 1 ligne vers le haut ou le bas, 1 paragraphe vers le haut ou le bas. C'est très pauvre, même en ajoutant Home, End, Page Up et Page Down. Dans vim, on a tout ça, bien sûr, plus "début du mot", "fin du mot", "prochaine/précédente occurrence de ", "prochaine/précédente occurrence de ", "ligne numéro X", "n lignes vers le haut ou le bas", "haut/bas/milieu de la fenêtre", "marqueur X", etc. Rien jjque ça c'est dingue. Et comme on est dans un éditeur modal, tous ces mouvement peuvent être utilisés avec des opérateurs et là c'est la folie.
Les modes les plus couramment utilisés sont :
le mode normal, le mode par défaut quand on fait $ vim foo.txt, qui est utilisé pour naviguer, chercher, copier, coller, etc.
le mode d'insertion, qui permet… d'insérer du texte dans le document,
les modes visuels, qui permettent de sélectionner une portion de texte,
le mode ligne de commande, qui permet d'utiliser les commandes héritées d'Ex : :write, :s, :g, etc.
Le concept de verbe / opérateur + movement + destination
C'est pour moi LA killer feature de Vim, surtout visible dans les modes normal et visuels. En gros, le modèle d'interaction est basé sur la notion de langage. Il y a :
des "opérateurs", des verbes conjugués à l'impératif comme "efface", "copie", "remplace",
des compléments d'objet directs comme "la ligne 78", "ce texte entre parenthèses", "d'ici à la fin du paragraphe",
des compléments d'objet indirects comme "en dessous de la ligne 27" ou "au début du buffer",
et des compléments circonstanciels comme "10 fois".
Avec tout ça, on donne des commandes à la machine selon une syntaxe proche de celle d'un langage parlé et elle obéit : "colle le texte contenu dans le presse papier 50 fois", "copie (d'ici) jusqu'à la prochaine parenthèse ouvrante", etc. Dans un éditeur de texte classique, la première se dit "ctrl+v ctrl+v … ctrl+v", ce qui n'a presque rien à voir avec la tâche telle qu'imaginée : "colle truc 50 fois" est devenu "colle colle … colle", ce qui est très peu expressif. Notre pensée abstraite de haut niveau doit être transformée en une série d'action concrètes de bas niveau qui n'ont que très peu de sens et souvent rien à voir avec la pensée haut niveau. Dans Vim, la première commande se dit "50p", ce qui est très proche de la tâche telle qu'imaginée.
La syntaxe est peut-être un peu sèche et les éléments sont peut-être ordonnés différemment qu'en français, mais ça reste tout à fait abordable et très proche de ce qu'on a dans la tête. L'étape suivante est exactement la même que lorsqu'on apprend une langue étrangère : penser dans la langue.
Apprendre Vim, c'est apprendre une grammaire simple et un vocabulaire expressif qui s'enrichit au fur et à mesure où on avance.
La notion de range
Vim hérite plein de trucs de vi, qui hérite lui-même plein de trucs de ex. Dans vim, toutes les commandes qui commencent par un "deux points" sont des "commandes Ex", qui agissent sur des lignes car ex était un éditeur de ligne. Comme dans ex, ces commandes prennent des adresses (une seule ligne) et des ranges (de telle ligne à telle autre). Une ligne peut être indiquée par son numéro, par un offset, par une recherche, par un marqueur, etc. C'est un outil extrêmement puissant.
Par exemple, la commande suivante copie les lignes 10 à 24 en fin de document :
:10,24t$
Celle-ci rassemble toutes les lignes contenant const dans la fonction courante vers le haut du corps de la fonction :
:?func?,/^}/g/const/m?func?
C'est d'une élégance insoutenable.
D'autres concepts de base (window, tab, buffer, split, etc.)
On a toujours au moins un "buffer", une "fenêtre" et une "tab page". Un buffer peut être affiché dans une ou plusieurs "fenêtres", une "tab page" est un rassemblement de "fenêtres". Contrairement à la plupart des éditeurs de texte il ne peut pas y avoir de relation 1-à–1 entre un buffer et une fenêtre ou entre un buffer et une tab page. C'est un piège dans lequel tous les nouveaux tombent.
Tu l'utilises pour quels genre d'édition
J'utilise Vim de deux façons différentes : de longues sessions de programmation et des éditions rapides (config, git commit, etc.), pratiquement tout le temps dans un terminal.
Les colorschemes
La dernière fois que j'ai checké il y en avait littéralement des milliers, du simple qui marche partout, utilisé par quelques barbus ronchons, à l'usine à gaz buggée à mort, utilisée par la dernière génération de boutonneux. J'en ai réalisé quelques uns, même, comme Apprentice, ainsi qu'un modèle simple à utiliser. Maintenant qu'on peut utiliser toutes les valeurs hexadécimales, même dans le terminal, c'est la fête.
Pour trouver des colorschemes, je recommande VimColors.
Les binding Vim dans les IDEs
Peut-être utile pour accompagner l'apprentissage de Vim mais passé un certain niveau c'est l'uncanny valley. C'est un des problèmes causés par des années de Vim, d'ailleurs : ça rend exigeant.
Le terminal
Le nerf de la guerre d'un Vim qui fonctionne tmux?
Vim écosystème La gestion des plugins
Si on a beaucoup de plugins ça peut devenir compliqué sans plugin manager. Le plus populaire est vim-plug.
YouCompleteMe, beaucoup plus que de l'autocompletion.
Vim et les plugins VSCode (via LSP)
Les spécifications de pas mal de fonctionnalités de Visual Studio Code sont actuellement publiées, ce qui permet à d'autres outils de développement de bénéficier de l'étendue de son ecosystème. Il y a LSP, par exemple, qui permet d'implémenter des serveurs pour n'importe quel langage et des clients pour n'importe quel éditeur. Les clients à suivre pour Vim son lsc et CoC. Peut-être aurons-nous une intégration native un jour ? Il y a aussi DAP qui est utilisé par Vimspector pour fournir une interface de débogage avancée.
La navigation entre fichiers
Un faux problème, souvent résolu en mode "brute force" par manque de volonté d'apprendre à se servir des fonctionnalités de base. Du coup on a des dizaines de plugins fantaisistes et des générations de vimmers superficiels. C'est triste. En vrai, :edit, :find et :buffer sont rapides et versatiles. Il suffit de prendre le temps d'apprendre à s'en servir.
Il existe un nombre hallucinant de plugins pour naviguer les fichiers alors que c'est si simple et rapide avec les outils natifs.
La vérification orthographique
La fonctionnalité est incluse de base. Il faut néanmoins l'activer avec :help 'spell' et, si on veut de l'aide pour autre chose que de l'anglais, installer des dictionnaires. Ça sonne plus compliqué que ça ne l'est vraiment.
gg=G pour réparer l'indentation d'un buffer en entier
:help 'equalprg' pour indiquer à Vim quel programme externe utiliser
Paramètres custom par fichier via modeline
Voir :help modeline pour des exemples. Je ne suis pas hyper fan en général que je trouve ça un peu sale de mélanger data et metada mais ça peut être bien en bas d'un fichier Markdown dont on sait qu'il va être édité dans Vim :
[//]: # ( Vim: set spell spelllang=en: )
En pratique, je suggère plutôt editorconfig pour les réglages d'indentation et compagnie.
Vim et git
Fugitive, mentionné plus haut, est très populaire. Pour ma part, je préfère garder mon éditeur de texte pour éditer du texte et utiliser d'autres outils spécialisés pour d'autres tâches spécialisées. J'aime beaucoup tig, que j'utilise au jour le jour depuis des années, et j'ai découvert git-jump récemment, qui a fait une entrée fracassante dans mon workflow.
Sinon, pour les commandes basiques, un simple :!git fait largement le taf.
Les macros
Une macro est une séquence de commande. On peut enregistrer une macro dans le registre q :
qq 02wciwfoo q
et la rejouer sur plusieurs lignes, par exemple :
:23,45normal! @q
Mais avec un peu de pratique on peut complètement zapper la phase « enregistrement » :
:23,45normal! 02wciwfoo
Les macros sont un outil d'automatisation extraordinaire qui épate facilement le spectateur. Voir :help complex-repeat.
Copier dans le buffer de l'OS (ctrl+c ctrl+v)
Pour ça, l'idéal est d'avoir un Vim compilé avec la fonctionnalité "clipboard". Si c'est pas possible on peut bricoler des trucs avec xclip/pbcopy/etc. ou utiliser les fonctionnalités de copier/coller du terminal.
Le clipboard système est représenté par le registre + dans vim. Donc copier dans le clipboard: "+y, et ensuite coller, "+p. Note que " est la sélection de registre.
Remplacer via des expressions régulières
La substitution, basée sur les expressions régulières ou pas, est une pratique courante dans Vim. Par exemple, pour remplacer toutes les occurrences de java par kotlin dans le buffer courant :
Readline, la bibliothèque utilisée par bash pour gérer l'invite de commande, utilise des raccourcis inspirés par Emacs par défaut. On peut changer ça en ajoutant la ligne suivante dans ~/.inputrc:
set editing-mode vi
Personnellement, je préfère garder les raccourcis par défaut et éditer mes commandes directement dans Vim, avec Ctrl-x Ctrl-e. Si vous ave mis le mode vi, alors pour éditer la commande dans vim, tapez ESC v.
Vimdiff
On peut utiliser Vim pour afficher des diffs côte à côte et même pour gérer les merge conflicts dans Git.
Encore un épisode très long, mais cette fois il a une bonne excuse : on a censuré aucune blague ! Cet épisode nous a fait beaucoup de bien à enregistrer c'est pourquoi nous avons tout gardé, même ce qui serait normalement passé en off, en espérant qu'il vous fera autant de bien à l'écouter ! Et ce n'est pas pour autant qu'Audrey, Emmanuel et Guillaume ne disent que des bêtises : on parle bien évidemment de tout ce qui fait l'actu tech (Java, Kotlin, Micronaut, Quarkus, Vert.x, Docker et autres) mais aussi de surveillance en cette période très particulière.
LCC 229 - Interview sur la sobriété numérique avec Richard Hanna
01 Apr 2020
01:38:22
Dans cet épisode Arnaud et Audrey interviewent Richard, contributeur du Shift Project, un think thank qui œuvre en faveur d'une économie libérée de la contrainte carbone et qui a publié plusieurs rapports en faveur d'une sobriété numérique.
En cette période de confinement et de Coronavirus, les cast codeurs partagent et échangent leurs points de vue et conseil pour faire du télétravail. En espérant que cela vous aide un petit peu.
LCC 227 - Télétravailler une corona dans une main et un gamin dans l'autre
17 Mar 2020
01:27:18
Cet épisode parle du coronavirus, des conférences annulées, de la popularité des langages, de GraphQL, de Ghostcat et pleins d'autres choses encore. L'intro date un peu: les infos sur le coronavirus étant encore plus fréquentes que les nouveaux framework JavaScript.
LCC 226 - Interview sur l'Open Source à la MAIF avec Mathieu Ancelin et François Desmier
09 Mar 2020
01:08:46
Dans cet épisode, Mathieu Ancelin et François Desmier sont venus nous parler des produits open source de la MAIF. On parle management d'API, reverse proxy, A/B Testing, feature flipping mais aussi plus généralement de comment on passe d'assureur à éditeur de produits open source.
François Desmier Cyber-guru, crypto-saïyan, team ambiancer 2.4 alpha, bytes master et surtout architecte solution à la MAIF, engagé sur #OSSbyMAIF Mathieu Ancelin Développeur fullstack chez SERLI, je fais du web, des streams, de la data, du cloud majoritairement sur la JVM et j'ai un petit faible pour Scala et la programmation fonctionnelle. Je suis également lead développeur de quelques projets open-source comme Otoroshi, Daikoku, etc. et l'un des organisateurs des Human Talks Poitiers.
Dans cet épisode en tête à tête, Emmanuel et Audrey discutent des prévisions pour cette nouvelle année, font la part belle au langage avec l'arrivée du JDK 14 mais parlent aussi middleware, web, outillage, et bien sûr loi, société et organisation.
LCC 224 - Interview sur le burn out avec Géraldine Karila
06 Feb 2020
01:20:52
Une personne sur 5 fera un burn out au travail pendant sa carrière. Géraldine nous raconte son burn out, comment cela s'est passé, son chemin pour s'en sortir et les recherches qu'elle a fait sur le sujet.
LCC 223 - On peut anonymiser mille fois une personne mais on ne peut pas anonymiser une fois mille personne
27 Jan 2020
01:54:11
Premier épisode de l'année 2020 pour les cast codeurs avec Guillaume, Arnaud et Audrey autour du micro pour parler du JDK 14 bien sûr mais aussi de Quarkus, de WebAssembly, de Kubernetes mais aussi de l'actualité sociétale liée à la tech.
Arnaud et Emmanuel discutent des versions Java, font un résumé de l'ecosystème WebAssembly, discutent du nouveau Model Context Protocol, parlent d'observabilité avec notamment les Wide Events et de pleins d'autres choses encore.
WebAssembly (Wasm) est un format d'instructions binaires pour une machine virtuelle basée sur une pile, permettant la portabilité et l'efficacité du code.
Wasm a évolué à partir d'asm.js, un sous-ensemble de JavaScript qui pouvait fonctionner à des vitesses proches de celles natives.
WASI (WebAssembly System Interface) permet à Wasm de fonctionner en dehors des navigateurs Web, fournissant des API pour le système de fichiers, CLI, HTTP, etc.
Le modèle de composant WebAssembly permet l'interopérabilité entre les langages Wasm à l'aide de WIT (Wasm Interface Type) et d'ABI canonique.
Les composants Wasm se composent d'un module central et d'interfaces WIT pour les importations/exportations, facilitant l'interaction indépendante du langage.
Les interfaces WIT décrivent les types et les fonctions, tandis que les mondes WIT définissent les capacités et les besoins d'un composant (importations/exportations).
La gestion des packages Wasm est assurée par Warg, un protocole pour les registres de packages Wasm.
Une enquête a montré que Rust est le langage Wasm le plus utilisé, suivi de Kotlin et de C++; de nombreux autres langages sont également en train d'émerger.
d'abord manuel amis meme automatisé le CLA est une document legal complexe
qui peut limiter les contribuitions
le DCO vient le Linux je crois et est super simple
accord que la licence de la conmtrib est celle du projet
accord que le code est public et distribué en perpetuité
s'appuie sur les -s de git pour le sign off
Ecrire un serveur MCP en Quarkus https://quarkus.io/blog/mcp-server/ MCP est un protocol proposé paor Antropic pour integrer des outils orchestrables par les LLMs
MCP est frais et va plus loin que les outils
offre la notion de resource (file), de functions (tools), et de proimpts pre-built pour appeler l'outil de la meilleure façon
On en reparlera a pres avec les agent dans un article suivant
il y a une extension Quarkus pour simplifier le codage
Une mini UI et des APIs REST permettent d'interagir avec le serveur si par exemple vous le partagé dans un container (il n'y a pas d'integration TestContainer existante mais elle n'est pas compliquée à écrire)
Ne recommence pas les frameworks (LangChain, Amazon Bedrock AI Agent etc) le fameux débat sur l'abstraction
Beaucoup de patterns implementable avec quelques lignes sans frameworks
Plusieurs blocks de complexité croissante
Augmented LLM (RAG, memory etc): Anthropic dit que les LLMs savent coordonner cela via MCP apr exemple
Second: workflow prompt chaining : avec des gates et appelle les LLMs savent coordonner successivement ; favorise la precision vs la latence vu que les taches sont décomposées en plusieurs calls LLMs
Workflow routing: classifie une entree et choisie la route a meilleure: separation de responsabilité
Workflow : parallelisation: LLM travaillent en paralllele sur une tache et un aggregateur fait la synthèse. Paralleisaiton avec saucissonage de la tache ou voter sur le meilleur réponse
Workflow : orchestrator workers: quand les taches ne sont pas bounded ou connues (genre le nombre de fichiers de code à changer) - les sous taches ne sont pas prédéfinies
Workflow: evaluator optimizer: nun LLM propose une réponse, un LLM l'évalue et demande une meilleure réponse au besoin
Agents: commande ou interaction avec l;humain puis autonome meme si il peut revenir demander des precisions à l'humain. Agents sont souvent des LLM utilisât des outil pour modifier l'environnement et réagir a feedback en boucle
Ideal pour les problèmes ouverts et ou le nombre d'étapes n'est pas connu
Recommende d'y aller avec une complexité progressive
Pinterest utilise Honeycomb pour améliorer l'observabilité de l'intégration continue (CI).
Honeycomb permet à Pinterest de visualiser les métriques de build, d'analyser les tendances et de prendre des décisions basées sur les données.
Honeycomb aide également Pinterest à identifier les causes potentielles des échecs de build et à rationaliser les tâches d'astreinte.
Honeycomb peut également être utilisé pour suivre les métriques de build locales iOS aux côtés des détails de la machine, ce qui aide Pinterest à prioriser les mises à niveau des ordinateurs portables pour les développeurs.
LCC 222 - Interview sur Android avec Pierre-Yves Ricau et Romain Guy - l'intégrale
24 Dec 2019
02:21:28
Dans cet épisode, Emamnuel s'assoie autour de la table avec Romain Guy et Pierre-Yves Ricau pour discuter Android. Cela fait longtemps que la partie 1 est sortie. Désolé de ce retard. Du coup cet épisode reprend l'entièreté de l'interview. Pour ceux qui se rappellent bien de la partie 1, vous pouvez sauter à la minute 62 environ.
Guillaume, Arnaud et Emmanuel descendent dans les profondeurs des garbage collectors, Java 14, GraalVM 19.3 (Java is back!) et bien sûr pleins d'autres choses !
LCC 220 - Interview sur le métier de CTO avec Dimitri Baeli
03 Dec 2019
01:26:38
Dans cet épisode, Dimitri Baeli est venu discuter avec Audrey et Emmanuel du métier de CTO et de Tech Rocks, la conf qui leur est dédiée (prochaine édition le 4 décembre 2019 à Paris).
Interview Ta vie ton oeuvre C'est quoi TechRocks ?
Tech.Rocks c'est avant tout la volonté de construire un réseau de leaders tech qui échangent sur leur problématiques. Activités :
Une conférence annuelle: 4 Dec
Des Meetups mensuels à Paris (et j'espère en province en 2020)
Un Slack avec 500 CTOs
Un groupe dit « Core » à vocation de Think Tank pour explorer les questions difficiles des grosses équipes. Un groupe restreint pour vraiment bien se connaître en croissance maîtrisée.
Un podcast et quelques publications (salaires des CTOs)
Les 6 aspects du metier Vision et decision Tech
Quels sont les "nice to have" dans une expérience professionnelle pour devenir CTO ?
Est ce qu'un CTO doit maîtriser toute la stack ?
Orga equipes (agilite, usine logicielle)
Responsabilité dans le choix de l'organisation des équipes
Posture du CTO (Orga perso, négociateur, exemplaire, CoDir, …)
C'est quoi la journée type d'un CTO ?
Est ce que l'on peut être CTO et avoir une vie perso ?
Quelles sont les différentes facettes du rôle de CTO ?
Management & Leadership
Quel est le rôle du CTO en terme de management ?
Et si tu dois te faire accepter par une équipe déjà constituée ?
Board : Quand tu rentres dans une boite, comment tu vérifies que tu as carte blanche.
Le recrutement
Comment monter ton équipe au tout départ ? Tu prends plutot quelques personnes chacunes spécialisées dans son truc ou tu prends des profils plus généralistes ?
Comment identifier les profils dont tu as besoin quand l'équipe grossit ?
Product Management (implication)
La feature pour le client X vs travail plus générique et réutilisable par tous les clients
Tous les talks sont disponible sur YouTube. Utilisez la fonction recherche ensuite. Si vous trouvez un talk, ouvrez une pull request sur Le GitHub des cast codeurs pour améliorer ses shownotes et mentionnez @emmanuelbernard. Merci :)
LCC 218 - Le cloud souverain est mort, vive le cloud souverain !
23 Oct 2019
01:52:02
Dans cet épisode, Arnaud déclare forfait et laisse Guillaume et Audrey discuter en tête à tête des nouveautés de Spring, Quarkus, JHipster, Kubernetes ou encore v8 mais aussi Cloud Souverain, reconnaissance faciale, élections présidentielles américaines et GAFAM.
LCC 217 - Interview sur Android partie 1 avec Pierre-Yves Ricau et Romain Guy
01 Oct 2019
01:03:45
Dans cet épisode, Emamnuel s'assoie autour de la table avec Romain Guy et Pierre-Yves Ricau pour discuter Android. Interview longue donc découpée en deux.
Dans cet épisode (qui est bien le 216 et pas le 217 !) Antonio, Audrey et Emmanuel reviennent sur les nouveautés du JDK 13 et discutent sécurisation d'API, authentification OAuth 2, Kubernetes, Android 10 mais aussi télétravail et vie privée.
LCC 215 - Nous avons des frustrations parce que nous combattons le changement des choses
05 Aug 2019
01:26:50
Arnaud et Emmanuel bravent les chaleurs pour discuter des tendances Java, des collections immuables (d'où le titre de l'épisode, une citation d'Alan Watts), de sondage de la population de développeurs, d'event storming, de lois et de data structures.
Les Cast Codeurs se réunissent pour leur déjeuner annuel de tous les 18 mois à deux ans pour enregistrer cet épisode news. On y discute contribution OpenJDK, JIT, sérialisation, Quarkus, CloudEvent, AWS lambda, React, daltonisme, event sourcing, uml, loi extra territoriale et bien d'autres choses encore. Le mot Barbecue vient de l'embrochement du gibier "de la barbe au cul" avant de le faire chauffer dans les cheminées de cuisine.
Emmanuel, Guillaume et Arnaud se rejoignent pour discuter de Diátaxis une approche pour structurer sa documentation. Ils offrent leur perspective sur leur usage et leur compréhension. Le sujet s'ouvre ensuite pour discuter des plateformes de documentation et comment l'IA impacte la documentation. Cet épisode est aussi sorti en vidéo, n'hésitez pas nous dire ce que vous en pensez des retours et souscrivez au channel YouTube 🤗.
Guillaume, Vincent et Emmanuel discutent des nouvelles autour de Java 12, Jakarta EE, Spring, Quarkus, la mairie de Paris et son data center. Mais aussi de web, de Huawei, du design des fichiers Dockerfile et bien d'autres choses encore.
LCC 211 - Interview sur la virtualisation avec Quentin Adam
27 May 2019
01:31:22
Quentin Adam (CEO de Clever Cloud) et Emmanuel discutent la stack de bas en haut, du physique au software sous l'angle de la virtualisation. Et bien sûr, une petite dérive de la conversation de temps en temps, parce qu'on le vaut bien.
Et par rapport à Kata Containers par exemple ? ou KVM ? Quels sont les avantages / inconvénients ? (mémoire, sécurité/sandboxing, rapidité de démarrage…)
Modèle économique, recompilation pour le matériel physique et conclusion
Dans cet épisode, Guillaume, Arnaud et Audrey reviennent sur les derniers rebondissements des drama de la tech : le futur de Jakarta EE, Amazon vs l'Open Source … Et bien sûr on discute aussi technique avec les actualités de Elastic, JHipster, Micronaut, et plein d'autres.
LCC 208 - Si après 10 ans d'open source, t'as pas ta fondation, t'as raté ta vie
08 Apr 2019
01:37:53
Dans cet épisode en tête à tête Arnaud et Audrey discutent des nouveautés de Java 12, des dernières versions de Vert.x, Kubernetes ou Traefik mais aussi open source et fondations, et bien d'autres choses encore.
Un épisode avec des news on ne peut plus fraîches puisqu'Antonio, Audrey et Vincent y parlent de Quarkus, mais aussi d'Elastic, de web et de sécu, mais aussi quelques réflexions sur le métier de développeur.
Dans cet épisode, les voisins d'Arnaud ont essayé de le réduire au silence tandis qu'Antonio tentait de faire taire Audrey. Les voisins d'Arnaud ont gagné grâce à la perceuse, mais Antonio, lui, a perdu. Résultat : un épisode news où deux cast codeurs et demi discutent de l'actualité de vos languages et frameworks préférés, mais aussi de l'actualité des géants de la tech, et ça, c'est pas toujours joli.
Dans cet épisde en audio et en vidéo (youtube.com/lescastcodeurs), Guillaume et Emmanuel discutent des 15 ans de Go, d'une nouvelle approche de garbage collecting, de LLMs dans les applications Java, dobservabilité, d'une attaque de chaine d'approvisionnement via javac et d'autres choses.
la corrections de gotchas dans les for loops (notamment les variables étaient loop scoped)
le fait que la compile echoue si on attend une version de go superieure seulement depuis go 1.21 en parallele de la gestion de la chaine d'outil (c'est en 2023 seulement!)
utiliser l'accessibilité pour preuve de vie n'est pas idéal: un objet peut etre atteignable mais ne sera jamais accedé par le programme
les regions les plus pauvres en objets vivant voient leurs objets bouger dans uen autre region et la regio libéré, c'est le comportement classique des GC
deux methodes: mark evaguate qui le fait en deux temps et la liveness peut evoluer ; et scavenge qui bouge l'objet vivant des sa decouverte
ont fait tourner via ZGC des experience pour voir les objects consideres vivants et bougés inutilement.
resultats montrent un gros taux d'objets bougés de maniere inutile
proposent un algo different
ils marquent les objets vivants mais ne les bougent pas avant le prochain GC pour leur donner une change de devenir unreachable
elimine beaucoup de deplacement inutiles vu que les objets deviennent non accessible en un cycle de GC
jusquà 91% de reduction ! Particulierement notable dans les machines chargées en CPU.
pourquoi des long access tokens (gnre refresh token) sont utilises pour des short lived dans oauth 2.0
refresh token simplifient la revocation: vu que seul le auth serveur a a verifier la révocation et les clients vérifient l'expiration et la validité de la signature
refresh token ne sont envoyés que entre endpoints alors que les access tokens se baladent pas mal: les frontières de confiance ne sont pas traversées
refresh token comme utilise infréquement, et donc peut etre protegee dans une enclave
les changements de grants sont plus simple tout en restant distribuable
histoire des access refresh token et access token permet de mieux tracer les abus / attaques
les inconvenients: c'est plus compliqué en flow, the auth serveur est un SPOF amis mitigeable
les experts peuvent écrire leurs tests au format Gherkin (de Cucumber) et les développeurs peuvent implémenter les assertions correspondantes avec l'intégration dans Spock, pour des tests très lisibles
Explique les avantage de l'approche pure Java comme le cycle de vie unique, tester les modeles rapidement, securite (tout est in process), monolithe ahahah, observabilité simplifiée, distribution simplifiée (genre appli embarquée) etc
React en tête, suivi de Vue et Svelte. Angular seulement 4ème
Côté rendering framework, Next.js a la majorité absolue, ensuite viennent Nuxt et Astro
Zod est la solution de validation préférée
Pour la gestion de date, date-fns est en tête, suivi par moment.js
Côté state management, React Context API en première place, mais les suivants sont tous aussi pour React !
Grosse utilisation de lodash pour plein d'utilités
Pour fetcher des resources distantes, l'API native Fetch et Axios sont les 2 vaincoeurs
Pour le déploiement, Vercel est premier
Côté CI/CD, beaucoup de Github Actions, suivi par Gitlab CI
Package management, malgré de bonnes alternatives, NPM se taille toujours la part du lion
Ecrasante utilisation de Node.js comme runtime JavaScript pour faire du développement front
Pour ce qui est du typing, beaucoup utilisent TypeScript, et un peu de JSdoc, et la majorité des répondants pensent que TypeScript a dépassé JavaScript en usage
Dans les API natives du navigateur, Fetch, Storage et WebSockets sont les APIs les plus utilisées
La popularité des PWA devrait suivre son petit bonhomme de chemin
En terme de design system, shadcn.ui en tête, suivi par Material, puis Bootstram
Pour la gestion des styles, un bon mix de plain old CSS, de Tailwind, et de Sass/CSS
Jest est premier comme framework de tests
Les 3/4 des développeurs front utilisent Visual Studio Code, quant au quart suivant, c'est JetBrains qui raffle les miettes
Pour le build, Vite récolte les 4/5 des voix
ESLint et Prettier sont les 2 favoris pour vérifier le code
Parfois, on aimerait pouvoir tester une librairie ou un framework JavaScript, sans pour autant devoir mettre en place tout un projet, avec outil de build et autre. Julia Evans explore les différents cas de figure, suivant la façon dont ces librairies sont bundlées https://jvns.ca/blog/2024/11/18/how-to-import-a-javascript-library/
Certaines librairies permette de ne faire qu'un simple import dans une balise script
Certaines frameworks sont distribués sous forme d'Universal Module Definition, sous CommonJS, d'ESmodule
franchemet en tant que noob c'est compliqué quand même
Data et Intelligence Artificielle
L'impact de l'IA en entreprise et des accès aux documents un peu laxistes https://archive.ph/uPyhX
l'indexing choppe tout ce qu'il peut
et l'IA est tres puissante pour diriger des requetes et extraires les données qui auraient du etre plus restreintes
l'approche "je demande gentiment" au LLM, en faisant du prompt engineering
en utilisant du function calling pour les modèles supportant la fonctionnalité, en particulier avant les approches de type "JSON mode" ou "JSON schema"
ou effectivement si le modèle le supporte aussi, toujours avec un peu de prompting, mais en utilisant le "JSON mode" qui force le LLM a générer du JSON valide
encore mieux avec la possibilité de spécifier un schema JSON (type OpenAPI) pour que le JSON en sortie soit "compliant" avec le schéma proposé
utilisation de l'API Data Loss Prevention de Google Cloud qui permet d'identifier puis de censurer / masquer ("redacted" en anglais) des informations personnelles identifiables ("PII", comme un nom, un compte bancaire, un numéro de passeport, etc)
pour des raison de sécurité, de privacy, pour éviter les brèche de données comme on en entend trop souvent parler dans les nouvelles
Guillaume recherche des bouts de code, en entrant une requête en langue naturel
Certains embedding models supportent différents types de tâches, comme question/réponse, question en langue naturelle / retour sous forme de code, ou d'autres tâches comme le fact checking, etc
Dans cet article, utilisation du modèle de Google Cloud Vertex AI, en Java, avec LangChain4j
La nouvelle version Gemini 2.0 Flash dépasse même Gemini 1.5 Pro dans les benchmarks
Tout en étant 2 fois plus rapide que Gemini 1.5 Pro, et bien que le prix ne soit pas encore annoncé, on imagine également plus abordable
Google présente Gemini 2 comme le LLM idéal pour les "agents"
Gemini propose une vraie multimodalité en sortie (premier LLM sur le marché à le proposer) : Gemini 2 peut entrelacer du texte, des images, de l'audio
Gemini 2 supporte plus de 100 langues
8 voix de haute qualité, assez naturelles, pour la partie audio
Un nouveau mode speech-to-speech en live, où on peut même interrompre le LLM, c'est d'ailleurs ce qui est utilisé dans Project Astra, l'application mobile montrée à Google I/O qui devient un vrai assistant vocale en live sur votre téléphone
Google annonce aussi une nouvelle expérimentation autour des assistants de programmation, avec Project Jules, avec lequel on peut discuter en live aussi, partager son code, comme un vrai pair programmeur
Google a présenté Project Mariner qui est un agent qui est sous forme d'extension Chrome, qui va permettre de commander votre navigateur comme votre assistant de recherche personnel, qui va être capable de faire des recherches sur le web, de naviguer dans les sites web, pour trouver les infos que vous recherchez
Un nouveau projet appelé Deep Research, qui permet de faire des rapports dans Gemini Advanced : on donne un sujet et l'agent va proposer un plan pour un rapport sur ce sujet (qu'on peut valider, retoucher) et ensuite, Deep Research va effectuer des recherches sur le web pour vous, et faire la synthèse de ses recherches dans un rapport final https://blog.google/products/gemini/google-gemini-deep-research/
Enfin, Google AI Studio, en plus de vous permettre d'expérimenter avec Gemini 2, vous pourrez aussi utiliser des "starter apps" qui montrent comment faire de la reconnaissance d'objet dans des images, comment faire des recherches avec un agent connecté à Google Maps, etc.
Google AI Studio permet également de partager votre écran avec lui, en mobile ou en desktop, de façon à l'utiliser comme un assistant qui peut voir ce que vous faites, ce que vous coder et peut répondre à vos questions
l'annotation processors des dependances est chargé et executé au moment du build du projet
et cherche les annotations processor dans le user classpath (via le pattern serviceloader)
et donc si la dependance est attaquée et un annotation processor est ajouté ou modifié on a un vecteur d'attaque au moment de la compilation du projet ciblé
des qu'on deparre l'IDE en gros
workaround, activer -proc:none et activer les annotation processors explicitly dans votre outil de build
certaines améliorations dans le JDK: le compilateur note qu'il execute un annotation processor
dans java 23+ les annotation processors sont deactivés par defaut
Dans cet épisode Guillaume, Audrey et Emmanuel reviennent sur les actualités de la fin d’année 2018 mais aussi des prédictions pour 2019. On discute JDK, management, open source mais aussi marmotte, licornes et lutins.
LCC 201 - Interview Kotlin avec Cédric Beust et Sébastien Deleuze
22 Dec 2018
01:35:21
Dans cet épisode, Audrey et Emamnuel discutent de Kotlin avec Cédric Beust et Sébastien Deleuze. On y parle du langage de sa communauté et de son écosystème.
Quelles sont les fonctionnalités clés du langage Null safety, extensions, data class, sealed class Co-routines c'est quoi (zoom) DSL
Quelles sont les inspirations de ce langage ? Pourquoi JetBrains ont ils décidé de créer ce langage ? Avait on besoin d'un énième langage ?
Quel différenciateur vs reste Early adopteurs, par rapport à la "concurrence" qu'est-ce qui vous a fait l'utiliser ?
Par rapport aux autres langages candidats modernes, votre point de vue
Le mix Object Oriented et fonctionnel, c'est le nouveau OO ? Java 8, 9+ a atténué l'attrait?
Je peux mixer Kotlin et Java dans une même base de code ? En particulier, tu peux même avoir des dépendances circulaires, genre une interface Java, une classe implémentée en Kotlin, et tu ré-étends cette classe en Java ? (et vice versa) Est-ce que l'intégration Java / Kotlin est vraiment transparente, ou bien c'est plus compliqué que ça ?
Que quelles étapes parle-t-on pour rentre une API ou un framework "native" Kotlin ?
Sous le capot
Un langage de plus haut niveau: plus lent, plus gourmand en mémoire ? Quid du boxing et type primitifs ?
Les utilisateurs type
Android Gradle Quels sont les utilisateurs type
L'écosystème
Build Framework applicatif Accès aux données Tests : mock vs Mockito Arrow
Y a-t-il une tendance "Kotlin native" (i.e. écrit en Kotlin)
L'influence sur les frameworks et les plateformes
Ecrire des APIs et des frameworks pour Kotlin, quel retour d'experience.
Guillaume, Vincent, Emmanuel et Arnaud passent en revue les 100 premiers épisodes des cast codeurs pour parler les nouvelles et des interviews les plus marquantes.
LCC 198 - le mauvais open sourceur, il voit un code, et il opensource
09 Nov 2018
01:27:35
Vincent, Guillaume et Arnaud enfilent leur slip des cast codeurs par dessus leur pantalons pour vous parler d'AdoptOpenJDK, de Spring Boot, de Micronaut, de Kubernetes, de Google App Engine, des vieux pôts de l'écosystème java dans lesquels ont fait les meilleures soupes, de piscem vorat maior minorem et d'un long outil de l'épisode sur TestContainers.
Dans cet épisode, Emmanuel et Guillaume vous parlent de JDK 11, 12, 9, de GraalVM, de Kotlin, de Java et Jakarta EE, de serverless, de multi cloud, de consistance de données, de Linux, de l'Europe, de Bercy. Mais pas que !
LCC 195 - Interview panorama de l'écosystème Kubernetes avec David Gageot
15 Sep 2018
00:40:30
Guillaume s'assoie avec David Gageot pour discuter une partie de l'écosystème Kubernetes. C'est probablement le premier épisode d'une série sur Kubernetes.
Des blocs de construction de base, open source, pour créer des plateformes serverless sur Kubernetes, développé par Google, Pivotal, Red Hat, IBM, SAP et d'autres. Knative
Skaffold
Outil open source en ligne de commande pour faciliter le développement continu sur d'applications sur Kubernetes. Skaffold
Jib
Outil open source pour containeuriser des applications Java, avec plugins Maven et Gradle associés, pour builder rapidement, de manière reproductible, sans avoir recours au démon Docker. Jib
Distroless
Images Docker légères ne contenant que le système d'exploitation, les dépendances, et l'application elle-même, supportant Java, Go, .Net, Python ou Go. Distroless
Kaniko
Outil open source pour builder des images à partir d'un Dockerfile, dans un conteneur ou dans un cluster Kubernetes, sans avoir besoin du démon Docker. Kaniko
Gvisor
Un noyau en user-space écrit en Go, pour créer des conteneurs sandboxés. gvisor
Dans cet épisode Audrey et Arnaud font le point sur les actualités de cet fin d'été 2018 avec pas mal de nouveautés pour préparer la rentrée comme la version 1.0 d'Istio, TLS 1.3, l'arrivée imminente de Java 11, et sans oublier la "minute" web d'Audrey. Il est aussi question d'outillage avec Gradle, Docker, GitHub et de sujets plus sérieux comme Redis et la Commons Clause. Emmanuel, quant à lui sort de son hamac pour vous présenter notre nouveau système de financement participatif du poscast.
Cet épisode est relativement pauvre en IA, ouaissssssss ! Mais il nous reste plein de Spring, plein de failles, plein d'OpenTelemetry, un peu de versionnage sémantique, une astuce Git et bien d'autres choses encore.
Google Cloud a subi une panne de 12 heures dans la région europe-west3 (Francfort) le 24 octobre 2024.
La panne, causée par une défaillance d'alimentation et de refroidissement, a affecté plusieurs services, y compris Compute Engine et Kubernetes Engine.
Les utilisateurs ont rencontré des problèmes de création de VM, des échecs d'opérations et des retards de traitement.
Google a conseillé de migrer les charges de travail vers d'autres zones.
il y a eu une autre zone Europeenne pas mal affectée l'année dernière
Les cofondateurs estiment que les problèmes auxquels est confronté le Web ont changé et que d'autres groupes de défense peuvent désormais prendre le relais.
Ils estiment également que la priorité absolue doit être donnée à la passion de Tim Berners-Lee pour redonner aux individus le pouvoir et le contrôle de leurs données et pour construire activement des systèmes de collaboration puissants (Solid Protocol - https://solidproject.org/).
Taiwan Semiconductor Manufacturing Company (TSMC) a suspendu ses livraisons à Sophgo, un concepteur de puces chinois, après la découverte d'une puce fabriquée par TSMC dans un processeur AI de Huawei (Ascend 910B). Cette découverte soulève des préoccupations concernant des violations potentielles des contrôles d'exportation des États-Unis, qui restreignent Huawei depuis 2020.
Sophgo, lié à Bitmain, a nié toute connexion avec Huawei et affirme se conformer aux lois applicables. Toutefois, l'incident a conduit à une enquête approfondie de TSMC et des autorités américaines et taïwanaises
on a bien suivi les chants d'amour entre Sam Altman et Satia Nadella
ca c'est tendu ces derniers temps
deja avec le coup chez openAI où MS avait sifflé la fin de la récré
"on a le code, les données, l'IP et la capacité, on peut tout recrée"
OpenAi a un competiteur de Copilot et essaie de courtises ses clients
les apétits d'investissements d'OpenAI et une dispute sur la valeur de la aprt de MS qui a donné des crédits cloud semble etre aui coeur de la dispute du moment
GitHub Universe 2024 présente les nouveautés de l'année, notamment la possibilité de choisir parmi plusieurs modèles d'IA pour GitHub Copilot (Claude 3.5, Gemini 1.5 Pro, OpenAI o1).
Nouvelles fonctionnalités : GitHub Spark pour créer des micro-applications, révisions de code assistées par Copilot, sécurité renforcée avec Copilot Autofix.
Simplification des workflows avec les extensions GitHub Copilot
Facilitation de la création d'applications IA génératives avec GitHub Models
Une vulnérabilité a été découverte dans la génération de la clé de cache pour l'authentification déléguée AD/LDAP.
Les conditions:
MFA non utilisé
Nom d'utilisateur de 52 caractères ou plus
Utilisateur authentifié précédemment, créant un cache d'authentification
Le cache a été utilisé en premier, ce qui peut se produire si l'agent AD/LDAP était hors service ou inaccessible, par exemple en raison d'un trafic réseau élevé
L'authentification s'est produite entre le 23 juillet 2024 et le 30 octobre 2024
Après quelques heures / jours de rumeurs sur une faille 9.9/10 CVSS il s'avère que cela concerne que les système avec le système d'impression CUPS et cups-browsed
Désactivez et/ou supprimez le service cups-browsed.
Mettez à jour votre installation CUPS pour appliquer les mises à jour de sécurité lorsqu'elles sont disponibles.
Envisagez de bloquer l'accès au port UDP 631 et également de désactiver le DNS-SD.
Cela concerne la plupart des distributions Linux, certaines BSD, possiblement Google ChromeOS, Solaris d'Oracle et potentiellement d'autres systèmes, car CUPS est intégré à diverses distributions pour fournir la fonctionnalité d'impression.
Pour exploiter cette vulnérabilité via internet ou le réseau local (LAN), un attaquant doit pouvoir accéder à votre service CUPS sur le port UDP 631. Idéalement, aucun de vous ne devrait exposer ce port sur l'internet public. L'attaquant doit également attendre que vous lanciez une tâche d'impression.
Si le port 631 n'est pas directement accessible, un attaquant pourrait être en mesure de falsifier des annonces zeroconf, mDNS ou DNS-SD pour exploiter cette vulnérabilité sur un LAN.
L'Open Source Initiative (OSI) a clarifié les critères pour qu'un modèle d'IA soit considéré comme open-source : accès complet aux données de formation, au code source et aux paramètres d'entraînement.
La plupart des modèles dits "open" comme ceux de Meta (Llama) et Stability AI (Stable Diffusion) ne respectent pas ces critères, car ils imposent des restrictions sur l'utilisation commerciale et ne rendent pas publiques les données de formation
c'est au details de données de formation (donc pas forcement les données elle meme. "In particular, this must include: (1) the complete description of all data used for training, including (if used) of unshareable data, disclosing the provenance of the data, its scope and characteristics, how the data was obtained and selected, the labeling procedures, and data processing and filtering methodologies; (2) a listing of all publicly available training data and where to obtain it; and (3) a listing of all training data obtainable from third parties and where to obtain it, including for fee."
C'est en echo a la version d'open source AI de la linux fondation
L'open washing désigne la pratique où des entreprises prétendent que leurs produits ou modèles sont open-source, bien qu'ils ne respectent pas les critères réels d'ouverture (transparence, accessibilité, partage des connaissances).
De grandes entreprises comme Meta, Google et Microsoft sont souvent accusées d'utiliser cette stratégie, ce qui soulève des préoccupations concernant la clarté des définitions légales et commerciales de l'open source, surtout avec l'essor de l'IA.
Morgan de Montréal Comment faire cohabiter plusieurs dépôts Git ?
Je m'explique : dans mon entreprise, nous utilisons notre dépôt Git (Bitbucket) configuré pour notre dépôt d'entreprise. Lorsque je souhaite contribuer à un projet open source, je suis obligé de modifier ma configuration globale Git (nom d'utilisateur, email) pour correspondre à mon compte GitHub. Il arrive souvent que, lorsque je reviens pour effectuer un commit sur le dépôt d'entreprise, j'oublie que je suis en mode "open source", ce qui entraîne l'enregistrement de mes configurations "open source" dans l'historique de Bitbucket… Comment gérez-vous ce genre de situation ?
Dans cet épisode, Emmanuel et Guillaume, les deux seuls casts codeurs encore présents discutent langages, architecture, nouveautés Kubernetes et font de l'archéologie du web et des gestionnaires de code source sous l'oeil attentif de Chouquette, le chat de Guillaume.
Les templates GO seront toujours utilisables mais on pourra également se servir de Lua pour faire des scripts qui eux auront accès aux templates avant et après le rendering
Article de performance SpringBoot classique vs réactif
L'article "SpringBoot 2 performance — servlet stack vs WebFlux reactive stack" est à prendre avec de grosses pincettes. Le client HTTP utilisé pour la version servlet est celui par défaut Java à base d'URLConnection. Pas de reused de la connection…. A 2500 users sur un benchmark IO bound avec un tel ratio wait/processing, il ne devrait pas avoir une telle différence de throughput.
LCC 190 - Interview revue de code Gerrit et l'outil Vet avec Julien Béti et Réda Housni-Alaoui
30 May 2018
00:34:57
Julien et Reda viennet nous parler de Gerrit et de son système de revue de code ; puis de l'outil Vet qu'ils ont open sourcé. Et José Paumard nous fait
try ( José josé = new José(2018) ) { Audio crowdcast = Stream.of( josé.interview(), josé.interview(), josé.interview(), josé.interview() ) .map( Audio::normalize ) .filter( a -> ! a.tooNoisy() ) .collect( AudioCollectors.joining( " fade out <-> fade in " ) ); return crowdcast; }
Dans l'interview, nous n'avons pas eu le temps de parler: De Vet et des workflows associés (via les commandes documentées sur la page GitHub) qui permettent de verrouiller les push sur le git remote. De l'aspect extensible de Gerrit qui permet, par exemple, d'appliquer automatiquement une PR lorsque l'ensemble des conditions sont réunies (+2 d'un reviewer, pas de –1 d'un reviewer, +1 de Jenkins) et ce quelque soit l'ordre d'arrivée.
Concernant la problématique que tu as évoqué de "commit annexe", il est en fait possible dans Gerrit de créer une dépendance entre PR. Nous n'utilisons pas cette fonction, il est donc possible que quelques modifications sur Vet soient nécessaire pour en tirer profit. Plus d'infos ici: https://gerrit-review.googlesource.com/Documentation/concept-changes.html#related-changes