blunderDB

blunderDB es un software para crear bases de datos de posiciones de backgammon. Su principal fortaleza es ofrecer un lugar único donde un jugador puede agregar las posiciones que ha encontrado (en línea, en torneos) y poder reestudiar esas posiciones filtrándolas con distintos filtros combinables de forma arbitraria. blunderDB también puede usarse para crear catálogos de posiciones de referencia.

La presente documentación está estructurada de la siguiente manera:

  • la sección descarga e instalación explica cómo obtener y ejecutar blunderDB.

  • el manual describe el funcionamiento general de blunderDB.

  • la guía del usuario es una introducción práctica para empezar a usar rápidamente blunderDB.

  • la lista de comandos así como la lista de atajos de teclado permiten un uso eficiente de blunderDB.

  • la sección interfaz de línea de comandos (CLI) describe los comandos disponibles para la importación masiva, la automatización y el scripting.

  • las preguntas frecuentes (FAQ) ofrecen respuestas a las preguntas más habituales.

Historial de versiones

Versión

Fecha

Motivo y/o naturaleza de los cambios

0.1.0

31 de diciembre de 2024

Versión beta.

0.2.0

6 de enero de 2025

Correcciones de varios errores.

Añadidas tablas de match/TP/GV.

Añadidos filtros de búsqueda (jugadas, decisiones de cubo, fecha).

Añadidos metadatos en las posiciones.

Función de importación/exportación entre instancias de blunderDB.

Añadida función de metadatos en las bases de datos.

Introducción de números de versión (base de datos y aplicación).

0.3.0

27 de enero de 2025

Correcciones de varios errores.

Guarda automáticamente el tamaño de la ventana.

Importa los posibles comentarios desde XG.

0.4.0

3 de febrero de 2025

Correcciones de varios errores.

Añadido un icono para blunderDB.

Correcciones de filtros.

Añadido soporte para macOS.

0.5.0

4 de febrero de 2025

Añadidos nuevos filtros (espejo, sin contacto, jan blot, outfield blot).

0.6.0

13 de febrero de 2025

Añadida la biblioteca de filtros.

Muestra la versión de la base de datos en los metadatos.

0.7.0

16 de febrero de 2025

Compatibilidad con japonés y alemán en las exportaciones de XG.

0.8.0

3 de mayo de 2025

Posibilidad de ocultar el conteo de pips.

Carga de una posición aleatoria.

0.9.0

2 de noviembre de 2025

Corrección de un error en la biblioteca de filtros.

Importación/exportación de base de datos.

Muestra de flechas para las jugadas seleccionadas.

Atajos de teclado para la importación/exportación.

0.10.0

25 de febrero de 2026

Importación de matches desde eXtreme Gammon (XG/XGP), GNUbg (SGF), Jellyfish (MAT/TXT) y BGBlitz (BGF/TXT).

Navegación por los matches: recorrido de las jugadas de un match importado, con resaltado de la jugada realizada.

Panel de matches: lista, ordenación, edición en línea, intercambio de jugadores, asignación de torneo.

Importación por carpeta recursiva e importación por arrastrar y soltar.

Calculadora EPC (Effective Pip Count) con base de datos de bearoff GNUbg integrada.

Colecciones: agrupación personalizada de posiciones.

Torneos: agrupación de matches por evento.

Guardado y restauración del estado de la sesión (última búsqueda, posición actual).

Migración automática del esquema de la base de datos.

Visualización multimotor en el análisis.

Filtro de errores/blunders del jugador 1 en las búsquedas.

Exportación de la base de datos con selección granular (matches, colecciones, torneos, jugadas realizadas).

Botón de navegación por los matches.

Conteo de pips (pipcount) en la navegación por los matches.

Interfaz de línea de comandos (CLI) completa.

Reapertura automática de la última base de datos.

Mejora de la barra de herramientas y de los iconos.

0.11.0

6 de marzo de 2026

Filtro de búsqueda dentro de las posiciones actuales.

Añadidos filtros por match y por torneo.

Borrado automático del tablero al abrir el panel de búsqueda.

0.12.0

19 de marzo de 2026

Importación de archivos de posición de eXtreme Gammon (XGP) con análisis.

0.13.0

28 de marzo de 2026

Simplificación de la interfaz: la navegación por los matches y las colecciones se realiza directamente a través de los paneles.

Línea de comandos integrada en la barra de estado.

Panel Consola renombrado a panel Log.

Panel Bearoff dedicado en el panel inferior.

Copiar/pegar posición en el panel de búsqueda.

Arrastrar y soltar para reordenar las colecciones, las posiciones dentro de las colecciones y los matches dentro de los torneos.

Columna de torneo en el panel de matches con edición en línea.

Visualización automática del panel de análisis tras una búsqueda.

0.14.0

30 de marzo de 2026

Panel Anki dedicado para el estudio por repetición espaciada (algoritmo FSRS).

Importación de comentarios desde los archivos XG.

0.15.0

31 de marzo de 2026

Exportación de la posición como imagen PNG al portapapeles (solo el tablero con Ctrl+X, o el tablero con análisis con Ctrl+X Ctrl+X).

0.16.0

18 de abril de 2026

Esquema de base de datos v2.0.0: deduplicación de posiciones mediante hash Zobrist, columnas de filtrado desnormalizadas, prefiltro de patrones bitboard, registro WAL. Importación por lotes >=3x más rápida, búsqueda filtrada <=100 ms en más de 10k posiciones. NOTA: los archivos DB creados con la v0.16.0 no pueden abrirse con versiones anteriores; las DB antiguas se migran automáticamente in situ (haga primero una copia de seguridad).

0.17.0

20 de abril de 2026

Optimización del almacenamiento: compresión zlib de los datos de análisis (~80% de reducción), codificación compacta de las posiciones (~90% de reducción del tamaño). Añadidos 5 índices que faltaban para mejorar el rendimiento de búsqueda. Corregida la búsqueda por error de cubo. Corregido el modo EDIT tras una búsqueda sin resultados. Restauración del estado del panel de búsqueda al cambiar de pestaña. Eliminadas 62 instrucciones de depuración de las rutas críticas.

0.18.0

20 de abril de 2026

Refactorización importante del código: división de db.go (10k líneas) en 19 archivos especializados, extracción de 7 módulos de servicio de App.svelte (4888→469 líneas), consolidación de los stores de modales/paneles. Migración completa a Svelte 5 runes. Sustitución de 9 modales de tabla por un componente genérico DataTableModal. Añadidos ESLint + Prettier + vitest (125 tests de frontend) con CI. Conformidad WCAG 2.1 AA (foco visible, roles ARIA, navegación por teclado). Cambio del mutex de Database a RWMutex para un mejor paralelismo en lectura. Documentación CLI completa (CLI_USAGE.md + Sphinx FR/EN). Reescritura del README. Corregidas todas las advertencias de ESLint (46→0) y de Vite (6→0).

0.19.0

7 de mayo de 2026

Añadido el panel Stats: indicadores PR (Performance Rate), Snowie Error Rate y MWC cost (Match Winning Chance cost), barra de filtro (jugador, torneo, fechas, tipo de decisión, longitud del match), pestaña Dashboard con tarjetas de nivel / PR móvil / top blunders, pestaña Progresión con curva por torneo y diagrama de dispersión por match, pestaña Errores con desglose por acción de cubo e histograma de magnitudes. Drill-down interactivo hacia las posiciones / matches / torneos desde todos los indicadores. Alternancia PR / MWC instantánea. Comando CLI list –type stats. Alineación de los indicadores PR / Snowie ER / MWC con eXtremeGammon y gnuBG (umbral de equidad de 0.16 para los cubos ajustados). Corregido el cálculo de cube_error para las decisiones Double/Pass. Documentación del modelo de estadísticas (Anexo: Modelo de estadísticas — alineación XG / gnuBG / blunderDB). Véase Panel Stats.

0.20.0

31 de mayo de 2026

Añadida la estructura de exclusión Except al panel de búsqueda: excluye las posiciones que contienen alguna de las fichas dibujadas, con marcador « debe estar vacío » (doble clic) y sin límite en el número de fichas por punto (comando x). Añadida la opción « solo el primer dado » al filtro de tirada de dados (variante D1, opción CLI –dice). Panel Comentarios: el campo de entrada recibe el foco automáticamente al abrirlo y los botones editar / eliminar siempre están visibles. Corregido el filtro « Search Text » que no encontraba todas las etiquetas de comentarios.

0.21.0

1 de junio de 2026

Internacionalización de la interfaz: la totalidad de blunderDB (barra de herramientas, paneles, mensajes, ayuda) puede mostrarse ahora, a elección, en inglés, francés, alemán, italiano, español, finés, japonés, griego o ruso. Añadida una ventana de configuración, accesible mediante un botón en forma de rueda dentada en la barra de herramientas, que permite seleccionar el idioma. La elección del idioma se conserva de una sesión a otra. Véase Configuración.

0.22.0

2 de junio de 2026

Añadido un modo headless (servidor), avanzado y opcional, que complementa la aplicación de escritorio: un demonio serve que expone el motor mediante HTTP + JSON, un backend PostgreSQL multiusuario con compartimentación por tenant (y Row-Level Security opcional), un comando migrate para transferir una base SQLite a PostgreSQL, y un despachador genérico call que da acceso desde la línea de comandos a todas las operaciones de almacenamiento. Importación de posiciones individuales desde nuevos formatos (eXtreme Gammon .xgp, BGBlitz en texto, biblioteca nativa .db) con enriquecimiento de los duplicados entre formatos. Correcciones: los paneles ya no provocan errores cuando no hay ninguna base abierta y el panel Comentarios ya no entra en bucle al abrirlo. Véase Modo headless (servidor).

0.23.0

5 de junio de 2026

Adición de visitas guiadas de la interfaz (visita general, búsqueda, partidas, torneos), repetibles desde la barra de herramientas o con el comando tour, y de una base de ejemplo cargable con el comando demo para descubrir la herramienta sin importar las partidas propias. Personalización de los colores del tablero (fondo, borde, puntas, fichas, dados, cubo) desde la ventana de configuración. Autocompletado de la línea de comandos (tecla TAB). Panel de búsqueda: control explícito del tipo de decisión (Fichas / Cubo), con un subtipo Doblar / No doblar o Aceptar / Pasar para las decisiones de cubo, sincronizado con el tablero; el cubo propuesto se muestra en el centro del tablero para las decisiones de aceptar/pasar. Búsqueda de una posición por su identificador (filtro id). Corrección de la atribución del error de cubo al jugador 1. Ver Visitas guiadas y base de ejemplo.

0.24.0

6 de junio de 2026

Añadida una imagen de contenedor (Docker) para el modo headless: un punto de entrada dedicado serve y un Dockerfile.serve que produce un binario estático sin interfaz gráfica, para desplegar el motor de blunderDB como servicio detrás de un proxy inverso. Véase Modo headless (servidor).

0.25.0

7 de junio de 2026

Modo servidor (headless): dos nuevos métodos para reconstruir una posición sin guardarla — positions.fromXGID decodifica una cadena XGID en una posición, y positions.fromXGP lee un archivo de posición única .xgp. Véase Modo headless (servidor).

0.26.0

9 de junio de 2026

Ajustes de visualización de la interfaz en la ventana de configuración: un control deslizante de escala para agrandar o reducir toda la interfaz, y una opción de posición de los paneles (abajo, al lado o automática) para aprovechar mejor las pantallas anchas. Añadida una barra de información sobre el tablero que indica los jugadores y el contexto de la partida (evento, lugar, ronda, fecha, longitud). Al abrir una base, el panel de partidas se muestra de inmediato y la revisión comienza en la primera posición. Los atajos de teclado ahora son independientes de la disposición del teclado (AZERTY, QWERTY, QWERTZ…). Corrección de la decodificación XGID (indicadores Jacoby/Beaver y valor del cubo). Añadidas las pestañas de vistas múltiples: varios espacios de trabajo independientes (lista de posiciones, posición actual, búsqueda) con los atajos CTRL-T (nueva vista), CTRL-W (cerrar), CTRL-PageUp/CTRL-PageDown (cambiar de vista) y renombrado con doble clic en la pestaña. Ver Configuración y Pestañas de vistas.

0.27.0

13 de junio de 2026

Panel Anki: un nuevo modo de práctica libre (cram), accesible desde el botón Cram junto a Study, que muestra posiciones aleatorias del mazo sin modificar el calendario de repetición espaciada — ideal para calentar antes de un torneo o repasar intensamente un mazo sin alterar su orden. Búsqueda: un nuevo comando blunders (alias bl) que carga directamente los peores errores (equity/MWC) en la vista de análisis, con un número opcional para elegir cuántos (bl 50); un nuevo filtro por jugador pl'nombre' que encuentra todas las posiciones de una partida en la que participó un jugador dado, en cualquier lado; e información sobre herramientas que, al pasar el ratón por cada filtro del panel de búsqueda, muestra el token de comando correspondiente. Modo servidor (headless): nuevos métodos matches.movesByMatch (todas las jugadas de una partida en una sola llamada) y positions.epc (Effective Pip Count de ambos jugadores). Véase Panel Anki y Lista de comandos.

0.28.0

15 de julio de 2026

Panel de búsqueda: filtro unificado « Partidas y Torneos » que sustituye los campos de introducción de identificadores por una ventana de selección (listas de casillas filtrables por texto, botones Todo/Ninguno, marcar un torneo marca sus partidas miembro) — más rápido en bases de datos grandes, ya que la pestaña de Partidas y el panel de Torneos ahora solo recalculan los indicadores PR/MWC para las partidas mostradas; cli list --type tournaments cierra la brecha de paridad correspondiente. Nuevo filtro « Importada por separado » (casilla del grupo Otro, o el token i en la línea de comandos, s i; disponible también en la CLI mediante --individual) para encontrar una posición guardada o importada por separado en lugar de perdida dentro de la importación de una partida. Corrección de una pérdida de datos: eliminar una partida ya no elimina las posiciones importadas individualmente, añadidas a una colección o incluidas en un mazo de Anki que esa partida también contenía. Modo servidor (headless): seis nuevos métodos para el planificador de repetición espaciada de Anki — registro de revisiones (anki.reviewLog), previsión de tarjetas por vencer (anki.forecast), suspender / enterrar / eliminar una tarjeta (anki.suspendCard, anki.buryCard, anki.removeCard) y ajuste automático de la tasa de retención objetivo de un mazo hacia su tasa de acierto observada (anki.optimizeParams); nuevo método tenant.purge para eliminar definitivamente los datos de un tenant en un despliegue PostgreSQL multiusuario; nuevos métodos matches.list (filtrado/ordenación/paginación) y stats.matchBadges (indicadores PR/MWC limitados a una lista de partidas). Distribución nativa para Linux: paquetes .deb/.rpm, que conservan el bit de ejecución perdido al descargar el binario sin procesar. Importación: tras importar una partida, la pestaña de Partidas se muestra y las posiciones importadas quedan inmediatamente visibles; tras importar una posición aislada (archivo XGP, posición BGBlitz, archivo de texto de posición, posición pegada o un lote de posiciones), la pestaña de Análisis se abre ahora directamente en la posición importada, en lugar de la pestaña de Partidas; corrección del pegado de un análisis de eXtreme Gammon en francés o en alemán desde macOS, que aparecía vacío (acentos descompuestos por el portapapeles del sistema). Véase Modo headless (servidor), Lista de comandos y Descarga e instalación.

0.29.0

18 de julio de 2026

Exportación de una partida en formato Jellyfish/gnubg (.mat) desde la interfaz (panel Partidas) y desde la línea de comandos, con la ruta de servidor correspondiente — práctico para volver a jugar una partida en otro programa de backgammon. Búsqueda: nuevo discriminador « dados excluidos » (token xD65, se permiten varios) que descarta las posiciones cuya tirada coincide con un lanzamiento dado. Apertura concurrente segura: una base ya abierta en escritura en otra ventana de blunderDB ahora se abre en modo de solo lectura (navegación, búsqueda y análisis posibles, modificaciones desactivadas, mención « [solo lectura] » en la barra de título) en lugar de arriesgar una corrupción. Procedencia de las posiciones: fuera del modo partida, la barra de información sobre el tablero indica la partida —y su torneo— de la que procede la posición estudiada, con una insignia « +N » cuando aparece en varias partidas. Mayor robustez frente al entorno: repliegue automático cuando una fuente, el portapapeles o la última base abierta no están disponibles. Una recarga explícita de la biblioteca (CTRL-R, botón de la barra de herramientas o comando e) vuelve a abrir el panel de análisis de la posición mostrada. Correcciones destacadas: eliminación de un bloqueo al exportar bases grandes, botón « Ninguno » de la exportación que en realidad no dejaba de exportar ninguna partida, filtro por comentario de varias palabras, deduplicación del evento y del torneo en la barra de información, y varios ajustes de visualización. Ver Lista de comandos, Panel de Partidas y Manual.

0.30.0

26/07/2026

Búsqueda por comentario: el filtro «Texto de búsqueda» pasa a ser el filtro «Comentario» y ofrece tres modos exclusivos — contiene el texto (comportamiento anterior, token t""palabra1;palabra2""), tiene un comentario (token co) y sin comentario (token xco) — para encontrar de un vistazo las posiciones anotadas, o por el contrario las que quedan por comentar. Posiciones marcadas en eXtreme Gammon: las marcas puestas al analizar una partida XG se leen ahora en la importación y se recuperan con el filtro «Marcada» (token fl), combinable con todos los demás criterios; una decisión de cubo marcada da dos posiciones marcadas, el doblez y la aceptación/paso. El marcado no es retroactivo: basta con volver a importar el archivo .xg correspondiente para que sus marcas se incorporen a la base, sin tocar los comentarios ni los análisis existentes. Correcciones destacables: el PR mostrado en la insignia de un torneo se refiere al jugador de referencia y ya no al conjunto de los dos jugadores, los mazos Anki basados en una búsqueda respetan de nuevo los filtros de esa búsqueda en lugar de tomar toda la base, y se ha corregido un bloqueo de la búsqueda al combinar ciertos filtros (texto, fecha, error de la jugada realizada). Véase Lista de comandos y Manual.

0.31.0

04/08/2026

Distribución de una base a terceros: dos mecanismos independientes, ambos opcionales y elegidos en el momento de la exportación. La marca de origen inscribe en el archivo qué es y de dónde viene, firmada por una identidad de emisor creada por sí sola en el primer uso; la marca es infalsificable, se lee en la parte superior del panel Metadatos (o mediante blunderdb info, que nunca escribe en el archivo) y no registra nada del lado de quien recibe la base: ningún registro, ningún seguimiento. La protección por contraseña produce un archivo .dbx cifrado (AES-256-GCM, clave derivada con Argon2id), comprobado en cada apertura y cuya cabecera sigue siendo legible en claro; la identidad se exporta e importa en un único archivo desde los ajustes. Ventana de exportación rediseñada: una sola pantalla en lugar de cuatro, recordatorio de lo que realmente se exporta (las posiciones mostradas), parte cubierta de cada colección señalada en rojo cuando es parcial, torneos exportables solo junto con sus partidos, y una exportación tres veces más rápida. Ventana de ajustes reorganizada en tres pestañas (Interfaz, Colores del tablero, Identidad del emisor), de tamaño y posición estables. Panel Metadatos dispuesto en una sola cuadrícula. Se retira el panel Log, que solo repetía los comandos introducidos. Correcciones destacadas: una contraseña errónea ya no abre una base protegida, los campos de las ventanas modales ya no pierden el foco al hacer clic, el cálculo de los indicadores PR/MWC ya no falla en una partida por dinero, y los archivos temporales (-wal, -shm, bloqueo) se limpian al cerrar. Véase Distribuir una base de datos: origen y contraseña y Manual.

0.32.0

9 de agosto de 2026

El panel EPC se convierte en el panel Bearoff y gana el análisis de carrera completo. En una posición de bearoff puro muestra — además del EPC, del pip count, del wastage y del número medio de tiradas de cada jugador, presentados ahora en una tabla con una línea Δ con signo — las probabilidades de victoria de ambos jugadores y las equidades money (cubeless, sin doblar, doblar/tomar, doblar/pasar, con la diferencia de cada decisión respecto a la mejor), así como la mejor decisión de cubo. Dos regímenes claramente diferenciados: exacto (lectura en una base two-sided; base TS-06-06 de GNUbg integrada, que cubre hasta 6 fichas por jugador) y estimado (convolución calibrada, con el margen de error mostrado — el veredicto de cubo nunca se estima). La base ampliada TS-06-11 (veredicto exacto hasta 11 fichas por jugador, 1,2 GB) se descarga desde la nueva pestaña Bearoff de la configuración, con verificación de integridad y reanudación de las descargas interrumpidas; también puede designarse cualquier archivo .bd two-sided de gnubg. Modo desafío para el entrenamiento: los resultados se ocultan con cada modificación y se revelan zona por zona, con un clic. Edición íntegramente en el tablero: fichas de ambos cuadrantes, jugador al tiro (clic en el rectángulo de salida/marcador) y posición del cubo (clic en el cubo). El clic en el tablero es ahora exacto a cualquier escala de interfaz (un clic en el punto 1 podía acabar en el punto 2). Nuevo comando blunderdb epc en línea de comandos y opción --bearoff-ts del modo servidor. Una nueva sección del manual, « Metodología e hipótesis del panel Bearoff », enuncia exhaustivamente las hipótesis detrás de cada valor mostrado. Véase Panel Bearoff y Metodología e hipótesis del panel Bearoff.

Índice

Contacto

Autor: Kévin Unger <blunderdb@proton.me>. También puede encontrarme en Heroes con el seudónimo postmanpat.

Desarrollé blunderDB inicialmente para mi uso personal, con el fin de poder detectar patrones en mis errores. Pero resulta muy gratificante recibir comentarios, sobre todo cuando uno ha dedicado un montón de horas al diseño, la programación y la depuración… Así que no dude en escribirme para compartir su experiencia. Todos los comentarios (constructivos) son bienvenidos.

Aquí tiene varias maneras de ponerse en contacto:

Hacer una donación

Si le gusta blunderDB y desea apoyar los desarrollos pasados y futuros, puede

  • ¡invitarme a una copa si tenemos el placer de encontrarnos!

  • hacer una pequeña donación por PayPal a la dirección blunderdb@proton.me

Agradecimientos

Dedico este pequeño software a mi compañera Anne-Claire y a nuestra querida hija Perrine. Quiero dar las gracias muy especialmente a algunos amigos:

  • Tristan Remille, por haberme iniciado en el backgammon con alegría y benevolencia; por mostrar el Camino en la comprensión de este maravilloso juego; por seguir animándome a pesar de mis pobres intentos de jugar mejor.

  • Nicolas Harmand, alegre compañero desde hace ya más de una década en grandes aventuras, y un fantástico compañero de juego desde que pilló el virus del backgammon.