Задать вопрос
  • Перенос Linux c vhdx на hdd?

    @rPman
    Для начала метка активного диска это очень устаревшая методика, работает только с legacy mbr boot и только с dos и старыми windows.

    Если система EFI (материнка + настройка в биосе) то нужно восстановить загрузочную запись в биосе (некоторые биосы позволяют выбрать откуда грузиться и так).

    Самое простое и универсальное (не важно какой биос), загрузиться с livecd/liveusb (любую систему linux той же архитектуры, т.е. x86/x64/... в идеале той же версии но не обязательно), смонтировать корневой раздел в какой-нибудь каталог типа /mnt (причем если root состоит из нескольких разделов типа /boot /home и т.п. то нужно смонтировать их все в правильном порядке) и запустить команду
    grub-install /dev/sda --root-directory=/mnt
    где /dev/sda это устройство с диском с которого нужно грузиться (где лежит efiboot или biosboot или для старых mbr дисков где будет загрузочный сектор)
    а /mnt - каталог, в который смонтирован корневой раздел файловой системы твоей перенесенной ОС.

    p.s. grub все сам проверит, восстановит и настроит, и если какая ошибка - напишет

    Дополнительно удостовериться, что в /etc/fstab указаны верные устройства монтирования а лучше перевести на UUID
    Ответ написан
  • Скачанное видио не удаляется на телефоне, что делать?

    @rPman
    В галерее показаны иконки, так происходит, если файл удалить 'сторонними' средствами а иконки (это отдельные файлы, по уму лежат тут же но переименованные с точкой в имени в начале) нет.

    Достаточно удалить файл еще раз из галереи и он исчезнет.

    Так же помним, что гугловская галерея собирает файлы из нескольких мест - внутренняя память телефона, внутреннее хранилище и карта памяти (возможно сюда добавляется еще и облачное хранилище), все это будет свалено в кучу и понять что где из интерфейса нельзя.
    Ответ написан
    Комментировать
  • Что-то странное в действиях Гугл и на смартфоне. Что это?

    @rPman
    Очень не хватает скрина этого 'введите код' приложения youtube.

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

    Можно найти системные логи (есть приложения для их чтения, но лучше из android studio на десктопе их смотреть), можно перепроверить что на смартфоне стоят именно те приложения что были изначально (потому что название и иконка не является чем то уникальным, мало того, после того как на смартфоне появились сторонние app store (те же китайские или российские), бардак увеличился кратно, ведь и китайцы и россия желают присосаться к потоку пользовательской приватной информации и полностью контролировать смартфоны пользователей.
    Ответ написан
    4 комментария
  • Как настроить работу через VPN только одного приложения KRDC в Manjaro Linux?

    @rPman
    Если полный нуб, то подними vpn в виртуалке и там же запускай нужное приложение.

    Формально для данной задачи подойдёт cgroup network namespace, достаточно сложно для настройки
    Ответ написан
  • Может ли ПО удаленного доступа узнать о карте захвата в моём ПК?

    @rPman
    Короткий ответ - часто да, а в общем нет.

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

    При подключении карты захвата к hdmi/dsub детектировать почти невозможно, есть протокол общения с монитором, где передаются параметры поддерживаемых разрешений и куча другой информации, именно эта информация поможет детектировать карту захвата, но нужно будет изучить рынок устройств и банально собрать базу этих EDID
    Ответ написан
    Комментировать
  • Как сделать так, чтобы nvidia a100 заработала в yandex cloud с драйвером 535 и cuda 12.2?

    @rPman
    У меня только один вопрос, пробовал ли ты устанавливать необходимые версии софта в docker?
    Ответ написан
    3 комментария
  • Синхронизация двух директорий через ssh?

    @rPman
    rsync более чем покроет все твои задачи, и он считается стандартом defacto в мире синхронизации файлов, но чтобы добавить полезной информации - у всех механизмов синхронизации на основе файлов есть легкий недостаток, информацию об изменении файла они получают из метаинформации (размер файла, флаги или даты модификации), которая не защищена от изменения, т.е. возможна ситуация, когда файл изменен но его дата нет.
    spoiler
    А еще есть проблема еще больше, обычно файлы копируются целиком, даже если в них были только минимальные изменения (вопрос что есть изменения - отдельный и философский), классический пример - вставка или удаление новой строки в текстовый файл, с помощью утилиты diff можно сравнить старую версию и новую версию файла, и получить diff patch, текстовый файл, содержащий только информацию об изменениях (так же построчно а не посимвольно), но для проведения этого сравнения нужно прочитать старую версию файла и новую, а так же потратить порядка n^2 памяти (в универсальном случае для binary diff), поэтому этим не пользуются именно для синхронизации файлов, а копируют файл по сети целиком (но помните об этом если у вас есть память для хранения копии старых файлов но очень медленный канал связи).

    Теперь о важном - если использовать cow файловые системы типа btrfs/zfs, то можно максимально быстро (без затрат памяти и лишних чтений с диска) получить максимально эффективный патч простых бинарных изменений (без сдвигов содержимого файла) с минимальным размером куска файла - размером с кластер файловой системы (обычно 4 или 8 кб) и послать его по сети, а затем применить его на удаленную файловую систему (btrfs snapshot send), при этом это еще и максимально эффективно для медленных дисков hdd (так как утилиты пытаются обрабатывать данные последовательно а не случайно), в общем никакой другой алгоритм так эффективно синхранизацию больших объемов не сможет сделать (точнее можно, если использовать binary diff и хранить локально копии удаленных старых версий, но это очень ресурсоемко и по памяти и по процессору)
    Ответ написан
    Комментировать
  • Какие библиотеки и как использовались для создания 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 файлы генерировать) а не во время, это будет еще быстрее и эффективнее, да и поддерживать этот бред будет понятнее.
    Ответ написан