• Как разукрасить текст консоли разными цветами?

    @res2001
    Developer, ex-admin
    Речь ведь про винду?
    В cmd есть команда color. Никогда ей не пользовался, так что не помню цвет чего она меняет, посмотрите в справке. Набор цветов у нее достаточно скудный.
    Так же консоль поддерживает Esc последовательности, где можно задавать цвета выводимых символов. Но тут, скорее всего придется использовать низкоуровневое Console API: https://docs.microsoft.com/en-us/windows/console/c...
    Возможно какие-то консольные библиотеки это поддерживают. Что-то типа ncurses.
    Еще можно заглянуть в исходники, например Far manager, посмотреть как они там работают с цветом в консоли.
    Ответ написан
    Комментировать
  • Чем вы бэкапите и почему?

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

    @res2001
    Developer, ex-admin
    Читайте файлы сразу большими блоками (вплоть до всего файла сразу). Под большие блоки можете использовать std::vector<char> с предварительно установленным размером вектора (std::vector::reserve())
    Затем вручную делите прочтенный блок на строки, видимо, заменой \n на 0.
    Все указатели на найденные строки сразу складывайте в используемую в алгоритме структуру данных.
    Не используйте std::string, т.к. он реаллоцирует память на каждый чих, это приводит к повторному выделению того же самого объема памяти но порезанному на мелкие куски и дополнительному копированию строк. Используйте std::string_view (есть в С++17) или вообще сырые Сишные строки, как самый быстрый вариант.

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

    @res2001
    Developer, ex-admin
    Вывести список файлов, соответствующих маске отсортированный по дате в обратном порядке:
    dir /a-d /o-d /b *.7z
    Эту команду запихнуть в for /f, обработать в цикле только первый файл и выйти из цикла.
    Ответ написан
    Комментировать
  • Какая область видимости "глобальных сущностей" CMake?

    @res2001
    Developer, ex-admin
    Вот тут пишут: https://cmake.org/cmake/help/v3.10/command/link_li...
    что это повлияет только на цели созданные в текущем или ниже CMakeLists.
    Подозреваю, что в link_libraries просто меняется переменная. А переменные в cmake ведут себя по умолчанию так как описано, т.е. изменения видны тут и ниже. Чтоб они были видны выше, нужны танцы с бубном, чего, видимо, нет в link_libraries

    При этом цели созданные во вложенных CMakeLists прекрасно видны во всех других CMakeLists, не обязательно ниже по иерархии, но и в другой ветке то же.
    Ответ написан
    Комментировать
  • Несколько копий одной и той же службы с разными конфигами?

    @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) вы так не сделаете. Я в принципе могу догадаться, что вы пытались сделать, но это выполнено явно не правильно. И это даже может дать правильный результат, если правильно реализовать. Но любое изменение в стеке приведет к тому, что "формулу" придется переделывать. А стек меняется при каждом вызове и возврате из функции, при каждом объявлении локальной переменной, т.е. очень часто.
    Так что адрес объекта передавайте явно в функцию.

    В "Экстремальный Си" описывается подход к ООП на Си.
    Ответ написан
    Комментировать