Задать вопрос
  • Какие библиотеки и как использовались для создания Minecraft Bedrock?

    @rPman
    Майнкрафт был создан на собственном движке и написан на java, позже часть движка значительно модернизирована с помощью мода optyfine (текстур паки и шейдеры, поддержку этого в Майнкрафте так и не допили), там ещё есть моды движка но не такие значимые.

    Помимо графического движка, есть движок для модификаций - forge (тоже не единственный, например fabric) с mcp, собственно поддерживаемый движок для создания модификаций, способных невероятным образом менять проведение игры и это (а так же свободное лицензирование, до покупки майкрософтом) сделал игру популярной.

    Там есть ещё куча других нюансов, которые важны для качества результата но далёкие от графического движка, типа лянчера и способа хранения ресурсов для мультиверсионности, централизованного curseforge,..
    Ответ написан
    2 комментария
  • Как запустить нескольких копий браузера под одним юзером?

    @rPman
    Два способа - универсальный (так не работают только те программы которые специально заточены на запрет одновременного запуска, любой браузер не такой) и встроенный в браузер:
    * универсально - создаешь новый профиль пользователя, устанавливаешь браузер под этим пользователем, если приложение ставишь в профиль пользователя app data, обычно это если не требуется администраторских прав, либо заранее установив его в program files (это требует администраторские права), а затем, залогинившись под изначальным пользователем, запускаешь приложение по его ярлыку (публично доступному) нажав правую кнопку, вабрать в меню 'Запустить под пользователем' или используя консольное приложение runas.
    На каждый экземпляр приложения потребуется свой профиль пользователя
    * Воспользоваться штатным механизмом профилей браузера
    chromium:
    --user-data-dir=путь_до_каталога_с_профилями
    (внутри будет создан один каталог с профилем по умолчанию)
    или
    --profile-directory="Имя профиля"
    будет создан профиль в дефолтном каталоге профилей, их может быть сколько угодно
    firefox:
    -P
    откроет интерфейс создания и выбора профиля (один раз рекомендую запустить с этим ключом после всех манипуляций, с профилем по умолчанию и отметив внизу чекбокс - по умолчанию, иначе при следующем запуске firefox без ключей будет использован последний профиль)
    -p имя_профиля
    запустит браузер с выбранным профилем, рекомендую еще ключ --no-remote этот ключ отключит реакцию браузера на внешние приложения (типа открой эту ссылку), в этом случае можно использовать профиль по умолчанию как обычный браузер а остальные профили как независимо работающие.
    Ответ написан
  • Удаление скриптов с веб-страницы возможно автоматизировать в браузере?

    @rPman
    Если блок однозначно идентифицируется css селектором, то хватит uBlock Origin chrome, firefox.

    Иначе придется писать javascript код для поиска и удаления/сокрытия блока и инжектить его с помощью чего то типа tampermonkey
    Ответ написан
    2 комментария
  • Можно ли пропатчить платные расширения браузера?

    @rPman
    обычно все расширения складываются в профиль пользователя как есть в виде исходников (с оговорками про webpack и т.п.) ты можешь их копировать и редактировать... например в fiefox прямо в каталоге extensions лежат .xpi файлы, это zip архивы где все в виде исходников.

    Но если разработчик заморочился с загрузкой кода по сети или обфускацией, то реверсинженеринг может оказаться дороже оплаты а значит по простому не получится
    Ответ написан
    Комментировать
  • Можно ли скрыть расширение для конкретного сайта, чтобы расширение работало, но сайт не смог обнаружить что такое расширение используется на нем?

    @rPman
    Да, шансы есть, например обнаружить способ детектирования и переписать соответствующее место в расширении или 'сломать' метод детектирования, подменив функции на свои (тупой пример, можно подменить базовые методы работы с массивами или сторонам типа indexof и проверяя входные в него параметры, возвращать неправильный ответ)

    С другой стороны, если расширение что то меняет на странице, то это можно детектировать, а значит не скрыть.
    Ответ написан
    Комментировать
  • Может ли, во время чтения файла одним скриптом, другой скрипт начать записывать в этот файл новые данные?

    @rPman
    первым, кто открывает файл, должен использовать функцию flock над идентификатором файла fopen
    $file = fopen('filename.txt', 'r');
    // пробуем установить эксклюзивную блокировку
    if (flock($file, LOCK_EX)) {
        // выполнение операций чтения
        // ...
        
        // освобождаем блокировку
        flock($file, LOCK_UN);
    } else {
        echo "Не удалось установить блокировку на файл.\n";
    }
    fclose($file);


    это системная фича posix, не привязанная к языку программирования

    p.s. аналогичные механизмы есть у windows, при открытии файла указывается тип блокировки shared...
    Ответ написан
    5 комментариев
  • Как гарантировать монотонное увеличение значения поля при параллельных транзакциях с максимальным быстродействием?

    @rPman
    Всегда в вопросах формулируй исходную задачу а не вопрос по одному из возможных решений, возможно выбран не тот путь?

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

    Эта задача решается очень просто - списком необработанных событий, лучше это сделать в отдельной таблице (просто список id из events, даже без индекса, хотя это вопрос длительности их обработки и максимального их количества), при этом монотонность идентификатора уже не требуется, только уникальность.

    При появлении записи в events тригером заносится запись в этот лог, а обработчик должен удалять каждый идентификатор после обработки. Если удалять и обрабатывать события по одному, добавив статус - в обработке, то обработчиков может быть много и они могут работать параллельно, иначе же единый обработчик может пакетно запрашивать весь список записей в логе, обрабатывать их и по окончанию обработки каждого удалять по одному (потому что нужно думать, что произойдет если случится в обработчике сбой)
    Ответ написан
    Комментировать
  • Почему для самого класса статическая переменная использует правильное значение, но при попытке вывести его, выдаёт 1?

    @rPman
    static int Print(){
    это ФУНКЦИЯ
    для ее вызова нужно использовать скобки
    Bacteria::Print()
    иначе ты получаешь ее адрес
    Ответ написан
    7 комментариев
  • Как сделать из компьютера прокси сервер для личного использования?

    @rPman
    Это сделать очень просто на основе ssh сервера, который идет в поставке как с windows (устанавливается штатными средствами) так и само собой с linux.

    Без каких либо особых настроек, ssh сервер поддерживает создание socks прокси, для этого на машине, чей ip адрес необходимо использовать нужно установить ssh сервер (если машина скрыта за фаерволом или NAT, что обычно сейчас происходит при использовании роутера, то на роутере необходимо настроить перенаправление порта 22 или любого другого, что максимум потребуется указывать в параметрах подключения клиентом) а на машине, на которой будет запущен браузер или приложение, использующее socks proxy, необходимо запустить ssh клиента (формально не обязательно на этой же машине, достаточно чтобы обе машины, браузер и ssh клиент, были в одной локальной сети), с подключением к ssh серверу и ключом -Dлокальный_ip_адрес:порт и этот ip адрес и порт указать в настройках прокси браузера (ip адрес машины на которой запущен ssh клиент, если не указывать адрес -Dпорт то будет использован localhost), дополнительно, ключ -N позволит убрать функционал терминала, оставив только функционал прокси сервера.

    По умолчанию ssh сервер будет требовать ручной ввод пароля пользователя, но это можно заменить на беспарольную аутентификацию на основе ключей (на самом деле там много способов, но это самый простой). Настроив беспарольную аутентификацию, команду на подключение к ssh серверу можно будет прописать в бесконечном цикле типа while true;do ssh .......;done в качестве автозапускаемой службы (или аналогичный скрипт cmd на windows в диспетчере заданий).
    Ответ написан
  • Какую кодировку выбрать для бд чтобы хранить фото?

    @rPman
    бинарные типы данных binary, varbinary или blob потому и бинарные, что к ним не применяются правила символьной трансляции (charset), т.е. к примеру их нельзя сортировать по алфавиту.

    p.s. настоятельно рекомендую трижды подумать, зачем тебе нужно хранить изображения в базе данных, и с высокой вероятностью лучше их хранить в файлах на диске а в базе только имя файла (а можно и имена файлов привести к идентификаторам базы).
    Ответ написан
    Комментировать
  • Как передать массив как поле класса(см. код)?

    @rPman
    Если размерность массива - константа, можно использовать готовый шаблон std:array
    std::array<тип или класс элемента, размер массива> myArray;

    Или создай свой шаблон с походим функционалом. Параметры шаблона будут доступны как обычная переменная.

    Если размер не константа, тогда передавай размер массива прямо в конструкторе
    class MyWorld
    { private:
      size_t size;
      public:
      MyWorld(size_t size) {this->size=size;}
      ...
    }
    // использовать
    MyWorld world(123);
    Ответ написан
    Комментировать
  • Возможно ли идеальное шифрование?

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

    На практике, в интернете, защищенным квантовым шифрованием, по этому квантовому каналу передается временный ключ шифрования (канал очень медленный) а сами данные передаются по обычному быстрому каналу, зашифрованные простым и надежным методом xor с этим ключом.
    Ответ написан
    4 комментария
  • Есть ли в PHP готовый инструмент для получения элемента массива вложенность которого хранится в другом массиве?

    @rPman
    С академической точки зрения, если это не в продакшен и только похвастаться, можно воспользоваться eval:
    $myfunc = eval('return function($x) { return $x['.implode('][',array_map('json_encode',$path)).']; };');
    echo json_encode($myfunc($ar)); // {"v":{"a":123,"b":321}}

    Тут array_map('json_encode',$path)) экранирует всякие ковычки и слеши, преобразуя значения в код для их получения
    Затем полученный массив с помощью implode('][',... превращается в последовательный вызов элементов этого многомерного массива.
    А eval('return function($x) { return $x[...]]; };'); формирует строку функции для вызова этой конструкции и помещает ее в переменную.
    Затем остается только вызвать это $myfunc($ar);

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

    p.s. если структура $path неизменна для проекта, я бы рекомендовал генерацию кода перед запуском (т.е. прямо .php файлы генерировать) а не во время, это будет еще быстрее и эффективнее, да и поддерживать этот бред будет понятнее.
    Ответ написан
  • Как определить, что пользователь использует официальную версию клиента программы?

    @rPman
    Только разместив ключевую часть алгоритма его работы на своем сервере, требуя доступ приложению к нему по сети, можно получить какие то гарантии, в пределах стоимости ревносинжегеринга и воспроизведения ее пользователем самостоятельно.

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

    Все иные простые способы будет взломаны, как только это кому либо понадобится достаточно сильно.
    Ответ написан
    Комментировать
  • Пртем смс с тысячи сим карт не по цене крыла самолета?

    @rPman
    Закажи себе у специалистов 'паяльника и 3д принтера' постейшую цифровую переключалку симкарт (на плате много разьемов для симкарт, и их контакты по очереди, управляемо, с нужными таймаутами, подключаются к смартфону или модему). Для сотового оператора это будет как ручное переключение... Но все равно подозрительно (можно параллельно менять imei программного на смартфоне, будет выглядеть как тысяча смартфонов попеременно вкл/выкл в одном месте, но это запрещено законом или договором с сотовым оператором).

    Это будет дешевле, чем покупать тысячи модемов или делать читалки смс (для 2g сетей модули дешёвые вроде)
    Ответ написан
    Комментировать
  • Возможно ли ускорить обмен данными между удаленным клиентом и сервером?

    @rPman
    Быстро/медленно это не скорость а ваши эмоции. Нужны численные данные.

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

    Т.е. сначала скорость внутри локальной сети между машинами в разных зданиях, затем между vpn шлюзами и машинами в их локальной сети, затем между шлюзами в сети интернет.

    Дополнительно во время этой максимальной нагрузки замеряй нагрузку на процессоры vpn шлюзов.

    В принципе топовые скорости openvpn это сотни мегабит в секунду, wireguard - до половины гигабита (допускать конфиг дающий гигабиты за счёт большого mtu но это плохо влияет на типовое использование файлового сервера), при использовании топового железа x86. По уму самый быстрый это gre, по медленнее ipsec и внизу всякие openvpn...
    Ответ написан
    Комментировать
  • Тип гудков в сотовом телефоне?

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

    У полиции гораздо больше возможностей проверить.
    Ответ написан
    Комментировать
  • Как получить курс USDT к RUB?

    @rPman
    Твой обменник что будет делать, когда возникнет значимый перекос в балансах usdt и btc? Например (и это будет происходить часто) выкупят все btc и у тебя на руках будут только usdt, будешь отказывать клиентами, желающим купить btc?

    Для этого обменники сами идут к другим обменникам или биржам и обменивают остатки. Так вот курс обмена можно брать из тех бирж, где у тебя будет храниться балансы для совершения этого выравнивания.

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

    Отсюда берешь через api текущий курс с биржи и, добавив некоторый процент, используешь как твой курс.

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

    И вообще, вопрос выбора курса обмена, это тот же вопрос спекулятивной торговли с целью получения дохода.. чем меньше разница будет с биржей, тем сильнее это будет заметно. А вопрос этот не имеет ответа в общем, каждый ищет его самостоятельно.
    Ответ написан
  • Установка MBR загрузчика на диск c разметкой GPT, возможно ли?

    @rPman
    4 комбинации:
    * mbr dos + legacy
    Требует dos таблицу разделов, ничего дополнительного делать не надо, что linux что windows умеют загружаться (начиная с 8-ой нужно отдельно делать раздел boot)
    * gpt + legacy
    Требует раздел biosboot 1mb, в него будет установлен загрузчик, при этом вне зависимости от новизны машины, загрузчик и загрузочная файловая система не должны находиться дальше 2тб от начала диска (это ограничения legacy)
    * mbr dos + efi
    Требуется наличие раздела efiboot (fat но все понимают и ntfs), кажется windows так загружаться не умеет и требует gpt, но с linux все ок
    * gpt + efi
    Рекомендованный конфиг, так же требуется раздел efiboot, все ос работают без проблем.

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