• Где можно купить "белый" IPv4 адрес "навсегда"?

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

    Пусть девайс отправляет данные по доменному имени.
    Или пусть девайс сообщает кому следует (по доменному имени) свой актуальный IP.
    Или девайс может с помощью DDNS привязывать свой IP к доменному имени.
    Я бы выбрал первый вариант.
    Вопрос с доменным именем решить гораздо проще, чем с IP адресами - положил 100500 денег на счет и лет на 10 доменное имя твое.

    Вот вы сейчас выключите девайс, он например настроен на IPv4, включите через 10 лет, а там уже все на IPv6 и провы уже забыли, что когда то был IPv4. А если включите через 20 лет, то там уже и IPv10 подоспеет. Да по оптике уже никто не подключает, а использует квантовую передачу данных и там вообще нет никаких IP, а компьютеры отзываются по имени отчеству. Да и вообще железо уже тупо может не завестись.
    Ответ написан
  • Как подключить стороннюю библиотеку к проекту Qt через CMake?

    @res2001
    Developer, ex-admin
    Конечно же в target_link_libraries, просто добавьте имя библиотеки в конце через пробел
    Но обычно используют find_package/find_library/pkg_check_modules для того, что бы предварительно определить установлена ли библиотека в системе. А в target_link_libraries добавляют переменные, которые инициализируются этими функциями.
    Смотрите: https://cmake.org/cmake/help/latest/genindex.html
    Ответ написан
  • Почему ругается Visual Studio c++?

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

    Вот что по поводу этой ошибки пишут в микрософте.
    Описание то же не особо помогает.
    Попробуй сделать n статической. Или определи как define.
    Ответ написан
  • Как организовать рабочее окружение разработки с использованием домашнего сервера?

    @res2001
    Developer, ex-admin
    ФТП в топку.
    Дайте в доступ по сети папки с файлами проектов с помощью NFS. На ноуте шару подключите.
    До кучи наверное есть смысл поднять VNC и ssh на сервере, чтоб можно было получить удаленный доступ к консоли и GUI.
    Ответ написан
  • Как понять, что ты уже умеешь программировать?

    @res2001
    Developer, ex-admin
    Если вас возьмут на работу программистом, значит вы уже что-то умеете.
    Но это не означает, что можно останавливаться в развитии.

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

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

    Обычно бывает проще в ручную прошерстить реестр (HKLM и HKCU) по ключевым словам приложения, проверить Program Files, профиль Public (All Users) и профиль пользователя.
    Ответ написан
  • При поднятии openvpn сервера в Микротике там есть Add default route для чего это используется, чтобы подключенные vpn клиенты имели вход в интернет?

    @res2001
    Developer, ex-admin
    При включении этой опции весь трафик с клиентов пойдет через ВПН сервер, в т.ч. и интернет.
    Если вы не планируете раздавать интернет через ВПН, то нет смысла включать ее.

    Еще один момент. При включенной этой опции, если ВПН сервер находится не в той же сети, что и клиент, то ВПН может отвалится сразу после подключения. Чтоб ВПН не отваливался, маршрут до ВПН сервера надо прописать на клиентах статически через шлюз по умолчанию когда ВПН не подключен.
    Ответ написан
  • Как создать свой аналог cout на голом C++?

    @res2001
    Developer, ex-admin
    Вы хотите именно самостоятельно реализовать или задача не использовать стандартную библиотеку?
    Если самостоятельно, то для начала изучите https://en.cppreference.com/w/cpp/header/cstdarg
    и все что связано с функциями с переменным числом аргументов.

    Если второе то, это значит, что вы должны использовать функции предоставляемые ОС. Для Windows это WinAPI, для Линукс - POSIX.
    В винде уже есть готовые варианты - функции семейства StringCbPrintf.
    В Линукс ... ну тут все равно от стандартной библиотеки ни куда не уйти :), т.к. это часть ОС и POSIX.
    Ответ написан
  • Как высыпаться за 6 часов?

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

    @res2001
    Developer, ex-admin
    Запускаете программу, запускаете менеджер задач, на закладке Detail добавляете столбец для отображения "command line", обычно там указан полный путь к программе. Если полный путь не указан, значит программа лежит где-то в путях перечисленных в переменной окружения PATH.
    Ответ написан
  • Как подключиться к нужному репозиторию github?

    @res2001
    Developer, ex-admin
    Клонируйте в другой каталог, скопируйте туда измененные файлы и сделайте коммит.
    Ответ написан
  • Как правильней сделать это на си?

    @res2001
    Developer, ex-admin
    Правильно пишут. Вас не смущает два void* в callback?
    У вас функция принимает 2 параметра на что угодно, хреновая идея. Тут и будут ошибаться.
    На сколько я могу судить data - это пользовательские данные, тут void* без вариантов, но можно обозвать например userdata и описать, что userdata в калбэке и в init - это одно и то же и библиотека больше никак не использует этот указатель.
    На мой взгляд event вполне можно описать какой-то заранее определенной структурой. Или хотя бы у этой структуры должен быть единый заголовок (включающий тип события и возможно что-то еще общее для всех событий). Посмотрите, например, на адресные структуры в сокетах: struct sockaddr, struct sockadd_in, struc sockaddr_in6. Это не самая удачная реализация, на мой взгляд, но достаточно распространенная. Гораздо лучше реализованы объекты в питоне (имею ввиду исходный код самого питона на Си), принцип тот же, но реализация более понятна.
    callback может принимать указатель на заголовок структуры, затем его можно будет преобразовать в структуру для конкретного типа события. Хорошо бы для этого предусмотреть в реализации набор макросов.
    Общий посыл таков: нужно как можно реже использовать void*, можно его использовать только тогда когда без этого ну вообще никак не обойтись (а если обойтись, то это будет ну очень "дорого"). К сожалению в Си время от времени приходится использовать void*. В т.ч. для решения этой проблемы в плюсах придумали шаблоны.

    Я так и не понял, что означает type.
    По моему идентифицировать издателей/подписчиков лучше всего по имени. И пусть имя они сами себе выбирают.

    Где набор функций для добавления/удаления подписчиков?
    Ответ написан
  • Можно ли освоить несколько ОС будучи программистом?

    @res2001
    Developer, ex-admin
    Несколько ОС - это сильно сказано.
    По сути сейчас широко распространены две ОС: Винда и разные дистры Линукс.
    Эти две ОС сильно различаются, но базовые вещи (например сетевые протоколы, криптография и т.п.) используются одни и те же. Да реализация различается, но это просто другие надписи на кнопках. Т.е. поняв как работает TCP/IP стек на винде вы будете знать как он работает на линуксе, инструмены управления будут другими, но это уже не будет играть большой роли.

    Дистрибутивы линукс вообще друг от друга мало чем отличаются: менеджер пакетов, система инициализации.
    Причем и менеджеров пакетов и систем инициализации гораздо меньше, чем дистрибутивов Линукс.
    Граф.интерфейс сюда не включаю, т.к. в большинстве случаев его можно менять. И вообще знание инструментов GUI для администрирования важно только в винде (да и здесь все или почти все можно делать через командную строку).

    Линукс это по сути Unix, а значит сюда же можно добавить и FreeBSD, OpenBSD, Mac OS.
    Они чуть больше отличаются от Линукс (чем дистры линукс друг от друга), но так же являются представителями одного семейства. Кроме того все эти ОС являются POSIX совместимыми ОС.
    Так что изучив Линукс можно достаточно безболезненно перейти на любую POSIX совместимую ОС.

    Отдельно стоят только ОСРВ системы, но это достаточно узкоспециализированная тема. Кроме того и среди них есть POSIX совместимые, например QNX.
    Ответ написан
  • Распределение ipv6 клиентам openvpn. Как это реализовать?

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

    @res2001
    Developer, ex-admin
    В параметре -R можно еще указать listen-IP, возможно это вам поможет. Смотрите встроенную справку:
    plink --help
    Ответ написан
  • Как можно диск ужать?

    @res2001
    Developer, ex-admin
    Встроенный в винду дефрагментатор только дефрагментирует (т.е. объединяет куски одного файла разбросанные по диску в один), вам же нужно перенести файлы разбросанные в разных физических местах на диске в начало диска. Используйте сторонний дефрагментатор.
    Кроме того, многие сторонние программы, позволяющие ужать диск могут сразу сделать и дефрагментацию.
    Сделайте загрузочную флэшку с инструментами работы с диском, загрузитесь с нее и выполните дефрагментацию, а затем сжатие.
    Или же с флэшки сделайте только дефрагментацию, а сжатие выполните встроенными средствами уже из родной винды.
    Можете использовать Acronis Disk Director или что-нибудь еще. В качестве конструктора для загрузочной флэшки рекомендую этот набор.
    Ответ написан
  • Должен ли разработчик заниматься ручным тестированием?

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

    PS: работал в свое время в организации, которая в своем продакшене по факту тестировала официально купленное не дешевое ПО с поддержкой. Хорошо хоть разрабы работали практически в он-лайне и была с ними прямая связь. Багов хватало, в т.ч. достаточно серьезных.
    Ответ написан
  • Как разогнать виндовс?

    @res2001
    Developer, ex-admin
    Без финансовых затрат можно попробовать определить что именно тормозит систему и попытаться побороться с этим.
    Для определения причин тормозов в помощь менеджер задач и монитор ресурсов.
    Находите службу/программу, которая отъедает CPU и/или память и начинаете разираться с ней.
    Как выше многие заметили не используйте утилиты типа CCleaner.

    По поводу апгрейда:
    Обычно 8 Гб ОЗУ в большинстве случаев достаточно. 4 Гб - мало.
    Не тянет HDD - ну это вопрос спорный. Если сам диск физически в порядке (смотрите SMART статус) и свободного места на системном разделе хватает с запасом (для винды всегда нужно держать 5-10 Гб свободного объема на системном диске), то для большинства задач будет достаточно HDD.
    Реальные потребности сильно зависят от задач, которые вы выполняете на ноуте.
    На сколько я понял ноут сильно поношенный, поэтому подумайте перед тем как вкладывать в него деньги, возможно будет лучше купить новый аппарат.
    Ответ написан
  • Правильно ли переделана abs функция в коде?

    @res2001
    Developer, ex-admin
    Ошибка компилятора говорит о том, что доступно 2 подходящих варианта функции abs и он не знает какой выбрать.
    Один вариант из стандартной библиотеки С++ другой из mpi.cxx. Т.к. в стандартной библиотеке abs существует давно, то видимо она недавно появилась в mpi.cxx. Причем в mpi.cxx она делает, что-то не то, т.к. принимает в параметре беззнаковое целое, а оно всегда положительно.

    Судя по коду вам нужен именно арифметический модуль, поэтому исправьте вызов abs так: std::abs. Будет использоваться функция abs из стандартной библиотеки.
    Так же можно изменить не вызов, а сделать явное преобразование аргумента:
    abs(static_cast<long>(MPIs[i].width)  - static_cast<long>(desiredWidth) ) * abs(static_cast<long>(MPIs[i].height) - static_cast<long>(desiredHeight))

    Этот вариант лучше, т.к. я подозреваю, что у вас MPIs.width, MPIs.height, desiredWidth, desiredHeight беззнаковые целые. При вычитании может получиться отрицательное значение, но если вычитаются беззнаковые то результат нельзя корректно интерпретировать. Поэтому перед вычитанием лучше преобразовать в знаковые значения.
    В этом случае будет выбрана более подходящая по аргументам функция из стандартной библиотеки.
    Так же можно внести оба изменения, т.к. вычитание беззнаковых явная логическая ошибка. Обычно это допустимо только тогда когда есть уверенность, что при вычитании не может быть отрицательного результата. Но в данном случае это не так, иначе не понадобился бы abs.
    Ответ написан
  • Отличие терминов Инварианта и Свойства?

    @res2001
    Developer, ex-admin
    Из википедии:
    Инвариант в объектно-ориентированном программировании — выражение, определяющее непротиворечивое внутреннее состояние объекта.

    Но это относится не только к ООП, а в принципе.
    Из ваших примеров, по моему, только 4 про инвариант.

    Исходя из определения из вики, инвариант - логическое выражение (а не свойство), которое всегда должно выполняться для объекта. Если оно не выполняется, то объект (класс, структура и т.п.) находится в несогласованном состоянии и его дальнейшее использование опасно.
    Обычно инварианты нарушаются внутри методов класса, при выходе из метода инвариант должен снова восстанавливаться, иначе метод отработал не правильно.
    Простой пример: для Си строки инвариант - не нулевой указатель на начало и символ 0 в конце строки.
    Например у вас есть функция AddString, которая добавляет к существующей строке другую строку. Для простоты предположим, что не нужно перевыделять память. В процессе выполнения AddString инвариант нарушается - 0 символ заменяется добавляемыми символами второй строки. Но после добавления нулевой символ должен быть восстановлен в конце, после чего инвариант снова будет истинным.

    Для одного объекта может быть несколько инвариантов, для разных методов объекта могут быть важны не все инварианты. Если метод в ходе своей работы нарушает какой-то инвариант, есть смысл в начале и конце метода проверить этот инвариант с помощью assertа. Это предотвратит возможные ошибки.
    Ответ написан