From 7348661285d2b664582cb034aab12a1ccf9723a4 Mon Sep 17 00:00:00 2001 From: Julien Levesy <453265+jlevesy@users.noreply.github.com> Date: Sat, 18 Oct 2025 12:30:59 +0200 Subject: [PATCH] feat(novembre-2025): add more content --- content/novembre-2025/building-project.md | 141 ++++++ .../novembre-2025/dependency-management.md | 406 ++++++++++++++++++ content/novembre-2025/git-2.md | 268 ++++++++++++ content/novembre-2025/projet.md | 128 ++++++ 4 files changed, 943 insertions(+) create mode 100644 content/novembre-2025/building-project.md create mode 100644 content/novembre-2025/dependency-management.md create mode 100644 content/novembre-2025/git-2.md create mode 100644 content/novembre-2025/projet.md diff --git a/content/novembre-2025/building-project.md b/content/novembre-2025/building-project.md new file mode 100644 index 0000000..c4775c7 --- /dev/null +++ b/content/novembre-2025/building-project.md @@ -0,0 +1,141 @@ ++++ +weight = 90 ++++ + +{{% section %}} + +{{< slide template="invert" >}} + +## Produire un Livrable + +--- + +## 🤔 Quel est le problème ? + +On a du code. C'est un bon début. MAIS: + +- Le code en lui meme ne délivre pas de valeur, + - C'est l'exécution de ce programme qui en produit! +- Qu'est ce qu'on "fabrique" à partir du code ? + - Un **livrable** (un binaire, une image Docker, une application iOS // Android ...) + +--- + +## Caractéristiques de notre livrable 📦 + +Nous souhaitons que notre livrable soit: + +- **Versionné**: Chaque livrable est associé a une version de notre base de code +- **Reproductible**: + - Il est **possible** et **facile** de générer notre livrable + - Deux générations de livrables partant d'une meme version génèrent le **"même"** livrable! + +--- + +## Que signifie "reproductible" ? + +- Il faut que notre processus de génération de livrable, (le build) soit entièrement **déterministe**. +- Il faut qu'en fonction d'un jeu de paramètres, le résultat du build soit même le "même". +- Il en va de même pour l'environnement ou notre programme est exécuté. + - Notre environnement de **production** + +--- + +## Quels sont les paramètres de notre livraison ? + +- **Le code**: Dans quelle version est-il? Est-il fonctionnel? Est-ce qu'il est sauvegardé? +- **Les dépendances de notre code**: Toutes les libraires utilisés dans notre application. +- **Les outils de génération de livrables**: Quel compilateur et dans quelle version? +- **L'environnement d'exécution cible**: Node 22 ou Node 23? Quelle version de PostgreSQL? Quel OS/Architecture CPU? Quel Navigateur? +- **Le processus de livraison lui même**: Dans quelle mesure la procédure de génération est elle répétable et respectée? + +--- + +## Risques encourus? + +- Ne pas etre capable de livrer! +- 😡 Dans le meilleur des cas, votre livrable ne marche pas du tout. +- 🤡 Dans certains cas votre livrable va casser sans explication facile et seulement sur la production du client les jours impairs d'une année bisextile. + - Allez reproduire et débugger! +- 😱 Livrer votre application va devenir une angoisse permanente +- 😱😭🔥☠️ Vous livrez une CVE ou un malware, avec un accès direct a votre base de données. + - [Vraiment](https://jfrog.com/blog/malware-civil-war-malicious-npm-packages-targeting-malware-authors) + - [Vraiment Vraiment](https://www.theregister.com/2023/01/04/pypi_pytorch_dependency_attack) + - [Vraiment Vraiment Vraiment](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) + +--- + +[Vraiment Vraiment Vraiment Vraiment (2025-09)](https://xeiaso.net/notes/2025/we-dodged-a-bullet/) + +--- + +{{< slide background-image="/images/dumpster-fire.gif" >}} + +--- + +## On en est où la dedans? (1/2) + +- **Le code** + - ✅ On vient de mettre en place git. On sait identifier une version par un hash de commit. + - ❌ On ne sait pas vraiment dire si l'application "fonctionne" ou pas. +- **Les dépendances de notre code** + - ❌ On ne sait ni les récupérer, ni les contrôler. +- **Les outils permettant de générer notre livrable** + - ❌ Typescript 5 est indiqué dans la documentation fournie mais c'est tout + +--- + +## On en est où la dedans? (2/2) + +- **L'environnement cible**: + - ❌ Aucune version de node indiquée. + - ❌ On sait que l'on à besoin de Postgres et Postgis +- **Le processus de livraison lui même**: + - ❌ Nous n'avons encore rien défini + +--- + +## Quelles solutions ? (1/2) + +- **Le code** + - ➡️ **Solution** (pour garantir une bonne utilisation): **L'analyse statique (le lint)** + - ➡️ **Solution** (pour savoir si il fonctionne): **les tests automatisés** + - ➡️ **Solution** (pour garantir qu'il fonctionne à chaque changement): **l'intégration continue (CI)** +- **Les dépendances du code** + - ➡️ Solution: Mise en place d'un outil de **gestion et d'audit des dépendances** +- **Les outils de génération du code**: + - ➡️ Solution: Mise en place d'un processus automatisé de génération de livrable s'expécutant dans un environment controllé + +--- + +## Quelles solutions ? (2/2) + +- **L'environnement cible**: + - ➡️ Solution: Utilisation *d'outils de packaging* (Docker) pour notre application et son environment cible +- **Le processus de livraison lui même**: + - ➡️ Solution: définir un *cycle de vie* et en déduire un *processus de livraison* + +--- + +## Les grandes étapes de la génération de notre livrable + +1. `build`: Compilation de l'application +2. `lint`: Analyse statique de code pour détecter des problèmes ou risques +3. `test`: Exécution de la suite de tests automatisées +4. `package`: Création du livrable +5. `release`: Livraison du livrable + +--- + +## Checkpoint 🎯 + +Notre première étape va etre de faire en sorte de pouvoir lancer le serveur dans notre environment de développement. + +
+ +Cela sigifie: + +1. Installer toutes les dépendances nécesaires pour la génération et l´exécution de notre code +2. Générer du code exécutable (appeler `tsc`) + +{{% /section %}} diff --git a/content/novembre-2025/dependency-management.md b/content/novembre-2025/dependency-management.md new file mode 100644 index 0000000..73b3d3e --- /dev/null +++ b/content/novembre-2025/dependency-management.md @@ -0,0 +1,406 @@ ++++ +weight = 100 ++++ + +{{% section %}} + +{{< slide template="invert" >}} + +## La Gestion de Dépendances + +--- + +## Pourquoi réutiliser du code et des outils? + +- 🧱 L'informatique moderne est un assemblage de briques logicielles +- ⚙️ ... chacune des briques étant infiniment complexe + - Ex: TLS, PostgresSQL, Linux, Firefox... +- 🤔 Il est difficilement envisageable de démarrer un projet sans réutiliser des briques logicielles. +- 🧘 Cela permet de **concentrer son effort de développement sur ce qui apporte de la valeur**. + - ➡️ Dans notre cas, notre métier est la gestion de véhicules, pas l'implémentation d'une pile réseau et d'un serveur HTTP. + +--- + +## ⚠️ Ajouter une dépendance n'est pas un acte anodin ⚠️ + +- Si votre dépendance ne fonctionne plus ou est compromise, votre livrable sera impacté +- Attention à ne pas rajouter une dépendance trop grosse pour n'utiliser qu'une petite fonctionnalité! +- Attention aux dépendances de vos dépendances 😱 +- Quelques règles d'usage: + - Vérifier que votre dépendance est activement maintenue? (date du dernier commit, existence d'une communauté autour) + - 👀 le code. Est-ce que vous le comprenez? Est-ce que vous pourriez le debugger ou le faire vous même? + +--- + +## Dépendre de librairies externes pose une quantité de problèmes! + +- Comment récupérer l'intégralité du code dont on à besoin? +- Comment maintenir à jour ce code? +- Comment s'assurer qu'il n'a pas été modifié? +- Comment garantir la reproductibilité de ce processus? + +--- + +{{
}} + +Mais le pire, c'est que c'est un problème récursif! Nos dépendances ont aussi des dépendances! + +--- + +{{
}} + +--- + +{{
}} + +--- + +## Un peu de terminologie + +- Une *dépendance* est une librairie de code externe ou un outil qui fournit une fonctionnalité. +- On distingue deux types de dépendances: + - *dépendance directe*: référencée directement par notre application + - *dépendance transitive*: référencée par une des librairies dont l'application dépends + +--- + +## Comment gérer ses dépendances? + +- On introduit un outil de gestion de dépendances + - Permets au développeur de définir une liste de dépendances en fixant ou en plaçant une contrainte de version (ex <= 4.3.0) + - Cela permet de construitruire un arbre de dépendances + - Télécharge toutes les dépendances dans l'environment d'exécution et les mets à disposition de l'application. + +--- + +## Comment cela fonctionne avec Javascript? + +{{
}} + +--- + +{{
}} + +--- + +## NPM kesako? + +- [Node Package Manager](https://npmjs.com) +- Package Manager et infrastructure de distribution de paquets (registry) +- Gère aussi bien les dépendances de code que les outils +- Des alternatives existent (yarn et pnpm) + +--- + +## Du coup c'est quoi un paquet? + +- Un fichier ou un répertoire décrit par un fichier `package.json` +- Un paquet peut mettre à disposition: + - Un module Javascript / Typescript + - Des scripts exécutables + - Pour lancer un script il vous faut utiliser la commande `npx