Sébastien Rigaux

Veille technologique

Page 2 sur 22

Visuel intitulé « Multi-Tenant .NET, Part 2 — Shared Database with Schema Separation » : un panneau « House for Rent », un emblème circulaire avec deux épées et un portrait illustré.

Cette partie 2/4 montre comment isoler les données de chaque tenant dans son propre schéma SQL Server, sans filtre global ni colonne TenantId obligatoire. Le modèle EF Core retrouve ainsi une clé primaire simple, tandis que la frontière d’isolation est portée par la structure de la base.

Le changement central tient au cache du modèle : OnModelCreating ne s’exécute qu’une fois par modèle. Il faut intégrer le schéma à la clé via IModelCacheKeyFactory, faute de quoi EF Core peut réutiliser celui du premier tenant. L’article détaille aussi le provisionnement et les migrations par schéma, ainsi que la validation stricte des noms de schéma interpolés dans le SQL.

BarretRepéré via C# Digest

Bannière sur fond d’immeubles résidentiels, titrée « Multi-Tenant .NET, Part 1 — Shared Database with Partitions », avec un emblème d’épées croisées et un portrait illustré.

Cette première partie présente une architecture multi-tenant .NET à schéma partagé : EF Core filtre les lectures par tenant et SQL Server partitionne physiquement les lignes pour accélérer l’accès aux données. Le point essentiel : le partitionnement n’est pas une frontière de sécurité ; l’isolation repose sur le filtre global EF Core.

L’article détaille aussi la résolution du tenant par requête, l’attribution de son identifiant aux nouvelles lignes et l’ajout des partitions aux migrations avec du SQL brut. La clé primaire doit inclure GuildId, contrainte imposée par SQL Server pour partitionner un index unique.

BarretRepéré via C# Digest

Schéma d’une boucle agentique : l’agent agit, observe, évalue, puis recommence ou s’arrête.

Les boucles d’agents enchaînent action, observation et évaluation pour affiner une réponse ou retenter une opération jusqu’à satisfaire un critère. Jesse Liberty illustre le principe en C# avec Microsoft Agent Framework : un agent de boucle, un évaluateur et une limite d’itérations.

L’exemple distingue un marqueur déterministe comme DONE d’un évaluateur basé sur un modèle juge, puis détaille les garde-fous à prévoir : délais, appels idempotents, journalisation et suivi des coûts. Chaque itération ajoute en effet latence et consommation de tokens.

Repéré via C# Digest

Visuel Elephant-Goldfish Model : deux panneaux présentent un éléphant bleu qui se souvient de tout et un poisson rouge orange qui ne se souvient de rien.

Elephant-Goldfish Model, un plugin open source de Google, fournit des skills pour explorer une idée, rédiger une spécification et la faire challenger avant l’implémentation. Un agent « Elephant » conserve le contexte du projet ; des reviewers « Goldfish » examinent le document sans l’historique de conversation afin de faire ressortir les hypothèses implicites et les risques.

Le dépôt couvre aussi la résolution des retours et la comparaison de la documentation au code. Les revues exigent des contextes de sous-agents indépendants : si l’environnement ne peut pas les créer, EGM interrompt cette étape.

OtherEN

Accessibilité web : le livre de Laura Kalbag est gratuit en ligne

accessibilityforeveryone.sitePermalien
Couverture sur fond vert portant le titre « Accessibility for Everyone », le nom de Laura Kalbag et la mention « Read for free ».

Laura Kalbag met Accessibility for Everyone en lecture gratuite sur le Web. Publié initialement en 2017 chez A Book Apart, le livre offre une ressource accessible à la communauté web pour aborder l’accessibilité.

L’autrice précise que les bonnes pratiques ont peu changé, mais que certains outils recommandés et intitulés de postes peuvent être dépassés ; les WCAG approchent par ailleurs de leur version 3.

Laura KalbagRepéré via Frontend Focus

Visuel du dépôt GoogleChrome/modern-web-guidance, avec le logo Chrome et les compteurs de contributeurs, issues, étoiles et forks.

Modern Web Guidance fournit aux agents de code des recommandations expertes sur les API du navigateur, CSS, performance et accessibilité, pour les orienter vers des solutions natives plutôt que vers des patterns legacy. Le dépôt rassemble 232 fonctionnalités et 186 cas d’usage, sous forme de skills installables dans plusieurs agents.

Le CLI recherche un guide en local, puis l’injecte dans le contexte de l’agent. Les consignes intègrent compatibilité Baseline, fallbacks ciblés et évaluation automatisée ; le projet est annoncé en preview.

Repéré via Frontend Focus

emoji-picker-react fournit un sélecteur d’émojis pour React, utilisable avec ses styles intégrés ou adapté à l’identité visuelle du produit. Le playground interactif permet de tester les propriétés, les thèmes CSS et des exemples de personnalisation.

Le composant couvre notamment la recherche, les tons de peau, les émojis personnalisés et plusieurs langues. Son mode « réactions » affiche d’abord une sélection compacte de réactions populaires, puis donne accès à la bibliothèque complète.

Repéré via React Status

Logo OpenTUI noir sur fond blanc.

OpenTUI permet de construire des interfaces utilisateur pour le terminal en TypeScript, directement ou avec React et Solid. Son moteur de rendu natif est écrit en Zig, et la mise en page s’appuie sur flexbox.

La bibliothèque prend en charge les sélecteurs, les champs de saisie et les zones de défilement pilotés au clavier ou à la souris. Elle peut aussi afficher des images, jouer des sons et rendre des graphismes 3D.

Repéré via React Status

Logo Puck en dégradé bleu-violet sur fond blanc.

Puck, l’éditeur visuel de pages pour React, ajoute dans sa version 0.24 des groupes et des onglets pour organiser les champs, ainsi qu’un champ checkbox pour sélectionner plusieurs options. Des poignées de déplacement facilitent aussi le réagencement de composants dans des mises en page imbriquées.

L’API renderFields permet de composer ces présentations. Côté canvas, InlineTextField rend possible l’édition directe du texte, tandis que fieldTransforms transforme les valeurs au rendu sans modifier les données sous-jacentes.

Fede Bonel TozziRepéré via React Status

React combine <form action>, useActionState et useOptimistic pour gérer les retours d’attente et les mises à jour optimistes tout en conservant un envoi de formulaire avant l’exécution de JavaScript. L’article montre comment cette continuité permet d’enrichir l’interface après hydratation sans abandonner le comportement natif du navigateur.

Le point décisif est de garder l’action serveur directement dans action : une fonction cliente intermédiaire casse la soumission sans JavaScript. Pour l’optimisme, useHydrated() permet de choisir entre l’action serveur et sa version enrichie côté client.

Repéré via React Status

Extrait de code C# déclarant les records Windows, Linux et MacOS, puis une union SupportedOS contenant ces trois types.

C# 15 introduit le mot-clé union pour représenter une valeur parmi plusieurs types sans les regrouper dans une classe de base ni perdre leur typage dans object. Andrew Lock montre comment les switch expressions vérifient que chaque cas est traité, et comment déclarer des unions comme Result<T>.

Le détail à considérer côté performance : l’implémentation générée stocke la valeur dans un object, ce qui boxe les types valeur. L’article présente une implémentation personnalisée avec TryGetValue pour éviter ce boxing dans les switch.

Andrew LockRepéré via C# Digest

Trois joueurs de basketball illustrent une séquence : le premier tient le ballon, le deuxième observe avec des jumelles et le troisième lance le ballon vers le panier.

Dans Microsoft Agent Framework, le middleware du ChatClient intercepte les messages échangés avec le LLM, tandis que le middleware d’agent agit sur l’exécution globale, notamment pour gérer session, identité ou budget de tokens. Cette distinction aide à placer la journalisation ou la modification au bon niveau.

L’exemple C# ajoute un middleware d’invocation de fonction qui journalise les appels à l’outil Tavily du seul agent Researcher, sans modifier les autres agents. La trace affiche le nom de la fonction et ses arguments.

Repéré via C# Digest

Illustration jaune « Buy me a coffee » avec une tasse stylisée.

IfItQuacks permet d’utiliser en C# des objets qui correspondent à une interface sans l’implémenter ni hériter d’une classe commune. L’attribut [DuckTyped] déclenche un générateur de code qui vérifie la compatibilité à la compilation et crée un adaptateur, sans réflexion ni dynamic.

Les types anonymes peuvent aussi servir de stubs de test : un objet { Name = "Steven", Age = 90 } satisfait ainsi une interface IPerson. Les adaptateurs préservent par ailleurs l’identité en transférant Equals, GetHashCode et ToString à l’objet sous-jacent.

Steven GieselRepéré via C# Digest

Bandeau de l’article avec son titre, le nom de Ricardo Groß et la date « Jun 11 », sur fond blanc.

CodoMetis.ValueRanges propose des types d’intervalle .NET pour remplacer les paires de dates et leur logique dispersée. Les cinq variantes — finie, sans borne gauche ou droite, infinie et vide — rendent explicites les formes possibles et leurs règles, tandis que les opérations comme Contains et Overlaps s’exécutent en mémoire.

Le package EF Core associé fait le pont avec PostgreSQL : les mêmes opérations dans le domaine sont traduites en opérateurs SQL via Npgsql. L’article détaille aussi le compromis de conception : des records abstraits plutôt que des structs, pour représenter les variantes par une hiérarchie de types.

@Repéré via C# Digest

Logo WordPress blanc sur des panneaux bleus superposés, avec des chemins de fichiers en arrière-plan.

Une faille RCE dans WordPress Core permet à un attaquant non authentifié d’exécuter du code pendant une mise à jour complète, si le répertoire temporaire est accessible depuis le Web. Wordfence indique avoir bloqué 62 969 tentatives en 24 heures ; le correctif est disponible dans la version 7.1.4.

Le risque tient à une course contre le nettoyage : les fichiers d’installation sont décompressés dans un chemin prévisible sous wp-content/upgrade, et des attaquants interrogent notamment setup-config.php pour tomber sur la fenêtre d’exposition, qui peut ne durer que quelques secondes. La faille concerne les versions 4.7 à 7.1.3.

The Hacker News

Bannière GitHub CVEngine avec son nom, une courte description, les nombres de contributeurs, issues, étoiles et forks, et une petite image d’une personne tendant les mains.

CVEngine regroupe dans une plateforme auto-hébergée la découverte continue d’actifs, les scans de vulnérabilités et le rapprochement avec les CVE exploitées. Le résultat vise à prioriser les failles réellement applicables, avec validation en lecture seule et éléments de preuve plutôt qu’une simple liste d’alertes.

La version 1.3 ajoute des Sentinels pour lancer les scans depuis des réseaux privés, ainsi qu’une intégration OpenVAS désactivée par défaut. Les résultats alimentent le même inventaire et les mêmes niveaux de sévérité ; l’outil expose aussi une API REST et une intégration MCP.

hevnsnt

Montagnes enneigées sous un voile violet, avec le texte « Free Your Marketing! empowered by mautic ».

Mautic est une plateforme open source d’automatisation marketing qui regroupe campagnes, emails, pages d’atterrissage et gestion des contacts. Elle peut être hébergée sur l’infrastructure de l’organisation, avec une API REST et des plugins pour l’intégrer et l’étendre.

La page met aussi en avant la création de campagnes par glisser-déposer, le scoring des leads et des fonctions orientées confidentialité. Des cas d’usage cités incluent l’envoi quotidien de plus d’un million d’emails personnalisés et multilingues dans l’e-commerce.

Bannière GitHub de BillionMail : nom du projet, description d’un service de messagerie et de marketing par e-mail auto-hébergé, et compteurs de contributeurs, issues, étoiles et forks.

BillionMail regroupe serveur mail, newsletters et marketing par e-mail dans une solution open source à auto-héberger. Le dépôt présente un parcours de configuration qui relie domaine et vérification DNS, puis création et envoi de campagnes, avec gestion de listes et de tags.

Le projet s’appuie sur Docker et propose aussi une installation via aaPanel. Il intègre RoundCube pour le webmail, des outils d’analyse des envois et une licence AGPLv3 ; l’exploitation du service reste donc à la charge de l’équipe qui l’héberge.

Metalama automatise les patterns transverses en C# avec des aspects qui génèrent le code à la compilation, tout en vérifiant les règles d’architecture dès l’édition. L’implémentation répétitive reste ainsi hors du code métier et du dépôt, tandis qu’un même aspect peut être appliqué à une méthode ou à un ensemble de méthodes sélectionnées par code.

Un aspect peut, par exemple, envelopper une méthode dans un try/catch pour journaliser son entrée, son résultat et ses exceptions. Metalama permet aussi de prévisualiser le code transformé et de le déboguer, pour rendre ces transformations inspectables.

Repéré via C# Digest

Visuel Motherload présentant à gauche le texte « Import data files into TypeScript, fully typed » et à droite un extrait TypeScript important des fichiers plans.toml, team.yaml, strings.jsonc, posts.csv, notes.md et .env.

Motherload permet d’importer des fichiers de données comme des modules TypeScript typés d’après leur contenu. Le projet prend en charge TOML, YAML, JSONC, JSON5, CSV, TSV, Markdown, texte brut et .env ; les types sont disponibles dans l’éditeur et les erreurs de parsing remontent dans tsc avec leur emplacement.

Le type-checking utilise les content mappers de TypeScript 7.1, actuellement en bêta, et exige --runExternalCode. À l’exécution, un preload ou un plugin adapte les mêmes imports à Node.js et à différents bundlers.

Colin McDonnellRepéré via This week in React