blunderDB

blunderDB — программа для создания баз данных позиций нард. Её главное достоинство — единое место для накопления позиций, встреченных игроком (в интернете, на турнирах), с возможностью повторного изучения этих позиций при помощи произвольно комбинируемых фильтров. blunderDB также можно использовать для создания каталогов эталонных позиций.

Данная документация структурирована следующим образом:

  • раздел загрузка и установка объясняет, как получить и запустить blunderDB.

  • руководство описывает общее функционирование blunderDB и принципы его использования.

  • руководство пользователя — практическое введение для быстрого освоения blunderDB.

  • список команд и список горячих клавиш обеспечивают эффективное использование blunderDB.

  • раздел интерфейс командной строки (CLI) описывает доступные команды для массового импорта, автоматизации и написания скриптов.

  • FAQ содержит ответы на наиболее часто задаваемые вопросы.

История версий

Версия

Дата

Причина и/или характер изменений

0.1.0

31/12/2024

Создание бета-версии.

0.2.0

06/01/2025

Исправление различных ошибок.

Добавление таблиц матчей/TP/GV.

Добавление фильтров поиска (ходы, решение видо, дата).

Добавление метаданных для позиций.

Функция импорта/экспорта между экземплярами blunderDB.

Добавление функции метаданных для баз данных.

Введение номеров версий (база данных и приложение).

0.3.0

27/01/2025

Исправление различных ошибок.

Автоматическое сохранение размера окна.

Импорт комментариев из XG.

0.4.0

03/02/2025

Исправление различных ошибок.

Добавление иконки для blunderDB.

Исправление фильтров.

Добавление поддержки macOS.

0.5.0

04/02/2025

Добавление новых фильтров (зеркало, нет контакта, блот в яне, блот в аутфилде).

0.6.0

13/02/2025

Добавление библиотеки фильтров.

Отображение версии базы данных в метаданных.

0.7.0

16/02/2025

Поддержка японского и немецкого языков в экспорте XG.

0.8.0

03/05/2025

Новая кнопка для скрытия подсчёта шашек.

Кнопка загрузки случайной позиции.

0.9.0

02/11/2025

Исправление ошибки в библиотеке фильтров.

Импорт/экспорт базы данных.

Отображение стрелок для выбранных ходов.

Горячие клавиши для импорта/экспорта.

0.10.0

25/02/2026

Импорт матчей из eXtreme Gammon (XG/XGP), GNUbg (SGF), Jellyfish (MAT/TXT) и BGBlitz (BGF/TXT).

Навигация по матчам: просмотр ходов импортированного матча с подсветкой сыгранного хода.

Панель матчей: список, сортировка, встроенное редактирование, смена игроков, назначение турнира.

Рекурсивный импорт из папки и импорт перетаскиванием.

Калькулятор EPC (эффективный подсчёт шашек) со встроенной базой данных bearoff GNUbg.

Коллекции: пользовательская группировка позиций.

Турниры: группировка матчей по событию.

Сохранение и восстановление состояния сессии (последний поиск, текущая позиция).

Автоматическая миграция схемы базы данных.

Отображение нескольких движков в анализе.

Фильтр ошибок/бландеров игрока 1 при поиске.

Экспорт базы данных с детальным выбором (матчи, коллекции, турниры, сыгранные ходы).

Кнопка навигации по матчам.

Отображение подсчёта шашек (pipcount) в навигации по матчам.

Полный интерфейс командной строки (CLI).

Автоматическое открытие последней базы данных.

Улучшение панели инструментов и иконок.

0.11.0

06/03/2026

Фильтр для поиска среди текущих позиций.

Добавление фильтров по матчу и по турниру.

Автоматическая очистка доски при открытии панели поиска.

0.12.0

19/03/2026

Импорт файлов позиций eXtreme Gammon (XGP) с анализом.

0.13.0

28/03/2026

Упрощение интерфейса: навигация по матчам и коллекциям теперь выполняется непосредственно через панели.

Командная строка, интегрированная в строку состояния.

Панель Консоль переименована в панель Log.

Выделенная панель Bearoff в нижней панели.

Копирование/вставка позиции в панели поиска.

Перетаскивание для изменения порядка коллекций, позиций в коллекциях и матчей в турнирах.

Столбец турнира в панели матчей со встроенным редактированием.

Автоматическое отображение панели анализа после поиска.

0.14.0

30/03/2026

Выделенная панель Anki для изучения методом интервального повторения (алгоритм FSRS).

Импорт комментариев из файлов XG.

0.15.0

31/03/2026

Экспорт позиции в PNG-изображение в буфер обмена (только доска через Ctrl+X, или доска с анализом через Ctrl+X Ctrl+X).

0.16.0

18/04/2026

Схема базы данных v2.0.0: дедупликация позиций через хеш Zobrist, денормализованные столбцы фильтрации, предфильтр шаблонов на битбордах, журналирование WAL. Пакетный импорт >=3x быстрее, фильтрованный поиск <=100 мс на 10k+ позициях. ПРИМЕЧАНИЕ: файлы DB, созданные с v0.16.0, не могут быть открыты более старыми версиями; старые DB автоматически мигрируются на месте (сначала сделайте резервную копию).

0.17.0

20/04/2026

Оптимизация хранения: zlib-сжатие данных анализа (~80% сокращение), компактное кодирование позиций (~90% сокращение размера). Добавлено 5 недостающих индексов для ускорения поиска. Исправлен поиск по ошибке куба. Исправлен режим EDIT после поиска без результатов. Восстановление состояния панели поиска при переключении вкладок. Удалено 62 отладочных вывода из критических путей.

0.18.0

20/04/2026

Масштабный рефакторинг кода: разбивка db.go (10k строк) на 19 специализированных файлов, извлечение 7 модулей сервисов из App.svelte (4888→469 строк), консолидация хранилищ модальных окон/панелей. Полная миграция на Svelte 5 runes. Замена 9 табличных модальных окон универсальным компонентом DataTableModal. Добавление ESLint + Prettier + vitest (125 фронтенд-тестов) с CI. Соответствие WCAG 2.1 AA (видимый фокус, ARIA-роли, клавиатурная навигация). Переход мьютекса Database на RWMutex для лучшего параллелизма при чтении. Полная документация CLI (CLI_USAGE.md + Sphinx FR/EN). Переписан README. Устранены все предупреждения ESLint (46→0) и Vite (6→0).

0.19.0

07/05/2026

Добавление панели Статистика: показатели PR (Performance Rate), Snowie Error Rate и MWC cost (стоимость шанса выиграть матч), панель фильтров (игрок, турнир, даты, тип решения, длина матча), вкладка Dashboard с карточками уровня / скользящий PR / топ бландеров, вкладка Прогресс с кривой по турнирам и диаграммой рассеяния по матчам, вкладка Ошибки с распределением по действиям видо и гистограммой величин. Интерактивный drill-down к позициям / матчам / турнирам из всех показателей. Мгновенное переключение PR / MWC. Команда CLI list –type stats. Согласование показателей PR / Snowie ER / MWC с eXtremeGammon и gnuBG (порог 0.16 эквити для близких кубов). Исправление вычисления cube_error для решений Double/Pass. Документация модели статистики (Приложение: Модель статистики — выравнивание XG / gnuBG / blunderDB). См. Панель Stats.

0.20.0

31/05/2026

Добавление структуры исключения Except в панель поиска: исключает позиции, содержащие любую из нарисованных шашек, с маркером «должно быть пусто» (двойной клик) и неограниченным количеством шашек на точку (команда x). Добавление опции «только первый кубик» к фильтру бросков кубиков (вариант D1, параметр CLI –dice). Панель Комментарии: автоматический фокус поля ввода при открытии и всегда видимые кнопки редактировать / удалить. Исправление фильтра «Search Text», который не находил все теги комментариев.

0.21.0

01/06/2026

Интернационализация интерфейса: весь интерфейс blunderDB (панель инструментов, панели, сообщения, справка) теперь может отображаться по выбору на английском, французском, немецком, итальянском, испанском, финском, японском, греческом или русском языке. Добавлено окно настроек, доступное через кнопку в виде шестерёнки на панели инструментов, для выбора языка. Выбор языка сохраняется между сессиями. См. Конфигурация.

0.22.0

02/06/2026

Добавлен безголовый (серверный) режим, продвинутый и необязательный, дополняющий настольное приложение: демон serve, предоставляющий движок по HTTP + JSON, многопользовательский бэкенд PostgreSQL с разделением по арендаторам (и Row-Level Security по выбору), команда migrate для переноса базы SQLite в PostgreSQL и универсальный диспетчер call, дающий доступ из командной строки ко всем операциям хранения. Импорт отдельных позиций из новых форматов (eXtreme Gammon .xgp, текст BGBlitz, нативная библиотека .db) с обогащением дубликатов между форматами. Исправления: панели больше не вызывают ошибку, когда ни одна база не открыта, а панель Комментарии больше не зацикливается при открытии. См. Безголовый режим (сервер).

0.23.0

05/06/2026

Добавлены обучающие туры по интерфейсу (общий тур, поиск, матчи, турниры), повторяемые с панели инструментов или командой tour, и образец базы данных, загружаемый командой demo для знакомства с инструментом без импорта собственных партий. Настройка цветов доски (фон, граница, пункты, шашки, кости, куб удвоения) из окна настроек. Автодополнение командной строки (клавиша TAB). Панель поиска: явное управление типом решения (Шашки / Куб), с подтипом Дабл / Без дабла или Тейк / Пас для решений по кубу, синхронизированное с доской; предложенный куб отображается в центре доски для решений тейк/пас. Поиск позиции по её идентификатору (фильтр id). Исправлено отнесение ошибки куба игроку 1. См. Обучающие туры и образец базы данных.

0.24.0

06/06/2026

Добавлен образ контейнера (Docker) для headless-режима: выделенная точка входа serve и Dockerfile.serve, создающий статический бинарный файл без графического интерфейса, для развёртывания движка blunderDB как службы за обратным прокси-сервером. См. Безголовый режим (сервер).

0.25.0

07/06/2026

Серверный режим (headless): два новых метода для восстановления позиции без её сохранения — positions.fromXGID декодирует строку XGID в позицию, а positions.fromXGP читает файл одиночной позиции .xgp. См. Безголовый режим (сервер).

0.26.0

09/06/2026

Настройки отображения интерфейса в окне конфигурации: ползунок масштаба для увеличения или уменьшения всего интерфейса и выбор расположения панелей (снизу, сбоку или автоматически), чтобы лучше использовать широкие экраны. Добавлена информационная панель над доской, показывающая игроков и контекст матча (событие, место, раунд, дату, длину). При открытии базы данных панель матчей отображается сразу же, а разбор начинается с первой позиции. Горячие клавиши теперь не зависят от раскладки клавиатуры (AZERTY, QWERTY, QWERTZ…). Исправлено декодирование XGID (индикаторы Jacoby/Beaver и значение куба). Добавлены вкладки нескольких представлений: несколько независимых рабочих пространств (список позиций, текущая позиция, поиск) с горячими клавишами CTRL-T (новое представление), CTRL-W (закрыть), CTRL-PageUp/CTRL-PageDown (переключение представлений) и переименованием двойным щелчком по вкладке. См. Конфигурация и Вкладки представлений.

0.27.0

13/06/2026

Панель Anki: новый режим свободной тренировки (cram), доступный по кнопке Cram рядом с Study, который показывает случайные позиции из колоды, не изменяя график интервального повторения — идеально для разминки перед турниром или интенсивного повторения колоды без нарушения её порядка. Поиск: новая команда blunders (псевдоним bl), загружающая худшие ошибки (equity/MWC) прямо в представление анализа, с необязательным числом для выбора количества (bl 50); новый фильтр по игроку pl'имя', находящий все позиции из матча с участием заданного игрока на любой стороне; и всплывающие подсказки, показывающие при наведении на каждый фильтр панели поиска соответствующий командный токен. Серверный (headless) режим: новые методы matches.movesByMatch (все ходы матча за один вызов) и positions.epc (Effective Pip Count для обоих игроков). См. Панель Anki и Список команд.

0.28.0

15/07/2026

Панель поиска: единый фильтр «Матчи и турниры», заменяющий поля ввода идентификаторов окном выбора (списки с флажками, фильтруемые по тексту, кнопки Все/Ничего, установка флажка турнира отмечает его матчи-участники) — быстрее на больших базах, поскольку вкладка «Матчи» и представление «Турниры» пересчитывают показатели PR/MWC только для отображаемых матчей; cli list --type tournaments устраняет соответствующий пробел в паритете. Новый фильтр «Импортирована отдельно» (флажок в группе «Прочее», либо токен i в командной строке, s i; также доступен в CLI через --individual) для поиска позиции, которая была сохранена или импортирована отдельно, а не затеряна среди позиций импорта матча. Исправлена потеря данных: удаление матча больше не удаляет позиции, импортированные отдельно, добавленные в коллекцию или включённые в колоду Anki, даже если эти позиции также входили в удаляемый матч. Серверный (headless) режим: шесть новых методов для планировщика интервального повторения Anki — журнал повторений (anki.reviewLog), прогноз карточек к повторению (anki.forecast), приостановка / скрытие / удаление карточки (anki.suspendCard, anki.buryCard, anki.removeCard) и автоматическая настройка целевого коэффициента удержания колоды по её фактическому проценту успешных повторений (anki.optimizeParams); новый метод tenant.purge для безвозвратного удаления данных арендатора при многопользовательском развёртывании PostgreSQL; новые методы matches.list (фильтрация/сортировка/постраничный вывод) и stats.matchBadges (показатели PR/MWC, ограниченные списком матчей). Нативное распространение для Linux: пакеты .deb/.rpm, которые сохраняют бит исполнения, теряющийся при скачивании необработанного двоичного файла. Импорт: после импорта матча вкладка «Матчи» отображается, и импортированные позиции сразу видны; после импорта отдельной позиции (файл XGP, позиция BGBlitz, текстовый файл позиции, вставленная позиция или пакет позиций) вкладка «Анализ» теперь открывается сразу на импортированной позиции вместо вкладки «Матчи»; исправлена вставка анализа eXtreme Gammon на французском или немецком языке с macOS, которая оставалась пустой (буфер обмена системы разбивал буквы с диакритическими знаками на составные символы). См. Безголовый режим (сервер), Список команд и Загрузка и установка.

0.29.0

18/07/2026

Экспорт матча в формате Jellyfish/gnubg (.mat) из интерфейса (панель Матчи), как и из командной строки, с соответствующим серверным маршрутом — удобно для повторного проигрывания матча в другой программе для нардов. Поиск: новый дискриминатор «исключённые кости» (жетон xD65, допускается несколько), отсеивающий позиции, бросок которых соответствует заданному. Безопасное одновременное открытие: база, уже открытая на запись в другом окне blunderDB, теперь открывается в режиме только для чтения (навигация, поиск и анализ доступны, изменения отключены, в строке заголовка указано «[только чтение]») вместо риска повреждения. Происхождение позиций: вне режима матча информационная панель над доской показывает матч — и его турнир, — из которого происходит изучаемая позиция, с бейджем «+N», когда она встречается в нескольких матчах. Повышенная устойчивость к окружению: автоматический откат, когда шрифт, буфер обмена или последняя открытая база недоступны. Явная перезагрузка библиотеки (CTRL-R, кнопка панели инструментов или команда e) заново открывает панель анализа отображаемой позиции. Заметные исправления: устранена блокировка при экспорте больших баз, кнопка «Aucun» экспорта, которая на деле не экспортировала ни одного матча, фильтр по многословному комментарию, устранение дублирования события и турнира в информационной панели, а также различные улучшения отображения. См. Список команд, Панель матчей и Руководство.

0.30.0

26/07/2026

Поиск по комментарию: фильтр «Текст поиска» становится фильтром «Комментарий» и предлагает три взаимоисключающих режима — содержит текст (прежнее поведение, токен t""слово1;слово2""), есть комментарий (токен co) и без комментария (токен xco) — чтобы одним движением находить аннотированные позиции или, наоборот, те, которые осталось прокомментировать. Позиции, отмеченные в eXtreme Gammon: отметки, поставленные при разборе матча XG, теперь читаются при импорте и находятся фильтром «Отмеченная» (токен fl), сочетающимся со всеми прочими критериями; отмеченное решение по кубу даёт две отмеченные позиции — дабл и тейк/пас. Отметка не действует задним числом: достаточно повторно импортировать соответствующий файл .xg, чтобы его отметки попали в базу, не затрагивая существующие комментарии и анализы. Заметные исправления: PR, показываемый на значке турнира, относится к основному игроку, а не к сумме обоих игроков; колоды Anki, построенные на поиске, снова учитывают фильтры этого поиска вместо того, чтобы брать всю базу; устранено зависание поиска при сочетании некоторых фильтров (текст, дата, ошибка сыгранного хода). См. Список команд и Руководство.

0.31.0

04/08/2026

Передача базы третьим лицам: два независимых механизма, оба необязательные и выбираемые в момент экспорта. Отметка происхождения записывает в файл, что это за файл и откуда он, и подписывается идентичностью автора, создаваемой сама собой при первом использовании; отметку невозможно подделать, она читается в верхней части панели «Метаданные» (или командой blunderdb info, которая никогда не пишет в файл) и ничего не фиксирует на стороне получателя — ни журнала, ни слежения. Защита паролем даёт зашифрованный файл .dbx (AES-256-GCM, ключ выводится через Argon2id), пароль проверяется при каждом открытии, а заголовок остаётся читаемым без него; идентичность экспортируется и импортируется одним файлом из настроек. Переработанное окно экспорта: один экран вместо четырёх, напоминание о том, что действительно выгружается (отображаемые позиции), охваченная доля каждой коллекции выделяется красным, когда она неполная, турниры экспортируются только вместе со своими матчами — и экспорт стал втрое быстрее. Окно настроек разделено на три вкладки («Интерфейс», «Цвета доски», «Идентичность автора») и больше не меняет размер и положение. Панель «Метаданные» размещена в единой сетке. Панель «Журнал», которая лишь повторяла введённые команды, удалена. Заметные исправления: неверный пароль больше не открывает защищённую базу, поля модальных окон больше не теряют фокус при щелчке, расчёт показателей PR/MWC больше не падает на игре на деньги, а временные файлы (-wal, -shm, блокировка) удаляются при закрытии. См. Распространение базы: происхождение и пароль и Руководство.

0.32.0

09/08/2026

Панель EPC становится панелью Bearoff и получает полный анализ гонки. На позиции чистого bearoff она отображает — помимо EPC, пипкаунта, wastage и среднего числа бросков каждого игрока, теперь представленных таблицей со знаковой строкой Δ — вероятности выигрыша обоих игроков и money-эквити (cubeless, без дабла, дабл/тейк, дабл/пас, с отрывом каждого решения от лучшего), а также лучшее решение по кубу. Два чётко различаемых режима: точный (чтение из two-sided базы; встроенная база TS-06-06 из GNUbg, покрывающая до 6 шашек у каждого игрока) и оценка (калиброванная свёртка с отображаемой погрешностью — вердикт по кубу никогда не оценивается). Расширенная база TS-06-11 (точный вердикт до 11 шашек у каждого игрока, 1,2 ГБ) загружается с новой вкладки Bearoff конфигурации, с проверкой целостности и возобновлением прерванных загрузок; можно также указать любой two-sided файл .bd из gnubg. Режим «Вызов» для тренировки: результаты скрываются при каждом изменении и открываются зона за зоной, щелчком. Редактирование целиком на доске: шашки обоих домов, игрок на ходу (щелчок по прямоугольнику снятия/счёта) и позиция куба (щелчок по кубу). Щелчок по доске теперь точен при любом масштабе интерфейса (щелчок по пункту 1 мог попадать на пункт 2). Новая команда blunderdb epc в командной строке и опция --bearoff-ts серверного режима. Новый раздел руководства «Методология и допущения панели Bearoff» исчерпывающе излагает допущения, стоящие за каждым отображаемым значением. См. Панель Bearoff и Методология и допущения панели Bearoff.

Содержание

Контакты

Автор: Kévin Unger <blunderdb@proton.me>. Вы также можете найти меня на Heroes под ником postmanpat.

Я разработал blunderDB изначально для личного использования, чтобы обнаруживать закономерности в своих ошибках. Но получать обратную связь очень приятно, особенно когда потрачено немало часов на проектирование, программирование и отладку… Поэтому не стесняйтесь писать мне, чтобы поделиться своими впечатлениями. Любые (конструктивные) отзывы приветствуются.

Вот несколько способов связи:

  • Присоединиться к серверу Discord blunderDB: https://discord.gg/DA5PpzM9En

  • Написать мне по адресу blunderdb@proton.me.

  • Поговорить со мной, если мы встретимся на турнире.

  • На GitHub.

Сделать пожертвование

Если вам нравится blunderDB и вы хотите поддержать прошлые и будущие разработки, вы можете

  • угостить меня напитком, если мы имеем удовольствие встретиться!

  • сделать небольшое пожертвование через PayPal на адрес blunderdb@proton.me

Благодарности

Я посвящаю эту небольшую программу моей супруге Анн-Клер и нашей дорогой дочери Перрин. Я хотел бы особо поблагодарить нескольких друзей:

  • Tristan Remille — за то, что познакомил меня с нардами с радостью и добротой; за то, что указывает Путь к пониманию этой замечательной игры; за то, что продолжает поддерживать меня, несмотря на мои скромные попытки играть лучше.

  • Nicolas Harmand — весёлый товарищ уже более десяти лет в замечательных приключениях, и фантастический партнёр по игре с тех пор, как он заразился вирусом нард.