• Универсальный VPN-сервер?

    @res2001
    Developer, ex-admin
    softether это умеет.
    Ответ написан
    3 комментария
  • Как в Windows менять язык так что бы в момент переключения языка курсор ввода элементы не уходил с inputa?

    @res2001
    Developer, ex-admin
    Похоже вы как-то специфически нажимаете Alt+Shift, так что сначала жмете Alt. А по Altу винда переносит фокус ввода на первый пункт меню программы.
    Приучитесь сначала жать Shift, а затем Alt. Клавиша Shift безопасна в этом смысле :)
    Ответ написан
    1 комментарий
  • Ждёт ли NET STOP завершения службы?

    @res2001
    Developer, ex-admin
    Вроде ждет.
    Но если служба не завершается по какой-либо причине, то не знаю какое поведение. Возможно отваливается по таймауту с каким-нибудь сообщением. Перенаправьте вывод stdout и stderr в файл, чтоб можно было проанализировать позже.
    Вообще есть более продвинутая команда для работы со службами: sc /?
    Можно остановить службу, проверить состояние и если остановлена, то запустить.
    Ответ написан
    Комментировать
  • Неправильный вывод?

    @res2001
    Developer, ex-admin
    Вы не правильно инициализируете указатель ptr: int *ptr = s[0];
    Обращение s[0] просто возвращает первый элемент массива (в вашем случае 1). Это не указатель.
    Правильная запись была бы:
    int *ptr = &s[0];
    или
    int *ptr = s;


    Если бы вы поставили максимальный уровень сообщений компилятора, то в этом месте он бы вам ругнулся.
    В целом рекомендую в своих проектах всегда выставлять максимальный уровень сообщений и исправлять ошибки, на которые указывает компилятор. В большинстве случаев компилятор выдает абсолютно правильные рекомендации. Конечно бывают и исключения.
    Ответ написан
    Комментировать
  • Безопасно использовать типы atomic из Си в динамических структурах?

    @res2001
    Developer, ex-admin
    Атомарные переменные - это такие же переменные как и остальные. Инициализировать их вы можете сколько угодно раз. Это относится только к встроенным типам. Атомарные классы - это сказка.
    Но на них накладываются некоторые ограничения:
    1. выравнивание переменной - переменная должна находится по адресу обычно кратному размеру переменной. Если не будет правильного выравнивания, то intelовские процы могут сделать 2 операции чтения, что уже не будет атомарной операцией. Другие процы могут сгенерировать какое-нибудь исключение.
    2. атомарная переменная всегда volatile - т.е. компилятор не может ее кэшировать в регистре, всегда идет обращение к памяти.
    Не все атомарные переменные в std действительно атомарны. Это проверяется с помощью atomic_is_lock_free(). Атомарность зависит от платформы. Например на x86 int64 - не атомарна из-за ограничений процессора. Тогда как на 32 битных АРМах она вполне атомарна.
    При обычном чтении/записи атомарных переменных (с упорядочиванием памяти memory_order_seq_cst) происходит синхронизация кэшей ядер - из-за чего атомарные операции "дороже" не атомарных. Но этот процесс на разных архитектурах стоит по разному. Для синхронизации кэшей есть отдельные ассемблерные инструкции.

    В целом все undefined behavior для атомарных переменных в std связаны с:
    1. возможностью объявить атомарным любой класс
    2. не для всех встроенных типов на конкретной платформе гарантируется реальная атомарность (atomic_is_lock_free).
    3. если вы не будете соблюдать ограничения, то же ничего гарантировать нельзя.
    Так что особо пугаться undefined behavior не стоит. Просто соблюдайте ограничения, не используйте атомарные классы и удостоверьтесь, что встроенные типы на вашей платформе действительно атомарны.
    Ответ написан
    1 комментарий
  • Новые книги по C++?

    @res2001
    Developer, ex-admin
    Bogdan100,
    обновлённые фишки

    Вы же только изучаете язык. Обновленные фишки вам пока не сильно нужны, пока хватит и стандартных, главное чтоб книга основывалась на стандарте не ниже С++11. Берите любую толстую книгу по плюсам, например Прата подойдет, есть издание 2018 года.

    По относительно новым фишкам возьмите Скота Меерса "Эффективный и современный С++. 42 ре.... Там современность заканчивается на С++14. Но семантика перемещения разжевана очень хорошо, а это, наверное, самая главная новая фишка, которая появилась в С++11. Ну и другие фишки С++11/14 то же присутствуют.

    Из того, что недавно видел в магазинах интересного: Энтони Уильямс С++ Практика многопоточного програм.... Второе издание вышло в прошлом году. Книжка классная по многопотоку, но она не учебник, а узко специализированная, читается достаточно сложно, но материал очень хорош. На русском языке я подобного больше не видел в одной книге. Полистал оглавление - добавилось пара-тройка глав, которых не было в первом издании 2012 года.
    Ответ написан
    Комментировать
  • Вывести вместо пробелов введенной строки его ASCII-код?

    @res2001
    Developer, ex-admin
    Просто преобразуйте символ в int и выводите.
    char a = ' ';
    std::cout << "ASCII code: " << static_cast<int>(a) << std::endl;
    Ответ написан
    1 комментарий
  • Как комбинировать несколько значений из одного enum?

    @res2001
    Developer, ex-admin
    Битовые операции можно использовать только если ваш enum состоит из значений равных степеням двойки: 1, 2, 4, 8, ...
    Если у вас произвольные значения в enum (1, 2, 3, 105, 888, ...) то битовые операции применять нельзя.
    Если нужен какой-то универсальный вариант - сделайте массив значений.
    Ответ написан
    Комментировать
  • Слежение за комплектующими компов в корп среде. Какие инструменты есть?

    @res2001
    Developer, ex-admin
    Есть софтина от 10-Strike "Инвентаризация Компьютеров".
    Ее преимущество в том, что для инвентаризации она использует WMI, т.е. никаких агентов на клиентские ПК ставить не нужно. Хотя и агент то же есть. Программа не бесплатная, но стоит не много. В свое время брал ее в контору и использовал.
    Большинство конкурирующих продуктов для инвентаризации требуют установки агента.
    Ответ написан
    2 комментария
  • Как настроить маршрутизацию клиентов из LAN через VPN, а самого устройства через провайдера?

    @res2001
    Developer, ex-admin
    Вам просто нужно на малинке добавить статический маршрут до вашего DNS провайдера, куда ходит AdGuard. Маршрут этот должен быть через DNS вашего оператора связи (или что там у вас сейчас в качестве шлюза по умолчанию без поднятого ВПН).
    Никаких сложных телодвижений с настройкой фаервола не требуется.
    Ответ написан
  • Как можно оптимизировать код?

    @res2001
    Developer, ex-admin
    Может быть, если конвертировать число в строку и проверять строку на палиндром, будет быстрее. Не уверен, надо проверять. Только не используйте std::string, а используйте стандартный сишный массив символов.
    Ответ написан
    Комментировать
  • Вывод без использования iostream?

    @res2001
    Developer, ex-admin
    std - это внешняя библиотека. Хоть она и "стандартная", но не является неотъемлемой частью языка. Например, можно писать программу, не используя стандартную библиотеку - довольно забавное занятие. Попробуйте вывести "Hello world" или выделить буфер в динамической памяти без std .

    Поэтому необходимы почти все стандартные действия для подключения дополнительных библиотек:
    1. Включение заголовочных файлов - первое из этих действий.
    2. Второе действие - линковка с библиотекой исполняемого файла программы - выполняется по умолчанию большинством компиляторов. Наоборот для отключения линковки с std нужно указывать дополнительные ключи. Для других библиотек этот пункт нужно выполнять разработчику явно (указывать необходимые опции компилятору).

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

    @res2001
    Developer, ex-admin
    Шифровать данные и трафик (канал) вместе нет особого смысла - двойное шифрование сильно безопасности не прибавит. Достаточно будет реализовать один из вариантов шифрования.
    Если сервер "безопасный", т.е. он находится в надежном месте, к нему нет доступа у недоверенных людей, то шифровать данные нет смысла. Используйте ВПН для доступа серверу - весь трафик, передаваемый по ВПН, будет шифрованным. Данные не ограничиваются только файлами - будет шифроваться любой трафик передаваемый по ВПН. Шифрование будет происходить автоматически, пользователю нужно будет только установить ВПН соединение.
    Если сервер не безопасный (например VPS в облаке), то есть смысл шифровать данные, канал при этом может быть открытый. Для шифрования файлов можно использовать что угодно, например архиватор с поддержкой стойкого шифрования, или тот же PGP и т.п. В этом случае от пользователя потребуются дополнительные действия по шифрованию/расшифрованию файлов. А так же нужно организовать и поддерживать инфраструктуру открытых ключей (PKI) для того что бы клиенты могли генерировать ключи.
    Ответ написан
  • Как конвертировать socks5 в openvpn?

    @res2001
    Developer, ex-admin
    Абстрагируясь от текста (т.к. мало поясняет схему и смысл) и предполагая, что клиент будет на смарте с openvpn, то схему можно детализировать так:
    Смартфон с openvpn клиентом -> что-то с openvpn сервером + socks5 -> интернет
    Таким образом на клиентском смарте поднимаем соединение openvpn, далее в браузере (или что там у вас ходит через socks5) прописываем адрес прокси как внутренний ВПН адрес openvpn сервера. Работаем.
    Ответ написан
  • Как рекурсивно конвертировать файлы во всех папках и подпапках?

    @res2001
    Developer, ex-admin
    По умолчанию никак не выполнить. Команды find нет в винде - это чисто никсовая команда.
    Но можно поставить какой-нибудь портированный набор линуксовых утилит (например msys2 или что-то другое) и из-под него запустить эту команду.
    В целом это не сложно переписать для cmd:
    @echo off
    for /f "tokens=* delims=" %%a in ('dir /b /s *.webm') do ffmpeg -i "%%a" -vn -ab 128k -ar 44100 -y "%%~dpna.mp3"

    Сохраните код в батник в каталоге с файлами и запустите.
    ffmpeg должен быть доступен для запуска из командной строки, если не доступен - то нужно прописать полный путь до него.
    Код не тестировал.
    Ответ написан
    7 комментариев
  • Как можно сделать подобное?

    @res2001
    Developer, ex-admin
    Создайте в локальном репозитории папку, положите туда то что надо, потом:
    git add <имя папки>
    git commit ...
    git push
    Ответ написан
    Комментировать
  • Как в .bat файле правильно вызвать другой bat и передать переменную?

    @res2001
    Developer, ex-admin
    На сколько понял вся проблема у вас - обработать вывод psexec?
    Для этого есть конструкция for /f
    Например:
    for /f "tokens=* delims=" %%a in ('psexec ... ') do ( 
      echo %%a
    )

    Так же можно перенаправить вывод psexec в файл, а затем в for /f уже читать файл.
    Для справки: for /?
    Ответ написан
    Комментировать
  • Как обновить Python 3.5.3 до последней версии?

    @res2001
    Developer, ex-admin
    Это последняя версия питона в репах дебиана?
    Если да, то найдите стороннюю репу со свежим питоном и добавьте ее в систему.
    Если нет - обновите сам дебиан
    sudo apt update & sudo apt upgrade
    Ответ написан
  • Указатель или Индекс элемента?

    @res2001
    Developer, ex-admin
    имею ввиду, зачем делают так *p+1 для доступа к следующиму элементу, а не p[1]?

    Вообще то ничего общего между приведенными операциями нет (смотрите приоритет операций):
    *p+1 == (*p) + 1
    p[1] == *(p+1)


    Но вопрос в целом понятен, не взирая на ошибку в примере.
    Надо смотреть на контекст. Часто бывает, что код не ограничивается одноразовым применением p[1], а например есть целая серия обращений к p[1], в этом случае будет экономия на операциях, если вы сначала вычислите адрес p[1], а в дальнейшем будете использовать простое разыменование этого адреса. Будет ли реально выигрыш во времени исполнения зависит от компилятора, в целом думаю, современные компиляторы в состоянии сами сделать подобную оптимизацию.
    Ответ написан
    Комментировать
  • Qt+MinGW x86: как отладить вылет в release-версии?

    @res2001
    Developer, ex-admin
    Соберите release версию с отладочной информацией, запустите под отладчиком, при вылете отладчик активизируется в месте появления исключительной ситуации, сможете исследовать состояние программы.
    Ответ написан