Руководство

Введение

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

Позиции хранятся в базе данных, представленной файлом .db. Настольное приложение открывает этот файл напрямую, а не сетевой адрес: серверный режим (Безголовый режим (сервер)) — это другой режим того же двоичного файла, и переход от одного к другому делается экспортом или миграцией базы, а не указанием приложению URL.

Основные взаимодействия

Основные взаимодействия с blunderDB:

  • добавить новую позицию,

  • изменить существующую позицию,

  • скопировать изображение доски в буфер обмена (PNG) с помощью CTRL-X или с полным анализом через CTRL-X CTRL-X,

  • удалить существующую позицию,

  • искать одну или несколько позиций,

  • импортировать матчи из различных источников (XG, GNUbg, BGBlitz, Jellyfish), включая комментарии из файлов XG,

  • навигировать по ходам импортированного матча,

  • организовывать позиции в коллекции,

  • организовывать матчи в турниры.

Пользователь может свободно присваивать позициям метки и аннотировать их комментариями.

Описание интерфейса

Интерфейс blunderDB состоит сверху вниз из:

  • [вверху] панель инструментов, объединяющая все основные операции с базой данных,

  • [по центру] основная область отображения, позволяющая отображать или редактировать позиции нардов,

  • [внизу] строка состояния, отображающая различную информацию о базе данных или текущей позиции и содержащая командную строку.

Панели могут быть отображены для:

  • отображения данных анализа текущей позиции из eXtreme Gammon (XG), GNUbg или BGBlitz,

  • отображения, добавления или изменения комментариев,

  • поиска и фильтрации позиций по комбинируемым критериям,

  • отображения и управления коллекциями позиций (панель коллекций),

  • отображения списка импортированных матчей и навигации по ходам матча (панель матчей),

  • отображения и управления турнирами (панель турниров),

  • отображения статистики производительности (панель Stats),

  • вычисления EPC (Effective Pip Count) позиции снятия шашек (панель Eval),

  • изучения позиций методом интервального повторения (панель Anki),

  • просматривать метаданные базы данных (панель «Метаданные»).

Модальные окна могут отображаться для:

Основная область отображения предоставляет пользователю:

  • доску для отображения или редактирования позиции нардов,

  • уровень и владельца куба,

  • пипкаунт каждого игрока,

  • счёт каждого игрока,

  • кости для розыгрыша. Если на костях не показаны значения, положение костей указывает, чей ход, и что позиция является решением по кубу. Когда решение по кубу — это ответ на удвоение (тейк/пас), предложенный куб отображается в центре доски, на предложенном значении.

Щелчок правой кнопкой по доске открывает контекстное меню: оценить показанную позицию в панели Eval, оценить её зеркало, скопировать изображение доски с анализом в буфер обмена (эквивалент CTRL-X CTRL-X, менее заметный), сохранить изображение в файл в SVG или PNG, открыть новый вид на эту позицию и — если позиция уже из базы — добавить её в колоду Anki (интервальное повторение) или упорядочить её соседние позиции (см. Панель поиска).

Буфер обмена — повседневный жест; сохранение — другая нужда: иллюстрация к статье, к сообщению на форуме, к уроку. SVG предлагается потому, что доска им и является: это форма, которая переживает увеличение, та, что попадает в документ без размытия. PNG производится из неё, как и копия в буфер: одна отрисовка, три назначения — значит, ни одно не может разойтись с другими. Это меню не появляется ни в панели Eval, ни в панели поиска, где правая кнопка уже расставляет шашки другого цвета. См. Перенос позиции в панель Eval о том, как перенести позицию в панель Eval.

Строка состояния структурирована слева направо следующей информацией:

  • командная строка, доступная при нажатии клавиши ПРОБЕЛ,

  • информационное сообщение, связанное с выполненной пользователем операцией,

  • индекс текущей позиции, а за ним число позиций в текущей библиотеке (или сведения о ходе и партии при просмотре матча),

  • счётчик библиотеки — «позиций 412 · бландеров 38 · матчей 5» — где каждое число открывает то, что оно считает: позиции, подготовленный в командной строке поиск E> по порогу библиотеки или список матчей. Число, за которым нельзя пойти, — украшение. Порог бландеров — это порог библиотеки, задаваемый на вкладке Библиотека настроек и общий со статистикой: два порога заставили бы одно слово значить два разных. Счётчик обещает ровно то, что открывает ссылка, в том числе для позиции, сыгранной несколькими способами, которая учитывается по наибольшей своей стоимости.

Примечание

В случае позиций, полученных в результате поиска пользователем, количество позиций в строке состояния соответствует числу отфильтрованных позиций.

Вкладка Anki несёт бейдж, когда есть карточки к повторению, по всем колодам. Это число — причина открыть вкладку; ему нечего делать за ней. Ноль не показывается: бейдж с «0» — шум.

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

Команда grid открывает контактный лист: просматриваемый список — результаты поиска, библиотеку, коллекцию — в виде сетки мини-досок, нарисованных так же, как доска, страницами по двадцать четыре. Он открывается на странице текущей позиции, миниатюра которой обведена рамкой; щелчок или ENTER по миниатюре открывает её позицию на доске и закрывает лист, а весь лист можно пройти с клавиатуры (см. Контактный лист). Он не открывается ни в режиме редактирования, ни в матче, который просматривается по ходам.

В истории поиска панели поиска каждый токен сохранённой команды показан именованной плашкой — Без контакта, Ошибка хода — а не голым токеном. Точная команда остаётся в подсказке, ведь запускается именно она; а токен, которого blunderDB не знает, показывается как есть, а не переведённым к ближайшему.

Вкладки представлений

Под панелью инструментов панель вкладок позволяет работать с несколькими представлениями параллельно. Каждое представление — это независимое рабочее пространство, которое сохраняет собственный список позиций, индекс текущей позиции, отображаемую позицию, анализ и выбранный ход, активную панель, текущий комментарий, а также контекст навигации по матчу. Так, например, можно держать открытым поиск в одном представлении, просматривая матч в другом.

  • Создать представление: нажать кнопку + на панели вкладок или клавиши CTRL-T. Новое представление создаётся как копия текущего.

  • Закрыть представление: нажать крестик на вкладке или клавиши CTRL-W. Последнее представление закрыть нельзя.

  • Переключить представление: нажать на вкладку, нажать CTRL-PageUp / CTRL-PageDown (или SHIFT-J / SHIFT-K) для перехода к предыдущему / следующему представлению, либо CTRL-1–CTRL-9 для прямого перехода к n-му представлению.

  • Переименовать представление: дважды щёлкнуть по вкладке, ввести новое имя и подтвердить клавишей ENTER.

Представления сохраняются вместе с состоянием сессии базы данных и восстанавливаются при её повторном открытии.

Конфигурация

Кнопка настроек (значок шестерёнки) на панели инструментов, слева от кнопки справки, открывает окно настроек blunderDB. Оно разделено на семь вкладок:

  • Интерфейс — язык, масштаб отображения, положение панели;

  • Цвета доски — цвета игровой доски;

  • Библиотека — то, что принадлежит открытой базе: пороги ошибки и бландера, уплотнение и восстановление, описанные ниже;

  • Bearoff — таблицы bearoff, используемые панелью Eval;

  • gammonNet — настройки встроенного движка оценки, описанные ниже;

  • Отслеживаемая папка — автоматический импорт матчей, попадающих в папку, описан ниже;

  • Идентичность автора — ключ, которым подписываются ваши отметки происхождения; описан в разделе Распространение базы: происхождение и пароль.

Вкладка Интерфейс начинается с темы: как в системе, светлая, тёмная, высокий контраст или для печати. Тема задаёт цвета интерфейса и предлагает палитру доски — тёмный интерфейс вокруг светлой доски это не тёмная тема, а её половина, ведь доска занимает бо́льшую часть окна.

Последнее слово за вами, и механизм это гарантирует, а не обещает: вкладка Цвета по-прежнему настраивает доску напрямую, и цвет, выбранный после темы, — ваш. При запуске применяются только токены интерфейса, никогда не палитра доски: та, что вы настроили, уже загружена, и переписывать её при каждом запуске значило бы стирать вашу работу сессию за сессией. См. ADR-0038.

Как в системе — значение по умолчанию: оно подчиняется светлой/тёмной настройке рабочего стола, в том числе при её смене посреди сессии. Инструмент не навязывает свой светлый или тёмный вид рабочему столу, который уже решил.

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

Вкладка Библиотека собирает то, что принадлежит открытому файлу, а не машине. Она пуста, пока не открыта ни одна база, и она об этом говорит.

Прежде всего она несёт два порога, которые решают словарь всего приложения: решение является ошибкой, как только его стоимость достигает порога ошибки, и эта ошибка является бландером, как только она достигает порога бландера. Всякий бландер — ошибка, поэтому первый порог не может превышать второй, и blunderDB отвергает перевёрнутую пару. Значения вводятся в эквити — «0,080» — единице всех таблиц; командная же строка говорит в миллипунктах, так что порог 0,080 записывается в поиске как E>80.

Эти пороги следуют за файлом, а не за компьютером: одна и та же база считает одни и те же бландеры всюду, где её открывают, blunderdb info их показывает, а blunderdb edit --error-threshold / --blunder-threshold их задаёт. Они не путешествуют в экспорте: порог — это привычка чтения, а не факт о позициях.

Три предустановки предлагаются в один щелчок, каждая под именем программы, которая провела эту черту: blunderDB (0,050 / 0,100), XG (0,020 / 0,080) и gnubg (0,040 / 0,080). По умолчанию библиотека читает 0,050 и 0,100.

Что они меняют на экране: число бландеров в счётчике строки состояния и поиск, который готовит его ссылка, столбцы «Ошибки» и «Бландеры» в статистике и в таблице игроков, отметки ходов в карточке матча (Панель матчей), а также список позиций, которые blunderDB предлагает пересмотреть после импорта.

На той же вкладке есть кнопка Сжать базу, возвращающая место на диске, оставшееся после удалений (матчей, турниров, чисток): база никогда не уменьшается сама при удалении данных, сжатие нужно запросить явно. На большой базе операция может занять время и временно требует примерно вдвое больше свободного места, чем размер файла (blunderDB откажется стартовать, вместо того чтобы рисковать прерванным сжатием); поэтому перед запуском спрашивается подтверждение. Результат — сколько места выиграно, в мегабайтах — затем показывается в строке состояния. Та же операция доступна в командной строке через blunderdb vacuum (см. Интерфейс командной строки (CLI)).

Кнопка Открыть папку журналов прямо под ней открывает папку с журналом приложения — это удобно, чтобы приложить подробности к сообщению о проблеме, особенно когда blunderDB запущен из ярлыка или двойным щелчком, без подключённого терминала, который что-либо показал бы.

Флажок Проверять обновления при запуске, по умолчанию выключенный, при каждом запуске один раз обращается к странице релизов репозитория GitHub и показывает в строке состояния сообщение, если доступна более новая версия — но никогда не окно, мешающее работе. При установке через менеджер пакетов (Flatpak, Homebrew, пакет дистрибутива…) эта проверка автоматически остаётся выключенной: обновлениями тогда занимается этот канал, а не сам blunderDB.

Две настройки управляют упорядочиванием соседних позиций (токен like, см. Панель поиска): число возвращаемых соседей и максимальное расстояние, за которым позиция перестаёт быть соседней. По умолчанию это расстояние равно нулю, то есть предела нет: масштаб зависит от фазы игры, и выбранное здесь значение читалось бы как измерение. Токен like<12 задаёт своё на один поиск, не трогая настройку.

Вкладка Цвета доски позволяет настроить цвета доски. У каждого элемента свой выбор цвета: фон, рамка, светлые и тёмные пункты, шашки игрока 1 и игрока 2, кубики, точки на кубиках и куб удвоения. Кнопка Сбросить возвращает все цвета по умолчанию. Как и язык, выбранные цвета сохраняются между сеансами.

Вкладка Bearoff управляет таблицами выбрасывания панели Eval (см. Панель Eval). Они не встроены в исполняемый файл и не загружаются: blunderDB вычисляет их на машине, которая ими пользуется, и результат побайтово совпадает с тем, что выдаёт gnubg — отпечаток SHA-256 проверяется до того, как таблица принимается.

Две обычные таблицы (TS-06-06 для решения по кубу, OS-06 для EPC) вычисляются при первом запуске, в фоне и ни о чём не спрашивая: около шести секунд на одном ядре, в течение которых приложением пользуются как обычно. Панель Eval упоминает об этом, только если в неё поставлена позиция, которой нужна ещё не готовая таблица.

Вкладка показывает активную область и её происхождение, состояние односторонней таблицы, которую читает EPC, папку, где всё это живёт, и список имеющихся таблиц с их размером и вердиктом. Каждая строка удаляется отдельно, после подтверждения.

Проверена или не проверена. Проверенная таблица имеет ровно те байты, которые gnubg производит для её области: её отпечаток SHA-256 записан в blunderDB и был найден снова. Отпечатки, записанные для односторонних таблиц (от OS-06 до OS-10), — это отпечатки, которые производит инструмент makebearoff из GNUbg 1.08. Непроверенная таблица корректна, но для её области отпечаток не записан — к ней нет претензий, просто никто не сравнивал её с эталоном. Повреждённая таблица противоречит сама себе и никогда не читается; она пересчитывается.

Вычислить более широкую таблицу. Область выбирается из списка двух семейств вместе с числом ядер (по умолчанию все, кроме одного, чтобы машина оставалась пригодной для работы):

  • точный куб (двусторонняя), от TS-06-06 до TS-06-15: расширяет область, где вероятность выигрыша и вердикт куба читаются, а не оцениваются;

  • EPC вне дома (односторонняя), от OS-06 до OS-10: расширяет расстояние, на котором может стоять шашка без того, чтобы блок EPC умолк. Этот проход читает только позиции меньше вычисляемой, поэтому он последователен по построению и число ядер ему ничего не даёт — выбор говорит это, становясь серым.

Прежде чем что-либо начнётся, вкладка называет для выбранной области три числа: размер на диске, память, нужную во время вычисления, и время, которое оно должно занять на этой машине. Последнее начинается как оценка и становится измерением: каждый достаточно широкий проход фиксирует собственную скорость и сохраняет её. Область, которую доступная память не позволяет, предлагается серой, с указанием причины — «нужно 24 ГБ, осталось 12» есть ответ, отсутствующая строка ответом не была бы.

Для порядка величины, на машине с шестнадцатью потоками: TS-06-09 весит 191 МБ и требует десятка секунд, TS-06-11 весит 1,2 ГБ и нескольких минут, TS-06-13 превышает то, что большинство машин может удержать в памяти. Со стороны односторонних, на одном ядре: OS-07 весит 4,9 МБ и требует 17 с, OS-08 — 15 МБ и 1 мин 20, OS-10 — 117 МБ и полчаса.

Пауза и продолжение. Во время вычисления прогресс показывает измеренное оставшееся время и две отдельные кнопки: Пауза и Отмена. Пауза записывает состояние вычисления рядом с таблицей; повторный запуск продолжает с места остановки, а не начинает заново. Отмена не сохраняет ничего. Закрытие окна настроек ничего не прерывает — вычисление продолжается в фоне.

Приостановленное вычисление находится при следующем запуске, названным и с числом («TS-06-09 прервана на 43 %»), с кнопками Продолжить и Удалить. Ничто не перезапускается само: остановки просил пользователь.

Наконец, вкладка позволяет указать внешний двусторонний файл .bd, например базу, произведённую самим gnubg: побеждает таблица с самой широкой областью.

Вкладка Библиотека несёт наконец Восстановить анализы: столбцы анализа, которые опрашивают поиск и статистика, — проекция сохранённых анализов, остающихся нетронутыми. Ошибка проекции, стало быть, исправима без повторного импорта. Это явно и никогда автоматически — переписывать чьи-то столбцы анализа лишь потому, что он открыл свою базу, инструмент не должен делать за его спиной. Та же blunderdb repair доступна в командной строке.

Вкладка gammonNet настраивает встроенный движок оценки (см. ADR-0011). В ней задаются две глубины поиска, названные и хранимые раздельно — понижение одной никогда не меняет другую:

  • Глубина отображения — комфорт интерактивной работы при редактировании доски; никогда не записывается в базу.

  • Глубина анализа — то, что пакетный анализ после импорта записывает в анализ позиции.

Обе по умолчанию равны 2-ply — канонической конфигурации. Вкладка также предлагает отсечение (по умолчанию k=12) и число отображаемых кандидатных ходов (по умолчанию 10), а также флажок автоматически анализировать после импорта, который, будучи включён, после каждого импорта проверяет, остались ли позиции без какого-либо анализа (ни gammonNet, ни XG, ни GNUbg, ни BGBlitz — правило гласит: «оценка лишь заполняет пробел», но никогда ничего не заменяет), и при необходимости запускает в фоне анализ gammonNet на настроенной глубине анализа. Кнопка Анализировать сейчас вручную перезапускает тот же догоняющий анализ — полезно для базы, созданной до появления этой функции.

Вторая кнопка, Повторно проанализировать устаревшие позиции, покрывает обратный случай: позиция, уже проанализированная gammonNet, но чей сохранённый анализ был записан более старой версией движка, чем работающая сейчас, или на глубине, отличной от настроенной выше глубины анализа, помечается там как устаревшая и переоценивается. Позиция, которая дополнительно несёт анализ XG, GNUbg или BGBlitz, никогда не затрагивается этой кнопкой, независимо от её содержимого gammonNet — защита ADR-0013 остаётся безусловной. Число, отображаемое рядом с каждой кнопкой (позиции без анализа, устаревшие позиции), носит чисто информативный характер; партия пересчитывает свой собственный список при запуске.

Обе партии ограничены, видимы и отменяемы — никакого молчаливого демона: их ход (проанализировано позиций / всего) и кнопка отмены отображаются в строке состояния всё время их выполнения и исчезают по завершении, уступая место сообщению, подводящему итог результата — сколько позиций было проанализировано, сколько было отклонено (позиция, которую gammonNet отказывается оценивать, например, счёт матча за пределами диапазона его таблицы, что никогда не является сбоем) и сколько не удалось (повторяются без изменений при следующем запуске). Закрытие приложения во время того или другого ничего не теряет: каждая проанализированная позиция записывается по мере готовности, а следующий запуск возобновляет анализ ровно с того места, где он остановился, без какого-либо журнала.

Матч, импортированный без анализа, теперь получает PR. Это случай матча, сыгранного онлайн, или файла Jellyfish .mat, который никто не пропускал через XG: blunderDB знал его позиции и сыгранные ходы, но никакой анализ не говорил, чего они стоят. После прогона фактически сыгранный ход сравнивается с ранжированием gammonNet, и разница питает PR, долю ошибок, худшие решения и все прочие показатели — ровно так же, как у матча, разобранного в XG. Сравнение ничего не выдумывает: сыгранный ход берётся из таблицы ходов самого матча, записанной при импорте, независимо от того, нёс ли файл анализ.

Базу, проанализированную более ранней версией, не нужно переоценивать: blunderdb repair пересчитывает столбцы по уже сохранённым анализам и ходам и возвращает этим матчам их PR (см. repair).

Честная оговорка: позиция определяется своей структурой, поэтому позиция, встреченная дважды — раз сыгранная хорошо, раз плохо — несёт только одну разницу, разницу первого записанного вхождения. Это не особенность данного расчёта: библиотека XG устроена ровно так же.

Отслеживаемая папка

Вкладка Отслеживаемая папка просит blunderDB во время работы следить за папкой и импортировать каждый файл матча, который в ней появляется. Сыграть сессию в eXtreme Gammon, вернуться в blunderDB — и матчи уже там.

Ничего не угадывается. Пока папка не указана, слежения нет: blunderDB не начинает читать каталог оттого, что предположил, где живут ваши матчи. Кнопка Предложить смотрит обычные места на этой машине и предлагает путь только если он действительно существует; иначе она об этом говорит, и указать папку — ваше дело.

Три вещи стоит знать, прежде чем поставить галочку:

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

  • Файл импортируется лишь тогда, когда его размер устоялся. Матч, который пишет другая программа, растёт от взгляда к взгляду; импорт недописанного дал бы ошибку разбора, с которой никто ничего не сделает. Поэтому blunderDB ждёт, пока увидит один и тот же файл дважды неизменным.

  • Импорт выполняется тихо. Вы изучали позицию, когда пришли ваши матчи: забрать у вас экран было бы худшим моментом. Режим, активный поиск, вкладка и отображаемая позиция не меняются; список позиций не перезагружается и покажет новые матчи при следующей перезагрузке. Импорт идёт без окна, а в строке состояния появляется баннер с числом импортированных, пропущенных (дубликаты) и неудачных матчей, с кнопкой, которая при желании открывает полный отчёт. Всё остальное совпадает с ручным импортом: те же обнаруженные дубликаты, та же пачка импорта, тот же автоматический анализ, если он включён.

Интервал по умолчанию — десять секунд; нижний предел — две. Папка не обходится рекурсивно: отслеживаемая папка — это место, куда инструмент кладёт свои матчи, а не дерево для обхода. Отмонтированный сетевой ресурс не останавливает слежение и не выдаёт своё содержимое за новое при возвращении.

То же слежение доступно в командной строке: blunderdb import --type batch --dir <папка> --watch (см. Интерфейс командной строки (CLI)) — это форма, которой могут пользоваться сервер, планировщик или скрипт.

Окно конфигурации также содержит настройки отображения интерфейса. Ползунок масштаба интерфейса позволяет увеличить или уменьшить все элементы интерфейса, что полезно на экранах высокой плотности или для улучшения читаемости. Меню расположения панелей определяет, где панели (поиск, матчи, анализ) располагаются относительно доски: снизу, сбоку или автоматически (тогда на широких экранах выбирается боковое расположение, чтобы лучше использовать доступное пространство). Как и другие настройки, эти выборы сохраняются от сеанса к сеансу.

Обучающие туры и образец базы данных

Чтобы облегчить освоение, blunderDB предлагает обучающие туры по интерфейсу. Каталог туров открывается с панели инструментов или командой tour (псевдоним tutorial). Доступны семь туров: общий тур по интерфейсу, а также туры, посвящённые поиску позиций, разбору матчей, разбору турниров, панели Eval, повторению Anki и статистике. Каждый тур пошагово выделяет соответствующие элементы интерфейса, попутно открывает панель, о которой рассказывает, и может быть повторён в любой момент. При первом запуске общий тур предлагается автоматически.

Команда demo загружает образец базы данных, позволяющий познакомиться с возможностями инструмента, не импортируя собственные партии: три матча (два из них объединены в турнир), проанализированные eXtreme Gammon, BGBlitz и gammonNet, три тематические коллекции, комментарии с тегами (#blunder, #cube) и колоду Anki с журналом повторений. Игроки, турнир и место вымышлены. Экскурсии по интерфейсу опираются на эту базу, когда ни одна база не открыта.

Редактирование позиций

Нажатие клавиши TAB открывает панель поиска и позволяет редактировать позицию на доске для добавления в базу данных или для задания структуры позиции для поиска. Распределение шашек, куб, счёт и право хода можно изменять с помощью мыши (см. Редактирование позиции).

Совет

Смотрите Горячие клавиши для доступных горячих клавиш.

Командная строка

Командная строка, встроенная в строку состояния, позволяет выполнять все функции blunderDB, доступные в графическом интерфейсе: общие операции с базой данных, навигация по позициям, отображение анализа и/или комментариев, поиск позиций по фильтрам… После первоначального освоения интерфейса рекомендуется постепенно использовать командную строку для мощной и плавной работы с blunderDB, особенно для функций поиска позиций.

Для открытия командной строки нажмите клавишу ПРОБЕЛ. Для отправки запроса и закрытия командной строки нажмите клавишу ENTER.

blunderDB выполняет запросы пользователя при условии их корректности и немедленно изменяет состояние базы данных при необходимости. Явное сохранение пользователем не требуется.

Совет

Смотрите список команд для списка команд, доступных в командной строке.

Палитра команд

Палитра команд (CTRL-SHIFT-P) находит по приблизительному имени то, что уже не знаешь, где искать: команду командной строки, вкладку, фильтр библиотеки или матч. Набранные буквы должны идти по порядку, не обязательно подряд, без учёта регистра и диакритики: «мтркб» находит матрицу куба, «lyon» — матчи турнира в Лионе.

Стрелки выбирают, ENTER выполняет, ESC закрывает. Команда выполняется так, как если бы её набрали; s и ss открывают командную строку, чтобы вписать в неё фильтры; фильтр запускается как двойным щелчком в библиотеке; матч открывается как двойным щелчком в панели матчей.

Когда Direction открыта, палитра добавляет турнир: игроков, столы, идущие матчи и состязания (см. быстрый поиск).

Панель анализа

Панель Анализ (CTRL-L) отображает данные анализа текущей позиции, импортированные из eXtreme Gammon (XG), GNUbg или BGBlitz. Отображаются лучшие альтернативы (ходы шашками или решения куба) с их значениями эквити и соответствующими ошибками. Клавиша d переключает между анализом ходов шашками и анализом куба. При навигации по матчу фактически сыгранный ход выделяется в списке альтернатив. Нажмите CTRL-L или выполните команду list для отображения или скрытия панели.

Под таблицами иногда появляется фраза, говорящая, чего стоило сыгранное решение и почему: «Вы теряете 120 mMWC: сыгранный ход оставляет три блота там, где 13/7 8/7 оставляет только один.» Она порождается шестью измеримыми правилами — открытость, сделанный или упущенный пункт дома, отданные шансы на гаммон, безопасность, которая стоит дороже, чем даёт, и два направления ошибки по кубу (дубль слишком поздно или слишком рано, слишком свободное взятие или слишком тесный пас).

Главное правило — молчание: фраза появляется, только когда правило применимо уверенно, и при ошибке выше порога, начиная с которого движки согласны, что это ошибка. В остальное время фразы нет — ни пустой рамки, ни «мы не знаем». Неверное объяснение стоит дороже, чем его отсутствие: оно учит неточному.

Когда позицию оценили несколько движков, полоса в верхней части панели ставит их рядом: по строке на движок, с его глубиной и его ответом — вердиктом по кубу или его собственным лучшим ходом. Сначала она говорит, согласны ли они, и оправдывает её именно расхождение: «XG говорит удвоение, приём; gammonNet говорит без удвоения» читается с одного взгляда там, где раньше приходилось сличать две таблицы по диагонали.

Лучший ход движка — это лучший ход этого движка: список кандидатов отсортирован по эквити вперемешку по всем движкам, поэтому его первый элемент ни для кого в отдельности не лучший.

Полоса появляется, только если движков действительно несколько, и существует лишь в этой панели: панель Eval показывает одно решение — встроенного движка (ADR-0017), и сравнению там не место.

Ходы записываются так, как они читаются на доске, здесь так же, как в панели Eval: наименее продвинутая шашка ходит первой, и шашка, использующая подряд несколько костей, записывается только один раз — 64, сыгранное одной и той же шашкой, читается 24/14, а 24/14*, если она бьёт по прибытии. Подробности цепочки появляются вновь лишь тогда, когда они говорят что-то ещё: удар по пути сохраняет свой промежуточный пункт, 24/18* 18/14, иначе удар на 18 исчез бы из записи.

Эквити импортированного анализа подчиняется тому же правилу, что и панель Eval: столбец указывает свой референциал — «Equity (money)» или «Equity (match)» — в зависимости от счёта анализируемой позиции, а не просто «Equity» без указания шкалы. Правила Jacoby и Beaver, действующие на позиции money game, также отображаются в виде значков под таблицей решения по кубу.

Роллауты

Под анализом панель Анализ предлагает прокатить позицию: сыграть сотни партий от каждого ходового кандидата или каждого действия с кубом, чтобы различить два выбора, которые прямая оценка почти не разделяет. Три настройки: Быстрый (216 партий, усечение на 7 полуходах), Стандартный (1296 партий, усечение на 11 полуходах) и Свободный, где редактируются все параметры — усечение, минимум и максимум партий (кратно 36), предел JSD, глубина (ply), число кандидатов, зерно и число потоков. Кнопка Запустить роллаут, клавиша r панели или команда rollout (псевдоним ro) запускают его; полоса прогресса следит за сыгранными партиями, а Отмена (или снова r) останавливает его, ничего не записывая.

Результат сохраняется рядом с анализом, а не вместо него: импортированный анализ не изменяется. Каждый роллаут образует блок с, для каждого кандидата, эквити, 95-процентным доверительным интервалом, JSD (отрыв от лучшего хода в стандартных отклонениях разности: начиная с предела ход считается решённым и больше не играется) и числом партий. Роллаут останавливается, как только ходы различены. Конфигурация — движок и полная подпись параметров — раскрывается под таблицей: два роллаута с одной подписью дают одни и те же числа. Роллаут играет куб внутри своих партий: ранжирование надёжно, абсолютная эквити — несколько менее, о чём напоминает блок. Позицию, которой нет в базе, можно прокатать, но не сохранить.

Кнопка По отображаемому списку… (или ro search) прокатывает одну за другой позиции отображаемого списка — результаты поиска, матч или коллекцию, — у которых ещё нет этого роллаута; подтверждение называет общее число до начала. Каждая позиция записывается, как только закончена: отмена сохраняет сделанное, а повторный запуск продолжает с места остановки. Ход работы сохраняется при закрытии панели.

Панель комментариев

Панель Комментарии (CTRL-P) показывает, добавляет и редактирует комментарии, связанные с текущей позицией. Позиция может нести несколько: показываются все, от самого нового к самому старому. Комментарии, импортированные из файлов XG, автоматически связываются с соответствующими позициями. Нажмите CTRL-P или выполните команду comment, чтобы показать или скрыть панель.

Каждый комментарий, пришедший из файла, несёт метку происхождения (XG, GNU BG, BGF или импортировано, когда происхождение не было записано). Комментарии, написанные вами, метки не несут: это обычный случай, и помечать каждую строку было бы шумом. Правка импортированного комментария делает его вашим: после правки фраза — ваша.

Это различие видно и в другом месте: удаление матча больше не уничтожает позицию, на которой писали вы. Заметка, взятая из исходного файла, по-прежнему исчезает вместе с матчем, который её принёс.

Теги

Тег — это #слово, написанное в комментарии. Ничто его не объявляет, никакая таблица его не хранит, и это сделано намеренно: словарь — это ваша собственная проза, а требование объявить тег перед использованием превратило бы привычку в бумажную работу.

Не хватало другой половины: видеть словарь, который ты себе построил, и щёлкнуть по тегу вместо того, чтобы вспоминать, как ты его писал. Команда tags или кнопка # рядом с полем ввода открывает окно словаря: теги этой базы, каждый с числом позиций, которые его несут, — по щелчку запускается соответствующий поиск. Под списком идут рекомендуемые теги, которых база ещё не использует, — словарь, взятый из литературы по нардам (#blitz, #prime, #holding, #backgame, #containment, #crunch, #ace-point, #timing…), предложенный и никогда не навязанный: тег, отсутствующий в этом списке, стоит ровно столько же, сколько тег из него.

При наборе # предлагает теги, которые эта база уже использует, а затем рекомендуемые. Именно это не даёт написать #back-game в один день и #backgame в другой — больше ничто этого не поймает.

Поиск по тегу пишется как #prime в командной строке. Он разграничен: #prime не находит #priming, тогда как обычный текстовый поиск, ищущий подстроку, их не различает. Несколько тегов складываются — s #prime #backgame запрашивает позиции, несущие оба, — потому что позиция несёт несколько тегов: назвать два может значить только «оба». Это обратно фильтру фазы или происхождения, где у позиции лишь одно значение и назвать два значения может значить только «то или другое».

Тот же список доступен вне интерфейса командой blunderdb list --type tags (см. Интерфейс командной строки (CLI)).

Корзина

Удаление позиции, коллекции или комментария проходит через корзину: удаление действительно происходит, но копия исчезающего хранится тридцать дней. Команда trash открывает окно со списком, где у каждой записи есть Восстановить и Удалить.

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

Всё старше тридцати дней удаляет команда vacuum, а не открытие базы: не делать vacuum — значит хранить всё.

Примечание

Корзина не путешествует. Экспорт её не несёт, и удаление матча ничего в неё не кладёт: чистка осиротевших позиций, следующая за удалением матча, — автоматическая уборка, а не жест пользователя; см. правило хранения в Панель матчей.

Панель поиска

Панель Поиск (CTRL-F или TAB) фильтрует позиции по свободно комбинируемым критериям: структура шашек, тип решения куба, величина ошибки, даты, метки и т.д. Клавиша TAB одновременно открывает панель поиска и редактор позиций, позволяя задать структуру шашек непосредственно на доске.

Панель поиска

Панель Поиска: числовые фильтры, структура шашек на доске, вкладки Не менее / Кроме.

Для поиска среди показанных позиций используйте команду ss с фильтрами (напр.: ss nc, ss E>40). ss ищет в списке на экране: в результатах предыдущего поиска, в открытой коллекции или в позициях просматриваемого матча — независимо от того, введена команда напрямую или из панели поиска (TAB). Флажок Поиск в текущих результатах панели следует тому же правилу. В коллекции и в матче s отклоняется: он искал бы по всей библиотеке и заменил бы показанный список.

Из результатов поиска ss, запущенного из коллекции или матча, выходят клавишей Esc — одним нажатием, как только ни поле, ни панель с фокусом не имеют чего закрыть (например, выбранного в анализе хода): blunderDB возвращается ко всей коллекции или к матчу на изучаемом ходе, и к оставленной позиции. Этот возврат следует только за ss: s, запущенный из панели поиска, открытой над коллекцией или матчем, ищет по всей библиотеке, и Esc больше не возвращает к оставленному списку.

Панель предлагает явное управление искомым типом решения: Безразлично (без фильтра), Шашки (решения по ходу) или Куб (решения по кубу). Когда выбран Куб, второй список уточняет подтип: Все, Дабл / Без дабла (игрок на ходу должен решить, удваивать ли) или Тейк / Пас (ответ на удвоение соперника). Управление синхронизировано с доской: изменение костей или куба на доске обновляет тип решения, и наоборот. В режиме Тейк / Пас куб отображается в центре доски на предложенном значении; это значение остаётся редактируемым.

Фаза игры — дебют, миттельшпиль, гонка, снятие шашек — это метка, которую blunderDB вычисляет по одной только доске. Она никогда не редактируется и доступна для поиска через маркер командной строки ph: (ph:race, повторяемый: ph:race ph:bearoff). Три из четырёх её границ — те, что GNU Backgammon использует для выбора своих сетей; четвёртая, где заканчивается дебют, — соглашение blunderDB: позиция всё ещё в дебюте, пока ни одна из сторон не сдвинула более четырёх шашек с исходных пунктов, ни одна не снята и ни одна не стоит на баре.

Примечание

Метку пересчитывает команда blunderdb repair. В базе, открытой впервые этой версией, расчёт делается один раз, при открытии. База, фазы которой никогда не вычислялись, не возвращает ничего для ph: — ничего, а не ложный ответ.

Токен like упорядочивает, а не сужает: его присутствие располагает результат по возрастанию расстояния до целевой позиции — like до текущей, like42 до позиции с номером 42 — а остальные токены сужают упорядоченное таким образом множество, так что s like42 E>80 читается «соседи 42-й, где я ошибся». Расстояние — это транспортное расстояние в шашко-пипсах, объём движения шашек, разделяющий две позиции, с точки зрения игрока на ходу.

Соседняя позиция — это та же задача, а не тот же рисунок: упорядочивание берётся внутри класса цели — тот же тип решения, тот же режим (на деньги или матч) для решения о кубе, и матч, отличный от её собственного, ибо позиции, окружающие её в её же партии, — её ближайшие структуры, но никогда не её соседи. Кубики, счёт и куб остаются вне класса; обычные токены фильтруют по ним, когда это нужно. like42* расширяет класс на все типы решений и на оба режима, но никогда на матч цели; like<12 отбрасывает всё, что дальше двенадцати шашко-пипсов. Упорядочивание, ничего не нашедшее, возвращает пустой список и сообщает об этом, а не десять несвязанных позиций.

В режиме редактирования s like берёт целью нарисованную доску: достаточно нарисовать примерно ту позицию, которую помнишь, запустить — и библиотека ответит, там где поиск по структуре требует точного рисунка. Доска тогда читается как позиция, а не как узор: оставленный пустым пункт считается выведенными шашками, что верно для настоящей позиции и искажает расчёт для наполовину нарисованной доски.

Каждый сосед несёт своё расстояние под таблицами анализа, вместе с позицией, к которой он близок. Именно это позволяет судить, смотрим ли мы на соседа или на совпадение, и именно в этом смысл предела. Упорядочивание запускается и без командной строки: CTRL-SHIFT-L или пункт Соседние позиции контекстного меню доски.

Токен n считает встречи: n>3 оставляет позиции, к которым ведут более трёх ходов, по всем матчам. Это другой вопрос, чем «где я ошибся» — позиция, встреченная двадцать раз и сыгранная верно девятнадцать, всё равно та, которую надо знать назубок. Считаются ходы, а не матчи: одна и та же позиция дважды в матче считается дважды, потому что это были два решения.

План игры — вторая производная метка, рядом с фазой, и она отвечает на вопрос, который набор сохранённых фильтров задать не может: «покажи мои ошибки в холдинг-гейме». Токен gt:, повторяемый (gt:holding gt:mutualholding), с точки зрения игрока на ходу — того плана, в котором принималось решение.

Десять распознаваемых планов, в порядке, в каком правила их разбирают, от самого частного к самому общему:

  • race — самые задние шашки обеих сторон разошлись: контакт больше невозможен. Граница GNU Backgammon.

  • bearin — игрок на ходу заводит шашки домой, пока соперник ещё держит якорь в его доме.

  • crunch — у игрока на ходу не более шести шашек вне его пунктов 1 и 2. Правило GNU Backgammon, порог его автора.

  • backgame — два и более якоря в доме соперника.

  • acepoint — единственный якорь, на первом пункте соперника, при отставании не менее двадцати пипсов.

  • blitz — сделано три и более пункта дома, и соперник на баре или с блотом под удар в этом доме.

  • primevprime — обе стороны держат прайм не менее чем из четырёх пунктов, и у каждой есть шашка, запертая за праймом другой.

  • mutualholding — обе стороны держат высокий якорь.

  • holding — игрок на ходу держит высокий якорь, соперник — нет.

  • contact — контакт, и ни один из планов выше. Дебют попадает сюда.

Три из этих правил — собственные правила GNU Backgammon, и у них есть источник; остальные — соглашения blunderDB. Литература по нардам описывает планы игры, не назначая чисел их границам, и для этой задачи не опубликовано ни одного измерения согласия между классификаторами. Поэтому пороги без источника — три пункта дома для блица, четыре пункта для прайма, двадцать пипсов отставания для ace-point game — записаны здесь, а не спрятаны в коде, и они версионированы: измените их, запустите blunderdb repair, и вся база будет размечена заново.

Примечание

На позицию сохраняется одна метка — метка игрока на ходу. Производная метка никогда не редактируется, никогда не экспортируется как истина, и база, планы которой ни разу не вычислялись, ничего не возвращает по gt: — так же, как по ph:.

Фильтр Отмеченная оставляет позиции, которые вы отметили в исходной программе матча. Эту информацию создаёт только eXtreme Gammon, записывая её ход за ходом в файл .xg; blunderDB читает её при импорте и сохраняет. Отмеченное решение по кубу даёт две отмеченные позиции — дабл и тейк/пас, поскольку blunderDB разделяет надвое то, что исходный файл записывает как одно решение.

Примечание

Отметка не действует задним числом: матчи, уже находящиеся в базе, не содержат этой информации, поскольку она существует только в исходных файлах. Достаточно повторно импортировать соответствующий файл .xg — импорт обнаружит дубликат и не добавит ничего, кроме отметок, не затрагивая существующие комментарии и анализы. Отметку нельзя ни поставить, ни снять из blunderDB: для временного рабочего списка используйте лучше коллекцию.

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

Примечание

Комментарии, импортированные из файла матча (XG, GNUbg), считаются комментариями. Чтобы оставить только свои, добавьте маркер co:user в командной строке (co:xg, co:gnubg, co:bgf и co:unknown называют остальные источники). Впрочем, комментарии, привязанные к матчу или турниру, здесь ни при чём: они комментируют матч или турнир, а не его позиции.

Фильтр Матчи и турниры опирается на общий селектор (модальное окно), а не на ввод числовых идентификаторов: два списка с флажками — один для матчей и один для турниров, каждый из которых можно фильтровать по тексту (игрок, дата, событие — для матчей; название, дата, место — для турниров), с кнопками Все / Ничего, действующими только на текущее отфильтрованное подмножество. Установка флажка турнира автоматически отмечает (и делает неактивными) его матчи-участники в списке матчей, наглядно показывая, что турнир эквивалентен множеству своих матчей.

Панель поиска содержит три вкладки на левом крае: Recherche (фильтры), Historique и Enregistrés. Вкладка Historique перечисляет прошлые поиски с их датой и командой: щелчок выбирает поиск и показывает связанную позицию на доске, двойной щелчок выполняет его повторно. Каждую запись можно сохранить в библиотеку фильтров (значок закладки, задав имя фильтру) или удалить. Вкладка Enregistrés содержит библиотеку фильтров: дважды щёлкните по сохранённому фильтру, чтобы заново выполнить соответствующий поиск (см. Приложение: Расширенное использование фильтров). Команда history (псевдоним hi) открывает панель поиска.

Звёздочка фильтра библиотеки закрепляет его. Закреплённые фильтры отображаются метками вверху панели, какая бы вкладка ни была открыта, и пронумерованы в порядке библиотеки: щелчок по метке запускает фильтр, а ALT-1 … ALT-9 запускают закреплённый фильтр с этим номером с любого экрана в режиме NORMAL или EDIT, не открывая панель. Фильтр задаёт тогда тот же вопрос, что и при двойном щелчке, включая структуру шашек. Закрепление принадлежит базе: оно следует за переименованным фильтром, исчезает вместе с удалённым и не переносится при экспорте библиотеки.

Повторно запущенный поиск сохраняет своё ранжирование: s like42 ранжирует относительно позиции 42, а s like — относительно доски, сохранённой вместе с поиском, то есть просматриваемой или нарисованной. Запись, в которой доска не сохранилась, не запускается против доски на экране, и строка состояния сообщает об этом.

Совет

Смотрите список команд для списка доступных фильтров.

Панель коллекций

Панель коллекций

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

Панель Коллекции (CTRL-B) позволяет управлять коллекциями позиций. Коллекции можно создавать, переименовывать и удалять. Позиции можно в них добавлять и убирать (клавиша Del, спрашивается подтверждение). Двойной клик по коллекции даёт пройти её позиции клавишами ВЛЕВО и ВПРАВО. Команда ss ищет среди позиций открытой коллекции; затем Esc возвращает к коллекции (см. Панель поиска). Порядок коллекций и позиций внутри коллекции меняется перетаскиванием. Нажмите CTRL-B или выполните команду collection, чтобы показать или скрыть панель.

Импорт: что записывается, а что — никогда

Импорт матча, позиции или другой базы добавляет то, чего не хватает; он не заменяет того, что уже есть.

  • Позиция никогда не дублируется. Её узнаёт её идентичность — шашки, куб, кости, счёт, — а не файл, из которого она пришла: одна и та же позиция, встреченная в двух матчах, остаётся одной строкой.

  • По одному анализу на движок. eXtreme Gammon, GNUbg, BGBlitz и встроенный оценщик уживаются на одной и той же позиции, и панель Анализа указывает происхождение каждого из них. Импорт одного не стирает другой.

  • Импортированный анализ никогда не пересчитывается. blunderDB укладывает его как есть, с его меткой уровня («3-ply», «XG Roller++», «Book»), его эквити, ошибками, вероятностями и удачей броска. Правило таково: «оценка лишь заполняет пробел» — автоматический анализ после импорта посещает только позиции, не имеющие никакого анализа, а Повторно проанализировать устаревшие позиции оставляет нетронутой любую позицию с импортированным анализом (см. Конфигурация).

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

  • Чего blunderDB не записывает никогда: пересчитанную удачу — она читается из исходного файла либо остаётся неизвестной — и роллаут, данные которого он не открывает в файле .xg и который не умеет производить.

Подборка может быть живой: её содержимое — уже не собранный вручную список, а результат поиска, пересчитываемый при каждом открытии. Кнопка ◇ в заголовке подборки делает её живой по последнему выполненному поиску; ◈ говорит, что она уже такова, и та же кнопка возвращает ей список. Ничего не разрушается: позиции, которые она содержала, останутся на месте при возврате.

Живая подборка, чей запрос несёт токен, которого эта версия уже не знает, отказывается открываться и говорит об этом, вместо того чтобы вернуть всю базу. Это единственная поломка, которой не должно быть у сохранённого фильтра: молча расшириться.

Панель матчей

Панель Матчи (CTRL-Tab) содержит список импортированных матчей. Дважды щёлкните на матче (или нажмите ENTER) для навигации по его ходам. Команда m возобновляет навигацию по последнему посещённому матчу.

Пользователь может:

  • просматривать ходы матча с помощью клавиш ВЛЕВО и ВПРАВО,

  • переключаться между партиями с помощью клавиш PageUp и PageDown,

  • отображать анализ ходов (шашки и куб) нажатием CTRL-L,

  • переключаться между анализом ходов шашками и куба клавишей d,

  • видеть фактически сыгранный ход, выделенный в анализе,

  • искать среди позиций матча командой ss (напр.: ss E>80); затем Esc возвращает к изучаемому ходу (см. Панель поиска).

Последняя посещённая позиция в каждом матче запоминается и восстанавливается автоматически. Нажмите CTRL-Tab или выполните команду match для отображения или скрытия панели.

Кнопка ⊕ в строке дополняет этот матч из файла. За ней нет ничего нового: повторный импорт того же матча в другом формате уже дополняет его на месте — каноническая свёртка узнаёт, что это тот же матч, и анализы и комментарии второго файла дополняют первый. Кнопка добавляет лишь то, что её находят: никто не догадывается, что импорт — это ещё и дополнение. Следующий отчёт говорит, что именно произошло: «дополнено: 1», а не «импортировано: 1».

Каждый матч можно экспортировать в транскрипцию Jellyfish .mat с помощью кнопки ⬇ в списке матчей или кнопки .mat в карточке матча.

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

Заголовок каждой партии считает её отметки, развёрнута она или нет: не открывая её, видно, в какой партии находятся бландеры.

Кнопка Объединить игроков на панели инструментов этой панели открывает окно со списком всех имён игроков в базе и числом их матчей: выберите варианты написания одного и того же игрока, укажите каноническое имя для сохранения, затем объедините. Полезно для унификации статистики по игроку, когда один игрок фигурирует под несколькими именами.

Когда матч открыт, над доской появляется информационная панель: она напоминает об играющих сторонах (игрок 1 против игрок 2), а также о контексте матча (событие, место, раунд, дата и длина матча, если эти сведения доступны). Эта панель отображается и вне режима матча: когда изучаемая позиция (полученная из поиска, коллекции или прямого доступа) происходит из одного или нескольких матчей, она указывает её происхождение — первый соответствующий матч и, при необходимости, бейдж «+N», перечисляющий остальные при наведении. Позиция, импортированная отдельно и не связанная ни с одним матчем, ничего не показывает.

Вкладки Поиск и Eval заменяют доску рабочей доской: баннер над доской сообщает об этом («Доска поиска», «Доска оценки»), а информационная панель скрывается, пока она описывала бы позицию, которой нет на экране. Возврат к анализу восстанавливает изучаемую позицию.

При открытии базы данных, содержащей матчи, панель Матчи отображается сразу же, а разбор начинается прямо с первой позиции, чтобы можно было немедленно приступить к навигации.

Примечание

Базу данных можно открыть на запись только в одном окне одновременно. Если вы открываете базу, уже открытую в другом окне blunderDB, она открывается в режиме только для чтения: навигация, поиск и анализ остаются возможными, но любые изменения отключены, а в строке заголовка отображается «[только чтение]».

Совет

Смотрите Горячие клавиши для доступных горячих клавиш.

Панель записи

Панель Запись (CTRL-SHIFT-T, команда transcribe или tr) служит для набора матча, который перед вами — бланка матча, видеозаписи, — чтобы сделать из него матч библиотеки. То, что набирается, — это черновик: он живёт в базе, закрывается и открывается снова и не попадает ни в статистику, ни в поиск, пока не сохранён как матч.

Панель открывается списком черновиков базы: последнее изменение, игроки, длина матча, число действий и уже созданный матч (# и его идентификатор) либо пометка «нет матча». Щелчок открывает черновик, а кнопка Черновики на панели возвращает к списку. Кнопка Новая транскрипция раскрывает форму создания.

Список проходится и с клавиатуры: ВНИЗ и ВВЕРХ (или j и k) двигают подсветку, ВВОД открывает подсвеченный черновик, n раскрывает форму. Первый черновик подсвечен при открытии, и это самый недавно изменённый: возобновить вчерашнюю работу стоит, таким образом, двух клавиш — CTRL-SHIFT-T, затем ВВОД.

Форма спрашивает одно: длину матча. Значение 0 означает партию на деньги и открывает флажки Jacoby и Beaver. Поле открывается с длиной последнего изменённого черновика или со значением 7, если в базе нет ни одного. Имена игроков не запрашиваются: черновик называет стороны Игрок 1 и Игрок 2, а список показывает «Без названия».

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

Панель черновика в верхней части вкладки содержит только действия, выводящие черновик за его пределы, две стрелки отмены и ориентацию доски.

Игрок 1 остаётся внизу доски, кто бы ни был на ходу. Транскрибируемый матч — это разворачивающаяся партия: ход переходит при каждом полуходе, и следовать за ним значило бы переворачивать доску от хода к ходу — только что рассмотренные шашки уходили бы наверх, и глаз проделывал бы путь заново при каждом броске. Кто на ходу, читается по кубикам, которые меняют сторону. Кнопка ⇅ на панели переворачивает доску и показывает игрока 2 внизу; она не изменяет черновик, и при закрытии отображение возвращается в исходное положение. Не путать с кнопкой Поменять игроков в разделе метаданных, которая меняет местами двух игроков в самом документе.

Кнопка Метаданные на панели в любой момент раскрывает заголовок черновика: имена обоих игроков — с автодополнением из игроков базы, — событие, место, раунд, дату (по умолчанию сегодняшнюю), расшифровщика (по умолчанию пользователя базы) и турнир, к которому матч будет привязан при сохранении. Ни одно поле не обязательно: черновик без имён так же сохраняется и экспортируется, с пустыми заголовками. Кнопка Поменять игроков местами меняет местами оба имени, передаёт все действия противоположной стороне и переворачивает доску: это тот же матч, прочитанный с другой стороны.

Длину матча можно изменить в той же панели в любой момент: счёт, игра Кроуфорда и система отсчёта — игра на деньги, если длина равна 0, и тогда появляются флажки Jacoby и Beaver — пересчитываются от начала до конца черновика, а действия, записанные после победы, помечаются как «после конца», причём ни одно из них не удаляется. Длина входит в идентичность позиции: если после сохранения изменить её и сохранить снова, будут записаны совершенно новые позиции, требующие анализа, а старые исчезнут, как только их больше ничто не удерживает.

Под панелью черновик занимает три области: палитру мишеней для мыши, ходы-кандидаты и запись. Они располагаются по ширине вкладки. В широкой вкладке — нижнем доке — все три стоят рядом, палитра слева. В средней вкладке кандидаты занимают верх, а запись встаёт рядом с треугольником бросков, в том месте, которое он оставляет справа от себя. В узкой вкладке все три следуют друг за другом: кандидаты, палитра, запись — там треугольник и запись не помещаются рядом, не отрезав у записи второй столбец, и достаточно расширить док на несколько десятков пикселей, чтобы свести их вместе. Во всех случаях правило одно: между двумя клетками броска и первой строкой кандидатов ничего не вклинивается, и не менее пяти кандидатов читаются без всякой прокрутки.

Палитра показывает обе кости по мере их ввода; щелчок по ним стирает их, как BACKSPACE. Партия начинается с первого хода, который делает победитель стартового броска: две его кости набираются как этот бросок — кость игрока 1, затем кость игрока 2, и бо́льшая отдаёт ход своей стороне, которая играет обе кости. Затем ход выбирается среди кандидатов, как любой другой. Равные броски, перебрасываемые за столом, не записываются; первый ход, набранный дублем, записывается как есть и отмечается «несогласованные кости», поскольку стартовый бросок дублем не бывает, а дабл куба до первого хода отмечается «невозможное действие куба». Действие с кубом, записанное после конца партии, получает ту же отметку: оно остаётся в завершённой партии, не открывает новую и удаляется вручную.

Как только падает вторая кость, перечисляются все допустимые ходы броска, упорядоченные встроенным движком, первый предварительно выбран, а его стрелки положены на доску. Список даёт ход, его эквити и отставание от лучшего: транскрибировать — значит узнать увиденный ход, а не судить его; для этого есть панель Оценка. Этот порядок есть оценка: он показывается и никогда не пишется в базу. Когда движок недоступен, ходы перечисляются без порядка, и список говорит об этом в своей шапке.

Колесо выбирает следующего или предыдущего кандидата — как над списком, так и над доской: взгляд остаётся на доске, а стрелки прокручиваются, что узнаёт ход быстрее, чем чтение его нотации. Щелчок по строке выбирает её, двойной щелчок подтверждает.

Треугольник из двадцати одного броска расположен под двумя клетками броска, рядом с клавиатурой, а не вместо неё: две цифры по-прежнему вдвое быстрее щелчка, а треугольник существует для того, кто записывает партию с рукой на мыши. Одна клетка на бросок, никогда не две: 3-1 и 1-3 — это один и тот же бросок.

Ход, сыгранный на доске, избавляет от чтения костей. Пока не введена ни одна кость, щелчок по шашке, а затем по её цели — или перетаскивание от одной к другой — играет ход на доске в пределах законных ходов; цели, которые предлагает выбранная шашка, подсвечиваются. Обе кости выводятся из шагов: сыграть 13/7, затем 8/7 означает 6-1, хотя ни одна цифра не была набрана, и действие записывается, как только ход завершён. Backspace отменяет последний шаг, цифра оставляет ход и возвращает к вводу костей, а двойной щелчок вне доски начинает его заново. Когда один и тот же ход дают несколько бросков — выброс, который покрывают несколько костей, или неиграбельная кость — ничего не записывается, и в треугольнике остаются нажимаемыми только эти броски: бросок никогда не угадывается за того, кто смотрит партию.

Когда обе кости введены, доска тоже играет — в пределах законных ходов этого броска, в конце документа так же, как на пересматриваемом действии, кости которого загрузил курсор. Каждый сыгранный шаг оставляет в списке только варианты, которые его содержат, и первый из них выбран заранее: это жест для далёкого хода, там, где спуск к двенадцатому варианту стоит тринадцати нажатий. Завершённый законный ход записывается сразу, с костями в том порядке, в каком их набрали; на пересматриваемом действии он заменяет это действие.

Недопустимый ход транскрибируется таким, каким он был сыгран, без кнопки и без смены режима. Когда кости введены, перетаскивание, которого не предлагает ни один законный ход, ставит шашку туда, где её отпустили, — даже из пункта, откуда не идёт ни один законный ход, если на нём стоит шашка стороны, делающей ход. Тогда ход выходит за правила: остаток играется свободно, щелчком или перетаскиванием, список вариантов уступает место строке, которая об этом напоминает, и ничего не записывается до ВВОДА, который записывает введённые кости, шаги и полученную доску. Backspace отменяет последний шаг; отмена единственного шага вне правил возвращает список. Без введённых костей перетаскивание остаётся ограниченным: недопустимый ход не говорит, каким броском он получен.

Ход можно набрать и с клавиатуры, прямо в транскрипте. Двойной щелчок по ячейке хода — или танца, незаписанного хода — превращает её в поле, заполненное её нотацией. В нём набирается только ход, 13/7 8/7*, bar/22 или 6/off: кости — те, что в ячейке. ВВОД записывает его вместо записанного хода, ESC закрывает ячейку, ничего не записав, а текст, в котором нет ни одного хода, оставляет поле открытым. Пунктирная ячейка текущего ввода открывается так же, как только обе её кости введены.

Ход, введённый свободным перетаскиванием или нотацией и оказавшийся допустимым, остаётся обычным ходом — сравнение делается по полученной доске, а не по происхождению жеста; иначе он помечается «недопустимый ход» в транскрипте, а экспорт .mat предупреждает перед записью файла, никогда не отказывая.

На строке костей ряд Удвоить, Принять, Пас, Сдаться переносит на мышь четыре жеста куба: вместе с двумя костями это пять возможных ответов на один-единственный вопрос — что сделала сторона, которая ходит? Ряд говорит, чей черёд: сторона, которая ходит, объявляет — удвоить, сдаться, — либо противная сторона отвечает — принять, пас; никогда все четыре разом, и кнопка, чей жест ни на что не отвечал бы, остаётся погашенной. Клавиатура же не отказывает никогда: погашенная кнопка — это цель, которую не предлагают, а не запрещённый жест. «Сдаться» пока ничего не записывает: ряд превращается в три уровня — простой, гаммон, бэкгаммон — и «Отмена», дублирующую клавишу ESC. Куб, нарисованный на доске, — вторая цель этих жестов: щелчок по нему предлагает дубль. Перед предложением он не отвечает: принятие и пас — два симметричных ответа, и они живут вместе в ряду, по щелчку каждый.

Строка состояния говорит одним словом, чего ждёт черновик: записанный сам собой «танец», первый ход партии, ожидаемый ответ на дубль, ожидаемый уровень после сдачи, исправление на месте, ход «к пересмотру», у которого изменился бросок. Там же она отвечает жестам, которым нечего делать, — «нечего отменять», «под курсором нет действия» — в течение полутора секунд. Несогласованность же, оставленную действием, отмечает шапка транскрипта, там, где стоит ошибочная ячейка.

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

Счёт партии — тот, что дают предыдущие партии, если только за столом не был заявлен другой. Двойной щелчок по счёту в заголовке партии, в транскрипте, превращает его в заполненное поле: в нём набирается счёт, при котором партия была сыграна, — 3-2, 3–2 или 3 2, — ВВОД записывает его, ESC закрывает поле, ничего не записав, а очищенное и подтверждённое поле возвращает выведенный счёт. Партия играется при этом счёте: партия Crawford, конец матча и следующие партии вытекают из него, и сохранённый матч, как и файл .mat, его несут. Счёт, отличный от выведенного, отмечается, подсказка называет выведенный, а первое действие партии несёт несогласованность «несогласованный заявленный счёт». В игре на деньги счёта для заявления нет.

Транскрипт занимает правую половину панели: по столбцу на игрока, по строке на ход, действие куба и конец партии — в столбце того, кто действует. Ячейка курсора обведена; перемещение курсора возвращает доску к позиции указанного действия и показывает его кандидатов с выбранным записанным ходом. Несогласованность (недопустимый ход, двойной ход, невозможное действие куба, действие за концом матча, несогласованные кости, незаписанный ход, несогласованный заявленный счёт) украшает свою ячейку и называется во всплывающей подсказке. Незаписанный ход — случай перечитанного файла .mat: gnubg пишет там ???, когда не сохранил сыгранный ход; бросок известен, а ход нет, и постановка курсора на эту ячейку предлагает ходы этого броска, чтобы её заполнить. Двойной ход оставляет пустую ячейку в пунктирной рамке в столбце той стороны, чей ход пропущен: курсор на ней останавливается, щелчок переводит его туда, и именно там набирается пропущенный ход — например, удалённое решение. Партии сворачиваются; та, где курсор, открыта.

То, что набирается, рисуется в транскрипте пунктиром — ровно на том месте, где будет записано: кости по мере их ввода, нотация хода, как только он выбран, и в столбце той стороны, которой принадлежит действие. Исправление накрывает заменяемую ячейку, вставка открывает ячейку между двумя соседними, новый ввод появляется внизу текущей партии. До подтверждения в черновик ничего не пишется; прочитанное и то, что скажет документ, никогда не расходятся.

Исправлять — значит печатать в той ячейке, где находишься. Когда курсор стоит на действии, цифра начинает его бросок заново на месте, и четыре действия куба тоже работают как исправления: на пасе t — или кнопка Принять — пишет принятие вместо паса, без того чтобы удалять его и затем вставлять. Партия тогда продолжается: сразу после принятия открывается ячейка на стороне предложившего дабл, и продолжение партии набирается там как обычно, вставляясь перед первым ходом следующей партии, пока партия не закончится. Те же клавиши заполняют ячейку, только что открытую вставкой: i, затем d вставляет дабл перед указанным действием. Этот первый ход сохраняет счёт, с которого начиналась его партия, теперь как объявленный: если конец продолженной партии даёт другой, расхождение отмечается.

Вернуться на последнее действие — значит вернуться туда, где пишется запись. Цифра, набранная на нём, ещё исправляет его бросок, но как только этот бросок набран заново, следующая цифра подтверждает действие и открывает следующее решение; ВВОД подтверждает его так же. Последующие решения тогда добавляются следом, как в первый раз.

Ввод другого броска на первом ходе партии заново решает, кто начинает: кубик игрока 1 вводится первым, кубик игрока 2 — следом, и побеждает больший — большой кубик первым, ход достаётся игроку 1, внизу доски; малый первым — игроку 2, вверху. Первый кандидат нового броска выбирается заранее, и ход нужно проверить. Повторный ввод того же броска, в любом порядке, ничего не меняет. Чтобы отдать первый ход другому игроку, не меняя броска, служит s: порядок кубиков следует за стороной, а первый ход стороны, которую этот порядок не называет, отмечается «несогласованные кубики». Остальная партия сохраняет свои стороны.

Вставка в середине документа продолжает вставлять: подтверждение открывает следом пустую ячейку, и следующее действие также вставляется, а не затирает идущее за ним. Именно это позволяет дописать весь конец партии — пас, который должен был быть принятием, — не потеряв того, что уже набрано из следующей партии. Конец партии или перемещение курсора прекращает вставку: курсор тогда встаёт на первый ход следующей партии.

Del (или x) убирает редактируемое решение и возвращается к предыдущему, готовому к исправлению: на записанной ячейке действие исчезает; на открытой вставке или броске, набранном в конце документа, отменяется сам ввод. Нажимая Del раз за разом, так поднимаются по транскрипту, стирая. Последующие действия сохраняют свою сторону, а двойной ход, оставленный удалением, отмечается, но курсор к нему не возвращается.

Щелчок правой кнопкой по ячейке открывает исправления этого действия — вставить до, вставить после, удалить, сменить сторону — и по пути приводит туда курсор; это те же жесты, что и клавиши i, a, x и s, и меню браузера убрано только там. В других местах у них нет кнопок: кнопка, действующая на «действие под курсором», целилась бы в ячейку, которую можно и не видеть, тогда как правый щелчок называет свою.

Панель черновика несёт два его единственных выхода. «Завершить» (CTRL-ENTER) записывает матч в библиотеку и освобождает черновик; анализ одних лишь новых позиций стартует сразу, с ходом выполнения и отменой в строке состояния. «Отказаться» удаляет черновик без матча; подтверждение запрашивается только для черновика, ни разу не завершённого, поскольку он уносит всё, что в нём записано. Рядом панель сообщает, что сделает «Завершить» — новый матч или замену матча №n. О сохранности самого черновика она ничего не говорит: он записывается в базу после каждого действия, а возврат к списку оставляет его для продолжения позже.

«Текст .mat» открывает файл Jellyfish таким, каким он был бы записан, в окне, достаточно широком, чтобы его столбцы остались выровненными, с кнопкой для копирования. «Экспорт .mat» пишет тот же файл на диск. Две стрелки ↶ и ↷ отменяют и возвращают, как CTRL-Z и CTRL-SHIFT-Z.

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

Черновик с несоответствиями всё равно завершается, после предупреждения: ничего не отклоняется. Недопустимый ход экспортируется так, как он был сыгран, с предупреждением, что gnubg и XG отметят его («Invalid move») и затем разойдутся.

Панель Матчи напоминает о каждом черновике в работе над списком матчей: строка «Черновик в работе» открывает вкладку Запись.

Чтобы исправить матч библиотеки, кнопка ✎ списка матчей или «Редактировать запись» в его карточке открывает черновик из этого матча — или заново открывает уже открытый на нём: один черновик на матч. Завершение этого черновика заменяет матч под тем же идентификатором; позиции неизменённых действий сохраняют свои комментарии, анализы и карточки. Импортированный матч (XG, GnuBG, BGF) несёт анализы и комментарии, которых нет в .mat: перед открытием диалог сообщает, до скольких, и что завершение черновика может их потерять.

Совет

Смотрите Горячие клавиши для доступных горячих клавиш.

Панель турниров

Панель турниров

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

Панель Турниры (CTRL-Y) группирует матчи в турниры для организованного отслеживания и статистического анализа по событиям. Турниры можно создавать, переименовывать и удалять; матчи можно назначать им. Статистика панели Stats может фильтроваться по турниру. Нажмите CTRL-Y для отображения или скрытия панели.

Турниры заполняются сами при импорте. Файлы XG, GnuBG и BGF называют своё событие; при импорте нового матча blunderDB относит его к турниру с этим именем и создаёт турнир, если его ещё нет. Дата и место турнира остаются пустыми — здесь они и заполняются. Матч, уже находящийся в базе, никогда не переносится: повторный импорт его файла не отменяет расстановку, сделанную вручную.

Столбец PR каждого турнира показывает PR основного игрока — то есть игрока, участвующего в наибольшем числе матчей турнира (при равенстве — того, кто принял больше решений). Таким образом, PR не смешивает вашу игру с игрой соперников: для ваших собственных турниров он отражает только вашу результативность. Имя основного игрока показывается во всплывающей подсказке при наведении на значение.

Проведение турнира

blunderDB умеет проводить турнир, а не только хранить его. Проведение обеспечивает движок Nicomaque Николя Армана: он держит формат, жеребьёвку, сетки и итоговую таблицу; blunderDB даёт ему интерфейс и хранит его матчи. Кнопка ⓘ на панели напоминает об этом и ведёт к репозиторию и документации движка.

Проводимый турнир выбирается на панели Панель турниров (CTRL-Y, команда direct): открыть турнир, затем Проводить этот турнир. У уже проводимого турнира рядом с названием показано состояние, а кнопка становится Открыть. Пока проведение открыто, основная область показывает турнир вместо доски — единственное исключение blunderDB из этого правила; переход на любую другую вкладку возвращает доску.

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

Всё решённое пишется в журнал, и больше ничего. Таблица, сетки, предложения и предупреждения воспроизводятся из этого журнала при каждом открытии: отключение электричества не стоит ничего, а исправление никогда не стирает случившееся — оно добавляется.

Страница проведения

Здесь директор проводит большую часть времени. Сверху вниз: предупреждения движка, которые остаются на виду и никогда ничего не блокируют; сетка столов, в заголовке которой находится кнопка Напечатать лист жеребьёвки; последнее решение; очередь предложений; и свободные игроки. Сетка идёт перед очередью: длинная очередь никогда не вытесняет её с экрана.

Вид занимает всю ширину основной области, и каждая вкладка прокручивается отдельно: если покинуть вкладку и вернуться или перейти от одного турнира к другому, восстанавливается позиция, на которой её оставили. Кнопки и поля имеют высоту не менее 40 пикселей, чтобы в них попадать без точности за столом; число столбцов сетки зависит от ширины области, а не окна. В Настройках каждый раздел сворачивается до заголовка, а кнопка Открыть в браузере в шапке открывает настенную страницу одним щелчком, как только выбрана папка вывода.

Предложенный тур можно объявить до запуска: Следующий тур… рядом с Напечатать лист спрашивает дату и время для печати («понедельник 21.09, 20:00») и печатает лист пар из очереди с пометкой «объявлен». Ничего не запускается и не пишется в журнал: тур запускается в свой день, в своё время. У пары, ждущей свободного стола, вместо номера стола стоит прочерк.

Вверху вида турнира полоса часов умещается в одну строку: время, время с запуска первого матча, сыгранные и идущие матчи, наблюдаемый темп в минутах на очко против планового, медленные матчи, следующий перерыв и ожидаемый конец. Ожидаемый конец — это прогноз движка: он воспроизводит журнал, доигрывает турнир пятнадцать раз в плановом темпе, и полоса показывает медиану, сдвинутую за объявленные перерывы. Поэтому ночь, не объявленная перерывом, считается игрой. Время не сегодняшнего дня показывается со своим днём.

Со второго дня прошедшее время уступает место игровому дню (день запуска первого матча — день 1) и игровому времени: времени, когда шёл хотя бы один матч, без ночей и промежутков, когда не играл ни один стол. У закрытого турнира полосы часов больше нет.

Предложение подтверждается одним щелчком по Запустить. Запустить всё подтверждает в два щелчка предложения, у которых есть стол, показав сначала их список; Подтвердить стоит в начале этого списка. Пары без стола остаются в очереди с пометкой «нет свободного стола»: в режиме раундов раунд остаётся открытым, пока в нём не заняты все его игроки. «Пропустить пока» ничего не пишет: движок детерминирован, и предложение вернётся тем же при следующем обращении. Составить пару вручную доступно всегда — движок предлагает, директор решает.

Матч, составленный вручную без номера стола, получает первый свободный стол; стол, за которым идёт матч, отклоняется. Если все столы заняты, матч всё равно начинается, а его ячейка появляется в конце сетки как «без стола», пока его не переведут за стол.

Предложение может нести замечание движка: нет свободного стола или ожидаемое окончание матча приходится на перерыв. В обоих случаях его по-прежнему можно запустить. Когда фаза работает микротурами, очередь показывает время до следующей партии; по наступлении срока предложения появляются сами, и ничто не запускается самостоятельно.

Карточка результата

Щелчок по занятому столу открывает карточку матча. В ней две крупные цели: имена двух игроков. Щелчок по победителю записывает результат — два щелчка всего, включая стол. Победитель — единственное обязательное; счёт свободен: один, оба или ни одного. С клавиатуры ВЛЕВО или ВПРАВО выбирает победителя, а ВВОД записывает его. Карточка закрывается, только когда результат записан: при ошибке она остаётся открытой, с сообщением.

Кнопка ⋯ карточки раскрывает то, что нужно редко: неявку (форфейт) — каждая кнопка называет отсутствующего и того, кто выигрывает —, свободное примечание («вышло время», «прекращён по причине…»), перенос матча за другой стол и его отмену. Неявка и отмена подтверждаются. При переносе за занятый стол матч меняется столом с тем, кто его занимает: два матча никогда не делят стол, и тот же жест возвращает их на место. Если старый журнал оставил два матча за одним столом, сетка показывает обе ячейки с пометкой, пока один из матчей не перенесут.

Замеченную сразу ошибку ввода можно вернуть в два щелчка под сеткой: Исправить последнее решение, затем правильного победителя (CTRL-Z открывает ту же правку). Более старое исправление делается из истории.

Контекстные меню

Щелчок правой кнопкой, клавиша MENU или SHIFT-F10 на объекте страницы Direction открывает его обычные действия без обращения к карточке: ячейка сетки (свободная или занятая), игрок (вкладка Игроки, свободные игроки), место сетки, место, предложение очереди, строка истории. Меню открывается на объекте; UP и DOWN перемещаются по нему, ВВОД выбирает, ESC закрывает его и возвращает фокус объекту.

  • Занятая ячейка: ввести результат, неявка одного или другого, сменить стол (выбор занятого стола меняет два матча местами), отменить матч, история каждого игрока.

  • Свободная ячейка: начать здесь выбранную пару, вывести стол из эксплуатации или вернуть его в эксплуатацию (столы мероприятия). Стол, зарезервированный для другого состязания, ничего не предлагает.

  • Игрок: ввести результат его текущего матча, перейти к его столу, история, назначить вручную с другим свободным игроком, перейти в другой турнир, где он тоже играет, отметить отсутствующим или присутствующим, снять сейчас или после его матча, заявить заново, исправить данные.

  • Место без матча: привязать импортированный матч, которого ждёт это место.

  • Пара: начать, начать за столом…, изменить длину…, составить пару иначе (эти три пункта открывают ручное назначение с двумя игроками, длиной и столом пары), пока игнорировать, распечатать лист тура.

  • Строка истории: исправить или отменить, добавить примечание, отфильтровать по одному из игроков.

Неявка, отмена матча и снятие игрока сохраняют подтверждение, которое у них есть в карточке и на кнопках строк. Пока действие выполняется, пункты, которые что-то делают, затемнены, как и кнопки. Одновременно открыто только одно меню: открытие второго закрывает первое.

С клавиатуры сетка занимает лишь одну остановку TAB: каждая ячейка, в том числе свободная, получает фокус, а LEFT, RIGHT, UP, DOWN, HOME и END переходят от ячейки к ячейке. Цифра открывает карточку стола с этим номером; для стола больше 9 вторая цифра вводится в течение 0,4 с. M открывает карточку на поле стола, и X тоже, открыта карточка уже или нет: выбор занятого стола меняет два матча местами.

Мышью занятая ячейка перетаскивается на другую: на свободную ячейку матч переходит на другой стол; на занятую строка «Стол 3 ↔ стол 7?» просит подтвердить обмен двух матчей. Призрак следует за указателем, целевая ячейка обводится; ESC отменяет жест, и ничего не записывается, пока указатель не отпущен над ячейкой. Стол, выведенный из эксплуатации, отклоняется, а строка состояния называет причину. В командной строке blunderdb tournament move выполняет то же перемещение или обмен (см. Интерфейс командной строки (CLI)).

Полный экран

Клавиша F11 на странице «Руководство» или кнопка внизу справа переводит её в полноэкранный режим: панель инструментов, вкладки, доска, панель и строка состояния исчезают, а всё окно отдаётся руководству турнира. Режим сохраняется при переключении вкладок руководства (Руководство, Игроки, История, …). Открытое меню или карточка сначала закрываются клавишей ESC; второе нажатие ESC или F11 выводит из полноэкранного режима и возвращает окну прежнее состояние. Выход со страницы, сменой вкладки приложения или закрытием руководства, также завершает режим.

Быстрый поиск

Клавиша / на странице Direction открывает палитру только на турнире: игроки, столы, идущие матчи и состязания открытого мероприятия, а если состязание не входит ни в одно мероприятие — только его. Вводится имя, клуб или номер стола («4» или «t4»); игроки за столом идут раньше свободных. ВВОД ведёт к объекту: игрок в матче, матч или занятый стол открывают карточку стола, свободный стол получает фокус в сетке, свободный игрок показывается на вкладке Игроки, отфильтрованный по имени, состязание становится текущей вкладкой. Результат из другого состязания мероприятия сначала переключает состязание. ESC закрывает, ничего не открывая, а в поле ввода клавиша остаётся косой чертой. CTRL-SHIFT-P открывает полную палитру, где турнир тоже есть.

Игроки

Вкладка Игроки записывает, исправляет и снимает. Поле записи сохраняет фокус и очищается после каждого имени: двадцать игроков записываются с одной клавиатуры. Автодополнение предлагает игроков базы; выбор одного закрепляет точное написание, которое несут его матчи, и подставляет его PR как рейтинг.

Справочник собирает участников всех проводимых турниров базы, без повторов по имени, с клубом и рейтингом их последней записи. Он никогда не хранится: удаление проведения убирает из него его участников. Взять участников предыдущего турнира — один щелчок, сколько бы их ни было; справочник копируется в CSV или сохраняется в файл (Сохранить…) и читается обратно из буфера.

Парный турнир регистрирует пары: флажок Пара добавляет имя, клуб и рейтинг партнёра. Пара играет под именем «A / B», которое носят и её матчи; её рейтинг — среднее двух, а значение, введённое в Рейтинг пары, заменяет его. Справочник хранит двух человек, но никогда не пару.

Перед кнопкой Записать предпросмотр вставленного CSV перечисляет нечитаемые строки — без имени, без разделителя, когда в остальных строках он есть, рейтинг, не являющийся числом, — и дубликаты, внутри вставки или с уже записанным игроком. Дубликат не записывается, если не отметить его флажок.

Опоздавший, пришедший после жеребьёвки, занимает свободное освобождение от игры, если сетка его предлагает, и интерфейс пишет рядом с полем, куда он войдёт, до подтверждения. Если свободного места нет, он всё равно записывается, и вид сообщает, в какую фазу он войдёт. Уже проведённая жеребьёвка никогда не переигрывается.

Снятие происходит сейчас или после текущего матча, в зависимости от того, уходит игрок сразу или доигрывает; оно подтверждается.

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

Исправление карточки снявшегося игрока — имени, клуба, рейтинга — оставляет его снявшимся. Возвращение — отдельное действие: Вернуть в его строке. Он снова участвует в жеребьёвке, с результатами и жизнями, которые были у него при уходе; матчи, проигранные неявкой при снятии, остаются проигранными.

Сетки, места, таблица, история

Вкладка Сетки рисует сетки вместе с соединительными линиями, от первого раунда до финала, с утешительной сеткой рядом с основной и, для швейцарской системы, таблицей жизней. Группа читается как перекрёстная таблица результатов. Ещё не разыгранная сетка показывает свой серый каркас. Сыгранный матч несёт свой результат; матч, отмеченный движком, помечается на месте. Точка рядом с названием вкладки показывает, что сетка в процессе.

Щелчок по месту (или Enter на выбранном месте) открывает на нём ту же карточку, что и в сетке столов: победитель идущего матча вводится двумя щелчками, а завершённый матч исправляется щелчком по имени настоящего победителя.

Вкладка Места связывает турнир с библиотекой. Каждый матч турнира — это место, которое заполняется двумя способами: записать матч на месте (Панель записи) либо прикрепить уже импортированный матч. Ничто не прикрепляется по догадке: совпадение имён — это предложение, которое принимают, частичное совпадение даже не предлагается, а если файл прикреплённого матча противоречит записанному результату, расхождение показывается, но не разрешается — во время турнира слово директора решающее.

Вкладка Таблица показывает текущую таблицу, раздел за разделом, с итогом каждого (победы–поражения) и призами, если задан призовой фонд. Двое с равным результатом делят место и приз. Снявшийся игрок сохраняет место, которое ему принёс его путь, с пометкой «снялся» и своим итогом или местом в сетке, где он остановился. Закрыть турнир фиксирует итоговую таблицу. Таблица копируется в CSV на языке интерфейса или сохраняется в файл: Сохранить… открывает системный диалог с предложенным именем — турнир, слово «таблица» и сегодняшняя дата, — и файл содержит ровно скопированный CSV. В командной строке blunderdb tournament standings выводит тот же CSV.

Закрыть турнир без идущих матчей — один щелчок. Если матчи идут, Таблица говорит, сколько их, и ждёт второго щелчка на месте: закрытие фиксирует таблицу без них, и их результат больше не вводится. Открыть снова подтверждается так же; итоговая таблица тогда перестаёт быть итоговой, а повторное открытие остаётся в журнале.

Вкладка История — это журнал открытым текстом: одна строка на решение, по порядку, с фильтром по игроку или матчу. Это то, что директор перечитывает после спора, и там же старое решение исправляется или комментируется.

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

Настройки

Вкладка Настройки открывается именованными форматами: шесть готовых клубных турниров, первый из которых рекомендован. Выбрать один достаточно, чтобы начать; поля остаются изменяемыми и потом.

Здесь настраиваются: фазы и длина их матчей, длина по турам для сетки («15, 13, 11» читается от последнего тура назад), число столов, плановый темп в минутах на очко (по умолчанию 8; от него исходят полоса часов и ожидаемый конец), перерывы дня, призовой фонд (взнос, удержание клуба, шкала по разделам) и папка экрана.

У сетки три флажка: Утешительная (её проигравшие играют вторую сетку — отдельный раздел в таблице), Примирение (победитель утешительной играет с победителем основной сетки; флажок появляется только вместе с утешительной) и Перезарядка (при двойном выбывании победителя основной сетки нужно обыграть дважды; флажок появляется только вместе с примирением). Своя таблица у утешительной есть только при шкале призов: пока шкала раздела Утешительная пуста, Настройки напоминают об этом. Фаза Группы настраивается размером групп (по умолчанию 4) и числом проходящих из группы (по умолчанию 2).

Настройки остаются доступными во время турнира: понизить порог в 22:00, чтобы закончить раньше, добавить утешительный турнир в субботу вечером, пока жеребьёвка сетки не проведена. То, что к этому моменту зафиксировано, показано серым с указанием причины: формат открытой фазы, число выданных ею жизней и, после жеребьёвки фазы, размер её групп и число выходящих из них. Сохранение во время турнира сначала показывает список того, что изменится, и просит подтверждения. То, что движок отклоняет, указано там с причиной, и тогда ничего не сохраняется: так происходит с утешительным турниром, примирением или перезарядкой уже разыгранной сетки.

Стол со сломанной доской указывается в поле Столы вне игры: его номера через запятую («7, 12»). Движок больше его не назначает, а сетка показывает его недоступным; уменьшение числа столов убрало бы последний стол, а не сломанный. Если на столе, выведенном из игры, идёт матч, список изменений говорит об этом и называет свободный стол, куда его можно перенести из карточки матча.

Посев — необязательная возможность, по умолчанию выключенная: исследование движка приходит к выводу «без защищённого посева», что соответствует нынешней культуре нардов. Включённый, он расставляет игроков по рейтингу.

Состязания мероприятия

Несколько состязаний на одних и тех же столах — основное, спид, парное — объединяются в Мероприятие внизу Настроек: Создать и присоединить… создаёт мероприятие с числом столов, Присоединить… добавляет в него управляемое состязание. Присоединение сначала показывает, что изменится: столы состязания становятся столами мероприятия. Отсоединить от мероприятия возвращает состязание самому себе, с его журналом и столами; Удалить мероприятие, после подтверждения, отправляет его в корзину и отсоединяет состязания, не удаляя ни одного.

В мероприятии ни одно состязание не предлагает стол, за которым играет другое: сетка показывает такие столы занятыми, с названием состязания, а пара без свободного стола ждёт. Неисправный стол отмечается один раз, в мероприятии, и действует для всех его состязаний; число столов, неисправные столы и перерывы, изменённые в Настройках одного состязания, действуют и для мероприятия, а список изменений называет другие состязания.

Свойства столов задаются в панели «Мероприятие»: таблица с одной строкой на стол, с его названием (например, «Stream»), его залом (произвольная метка), флажком Зарезервирован и игроками, за которыми он Закреплён, выбираемыми среди участников состязаний мероприятия. Для сорока столов Столы с N по M, зал задаёт зал сразу для всего диапазона; Сохранить записывает только столы, имеющие какое-либо свойство, остальные остаются обычными столами. Зарезервированный стол никогда не предлагается, но матч можно поставить на него вручную — запуском, перемещением или перетаскиванием. Закреплённый стол первым получает матч своего владельца, когда свободен; иначе матч получает обычный стол, а вне матчей своих владельцев он ведёт себя как зарезервированный. Два владельца разных столов, встречаясь, играют за меньшим из двух.

Зал — это множество столов с одной и той же меткой: «зал A» для столов с 1 по 20, «зал B» для следующих. В Настройках каждого прикреплённого состязания пункт Залы, где играет это состязание отмечает залы, где оно играет: DMP в B, speed в A. Если ни один флажок не отмечен, это все столы; состязание не получает предложений вне своих залов и не может переместить туда матч. Удаление зала, где идёт матч этого состязания, отклоняется с указанием стола. Состязание, которое играет отдельно, задаёт те же свойства столов в собственных Настройках, без залов состязания.

Открытие Direction состязания мероприятия открывает и остальные: в верхней части Direction появляется вкладка на каждое состязание, у каждой — своя сводка: ожидающие предложения, идущие матчи, предупреждение, если оно есть. Переключение состязания — один клик по его вкладке, без подтверждения; оставленное состязание не закрывается и не переигрывается заново, оно остаётся точно таким, каким его оставили. У турнира вне мероприятия только одно состязание: показывать вкладку не нужно.

Вкладка Все столы слева от состязаний показывает все столы мероприятия в одной сетке: одна ячейка на стол, какое бы состязание его ни занимало, с названием и цветом своего состязания. Карточка результата, контекстные меню, клавиатура и перетаскивание работают там так же, как в сетке состязания, и каждый жест адресован состязанию ячейки. Перетаскивание матча на стол, занятый другим состязанием, меняет два матча местами после подтверждения, в котором названы оба состязания. Под сеткой предложения всех состязаний сгруппированы по состязаниям, у каждого своя кнопка Запустить. Щелчок по состязанию или по вкладке вида покидает Все столы.

Когда в мероприятии несколько залов, сетка группируется по залам, под названием каждого. Название стола показывается рядом с его номером, с флажком для зарезервированного стола и звёздочкой, за которой следуют владельцы, для закреплённого стола; предложения тоже называют стол.

Один человек может играть в нескольких состязаниях мероприятия: два Участника с одинаковым именем — один и тот же человек, а в паре парного состязания учитывается каждый из двух её членов. Пока он играет в одном состязании, остальные его не предлагают, и их список Ожидают говорит, где он играет: «играет в основном, стол 4». Жеребьёвка вручную по-прежнему разрешена: матч начинается, и его клетка в сетке несёт ту же пометку.

Показ турнира

На турнир смотрят. Достаточно один раз выбрать папку экрана в настройках: blunderDB переписывает там самостоятельную HTML-страницу при каждом изменении, и страница перезагружается сама. Она открывается офлайн, на втором экране или через проектор, и не загружает никаких внешних ресурсов. Открыть в браузере показывает её сразу.

Лист жеребьёвки кладут на стол регистрации: один щелчок по Напечатать лист открывает диалог печати системы. Строка на матч — двое игроков, длина, стол, две пустые клетки для счёта — и тур из тридцати двух игроков помещается на одну страницу A4.

У мероприятия есть собственная папка вывода, выбираемая один раз в его панели Настроек той же кнопкой Выбрать папку: blunderDB записывает туда index.html — настенную страницу мероприятия (одна строка на стол, независимо от того, какое состязание его занимает, с объявленными турами каждого состязания и ссылкой на его собственную страницу), а каждое присоединённое состязание записывает свою в подпапку. Действие в любом состязании мероприятия заново создаёт настенную страницу; собственная папка присоединённого состязания сохраняется, но игнорируется, пока оно остаётся в мероприятии.

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

Вне интерфейса подкоманда blunderdb tournament читает проведённый турнир без графического интерфейса: list, verify, standings, page и export; page --rencontre записывает настенную страницу мероприятия вместо страницы одного состязания. См. Интерфейс командной строки (CLI).

Панель Stats

Введение

Панель Stats позволяет анализировать уровень игры и отслеживать прогресс во времени на основе позиций, импортированных в базу данных. Вычисляет и отображает PR (Performance Rating) и MWC cost (Match Winning Chance cost) для всех позиций или отфильтрованного подмножества.

Панель Stats особенно полезна для:

  • определения своего уровня относительно полос уровня (Мировой класс, Эксперт, Продвинутый…) с помощью общего PR;

  • отслеживания прогресса от турнира к турниру или от матча к матчу с помощью графиков вкладки Progression;

  • выявления слабых мест: вкладка Erreurs отображает соотношение ходов шашками и решений куба, а также распределение величин ошибок;

  • сравнивать игроков базы между собой, по строке на игрока, во вкладке «Игроки» — удобно, когда следишь за целым турниром;

  • прямого перехода к соответствующим позициям щелчком по любому показателю (drill-down).

Открытие панели

Для открытия панели Stats:

  • Нажмите CTRL-D.

  • Введите команду stats или st в командной строке.

Примечание

Панель автоматически обновляется при каждом изменении фильтра. При простом переключении PR ↔ MWC статистика не пересчитывается: обе метрики вычисляются одновременно на стороне сервера.

Панель фильтров

Панель фильтров в верхней части панели позволяет ограничить вычисление подмножеством позиций.

Перспектива игрока

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

Совет

Смена игрока не приводит к потере данных; достаточно повторно выбрать предыдущего игрока в списке.

Доступные фильтры

  • Турнир(ы) — ограничение одним или несколькими турнирами. Можно одновременно выбрать несколько турниров.

  • Даты — временной диапазон (От … До). Если указана только начальная дата, включаются более поздние позиции.

  • Тип решения — Все / Ходы шашками / Решения куба.

  • Длина матча — ограничение конкретными длинами матча (1, 3, 5, 7, 9, 11, 13, 15, 21 очко). Можно комбинировать несколько длин.

Кнопка Reset сбрасывает все фильтры (кроме автоматически определённого игрока).

Примечание

Фильтры сохраняются в конфигурации blunderDB (config.yaml) и восстанавливаются при следующем запуске.

Переключение PR / MWC

Кнопка PR / MWC в верхней части панели переключает отображаемую метрику во всех вкладках.

PR (Performance Rating)

Средняя ошибка эквити на одно засчитанное решение, умноженная на 500, как это делают eXtreme Gammon и GNUbg: PR, равный 5,0, соответствует потере 0,010 эквити на решение, то есть 10 миллипунктам (mpt). Точное правило подсчёта — какие решения попадают в знаменатель, как преобразуется счёт — это правило Приложение: Модель статистики — выравнивание XG / gnuBG / blunderDB.

Полосы уровня, которые панель рисует за кривой прогресса, — это ориентир, принятый в самом blunderDB: ни одна публикация не устанавливает эти пороги авторитетно. Верхняя граница каждой полосы не включается: PR, равный 4, — это Продвинутый, а не Эксперт.

Уровень

PR

Мировой класс

< 2

Expert

2 – 4

Продвинутый

4 – 6

Средний

6 – 9

Любитель

9 – 12

Начинающий

≥ 12

MWC cost (Match Winning Chance cost)

Накопленная вероятность победы в матче, утраченная из-за ошибок, по всему отфильтрованному набору данных. Вычисляется с использованием MET Kazaross-XG2, встроенной в blunderDB.

Осторожно

MWC cost не применяется к позициям money-game (без ставки матча). Эти позиции исключаются из вычисления MWC. Значения MWC зависят от используемой MET; они не сопоставимы напрямую между программами, использующими разные MET.

Переключение PR ↔ MWC мгновенное: перерасчёт на стороне сервера не выполняется.

Отчёт в HTML

Кнопка Отчёт HTML в заголовке панели создаёт самодостаточный документ: один файл, без внешних изображений, без удалённых стилей, без скриптов. Диаграммы — встроенный SVG, нарисованный тем же движком, что и доска на экране, с вашей палитрой. Он открывается в любом браузере, уходит по почте и печатается в PDF самим браузером — что избавляет от встраивания генератора PDF ради того, что и так есть у всех.

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

Отчёт несёт текущий фильтр панели статистики. Отчёт, не называющий свой объём, — это отчёт, цифры которого ничего не значат: настройте фильтр — турнир, диапазон дат, игрока — прежде чем его создавать.

Вкладка Dashboard

Вкладка Dashboard даёт сводный обзор ключевых показателей.

Вкладка Dashboard панели Stats

Вкладка Dashboard: общий PR, PR по шашкам, PR по кубу.

Карточки уровня

Три карточки отображают PR (или MWC) для:

  • PR Общий — все решения (ходы + куб);

  • PR Шашка — только сыгранные ходы;

  • PR Куб — только решения по кубу.

Щелчок по карточке загружает в панель анализа позиции соответствующего подмножества (drill-down).

Примечание

Общее количество решений отображается внизу каждой карточки при наведении.

Скользящий PR за последние N решений

Строка значений PR (или MWC), вычисленных по последним N решениям (N = 5, 10, 50, 100, 250, 500, 1000), позволяет оценить последнюю тенденцию. Серые значения соответствуют N, превышающему количество доступных решений.

Щелчок по значению загружает соответствующие последние N позиций.

Топ грубых ошибок

Список 10 худших ошибок (или MWC cost), отсортированных по убыванию величины. Щелчок по строке загружает соответствующую позицию в панель анализа.

Вкладка Progression

Вкладка Progression показывает динамику уровня игры во времени.

В начале вкладки — цель: «PR < 5 за двенадцать недель». Цель, срок и тенденция, говорящая, куда вы идёте, — и ничего больше. Цель, которая начала бы оценивать, поздравлять или напоминать, была бы другой функцией, не этой.

Кнопка Предложить подсказывает цель исходя из текущего уровня: нижнюю границу вашей полосы, то есть вход в следующую. Предлагать «чуть лучше» было бы ни к чему не привязано; предложить ступень — уже что-то: переход из среднего в продвинутый виден и о нём можно рассказать.

Тенденция — это подгонка методом наименьших квадратов по PR ваших матчей, спроецированная на срок. Она отказывается высказываться менее чем по трём матчам: провести прямую между двумя точками значило бы утверждать то, что не удержишь. И фраза говорит это каждый раз — тенденция не есть предсказание.

Цель хранится в метаданных базы, а не в конфигурации: она относится к этой библиотеке и потому следует за файлом, а не за машиной. Схема не меняется: metadata уже таблица ключей и значений, читаемая и blunderdb info, и демоном.

График по турнирам

Линейный график отображает PR (или MWC) для каждого турнира (ось X: порядок турниров, ось Y: значение метрики). Цветные полосы обозначают пороги уровня.

Щелчок по точке графика открывает контекстное меню с двумя вариантами:

  • Открыть турнир — открывает турнир в панели Tournois.

  • Открыть позиции — загружает все позиции турнира в панель анализа.

Диаграмма рассеяния по матчам

Диаграмма рассеяния представляет каждый матч (ось X: дата, ось Y: PR или MWC). Размер точки пропорционален количеству решений в матче.

Щелчок по точке открывает контекстное меню:

  • Открыть партию — открывает матч в панели матчей.

  • Открыть позиции — загружает все позиции матча в панель анализа.

Вкладка Erreurs

Вкладка Erreurs разбивает источники ошибок.

Вкладка Errors панели Stats

Вкладка Errors: распределение PR по действиям с кубом.

Повторяющиеся ошибки

В верхней части вкладки таблица группирует ошибки текущего фильтра — то есть одного игрока, если выбран игрок, — по плану игры и по теме, начиная с самой дорогой. Она отвечает на вопрос «где я теряю больше всего?»: например, «удержание · слишком много блотов».

  • Ошибка — это учитываемое решение, стоимость которого достигает порога Ошибка библиотеки.

  • План игры — это план игрока, чей ход, в том виде, в каком его показывает вкладка Разбивки.

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

  • Ошибка, которую ни одно правило не называет уверенно, не угадывается: она выходит из рейтинга и появляется отдельно, под таблицей, одной строкой на каждый план игры («тема не определена: N ошибок, стоимость X»), тоже с возможностью щелчка. Этот остаток часто самый тяжёлый, потому что пояснение высказывается только от 60 mp, выше порога Ошибка: будучи ранжирован вместе с остальными, он возглавил бы таблицу, которая ничего не говорит.

  • Стоимость — доля PR фильтра, которую составляет группа: формула PR, применённая к ошибкам группы и отнесённая ко всем учитываемым решениям. Поэтому стоимость групп никогда не превышает PR.

Щелчок по группе загружает её позиции — от самой дорогой к наименее дорогой. Тема пересчитывается при каждом показе и никогда не сохраняется: как и план игры, это производная метка, которую нельзя изменить. В командной строке: blunderdb stats recurring (см. stats — Повторяющиеся ошибки).

Разбивка по действиям куба

Столбчатая диаграмма отображает PR (или MWC) для каждого типа решения куба: NoDouble, DoubleTake, DoublePass, TooGood. Каждый столбец также показывает количество решений и долю грубых ошибок в подсказке.

Щелчок по столбцу загружает позиции, соответствующие этому действию куба, только те, в которых была ошибка (drill-down).

Направление ошибок с кубом

Разбивка выше говорит, сколько стоят решения по кубу; эта таблица говорит, в какую сторону они ошибаются.

Позиция с кубом несёт два решения, принимаемые двумя разными игроками; здесь они показаны двумя строками:

  • Предложить — игрок, владеющий кубом, даблит или нет. Его ошибки — упущенные даблы (надо было даблить) и преждевременные даблы (не надо было).

  • Ответить — игрок, которому предлагают куб, берёт или пасует. Его ошибки — ошибочные пассы (правильный тейк был спасован) и ошибочные тейки (правильный пасс был взят).

Две строки намеренно разделены: игрок вполне может доблить поздно и брать широко, а единый показатель назвал бы это «сбалансированным», потеряв обе половины сведений.

В каждой ячейке — число решений; всплывающая подсказка даёт суммарно потерянную эквити. Щелчок по ячейке загружает соответствующие позиции. Ячейка с нулём не кликабельна.

Примечание

Эта таблица считает решения, а не выносит суждения. С какого расхождения тенденцию стоит называть тенденцией, зависит от объёма выборки и от точки отсчёта, а это не данные движка.

Сравнение Checker / Cube

Сравнительная диаграмма размещает рядом PR ходов шашками и решений куба. Щелчок по столбцу загружает позиции подмножества с ошибкой.

Гистограмма величин ошибок

Гистограмма распределяет ошибки по их величине в миллипунктах (mpt, диапазоны: 0–5, 5–10, 10–25, 25–50, 50–100, ≥ 100). Щелчок по столбцу загружает позиции данного диапазона.

Вкладка Разбивки

Вкладка Разбивки делит те же решения, что считают общие цифры, по четырём осям. Ни одна из них не переопределяет, что считается решением: это был бы второй PR под тем же именем.

  • По фазе игры — дебют, миттельшпиль, гонка, снятие шашек. Именно это отвечает на «мой PR в гонке против моего PR в контакте». Метка вычисляется по доске (см. Панель поиска); база, фазы которой никогда не вычислялись, относит всё к Не классифицировано, и blunderdb repair её заполняет.

  • По плану игры — гонка, блиц, якорь, бэкгейм, прайм против прайма… Это та разбивка, ради которой классификатор и существует: «где я теряю больше всего?», план за планом. Та же производная метка, что и фаза, те же оговорки, и blunderdb repair заполняет её так же.

  • По метке — #слово, написанные в комментариях. Позиция может нести несколько: эти строки не складываются в итог, и панель говорит об этом под таблицей. Метка характеризует, она не разбивает на части.

  • По счёту — недостающие очки обеих сторон, прочитанные со стороны ходящего, то есть со стороны того, кто решает. Строка Money — игра на деньги. Ячейка менее чем с десятью решениями показана серым, с видимым количеством, а не скрыта: слишком мало, чтобы читать, но пропуск остаётся проверяемым.

Примечание

Партия Кроуфорда не выделяется: blunderDB не записывает этот признак у позиции. Практический эффект невелик — в партии Кроуфорда вообще нет решений по кубу, — но пропуск реален, и его лучше записать, чем оставить на догадку.

Учёба и реальная игра

Команда blunderdb list --type study --days 30 ставит рядом три числа, план за планом: сколько различных позиций было повторено за период, каким был PR до него, каков PR с тех пор.

Три числа, и никакого четвёртого. Нет ни колонки выигрыша, ни стрелки, потому что здесь ничто ни на что не контролируется: игрок мог встретить более сильных соперников, сменить формат или просто сыграть больше гонок в этом месяце. Сопоставление — дело читателя; колонка, объявляющая эффект, утверждала бы причинность, которой эти данные не несут. Сами же числа точны.

Повторения считаются в различных позициях: карточка, повторённая четыре раза за месяц, — это одна изученная позиция, а счёт повторений превратил бы месяц зубрёжки в месяц охвата. Решения же PR считаются все — каждое было принято один раз. PR, опирающийся менее чем на десять решений, показывается как —, с видимой рядом выборкой.

Вкладка «Игроки»

Четыре предыдущие вкладки описывают одного игрока; вкладка Игроки сравнивает всех. Она показывает по строке на каждого игрока базы, что отвечает потребности организатора, следящего за целым турниром, а не за одним игроком.

Вкладка Players панели Stats

Вкладка Players: одна строка на игрока, сортируемая по любому столбцу.

Столбцы по порядку:

Столбец

Значение

Игрок

Имя в том виде, в каком оно записано в матчах. Игрок, записанный в двух написаниях, поэтому занимает две строки; чтобы их свести, воспользуйтесь слиянием игроков.

Матчи

Число матчей, сыгранных в выбранный период.

П–Пр

Победы и поражения. Незавершённый матч (обрезанный журнал, отказ от игры) не идёт ни в те, ни в другие: П + Пр может быть меньше числа матчей.

Решения

Число учтённых решений — знаменатель PR. Именно этот столбец говорит, чего стоят соседние показатели: PR, посчитанный по двенадцати решениям, не значит ничего.

PR

Общий Performance Rating.

PR шашек, PR куба

PR в разбивке по типу решения.

Snowie

Snowie Error Rate (см. Приложение: Модель статистики — выравнивание XG / gnuBG / blunderDB).

Бландеры

Число ошибок, достигающих порога бландера библиотеки (по умолчанию 0,100 EMG).

Удача

Средняя удача за бросок, в миллипунктах (mpt), со знаком: положительная, если кости благоволили.

Использование:

  • Сортировка — щёлкните заголовок столбца. Таблица открывается отсортированной по возрастанию PR, лучший игрок сверху. Игроки, у которых ничего не измерено, остаются внизу при любом направлении сортировки: ноль по причине отсутствия данных — не безупречная игра.

  • Открыть подробности игрока — щёлкните строку. Игрок выбирается в панели фильтров, а отображение переключается на вкладку Dashboard.

  • Ограничить период — фильтры дат, турниров и длины матча работают как обычно, что позволяет ограничить таблицу днями соревнования.

  • Сравнить двух игроков — отметьте флажок в первом столбце на двух строках. Над таблицей появится блок, ставящий их показатели друг напротив друга; отметка третьего игрока заменяет более раннего из двух. Флажок не выбирает строку: отметка сравнивает, щелчок открывает подробности.

В этом блоке вердикт получают только относительные показатели, и лучший из двух выделяется полужирным. Три показателя не получают его никогда, и стоит сказать почему. Везение — не достоинство: более везучий игрок не играет лучше. Матчи, баланс и решения говорят, чего стоят относительные показатели, но столкнуть их значило бы отдать победу тому, кто просто больше играл. Число бландеров не сравнивается напрямую — двенадцать на тысячу решений лучше десяти на сотню, — поэтому блок добавляет строку Бландеры / 100 реш., которая сравнивается, а само число остаётся рядом как контекст.

Ничья — не победа: полужирным не выделяется ни одна сторона. Показатель, за которым ничего нет, отображается как «—» и ничего не решает.

Примечание

На этой вкладке список Игрок и выбор типа решения отключены: таблица показывает всех игроков и уже разносит решения по шашкам и по кубу в отдельные столбцы.

Важно

Прочерк («—») означает величину, которая никогда не измерялась, и её не следует путать с нулём. Так, в частности, обстоит дело со столбцом «Удача» для любого матча, импортированного до версии схемы 2.15.0: тогда удача не сохранялась, и восстановить её задним числом нечем. Повторного импорта исходного файла недостаточно: импорт распознаёт дубликат и берёт из него только отметки. Матч нужно удалить, а затем импортировать заново. Форматы, которые её не переносят (BGF, Jellyfish .mat), не дадут её никогда.

Правило агрегации

Важно

PR турнира (или любого подмножества) вычисляется по правилу сумма/сумма — никогда как среднее PR отдельных матчей.

Формула:

\[PR_{\text{турнир}} = 500 \times \frac{\sum_{i} \text{ошибка}_i}{\text{общее количество решений}}\]

Пример: игрок проводит два матча в турнире —

  • Матч A: 10 решений, потеряно 0,100 эквити → PR = 5,0

  • Матч B: 90 решений, потеряно 0,540 эквити → PR = 3,0

Наивное среднее PR: (5,0 + 3,0) / 2 = 4,0 (неверно)

Правило сумма/сумма: 500 × 0,640 / (10 + 90) = 3,2 (верно)

Правило сумма/сумма — единственное, которое корректно учитывает различную длину матчей (матч до 21 очка весит больше, чем матч до 1 очка).

MWC: ограничения

  • MWC cost вычисляется по MET Kazaross-XG2, де-факто эталонной таблице в соревновательных нардах. Результаты не сравнимы напрямую с программами, использующими другие MET. Это та же таблица, читаемая через ту же точку входа, которой встроенный оценщик пользуется для своих решений по кубу при матчевом счёте: статистика и движок не могут здесь разойтись. Она даёт собственные значения до 25 очков, которые осталось набрать каждой стороне; дальше она продолжается таблицей Zadeh, вычисляемой так же, как у GNUbg, вплоть до 64.

  • Позиции money-game (без счёта матча) исключаются из вычисления MWC. Если ваша база данных содержит много позиций money-game, MWC cost может быть занижен или недоступен.

  • MWC cost является накопительным по всему отфильтрованному набору данных — не показателем на решение. Он измеряет суммарное влияние ваших ошибок на шансы победы.

Панель Eval

Панель Eval (CTRL-E) оценивает в реальном времени любую позицию на доске; на позиции выбрасывания она специализируется и дополнительно вычисляет EPC (Effective Pip Count). Она открывается нажатием CTRL-E, щелчком по вкладке Eval нижней панели или командой eval; прежнее имя команды, epc, тоже её открывает. Панель называлась EPC, затем Bearoff, прежде чем стать Eval, — так что именно здесь следует искать то, что прежние версии называли панелью Bearoff, ведь это имя теперь обозначает лишь вкладку настройки таблиц выбрасывания.

Панель всегда показывает единственное решение, которого требует выставленная на доске позиция — никогда два сразу, — и сопутствующие факты. Каждая величина читается в подходящей ей оси, а не в единой навязанной: вероятность выигрыша, гаммона, бэкгаммона и cubeless-эквити каждого игрока, вычисленные до броска, читаются по игрокам (нижний, верхний, затем Δ), слева от решения по кубу, пока кости не выставлены. Факты и решение остаются рядом: решение по кубу никогда не уходит под цифры, которые его обосновывают, каковы бы ни были язык интерфейса и позиция на доске. Как только кости выставлены, те же значения до броска меняют ось: они читаются для игрока на ходу, во главе списка кандидатных ходов, в виде строки курсивом до броска — не ещё один кандидатный ход, а ориентир, относительно которого читается каждый ход. Разница между этой строкой и ходом содержит удачу броска, а не заслугу хода, и потому не несёт столбца ошибки. На позиции чистого bearoff вторая таблица, всегда по игрокам и всегда присутствующая, с выставленными костями или без, содержит EPC, пипкаунт, wastage, среднее число бросков и стандартное отклонение; эти пять столбцов никогда не мигрируют. Обе таблицы расположены одна над другой и разделяют общую сетку столбцов: те же границы, те же ориентиры столбцов, единственный столбец цветных точек — они читаются как один объект в два этажа. Кнопка Добавить в базу, значок режима, указание движка (там же показана глубина последней оценки) и флажок Вызов образуют отдельную полосу, выровненную по правому краю над таблицами.

Прокручивается только список кандидатных ходов — строка до броска тоже остаётся закреплённой над ним; остальная часть панели (факты, значок, решение по кубу) всегда видна, без особой настройки размера панели.

Таблица фактов и решение вычисляются gammonNet, встроенным в приложение, без XG и gnubg. Расчёт следует за позицией, никогда не замораживая интерфейс: глубина 0-ply отображается сразу при каждом действии, затем, после полсекунды неподвижности, более глубокая оценка (2 ply по умолчанию, настраивается на вкладке gammonNet конфигурации) заменяет её в фоне — любое новое действие отменяет этот фоновый расчёт. Глубина, показанная в полосе значков или внутри значка режима на гоночной позиции, всегда та, что действительно дала показанное число, а не запрошенная; она не повторяется в каждой строке, поскольку живая оценка использует одну и ту же глубину для всех ходов. Эквити кандидатных ходов и решения по кубу следует счёту позиции: в money game она выражается в пунктах, при счёте матча — в нормализованной эквити, той же шкале, что у XG и GNU Backgammon, где выигрыш текущей стоимости куба равен +1, а проигрыш −1, — и они никогда не смешиваются в одной таблице. Заголовок столбца прямо называет её, вместо того чтобы оставлять шкалу угадывать: «Equity (money)» в money game, «Equity (match)» при счёте матча. Она учитывает живой куб: поиск оценивает каждую конечную позицию через модель куба (Яновский, измеренная эффективность) в состоянии куба данной позиции — так же, как это делают XG и GNU Backgammon в cubeful-оценке. Именно это делает видимыми при счёте эффекты gammon-go и gammon-save — при 4-away/2-away отстающий игрок играет 8/2 6/2 на открывающем 6-4, потому что его ранний дабл придаст гаммону цену матча — то, чего оценка без куба увидеть не может. Строка до броска, напротив, остаётся cubeless-эквити: это факт о позиции, а не решение. Оценка никогда не сохраняется: это расчёт, а не анализ. Щелчок по кандидатному ходу показывает его на доске стрелками, точно как в панели анализа. Неброская кнопка ? в полосе значков ведёт в репозиторий движка gammonNet; полное указание авторства (сеть Strehl, конфигурация gammonNet) приведено в разделе «Благодарности» справки.

Кнопка Добавить в базу в начале полосы значков заносит в базу позицию, стоящую на доске; CTRL-S, команда w и кнопка Сохранить позицию на панели инструментов делают то же самое. Записывается только позиция, никогда не показанная оценка; если автоматический анализ gammonNet включён, затем запускается его пакет, как после импорта. Строка состояния сообщает номер позиции, в том числе когда она уже была в базе: тогда она отмечается как импортированная отдельно, и фильтр Импортирована отдельно (s i) её находит. Панель остаётся открытой на той же доске, которая остаётся черновой: можно передвинуть шашку и добавить вариант, а выход из панели возвращает к тому, что изучалось. Кнопка неактивна, пока не открыта ни одна база или пока позицию нельзя сохранить (например, начальная позиция панели, в которой верхний игрок вывел все свои шашки); её всплывающая подсказка называет причину.

Пользователь редактирует расположение шашек на всей доске, точно как в режиме редактирования: левый щелчок ставит шашку нижнего игрока, правый — шашку верхнего. Вторая таблица, таблица гонки, появляется только тогда, когда полученная позиция — чистый bearoff (все шашки обоих игроков в своих домах); на любой другой позиции отвечает только таблица с четырьмя общими столбцами (выигрыш, гаммон, бэкгаммон, cubeless), а решение касается шашек или обобщённого куба в зависимости от того, выставлены ли кости.

В каждой таблице фактов — по строке на игрока, обозначенной его цветной точкой, чёрный игрок всегда снизу. Первая содержит, пока кости не выставлены, выигрыш, гаммон, бэкгаммон (вероятности, без знака %) и cubeless-эквити игрока; вторая, на позиции bearoff и независимо от того, выставлены ли кости, — EPC, пипкаунт, wastage (разницу между EPC и пипкаунтом), среднее число бросков и стандартное отклонение. Когда у обоих игроков есть значения для сравнения, строка Δ показывает знаковые разности (нижний − верхний: отрицательные, когда чёрный игрок впереди). Вне гоночной позиции выставление костей, таким образом, убирает сами таблицы фактов: четыре столбца, которые они несли, только что сменили ось — на игрока на ходу, во главе списка ходов.

Решение по кубу всегда имеет одну и ту же форму, откуда бы ни взялись цифры — из точной таблицы, рассчитанного режима или обычной оценки gammonNet: по строке на вариант, в порядке без дабла, дабл/тейк, дабл/пас, с его эквити в системе отсчёта позиции и отрывом от лучшего варианта. Порядок никогда не меняется, в отличие от списка ходов: у трёх вариантов есть имена, поэтому читают имя, а не ранг. Лучший узнаётся по выделению и по пустой ячейке отрыва. Если куб уже был передан, варианты читаются как без редабла, редабл/тейк, редабл/пас.

Последняя строка даёт вердикт. Он принимает четыре значения: без дабла, дабл, тейк, дабл, пас и слишком хорошо для дабла; последнее — когда разыгрывать позицию выгоднее, чем забрать очко: дабл тогда был бы ошибкой по причине, обратной простому без дабла. Это также единственное место, где панель говорит, что вердикта нет, вместо того чтобы создавать впечатление идущего расчёта:

  • нет решения — режим не имеет на него права; вердикт по кубу никогда не оценивается приближённо (см. значок оценка);

  • не оценивается при этом счёте — движок отказывается от позиции, как правило, из-за счёта за горизонтом таблицы матчевых эквити, то есть когда одной из сторон осталось набрать больше 64 очков;

  • куб у соперника и куб не в игре (Кроуфорд) — куб нельзя передать. Эквити по-прежнему отображаются, для справки, но ни у одного варианта нет отрыва: ошибка — это цена выбора, а выбора здесь нет.

В money game правила Jacoby и Beaver, действующие на позиции, отображаются под таблицей куба в виде небольших значков рядом с вердиктом, который они меняют: вердикт «без даблинга» для позиции по правилу Jacoby — это не тот же расчёт, что без него, и ничто другое на экране об этом не говорило.

Третий бейдж, Макс. куб, появляется, когда исходный идентификатор ограничивает куб — как при счёте матча, так и в money game. Он не описывает расчёт, показанный выше: встроенный оценщик не моделирует потолок, поэтому вердикт относится к свободному кубу. Именно поэтому бейдж и нужен: ограниченный куб — единственная видимая причина, по которой blunderDB и eXtreme Gammon могут вынести два разных вердикта об одной и той же позиции.

Значок режима, глубина оценки, ссылка на движок и флажок Вызов образуют отдельную полосу, выровненную по правому краю над таблицами.

Игрок на ходу и позиция куба редактируются прямо на доске, как в режиме редактирования: щелчок по прямоугольнику снятия/счёта игрока передаёт ему ход; щелчок по кубу переключает по кругу: в центре → у нижнего → у верхнего (правая кнопка мыши — в обратном порядке). Значение куба остаётся закреплённым — в money game эквити выражаются в единицах текущего куба, важен только его владелец. Анализ пересчитывается немедленно. В режиме оценки сам значок кликабелен и открывает непосредственно вкладку Bearoff конфигурации; его подсказка объясняет почему (вердикт по кубу не поддаётся оценке, ADR-0009) и как расширить точную область.

Счёт тоже редактируется прямо на доске, как в режиме редактирования: левый щелчок по прямоугольнику счёта игрока уменьшает число очков, которые ему осталось набрать, правый — увеличивает. Выход из money-счёта (-1, -1) редактированием только одной стороны автоматически выравнивает другую сторону на то же значение, вместо того чтобы оставить несогласованный счёт. На позиции bearoff в точном режиме переход от money-счёта к счёту матча оставляет вероятность выигрыша как есть (чтение из базы, верное в любой системе отсчёта), но переключает показанные эквити и вердикт по кубу на значения рассчитанного режима — точная таблица по построению money и не умеет отвечать на вопрос, заданный при счёте матча. Значок тогда становится составным («точно (победа) · рассчитано (куб)»), чтобы сказать об этом явно.

Наконец, кости редактируются тем же способом, и именно они определяют, какой вопрос задаётся: выставленные кости дают решение о ходе шашками (список кандидатных ходов), отсутствие костей — решение куба. Левый клик по кости увеличивает её значение (6 переходит в 1), правый клик уменьшает его (1 переходит в 6); клик по кости на доске, где костей нет, выставляет сразу две — одна кость не была бы ни решением о ходе шашками, ни решением куба. Клик по прямоугольнику игрока убирает кости, чтобы задать вопрос куба, а следующий клик по кости возвращает их такими, какими они были.

BACKSPACE или двойной щелчок вне доски стирает позицию: пустая доска, money-счёт (-1, -1), кости не выставлены — значения, свойственные панели Eval и отличные от используемых в режиме редактирования (7 у обоих, кости 3-1), чтобы оставаться согласованными с тем, что панель показывает по умолчанию.

Матрица куба

Решение о кубе — не свойство доски. Те же шашки и тот же счёт пипсов удваиваются при 2-away/4-away и не удваиваются при 4-away/2-away; тот, кто выучил ответ для money, выучил одну клетку сетки. Панель Eval показывает клетку, которую несёт позиция; матрица куба показывает всю сетку.

Команда cm открывает её для показанной позиции. Каждая клетка даёт вердикт при одном счёте: строка — сколько очков ещё нужно игроку на ходу, столбец — сколько нужно сопернику. Четыре вердикта записываются как БУ (без удвоения), УП (удвоение, приём), УО (удвоение, отказ) и СХ (слишком хорошо); клетка, от которой движок отказался, помечена вопросительным знаком и при наведении объясняет причину, а также показывает три эквити клетки. Предлагаются три длины матча: 5, 7 и 9 очков.

Клетка счёта, который позиция несёт на самом деле, обведена рамкой, а заголовки её строки и столбца подчёркнуты: чтение начинается отсюда, «моя клетка и то, что вокруг неё». Рамка появляется, как только оба счёта away позиции умещаются в показанной сетке; смена длины перемещает рамку или убирает её. Позиция money, игра Кроуфорда или away за пределами сетки не указывают ни на одну клетку: показывать нечего, а показать приблизительную было бы неверно.

Счёт самой позиции заменяется счётом каждой клетки; её куб сохраняется. Сетка отвечает на вопрос, при каком счёте стоит повернуть этот куб, а не на то, как играла бы позиция с центральным кубом. Она всюду построена для положения после Кроуфорда: в игре Кроуфорда куб не используется, и столбец «удваивать нельзя» ничего не сказал бы о позиции.

Каждая клетка — отдельный поиск. Движок учитывает счёт — при 2-away он играет не ту же партию, что при 7-away — поэтому единственный поиск, прочитанный через разные матчевые эквити, был бы неверен именно там, где счёт важен. Сетка сначала появляется на 0-ply, а затем пересчитывается на настроенной глубине отображения, когда окно приходит в покой: то же нарастание, что и в остальной части панели; сетка на 9 очков стоит около полутора секунд.

Ту же сетку можно вычислить вне интерфейса командой cubematrix командной строки.

Перенос позиции в панель Eval

Панель по умолчанию открывается на позиции bearoff, но изучение чаще всего начинается с уже имеющейся позиции. Перенести её туда можно двумя способами:

  • Правый щелчок по доске в панели анализа или при навигации по матчу, затем Оценить эту позицию: панель Eval открывается прямо на этой позиции, в том виде, в каком она показана. Контекстное меню не появляется в панели Eval и в панели поиска, где правая кнопка уже служит для выставления шашек другого цвета.

  • CTRL-C, затем CTRL-V: скопировать позицию из панели анализа, затем вставить её один раз в панели Eval. Вставка принимает и идентификатор из другого источника — XGID (eXtreme Gammon, GNU Backgammon, другой экземпляр blunderDB) или OGID (OpenGammon): достаточно, чтобы он был в буфере обмена.

  • Команда import XGID=… (или import OGID=…) — для случая, когда идентификатор не в буфере обмена, а в сообщении, на форуме, читаемом в терминале, или получен от скрипта. Это тот же глагол, что и просто import: без аргумента он открывает выбор файла, с аргументом — читает идентификатор. Дальше путь тот же, что и при вставке: то же чтение, та же дедупликация, то же открытие импортированной позиции.

OGID несёт только позицию: ни оценки, ни комментария. Поэтому позиция приходит без анализа, ровно как голый XGID, а встроенный оценщик может заполнить этот пробел позже.

В OGID партия Кроуфорда обозначается буквой C после длины матча (7C): без неё игрок, которому до победы остаётся одно очко, находится уже после партии Кроуфорда.

Доска панели Eval — черновик: позиция попадает туда без своего идентификатора в базе, так что никакое сделанное здесь изменение не может перезаписать запись, из которой она взята. Все обычные правки доски остаются доступны (шашки, куб, кости, счёт), и оценка следует за каждым изменением.

В обратную сторону CTRL-C копирует доску панели Eval в буфер обмена с XGID, пересчитанным по выставленным шашкам, — то есть её можно вставить прямо в eXtreme Gammon или в другой экземпляр blunderDB. Путешествует только позиция: оценка, показанная панелью, не является записью базы и не сопровождает копию.

При выходе из панели Eval восстанавливается ранее просматривавшаяся позиция: черновик никогда не сохраняется сам по себе.

Когда позиция является чистым bearoff (все шашки обоих игроков в своём доме) и кости не выставлены, решение по кубу отображает для игрока на ходу:

  • в точном режиме: money-эквити (cubeless, без дабла, дабл/тейк, дабл/пас) и money-вердикт по кубу (без дабла, дабл/тейк, дабл/пас или слишком хорошо для дабла) — вне счёта матча; случай счёта матча см. выше,

  • в рассчитанном режиме: те же эквити и тот же вердикт с четырьмя значениями, но разыгранные gammonNet (поиск + модель куба Яновского), а не прочитанные из таблицы — доступные даже при счёте матча, чего режим оценки никогда не мог предложить;

  • в режиме оценки: вердикт по кубу тогда намеренно не отображается — доступна лишь вероятность выигрыша в таблице фактов, с её погрешностью.

Как только на гоночной позиции выставлены кости, это решение по кубу до броска исчезает — доска требует тогда решения о шашках, а не о кубе, — но вероятность выигрыша остаётся фактом о позиции, а не решением: она переходит в строку до броска во главе списка ходов, рядом с EPC, который по-прежнему показан чуть левее.

Значок указывает режим: точно (значение прочитано из two-sided базы), рассчитано · <глубина> (разыграно gammonNet — показанная глубина та, что действительно дала показанное число), оценка ± погрешность, либо, при счёте матча в точной области, точно (победа) · рассчитано (куб) — см. выше. Точный режим имеет приоритет везде, где доступен; иначе рассчитанный режим появляется, как только закончит вычисление, заменяя на месте режим оценки, показанный во время ожидания. Точное определение трёх режимов и их допущений см. в Методология и допущения панели Eval.

Расширение точной области. Таблица, вычисленная при первом запуске, охватывает 6 шашек с каждой стороны. Два способа пойти дальше, во вкладке Bearoff настроек:

  • вычислить более широкую двустороннюю таблицу — вплоть до TS-06-15, если у машины хватает памяти. Вкладка называет размер, память и время на этой машине до начала, а вычисление ставится на паузу и продолжается. Отменённое вычисление оставляет файл .part, который никогда не читается как таблица;

  • указать любой two-sided файл .bd из gnubg. База с самой широкой областью автоматически имеет приоритет.

Доска панели — черновик, и она запоминается. Если выйти из панели Eval и вернуться, вы найдёте позицию, на которой её оставили, а не доску выбрасывания по умолчанию: та выдаётся только при первом открытии панели за сеанс. Отправка позиции из базы в панель имеет приоритет над этой памятью, а BACKSPACE в любой момент возвращает доску по умолчанию. По пути в базу ничего не записывается — у черновика нет идентичности позиции, а его оценка пересчитывается по прибытии, а не переносится.

Режим вызова. Флажок Вызов в полосе значков включает режим тренировки: при каждом изменении позиции значения трёх зон скрываются (заменяются на « ··· »); щелчок по зоне открывает только эту зону. Без костей это строка нижнего игрока, строка верхнего игрока и решение по кубу — строка Δ появляется лишь после открытия обеих строк игроков. Блок решения сохраняет при этом свои три строки: исчезают его значения, вердикт и выделение лучшего варианта, иначе упражнение решалось бы поиском жирной строки. При выставленных костях на гоночной позиции строка EPC каждого игрока скрывается как прежде, но третья зона тогда охватывает строку до броска и список ходов вместе: поскольку список упорядочен от лучшего хода к худшему, частичное его открытие уже выдало бы ответ. При выставленных костях вне гоночной позиции та же единственная зона охватывает всё, что показывает панель. Так можно тренироваться оценивать EPC каждой стороны, затем принимать решение по кубу или по ходу, прежде чем проверить. Настройка запоминается.

Для закрытия панели Eval нажмите CTRL-E или переключитесь на другую вкладку.

Методология и допущения панели Eval

Каждое значение, отображаемое панелью, опирается на точные допущения, исчерпывающе изложенные здесь.

Область. Зона гонки — вероятность выигрыша и вердикт куба — охватывает только чистый бирофф: все оставшиеся шашки обоих игроков в своём доме. Позиция оценивается до броска; выставленные кости игнорируются.

Блоки EPC, напротив, идут дальше: сторона получает свой EPC, как только её самая дальняя шашка помещается в загруженную одностороннюю таблицу. С таблицей по умолчанию (шесть пунктов) это старое правило дома; с таблицей на восемь пунктов, вычисленной во вкладке Bearoff, сторона с шашкой на 8 рассматривается как любая другая. Ничего не экстраполируется: шашка на пункт дальше просто не имеет EPC, ровно как шашка на 7 не имела его раньше. Когда ответившая таблица не та, что на шесть пунктов, её имя появляется в углу блока гонки («OS-08») — без него читалось бы «шесть» по умолчанию и сторона казалась бы полностью дома.

Блоки EPC (всегда точные). EPC, среднее число бросков и стандартное отклонение берутся из точного распределения числа бросков для вывода всех шашек, прочитанного из односторонней базы GNUbg (от 6 до 10 пунктов, 15 шашек, вычислена на машине). EPC = средние броски × 49/6 (49/6 ≈ 8,167 — точное среднее пипов на бросок, дубли считаются четырежды); wastage = EPC − pip count. Единственная идеализация — односторонняя оптимальная игра: каждый игрок минимизирует свои броски, игнорируя соперника; это стандартное определение EPC.

Вероятность выигрыша, точный режим. Прямое чтение из самой широкой доступной two-sided базы (TS-06-06, вычисляемая при первом запуске, внешний файл или TS-06-11, вычисляемая во вкладке Bearoff). Эти базы получены полным ретроградным анализом при оптимальной two-sided игре обеих сторон: никаких дополнительных допущений, ошибка ограничена квантованием (< 0,002 %).

Вероятность выигрыша, режим оценки. Вне области базы вероятность получается свёрткой двух one-sided распределений (игрок на ходу выигрывает, если его число бросков меньше или равно числу бросков соперника) с последующей фиксированной полиномиальной поправкой, откалиброванной офлайн по базе TS-06-11. Три допущения:

  • независимость двух процессов снятия — структурная в гонке: без контакта нет никакого взаимодействия;

  • оптимальная one-sided игра обеих сторон — это и есть приближение: в действительности отстающий игрок отклоняется ради дисперсии, а лидер — ради безопасности. Измеренный эффект — антисимметричное смещение (свёртка преувеличивает преимущество лидера), которое поправка статистически поглощает;

  • поправка откалибрована и проверена на области оракула (до 11 шашек у каждого игрока). Измеренная остаточная ошибка: стандартное отклонение 0,05 %, 99-й процентиль 0,17 %, наблюдаемый максимум 0,9 % (в пунктах вероятности выигрыша). Свыше 11 шашек у игрока эта граница экстраполируется — тенденция монотонна, но никакой оракул её не подтверждает.

Эквити и вердикт по кубу (только точный режим). Отображаемые эквити — это эквити money game без правила Джекоби, в системе отсчёта литературы по bearoff. В области ≤ 11 шашек у каждого игрока гаммоны невозможны (каждая сторона уже сняла не менее 4 шашек): это не приближение. Вердикт (без дабла / дабл, тейк / дабл, пас) точно восстанавливается из сохранённых эквити по правилу GNUbg, проверенному один в один против его анализа.

Примечание

Cubeful-эквити предполагают оптимальную игру кубом обеих сторон до самого конца: будущие редаблы полностью учитываются (полный ретроградный анализ). В очень волатильных гонках конца партии каскад редаблов съедает почти всё преимущество стороны на ходу — эквити «без дабла» и «дабл/тейк» тогда могут быть близки к нулю там, где движок вроде XG, чья модель куба не учитывает эту каскаду, показывает значения, близкие к dead cube (например, 2 шашки на пункте 3 против 2 шашек на пункте 2: 62 % выигрыша, точное D/T +0,006 против +0,475 у XG). Отображаемое решение при этом совпадает с решением движков.

Вероятность выигрыша и вердикт, рассчитанный режим. Вне точной области вероятность выигрыша берётся из сырого вывода gammonNet (поиск на 0 или 2 ply в зависимости от действия, никогда не читается из таблицы), а вердикт — из «Decide» Яновского, применённого к этому выводу: поиск разыгрывает траекторию вместо того, чтобы резюмировать её мгновенный снимок, — именно то, чего режим оценки не мог сделать (см. ниже), — и позволяет, единственный из трёх режимов наряду с точным, дать вердикт при счёте матча.

Этот режим был измерен, а не только предположен, против встроенной two-sided таблицы (TestEvalMeasure, 4000 выборочных money-решений, канонические параметры 2 ply k=12): совпадение money-вердикта 93,4 % (3735/4000), в разбивке по расстоянию до точки тейка gammonNet — 61,1 % ближе 1 % от точки тейка (зона, наиболее чувствительная к «орлу или решке»), 88,3 % между 1 и 5 %, 91,5 % между 5 и 10 %, 94,0 % между 10 и 20 %, 94,4 % дальше. Расхождение вероятности выигрыша: среднее 0,85 %, медиана 0,44 %, 95-й процентиль 3,21 %, максимум 8,30 %. Расхождение cubeful-эквити: среднее 0,039, медиана 0,018, 95-й процентиль 0,151, максимум 0,406. Форма ожидаемая: основная часть разногласий сосредоточена ровно в точке тейка, где два законно различных метода сильнее всего расходятся на близком решении, — а не размытая ошибка, которая стоила бы эквити повсюду.

Это измерение относится к money-решениям в гонке. Вердикт при матчевом счёте — который умеет выдавать только этот режим — и контактные позиции опубликованных измерений не имеют: сказанное выше на эти случаи не переносится.

Почему не глубже двух плаев? Потому что измерение говорит, что это ничего не даёт. Решение по шашкам стоит на той же машине 99 мс при 2 плаях и 8,4 с при 3 — в восемьдесят пять раз больше. На сорока настоящих решениях, переигранных на обеих глубинах, более глубокий поиск передумал дважды, и оба раза выигрыш, который он приписывал самому себе, составлял не более 0,0005 нормализованной эквити: на два порядка ниже 0,020 — порога, с которого eXtreme Gammon вообще говорит об ошибке. На решение, во всех случаях вместе, выигрыш равен 0,0000.

Настройка поэтому не предлагается. Это не значит, что 3 плая ничего не стоят вообще, — лишь что на этой сети, с каноническим фильтром, они не окупают ожидания того, кто сидит перед панелью. Измерение воспроизводимо (TestThreePlyMeasure), и вывод будет пересмотрен, если сеть изменится.

Почему не существует оценочного вердикта? Сказанное ниже относится именно к методу свёртки (режим оценки), а не к рассчитанному режиму выше: cubeful-эквити — задача о траектории (когда даблить), которую не улавливает никакая статистическая сводка позиции: лучшая из измеренных статических моделей оставляет остаточную ошибку (стандартное отклонение 0,016 эквити, максимум 0,20), достаточную, чтобы перевернуть все близкие решения. Аналогично, пересчёт вердикта на счёт матча через таблицу матчевых эквити оказался недостаточным (12 % расхождений с 2-ply анализом GNUbg, включая настоящие бландеры). Поскольку уверенно показанный неверный вердикт хуже отсутствия вердикта, свёртка никогда не имела права показывать вердикт — этот пробел заполняет поиск, разыгрывающий траекторию, а не статистическая сводка.

Примечание

Базы бироффа — неизменные математические таблицы. blunderDB вычисляет их сам, байт в байт так же, как инструмент makebearoff из GNUbg, — во вкладке Bearoff настроек или командой blunderdb bearoff generate.

Панель Anki

Панель Anki (CTRL-K) позволяет изучать позиции методом интервального повторения с использованием алгоритма FSRS. Пользователи могут создавать колоды из коллекций или результатов поиска.

Создание колод: Нажмите New Deck для создания колоды из коллекции или текущих результатов поиска. Колоды на основе поиска синхронизируются автоматически при открытии вкладки Anki.

Колода карточек счёта. Третий источник, Карточки счёта, не просит ничего, кроме имени: blunderDB заполняет колоду 36 неупорядоченными счетами от 2 до 9 away, и карточка счёта — это та же таблица, которую показывает упражнение Счёт: точки взятия и значения гаммона, обе стороны. Эта колода существует, только если вы её создали: 36 карточек со сроком в первый же день — это долг повторения, и берут его сознательно. Кнопка синхронизации создаёт её заново.

Эти два места делают разную работу. Упражнение Счёт заставляет вспоминать эти числа под часами и измеряет скорость; колода заставляет их держаться во времени и ничего из этого не измеряет. Две истории остаются раздельными: журнал Тренировки не видит повторений Anki, а статистика Anki не видит сессий Тренировки.

Повторение: Выберите колоду и нажмите Study (или дважды щёлкните на колоде) для начала повторения карточек с наступившим сроком. Каждая карточка показывает соответствующую позицию на доске. Оцените своё запоминание клавишами 1 (Снова), 2 (Сложно), 3 (Хорошо) или 4 (Легко). Нажмите Esc для остановки и возврата к списку колод.

Решения по кубу дают две карточки, сцепленные. Решение по кубу — это два вопроса: «дублировать?», затем «брать?» — и blunderDB всегда хранил их как две позиции. Колода, выбравшая только одну половину, получает вторую: решение дополняется, а не раздувается. И когда обе подошли по сроку, вторая идёт сразу за первой.

Каждая сохраняет свою оценку и своё расписание: это не два этапа одной карточки, а две карточки. Сцепление не приближает ни один срок — оно упорядочивает уже подошедшие карточки, и только. Рождаясь вместе, они впервые подходят по сроку вместе, и именно там оно и полезно.

Показать ответ: Карточка задаёт вопрос — какой ход сыграть или какое действие с кубом выполнить. Подумайте, затем нажмите SPACE (или щёлкните по скрытой области), чтобы открыть ответ: записанный анализ позиции в том виде, в каком его представляет вкладка Анализ. Он появляется под кнопками оценки, которые остаются на своём месте и под рукой. Клик по ходу в списке показывает его на доске.

Ничто не обязывает вас открывать ответ, чтобы оценить: если вы уверены в себе, клавиши 1–4 остаются активными. Ответ снова скрывается на следующей карточке, но не при простом переключении вкладки — сходите в панель Eval или к комментарию позиции, он будет ждать вас по возвращении.

Позиция без записанного анализа сообщает об этом напрямую, без скрытой области.

Ограничение сессии. По умолчанию сессия повторения проходит все карточки, срок которых наступил. В Настройках её можно ограничить числом карточек для каждой колоды: отметьте Ограничить сессию и укажите, сколько карточек должна выдать одна сессия. При достижении предела сессия останавливается и сообщает об этом — сообщение отличает «предел достигнут, столько-то карточек ещё ждут» от действительно опустевшей очереди. Чтобы всё же продолжить, есть свободная тренировка: она показывает другие позиции, ничего не меняя в расписании.

Предел 0 не выдаёт ни одной карточки: это самостоятельное состояние, удобное, чтобы заморозить колоду на время подготовки к турниру, и это не то же самое, что «без предела». Кнопка Study при этом неактивна.

Предел относится к сессии, а не ко дню. Колода blunderDB строится на коллекции или на поиске: это конечный набор, вводимый за несколько сессий, и его дневной объём уже ограничен его размером. Дневной потолок либо никогда не сработал бы, либо создал бы отставание на колоде, которая укладывалась в одну сессию.

Свободная тренировка (cram): Кнопка Cram рядом с Study запускает сессию свободной тренировки: вам показываются случайные позиции из колоды без учёта расписания FSRS. Этот режим никогда не изменяет план интервального повторения — идеально для разминки перед турниром или интенсивного повторения тематической колоды, не нарушая её порядок. Значок Cram заменяет состояние карточки, а кнопка Далее (клавиши 1–4) перелистывает позиции. Esc возвращает к списку, не сохраняя прерванную сессию.

Отложить карточку, не оценивая её. Во время повторения правый щелчок по заголовку карточки открывает три жеста, которые убирают её из сеанса, ничего не сообщая планировщику:

  • Приостановить — карточка сохраняет своё расписание и больше не появляется, пока приостановлена. Так откладывают неверную или ещё бесполезную карточку, не теряя связанной с ней истории.

  • Отложить до завтра — карточка исчезает до следующего дня. В отличие от приостановки, это ничего не говорит о её ценности: это для той, что только что встретилась в другом месте, или которую не хочется видеть дважды за вечер.

  • Убрать — карточка покидает колоду после подтверждения. Сама позиция остаётся в базе: колода — это список для изучения поверх библиотеки, а не её копия.

Ни один из трёх жестов не записывает оценку: отложенная карточка не есть отвеченная карточка и не входит в счёт сеанса.

Журнал повторений. В настройках колоды кнопка Журнал повторений показывает, что планировщику сказали — дата, позиция, оценка, состояние, выданный интервал — в отличие от того, что он планирует. Это единственное место, где видна оценка, поставленная по ошибке. Исправить её там нельзя: расписание остаётся вне досягаемости, и именно это правило делает журнал полезным — прошлое не переписать, но его можно знать.

Пауза/Продолжение: Вы можете прервать сеанс повторения в любой момент с помощью Esc. Кнопка меняется на Resume и показывает ваш прогресс. Нажмите её, чтобы продолжить с того места, где остановились.

Управление колодами: Кнопки действий позволяют переименовать, синхронизировать, сбросить или удалить колоды (для двух последних спрашивается подтверждение). Параметры FSRS (целевое удержание, максимальный интервал, разброс) настраиваются для каждой колоды в Настройках (значок шестерёнки).

Удержание: цель и измерение. Целевое удержание — это ваш выбор в компромиссе между объёмом работы и качеством припоминания: чем оно выше, тем короче интервалы и тем больше вы повторяете. Рядом Настройки показывают измеренное удержание по вашим собственным повторениям — это сведение, а не управление: blunderDB не меняет вашу цель, гоняясь за вашим процентом успеха. Меньше чем при двух десятках повторений измерение не показывается: оно читалось бы как факт, будучи всего лишь шумом.

Изменение удержания не действует задним числом: каждая карточка перенимает новый ритм на следующем повторении, а уже назначенные сроки не сдвигаются. Поэтому эффект постепенный и в тот же день незаметен.

Максимальный интервал ограничивает разрежение. Недавно созданная колода начинает с одного года: позиция, которую алгоритм отодвинул бы на несколько лет, покинула колоду без вашего решения, а ваша собственная игра меняется быстрее этого. Более старые колоды сохраняют то значение, которое у них было.

Панель Тренировка

Панель Anki повторяет то, что запоминается; панель Тренировка отрабатывает то, что вычисляется, под часами. Она открывается по CTRL-J, кнопкой панели инструментов сразу после « Position aléatoire » или командой train. Карточка счёта относится к обоим: она вычисляется здесь и запоминается в колоде карточек счёта.

В покое панель показывает запуск и итог прошедших сессий.

Запуск

Три выбора, затем « Démarrer »:

  • упражнение — Scores, Pions (счёт пунктов), Bearoff, Évaluation или Décision;

  • источник вопроса, когда у упражнения их несколько — Vivier (канонические формы упражнения), Plateau (позиция как она есть) или Base (позиция из просматриваемого списка);

  • лимит на вопрос — нет, 15, 30 или 60 секунд.

Выбранный источник запоминается для каждого упражнения, от сеанса к сеансу.

train scores, train pips, train bearoff, train evaluation и train decision открывают панель и сразу запускают; train tp и train takepoint — синонимы train scores, train epc — синоним train bearoff, train quiz — синоним train decision.

Пять упражнений

Scores выбирает случайно один из 36 неупорядоченных счетов от 2 до 9 away и показывает карточку счёта: два столбца — Vous (вы) и L’adversaire (соперник) — и семь строк — точку принятия при кубе 2, затем при кубе 4, каждая для длинной гонки и для последнего броска, затем ценность гаммона при кубах 1, 2 и 4.

Каждый столбец несёт только те клетки, которые справочные таблицы — те, что показывают команды tp2_live, tp2_last, tp4_live, tp4_last, gv1, gv2 и gv4 — определяют для его стороны: три числа при 2a-2a, четырнадцать самое большее, и один столбец при равном счёте. Строка, которую не определяет ни одна из сторон, на карточке не появляется — поэтому нет ни одной клетки « n/a », которую пришлось бы угадывать. Обе стороны нужны потому, что решение по кубу при счёте требует их обеих: исправленная точка принятия соединяет ценности гаммона обоих игроков, и именно точка принятия соперника говорит, проходит ли ваш дабл.

Pions (пипы) спрашивает счёт пипов обеих сторон. Пипкаунт доски скрыт, пока вопрос открыт; « Révéler » показывает его — даже если вы скрыли пипкаунт клавишей p, иначе ответ остался бы невидимым, а упражнение — непроверяемым. Это маска, а не настройка: ваш собственный выбор не меняется и снова вступает в силу со следующего вопроса. Источник Plateau задаёт один вопрос о показанной позиции, и только один; источник Base берёт новую позицию на каждый вопрос и выводит её на доску.

Bearoff спрашивает EPC обеих сторон — эффективный счёт пунктов, тот, что добавляет к pipcount потери шашек, снимаемых с избытком очков. Это область, где движок точен, и та, где EPC действительно отличается от счёта пунктов.

Каждый вопрос порождается: движок исходит из зерна и играет несколько бросков, и снимок — это то, что вам предлагается. Случайная расстановка не имела бы дыр, низких стопок и асимметрии настоящего эндшпиля. Зерно приходит из Vivier (завершённый ввод в дом, затем от нуля до десяти полуходов), с Plateau (отображаемая позиция, затем от одного до четырёх полуходов — никогда ноль, ведь вы её только что видели) или из Base (позиция из просматриваемого списка, как она есть: она уже настоящая).

Область упражнения: обе стороны полностью в своём доме, от 4 до 15 шашек на сторону, остальные сняты, куб в центре, игра на деньги. Зерно, которое туда не входит, отклоняется с указанием причины, и ничто не запускается — никакой молчаливой подгонки: доигрывать, пока не разорвётся контакт, значило бы дать вам позицию, которую вы не выбирали. Пустая доска — исключение: вопрос берётся тогда из набора, и панель говорит почему.

Упражнению нужна односторонняя таблица эндшпиля; пока она строится в фоне (см. Конфигурация), оно говорит об этом, вместо того чтобы задавать вопрос без ответа.

Évaluation спрашивает, чего стоит позиция: шансы на победу игрока на ходу в процентах и решение по кубу — Pas de double, Double, prend или Double, passe. Это два числа, которые показывает панель Eval, спрошенные до того, как они показаны. Область — любая позиция: гонка так же, как позиция с контактом, в игре на деньги.

Как и в Bearoff, вопрос порождается: зерно берётся из Vivier (позиция, в которой контакт только что разорван, затем от нуля до десяти полуходов, сыгранных движком), с Plateau (показанная позиция, затем от одного до четырёх полуходов; вопрос задаётся в игре на деньги, с кубом в центре, каким бы ни был счёт зерна) или из Base (позиция просматриваемого списка как есть). Позиция из базы подходит, только если это решение по кубу в игре на деньги — без костей, с кубом в центре или у игрока на ходу —; иначе жребий переходит к следующей, а когда не подходит ни одна, упражнение так и говорит. Доска, которая не является позицией партии — не по пятнадцать шашек у каждой стороны или законченная партия, — отклоняется с объяснением; с пустой доской вопрос берётся из набора.

Истина — это истина движка: двусторонняя база bearoff, если позиция в ней есть, gammonNet на его канонической глубине во всех остальных случаях, и панель говорит, кто ответил. Ничего не оценивается приблизительно: позиция, которую движок не оценивает, не задаётся.

Décision задаёт уже проанализированное решение: позицию из просматриваемого списка — единственного источника упражнения — с решением, которое она несёт, ходом шашками или решением по кубу, и судит сохранённый анализ. Позиция без анализа не задаёт вопроса, а заданная позиция не возвращается в сессии; когда список исчерпан, панель об этом говорит. Без открытой базы или без проанализированной позиции в списке упражнение отказывает, называя причину, и ничего не запускается.

Пока вопрос Évaluation или Décision ждёт ответа, панель анализа закрыта: она несёт ответ.

Ответ

Режим ответа — свойство упражнения, а не настройка: то, что считают или помнят наизусть, раскрывают, то, что оценивают, вводят — потому что там величина ошибки и есть урок.

Scores и Pions раскрываются: вы считаете в уме, нажимаете « Révéler », и появляется истина. Каждое число тогда по умолчанию верно — вы щёлкаете то, в котором ошиблись, чтобы отметить его как ошибку (Tab, затем Пробел делает то же с клавиатуры), а второй щелчок снимает отметку. Ничего не печатается: счёт пунктов или ячейка таблицы верны или нет, и записать их не научит большему, чем прочесть.

Bearoff вводится: вы пишете два EPC, « Valider » судит их с точностью до половины пункта — та подробность, при которой EPC меняет решение в гонке — и истина появляется рядом с тем, что вы написали. Судит приложение, отмечать нечего. Отклонение записывается со знаком: переоценить — не то же, что недооценить, и именно сводка делает из этого среднее.

Évaluation соединяет оба жеста в одном вопросе. Шансы на победу вводятся и оцениваются с точностью до пяти пунктов, включая знаковое отклонение; решение по кубу выбирается — щелчок запоминает кнопку, ничего не оценивая, а « Valider » оценивает оба сразу. У куба нет допуска: верна только та кнопка, которую верной делает вердикт движка, а на позицию, слишком хорошую для дабла, отвечают Pas de double. Enter в поле ведёт к решению по кубу, пока оно не выбрано, а затем подтверждает. После ответа панель показывает истину — вердикт с четырьмя исходами, — её источник и EPC обеих сторон, если у позиции есть точный; EPC здесь никогда не спрашивается, у него своё упражнение. Журнал считает оба числа отдельно: можно хорошо оценить позицию и неверно прочесть её куб.

Décision выбирается. При решении о ходе шашками сыграйте ход на доске: щёлкните начальный пункт, затем пункт назначения, или перетащите шашку, по одному разу на каждую кость. Доска предлагает только то, что можно сыграть, — щелчок, не разрешённый ни одним легальным ходом, ничего не двигает. В панели « Annuler le pas » возвращает на одну кость назад, « Recommencer » восстанавливает позицию такой, какой её ставит вопрос (двойной щелчок вне доски делает то же самое), а « Valider », активная, когда ход завершён, отправляет его на оценку. Поле записи принимает также набранный ход (13/7 8/7, нотация транскрипции): шаги ставятся на доску при каждом нажатии клавиши, покрасневшее поле сообщает, что шаг сыграть нельзя, а ВВОД подтверждает ход целиком. Когда фокус у панели, BACKSPACE отменяет шаг, ESC начинает ход заново, а ВВОД подтверждает его. При решении по кубу нажмите Без дубля, Дубль, взять или Дубль, пас: щелчок и есть ответ.

Проверка различает три исхода, и смешать их значило бы солгать. Недопустимый ход — не плохо выбранный ход, а нарушение правил. Допустимый ход, который движок не оценил, — не ошибка суждения: у него просто нет цены, и он ничего не стоит. Оценённый ход стоит столько, сколько говорит анализ, в миллипунктах. Верен только оценённый ход без потерь; лучший ход показывается в любом случае.

Секундомер запускается при появлении вопроса и останавливается на « Révéler », на « Valider » или при щелчке по решению по кубу в Décision; следующий вопрос готовится, пока вы отвечаете, поэтому он никогда не замеряется вместе с вашим. Отметка ошибок тоже не замеряется. При наличии предела вопрос, оставшийся без ответа к сроку, раскрывается сам и считается просроченным: все его числа неверны, а его время не входит в медиану — не измеряют ответ, который не был дан. Просроченное решение показывает лучший ход и не входит в PR сессии.

« Suivante » записывает вопрос и задаёт следующий. У сессии нет заданной длины: она длится до « Terminer », которое пишет её в журнал, или « Quitter », которое её отбрасывает. Все кнопки в панели; доска показывает вопрос и его ответ, она не несёт ни одного органа управления.

Пока вопрос стоит на доске, раскрыт он или нет, клавиши, листающие список, его не прокручивают: вопрос удерживает доску до « Suivante », « Terminer » или « Quitter ».

Журнал и итог

Завершённые сессии хранятся в самой базе — то есть следуют за файлом — и без всякого предела. В покое панель показывает по строке на упражнение: число сессий, долю ошибок, медианное время и, начиная с десяти сессий, тенденцию, то есть разницу между долей ошибок последних десяти сессий и долей всех — отрицательная, вы прогрессируете.

Для Décision строка показывает также PR последней сессии, вычисленный по той же формуле, что статистика применяет к реальной игре, — 500 × средняя ошибка в нормализованной эквити по оценённым решениям. PR тренировки 6 и PR матча 6 измеряют одно и то же по одной шкале.

Щелчок по названию упражнения раскрывает детализацию по типу числа: « Point de prise 4 · dernier lancer, 6 / 9 ». Именно эта детализация делает журнал полезным, и она считает по типу, а не по стороне: одна и та же клетка одной и той же таблицы, увиденная с той или другой стороны, — одна-единственная слабость.

Панель метаданных

Панель Метаданные отображает общую информацию о текущей базе данных: имя, описание, количество позиций, матчей и партий, версия схемы. Доступна через команду meta.

Она также показывает, если она есть, происхождение базы — см. Распространение базы: происхождение и пароль. У обычной базы этот раздел не отображается.

Распространение базы: происхождение и пароль

У преподавателя, раздающего базу позиций, есть два независимых друг от друга механизма, оба необязательные и выбираемые в момент экспорта: пометить файл его происхождением и защитить его паролем.

Примечание

Ни один из них не отслеживает дальнейшую судьбу файла. blunderDB ничего не записывает на стороне получателя базы: открыть помеченную базу — то же самое, что открыть любую другую, и нигде не фиксируется, кто её открыл, когда и откуда взялось её содержимое.

Пометить базу её происхождением

Окно экспорта умещается в один экран: форма, а поверх неё — индикатор выполнения на время записи. По завершении окно закрывается само, а результат появляется в строке состояния.

Три момента заслуживают внимания:

  • Экспортируются позиции, отображаемые в данный момент, а не вся база. После поиска выгружаются только результаты — окно напоминает об этом сверху.

  • Коллекция, чьи позиции вошли в выборку не полностью, придёт усечённой. Поэтому в списке для каждой коллекции указана охваченная доля («12/40»), выделенная красным, когда она неполная.

  • Турниры можно экспортировать только вместе с матчами: без них связи «турнир — матч» не существует и турнир пришёл бы пустым. Флажок остаётся недоступным, пока не отмечено «включить матчи».

Поля Пользователь, Описание и Дата описывают создаваемый файл; они заранее заполняются из исходной базы. Флажок Мои сохранённые фильтры стоит особняком: он экспортирует не содержимое, а ваши собственные сохранённые запросы, бесполезные в чужой базе.

При установке флажка Пометить этот файл его происхождением появляются два поля:

  • Происхождение — что это за файл и откуда он, вашими словами: «Занятие Жана Дюпона — 12 марта 2026». Это поле обязательно: пока оно пусто, кнопка экспорта неактивна.

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

Отметка подписана вашей идентичностью автора. Поэтому она неизменяема и неподделываема: никто не может её изменить или изготовить от вашего имени. Зато она не является неудаляемой — распространяемый файл представляет собой обычную базу SQLite, а blunderDB — свободная программа. Она ничему не препятствует: она говорит, откуда файл.

Идентичность автора

Отметки подписываются вашей идентичностью автора, которая создаётся сама при первой пометке файла; настраивать ничего не нужно. Она принадлежит человеку, а не базе: все ваши файлы несут один и тот же публичный отпечаток вида A3F1-9C24-7B05-E1D8.

Вы можете сообщить этот отпечаток получателям, чтобы они убедились, что файл действительно от вас. Идентичность переносится с одного компьютера на другой одним файлом (расширение .bdbid), при желании защищённым парольной фразой. Этот файл позволяет подписывать от вашего имени: не передавайте его.

В настройках (значок шестерёнки на панели инструментов) вкладка Идентичность автора показывает ваше имя и отпечаток и предлагает Сохранить идентичность…, Загрузить идентичность… и Создать заново….

Предупреждение

Создание заново ничего не отзывает. Отметка несёт в себе публичный ключ, которым она подписана, поэтому проверяется сама по себе и всегда. Если ваш файл идентичности утёк, тот, у кого он есть, сможет и дальше подписывать под вашим прежним отпечатком, и такие отметки останутся действительными.

После утечки вас защищает не программа: нужно опубликовать новый отпечаток и объявить прежний недействительным перед вашими получателями.

Создание заново перезаписывает текущий ключ; blunderDB предлагает сохранить его перед заменой.

Защита базы паролем

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

Флажок Защитить этот файл паролем даёт файл с расширением .dbx — даже если в окне сохранения вы выбрали имя с .db, поскольку это окно открывается до запроса пароля. Чтобы открыть его, используйте обычное открытие базы: окно выбора принимает как .db, так и .dbx. blunderDB запрашивает пароль и создаёт рядом обычную базу; дальше ничего не спрашивается.

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

Предупреждение

Пароль защищает файл при передаче, а не саму базу. Он мешает постороннему открыть файл, забытый в папке загрузок, или вложение, пересланное по ошибке. Он не защищает от того, кому вы сообщили пароль.

Пароль проверяется при каждом открытии, в том числе если файл уже открывали на этом компьютере ранее.

Технически база шифруется алгоритмом AES-256 в режиме GCM, ключ выводится из пароля функцией Argon2id (64 МиБ памяти, 3 прохода, 4 потока), соль случайна и своя для каждого файла. Режим GCM аутентифицирует всё целиком: неверный пароль распознаётся как таковой, равно как и любое изменение зашифрованного файла — молча испорченной базы не получится никогда.

Заголовок защищённого файла остаётся открытым: его происхождение читается и без пароля.

Как прочитать происхождение файла

В приложении откройте файл и покажите панель Метаданные (команда meta). В верхней части панели появится раздел Происхождение, доступный только для чтения; он сообщает, что было записано, кем, когда и в каком состоянии подпись:

  • «✓ подпись проверена — помечено вами»: файл несёт вашу отметку, нетронутую;

  • «✓ подпись проверена»: отметка нетронута и сделана другим ключом — сравните её отпечаток с тем, который сообщил вам автор;

  • «⚠ подпись недействительна»: документ был изменён или подделан.

У обычной базы этот раздел не появляется.

В командной строке blunderdb info --db файл.db показывает происхождение и состояние подписи, никогда не записывая в файл. Команда работает и с защищённым файлом, без пароля. См. CLI_USAGE.md про параметры --watermark и --password команды export, а также про identity и open.

Публикация базы для других

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

То, что делает опубликованную базу пригодной для другого, сводится к четырём полям, и все они уже есть:

  • Пользователь — кто её собрал, под тем именем, которое вы хотите видеть указанным.

  • Описание — что база содержит, одной фразой, помещающейся в список: «240 решений по кубу при счёте, с комментариями, средний уровень».

  • Происхождение (водяного знака) — что это за файл и для кого он был сделан. Это первое, что получатель читает в панели Метаданные.

  • Отпечаток издателя — публикуйте его рядом с файлом, а не внутри: сравнивая его, получатель убеждается, что файл пришёл от вас, а не от того, кто взял ваше имя.

База, опубликованная без водяного знака, остаётся вполне пригодной; она просто анонимна, и панель Метаданные не показывает тогда раздела Происхождение.

Чтобы о базе узнали, категория Show and tell обсуждений репозитория служит указателем: это список, который ведут сами публикующие, а не служба, оказываемая blunderDB. Чтобы объявить там базу, нужны ссылка, четыре поля выше и отпечаток.