Задать вопрос
  • Распределение 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
    Ответ написан
    Комментировать
  • На каком языке и с применением каких технологий, IDE лучше писать программы для Windows, которые бы занимали минимум оперативной памяти?

    @res2001
    Developer, ex-admin
    Для реализации требуемого функционала можно вообще не использовать никаких библиотек - все обеспечивает ОС API (для никсов GUI - не входит в API, предоставляемое ядром, но это не играет роли).
    Максимально маленький размер exe и потребляемой памяти можно получить на С/С++. Си чуть более компактен и быстр.
    Писать на голом ОС API достаточно долго и трудоемко, и код будет максимально далек от кросс-платформенности (хотя в вопросе про это речь не идет). Но это будет очень хороший опыт и это достаточно интересно на небольших проектах.
    Поэтому, если все же есть какие-то сроки, то следует использовать библиотеки, ускоряющие разработку. Конечно, библиотеки - это прослойка между ОС API и приложением и это увеличивает и объем исполняемого файла и объем потребляемой памяти. Но тут всегда нужно принимать какой-то компромис.
    Для GUI под винду можно использовать WTL - это компактная ООП надстройка над виндовым GUI, разработана микрософт предоставляется в исходниках (по крайней мере когда я последний раз имел с ней дело). WTL - это по любому С++. Хватает и других библиотек для GUI.

    На счет IDE - можно использовать любую - это не влияет на количество потребляемой приложением памяти.

    Я тут не говорю про ассемблер, потому что нет смысла погружаться на этот уровень без очень веских причин. Использование ассемблера еще более увеличит время разработки.
    Ответ написан
    Комментировать
  • Как сделать просто прогресс бар на Python?

    @res2001
    Developer, ex-admin
    Комментировать
  • Как добавить в массив строк новую строку в си?

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

    Если операция добавления нового элемента в массив регулярная, то стоит над этим поработать дополнительно. Обычно в таких случаях выделяют не на 1 элемент больше, а например в 2 раза больше. Отсюда возникают дополнительные потребности в хранении количества занятых элементов, количества всех элементов и т.п.
    Операция динамического выделения памяти - достаточно затратная, поэтому стоит свести ее к минимуму.
    Ответ написан
    Комментировать
  • Есть ли книги по winapi / c++?

    @res2001
    Developer, ex-admin
    Внутреннее устройство Виндоуз Русиновича.
    Никакая книга не сможет вместить описание всего API. Так что документация на сайте микрософта по любому нужна.
    Ответ написан
    Комментировать
  • Какой смысл несет слово "имитация" в словосочетании "имитация передачи аргументов по ссылке"?

    @res2001
    Developer, ex-admin
    В Си нету такого понятия как "ссылка" (это понятие из С++).
    В С++ ссылки используют для изменения переменных на которые ссылается ссылка.
    В Си для этого используют указатель.
    Что бы еще больше имитировать ссылку, можно аргумент функции объявлять как константный указатель:
    void func(char * const str);
    Ответ написан
    Комментировать