• Как создать свой аналог cout на голом C++?

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

    Если второе то, это значит, что вы должны использовать функции предоставляемые ОС. Для Windows это WinAPI, для Линукс - POSIX.
    В винде уже есть готовые варианты - функции семейства StringCbPrintf.
    В Линукс ... ну тут все равно от стандартной библиотеки ни куда не уйти :), т.к. это часть ОС и POSIX.
    Ответ написан
    7 комментариев
  • Как высыпаться за 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.
    По моему идентифицировать издателей/подписчиков лучше всего по имени. И пусть имя они сами себе выбирают.

    Где набор функций для добавления/удаления подписчиков?
    Ответ написан
  • Распределение ipv6 клиентам openvpn. Как это реализовать?

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

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

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

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

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

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

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

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

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

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

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

    @res2001
    Developer, ex-admin
    Простой текстовый документ (не Unicode).
    Под ANSI обычно понимают первые 128 символов ASCII, которые общие для большинства используемых однобайтовых кодировок.
    Т.е. тупо пишете в текстовый документ английские буквы, цифры и кое-какие дополнительные знаки с кодом <128 и будет вам ANSI.
    Ответ написан
  • Как завершить все процессы svchost, кроме системных?

    @res2001
    Developer, ex-admin
    Думаю что одной командой тут не обойтись.
    Можно получить список запущенных svchost с PIDами и путем, затем отфильтровать его, убрав те, которые лежат в %SystemRoot%\System32. После этого уже можно прибивать оставшиеся в списке процессы по PIDу из списка.
    tasklist полный путь не выводит. Полный путь можно получить с помощью:
    wmic process where "name='svchost.exe'" get Name,ProcessID,ExecutablePath

    Правда для большей части запущенных у меня svchostов эта команда так же не дает полный путь в ExecutablePath (Win10 x64), предполагаю, что это какие-то вторичные порожденные процессы.
    Ответ написан
    Комментировать
  • Как передать массив списков в функцию Си (С++)?

    @res2001
    Developer, ex-admin
    int searchByHash(Stack* hashTable, int element)
    Ответ написан
    Комментировать
  • Зачем определению(definition) объявлять(to declares), если есть определение(definition), которое определяет(to defines)?

    @res2001
    Developer, ex-admin
    int val;
    Является одновременно и определением и объявлением.
    В данном случае происходит реальное выделение памяти под переменную.

    Объявление это
    extern int val;
    Оно говорит компилятору, что где-то есть переменная val типа int. В этом случае компилятор уже знает какие операции допустимо использовать с этой переменной, но память под переменную не выделяет. Реальный адрес переменной подставит линковщик, когда будет собирать исполняемый файл из нескольких единиц трансляции.
    Если в одной единице трансляции вы используете объявление переменной, то где-то (в другой единице трансляции или в этой же) вы должны обязательно сделать определение. Иначе линковщик не найдя определения выдаст undefined reference.
    Если же определять переменную в каждой единице трансляции, то линковщик выругается на redefinition symbol, т.е. несколько символов с одним именем (переопределение существующего символа).
    Если вам все таки нужны символы с одним именем в разных единицах трансляции, то вы должны объявлять их static. В этом случае будет использоваться локальная для данной единицы трансляции переменная с данным именем.

    С функциями все аналогично.
    Ответ написан
  • Средство удалённого доступа?

    @res2001
    Developer, ex-admin
    RDP умеет и экран показывать и переключение пользователей, правда для этого надо немного дополнительной настройки. Режим работы remote shadow.
    Ответ написан
    Комментировать
  • Как передавать много сообщений через Socket?

    @res2001
    Developer, ex-admin
    Для передачи вы видимо используете TCP. В ТСР нет разделения на сообщения, все данные передаются в одном потоке в том порядке, в котором были отправлены. Т.е. вполне реальна ситуация, когда вы посылаете например 2 сообщения по 10 байт каждое, а читает 3 раза по 5, 10, 5 байт за раз. Таким образом разделять на сообщения вы должны на принимающей стороне самостоятельно.
    РОСО тут не причем - эменно так работает протокол ТРС. Вместо TCP можете использовать UDP - тут будете принимать именно сообщениями. Но есть сложность с дефрагментацией - если размер сообщения больше MTU, то сообщение будет фрагментировано при передаче и не факт, что куски дойдут и соберуться. Ну и еще UDP не гарантирует доставку, т.е. сообщения могут теряться и ни получатель ни отправитель об этом не узнает.
    Так же можно использовать протокол SCTP, он так же как UDP работает с сообщениями, но при этом гарантирует доставку. SCTP входит в стандартный стек TCP/IP. Есть ли его поддержка в POCO я не в курсе.
    Ответ написан
    Комментировать
  • Пытаюсь настроить double OpenVpn произошла ошибка?

    @res2001
    Developer, ex-admin
    Судя по тексту ошибки у вас все таки не находится openssl.cnf. Просто скоприуйте /usr/share/easy-rsa/openssl-1.0.0.cnf в каталог ~/openvpn-ca и переименуйте в openssl.cnf, там же должны быть и симлинки на скрипты easy-rsa, которые сделал make-cadir (конфиг то же он должен был создать).
    Оригиналы скриптов и конфигов easy-rsa лежат тут: /usr/share/easy-rsa.
    Я обычно просто руками копирую содержимое /usr/share/easy-rsa в свой каталог, т.к. бывает что-то меняю в скриптах под текущую ситуацию.

    PS: Когда я несколько лет назад решил первый раз настроить ключи для openssl с помощью easy-rsa, то обнаружил в vars ошибку, которая не позволяла скрипту правильно отработать, из-за чего остальные скрипты то же не работали. Сейчас ошибку уже поправили. А набор easy-rsa под винду вообще песня - без собственного напильника вообще нечего было ловить.
    Так что easy-rsa не сделает вам хорошо, просто немного поможет и подскажет.
    Ответ написан
  • Какой знак/символ переводит текст на новую строку в консоли?

    @res2001
    Developer, ex-admin
    >>test.txt (echo test & echo test2)
    Ответ написан
    Комментировать
  • Стоит ли изучать СИ?

    @res2001
    Developer, ex-admin
    Вопрос используется ли вообще язык СИ где то в проектах?

    Странный вопрос. Возьмите любой проект где требуется скорость/низкое потребление памяти там будет Си.
    Список популярных репозиториев на Си на гитхабе за последний месяц: https://github.com/trending/c?since=monthly
    Ответ написан
    Комментировать