Woodstock Backup v2.0.0 - La réécriture complète en Rust

Posté le 26 avril 2026 dans Woodstock Tags: woodstock, backup, sauvegarde, rust, grpc

Temps de lecture: 22 min

Bonjour à tous,

Six ans. Il m'aura fallu six ans entre la première version de Woodstock Backup et cette v2. Si vous m'aviez dit en 2020 que je passerais la moitié de la décennie à réécrire trois fois le même logiciel de sauvegarde... j'aurais quand même foncé tête baissée. C'est ma façon de faire. Me voilà donc avec une version 2 stable, entièrement réécrite en Rust, qui tourne en production sur ma petite infrastructure depuis plus d'un an. Et je suis vraiment content du résultat. 😄

Pour ceux qui me lisent depuis longtemps, voici un récapitulatif des articles qui ont précédé celui-ci :

ArticleDateSujet
Woodstock Backup v1.0.02020-09-20Présentation du projet, prototype TypeScript + rsync
Woodstock Backup - Btrfs2021-01-12Abandon de Btrfs, écriture d'un pool custom
Woodstock Backup - Protocole et Langage de sauvegarde2021-04-18Protocole gRPC maison
Woodstock Backup - Optimiser Node.js avec Rust2023-05-10NAPI-RS et bindings Rust pour réduire la consommation mémoire
Woodstock Backup - Reverse engineering de BackupPC2024-05-07Migration du pool BackupPC vers Woodstock

Pour les nouveaux, je résume : Woodstock Backup est mon logiciel de sauvegarde personnel, centralisé, qui sauvegarde toutes les machines de mon réseau local et mes serveurs distants sur un NAS. L'idée de départ était simple. Le résultat est... un peu plus complexe. :)

Pool of chunks


SportEquipement - Application de suivi de matériel sportif avec Vibe Coding

Posté le 29 janvier 2026 dans Programmation Tags: developpement, ia, vibe coding, rex, android

Temps de lecture: 10 min

Bonjour à tous,

Pour ceux qui me connaissent, vous savez que je fais un peu de vélo. Et comme tout cycliste moderne, j'utilise Strava. C'est l'outil de référence pour suivre ses sorties, comparer ses segments et analyser sa forme. Strava propose bien une fonctionnalité de "Suivi d'équipement" (pour savoir combien de kilomètres ont vos chaussures ou votre cadre), mais... c'est sommaire.

Si la version Web permet d'ajouter des composants (chaîne, cassette, etc.), l'application mobile a tout simplement "oublié" cette fonctionnalité.

J'ai eu quelques problèmes avec ma chaîne qui s'use en 2 000 km ou des plaquettes de frein à changer. Bref j'avais envie d'avoir des stats un peu précises sur le suivi de mon matériel. De la même manière je cours régulièrement et je voulais savoir quand mes baskets atteignaient leur durée de vie maximale (ça, ça marche bien sur Strava).

Pour améliorer ce suivi j'ai décidé de créer ma propre solution : SportEquipement.


Quelle est la valeur par défaut de max-old-space-size dans NodeJS ?

Posté le 14 juin 2024 dans Programmation Tags: javascript, nodejs

Temps de lecture: 7 min

Bonjour à tous,

Lors de nos développements en NodeJS, il arrive parfois que l'on se retrouve confronté à des erreurs. Certaines de ces erreurs ne se reproduisent pas en local, mais uniquement sur un environnement distant. C'est ce qui nous est arrivé récemment lors de l'exécution de la commande npm ci sur la chaîne de déploiement continue.

L'erreur que nous avons rencontrée est la suivante :

<--- Last few GCs --->

[14040:0x56930a0]    96150 ms: Mark-Compact 2012.5 (2093.0) -> 2011.8 (2092.0) MB, 902.72 / 17.13 ms  (average mu = 0.416, current mu = 0.217) allocation failure; scavenge might not succeed
[14040:0x56930a0]    97002 ms: Mark-Compact 2019.6 (2092.0) -> 2019.1 (2112.8) MB, 843.10 / 0.00 ms  (average mu = 0.251, current mu = 0.011) allocation failure; scavenge might not succeed

<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

Woodstock Backup - Reverse engineering de BackupPC

Posté le 7 mai 2024 dans Programmation Tags: woodstock, backup, sauvegarde, javascript, nodejs

Temps de lecture: 24 min

Une partie de cet article a été publiée sur LinuxFR. Après avoir reçu quelques retours, j'ai décidé de publier une version modifiée et améliorée de cet article sur mon blog.

Je remercie donc la communauté de LinuxFR pour ses retours. 😄

Les commentaires sur le code ou sur l'article sont les bienvenus.


Woodstock Backup - Optimiser la consommation mémoire de Node.js avec Rust

Posté le 10 mai 2023 dans Programmation Tags: woodstock, backup, sauvegarde, javascript, nodejs

Temps de lecture: 17 min

Introduction

Node.js est un environnement d'exécution JavaScript côté serveur qui repose sur le moteur JavaScript V8 de Google. Il est utilisé pour développer des applications serveur en back-end d'une application web, des outils en ligne de commande et des applications desktop. Cependant, la consommation de mémoire peut être un problème pour certaines applications Node.js, en particulier celles qui manipulent de grandes quantités de données ou des données volumineuses.

Dans cet article, nous allons voir comment optimiser la consommation de mémoire d'une application Node.js en le couplant avec Rust. Rust est un langage de programmation système qui offre des performances similaires à celles du C++, tout en offrant une sécurité de mémoire à la compilation. Rust peut être utilisé pour écrire des bibliothèques C/C++ natives pour Node.js.


Woodstock Backup - Protocol et Language de sauvegarde

Posté le 7 avril 2023 dans Programmation Tags: woodstock, backup, sauvegarde, javascript, nodejs

Temps de lecture: 23 min

Woodstock Backup - Protocol et Language de sauvegarde

Note de 2023 : Ce billet a été écrit en avril 2021, il y a deux ans, mais n'a jamais été publié. Le temps passe vite.

Depuis lors, j'ai travaillé sur d'autres projets, mais aussi sur ce logiciel de sauvegarde. En progressant dans le développement du projet, j'ai pu optimiser les performances et me faire une opinion sur le choix que j'ai finalement fait, que je partagerai à la fin de l'article.

Je mettrai à jour mes conclusions en fonction de mes avancées sur le sujet.

Dans notre précédent article, nous avons vu comment dédupliquer les fichiers dans un pool sans utiliser btrfs, un système de fichier permettant la déduplication. Pour pouvoir copier les fichiers dans notre pool, le logiciel doit savoir comment écrire les fichiers de manière appropriée.


Du souhait d'achat d'un vélo ...

Posté le 27 septembre 2021 dans Programmation Tags: javascript, nodejs, aws, web, velo, sms

Temps de lecture: 19 min

Que penseriez-vous si je vous racontais un peu mes vacances ? Attendez ... attendez ... ne partez pas ... l'histoire est intéressante, et surtout nous allons parler informatique.

Début Août j'ai décidé de m'acheter un nouveau vélo (un VTC à assistance électrique). Le choix du vélo importe peu, mais du fait d'une pénurie de matière première et d'une forte demande en vélo depuis le début de la crise de mes sanitaire, tous les vélos sont en rupture de stock.

J'ai fait le choix personnel de me rendre dans une enseigne connue dont le nom est aussi une discipline de l'athlétisme pour acheter ce VTC.1

Et là c'est le drame.

Si vous regardez les différents vélos de la marque (et en fonction de la taille du cadre qui vous correspond) vous tombez sur le message: En rupture de stock. (Bon. À aujourd'hui, nous avons un peu plus de stock sur le site)

Arf. Moi qui quand j'ai décidé quelque chose, je deviens impatient ...

Alors il est vrai que j'aurais pu aller voir sur un autre site, aller dans une autre boutique pour choisir un autre modèle, mais ce n'est pas ce que j'ai fait.


Mise à jour du blog vers gridsome

Posté le 2 mars 2021 dans Logiciels Tags: dedie, javascript

Temps de lecture: 11 min

J'avais migré en Janvier 2013 mon blog vers Pelican en venant de Dotclear. Pelican est un générateur de site statique en Python. J'avais alors dû faire l'impasse sur les commentaires mais au bénéfice d'un site performant et avec une surface d'attaque plus faible.

Plus tard, en décembre 2016, j'avais changé le thème pour alexandrevicenzi/Flex. Aujoud'hui je vais vous montrer la migration de mon blog vers Gridsome.

Je reste sur un générateur de site statique car, j'aime l'idée d'un site à la fois rapide et immuable tant que je ne décide pas de modifier le contenu mon blog. Alors pourquoi changer de Pelican vers Gridsome ?

Gridsome est un générateur de site statique écrit en Javascript. Il a la particularité de pouvoir générer des pages depuis des fichiers au format Markdown mais aussi depuis des CMS Headless, ou de n'importe quelles autres API et ce grace à une API commune en GraphQL.


Woodstock Backup - Utilisation de Btrfs et son remplacement

Posté le 12 janvier 2021 dans Woodstock Tags: backup, sauvegarde, btrfs, rsync, javascript, nodejs, woodstock

Temps de lecture: 13 min

Bonjour à tous,

La version 1 de mon programme de sauvegarde Woodstock Backup utlise Btrfs et Rsync pour effectuer une sauvegarde. Je l'utilise depuis quelques mois pour sauvegarder mes differentes machines (7 machines).

Voici un premier compte-rendu de l'utilisation de la première version de cet outil dont je suis l'auteur:

  • Lors de mon utilisation la sauvegarde fonctionne très bien, et cela c'est cool :). Je suis aux alentours de 200 snapshots.
  • J'ai eu un problème d'espace disque. Lors du déplacement de plusieurs énormes fichiers sur un serveur. La taille de l'espace de stockage à augmenté énormément.
    En effet rsync ne permet pas de détecter les déplacements de fichiers et btrfs ne permet pas de dédupliquer à la volée les données.
    Les fichiers ont donc été considérés comme étant nouveau.
  • L'espace disque étant tombé à zéro, j'ai voulu supprimer la dernière snapshot pour tester un déplacement de fichiers dans btrfs (à la main).
    La suppression de la snapshot a commencé à prendre énormément de temps, puis la machine est devenue inaccessible.
    En me connectant en direct sur la machine (KVM), j'ai découvert que la suppression du dernier volume Btrfs remplissait la mémore. Les 8Go octets de mémoire ont été remplis. Et le noyaux linux a utilisé OOM Killer pour détruire tous les processus.
    Bref la machine n'était plus dans un état lui permettant de faire les sauvegardes.

Comment créer une bonne API Web - Partie 3

Posté le 29 novembre 2020 dans Programmation Tags: api, graphql, rest, javascript, nodejs

Temps de lecture: 22 min

Bonjour,

Cet article fait partie d'un ensemble:

Il y a quelques années de cela, j'ai souhaité résoudre un problème que j'ai depuis longtemps avec les API REST: comment bien normaliser les tris, les projections, et les filtres. En effectuant mes recherches je suis tombé sur deux frameworks qui permettent de résoudre le problème des projections.