"Запатентовано" уже немало способов шахматного жульничества: кто-то использует телефоны, примотанные к ногам скотчем, и штуки вроде пультов от телевизора, другие просто выходят в туалет, чтобы подсмотреть варианты хода на телефоне. И это не говоря о случаях с неочевидным и лишь отчасти подтвержденным читерством, вроде недавнего скандала с гроссмейстером Хансом Ниманном.
Программист Джеймс Стэнли* придумал еще один способ выигрывать в шахматы. Миниатюрный компьютер Raspberry Pi Zero, лежащий у него в кармане, подключен к нескольким кнопкам и вибромоторам в его ботинках, так что он может тайком обмениваться данными с шахматным движком на базе Pi. Ноги идеально подходят для этой цели: это единственная часть тела, с помощью которой при известной степени ловкости можно проделывать сложные манипуляции незаметно для окружающих.
Джеймс назвал этот проект Sockfish, так как в качестве интерфейса для обмена данными с шахматным движком Stockfish используются его носки. Рассказ автора о подробностях эксперимента читайте под катом.
*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.
Готовлюсь к партии
Итак, каждый мой внутриботиночный пульт оборудован двумя резистивными датчиками усилия и одним вибромотором. Датчики усилия используются в качестве кнопок, с помощью которых я ввожу ходы противника. Вибромоторы обеспечивают тактильную обратную связь для подтверждения нажатий на кнопки и передают мне подсказки шахматного движка.
Во вторник вечером мне наконец представился случай пустить Sockfish в ход против ничего не подозревающего реального противника — Оуэна, который играет в шахматы гораздо лучше меня. Я уговорил его сыграть партию с пятнадцатиминутным лимитом времени, что дольше, чем в блицах и суперблицах, которые мы обычно играем, но иначе я бы не успевал вводить ходы пальцами ног.
Проводим первую игру
Оуэн не мог взять в толк, почему мне потребовалось целых 20 секунд напряженных размышлений, чтобы сделать первый ход. В итоге он предположил, что я, должно быть, "репетировал" и теперь старался сосредоточиться изо всех сил, чтобы вспомнить теорию. Отчасти он был прав: ввод данных с помощью Sockfish и расшифровка ответных сигналов требовали высочайшей степени концентрации! Я обнаружил, что, жульничая с Sockfish, я вынужден сосредотачиваться гораздо сильнее, чем играя в шахматы по-честному. Может, я играл бы лучше, если бы всегда был таким внимательным.
Все шло хорошо, пока Sockfish не предложил мне сделать ход против правил. Игра (в представлении Sockfish) шла так: https://lichess.org/cmcYJF7G (я играл черными). Программа хотела, чтобы я сыграл 20... Qxe6.
Но на настоящей доске все было иначе. Руари был зрителем, он знал, в чем подвох, и даже ухитрился записать часть игры. Судя по его видео, положение фигур было такое:
Отличие от варианта Sockfish состоит в том, что моя коневая пешка (g) переместилась на g6, а мой белопольный слон не забрал фигуру на g2.
Я думаю, это произошло из-за того, что когда компьютер попросил меня сыграть Bxg2, я вместо этого пошел на g6. Хотя эта ошибка и выглядит дико, она вполне объяснима: обычно Sockfish сообщает мне начальную и конечную клетки моего хода, но поскольку на g2 можно было пойти только одной фигурой, Sockfish сообщил мне лишь конечную клетку. Поэтому программа дала команду g2, но я перепутал ее с g6. Это произошло потому, что «2» передается как две коротких вибрации на правой ноге, а для экономии времени «6» передается как одна длинная вибрация (означающая «5»), за которой следует короткая. Я просто принял первую короткую вибрацию на правой ноге за длинную и решил, что должен пойти на g6.
Возможно, эта схема расшифровки вибраций окажется полезной (а может и нет):
Как бы там ни было, играя при помощи Sockfish, я оказался в пролете, и пришлось выкручиваться самому.
Вместо того чтобы взять ферзя на е6, сыграв против правил (что вряд ли сошло бы мне с рук), я прикрылся от шаха ладьей. Это было крайне глупо с моей стороны! Я просто потерял ладью и ничего не получил взамен. В свою защиту скажу, что я был настолько поглощен взаимодействием с Sockfish, что едва понимал, что происходит на доске. Вскоре мы закончили партию, и я сдался при таком расположении фигур:
Проводим вторую игру
К счастью, Оуэн согласился на матч-реванш.
На этот раз Руари снял почти всю игру. Помню, я паниковал, что на видео будет видно, как я ерзаю на стуле, но все выглядело так, как будто я просто напряженно думаю. Едва ли со стороны можно было догадаться, что ботинки у меня с начинкой.
В какой-то момент игры я ввел ошибочные данные, но заметил это и успел все исправить. На видео было видно, как я выругался, крепко задумался на 30 секунд, а потом рассмеялся и попросил Оуэна напомнить мне пару предыдущих ходов. Удивительно, что он ничего не заподозрил.
70 секунд я орудовал пальцами ног, отменяя и переделывая ходы (при этом стараясь вести себя естественно), пока в конце концов не убедился, что восстановил позицию, после чего продолжил играть, издав довольно громкое "фух!" и заметив, что мне нужно быть внимательнее.
К сожалению, через пару ходов все опять пошло наперекосяк. Sockfish снова попросил меня сделать ход не по правилам. Для программы, позиция на доске была такой:
Но на самом деле фигуры стояли так:
По сути 27... Qxe1 и 28. Пока я все отменял и переделывал, ход Rxe1 каким-то образом пропал из Sockfish. Должно быть, я отыграл на 1 полуход дальше назад, чем было нужно, и не смог восстановить положение на доске. В этой позиции Sockfish предлагал мне сыграть Rd8+, но поскольку у меня не было ладьи на линии d, сделать это было затруднительно. Я заявил, что пошел "не в ту степь" (не объясняя, что это значит), и стал играть без помощи программы.
К счастью, у меня было преимущество в целого ферзя, и я выиграл без особого напряга – Оуэн сдался через несколько ходов. Не совсем тот успех, на который я рассчитывал, но, по крайней мере, это была победа! Можно определенно сказать, что Sockfish выигрывает в 50% партий.
Открываю тайну
Сразу же после победы я объяснил Оуэну, как мне удалось его обыграть. Он отказывался верить, пока я не показал ему два внутриботиночных пульта и карманный компьютер. В целом, он не особо на меня разозлился.
Я сказал ему, что собираюсь найти "внушающего доверие" шахматиста, который с помощью моего изобретения сможет выиграть чемпионат мира, но он ответил, что это может "опорочить игру", и он обязательно меня сдаст. Впрочем, такой сценарий и вправду лучше подходит для экранизации на Netflix, чем для воплощения в жизнь.
Подробности
В моем кармане лежит пластиковая коробка, внутри которой Raspberry Pi Zero, 4-канальный АЦП для считывания сигналов резистивных датчиков усилия, несколько транзисторов для переключения питания вибромоторов и по одному подстроечному резистору на каждый вибромотор для регулировки силы вибрации. Без подстроечных резисторов моторы были бы слишком шумными и могли бы (если так можно выразиться) испортить всю игру. Вот что находится внутри пластиковой коробки:
Также в моем кармане лежит USB-аккумулятор для работы Pi-компьютера.
На Pi работает скрипт Python, который считывает данные с контактов GPIO и пишет их в поток вывода stdout
, который используется скриптом Perl. В свою очередь Perl считывает нажатия кнопок из потока ввода stdin
, реконструирует расположение фигур и запускает Stockfish, а затем записывает импульсы вибрации в свой поток вывода stdout
, после чего они передаются на контакты GPIO вторым скриптом Python.
(Зачем такая навороченная архитектура? Я предпочел бы написать программу на Perl, но во всех примерах Raspberry Pi GPIO используется Python... поэтому так было проще).
Вся эта система работает внутри интерфейса с параметром -L
, так что вывод данных регистрируется для последующего просмотра. Система запускается командой /etc/rc.local
при включении компьютера.
Если во время загрузки компьютера внутриботиночные пульты подключены, то один из вибромоторов "залипает" около минуты, потому что контакт GPIO, который управляет мотором, активируется напряжением +5 В во время загрузки Pi. На самом деле это не важно, но вы можете почувствовать, что в течение минуты вибрация становится слабее по мере нагревания и увеличения сопротивления.
С помощью паяльника я проделал отверстие в накладном кармане брюк, чтобы пропустить провода внутри штанин.
Первоначально я использовал 4-контактные разъемы TRRS для подключения компьютера к ботинкам, но обнаружил, что они очень хлипкие и ненадежные. Я заменил их на 4-контактные водонепроницаемые разъемы для электровелосипедов, которые работают гораздо лучше и ненамного больше по размеру.
Сначала я печатал внутриботиночные пульты из PLA-пластика. Но он оказался слишком жестким, что затрудняло ходьбу. Потом я перешел на гибкий TPU-пластик, который гораздо лучше подходит для моих целей. Кроме того, изначально я использовал обычные микропереключатели, которые повреждались во время ходьбы. Заменив их на резистивные датчики усилия, я не только решил эту проблему, но и получил дополнительное преимущество – возможность регулировать силу активации на программном уровне.
Sockfish напоминает систему Eudaemons — компьютер, спрятанный в ботинках и предназначенный для мошенничества при игре в рулетку. Весьма впечатляющий проект, учитывая примитивную электронику 70-х годов прошлого века.
Послесловие: теперь я планирую разработать Sockfish-ng
Никому не говорите, но у меня уже есть планы по созданию улучшенной версии Sockfish, которую будет гораздо сложнее обнаружить!
Актуальный опытный образец годится только на то, чтобы пару раз разыграть приятелей в пабе. Чтобы выиграть чемпионат мира, нужно подходить к делу гораздо серьезнее.
Я думаю, что мы разместим компьютер и все другие электронные компоненты на одной печатной плате, вместо того, чтобы подключать компьютер к двум кускам макетной платы. По моей задумке, эта печатная плата должна размещаться в одном из ботинок. В каждом из ботинок можно было бы поместить отдельный аккумулятор и модуль Bluetooth (или аналогичный), а всю электронику – спрятать под стельками. Тогда даже полный обыск с раздеванием не выявил бы ничего запрещенного.
Интерфейс можно в целом оставить без изменений, только связь между "основным" и "вторичным" ботинками сделать беспроводной. Возможно, стоит позаботиться о том, чтобы длинные и короткие импульсы было легче различать.
Чтобы обнаружить обман, пришлось бы просветить обувь рентгеновскими лучами. Если есть риск такой проверки, то игрок может пройти контроль в обычной обуви, а его сообщник – пронести пару ботинок с секретом другим путем. Игрок поменяет обувь, после того, как ее уже просканировали.
***
Будем рады узнать в комментариях ваше мнение о статье. Может быть, у вас есть свои примеры технологических способов жульничества в шахматах и других соревновательных играх? Обязательно напишите об этом! А чтобы получать больше интересного контента, подписывайтесь на наш хабр-блог: мы регулярно переводим статьи зарубежных авторов и делимся экспертизой наших сотрудников.