Задать вопрос
  • Должны ли все асинхронные методы вызываться с ключом async?

    @rPman
    Асинхронность - это механизм многозадачности в пределах одного потока (.net умеет это делать и в пределах нескольких потоков), когда существует некий цикл, в пределах которого код (пользовательские функции) выполняются по очереди.

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

    async/await это синитаксический сахар, позволяющий красиво использовать асинхронный код в обычном стиле программирования. Когда компилятор видит async он сохраняет состояние (стек) и передает выполнение к очереди для других кусков кода (помеченный async)
    Ответ написан
  • Как обновить Win 7 до win 10?

    @rPman
    попробуй последовательно обновиться через 8 версию
    win7 -> win8.1 -> win10

    p.s. совет, делай все без подключения к интернету, сам не пробовал но интуиция подсказывает что так будет надежнее
    Ответ написан
    6 комментариев
  • Где скачать android sdk для aarch64 linux?

    @rPman
    Попробуй установить linux окружение, в гуглплей есть буквально пакеты называются ubuntu или debian root, внутри будет почти голый linux с xserver, можно ставить приложения apt install, внутри ставишь в т.ч. браузер (это будет именно десктопный). Настоятельно рекомендуется клавиатура и мышка.

    Если это не поможет (хотя у гугла должны быть пакеты для arm, правда скорее всего только для mac), то можешь создать себе геморой и установить qemu - эмулятор, запустить эмуляцию x86 машины и внутри ее уже устанавливай x86 linux и android sdk. Не уверен что ты в разумные сроки дождешься хотя бы его запуск.

    p.s. настоятельно рекомендую арендовать в облаке машину с почасовой оплатой (если работать предполагается на 24х7), подключаться к ней по тому же ssh -Y (перенаправление вывода на локальный xserver), даже дорогой селектел позволит арендовать за 5р в сутки за ip + 5р в час + по мелочи на бакапы за минимальную машину.

    В теории можно даже подключиться в режиме отладки по сети (далеко не все прошивки android это позволяют) и запускать приложения на другом или даже этом же смартфоне/планшетнике... занятная матрешка получится.
    Ответ написан
    3 комментария
  • Как лучше всего реализовать хранение "шаблонов" файлов?

    @rPman
    Хранение блобов в файле программы (оно будет мапиться на адресное пространство и читаться эффективнее fread) в .data секции, создать объектные файлы с помощью objcopy или генерировать константы массивов с 0xXX с помощью xdd

    https://caiorss.github.io/C-Cpp-Notes/resources-ex...
    Ответ написан
    Комментировать
  • Как работает PHP, Браузер - PHP?

    @rPman
    За многозадачность отвечает тот кто собственно запускает php, например веб сервер, в его настройках указывается, сколько потоков должно быть запущено одновременно, при превышении это количества клиенты ждут.

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

    Так что от тебя зависит
    Ответ написан
    Комментировать
  • Как работать с кошельком зная его приватный ключ?

    @rPman
    Почти все нормальные криптовалюты имеют кошелек с api (часто rpc) по работе с ним.
    Так же для облегчения веса в мегабайтах результата, пользуются (часто неофициальными) библиотеками.
    Для криптовалют с поддержкой контрактов бывают особенности реализации, так же надстройки меняют картину, например lightning network требует отдельный кошелек/демон lnd когда как обычные переводы bitcoin можно делать только офф кошельком.

    гуглить: имя твоей криптовалюты + имя языка программирования + library + опционально название/версия контракта
    Ответ написан
    Комментировать
  • Как настроить автоматический вход по RDP от имени текущего пользователя компьютера включенного в домен?

    @rPman
    Раз у вас все доверяют друг другу, то можно отключить пароль у пользователя в принципе, на сервере пишешь:
    Reg.Exe add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 1 /f

    либо вручную в реестре
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]
    "LimitBlankPasswordUse"=dword:00000001
    Ответ написан
    Комментировать
  • Как можно получать оповещения при заходе на компьютер по RDP?

    @rPman
    В task scheduler (планировщик задач) есть условие - авторизация (вход) пользователя, на него можно повесить запуск своей программы (если тебе надо запрос по http отправить, тем же повершелом или любой другой утилитой, хоть тот же curl)
    Ответ написан
    Комментировать
  • Где взять самые дешевые сервера VPS (Не Россия)?

    @rPman
    lowendstock.com
    Ответ написан
    Комментировать
  • Как скрыть адрес вызываемой функции в C++?

    @rPman
    В коде, указанном в вопросе написана белиберда
    В конструкторе предлагаешь сделать присваивание
    vProtect = Protect;
    глобальной переменной vProtect имя класса Protect (потому что у тебя Protect и класс и переменная типа cProtect, (то что компилятор тебе это позволил уже бардак), если переименовать cProtect мембер Protect в protect (как рекомендует большинство code styling - имена классов с большой буквы, имена переменных - с маленькой, чтобы не запутаться), а еще тип vProtect у тебя - указатель, а Protect - нет, если будут оба указатели то само собой все будет собираться, но все равно смысла это иметь не будет.
    -----------------------

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

    В c++ для этого реализован класс std::function, пример использования для вызова именно метода класса (для простоты пример без аргументов но с аргументами все то же самое, надеюсь ты понимаешь, что у тебя должны быть одинаковые аргументы и типы во всех методах, или должны быть группы для разных типов, но чем больше групп тем проще анализ кода, иначе тупо по типам и количеству аргументов все можно будет понять)
    // определяем класс
    class MyClass
    {
      public:
      void myFunA(){std::cout<<"A";};
      void myFunB(){std::cout<<"B";};
    };

    однократно где то инициализируешь массив адресов функций (никто не мешает по коду это перемешивать)
    std::function<void(MyClass*)> functions[]={&MyClass::myFunA,&MyClass::myFunB};

    вызов метода по номеру x
    MyClass obj;
    functions[x](&obj);
    Ответ написан
    3 комментария
  • Как сделать, что бы Chat GPT взял два разных сюжетных отрывка и с помощью их сделал общее описание сюжета, сюжетную завязку или что-то подобное?

    @rPman
    Заполни этим потоком сознание chatgpt, добавив в конце что ты хочешь чтобы он с этим сделал.

    Создание промптов к современным ИИ (а они вполне себе близкие по идеологии, что dall-e/stable diffusion что chatgpt) - целое искусство, и не удивлюсь что скоро появятся учебники по нему, в два слова так не объяснишь, настоятельно рекомендую полистать существующие статьи и провести самостоятельные эксперименты, по больше, появится смутное понимание на интуитивном уровне как это работает.
    Ответ написан
  • Как изменить пути LXC?

    @rPman
    попробуй заменить этот каталог на символическую ссылку на нужный тебе
    в подавляющем большинстве случаев это работает прозрачно
    Ответ написан
    2 комментария
  • Как встроить антивирусный движок в python?

    @rPman
    Полагаю в мире есть только один открытый антивирусный движок с условно свободными базами и обновлениями - clamav, вот его и интегрируй, либо через библиотеку libclamav либо вызывай утилиту командной строки

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

    @rPman
    Воспользуйся инструментами ОС, позволяющие разграничивать доступ к информации как на основе прав доступа так и с использованием шифрования.

    Например в window создаешь отдельный профиль пользователя, задаешь ему пароль и запускаешь браузер через ярлык, с помощью правой кнопки мыши с shift, выбрав в меню - 'запустить как', запросит пароль (так же есть консольная утилита runas). Данный экземпляр браузера работает независимо от текущего, может быть одновременно несколько под разными пользователями, часто сами браузеры разрешают больше, под несколькими профилями в пределах одного но там уже без паролей).

    Шифрование можно включить на ntfs файловых системах персонально для каталогов. Доступ к такому каталогу возможен только под пользователем-владельцем, даже администраторы не могут

    p.s. Но есть нюанс - администраторы машины могут установить приложение-шпион, отслеживающее вводимые пароли либо копирующие зашифрованные файлы в момент запуска приложения под правами пользователя, имеющего к ним доступ. Нет никаких абсолютно гарантирующий безопасность решений, так как даже если запускать выделенную операционную систему со своего носителя, владелец компьютера может подменить загрузчик (например виртуальная машина с поддержкой EFI и подменой логотипов) - т.е. так работают руткит вирусы/трояны. Мало того, владелец машины, если он злоумышленник, может вставить аппаратный шпион в клавиатуру,.. вопросы безопасности сохранения информации - не простые.

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

    @rPman
    Date.parse
    returns the number of milliseconds since January 1, 1970, 00:00:00 UTC


    new Date(value)
    An integer value representing the number of milliseconds since January 1, 1970, 00:00:00 UTC
    Ответ написан
    Комментировать
  • Как правильно организовать защиту одной сети от другой?

    @rPman
    Два фаервола - устройства (роутеры например) с каждой стороны провайдеров, определяющие правила доступа к ресурсам и объединенные в одну сеть меду собой
    Ответ написан
    Комментировать
  • Как написать свой компилятор?

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

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

    Есть еще оптимизация кода, скорее всего именно это определяет объем и сложность задачи, так как без нее это уже не так сложно.

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

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

    Или наоборот, вместо генерации машинного кода, используется коды выдуманной виртуальной машины, которая будет запускаться (транслироваться в реальном времени в машинный код) на разных архитектурах одинаково (например jvm и clr).

    И в догонку, в мире уже столько наворотили языков что разрабатывать и поддерживать под каждый оптимальный компилятор становится сложно, что в мире придумали llvm - набор правил, стандартов, библиотек и утилит, включая байткод виртуальной машины и трансляторы на все архитектуры... к примеру opencl использует llvm как основу
    Ответ написан
    1 комментарий
  • Можно ли ограничить доступ к ssh через разрешенный ip таким образом, чтобы эти ограничения не распространялись на sftp?

    @rPman
    Можно настроить шел для соответствующего пользователя nologin, как альтернатива, я помню что в настройкахssh можно прямо сказать что пользователю доступен только sftp
    Ответ написан
    Комментировать
  • Подойдёт ли мини-ПК на Arduino/Raspberry pi для обучения программированию?

    @rPman
    Да, с некоторыми оговорками по тому, чего именно собираешься программировать.

    И настоятельно рекомендую не использовать малинку как основной компьютер, дорого медленно глупо. Основное место им - компактные и энергоэффективные компьютеры

    Если желаешь найти максимально дешевое железо и при этом что то программировать, настоятельно рекомендую собрать машину x86 на базе mitx материнских плат со встроенными процессорами от intel серии N, можно на их базе найти готовые 'железки' (коробка) от 10т.р.
    например на базе N5105 от 10.5т.р. (полистай там опции есть)

    Если собирать самому, настоятельно рекомендую открыть каталог твоего магазина и выбрать материнки mitx + встроенный процессор, пропуская AMD (я люблю эту компанию но встраиваемые решения от них отвратительны) и совсем уж старые версии, старее 2016г, выбирая минимальную ram по цене и любой ssd диск (если linux можно даже с флешки потерпеть какое то время, но это экономия 'на спичках', сэкономишь тысячу, потратишь нервов на сто)

    Само собой монитор клавиатура и мышка тебе нужны, но все современные (последние лет 20) телевизоры позволяют подключать к себе компьютер, так что на этом тоже можно сэкономить, но как очень временное решение. Так же можно найти БУ, за дешево, если к примеру маленький экран.

    p.s. если с деньгами совсем швах, то можно заранее потратить выделенные деньги на нормальный смартфон, купить usb-хаб с подключением к его разъему и настроить на нем debian-root, это по факту полноценный linux, в некоторых случаях можно добиться запуск почти любого приложения. Подключить монитор в данной ситуации можно через miracast/chromecast (телевизоры последние 5-10 лет) либо вместо usb хаба покупать докстанцию (это просто первая попавшаяся модель как пример) с поддержкой dp/hdmi (при выборе смартфона проверять поддержку подключения, таких мало).

    upd. p.p.s. в продолжение темы рабочего места из смартфона
    так как за работой не всегда проводится много времени, можно воспользоваться облачными решениями, найти любого провайдера с почасовой оплатой и поднимать там машину, работая на ней удаленно, к примеру селектел (дорогой) позволяет за 5р сутки за ip address + ~5р в час за 2cpu8ram10g-ssd + копейки на бакап, поднимать и выключать машину по требованию.
    Ответ написан
    2 комментария
  • Как узнать размер незаполненного массива в c++?

    @rPman
    для массивов изменяемого размера используй std::vector (а так же для разнообразия std::deque, std::list, а если к примеру значения уникальные то std::map а вообще контейнеров списков в c++ много)

    это примерно в 2-3 раза медленнее и кушает память, бонусом будет контроль выхода за границы.

    само собой можно на основе обычных c-массивов и своего класса запилить под свои нужды и логику, например хранить рядом с массивом его текущую длину, при превышении текущего размера пересоздавать вдвое большего размера, а при двухкратном уменьшении - соответственно уменьшать)
    Ответ написан
    Комментировать