{"config":{"separator":"[\\s\\-_,:!=\\[\\]()\\\\\"`/]+|\\.(?!\\d)"},"items":[{"location":"","level":1,"title":"Bienvenue dans les notes de ramzouille","text":"

avant le 28/11 y'a rien a gratter, j'installais linux pour la 9387e fois

","path":["Bienvenue dans les notes de ramzouille"],"tags":[]},{"location":"#bienvenue-dans-les-notes-de-ramzouille","level":1,"title":"Bienvenue dans les notes de ramzouille","text":"","path":["Bienvenue dans les notes de ramzouille"],"tags":[]},{"location":"#structure","level":2,"title":"Structure","text":"

-> cheatsheets (Notes sur les outils dev du quotidien)

-> cours (Notes sur les cours)

-> projects (Notes sur des nouveaux projets)

-> liens cools (mes sites favoris)

","path":["Bienvenue dans les notes de ramzouille"],"tags":[]},{"location":"links/","level":1,"title":"Liens cools de ma poche","text":"","path":["Liens cools de ma poche"],"tags":[]},{"location":"links/#liens-cools-de-ma-poche","level":1,"title":"Liens cools de ma poche","text":"","path":["Liens cools de ma poche"],"tags":[]},{"location":"links/#design","level":2,"title":"🎹 Design","text":"","path":["Liens cools de ma poche"],"tags":[]},{"location":"links/#developpement","level":2,"title":"đŸ’œ Developpement","text":"","path":["Liens cools de ma poche"],"tags":[]},{"location":"cheatsheets/2025-11-28/","level":1,"title":"Commandes *sh pour les idiots (28/11/25)","text":"

mon big ass qui fait sudo rm -rf / sans réfléchir

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#commandes-sh-pour-les-idiots-281125","level":1,"title":"Commandes *sh pour les idiots (28/11/25)","text":"","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#cheatsheet-de-plein-de-commandes","level":2,"title":"Cheatsheet de plein de commandes","text":"

Depuis le début, beaucoup de commandes on été utilisées, du coup je note ici les commandes utilisées depuis le début et a quoi elles servent en gros

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#commandes-de-base","level":3,"title":"Commandes de base","text":"
  1. sudo : lance une commande avec les superdroits, peut manipuler tout le pc avec en gros

    sudo [commande]\n

  2. ls : liste les fichiers d'un dossier

    # -a pour afficher les fichiers cachés / -l pour afficher en liste avec plus d'infos\nls [options] [fichier|dir]\n

  3. cd : changer de dossier

    # ~ pour aller au répertoire home / .. pour revenir en arriere\ncd [dir]\n

  4. pwd : affiche le répertoire actuel

    pwd\n

  5. touch : affiche le contenu d'un fichier

    touch [fichier]\n

  6. nano : éditeur de texte

    nano [fichier]\n

  7. mkdir : supprime ce qu'on lui donne

    mkdir [options] [fichier|dir]\n

  8. rm : supprime ce qu'on lui donne

    # -r pour supprimer un dossier et son contenu (recursive) (`rmdir` le fait aussi)\n# -f force la commande\nrm [options] [fichier|dir]\n

  9. cp : copie...

    cp [options] [source] [destination]\n

  10. mv : ...et déplace

    mv [options] [source] [destination]\n

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#les-caracteres-dassociations","level":3,"title":"Les caractĂšres d'associations","text":"

| (le pipe) -> prend le résultat de la commande de gauche et le donne à celle de droite

exemple : liste tout un répertoire, mais n'affiche que les résultats qui sont \"feur\"

ls -la | grep \"feur\"\n

> et >>

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#permissions-et-utilisateurs","level":3,"title":"Permissions et Utilisateurs","text":"

chmod [droits] [fichier] - change les permissions d'un fichier (qui peut lire/écrire/exécuter) - chmod +x [fichier] rend un script exécutable (trÚs important) - chmod 777 [fichier] donne tous les droits à tout le monde (dangereux mais ça dépanne)

chown [user]:[groupe] [fichier] - change le propriétaire du fichier (si t'as copié un truc en sudo et que tu peux plus le toucher)

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-11-28/#lecture-et-recherche-dans-les-fichiers","level":3,"title":"Lecture et recherche dans les fichiers","text":"

cat [fichier] - affiche tout le contenu d'un fichier d'un coup dans le terminal - utile pour les petits fichiers, sinon ça inonde l'écran

less [fichier] - affiche le contenu page par page (on peut scroller) - appuyer sur q pour quitter

head [fichier] / tail [fichier] - affiche juste le début (head) ou la fin (tail) d'un fichier - tail -f [fichier] hyper utile pour voir les logs en direct (ça attend les nouvelles lignes)

grep [mot] [fichier] - cherche un mot ou une phrase spécifique dans un fichier (le ctrl+f du terminal) - -r pour chercher dans tous les dossiers (recursive) / -i pour ignorer les majuscules

","path":["Cheatsheets","Commandes *sh pour les idiots (28/11/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/","level":1,"title":"Git pour les neuilles (12/12/25)","text":"

completement zehef pcq t'as pas git push

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#git-pour-les-neuilles-121225","level":1,"title":"Git pour les neuilles (12/12/25)","text":"","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#creer-un-git","level":2,"title":"Créer un git","text":"","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#-si-le-projet-existe-deja","level":3,"title":"-> Si le projet existe deja","text":"","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#-sinon-creer-le-projet","level":3,"title":"-> Sinon créer le projet","text":"","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#ignorer-des-fichiersdossiers","level":2,"title":"Ignorer des fichiers/dossiers","text":"

echo gbvenv/ >> .gitignore <- on indique via un echo qui écrira dans le fichier .gitignore qu'on ne veut pas push le dossier \"gbvenv\" ici, un fichier on ne mettera pas le slash (logique en amont)

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#une-fois-que-de-fichiers-sont-dispos-empaqueter","level":2,"title":"Une fois que de fichiers sont dispos, empaqueter !","text":"

Pour envoyer un projet git, c'est comme envoyer un colis Ă  la poste, d'abord, on met nos affaires dans le colis

Plusieures possibilitĂ©s ☝

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#etiqueter-le-paquet","level":2,"title":"Etiqueter le paquet","text":"

Ensuite, on rempli l'étiquette du colis et on la colle au colis

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#deposer-le-colis","level":2,"title":"Déposer le colis","text":"

Enfin pour push, c'est a dire déposer le colis au bureau de poste pour l'envoi, on fait :

Info

-u veut dire ce que dit la doc en gros

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#-si-erreur","level":3,"title":"-> SI ERREUR","text":"

Dans le cas ou un fichier/dossier a été supprimé autre part avant de push nos modifs

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2025-12-12/#utiliser-deux-branches-differentes","level":2,"title":"Utiliser deux branches différentes","text":"

Dans le cas ou l'on veut travailler avec une seconde branche

","path":["Cheatsheets","Git pour les neuilles (12/12/25)"],"tags":[]},{"location":"cheatsheets/2026-01-16/","level":1,"title":"pip et environnements virtuels pour les caca (16/01/26)","text":"

7alouf ouvre grabber apres 9h brainrot tsunami

","path":["Cheatsheets","pip et environnements virtuels pour les caca (16/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-16/#pip-et-environnements-virtuels-pour-les-caca-160126","level":1,"title":"pip et environnements virtuels pour les caca (16/01/26)","text":"","path":["Cheatsheets","pip et environnements virtuels pour les caca (16/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-16/#python-et-ses-environnements-virtuels","level":2,"title":"Python et ses environnements virtuels","text":"

Utile de créer donc un environnement pour chaque projet afin de en pas perturber d'autres projets avec des milliers de packages inutiles en gros

python3 -m venv gbvenv <- permet de créer un environnement (venv crée l'environnement \"gbvenv\")

source gbvenv/bin/activate <- lance cet environnement pour travailler dedans

pip est le packages manager de python, en l'appelant, on peut installer des packages comme uvicorn par exemple, utile pour grabber

pip install --upgrade pip <- update les packages

python -m pip install *** <- installe le package qu'on notera a la place des ***

pip freeze >> requirements.txt <- commande super utile pour partager les dependances necessaires pour faire fonctionner son projet sur un autre environnement

deactivate <- désactive l'environnement virtuel

","path":["Cheatsheets","pip et environnements virtuels pour les caca (16/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-16/#script-de-roi-qui-automatise-le-process","level":2,"title":"Script de roi qui automatise le process","text":"

bash <(curl -fsSL https://raw.githubusercontent.com/buchtioof/venv-setup/main/venvsetup.sh)

Pour en apprendre plus : le git du projet

","path":["Cheatsheets","pip et environnements virtuels pour les caca (16/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/","level":1,"title":"SQL pour les tung tung tung sahur (22/01/26)","text":"

florian quand je lui demande de l'aide

","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#sql-pour-les-tung-tung-tung-sahur-220126","level":1,"title":"SQL pour les tung tung tung sahur (22/01/26)","text":"","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#modele-mvc","level":2,"title":"ModĂšle MVC","text":"

Le modÚle MVC est une façon de concevoir un projet logiciel, en gros on sépare celui-ci en trois grandes parties distinctes séparant la logique de la vue et rend le travail plus facile.

ModĂšle MVC en prenant celui de grabber par exemple :

- Model = Base De Donnée (ex: EMPLOYEES, COMPUTERS)\n- View = Tableau de bord, Site\n- Controller = Cerveau qui dirige les deux parties Model et View (ex: app.py)\n
","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#tuto-comment-cr2er-une-bdd-sql-facilement-en-2-minutes-super-facile","level":2,"title":"TUTO : COMMENT CR2ER UNE BDD SQL FACILEMENT EN 2 MINUTES (SUPER FACILE)","text":"","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#structure-dune-base-de-donnees","level":3,"title":"Structure d'une Base De Données","text":"

celle de grabber pour l'exemple

BDD (Etape 1) - grabberman\n├── TABLES (Etape 2) - COMPUTERS\n│   ├── Colonne (Etape 3) - PcId, entier/clĂ© primaire\n│   │   └── DonnĂ©e (Etape 4)\n│   ├── Colonne (Etape 3) - Hostname, chaĂźne de charactĂšre\n│   └── Colonne (Etape 3) - MacAddress, chaĂźne de charactĂšre\n└── TABLES (Etape 2) - EMPLOYEES\n    ├── Colonne (Etape 3) - UserId, entier/clĂ© primaire\n    ├── Colonne (Etape 3) - Username, chaĂźne de charactĂšre\n    └── Colonne (Etape 3) - PcId, clĂ© secondaire\n
","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#etape-1-creer-une-bdd","level":3,"title":"Etape 1 : Créer une BDD","text":"

sqlite3 grabberman.db <- Commande qui crée une DB qu'on appellera ici \"grabberman\"

","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#etape-2-creer-une-table","level":3,"title":"Etape 2 : Créer une table","text":"
CREATE TABLE \"COMPUTERS\" \n(\n    PcId INTEGER PRIMARY KEY AUTOINCREMENT, \n    Hostname VARCHAR(50) NOT NULL, \n    MacAddress VARCHAR(50)\n);\n

Note

Ici on crée une table dans laquelle on stockera des données (des PC que l'on grab par exemple)

","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#etape-3-ajouter-des-donnees-dans-une-table","level":3,"title":"Etape 3 : Ajouter des données dans une table","text":"

INSERT into COMPUTERS (Hostname, MacAddress) VALUES ('mypc', '1B:12:F0:FL:94');

Note

Pour ajouter une donnée dans une tableau, on INSERE dans le TABLEAU donné les VALEURS dans les Colonnes

","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"cheatsheets/2026-01-22/#etape-4-creer-un-autre-tableau-avec-une-cle-liee-foreign-key","level":3,"title":"Etape 4 : Créer un autre tableau avec une clé liée (foreign key)","text":"
CREATE TABLE \"EMPLOYEES\" \n(\n    UserId INTEGER PRIMARY KEY AUTOINCREMENT, \n    Username VARCHAR(50) NOT NULL, \n    FOREIGN KEY (PcId) REFERENCES COMPUTERS(PcId)\n);\n

Note

On recommence comme à l'étape 2, en ajoutant une clé étrangÚre foreign key, qui lie une clé extérieure, PcId ici, dans notre second Tableau

","path":["Cheatsheets","SQL pour les tung tung tung sahur (22/01/26)"],"tags":[]},{"location":"learn/2025-10-30/","level":1,"title":"C koi linux ? (30/10/25)","text":"","path":["Cours","C koi linux ? (30/10/25)"],"tags":[]},{"location":"learn/2025-10-30/#c-koi-linux-301025","level":1,"title":"C koi linux ? (30/10/25)","text":"

Warning

Page en travaux, doit ĂȘtre finie avec toutes les informations que j'ai sur Linux en gĂ©nĂ©ral

","path":["Cours","C koi linux ? (30/10/25)"],"tags":[]},{"location":"learn/2025-10-30/#arborescence-type-sur-unix","level":2,"title":"Arborescence type sur UNIX","text":"

/               # Racine du disque\n├── /bin/       # Contient les commandes de base\n├── /boot/      # Fichiers de demarrage\n├── /dev/       # Tout ce qui est liĂ© aux pĂ©riphĂ©riques\n├── /etc/       # Fichiers de configuration\n├── /home/      # RĂ©pertoires utilisateurs\n├── /lib/       # BibliothĂšques logicielles\n├── /mnt/       # Point de montage pour les systĂšmes de fichier temporaires\n├── /media/     # Point de montage pour les disques temporaires\n├── /opt/       # Logiciels optionnels, la ou on installera des programmes maison\n├── /root/      # RĂ©pertoire du user root\n├── /var/       # Variable, contient des logs, ect...\n├── /usr/       # Contient sensiblement la mĂȘme chose que la racine mais sans ĂȘtre utile au fonctionnement du systĂšme\n├── /srv/       # Services hĂ©bergĂ©s sur le systĂšmes (FTP, HTTP, ect...)\n├── /run/       # Emplacement mĂ©moire des programmes\n└── /tmp/       # Temporaire\n
source de l'arbo.

","path":["Cours","C koi linux ? (30/10/25)"],"tags":[]},{"location":"learn/javascript/","level":1,"title":"Javascript en gros","text":"","path":["Cours","Javascript en gros"],"tags":[]},{"location":"learn/javascript/#sommaire","level":2,"title":"Sommaire","text":"","path":["Cours","Javascript en gros"],"tags":[]},{"location":"learn/javascript/2026-01-30/","level":1,"title":"Javascript en gros pt.1 (30/01/26)","text":"","path":["Javascript en gros pt.1 (30/01/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/","level":1,"title":"JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)","text":"","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#js-en-gros-pt2-asynchrone-et-promesses-manip-de-fichiers-060226","level":1,"title":"JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)","text":"

Info

Avant de manipuler des fichiers, il faut comprendre le fonctionnement des modules qui s'en occuperont, l'asynchrone.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#asynchrone-et-promesses-promise","level":2,"title":"Asynchrone et promesses (promise)","text":"","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#cest-quoi-asynchrone","level":3,"title":"C'est quoi Asynchrone ?","text":"

Asynchrone permet de ne pas bloquer le code mĂȘme si il n'a pas de rĂ©sultat mais avec promesse, il laisse le code continuer pour trouver une rĂ©ponse et la rapporter comme promis.

Rien de mieux qu'un exemple concret et gourmand en amont !

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#1-sans-asynchrone","level":4,"title":"1. SANS Asynchrone","text":"
  1. Tu commandes un Tasty Crousty.
  2. Ce neuille de caissier part en cuisine.
  3. Il fait cuire le riz lui-mĂȘme.
  4. Il coupe les tenders.
  5. Il met tout dans la barquette puis sauce.
  6. Et revient pour te donner le Tasty Crousty 67 doro party.
  7. SEULEMENT MAINTENANT, il prend la commande du gwer suivant.

Résultat : La file d'attente sort du restaurant. Si la cuisson prend 10 minutes, tout le restaurant est bloqué pendant 10 minutes. Bien guez.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#2-avec-asynchrone","level":4,"title":"2. AVEC Asynchrone","text":"
  1. Tu commandes un Tasty Crouspy.
  2. La caissiÚre crie en cuisine \"Un Crousty piquant sucré supplément poulet !\".
  3. Elle te donne un bipeur, faisant donc la promesse de te servir un délicieux Crouspy Tasty.
  4. Puis elle passe directement au client suivant.
  5. Toi, tu vas t'asseoir et tu attends.
","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#mais-cest-quoi-cette-promesse-promise","level":3,"title":"Mais c'est quoi cette promesse ? (Promise)","text":"

â˜ïžđŸ€“ Node.js fonctionne sur un principe de thread unique (monothread)... En gros, il ne peut effectuer qu'une seule tĂąche Ă  la fois.

Pour éviter de bloquer le programme pendant de longues opérations (comme lire des données au fin fond du disque dur), il délÚgue ces tùches a l'ordinateur et utilise un mécanisme de Promesses.

Dans notre exemple, la Promise, c'est le bipeur.

Ce boßtier est une promesse. Le restaurant te dit : \"Je n'ai pas ton crousty tout de suite, mais je te promets que je te préviendrai dÚs qu'il y a du nouveau.\"

Une Promise a toujours 3 états possibles, et seulement 3 :

  1. En attente (Pending) : Le boĂźtier ne fait rien. Le cuisinier travaille. Tu attends.
  2. SuccÚs (Resolved) : Le boßtier vibre ! La promesse est tenue, tu as ton chicken (la donnée est arrivée).
  3. Échec (Rejected) : Le manager arrive et te dit \"DĂ©solĂ©, la cuisine a pris feu, pas de dĂ©licieux crousty pour ce soir\". La promesse est rompue (il y a une erreur).
","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#exemples-async-et-await","level":3,"title":"Exemples async et await","text":"","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#exemple-dun-async-exo-du-tp-2-de-js","level":4,"title":"Exemple d'un async (exo du TP 2 de JS)","text":"
files.forEach((fileName) => {\n    fs.readFile(fileName, 'utf8').then((content) => {\n        ...\n    })\n});\n
","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#exemple-concret-await-exo-du-tp-2-de-js","level":4,"title":"Exemple concret await (exo du TP 2 de JS)","text":"

On peut également demander spécifiquement d'attendre le retour d'une promesse avec await

const stats = await fs.stat(filename);\n
","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#manipulation-de-fichiers","level":2,"title":"Manipulation de fichiers","text":"

Pour manipuler des fichiers avec Node.JS, il existe un module appelé Node.JS fs, fs pour fiché S. Avec cette librairie on peut manipuler de plusieurs maniÚre nos fichiers, les lire, écrire ou réécrire, demander les infos d'un fichier, copier et pleinnn de choses encore !

Ici on se concentrera sur les fonctions qu'on utilise dans le TP 2 de JS

Avant tout, pour utiliser ce module, il faut l'appeler via une constante :

const fs = require('fs').promises; // fs prendra l'appel du module en utilisant les promesses de tout Ă  l'heure\n

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#lecture-de-fichiers-fsreadfile","level":2,"title":"Lecture de fichiers (fs.readFile)","text":"

Pour lire des fichiers, on utilise la fonction fs.readFile. Lorsque cette commande est exĂ©cutĂ©e, le moteur JavaScript ne lit pas le fichier lui-mĂȘme. Il envoie une requĂȘte au systĂšme d'exploitation (l'OS) pour qu'il s'en charge.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#2-la-resolution-le-callback","level":3,"title":"2. La Résolution (Le Callback)","text":"

Une fois que le systÚme d'exploitation a fini de lire le fichier, il notifie le programme. La Promesse change d'état et déclenche l'une des deux fonctions suivantes :

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#partie-2-le-traitement-sequentiel-le-modele-asyncawait","level":2,"title":"PARTIE 2 : Le Traitement Séquentiel (Le modÚle async/await)","text":"

Parfois, l'asynchronisme pur est difficile à gérer (besoin d'ordre précis). La syntaxe async/await permet de forcer un comportement séquentiel au sein d'une fonction asynchrone.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#1-la-suspension-de-lexecution-await","level":3,"title":"1. La Suspension de l'Exécution (await)","text":"

Le mot-clé await placé devant une Promesse (comme fs.readFile) modifie le flux d'exécution. * ConcrÚtement : L'interpréteur met en pause uniquement l'exécution de la fonction actuelle. Il attend que la Promesse soit résolue (terminée) avant de passer à la ligne suivante. * L'encodage (utf8) : Spécifie au systÚme de convertir directement le flux binaire (Buffer) en chaßne de caractÚres lisible (String) avant de renvoyer le résultat.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#2-le-mode-decriture-appendfile-vs-writefile","level":3,"title":"2. Le Mode d'Écriture (appendFile vs writeFile)","text":"

Lorsqu'il s'agit d'écrire des données sur le disque, le choix de la méthode détermine comment le fichier est manipulé au niveau basique :

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#3-literation-la-boucle","level":3,"title":"3. L'Itération (La boucle)","text":"

Dans un contexte async/await, une boucle permet de traiter une liste d'éléments un par un. * ConcrÚtement : Le systÚme traite le premier fichier, attend la fin complÚte de l'opération (lecture + écriture), et seulement ensuite passe à l'itération suivante. Cela garantit l'ordre des opérations.

","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"learn/javascript/2026-02-06/#en-resume-technique","level":2,"title":"📝 En RĂ©sumĂ© Technique","text":"
  1. I/O Asynchrone : Permet de déléguer les opérations lentes (disque, réseau) au systÚme pour ne pas bloquer le processeur.
  2. Promise : Objet représentant l'état futur d'une opération (En attente -> Résolu ou Rejeté).
  3. Flux Séquentiel (await) : Force le code à attendre la résolution d'une promesse avant de continuer, simulant un code synchrone pour plus de lisibilité et de contrÎle.
  4. Gestion d'erreur : Indispensable pour intercepter les exceptions systĂšmes (I/O) et Ă©viter l'arrĂȘt brutal du processus node.
","path":["JS en gros pt.2 : Asynchrone et promesses, Manip de fichiers (06/02/26)"],"tags":[]},{"location":"projects/2025-12-05/","level":1,"title":"Grabber pt.1 (05/12/25)","text":"

Ce script a pour but de récupérer automatiquement les informations matérielles (CPU, RAM, Stockage) et logicielles (OS, Kernel, Environnement de bureau) de la machine. Il formate ensuite ces données et les enregistre dans un fichier summary.txt situé dans le dossier /opt/grabber.

","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2025-12-05/#commandes-et-explications","level":2,"title":"Commandes et explications","text":"","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2025-12-05/#1-variables-et-chemins","level":3,"title":"1. Variables et chemins","text":"

DIR=/opt/grabber - Définit le répertoire de travail principal pour le script.

SUM=\"$DIR/summary.txt\" - DĂ©finit le chemin absolu du fichier de sortie oĂč les informations seront Ă©crites.

","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2025-12-05/#2-recuperation-hardware-materiel","level":3,"title":"2. Récupération Hardware (Matériel)","text":"

lscpu -eMODELNAME | tail -n1 - Affiche les détails du CPU et isole la derniÚre ligne pour obtenir uniquement le nom du modÚle.

sudo dmidecode -t processor | grep ID - Utilise l'outil dmidecode (nécessite les privilÚges root) pour extraire l'identifiant unique du processeur.

lsmem | grep 'Mémoire partagée' - RécupÚre la taille de la mémoire vive (RAM) disponible sur le systÚme.

lsblk -dnb - Liste les périphériques de blocs (disques) sans afficher les partitions, en excluant les boucles (loop) et le boot, pour calculer le stockage total.

numfmt --to iec $STOCKAGE_TOTAL - Convertit la taille totale du stockage (calculée en octets) vers un format lisible par l'humain (ex: 500G, 1T).

","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2025-12-05/#3-recuperation-software-logiciel","level":3,"title":"3. Récupération Software (Logiciel)","text":"

lsb_release -a - Affiche les informations spécifiques à la distribution Linux installée (Description, Release).

uname -a - RécupÚre l'architecture du systÚme (ex: x86_64).

uname -r - Affiche la version actuelle du noyau (Kernel) Linux.

","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2025-12-05/#4-fonctions-decriture-logique","level":3,"title":"4. Fonctions d'écriture (Logique)","text":"

echo \"[HARDWARE]\" > $SUM - Initialise le fichier de rĂ©sumĂ© en Ă©crivant l'en-tĂȘte. Le signe > Ă©crase tout contenu prĂ©cĂ©dent pour repartir Ă  zĂ©ro.

echo \"VAR = $VAR\" >> $SUM - Ajoute les lignes d'informations (CPU, RAM, OS, etc.) à la suite du fichier. Le signe >> permet d'ajouter du texte sans effacer ce qui existe déjà.

hardware et software - Appelle les deux fonctions définies précédemment pour exécuter la collecte et l'écriture des données.

","path":["Projets","Grabber pt.1 (05/12/25)"],"tags":[]},{"location":"projects/2026-01-23/","level":1,"title":"Site de notes avec Zensical (23/01/26)","text":"

celui qui pete fort dans la classe jv te grabber

","path":["Projets","Site de notes avec Zensical (23/01/26)"],"tags":[]},{"location":"projects/2026-01-23/#site-de-notes-avec-zensical-230126","level":1,"title":"Site de notes avec Zensical (23/01/26)","text":"

Note

Pendant la création de cette note j'ai immigré mkdocs à Zensicle (maj de mkdocs en meilleur) et donc j'utilise une config qui réutilise les fichiers et la structure mkdocs.

","path":["Projets","Site de notes avec Zensical (23/01/26)"],"tags":[]},{"location":"projects/2026-01-23/#pourquoi-faire","level":2,"title":"Pourquoi faire ?","text":"","path":["Projets","Site de notes avec Zensical (23/01/26)"],"tags":[]},{"location":"projects/2026-01-23/#comment-zensicle-marche","level":2,"title":"Comment Zensicle marche","text":"","path":["Projets","Site de notes avec Zensical (23/01/26)"],"tags":[]},{"location":"projects/2026-01-23/#hebergement-via-github-github-actions","level":2,"title":"Hébergement via Github (Github Actions)","text":"

Pour héberger mon site de documentation en ligne, j'utilise Github via Github Actions qui est la solution parfaite pour un projet léger comme celui-ci.

Docs pour host sur Github

","path":["Projets","Site de notes avec Zensical (23/01/26)"],"tags":[]}]}