• Как правильно построить структуру проекта используя cmake?

    @res2001
    Developer, ex-admin
    Отлаживать библиотеку логичнее специально написанными для этого тестами. В этом случае библиотека будет представлять самостоятельный продукт. Ее можно будет устанавливать клиентам отдельно. А в основном продукте использовать find_package для поиска библиотеки.

    Если вам этого не надо, то вполне нормально включать каталог с исходниками библиотеки как подкаталог продукта и использовать add_subdirectory.
    Ответ написан
    Комментировать
  • Одномерные массивы C++ почему не вычисляет произведение отрицательных элементов массива М и максимальный элемент массива К?

    @res2001
    Developer, ex-admin
    С произведением все просто - вы инициализировали Dob_v нулем, а произведение любого числа с нулем = нулю. Вот у вас всегда нулевой результат. Инициализируйте Dob_v единицей.
    У вас путаница в двух последних циклах - разберитесь с закрывающими скобками - получается цикл по K вложен в цикл по M. Причем в цикле по К не правильное условие, т.к. К содержит всего 10 элементов.
    Ответ написан
    Комментировать
  • Есть ли возможность использовать дистрибутивы wsl2 на другом диске?

    @res2001
    Developer, ex-admin
    Сам дистрибутив, скорее всего лежит где-то в каталоге винды (где хранится и остальной софт, скачанный из MS Store), но он скорее всего не очень много весит.
    Но развернутый в WSL линукс лежит в профиле пользователя. Перенесите профиль на другой диск и будет вам счастье.
    Вообще профиль на другом диске сильно помогает, когда надо переустанавливать винду. Уже лет 15 практикую это везде куда только дотягиваются руки :)
    Ответ написан
    Комментировать
  • Указатель на функцию или атрибут weak?

    @res2001
    Developer, ex-admin
    Указатель на функцию:
    плюсы: явный механизм (требует явных действий пользователя - вызова функции регистрации нового callback), понятней и проще (реализован стандартными средствами языка), универсальней (будет работать на всех платформах и компиляторах), для подключения пользовательского функционала не требуется пересборка библиотеки.
    минусы: динамическое связывание - если функция будет активно вызываться, то это может привести к дополнительным накладным расходам.

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

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

    Выводы:
    Если требуется статическое связывание, то выбор - условная компиляция. При грамотной реализации тут можно минимизировать действия пользователя по подключению своей реализации функции в сборку библиотеки. Если библиотеку не планируется выпускать в открытый доступ и не смущает не стандартность - можно использовать weak из-за простоты реализации.
    В остальных случаях - указатель на функцию.
    Ответ написан
    Комментировать
  • Нужно отсортировать все файлы по папкам.?

    @res2001
    Developer, ex-admin
    В вашей задаче несколько проблем:
    1. Убрать двойное расширение. Если расширение всегда фиксировано, то можно просто использовать операцию замены, которая есть в set. Если расширение не фиксировано, то можно использовать 2 вызова процедуры (или вложенные циклы for) и модификатор %%~dpnI.
    2. Выделить подстроку в имени файла. Само имя файла выделить из пути, из которого уже предварительно удалены расширения, можно с помощью модификатора %%~nI. Далее можно использовать цикл for /f для разбиения имени на составные части, разделителем указать символы "+", "-", "_"

    Обход файлов делается в цикле for.

    Для справки смотрите:
    :: тут описание модификаторов и описание разновидностей for
    for /?
    :: операция замены, арифметика, ...
    set /?
    :: Вам нужно будет, скорее всего использовать режим отложенного расширения переменных: ENABLEDELAYEDEXPANSION. Разберитесь с ним, это достаточно тонкий и не очевидный момент
    setlocal /?
    :: просто так
    if /?
    :: Каждая команда cmd имеет свою справку используйте ее. Это основной источник информации по программированию cmd
    ...
    Ответ написан
    9 комментариев
  • Почему процессор не загружается сразу в защищёный или 64 битный режим?

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

    @res2001
    Developer, ex-admin
    Функцию count реализуйте макросом:
    #define count(arr)     (sizeof(arr) / sizeof(arr[0])

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

    @res2001
    Developer, ex-admin
    Если не хотите АД, то легких путей не ждите. АД - это и есть легкий путь.

    Для начала вам нужно на всех компах в сети:
    1. Завести одного пользователя (с одним и тем же паролем) с правами администратора. На компах админов то же нужно завести такого же пользователя.
    2. Настроить удаленный доступ по RDP на всех компах как минимум для админа
    3. Дать четкие имена компам, что бы вы могли без труда по имени/фамилии сотрудника (номеру телефона или чему-то еще) определить проблемный комп. Можно в качестве wallpaper вывести IP адрес и другую инфу, для этого есть соответствующий софт.
    4. Включить "доступ к файлам и принтерам"
    5. Убрать права администратора у пользователей
    6. Начиная от Windows Vista и дальше, нужно выключить UAC для удаленного запуска программ. Делается это правкой реестра:
    reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f


    В винде почти все администраторские операции на локальном компе можно делать удаленно. Вышеприведенные настройки позволят это делать (пп.1,3,4).
    В винде почти все инструменты для удаленного администрирования уже есть из коробки.

    П.2 позволит подключиться к рабочему столу и потрогать руками, не отрывая задницы от своего кресла.
    В RDP есть такая штука как remote shadow - это дает возможность удаленно подключаться к рабочему столу пользователя одновременно с пользователем (т.е. пользователь будет видеть все ваши действия, так же как и вы его). Часто это бывает удобно, но требует специфической настройки. В инете есть информация, ищите.
    П.5 - это обычная мера безопасности, которая обеспечит 50% безопасности вашей сети.
    П,6 - без этого пункта вы не сможете удаленно выполнять программы, требующие админских прав, на компах. Сам UAC отключать не стоит, вещь достаточно полезная.

    Имея эту базу, дальше вы уже можете прикручивать к сети прокси, фаерволы, почтовики и т.д. и т.п. не сильно отвлекаясь на поддержку пользователей и компов в сети.
    Но не ждите, что кто-то или что-то сделает эту работу за вас. Таких чудесных программ не существует. Вам придется погружаться во все детали самому.
    Изучите хотя бы один скриптовый язык программирования, встроенный в винду из коробки: cmd, powershell, JScript, VBScript. Сейчас, пожалуй, самый актуальный powershell. Это поможет частично автоматизировать ваши процессы.

    PS: Если что я 10 лет админил одноранговую сеть из более чем 100 компов. АД там не разворачивалась по "идеологическим" причинам я в этом был не виноват :-)
    Ответ написан
    6 комментариев
  • Как настроить ninja под windows?

    @res2001
    Developer, ex-admin
    При установке MSVS устанавливаются вместе с ним несколько батников, которые настраивают среду для сборки.
    У меня в MSVS 2017 они называются "Native tools command promtp ...". В других версиях MSVS название может немного меняться. Батники находятся в меню Пуск в папке MSVS.
    Запустите подходящий батник, он настроит среду сборки и запустит командную строку. Там и выполняйте сборку вашего проекта. При этом никаких ручных настроек не требуется.

    PS: зря вы установили MSVS не в каталог по умолчанию - могут быть трудно диагностируемые проблемы при сборке из командной строки. Возможно вы как раз с этим и столкнулись.
    Ответ написан
    Комментировать
  • На каком режиме работают выполняются сервисы Пользовательский режим или на Режиме ядра?

    @res2001
    Developer, ex-admin
    В kernel mode работает только само ядро и драйверы устройств. Все остальное работает в user mode.
    Любая программа, совершая системный вызов, переключается в kernel mode на время выполнения системного вызова. Системных вызовов все программы совершают много и регулярно.
    Ответ написан
    1 комментарий
  • C++ WinForm Как правильно вывести массив структур переданный через указатель?

    @res2001
    Developer, ex-admin
    base[ind].birth.month
    Вообще и остальные поля нужно выводить через точку.
    Кроме того, если приведенный код ch_kol() - это реально все что есть в функции, то это не верно. Вы в ch_kol возвращаете указатель на локальную переменную, как только отработает return этот указатель станет не действиетльным, т.к. массив base перестанет существовать после выхода из функции.
    Подобное определение массива baseProgr base[max];, если max не константа приводит к объявлению массива переменной длины (VLA). Строго говоря С++ не поддерживает VLA, т.к. это фишка Си. Но некоторые компиляторы (gcc) при включенных расширениях (по умолчанию включено) позволяют их использовать. Но этот код становится не переносимым, т.к. при других опциях компилятора или на другом компиляторе код может не собраться.
    Ответ написан
    4 комментария
  • Как правильно использовать свои опции в cmake?

    @res2001
    Developer, ex-admin
    1. Первый параметр при запуске cmake - путь к файлу CMakeLists.txt, который нужно обработать.
    Обычно процесс сборки с помощью cmake у меня выглядит примерно так:
    Создаю в произвольном месте пустой каталог для сборки проекта, перехожу в него, там выполняю: cmake <путь к cmakelists.txt>
    В этом случае каталог с исходниками не заполняется не нужными там артефактами сборки.

    2. опции в cmake передаются так cmake ... -D<имя опции>[=значение]
    Т.е. -D - это ключ за которым следует имя опции. Теперь сравните с тем как вы это применяете.
    Синтаксис похож на определение макросов в командной строке компиляторов C/C++.
    Ответ написан
  • Как правильно сделать комплексное преобразование Фурье в python?

    @res2001
    Developer, ex-admin
    Использовать numpy.fft.fft().
    Можно использовать с действительными числами, преобразование все равно будет комплексным.
    Если уж сильно хочется чтоб было все комплексное - просто добавьте нулевую мнимую часть к вашим действительным числам. Это можно сделать например сложив ваш действительный массив с 0j.
    Ответ написан
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    Developer, ex-admin
    Ответ в комментариях тут.
    Ответ написан
    Комментировать
  • В чем отличие инструментов для отладки - step и step into?

    @res2001
    Developer, ex-admin
    Если в текущей строке вызов функции, то step не зайдет в функцию, т.е. функция выполнится вне отладчика и следующей отлаживаемой строкой будет строка следующая за вызовом функции.
    step into зайдет в функцию и следующей отлаживаемой строкой будет первая строка кода в функции.
    Ответ написан
    Комментировать
  • Как правильно настроить кодировку для std::ifstream и std::string?

    @res2001
    Developer, ex-admin
    Используйте wstring и широкие символы вместо string и char.
    Ответ написан
    2 комментария
  • Что лучше будет: - железный впн или программный?

    @res2001
    Developer, ex-admin
    Вы должны понимать, что "железный" в вашем примере - это не ВПН реализованный в "чипе". В микротиках есть свой процессор, на котором крутится операционная система, ВПН там реализуется точно так же как и программный вариант, даже с высокой вероятностью используется то же самое ПО, которое вы бы использовали в программном варианте. Но часто производители железок модифицируют ПО под свое понимание проблемы и какой-то функционал, который работает в стандартном варианте в железке работает не так или не работает вовсе. У некоторых производителей железок есть своя собственная реализация ВПН.

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

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

    Кстати, никто не запрещает делать "гибридный" ВПН. Если в железке ВПН реализован с использованием каких-то стандартных протоколов, то вы можете использовать и его программный вариант в тех точках где это будет удобно, а в других местах использовать "железный" ВПН. В общем нет никакого смысла себя загонять в рамки железный/программный - действуйте по обстоятельствам.

    На счет белых IP - для ВПН вам понадобится хотя бы 1 белый статический адрес, на нем вы развернете ВПН сервер. Можно использовать схему динамический белый адрес + DDNS, но это так себе идея. ВПН клиенты могут использовать серые адреса. Под ВПН сервер вы можете арендовать VPS или развернуть его где-то на своей площадке где уже есть белый адрес.
    Ответ написан
    Комментировать
  • Как найти файлы с определенными свойствами?

    @res2001
    Developer, ex-admin
    dir /a-ds /b /s
    Справка по dir: dir /?
    Ответ написан
    Комментировать
  • Как получить список файлов-symlink'ов из директории?

    @res2001
    Developer, ex-admin
    В команде dir ключ /al заставляет ее выводить только ссылки. Ключ /a-d - только файлы.
    Совместить их можно так:
    dir /a-dl /b /s C:\way\
    Остальные ключи посмотрите в справке.

    PS: Спасибо за вопрос. Раньше это как-то не нужно было. Открыл для себя новые возможности dir :)
    Ответ написан
    Комментировать
  • Как вызвать класс комплексное число?

    @res2001
    Developer, ex-admin
    Для получения 9+12i надо вызвать computePolynomial(), его результат вывести на экран.
    Ответ написан