• Какой ноутбук купить: MacOS или PC?

    @res2001
    Developer, ex-admin
    Lenovo IdeaPad Gaming 3
    Asus TUF Gaming A17

    Это игровые ноуты. А значит они большие и тяжелые, и при нагрузке включают все свои вентиляторы и шумят как паровозы. Как они попали в один список с Масами? Про вариант от MSI не скажу.

    Про Мас я не в курсе, не было опыта. Про остальные немного выскажусь.
    Вместо предложенного варианта от Lenovo, я бы смотрел на Lenovo Legion 5 (7 Gen). Он то же идет как игровой. Но процессор там более свежего поколения, матрица лучше, набор портов интереснее. Но и дороже, естественно.
    На сайте асуса и леново есть не плохие презенташки для всех моделей с полными тех.характеристиками. Правда моделей много, может уйти куча времени на анализ. Подбирайте по потребностям. В принципе, если не Мас, то выбирать стоит из этих двух производителей.

    Из lenovo стоит смотреть на модели ThinkPad TXX, на мой взгляд, самая нормальная линейка у них для работы. Хоть меня и бесит их trackpoint.

    Если интересны ультрабуки, то там то же есть на что посмотреть, но лично я их не рассматривал для себя.

    Я бы брал с процом от AMD не ниже Ryzen 5 5600. 16 Гб ОЗУ минимум. Смотрите, чтоб ОЗУ можно было менять (добавлять). Сейчас часто встречаются модели с распаянной памятью. SSD с размером по вкусу, хорошо если будет еще один доп.слот для SSD. Себе я еще смотрю, чтоб был помимо HDMI еще 1 дополнительный Display Port, т.к. обычно использую 2 внешних монитора.
    Ответ написан
    1 комментарий
  • Как запустить .bat файл через pywinauto?

    @res2001
    Developer, ex-admin
    Скорее всего напрямую батник вы запустить не сможете - это не исполняемый файл. Винда не умеет так как никсы.
    Вам нужно запускать батник как параметр cmd.exe.
    Например:
    cmd.exe /c G:\Documents\Python\auto_old_dump\dump\start.bat
    Ответ написан
    Комментировать
  • Почему не считывает русскую букву в char?

    @res2001
    Developer, ex-admin
    Если программа выполняется под виндой, то:
    1. В консоли винды по умолчанию кодировка cp866 (да же не cp1251 и тем более не unicode). Кодировка консоли в винде может быть легко изменена с помощью команды консоли chcp, так что полагаться на то, что в консоли будет всегда одна и та же кодировка не стоит. Когда вы читаете символ с консоли, то он появляется в программе в кодировке консоли.
    2. Еще у вас есть кодировка файла исходного кода. Компилятор сам ничего не перекодирует. В какой кодировке написаны ваши константы в исходниках в той они и будут в программе. Когда вы выполняете операцию сравнения, то символ в кодировке файла исходного кода сравнивается с символом в кодировке консоли. Если обе кодировки не совпадают - сравнение будет не удачным, даже если символ один и тот же.
    3. Простой вариант - писать исходники в cp866 и не менять кодировку консоли в тестах. Может не работать, если, например, запускаете программу из MSVC - IDE может сама менять кодировку своей отладочной консоли. Лучше тесты запускать вручную в отдельном консольном окне.
    4. Правильный вариант - исходники писать в UTF8, символьные и строковые константы писать как wide char (wchar_t, в винде это UTF-16) перед вводом узнать кодировку консоли, перекодировать введенные символы в UTF-16, сравнивать символы в UTF-16. С выводом в консоль - та же история. В WinAPI есть функции перекодировки из многобайтных (cp866/1251, ...) в широкие символы и обратно.

    В линуксе сейчас повсеместно консоль в unicode, соответственно и читать вам надо unicode и сравнивать с unicode.
    Ответ написан
    Комментировать
  • Как отдать часть раздела жёсткого диска другому разделу?

    @res2001
    Developer, ex-admin
    Используйте загрузочную флешку с акронис диск директор или парагон партишн менеджер. Могу посоветовать набор для создания диагностического загрузочного носителя от adminpe.ru, там обе утилиты есть в комплекте.
    Есть и другие подходящие утилиты.
    Ответ написан
    2 комментария
  • Нужно ли заключать все переменные макроса в скобки?

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

    @res2001
    Developer, ex-admin
    Нельзя превратить эту команду в команду cmake.
    Вам нужно написать файл cmakelists.txt, который положить в папку с проектом. Там описать проект, цели, подключаемые библиотеки, опции компилятор и т.п.

    Сборка с помощью cmake происходит типовыми командами практически одинаковыми для любого cmake проекта. Находясь в каталоге сборки (любой пустой каталог):
    cmake <каталог с проектом> -G <generator type>
    cmake --build .

    generator type - зависит от того с помощью чего вы планируете осуществлять сборку. Обычно в линукс это "Unix Makefiles" в винде например "Visual Studio 15 2017". Весь список поддерживаемых генераторов можно увидеть с помощью cmake --help
    Ответ написан
    Комментировать
  • Как вставить новый массив в имеющийся?

    @res2001
    Developer, ex-admin
    В общем случае нужно:
    1. расширить принимающий массив на количество элементов во вставляемом массиве (обычно это перевыделение памяти с копированием содержимого старого массива в новый большего размера),
    2. переместить в конец часть старого массива после позиции вставки,
    3. вставить (скопировать/перенести) элементы вставляемого массива.

    Вставка новых элементов - это увеличение размера массива. Изменить размер можно только у динамического массива. Для автоматического и статического это сделать нельзя.

    В std::vector есть метод insert, который сделает всю работу за вас. Правда тут придется вставлять элементы по одному. В С++20, похоже, появилась перегрузка insert, где можно вставить несколько элементов сразу.
    Ответ написан
    1 комментарий
  • Как перенести все настройки системы на другой компьютер?

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

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

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

    @res2001
    Developer, ex-admin
    Это называется дедубликацией. В Windows Server давно уже есть соответствующие родные службы, так что можете просто заменить Windows 10 на Windows Server :-)
    На сколько я знаю, есть сборки пакетов для дедубликации, которые работают на Windows 10. Собраны они умельцами из соответствующих пакетов Windows Server. Сам не пользовался, так что ничего по функционалу не скажу. Гуглите.

    PS: не пользуйтесь ccleaner
    Ответ написан
    Комментировать
  • Как запускать компьютер с помощью кнопки на сайте?

    @res2001
    Developer, ex-admin
    Технология называется WakeOnLan.
    1. Эта фишка должна поддерживаться БИОС компьютера, который нужно включать. И ее надо там включить. Называться в БИОСе может по разному, зависит от фантазии разработчика БИОС. Пробуждение возможно только через проводной сетевой адаптер, соединение компа с сетью должно быть через провод. ВайФай не канает. Комп, естественно, должен быть включен в электрическую и локальную сети.
    2. После этого протестируйте внутри локальной сети. Для отправки WoL пакетов используйте свободное ПО, можно погуглить.
    3. На роутере надо настроить проброс определенного UDP порта на широковещательный внутренний адрес.
    4. Для пробуждения компьютера вам понадобиться МАС адрес сетевого адаптера компа, который надо пробуждать, и внешний IP адрес роутера. Для отправки WoL пакетов из интернет есть свободное ПО с возможность работы через интернет (это важно, т.к. формируются разные UDP пакеты для случая LAN и WAN), а так же встречал и сайты, которые это умеют делать.

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

    @res2001
    Developer, ex-admin
    Приложения по любому остаются на диске.
    Тут все зависит от того как будет проверятся наличие приложений.
    Теоретически, если использовать "портабельную" версию приложения, т.е. без установщика, и скопировать приложение в профиль другого пользователя (т.е. приложение должно находится именно в профиле другого пользователя c:\Users\<user name>\...), то без прав администратора из-под учебного пользователя это приложение (файл на диске) будет не видно.
    Ответ написан
  • Сколько всего ip адресов в глобальном интернете?

    @res2001
    Developer, ex-admin
    2. Если вам провайдер выдает IPV6, то вы можете использовать в интернете IPv6.
    Реальный адрес, полученный от провайдера, обычно, имеет ваш роутер, а не ваш компьютер. Так что, ориентироваться только на вывод ipconfig бесполезно. Посмотреть с каким адресом вы реально выходите в интернет можно на сайтах типа 2ip.com. Для интереса можете сверить вывод ipconfig и что показывает 2ip.com.
    Для проверки готовности вашего компа к использованию IPv6 пройдите ipv6-test. Сайтов с ним в интернете хватает.
    Если ваш комп реально получает от провайдера IPv6 адрес и если узел назначения (веб сайт) то же имеет IPv6 адрес, то, скорее всего, обмен с этим сайтом будет происходить с использованием IPv6.
    Провайдеры могут выдавать оба адреса и IPv4 и IPv6. Какой из них будет использоваться для обмена, ОС решает отдельно для каждого конкретного соединения с узлом в интернете. Приложения могут принудительно использовать тот или иной протокол, или отдать этот выбор на усмотрение ОС.
    Ответ написан
    8 комментариев
  • Как использовать библиотеку GLFW используя только g++?

    @res2001
    Developer, ex-admin
    1. добавьте в опции компилятору путь к файлам заголовков библиотеки (через опцию -I)
    2. путь к библиотечным файлам (опция -L)
    3. перечислите в опциях -l все библиотеки, которые будете использовать.

    Это стандартный путь для использования сторонних библиотек в вашей программе, не зависимо от конкретной библиотеки.
    Ответ написан
    2 комментария
  • Библиотека Cron scheduler на windows для си?

    @res2001
    Developer, ex-admin
    В винде шедулер доступен в виде набора COM объектов.
    Смотрите тут: https://docs.microsoft.com/en-us/windows/win32/tas...
    Кросс-платформенной библиотеки не встречал.
    Ответ написан
    Комментировать
  • Почему не устанавливаются пакеты в Astra Linux 2.12? Не запускается версия 1.7?

    @res2001
    Developer, ex-admin
    У астры неплохая вики, а так же есть форум, пользуйтесь. Там уже большая часть вопросов "от новичков" разжевана.
    На счет репозиториев, на сколько помню, там по умолчанию прописан только репозиторий лежащий на диске (на CD или на образе), никаких репозиториев в интернете не зарегистрировано. Если диск не вставлен или образ не смонтирован, то репозиторий будет не найден.
    Но это можно легко поправить: https://wiki.astralinux.ru/pages/viewpage.action?p...
    Ответ написан
    Комментировать
  • Взаимодействие уровней сетевых моделей?

    @res2001
    Developer, ex-admin
    Взаимодействие между уровнями - это детали реализации.
    Тот же TCP/IP можно реализовать очень по разному с разными интерфейсами для прикладного приложения.
    Наиболее распространенное сейчас сетевое API это Berkeley Sockets (или просто сокеты). Сокеты реализуют в т.ч. и взаимодействие по TCP/IP. Есть и другие сетевые API, например TLI, но я никогда в реальности не встречал его использования.
    Сетевое API - это то с помощью чего прикладной программист использует сеть. Внутри тех же сокетов есть свои интерфейсы для передачи между сетевыми уровнями.
    Ответ написан
    2 комментария
  • Как ограничить копирование данных из сетевых папок, локального ПК, на флешки и внешние ресурсы?

    @res2001
    Developer, ex-admin
    Вам нужна DLP система. Их много разных. Обычно это достаточно тяжелый софт, требует серьезной настройки, разработки правил. Тяжелый - в том смысле, что с ним тяжело работать, требует от администратора определенного погружения в проблему. А не то что установил и забыл.
    Конечно, никакая DLP система не даст 100% гарантии от утечек информации. Как уже писалось выше - это должно быть комплексным решением, начиная от организационной документации по ИБ под роспись сотрудников и до системы видеонаблюдения, сигнализации и т.п. И сама DLP тут далеко не на первом месте по эффективности, просто один из кирпичиков.
    Ответ написан
    Комментировать
  • Как сделать чтобы программа ждала завершения bat-файла?

    @res2001
    Developer, ex-admin
    Как уже было сказано system() всегда выполняется синхронно, т.е. ждет окончания выполняемой программы.
    В батнике аналогично - когда стартуете команду/программу обычным способом батник приостанавливается до завершения программы.
    Так что описанного поведения по этим причинам быть не может.
    Скорее всего проблема в чем-то другом.
    В конце батника добавьте строку pause, чтоб он не закрывался сразу и посмотрите что выводится на консоль. Подозреваю, там будет какая-то ошибка. Может быть "file not found" или еще что-нибудь.
    Ответ написан
    Комментировать
  • Чем обусловлены различия в работе со строками и другими массивами?

    @res2001
    Developer, ex-admin
    void func()
    {
    char str1[] = "Hello";
    const char* str2 = "Hello";
    int* mas1 = { 4, 5, 7, 9 };  // compile error
    int mas2[] = { 4, 5, 7, 9 };
    char* str3 = {'s', 't', 'r', '3', '\0'};  // compile error
    char str4[] = {'s', 't', 'r', '4', '\0'};
    ...
    }

    Объявление str1 и str2 это не совсем одно и то же.
    str1 выделяет на стеке массив charов подходящего размера и копирует в этот массив строку "Hello". Строка "Hello" до копирования будет хранится в сегменте памяти для констант (rodata), который сформируется ОС автоматически при загрузку исполняемого файла в память. Таким образом строка str1 лежит полностью на стеке, ее можно изменять при желании, но увеличивать размер нельзя. str1 может быть как константной строкой, так и не константной.
    str2 - на стеке выделяется память под указатель, указателю присваивается адрес строки "Hello", которая все так же лежит в сегменте rodata. Поэтому const тут необходим, т.к. оригинальная строка, на которую ссылается str2 не изменяемая. Если убрать const у str2, то, например, gcc выдаст предупреждение по умолчанию, но код скомпилирует. Если дальше попытаться изменить str2 (например str2[0] = 'h';), то компилятор на присвоение уже ничего не скажет, т.к. str2 уже не константная строка, но при выполнении получишь segfault, т.к. пытаешься изменить read-only память.
    В случае инициализации mas1, выражение в фигурных скобках - это список инициализации. На основании списка инициализации компилятор генерирует код, который при выполнении проинициализирует массив mas1, т.е. он не генерирует массив, он генерирует код, что-то типа такого mas1[0] = 4; mas[1] = 5; ... при этом компилятор подразумевает, что память под mas1 уже должна быть выделена подходящего объема. Но в примере mas1 - это не массив - это указатель, который никуда не ссылается. Инициализировать указатель таким образом не возможно. Нужно делать так, как показано для mas2.
    Точно так же списком инициализации можно проинициализировать и массив для строки (str3) и получить ту же ошибку, что и для mas1.
    Из примеров можно сделать вывод, что для строк в языке существует специальный синтаксис, который больше нигде не применим - пример str2. Это так и есть.

    Сырые строки (Си строки, ASCIIZ строки, строки оканчивающиеся нулем) ни разу не устаревшие. Объект string, конечно удобный и прочее, но он медленный из-за того, что хранит свою строку в динамической памяти, и при изменении строки перевыделяет память по мере надобности и копирует строку в новую память. Операции выделения/удаления динамической памяти очень дорогие. Чаще всего string - вполне адекватный выбор, но там где нужна быстра работа со строками лучше поискать другие варианты, например сырые строки.
    В С++17 появился std::string_view - это обертка над константной сырой строкой, делает код немного более понятным, но не производит никаких манипуляций с динамической памятью - ему на вход надо дать сырую строку. Он ее и использует для своих операций. Из-за того, что string_view не изменяет свою строку и не манипулирует с памятью - он работает быстрее, но у него ограниченное количество операций - отсутствуют операции модифицирующие строку.
    Ответ написан
    3 комментария