blunderDB

blunderDB è un software per creare database di posizioni di backgammon. Il suo punto di forza principale è offrire un unico luogo in cui un giocatore può aggregare le posizioni incontrate (online, in torneo) e poter ristudiare queste posizioni filtrandole secondo diversi filtri combinabili arbitrariamente. blunderDB può anche essere utilizzato per creare cataloghi di posizioni di riferimento.

La presente documentazione è strutturata nel modo seguente:

  • la sezione download e installazione spiega come procurarsi e avviare blunderDB.

  • il manuale descrive il funzionamento generale di blunderDB.

  • la guida utente è un’introduzione pratica per utilizzare rapidamente blunderDB.

  • l’elenco dei comandi e l’elenco delle scorciatoie da tastiera permettono un utilizzo efficiente di blunderDB.

  • la sezione interfaccia a riga di comando (CLI) descrive i comandi disponibili per l’importazione massiva, l’automazione e lo scripting.

  • le FAQ forniscono alcune risposte alle domande più frequenti.

Cronologia delle versioni

Versione

Data

Causa e/o natura delle modifiche

0.1.0

31 dicembre 2024

Creazione versione beta.

0.2.0

6 gennaio 2025

Correzioni di vari bug.

Aggiunta di tabelle match/TP/GV.

Aggiunta di filtri di ricerca (mosse, decisione di cubo, data).

Aggiunta di metadati sulle posizioni.

Funzione di importazione/esportazione tra istanze di blunderDB.

Aggiunta di funzione di metadati sui database.

Introduzione dei numeri di versione (database e applicazione).

0.3.0

27 gennaio 2025

Correzioni di vari bug.

Salva automaticamente le dimensioni della finestra.

Importa gli eventuali commenti da XG.

0.4.0

3 febbraio 2025

Correzioni di vari bug.

Aggiunta di un’icona per blunderDB.

Correzioni dei filtri.

Aggiunta del supporto a macOS.

0.5.0

4 febbraio 2025

Aggiunta di nuovi filtri (specchio, non contatto, jan blot, outfield blot).

0.6.0

13 febbraio 2025

Aggiunta della libreria di filtri.

Visualizzazione della versione del database nei metadati.

0.7.0

16 febbraio 2025

Supporto del giapponese e del tedesco nelle esportazioni di XG.

0.8.0

3 maggio 2025

Possibilità di nascondere il conteggio dei pip.

Caricamento di una posizione casuale.

0.9.0

2 novembre 2025

Correzione di bug della libreria di filtri.

Importazione/esportazione di database.

Visualizzazione di frecce per le mosse selezionate.

Scorciatoie da tastiera per l’importazione/esportazione.

0.10.0

25 febbraio 2026

Importazione di match da eXtreme Gammon (XG/XGP), GNUbg (SGF), Jellyfish (MAT/TXT) e BGBlitz (BGF/TXT).

Navigazione nei match: scorrimento delle mosse di un match importato, con evidenziazione della mossa giocata.

Pannello dei match: elenco, ordinamento, modifica inline, scambio dei giocatori, assegnazione del torneo.

Importazione per cartella ricorsiva e importazione tramite trascinamento.

Calcolatore EPC (Effective Pip Count) con database di bearoff GNUbg integrato.

Collezioni: raggruppamento personalizzato di posizioni.

Tornei: raggruppamento di match per evento.

Salvataggio e ripristino dello stato della sessione (ultima ricerca, posizione corrente).

Migrazione automatica dello schema del database.

Visualizzazione multi-motore nell’analisi.

Filtro per errori/blunder del giocatore 1 nelle ricerche.

Esportazione del database con selezione granulare (match, collezioni, tornei, mosse giocate).

Pulsante di navigazione nei match.

Conteggio dei pip nella navigazione dei match.

Interfaccia a riga di comando (CLI) completa.

Riapertura automatica dell’ultimo database.

Miglioramento della barra degli strumenti e delle icone.

0.11.0

6 marzo 2026

Filtro di ricerca all’interno delle posizioni correnti.

Aggiunta di filtri per match e per torneo.

Cancellazione automatica del tavoliere all’apertura del pannello di ricerca.

0.12.0

19 marzo 2026

Importazione di file di posizione eXtreme Gammon (XGP) con analisi.

0.13.0

28 marzo 2026

Semplificazione dell’interfaccia: la navigazione nei match e nelle collezioni avviene direttamente tramite i pannelli.

Riga di comando integrata nella barra di stato.

Pannello Console rinominato in pannello Log.

Pannello Bearoff dedicato nel pannello inferiore.

Copia/incolla di posizione nel pannello di ricerca.

Trascinamento per riordinare le collezioni, le posizioni all’interno delle collezioni e i match all’interno dei tornei.

Colonna torneo nel pannello dei match con modifica inline.

Visualizzazione automatica del pannello di analisi dopo una ricerca.

0.14.0

30 marzo 2026

Pannello Anki dedicato per lo studio a ripetizione dilazionata (algoritmo FSRS).

Importazione dei commenti dai file XG.

0.15.0

31 marzo 2026

Esportazione della posizione come immagine PNG negli appunti (solo tavoliere tramite Ctrl+X, oppure tavoliere con analisi tramite Ctrl+X Ctrl+X).

0.16.0

18 aprile 2026

Schema del database v2.0.0: deduplicazione delle posizioni tramite hash Zobrist, colonne di filtraggio denormalizzate, prefiltro di motivi bitboard, journaling WAL. Importazione in batch >=3 volte più veloce, ricerca filtrata <=100 ms su oltre 10k posizioni. NOTA: i file DB creati con la v0.16.0 non possono essere aperti dalle versioni più vecchie; i vecchi DB vengono migrati automaticamente sul posto (eseguire prima un backup).

0.17.0

20 aprile 2026

Ottimizzazione dello storage: compressione zlib dei dati di analisi (~80% di riduzione), codifica compatta delle posizioni (~90% di riduzione della dimensione). Aggiunta di 5 indici mancanti per migliorare le prestazioni di ricerca. Correzione della ricerca per errore di cubo. Correzione della modalità EDIT dopo una ricerca senza risultati. Ripristino dello stato del pannello di ricerca al cambio di scheda. Rimozione di 62 istruzioni di debug dai percorsi critici.

0.18.0

20 aprile 2026

Refactoring importante del codice: suddivisione di db.go (10k righe) in 19 file specializzati, estrazione di 7 moduli di servizio da App.svelte (4888→469 righe), consolidamento degli store modali/pannelli. Migrazione completa a Svelte 5 runes. Sostituzione di 9 modali di tabella con un componente generico DataTableModal. Aggiunta di ESLint + Prettier + vitest (125 test frontend) con CI. Conformità WCAG 2.1 AA (focus visibile, ruoli ARIA, navigazione da tastiera). Passaggio del mutex Database a RWMutex per un migliore parallelismo in lettura. Documentazione CLI completa (CLI_USAGE.md + Sphinx FR/EN). Riscrittura del README. Correzione di tutti gli avvisi ESLint (46→0) e Vite (6→0).

0.19.0

7 maggio 2026

Aggiunta del pannello Stats: indicatori PR (Performance Rate), Snowie Error Rate e MWC cost (Match Winning Chance cost), barra di filtro (giocatore, torneo, date, tipo di decisione, lunghezza del match), scheda Dashboard con schede di livello / PR mobile / top blunder, scheda Progressione con curva per torneo e scatter plot per match, scheda Errori con ripartizione per azione di cubo e istogramma delle magnitudini. Drill-down interattivo verso le posizioni / match / tornei da tutti gli indicatori. Toggle PR / MWC istantaneo. Comando CLI list –type stats. Allineamento degli indicatori PR / Snowie ER / MWC con eXtremeGammon e gnuBG (soglia di equità 0.16 per i cubi marginali). Correzione del calcolo di cube_error per le decisioni Double/Pass. Documentazione del modello statistico (Appendice: modello statistico — allineamento XG / gnuBG / blunderDB). Vedi Pannello Stats.

0.20.0

31 maggio 2026

Aggiunta della struttura di esclusione Except al pannello di ricerca: esclude le posizioni che contengono uno dei pezzi disegnati, con marcatore « deve essere vuoto » (doppio clic) e numero di pezzi per punto non limitato (comando x). Aggiunta dell’opzione « solo primo dado » al filtro di lancio dei dadi (variante D1, opzione CLI –dice). Pannello Commenti: focus automatico del campo di immissione all’apertura e pulsanti modifica / elimina sempre visibili. Correzione del filtro « Search Text » che non trovava tutti i tag dei commenti.

0.21.0

1 giugno 2026

Internazionalizzazione dell’interfaccia: l’intero blunderDB (barra degli strumenti, pannelli, messaggi, aiuto) può ora essere visualizzato a scelta in inglese, francese, tedesco, italiano, spagnolo, finlandese, giapponese, greco o russo. Aggiunta di una finestra di configurazione, accessibile tramite un pulsante a forma di ingranaggio nella barra degli strumenti, che permette di selezionare la lingua. La scelta della lingua viene conservata da una sessione all’altra. Vedi Configurazione.

0.22.0

2 giugno 2026

Aggiunta di una modalità headless (server), avanzata e facoltativa, che completa l’applicazione desktop: un demone serve che espone il motore in HTTP + JSON, un backend PostgreSQL multiutente con compartimentazione per tenant (e Row-Level Security come opzione), un comando migrate per trasferire un database SQLite verso PostgreSQL e un dispatcher generico call che dà accesso a riga di comando a tutte le operazioni di archiviazione. Import di singole posizioni da nuovi formati (eXtreme Gammon .xgp, BGBlitz testo, libreria nativa .db) con arricchimento dei duplicati tra formati. Correzioni: i pannelli non causano più errori quando nessun database è aperto e il pannello Commenti non entra più in loop all’apertura. Vedi Modalità headless (server).

0.23.0

5 giugno 2026

Aggiunta di visite guidate dell’interfaccia (visita generale, ricerca, partite, tornei), ripetibili dalla barra degli strumenti o con il comando tour, e di un database di esempio caricabile con il comando demo per scoprire lo strumento senza importare le proprie partite. Personalizzazione dei colori del board (sfondo, bordo, punte, pedine, dadi, cubo) dalla finestra delle impostazioni. Autocompletamento della riga di comando (tasto TAB). Pannello di ricerca: controllo esplicito del tipo di decisione (Pedine / Cubo), con un sotto-tipo Raddoppio / No raddoppio o Accetta / Passa per le decisioni di cubo, sincronizzato con il board; il cubo proposto è mostrato al centro del board per le decisioni di prendi/passa. Ricerca di una posizione tramite il suo identificativo (filtro id). Correzione dell’attribuzione dell’errore di cubo al giocatore 1. Vedi Visite guidate e database di esempio.

0.24.0

6 giugno 2026

Aggiunta un’immagine container (Docker) per la modalità headless: un punto di ingresso dedicato serve e un Dockerfile.serve che produce un binario statico senza interfaccia grafica, per distribuire il motore di blunderDB come servizio dietro un reverse proxy. Vedi Modalità headless (server).

0.25.0

7 giugno 2026

Modalità server (headless): due nuovi metodi per ricostruire una posizione senza salvarla — positions.fromXGID decodifica una stringa XGID in una posizione e positions.fromXGP legge un file di posizione singola .xgp. Vedi Modalità headless (server).

0.26.0

9 giugno 2026

Impostazioni di visualizzazione dell’interfaccia nella finestra di configurazione: un cursore di scala per ingrandire o ridurre l’intera interfaccia, e una scelta della posizione dei pannelli (in basso, di lato o automatica) per sfruttare meglio gli schermi larghi. Aggiunta di una barra delle informazioni sopra il tavoliere che ricorda i giocatori e il contesto del match (evento, luogo, turno, data, lunghezza). All’apertura di un database, il pannello dei match viene mostrato subito e la revisione inizia sulla prima posizione. Le scorciatoie da tastiera sono ora indipendenti dal layout della tastiera (AZERTY, QWERTY, QWERTZ…). Correzione della decodifica XGID (indicatori Jacoby/Beaver e valore del videau). Aggiunta delle schede a viste multiple: più spazi di lavoro indipendenti (elenco di posizioni, posizione corrente, ricerca) con le scorciatoie CTRL-T (nuova vista), CTRL-W (chiudi), CTRL-PageUp/CTRL-PageDown (cambiare vista) e rinomina con doppio clic sulla scheda. Vedere Configurazione e Schede delle viste.

0.27.0

13 giugno 2026

Pannello Anki: una nuova modalità di allenamento libero (cram), accessibile dal pulsante Cram accanto a Study, che mostra posizioni casuali del mazzo senza modificare la pianificazione della ripetizione dilazionata — ideale per scaldarsi prima di un torneo o ripassare intensamente un mazzo senza alterarne l’ordine. Ricerca: un nuovo comando blunders (alias bl) che carica direttamente gli errori peggiori (equity/MWC) nella vista di analisi, con un numero opzionale per sceglierne la quantità (bl 50); un nuovo filtro per giocatore pl'nome' che trova tutte le posizioni di una partita a cui ha partecipato un dato giocatore, su entrambi i lati; e suggerimenti che, passando il mouse su ciascun filtro del pannello di ricerca, mostrano il token di comando corrispondente. Modalità server (headless): nuovi metodi matches.movesByMatch (tutte le mosse di una partita in una singola chiamata) e positions.epc (Effective Pip Count di entrambi i giocatori). Vedere Pannello Anki e Elenco dei comandi.

0.28.0

15 luglio 2026

Pannello di ricerca: filtro unificato « Match & Tornei » che sostituisce i campi di inserimento degli identificativi con una finestra di selezione (elenchi a caselle di spunta filtrabili per testo, pulsanti Tutti/Nessuno, selezionare un torneo seleziona i suoi match membri) — più rapido sui database di grandi dimensioni, poiché la scheda Partite e la vista Tornei ricalcolano ora gli indicatori PR/MWC solo per i match effettivamente visualizzati; cli list --type tournaments colma il corrispondente divario di parità. Nuovo filtro « Importata singolarmente » (casella di spunta del gruppo Altro, oppure il token i da riga di comando, s i; disponibile anche in CLI tramite --individual) per ritrovare una posizione salvata o importata da sola anziché sepolta in un import di match. Corretta una perdita di dati: l’eliminazione di un match non elimina più le posizioni importate singolarmente, aggiunte a una collezione o incluse in un mazzo Anki che il match conteneva anch’esso. Modalità server (headless): sei nuovi metodi per il pianificatore Anki a ripetizione dilazionata — registro delle revisioni (anki.reviewLog), previsione delle carte in scadenza (anki.forecast), sospensione / messa in pausa / rimozione di una carta (anki.suspendCard, anki.buryCard, anki.removeCard) e adeguamento automatico del tasso di ritenzione obiettivo di un mazzo verso il suo tasso di successo osservato (anki.optimizeParams); nuovo metodo tenant.purge per eliminare definitivamente i dati di un tenant su un deployment PostgreSQL multiutente; nuovi metodi matches.list (filtraggio/ordinamento/paginazione) e stats.matchBadges (indicatori PR/MWC limitati a un elenco di match). Distribuzione Linux nativa: pacchetti .deb/.rpm, che conservano il bit di esecuzione perso durante il download del binario grezzo. Importazione: dopo l’importazione di un match, la scheda Partite viene mostrata e le posizioni importate sono immediatamente visibili; dopo l’importazione di una posizione isolata (file XGP, posizione BGBlitz, file di testo di posizione, posizione incollata o un lotto di posizioni), la scheda Analisi si apre ora direttamente sulla posizione importata, anziché sulla scheda Partite; corretto l’incollaggio di un’analisi eXtreme Gammon in francese o tedesco da macOS, che risultava vuoto (accenti decomposti dagli appunti di sistema). Vedere Modalità headless (server), Elenco dei comandi e Download e installazione.

0.29.0

18 luglio 2026

Esportazione di un match nel formato Jellyfish/gnubg (.mat) dall’interfaccia (pannello Partite) come da riga di comando, con la corrispondente route del server — pratico per rigiocare un match in un altro software di backgammon. Ricerca: nuovo discriminatore « dadi esclusi » (token xD65, se ne possono usare più di uno) che scarta le posizioni il cui lancio corrisponde a un tiro dato. Apertura concorrente sicura: un database già aperto in scrittura in un’altra finestra di blunderDB si apre ora in sola lettura (navigazione, ricerca e analisi possibili, modifiche disattivate, dicitura « [sola lettura] » nella barra del titolo) invece di rischiare una corruzione. Provenienza delle posizioni: fuori dalla modalità match, la barra delle informazioni sopra il tavoliere indica il match — e il suo torneo — da cui proviene la posizione studiata, con un badge « +N » quando compare in più match. Maggiore robustezza rispetto all’ambiente: ripiego automatico quando un font, gli appunti o l’ultimo database aperto non sono disponibili. Un ricaricamento esplicito della libreria (CTRL-R, pulsante della barra degli strumenti o comando e) riapre il pannello di analisi della posizione visualizzata. Correzioni degne di nota: rimozione di un blocco durante l’esportazione di database di grandi dimensioni, pulsante « Nessuno » dell’esportazione che in realtà non esportava alcun match, filtro per commento multi-parola, deduplicazione dell’evento e del torneo nella barra delle informazioni, e vari aggiustamenti di visualizzazione. Vedere Elenco dei comandi, Pannello Match e Manuale.

0.30.0

26/07/2026

Ricerca per commento: il filtro «Testo da cercare» diventa il filtro «Commento» e propone tre modalità esclusive — contiene il testo (comportamento precedente, token t""parola1;parola2""), ha un commento (token co) e senza commento (token xco) — per ritrovare con un gesto le posizioni annotate, o al contrario quelle che restano da commentare. Posizioni contrassegnate in eXtreme Gammon: i contrassegni posti durante l’analisi di una partita XG vengono ora letti all’importazione e ritrovati con il filtro «Contrassegnata» (token fl), combinabile con tutti gli altri criteri; una decisione di cubo contrassegnata dà due posizioni contrassegnate, il raddoppio e l’accetta/passa. La marcatura non è retroattiva: è sufficiente reimportare il file .xg interessato perché i suoi contrassegni raggiungano il database, senza toccare i commenti né le analisi esistenti. Correzioni degne di nota: il PR mostrato sul distintivo di un torneo si riferisce al giocatore di riferimento e non più all’insieme dei due giocatori, i mazzi Anki basati su una ricerca rispettano nuovamente i filtri di tale ricerca invece di prendere l’intero database, ed è corretto un blocco della ricerca combinando certi filtri (testo, data, errore della mossa giocata). Vedere Elenco dei comandi e Manuale.

0.31.0

04/08/2026

Distribuzione di un database a terzi: due meccanismi indipendenti, entrambi facoltativi e scelti al momento dell’esportazione. Il contrassegno di origine iscrive nel file che cos’è e da dove proviene, firmato da un’identità di emittente creata da sé al primo utilizzo; il contrassegno non è falsificabile, si legge in cima al pannello Metadati (oppure con blunderdb info, che non scrive mai nel file) e non registra nulla dal lato di chi riceve il database: nessun registro, nessun tracciamento. La protezione con password produce un file .dbx cifrato (AES-256-GCM, chiave derivata con Argon2id), verificato a ogni apertura e la cui intestazione resta leggibile in chiaro; l’identità si esporta e si importa in un unico file dalle impostazioni. Finestra di esportazione ridisegnata: una sola schermata invece di quattro, promemoria di ciò che viene realmente esportato (le posizioni visualizzate), parte coperta di ogni raccolta segnalata in rosso quando è parziale, tornei esportabili solo insieme ai loro match — e un’esportazione tre volte più rapida. Finestra delle impostazioni riorganizzata in tre schede (Interfaccia, Colori della board, Identità dell’emittente), di dimensione e posizione stabili. Pannello Metadati disposto in un’unica griglia. Il pannello Log, che si limitava a ripetere i comandi digitati, è stato rimosso. Correzioni di rilievo: una password errata non apre più un database protetto, i campi delle finestre modali non perdono più il focus al clic, il calcolo degli indicatori PR/MWC non va più in errore su una partita a soldi e i file temporanei (-wal, -shm, lock) vengono ripuliti alla chiusura. Vedere Distribuire un database: origine e password e Manuale.

0.32.0

9 agosto 2026

Il pannello EPC diventa il pannello Bearoff e acquisisce l’analisi completa della corsa. Su una posizione di bearoff puro mostra — oltre all’EPC, al pip count, al wastage e al numero medio di lanci di ciascun giocatore, ora presentati in tabella con una riga Δ con segno — le probabilità di vittoria dei due giocatori e le equità money (cubeless, senza raddoppio, raddoppio/prende, raddoppio/passa, con lo scarto di ogni decisione rispetto alla migliore) nonché la migliore decisione di cubo. Due regimi chiaramente distinti: esatto (lettura in un database two-sided; database TS-06-06 di GNUbg integrato, che copre fino a 6 pedine per giocatore) e stimato (convoluzione calibrata, margine d’errore mostrato — il verdetto di cubo non è mai stimato). Il database esteso TS-06-11 (verdetto esatto fino a 11 pedine per giocatore, 1,2 GB) si scarica dalla nuova scheda Bearoff della configurazione, con verifica di integrità e ripresa dei download interrotti; è anche possibile indicare un qualsiasi file .bd two-sided di gnubg. Modalità sfida per l’allenamento: i risultati si nascondono a ogni modifica e si rivelano zona per zona, con un clic. Modifica interamente sul tavoliere: pedine delle due tavole interne, giocatore al tiro (clic sul rettangolo uscita/punteggio) e posizione del cubo (clic sul cubo). Il clic sul tavoliere è ora esatto a qualsiasi scala dell’interfaccia (un clic sulla punta 1 poteva finire sulla punta 2). Nuovo comando blunderdb epc da riga di comando e opzione --bearoff-ts della modalità server. Una nuova sezione del manuale, « Metodologia e ipotesi del pannello Bearoff », enuncia esaustivamente le ipotesi dietro ogni valore mostrato. Vedere Pannello Bearoff e Metodologia e ipotesi del pannello Bearoff.

Indice

Contatti

Autore: Kévin Unger <blunderdb@proton.me>. Puoi anche trovarmi su Heroes con il nickname postmanpat.

Ho sviluppato blunderDB inizialmente per uso personale, per poter individuare schemi ricorrenti nei miei errori. Ma è molto gratificante ricevere riscontri, soprattutto dopo aver dedicato un mucchio di ore a progettazione, programmazione, debug… Quindi non esitare a scrivermi per condividere la tua esperienza. Tutti i riscontri (costruttivi) sono benvenuti.

Ecco diversi modi per discutere:

Fare una donazione

Se apprezzi blunderDB e vuoi sostenere gli sviluppi passati e futuri, puoi

  • offrirmi da bere se abbiamo il piacere di incontrarci!

  • fare una piccola donazione tramite PayPal all’indirizzo blunderdb@proton.me

Ringraziamenti

Dedico questo piccolo software alla mia compagna Anne-Claire e alla nostra cara figlia Perrine. Desidero ringraziare in modo particolare alcuni amici:

  • Tristan Remille, per avermi avviato al backgammon con gioia e benevolenza; per indicare la Via nella comprensione di questo meraviglioso gioco; per continuare a incoraggiarmi nonostante i miei modesti tentativi di giocare meglio.

  • Nicolas Harmand, allegro compagno ormai da più di una decina d’anni in belle avventure, e un fantastico compagno di gioco da quando ha preso il virus del backgammon.