blunderDB

blunderDB est un logiciel pour constituer des bases de données de positions de backgammon. Sa force principale est de constituer un lieu unique où aggréger les positions qu’un joueur a pu rencontrer (en ligne, en tournoi) et de pouvoir réétudier ces positions en les filtrant selon différents filtres combinables arbitrairement. blunderDB peut également être utilisé pour constituer des catalogues de positions de référence.

La présente documentation est structurée de la manière suivante:

  • la section téléchargement et installation explique comment se procurer et lancer blunderDB.

  • le manuel décrit le fonctionnement général de blunderDB.

  • le guide utilisateur est une introduction pratique pour utiliser rapidement blunderDB.

  • la liste des commandes ainsi que la liste des raccourcis clavier permettent une utilisation efficace de blunderDB.

  • la section interface en ligne de commande (CLI) décrit les commandes disponibles pour l’import en masse, l’automatisation et le scripting.

  • la FAQ fournit quelques réponses aux interrogations les plus fréquentes.

Historique des versions

Version

Date

Cause et/ou nature des évolutions

0.1.0

31/12/2024

Création version beta.

0.2.0

06/01/2025

Résolutions de bugs divers.

Ajout de tables de matchs/TP/GV.

Ajout de filtres de recherche (coups, décision de videau, date).

Ajout de métadonnées sur les positions.

Fonction d’import/export entre instances de blunderDB.

Ajout de fonction de métadonnées sur les bases de données.

Introduction des numéros de versions (base de données et application).

0.3.0

27/01/2025

Résolutions de bugs divers.

Sauvegarde automatiquement le dimensionnement de la fenêtre.

Importe les éventuels commentaires depuis XG.

0.4.0

03/02/2025

Résolutions de bugs divers.

Ajout d’une icone pour blunderDB.

Corrections de filtres.

Ajout du support de MacOS.

0.5.0

04/02/2025

Ajout de nouveaux filtres (miroir, non contact, jan blot, outfield blot).

0.6.0

13/02/2025

Ajout de la bibliothèque de filtres.

Affichage de la version de la base de données dans les métadonnées.

0.7.0

16/02/2025

Prise en charge du japonais et de l’allemand dans les exports de XG.

0.8.0

03/05/2025

Possibilité de cacher le compte de course.

Chargement d’une position aléatoire.

0.9.0

02/11/2025

Correction de bug de la bibliothèque de filtres.

Import/export de base de données.

Affichage de flèches pour les coups sélectionnés.

Raccourcis clavier pour l’import/export.

0.10.0

25/02/2026

Import de matchs depuis eXtreme Gammon (XG/XGP), GNUbg (SGF), Jellyfish (MAT/TXT) et BGBlitz (BGF/TXT).

Navigation dans les matchs: parcours des coups d’un match importé, avec mise en évidence du coup joué.

Panneau des matchs: liste, tri, édition inline, permutation des joueurs, assignation de tournoi.

Import par dossier récursif et import par glisser-déposer.

Calculateur EPC (Effective Pip Count) avec base de données de bearoff GNUbg intégrée.

Collections: regroupement personnalisé de positions.

Tournois: regroupement de matchs par événement.

Sauvegarde et restauration de l’état de session (dernière recherche, position courante).

Migration automatique du schéma de base de données.

Affichage multi-moteurs dans l’analyse.

Filtre d’erreurs/blunders du joueur 1 dans les recherches.

Export de la base de données avec sélection granulaire (matchs, collections, tournois, coups joués).

Bouton de navigation dans les matchs.

Compte de course (pipcount) dans la navigation des matchs.

Interface en ligne de commande (CLI) complète.

Réouverture automatique de la dernière base de données.

Amélioration de la barre d’outils et des icônes.

0.11.0

06/03/2026

Filtre de recherche dans les positions courantes.

Ajout de filtres par match et par tournoi.

Effacement automatique du plateau lors de l’ouverture du panneau de recherche.

0.12.0

19/03/2026

Import de fichiers de position eXtreme Gammon (XGP) avec analyse.

0.13.0

28/03/2026

Simplification de l’interface: la navigation dans les matchs et les collections se fait directement via les panneaux.

Ligne de commande intégrée dans la barre d’état.

Panneau Console renommé en panneau Log.

Panneau Bearoff dédié dans le panneau inférieur.

Copier/coller de position dans le panneau de recherche.

Glisser-déposer pour réordonner les collections, les positions dans les collections, et les matchs dans les tournois.

Colonne tournoi dans le panneau des matchs avec édition inline.

Affichage automatique du panneau d’analyse après une recherche.

0.14.0

30/03/2026

Panneau Anki dédié pour l’étude par répétition espacée (algorithme FSRS).

Import des commentaires depuis les fichiers XG.

0.15.0

31/03/2026

Export de la position en image PNG dans le presse-papier (board seul via Ctrl+X, ou board avec analyse via Ctrl+X Ctrl+X).

0.16.0

18/04/2026

Schéma de base de données v2.0.0 : déduplication des positions via hash Zobrist, colonnes de filtrage dénormalisées, préfiltre de motifs bitboard, journalisation WAL. Import par lot >=3x plus rapide, recherche filtrée <=100 ms sur 10k+ positions. NOTE : les fichiers DB créés avec la v0.16.0 ne peuvent pas être ouverts par les versions plus anciennes ; les anciennes DB sont migrées automatiquement sur place (faire une sauvegarde d’abord).

0.17.0

20/04/2026

Optimisation du stockage : compression zlib des données d’analyse (~80% de réduction), encodage compact des positions (~90% de réduction de la taille). Ajout de 5 index manquants pour améliorer les performances de recherche. Correction de la recherche par erreur de cube. Correction du mode EDIT après une recherche sans résultats. Restauration de l’état du panneau de recherche lors du changement d’onglets. Suppression de 62 instructions de débogage des chemins critiques.

0.18.0

20/04/2026

Refactoring majeur du code : découpage de db.go (10k lignes) en 19 fichiers spécialisés, extraction de 7 modules de service depuis App.svelte (4888→469 lignes), consolidation des stores modaux/panneaux. Migration complète vers Svelte 5 runes. Remplacement de 9 modales de tableau par un composant générique DataTableModal. Ajout d’ESLint + Prettier + vitest (125 tests frontend) avec CI. Conformité WCAG 2.1 AA (focus visible, rôles ARIA, navigation clavier). Passage du mutex Database en RWMutex pour un meilleur parallélisme en lecture. Documentation CLI complète (CLI_USAGE.md + Sphinx FR/EN). Réécriture du README. Correction de tous les avertissements ESLint (46→0) et Vite (6→0).

0.19.0

07/05/2026

Ajout du panneau Stats : indicateurs PR (Performance Rate), Snowie Error Rate et MWC cost (Match Winning Chance cost), barre de filtre (joueur, tournoi, dates, type de décision, longueur de match), onglet Dashboard avec cartes de niveau / PR glissant / top blunders, onglet Progression avec courbe par tournoi et scatter plot par match, onglet Erreurs avec répartition par action de videau et histogramme des magnitudes. Drill-down interactif vers les positions / matchs / tournois depuis tous les indicateurs. Toggle PR / MWC instantané. Commande CLI list –type stats. Alignement des indicateurs PR / Snowie ER / MWC sur eXtremeGammon et gnuBG (seuil 0.16 d’équité pour les cubes proches). Correction du calcul de cube_error pour les décisions Double/Pass. Documentation du modèle de statistiques (Annexe : Modèle de statistiques — alignement XG / gnuBG / blunderDB). Voir Panneau Stats.

0.20.0

31/05/2026

Ajout de la structure d’exclusion Except au panneau de recherche : exclut les positions contenant l’un des pions dessinés, avec marqueur « doit être vide » (double-clic) et nombre de pions par point non limité (commande x). Ajout de l’option « premier dé uniquement » au filtre de lancer de dés (variante D1, option CLI –dice). Panneau Commentaires : focus automatique du champ de saisie à l’ouverture et boutons éditer / supprimer toujours visibles. Correction du filtre « Search Text » qui ne trouvait pas tous les tags de commentaires.

0.21.0

01/06/2026

Internationalisation de l’interface : l’intégralité de blunderDB (barre d’outils, panneaux, messages, aide) peut désormais être affichée au choix en anglais, français, allemand, italien, espagnol, finnois, japonais, grec ou russe. Ajout d’une fenêtre de configuration, accessible par un bouton en forme de rouage dans la barre d’outils, permettant de sélectionner la langue. Le choix de la langue est conservé d’une session à l’autre. Voir Configuration.

0.22.0

02/06/2026

Ajout d’un mode headless (serveur), avancé et facultatif, qui complète l’application de bureau : un démon serve exposant le moteur en HTTP + JSON, un backend PostgreSQL multi-utilisateur avec cloisonnement par tenant (et Row-Level Security en option), une commande migrate pour transférer une base SQLite vers PostgreSQL, et un dispatcher générique call donnant accès en ligne de commande à toutes les opérations de stockage. Import de positions uniques depuis de nouveaux formats (eXtreme Gammon .xgp, BGBlitz texte, bibliothèque native .db) avec enrichissement des doublons entre formats. Corrections : les panneaux ne provoquent plus d’erreur lorsqu’aucune base n’est ouverte et le panneau Commentaires ne boucle plus à l’ouverture. Voir Mode headless (serveur).

0.23.0

05/06/2026

Ajout de visites guidées de l’interface (tour général, recherche, matchs, tournois), rejouables depuis la barre d’outils ou la commande tour, et d’une base d’exemple chargeable par la commande demo pour découvrir l’outil sans importer ses propres parties. Personnalisation des couleurs du plateau (fond, bordure, flèches, pions, dés, videau) depuis la fenêtre de configuration. Autocomplétion de la ligne de commande (touche TAB). Panneau de recherche : contrôle explicite du type de décision (Pions / Videau), avec un sous-type Double / Pas de double ou Prise / Passe pour les décisions de cube, synchronisé avec le plateau ; le videau proposé est affiché au centre du plateau pour les décisions de prise/passe. Recherche d’une position par son identifiant (filtre id). Correction de l’attribution de l’erreur de videau au joueur 1. Voir Visites guidées et base d’exemple.

0.24.0

06/06/2026

Ajout d’une image conteneur (Docker) pour le mode headless : un point d’entrée dédié serve et un Dockerfile.serve produisant un binaire statique sans interface graphique, afin de déployer le moteur de blunderDB comme service derrière un reverse-proxy. Voir Mode headless (serveur).

0.25.0

07/06/2026

Mode serveur (headless) : deux nouvelles méthodes pour reconstruire une position sans l’enregistrer — positions.fromXGID décode une chaîne XGID en position, et positions.fromXGP lit un fichier de position unique .xgp. Voir Mode headless (serveur).

0.26.0

09/06/2026

Réglages d’affichage de l’interface dans la fenêtre de configuration : un curseur d’échelle pour agrandir ou réduire l’ensemble de l’interface, et un choix de position des panneaux (en bas, sur le côté ou automatique) afin de mieux exploiter les écrans larges. Ajout d’une barre d’informations au-dessus du plateau rappelant les joueurs et le contexte du match (événement, lieu, ronde, date, longueur). À l’ouverture d’une base, le panneau des matchs est affiché d’emblée et la revue débute sur la première position. Les raccourcis clavier sont désormais indépendants de la disposition du clavier (AZERTY, QWERTY, QWERTZ…). Correction du décodage XGID (indicateurs Jacoby/Beaver et valeur du videau). Ajout des onglets de vues multiples : plusieurs espaces de travail indépendants (liste de positions, position courante, recherche) avec les raccourcis CTRL-T (nouvelle vue), CTRL-W (fermer), CTRL-PageUp/CTRL-PageDown (changer de vue) et renommage par double-clic sur l’onglet. Voir Configuration et Onglets de vues.

0.27.0

13/06/2026

Panneau Anki : ajout d’un mode « entraînement libre » (cram), accessible par le bouton Cram à côté de Study, qui présente des positions aléatoires du paquet sans modifier le planning de révision espacée — idéal pour s’échauffer avant un tournoi ou réviser intensément un paquet sans en perturber l’ordonnancement. Recherche : nouvelle commande blunders (alias bl) qui charge directement les pires erreurs (équité/MWC) dans la vue d’analyse, avec un nombre optionnel pour en choisir la quantité (bl 50) ; nouveau filtre par joueur pl'nom' qui retrouve toutes les positions issues d’un match impliquant un joueur donné, sur l’un ou l’autre camp ; et des info-bulles, au survol de chaque filtre du panneau de recherche, indiquant le jeton de commande correspondant. Mode serveur (headless) : nouvelles méthodes matches.movesByMatch (tous les coups d’un match en un seul appel) et positions.epc (Effective Pip Count des deux joueurs). Voir Panneau Anki et Liste des commandes.

0.28.0

15/07/2026

Panneau de recherche : filtre unifié « Matchs & Tournois » remplaçant les champs de saisie d’identifiants par une fenêtre de sélection (listes à cocher filtrables par texte, boutons Tout/Aucun, cocher un tournoi coche ses matchs membres) — plus rapide sur les grosses bases, l’onglet Matchs et la vue Tournois ne recalculent plus les indicateurs PR/MWC que pour les matchs affichés ; cli list --type tournaments comble l’écart de parité correspondant. Nouveau filtre « Importée individuellement » (case à cocher du groupe Autre, ou jeton i en ligne de commande, s i ; disponible aussi en CLI via --individual) pour retrouver une position enregistrée ou importée seule plutôt que noyée dans un import de match. Correction d’une perte de données : la suppression d’un match ne supprime plus les positions individuellement importées, mises en collection ou intégrées à un paquet Anki que ce match contenait aussi. Mode serveur (headless) : six nouvelles méthodes pour le planificateur Anki à répétition espacée — journal des révisions (anki.reviewLog), prévision des cartes dues (anki.forecast), suspension / mise en veille / suppression de carte (anki.suspendCard, anki.buryCard, anki.removeCard) et ajustement automatique du taux de rétention visé d’un paquet vers son taux de réussite observé (anki.optimizeParams) ; nouvelle méthode tenant.purge pour supprimer définitivement les données d’un tenant sur un déploiement PostgreSQL multi-utilisateurs ; nouvelles méthodes matches.list (filtrage/tri/pagination) et stats.matchBadges (indicateurs PR/MWC bornés à une liste de matchs). Distribution Linux native : paquets .deb/.rpm, qui conservent le bit d’exécution perdu lors du téléchargement du binaire brut. Import : après l’import d’un match, l’onglet Matchs s’affiche et les positions importées sont immédiatement visibles ; après l’import d’une position isolée (fichier XGP, position BGBlitz, fichier de position texte, position collée ou lot de positions), l’onglet Analyse s’ouvre directement sur la position importée, au lieu de l’onglet Matchs ; correction du collage d’une analyse eXtreme Gammon en français ou en allemand depuis macOS, qui restait vide (accents décomposés par le presse-papier du système). Voir Mode headless (serveur), Liste des commandes et Téléchargement et installation.

0.29.0

18/07/2026

Export d’un match au format Jellyfish/gnubg (.mat) depuis l’interface (panneau Matchs) comme en ligne de commande, avec la route serveur correspondante — pratique pour rejouer un match dans un autre logiciel de backgammon. Recherche : nouveau discriminateur « dés exclus » (jeton xD65, plusieurs autorisés) qui écarte les positions dont le lancer correspond à un jet donné. Ouverture concurrente sécurisée : une base déjà ouverte en écriture dans une autre fenêtre de blunderDB s’ouvre désormais en lecture seule (navigation, recherche et analyse possibles, modifications désactivées, mention « [lecture seule] » dans la barre de titre) au lieu de risquer une corruption. Provenance des positions : hors mode match, la barre d’informations au-dessus du plateau indique le match — et son tournoi — d’où provient la position étudiée, avec un badge « +N » lorsqu’elle apparaît dans plusieurs matchs. Robustesse accrue face à l’environnement : repli automatique lorsqu’une police, le presse-papier ou la dernière base ouverte ne sont pas disponibles. Un rechargement explicite de la bibliothèque (CTRL-R, bouton de la barre d’outils ou commande e) rouvre le panneau d’analyse de la position affichée. Corrections notables : suppression d’un blocage à l’export de grosses bases, bouton « Aucun » de l’export qui n’exportait pas réellement aucun match, filtre par commentaire multi-mots, dédoublonnage de l’événement et du tournoi dans la barre d’informations, et divers ajustements d’affichage. Voir Liste des commandes, Panneau Matchs et Manuel.

0.30.0

26/07/2026

Recherche par commentaire : le filtre « Texte de recherche » devient le filtre « Commentaire » et propose trois modes exclusifs — contient le texte (comportement précédent, jeton t"mot1;mot2"), a un commentaire (jeton co) et sans commentaire (jeton xco) — pour retrouver d’un geste les positions annotées, ou au contraire celles qu’il reste à commenter. Positions marquées dans eXtreme Gammon : les marques (flags) posées lors de l’analyse d’un match XG sont désormais lues à l’import et retrouvables par le filtre « Marquée » (jeton fl), combinable avec tous les autres critères ; une décision de videau marquée donne deux positions marquées, le double et la prise/passe. Le marquage n’étant pas rétroactif, il suffit de réimporter le fichier .xg concerné pour que ses marques rejoignent la base, sans toucher aux commentaires ni aux analyses existants. Corrections notables : le PR affiché sur le badge d’un tournoi se rapporte au joueur de référence et non plus au cumul des deux joueurs, les paquets Anki fondés sur une recherche respectent de nouveau les filtres de cette recherche au lieu de reprendre toute la base, et un blocage de la recherche combinant certains filtres (texte, date, erreur du coup joué) est corrigé. Voir Liste des commandes et Manuel.

0.31.0

04/08/2026

Diffusion d’une base à des tiers : deux mécanismes indépendants, tous deux facultatifs et choisis au moment de l’export. Le filigrane d’origine inscrit dans le fichier ce qu’il est et d’où il vient, signé par une identité d’émetteur créée toute seule au premier usage ; la marque est infalsifiable, se lit en tête du panneau Métadonnées (ou par blunderdb info, sans jamais écrire dans le fichier) et ne consigne rien du côté de celui qui reçoit la base — aucun journal, aucun suivi. La protection par mot de passe produit un fichier .dbx chiffré (AES-256-GCM, clé dérivée par Argon2id), vérifié à chaque ouverture, dont l’en-tête reste lisible en clair ; l’identité s’exporte et s’importe en un seul fichier depuis les préférences. Fenêtre d’export refondue : un seul écran au lieu de quatre, rappel de ce qui part réellement (les positions affichées), part couverte de chaque collection signalée en rouge lorsqu’elle est partielle, tournois exportables seulement avec leurs matchs — et un export trois fois plus rapide. Fenêtre de configuration réorganisée en trois onglets (Interface, Couleurs du plateau, Identité d’émetteur), de taille et de position stables. Panneau Métadonnées redisposé en une seule grille. Le panneau Journal, qui ne recevait que l’écho des commandes, est retiré. Corrections notables : un mot de passe erroné n’ouvre plus une base protégée, les champs des fenêtres modales ne perdent plus le focus au clic, le calcul des indicateurs PR/MWC ne plante plus sur une partie d’argent, et les fichiers temporaires (-wal, -shm, verrou) sont nettoyés à la fermeture. Voir Diffuser une base : origine et mot de passe et Manuel.

0.32.0

09/08/2026

Le panneau EPC devient le panneau Bearoff et gagne l’analyse de course complète. Sur une position de bearoff pur, il affiche — en plus de l’EPC, du pip count, du wastage et du nombre moyen de lancers de chaque joueur, désormais présentés en tableau avec une ligne Δ signée — les probabilités de gain des deux joueurs et les équités money (cubeless, sans double, double/prend, double/passe, avec l’écart de chaque décision à la meilleure) ainsi que la meilleure décision de videau. Deux régimes clairement distingués : exact (lecture dans une base two-sided ; base TS-06-06 de GNUbg intégrée, couvrant jusqu’à 6 pions par joueur) et estimé (convolution calibrée, marge d’erreur affichée — le verdict de videau n’est jamais estimé). La base étendue TS-06-11 (verdict exact jusqu’à 11 pions par joueur, 1,2 Go) se télécharge depuis le nouvel onglet Bearoff de la configuration, avec vérification d’intégrité et reprise des téléchargements interrompus ; un fichier .bd two-sided quelconque de gnubg peut aussi être désigné. Mode défi pour l’entraînement : les résultats se masquent à chaque modification et se révèlent zone par zone, d’un clic. Édition entièrement au plateau : pions des deux jans, joueur au trait (clic sur le rectangle sortie/score) et position du videau (clic sur le videau). Le clic sur le plateau est désormais exact à toute échelle d’interface (un clic sur le point 1 pouvait atterrir sur le point 2). Nouvelle commande blunderdb epc en ligne de commande et option --bearoff-ts du mode serveur. Une nouvelle section du manuel, « Méthodologie et hypothèses du panneau Bearoff », énonce exhaustivement les hypothèses derrière chaque valeur affichée. Voir Panneau Bearoff et Méthodologie et hypothèses du panneau Bearoff.

Sommaire

Contacts

Auteur: Kévin Unger <blunderdb@proton.me>. Vous pouvez aussi me trouver sur Heroes sous le pseudo postmanpat.

J’ai développé blunderDB initialement pour mon usage personnel afin de pouvoir détecter des motifs dans mes erreurs. Mais il est très agréable d’avoir un retour surtout quand on a dépensé un paquet d’heures de conception, codage, débuggage… Aussi n’hésitez pas à m’écrire pour faire part de votre retour d’expérience. Tous les retours (constructifs) sont bienvenus.

Voici plusieurs manières de discuter:

Faire un don

Si vous appréciez blunderDB et que vous voulez soutenir les développements passés et futurs, vous pouvez

  • me payer un verre si on a le plaisir de se rencontrer!

  • faire un petit don par PayPal à l’adresse blunderdb@proton.me

Remerciements

Je dédie ce petit logiciel à ma compagne Anne-Claire et notre tendre fille Perrine. Je tiens à remercier tout particulièrement quelques amis:

  • Tristan Remille, de m’avoir initié au backgammon avec joie et bienveillance; de montrer la Voie dans la compréhension de ce merveilleux jeu; de continuer à m’encourager malgré mes piètres tentatives de mieux jouer.

  • Nicolas Harmand, joyeux camarade depuis maintenant plus d’une dizaine d’années dans de chouettes aventures, et un fantastique partenaire de jeu depuis qu’il a choppé le virus du backgammon.