• Несколько копий одной и той же службы с разными конфигами?

    @res2001
    Developer, ex-admin
    Можно сделать несколько конфигурационных файлов службы для systemd и в каждом передавать в параметрах свой конфиг.
    Многие службы уже содержат подобный "универсальный" конфигруационный файл, который позволяет из "коробки" запускать несколько экземпляров службы. Например, такой у openvpn, на сколько я помню.
    В общем, разбирайтесь с настройкой служб в systemd. Там не то что бы сильно сложно.
    Ответ написан
    Комментировать
  • Нужно ли перед установкой программ выполнять sudo apt update?

    @res2001
    Developer, ex-admin
    apt update - просто обновляет список доступных в подключенных репозитариях пакетов.
    Без этого обновления пакетный менеджер не знает какие пакеты устарели и требуют обновления, а так же не знает о новых добавленных пакетах.
    Перед установкой нового пакета лучше всего выполнить apt update, но можно и не выполнять, ничего особо страшного не будет.
    Вообще есть смысл регулярно выполнять sudo apt update & sudo apt upgrade - это приведет к обновлению всех требующих обновления пакетов.

    Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend

    Сюдя по всему у вас где-то в другом окне параллельно идет обновление или установка. Когда вы запускаете apt и/или графическую утилиту обновления, то они блокируют базу данных установленных пакетов и параллельный запуск может приводить к подобным ошибкам. Просто дождитесь, когда все установки закончатся.
    Ответ написан
    1 комментарий
  • Как настроить Zyxel Zywall 310?

    @res2001
    Developer, ex-admin
    Почему у вас маска в локальной сети 8? Если бы вам это было нужно, вы бы тут такие вопросы не задавали. Сделайте маску локалки адекватной (24 я думаю вам хватит) и все WAN интерфейсы станут действительно WAN, а не частью локальной сети.
    Ответ написан
  • Можно ли подменить WS2_32 библиотеку и есть ли готовая обёртка?

    @res2001
    Developer, ex-admin
    подумал может быть можно просто подменить эту библиотеку на свою?

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

    Но вам придется воспроизвести интерфейс WS2_32 и реализовать собственный эффективный механизм обмена.
    Если есть исходники приложения, то, возможно, будет проще изменить механизм обмена в самом приложении.
    Ответ написан
  • Какая книга по С++ мне лучше подойдёт?

    @res2001
    Developer, ex-admin
    Вам нужна книга, которую прочитаешь и сразу в "сеньоры" можно идти?
    Боюсь такой нет. Только практика и еще раз практика.

    Из продвинутых книг могу посоветовать:
    1. Эффективный и современный С++. 42 рекомендации по использованию C11 и C14
    в ней очень толково описаны нововведения в стандартах уже не совсем свежих, но эти нововведения чуть ли не самое главное изменение в языке до сих пор.
    2. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
    3. Оптимизация программ на C++. Проверенные методы повышения производительности.
    Ответ написан
    2 комментария
  • Почему линковщик жалуется на undefined reference?

    @res2001
    Developer, ex-admin
    Проверьте, содержатся ли эти символа в подключаемых библиотеках.
    Проверить можно с помощью objdump или nm.
    glfw3 вы сами собирали? Возможно вы его собрали компилятором С++ и символа у него получились с плюсовым манглингом, а линковщик ищет с Сишным.
    Ответ написан
  • Применим ли симметричный обход для не бинарных деревьев?

    @res2001
    Developer, ex-admin
    Просто размышление.
    Логика подсказывает, что такой подход применяется, когда нужно не просто обойти все дерево как-нибудь, а обойти в порядке сортировки дерева (или в обратном порядке).

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

    На каком именно этапе проверять родителя в таком случае зависит от того как сортируются потомки относительно родителя в данном конкретном случае. Т.е. в бинарном дереве левый потомок меньше родителя, а правый больше - это правило и создает упорядоченность при обходе. Если узлов больше 2, то нужно определить аналогичное правило упорядоченности для потомков относительно родителя. в соответствии с этим правилом и совершать обход.
    Ответ написан
    1 комментарий
  • Можно ли командой удалить все метаданные у файлов?

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

    @res2001
    Developer, ex-admin
    Во многих IDE есть встроенный клиент git. Стандартные операции типа комита и пуша делать там вполне можно.
    Для чего-то большего использую стандартную консольную версию.
    Ответ написан
    Комментировать
  • Как исправить ошибку PermissionDenied, try_compile?

    @res2001
    Developer, ex-admin
    Похоже cmake не может найти компилятор. Возможно надо в переменную окружения PATH добавить путь до исполняемых файлов mingw и возможно еще создать переменную окружения MINGW_HOME. Тогда cmake должен нормально найти компилятор.

    Лично я не использую mingw и cmake в чистом виде. Использую msys2 с установленным туда с помощью штатного пакетного менеджера и mingw и cmake. В этом случае они отлично дружат.
    Никаких проблем со сборкой именно из-за cmake не было. Можно использовать и из командной строки msys2, можно и из cmd, если добавить пути в PATH и настроить переменные окружения MSYS_HOME и MINGW_HOME.
    Ответ написан
    1 комментарий
  • Несколько рабочих пространств на одном ПК?

    @res2001
    Developer, ex-admin
    Заведите двух/трех пользователей и радуйтесь. Желательно еще оставить админские права только одному из них. Это самый простой и ресурсосберегающий вариант.
    Конечно совсем так как вы хотите не будет. Описанный вами вариант возможен только либо на разных ПК, либо на виртуалках. Но у этих вариантов свои побочки, как вы сами понимаете.
    Так что придется идти на компромис.
    Ответ написан
    Комментировать
  • Какие внешние зависимости и как распологать в проекте?

    @res2001
    Developer, ex-admin
    Если проект для линукса (или другого никса), то лучше ставить зависимости из стандартных репозиториев, а не включать в проект. Если библиотеки в стандартных репозиториях нет, то уже возможны варианты.

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

    @res2001
    Developer, ex-admin
    Условия можно проверять с помощью enable_if.
    Переменную, видимо, придется запихнуть во вложенную шаблонную структуру, где и использовать enable_if.
    Я сам не силен в метапрограммировании, но можете начать по этой ссылке копать, там и примеров много.
    Ответ написан
    Комментировать
  • Имитация ООП в C, где ошибка?

    @res2001
    Developer, ex-admin
    Ну как минимум вы ничем не инициализируете test.tochar в "конструкторе", но используете этот указатель в printf, это вызывает вылет программы без вызова _point_tochar.

    Вычисление адреса объекта (self) вы так не сделаете. Я в принципе могу догадаться, что вы пытались сделать, но это выполнено явно не правильно. И это даже может дать правильный результат, если правильно реализовать. Но любое изменение в стеке приведет к тому, что "формулу" придется переделывать. А стек меняется при каждом вызове и возврате из функции, при каждом объявлении локальной переменной, т.е. очень часто.
    Так что адрес объекта передавайте явно в функцию.

    В "Экстремальный Си" описывается подход к ООП на Си.
    Ответ написан
    Комментировать
  • Есть ли аналог std::string в драйвере уровня ядра windows?

    @res2001
    Developer, ex-admin
    В WinAPI даже в user space нет аналога std::string.
    Что уж говорить о kernel space - там вообще все очень скудно.
    Перепишите функцию на использование Си строк и буфера фиксированного размера. Кроме того, загонять в драйвер функционал std::string видится избыточным - слишком много в stringе используется динамической памяти, что снижает производительность кода, обычно в драйверах это противопоказано.
    Ответ написан
    Комментировать
  • Важен ли return в main?

    @res2001
    Developer, ex-admin
    Если писать код, соответствующий стандарту языка, то корректно, конечно, указывать return.
    В большинстве современных ОС любой запущенный процесс возвращает код возврата. Это требование ОС. Кодом возврата процесса обычно является значение возвращаемое из main.

    Но, если код возврата не нужен, то можно не указывать return и объявлять void main(). Тогда считается, что код возврата из программы нулевой. Обычно это нормально отрабатывает. Но это не стандартная фича и ваша программа может не собраться на какой-то платформе и/или компиляторе.
    Ответ написан
    Комментировать
  • Можно ли одновременно запустить вторую ОС с внешнего диска?

    @res2001
    Developer, ex-admin
    Можно поднять WSL, поставить туда какой-нибудь линукс на выбор, примонтировать внешний диск.
    Графический раб.стол можно пробросить через RDP, настройка WSL для этого легко гуглится.
    В таком варианте по ощущениям работает быстрей, чем виртуалка в виртуальной коробке.
    Ответ написан
    Комментировать
  • Что означает "квант времени" у переключения контекста?

    @res2001
    Developer, ex-admin
    Квант времени - это время в течение которого ОС позволяет работать потоку (процессу) непрерывно. По истечении времени, поток вытесняется другим. Когда настанет очередь опять выполняться этому потоку (процессу) ему снова будет предоставлен 1 квант времени. Так что переживать о том, что не хватит времени - не стоит - время всегда будет дано, пока процесс работает.
    Квант времени в разных ОС разный, обычно это что-то в диапазоне 1-10 мс. В Линуксе квант динамический, вычисляется на основе приоритета процесса - чем выше приоритет процесса, тем больше ядро дает ему работать.

    Не стоит забывать, что процессы часто сами в падают в режим ожидания и тем самым досрочно завершают свой квант времени. Это часто происходит, например, при ожидании завершения операций ввода/вывода или если поток пытается блокировать мьютекс, а он уже занят и т.п.

    может ли теоретически возникнуть ситуация, что из-за нагруженности какой-нибудь процесс будет успевать только регистры восстановить, и ничего полезного не сделает, то есть будет постоянно нулевая работа за этот промежуток времени?

    Из-за высокой нагрузки в системе может оказаться много процессов, имеющих одинаковый приоритет на выполнение и среди них надо будет делить все имеющиеся ядра и время. Естественно, что если таких процессов очень много, то пока после вытеснения очередь опять дойдет до процесса может пройти много времени. Эта ситуация означает нехватку ресурсов. Но, тем не менее, процессы будут выполняться (пока хватает виртуальной памяти).
    Если у процесса низкий приоритет, но в системе есть постоянно работающие процессы с более высоким приоритетом, то есть шанс, что низкоприоритетному процессу никогда не достанется процессор для выполнения.
    Ответ написан
    Комментировать
  • Может ли VPN ускорять интернет?

    @res2001
    Developer, ex-admin
    Нет, не может. Более того он делает прямо противоположное - он его замедляет.
    Это происходит из-за дополнительных пересылок данных между ВПН сервером и клиентом, а так же из-за того, что требуется время на шифрование/дешифрование данных, передаваемых через ВПН.
    Сам по себе ВПН работает поверх имеющегося соединения, никаких чудес. ВПН может работать в лучшем случае не хуже, чем физическое соединение с оператором. Но это в идеале, реально же скорость внутри ВПН гораздо меньше.

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

    @res2001
    Developer, ex-admin
    какой из вариантов наиболее эффективен / наиболее используемый

    Создание класса в динамической памяти делится на 2 этапа:
    1. выделение "сырой" памяти у менеджера памяти
    2. инициализация памяти - вызов конструктора класса на выделенном участке памяти.
    Вариант с malloc не выполняет вторую часть. Для того что бы закончить процесс в этом варианте вам надо использовать размещающий new, передав указатель на ранее выделенную память. Деструкторы так же нужно будет вызывать явно.

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

    При удалении класса из динамической памяти присутствуют обратные этапы: вызов деструктора и освобождение памяти.

    malloc обычно используют в плюсовом коде, когда реализуют собственные аллокаторы и нужен "сырой" не инициализированный блок памяти. Но и в этом случае вполне можно обойтись без malloc - использовать new char[MEM_SIZE]
    Ответ написан
    Комментировать