Pull to refresh
77
0
Чеботарев Никита @gth-other

User

Send message

Вы меня уж очень разволновали с вопросом про безопасность этой штуки, так что я решил ее протестировать.

Есть такой вот код:

#include <iostream>
#include <cmath>
#include <iomanip>


int main() {
    std::cout << std::setprecision(8);

    float move_ctr = 0;

    for (int i = 0; i < 1e+6; i = i + 1) {
        move_ctr = move_ctr + 0.5f;
    }

    std::cout << "Ctr: " << move_ctr << std::endl;
    std::cout << "Black move: " << (move_ctr - std::floor(move_ctr) > 1e-7) << std::endl;

    return 0;
}

Он эмитирует применение миллиона ходов. В конце выполняется проверка какой стороне принадлежит ход.

Если скомпилировать и запустить то видно, что даже спустя миллион ходов счетчик работает корректно, а в шахматах нельзя сделать более 6000 ходов из-за правил троекратного повторения позиции и 50 ходов, так что метод абсолютно безопасный.

Разница в производительности между int и float одной длины находится на уровне погрешности, по крайней мере, когда использование ограничивается одной-двумя примитивными операциями за ход.

Про безопасность не совсем понял. Вы про погрешность float типов? Если для проверки стороны использовать что-то вроде

move_ctr - std::floor(move_ctr) == 0

то, естественно, это будет не безопасно, но если что-то такое (это я и использую)

move_ctr - std::floor(move_ctr) > 1e-7

то вряд-ли это когда-то подведет.

А читаемость и наглядность вещи, во многом, субъективные. Мне float счетчик кажется более понятным.

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

Рассмотрим этот псевдокод, он был в статье:

int alphaBetaMax( int alpha, int beta, int depthleft ) {
   if ( depthleft == 0 ) return evaluate();
   for ( all moves) {
      score = alphaBetaMin( alpha, beta, depthleft - 1 );
      if( score >= beta )
         return beta;   // fail hard beta-cutoff
      if( score > alpha )
         alpha = score; // alpha acts like max in MiniMax
   }
   return alpha;
}

int alphaBetaMin( int alpha, int beta, int depthleft ) {
   if ( depthleft == 0 ) return evaluate();
   for ( all moves) {
      score = alphaBetaMax( alpha, beta, depthleft - 1 );
      if( score <= alpha )
         return alpha; // fail hard alpha-cutoff
      if( score < beta )
         beta = score; // beta acts like min in MiniMax
   }
   return beta;
}

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

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

Хорошо, что пытаются. Надо с чего-то начинать.

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

Рейтинга на шахматном сайте заблокированном в РФ у меня нет, так как я им не пользуюсь (: Туда заходил чисто из-за наличия ботов с обозначенным уровнем игры. Основной аккаунт на lichess, там Эло около 1500, в шахматах обычный любитель.

Поиск по дереву Монте-Карло сперва рассматривал, но потом отказался так как алгоритм довольно сложный и редко использующийся.

Знаю про chessprogramming, даже в статье не раз говорил про него, но последовательное изложение на родном языке с примерами кода ко всему воспринимаются куда легче, по крайней мере для меня. А perft я частично реализовывал, правда, только часть с подсчетом узлов.

А можно воспользоваться уже готовым инструментом самого гитхаба - https://github.com/settings/admin.

Странно. Китай вроде как не особо хотел накладывать санкции на РФ.

Единственный мотив создания подобных дистрибутивов - распил бабла. Было бы смешно, если бы такую поделку сделали платной.

Для начала, РКН стоило бы заблокировать VPN и нормально Tor, а то все эти последние блокировки выглядят еще более смехотворно, чем "блокировка" ТГ в 18 году.

Для статьи можно было заменить QT функционал на стандартный и разобраться с чистотой кода. Смотреть и анализировать такое довольно трудно.

Простые числа, согласно известному определению – такие числа, которые
делятся только на 1 и само себя. Иначе, число считается составным, и его
можно разложить на произведение простых чисел. Единица формально
соответствует определению простого числа, но это число принято не
относить ни к простым, ни к составным.

Определение не до конца верное. Стоит добавить, что это не просто числа, а натуральные числа, так как без этого уточнения, -7 вполне подходит под определение простого числа.

Рабочее решение:

  • Шифрование домашего каталога и SWAP раздела (файла) при наличии. Опционально шифрование /var и /tmp, если идет работа с по настояющему конфидициальными данными, и даже минимальная утечка представляет угрозу.

  • Настройка загрузчика таким образом, чтобы ни в коем случае нельзя было менять параметры загрузки (привет GRUB'у с кнопкой 'e'), редактировать системные файлы и т.д. и т.п. Единственное, что должно быть можно делать с загрузчиком без знания паролей - грузится по неизменяемому скрипту.

  • Пароль на вход в UEFI / BIOS. Важно, чтобы не пароль нельзя было обойти уникальными паролями из интернета и прочими дырами разработчиков.

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

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

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

Если все пункты на 100% соблюдены, то можно гарантировать почти 100% конфидициальность данных.

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

Если пароль не банальный и его составитель хоть немного запарился (а это обязаны контролировать некоторые люди), то перебор по ssh невозможен. Недавно кто-то из Германии пытался подобрать пароль. Никакого fail2bun / задержки на компьютере не стояло. Атака на компьютере длилась 55 минут, то есть 3300 секунд. За это время было попробывано 15846 паролей, для моего пользователя (с крайне секретным названием "user") - 125. Получается 125 паролей за 3300 секунд, то есть 0,04 пароля в секунду. Да даже если учесть, что все попытки были в моего пользователя, а не в воздух (а это, по факту, очень маловероятно), то получается 4.8 паролей в секунду. Удачи с такой скоростью найти что-то к тепловой смерти вселенной.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity