Improve newsletter 4
This commit is contained in:
parent
f1864d8841
commit
1688d42f01
3 changed files with 8 additions and 454 deletions
BIN
.DS_Store
vendored
BIN
.DS_Store
vendored
Binary file not shown.
|
|
@ -1,450 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>Craft Letter n°4</title>
|
||||
<!--[if mso]>
|
||||
<style type="text/css">
|
||||
body, table, td {font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif !important;}
|
||||
</style>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body style="margin: 0; padding: 0; background: linear-gradient(to bottom, #0a1a26, #0f3d5f); background-color: #0a1a26; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif">
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%" style="background: linear-gradient(to bottom, #0a1a26, #0f3d5f); background-color: #0a1a26">
|
||||
<tr>
|
||||
<td align="center" style="padding: 20px 0;">
|
||||
<!-- Main Container -->
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="600"
|
||||
style="background-color: #ffffff; border-radius: 4px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1)">
|
||||
|
||||
<!-- Header Image -->
|
||||
<tr>
|
||||
<td align="center" style="padding: 0;">
|
||||
<img alt="Logo Craft Letter" src="https://www.craftletter.fr/images/craftletter.svg" width="600"
|
||||
height="185"
|
||||
style="display: block; width: 600px; height: 185px; border: 0; border-radius: 4px 4px 0 0;" />
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Content Area -->
|
||||
<tr>
|
||||
<td style="padding: 40px 40px 30px 40px;">
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<meta charset="utf-8">
|
||||
<title>Lettre n°4 - 29 Décembre 2025</title>
|
||||
<meta name="date" content="2025-12-29 09:00">
|
||||
<meta name="category" content="Newsletter">
|
||||
|
||||
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BlogPosting",
|
||||
"name": "Lettre n°4 - 29 Décembre 2025",
|
||||
"description": "Lettre de veille technologique en développement logiciel",
|
||||
"image": [
|
||||
"https://www.craftletter.fr/images/craftletter.svg"
|
||||
],
|
||||
"datePublished": "Mon Dec 29 2025 09:00:00 GMT+0200 (Coordinated Universal Time)",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "Pascal Le Merrer",
|
||||
"url": "https://www.linkedin.com/in/pascal-le-merrer/"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td align="center" style="padding: 0;">
|
||||
<img class="logo" alt="Logo Craft Letter" src="{static}/images/craftletter.svg" style="max-width: 100%; height: auto; border: 0; display: block; margin: 1em 0">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h1 id="craftlettern°4" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Craft Letter n°4</h1>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="Édito" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Édito</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Cette semaine encore, le contenu de cette newsletter est varié. Je vais en effet vous parler d’outillage, de langages fonctionnels, de recrutement, de sécurité, d’apprentissage ou de révision, et, pour finir, d’architecture basée sur des cellules. Concernant les langages fonctionnels, ceux que j’évoquerai sont mes deux langages favoris : ils associent la simplicité à un système de type qui élimine des classes entières d’erreurs. Le tout accompagné d’une expérience développeur particulièrment agréable.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Passez de bonnes fêtes de fin d’année, et bonne lecture !
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="ty" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">ty</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Après <a href="https://github.com/astral-sh/ruff" style="color: #0066cc; text-decoration: underline">ruff</a> (linter et formateur) et <a href="https://github.com/astral-sh/uv" style="color: #0066cc; text-decoration: underline">uv</a> (un gestionnaire de dépendances), <a href="https://astral.sh/" style="color: #0066cc; text-decoration: underline">Astral</a> nous propose un troisième outil pour Python : <a href="https://docs.astral.sh/ty/" style="color: #0066cc; text-decoration: underline">ty</a>, un vérificateur de types (<em style="font-style: italic">type checker</em>) et serveur de langage. Comme ruff et uv, ty est écrit en Rust, et bénéficie de performances bien meilleures que celles des outils concurrents. ruff et uv étant des réussites, ty mérite qu’on le regarde de près.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="visualiserdeslogsavechl" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Visualiser des logs avec HL</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
<a href="https://github.com/pamburus/hl?tab=readme-ov-file#performing-complex-queries%5D" style="color: #0066cc; text-decoration: underline">hl</a> est un outil de visualisation de log, écrit en Rust —c’est devenu un argument marketing. Il est capable de capable visualiser, filtrer et requêter rapidement des fichiers de plusieurs gigaoctets.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="unelistedoutilsautourdejujutsu" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Une liste d’outils autour de Jujutsu</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
<a href="https://www.jj-vcs.dev/" style="color: #0066cc; text-decoration: underline">Jujutsu</a> —jj— est une alternative à Git, à la fois plus puissant et plus simple d’utilisation. Il utilise Git comme back-end, ce qui veut dire que vous pouvez l’utiliser de façon transparente sur un projet dont les autres contributeurs utilisent Git. <a href="https://github.com/Necior/awesome-jj" style="color: #0066cc; text-decoration: underline">Awesome JJ</a> liste des outils de l’écosystème naissant autour de cet outil.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
J’utilise Jujutsu depuis 8 mois, sur des projets personnels pour l’instant, et je le préfère largement à Git. Le nommage des commandes et options est bien plus clair, ce qui fait qu’on les retient ou retrouve plus facilement. Le workflow est plus simple —car il y a moins de concepts. Malgré cela, il est plus puissant que Git. Par exemple, il ne requiert de résoudre qu’une seule fois les conflits lors d’un rebase, là où Git peut vous demander de les résoudre à plusieurs reprises.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="commenttrouverdesdéveloppeurspourunlangagefonctionnel" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Comment trouver des développeurs pour un langage fonctionnel</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Dans sa <a href="https://www.youtube.com/watch?v=9OtN4iiFBsQ" style="color: #0066cc; text-decoration: underline">keynote lors des Scala Days 2025 🇬🇧</a>, Evan Czaplicki explique comment <a href="https://www.youtube.com/watch?v=9OtN4iiFBsQ" style="color: #0066cc; text-decoration: underline">Elm</a>, le langage qu’il a créé il y a bientôt 14 ans, peut servir de porte d’entrée pour des langages fonctionnels plus complexes, comme Haskell ou Scala. Elm est volontairement simple : les concepts y sont limités au strict minimum. Malgré une syntaxe qui peut intimider au départ, l’apprentissage est rapide, notamment parce que l’expérience développeur est vraiment agréable. Vous trouvez sympathiques les messages d’erreur de Rust ? Ils sont inspirés de ceux de Elm.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Evan partage dans cette keynote les stratégies de recrutement d’entreprises florissantes qui utilisent Elm. Certaines recrutent les développeurs ou développeuses de modules populaires. D’autres embauchent des débutants et les forment. Les qualités du langage font que ces juniors sont opérationnels et productifs en quelques semaines seulement —n’allez pas croire que c’est exagéré, mon expérience avec Elm me confirme que c’est une réalité. Recruter des débutants disposés à se former est une manière de s’assurer qu’ils ont la culture adéquate : leur volonté d’apprendre sera utile par la suite sur d’autres sujets. Cela répond aussi à l’inquiétude de nombreux managers : comment recruter pour une techno de niche ?
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="gleamattirelattentiondesdéveloppeurs" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Gleam attire l’attention des développeurs</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
À propos de langages fonctionnels, <a href="https://gleam.run/" style="color: #0066cc; text-decoration: underline">Gleam</a> est le <a href="https://survey.stackoverflow.co/2025/technology#admired-and-desired" style="color: #0066cc; text-decoration: underline">second langage le plus admiré</a> par les répondants au dernier sondage de Stack Overflow, juste derrière Rust. Rust truste le sommet de ce classement depuis plusieurs années, ce n’est donc pas une surprise de le retrouver en tête. Gleam, qui est beaucoup plus récent, entre directement à la seconde place de ce sondage, et c’est une vraie surprise pour moi. En effet, je ne m’attendais pas à ce qu’autant de monde connaisse ce langage. Par contre, ses qualités font que je ne suis pas étonné qu’il soit aussi apprécié. Si vous voulez en savoir plus sur Gleam, je vous renvoie vers la <a href="https://www.youtube.com/watch?v=nTzNDM-dvRc" style="color: #0066cc; text-decoration: underline">conférence que j’ai donnée</a> 🇫🇷 l’an dernier à ce sujet (27 minutes).
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="filtrerlescandidatsenremote" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Filtrer les candidats en remote</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Jose Zarazua utilise <a href="https://josezarazua.com/im-a-former-cto-here-is-the-15-sec-coding-test-i-used-to-instantly-filter-out-50-of-unqualified-applicants" style="color: #0066cc; text-decoration: underline">une astuce pour distinguer instantanément les candidats 🇬🇧</a> qui réfléchissent et les autres, lors d’un test de recrutement à distance.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="desimagesdockerdurcies" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Des images docker durcies</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Des centaines d'<a href="https://hub.docker.com/hardened-images/catalog" style="color: #0066cc; text-decoration: underline">images Docker durcies</a>, auparavant payantes, sont dorénavant <a href="https://www.docker.com/blog/docker-hardened-images-for-every-developer" style="color: #0066cc; text-decoration: underline">mises à disposition gratuitement</a> 🇬🇧 par Docker Inc. Une image durcie est une image dont la sécurité est renforcée, en éliminant tout ce qui n’est pas indispensable, ce qui réduit la surface d’attaque.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Les images en question sont basées sur Debian et Alpine. Des <a href="https://blog.stephane-robert.info/docs/conteneurs/orchestrateurs/outils/helm/" style="color: #0066cc; text-decoration: underline">charts Helm</a> 🇫🇷 sont également disponibles aux mêmes conditions. Un chart Helm décrit le déploiement et la configuration d’une application sous Kubernetes. Les charts, comme les images, sont durcis, et mis à jour en moins d’une semaine quand une faille de sécurité est détectée. Ces images et charts sont sous llicense Apache 2, une license bien connue et très permissive, donc il n’y a pas de mauvaise surprise à attendre de ce côté là.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="expositioninvolontairededonnéesavecsupabase" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Exposition involontaire de données avec Supabase</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Si vous utilisez <a href="https://supabase.com/" style="color: #0066cc; text-decoration: underline">Supabase</a> (Base de données SAAS), vous devriez vérifier que les données des utilisateurs ne sont pas accessibles librement. <a href="https://skilldeliver.com/your-supabase-is-public" style="color: #0066cc; text-decoration: underline">Supabase ne met pas suffisamment en garde contre ce risque 🇬🇧</a>.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Cet article me rappelle des problèmes similaires avec <a href="https://www.tenable.com/plugins/nessus/100634" style="color: #0066cc; text-decoration: underline">Redis</a> et <a href="https://satoricyber.com/mongodb-security/6-mongodb-authentication-features-you-must-know-about/#how-to-enable-authentication-in-mongodb" style="color: #0066cc; text-decoration: underline">MongoDB</a>, pour lesquels l’authentification n’est pas activée par défaut.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="apprendreouréviserunetechnoenquelquesminutes" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Apprendre ou réviser une techno en quelques minutes</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
<del>Jean-Pierre Liégeois (jeune lecteur du Var)</del> <a href="https://www.linkedin.com/in/erwannedellec/" style="color: #0066cc; text-decoration: underline">Erwan</a> m’a rappelé l’existence du site <a href="https://learnxinyminutes.com" style="color: #0066cc; text-decoration: underline">Learn X in Y minutes</a>.
|
||||
Plutôt que de s’en servir pour apprendre une nouvelle technologie, il l’utilise pour se rafraichir la mémoire lorsqu’il doit utiliser un langage qu’il n’a pas pratiqué depuis longtemps.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
A cette occasion, j’ai découvert que les fiches proposées par ce site ne se limitent pas à des langages de programmation. Certaines concernent en effet des formats de données (JSON, XML, YAML, Cue…), des langages de balisage légers (Markdown, Restructured Text…), des shells (Bash, Fish), des frameworks et bibliothèques (Jquery, OpenCV…), des outils (Git, Docker), etc.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0;">
|
||||
<h2 id="architecturebaséesurdescellules" style="margin: 0; padding: 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 28px; font-weight: bold; color: #333333; line-height: 1.3">Architecture basée sur des cellules</h2>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Une cellule est un ensemble de microservices et des services dont ils dépendent (cache, base de données, stockage…). Ils forment un ensemble cohérent et (idéalement) autonome —c’est-à-dire qui n’a pas ou peu de dépendances externes.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Dans une architecture basée sur des cellules (<em style="font-style: italic">cell based architecture</em>), chaque cellule est répliquée à l’identique autant de fois que nécessaire pour supporter la charge (scalabilité). Ces cellules sont déployées dans des régions différentes afin d’assurer la résilience du service.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
<a href="https://bencane.com/about" style="color: #0066cc; text-decoration: underline">Benjamin Cane</a> explique dans <a href="https://itnext.io/cell-boundaries-defining-the-scope-of-a-cell-f76c5c4a52dc" style="color: #0066cc; text-decoration: underline">Cell Boundaries: Defining the Scope of a Cell in Cell-based Architecture</a> 🇬🇧 comment définir le contenu d’une cellule.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<hr>
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Et voilà, c’est tout pour cette semaine !
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Retrouvez les numéros précédents sur <a href="https://www.craftletter.fr" style="color: #0066cc; text-decoration: underline">le site web Craft Letter</a> 🇫🇷.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Si vous n’avez pas reçu cette lettre par email, ou si elle vous a été transmise par un tiers, vous pouvez vous abonner sur le site.
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
<!-- Signature -->
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0; height: 20px; line-height: 20px; font-size: 20px;">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="padding: 0;">
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0">
|
||||
<tr>
|
||||
<td style="padding: 0 15px 0 0; vertical-align: top;">
|
||||
<img src="" alt=""
|
||||
width="0"
|
||||
height="0"
|
||||
style="display: block; width: 0px; height: 0px; border: 0; border-radius: 50%;" />
|
||||
</td>
|
||||
<td style="padding: 0; vertical-align: middle;">
|
||||
<div style="font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333; padding-top: 20px">
|
||||
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td style="padding: 0 0 20px 0; font-family: Avenir, system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 16px; line-height: 1.6; color: #333333;">
|
||||
Pascal Le Merrer
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- Footer -->
|
||||
<tr>
|
||||
<td style="background-color: #f9f9f9; border-top: 1px solid #e5e5e5; border-radius: 0 0 4px 4px; padding: 30px 40px">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" style="padding: 20px 40px;">
|
||||
<div style="font-size: 13px; line-height: 1.5; color: #666666; padding: 0">
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -53,7 +53,7 @@ Dans sa [keynote lors des Scala Days 2025 🇬🇧](https://www.youtube.com/watc
|
|||
|
||||
Evan partage dans cette keynote les stratégies de recrutement d'entreprises florissantes qui utilisent Elm. Certaines recrutent les développeurs ou développeuses de modules populaires. D'autres embauchent des débutants et les forment. Les qualités du langage font que ces juniors sont opérationnels et productifs en quelques semaines seulement —n'allez pas croire que c'est exagéré, mon expérience avec Elm me confirme que c'est une réalité. Recruter des débutants disposés à se former est une manière de s'assurer qu'ils ont la culture adéquate : leur volonté d'apprendre sera utile par la suite sur d'autres sujets. Cela répond aussi à l'inquiétude de nombreux managers : comment recruter pour une techno de niche ?
|
||||
|
||||
## Gleam attire l'attention des développeurs
|
||||
## Gleam suscite l'admiration
|
||||
|
||||
À propos de langages fonctionnels, [Gleam](https://gleam.run/) est le [second langage le plus admiré](https://survey.stackoverflow.co/2025/technology#admired-and-desired) par les répondants au dernier sondage de Stack Overflow, juste derrière Rust. Rust truste le sommet de ce classement depuis plusieurs années, ce n'est donc pas une surprise de le retrouver en tête. Gleam, qui est beaucoup plus récent, entre directement à la seconde place de ce sondage, et c'est une vraie surprise pour moi. En effet, je ne m'attendais pas à ce qu'autant de monde connaisse ce langage. Par contre, ses qualités font que je ne suis pas étonné qu'il soit aussi apprécié. Si vous voulez en savoir plus sur Gleam, je vous renvoie vers la [conférence que j'ai donnée](https://www.youtube.com/watch?v=nTzNDM-dvRc) 🇫🇷 l'an dernier à ce sujet (27 minutes).
|
||||
|
||||
|
|
@ -75,12 +75,16 @@ Si vous utilisez [Supabase](https://supabase.com/) (Base de données SAAS), vous
|
|||
|
||||
Cet article me rappelle des problèmes similaires avec [Redis](https://www.tenable.com/plugins/nessus/100634) et [MongoDB](https://satoricyber.com/mongodb-security/6-mongodb-authentication-features-you-must-know-about/#how-to-enable-authentication-in-mongodb), pour lesquels l'authentification n'est pas activée par défaut.
|
||||
|
||||
## Faille de sécurité grave dans MongoDB
|
||||
|
||||
[Une faille de sécurité](https://cyberveille.esante.gouv.fr/alertes/mongodb-cve-2025-14847-2025-12-23) 🇫🇷 dans MongoDB permet d'exfiltrer des données en envoyant un paquet réseau malformé et compressé, sans être authentifié. L'exploitation de cette faille est donc simple. Plus de [87 000 instances vulnérables ont été identifiées](https://censys.com/advisory/cve-2025-14847) 🇬🇧. Si vous en hébergez une, une mise à jour qui corrige cette faille est disponible. Si la mise à jour n'est pas applicable, il est possible de désactiver la décompression Zlib pour rendre l'instance insensible à cette attaque. Merci [Mickaël](https://www.linkedin.com/in/micka%C3%ABl-mgu/) pour l'info !
|
||||
|
||||
## Apprendre ou réviser une techno en quelques minutes
|
||||
|
||||
<del>Jean-Pierre Liégeois (jeune lecteur du Var)</del> [Erwan](https://www.linkedin.com/in/erwannedellec/) m'a rappelé l'existence du site [Learn X in Y minutes](https://learnxinyminutes.com).
|
||||
<del>Jean-Pierre Liégeois (jeune lecteur du Var)</del> [Erwan](https://www.linkedin.com/in/erwannedellec/) m'a rappelé l'existence du site [Learn X in Y minutes](https://learnxinyminutes.com) 🇬🇧.
|
||||
Plutôt que de s'en servir pour apprendre une nouvelle technologie, il l'utilise pour se rafraichir la mémoire lorsqu'il doit utiliser un langage qu'il n'a pas pratiqué depuis longtemps.
|
||||
|
||||
A cette occasion, j'ai découvert que les fiches proposées par ce site ne se limitent pas à des langages de programmation. Certaines concernent en effet des formats de données (JSON, XML, YAML, Cue...), des langages de balisage légers (Markdown, Restructured Text...), des shells (Bash, Fish), des frameworks et bibliothèques (Jquery, OpenCV...), des outils (Git, Docker), etc.
|
||||
À cette occasion, j'ai découvert que les fiches proposées par ce site ne se limitent pas à des langages de programmation. Certaines concernent en effet des formats de données (JSON, XML, YAML, Cue...), des langages de balisage légers (Markdown, Restructured Text...), des shells (Bash, Fish), des frameworks et bibliothèques (Jquery, OpenCV...), des outils (Git, Docker), etc.
|
||||
|
||||
## Architecture basée sur des cellules
|
||||
|
||||
|
|
@ -88,7 +92,7 @@ Une cellule est un ensemble de microservices et des services dont ils dépendent
|
|||
|
||||
Dans une architecture basée sur des cellules (_cell based architecture_), chaque cellule est répliquée à l'identique autant de fois que nécessaire pour supporter la charge (scalabilité). Ces cellules sont déployées dans des régions différentes afin d'assurer la résilience du service.
|
||||
|
||||
[Benjamin Cane](https://bencane.com/about) explique dans [Cell Boundaries: Defining the Scope of a Cell in Cell-based Architecture](https://itnext.io/cell-boundaries-defining-the-scope-of-a-cell-f76c5c4a52dc) 🇬🇧 comment définir le contenu d'une cellule.
|
||||
[Benjamin Cane](https://bencane.com/about) 🇬🇧 explique dans [Cell Boundaries: Defining the Scope of a Cell in Cell-based Architecture](https://itnext.io/cell-boundaries-defining-the-scope-of-a-cell-f76c5c4a52dc) 🇬🇧 comment définir le contenu d'une cellule.
|
||||
|
||||
|
||||
---
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue