• На каком языке и с применением каких технологий, 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);
    Ответ написан
    Комментировать
  • Чем опасно переполнение статического массива в C?

    @res2001
    Developer, ex-admin
    Посмотрите на код ниже:
    char a[5];
    int b = 0;
    a[5] = 'a';

    И ответьте на вопрос:
    1.Куда произойдет запись в последней строке?
    2.Программист действительно хотел именно этого?
    Учитывая, что память под стеком уже выделена ОС, то никакой ошибки при этом не происходит. Ошибка проявится где-то дальше по ходу выполнения программы, где будет использовано значение переменной b или производных от нее. Отловить подобные ошибки бывает достаточно трудно, т.к. причина ошибки и место проявления ошибки может быть сильно разнесено по коду.

    С динамической памятью все примерно то же самое, за исключением того, что теоретически выделяется только запрошенное количество памяти, поэтому выход за пределы сразу же вызовет аппаратное исключение.
    Но практически это обычно не так, т.к. обычно ОС выделяет память минимум в 4Кб (размер страницы памяти), а дальше выделенная память поступает в распоряжение менеджера памяти (malloc/free). Поэтому будет ошибка или нет зависит от реализации менеджера памяти, от количества выделяемойпамяти и т.п.
    Если не произойдет исключения, то возможно повредятся (перезапишутся) данные менеджера памяти и дальнейшие операции с памятью будут не правильными. К чему это может в итоге привести - трудно предугадать, но ясно, что ни к чему хорошему.
    Так же возможно, что никакие данные не повредятся, это вероятно еще хуже - вы думаете что программа работает нормально, но в дальнейшем вносите изменения в код и все разваливается хотя вроде бы изменения корректные. Убираете изменения - все опять хорошо. Вы думаете, что проблема в изменениях, а на самом деле нет.

    Для поиска подобных ошибок обычно используют инструменты типа valgrind memcheck
    Ответ написан
    Комментировать
  • Квадратики при открытии старого файла word, как вернуть текст?

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

    PS: и вообще там не квадратики, а единицы и двойки. Нормальный документ, содержащий кучу единиц и двоек. Сохраните на память.
    Ответ написан
    Комментировать
  • Как клонировать/мигрировать/перенести образ c HDD на SSD?

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

    @res2001
    Developer, ex-admin
    Читал, что PostgreSQL нынче то же умеет хранить данные по колонкам, как clickhouse.
    Ответ написан
    Комментировать
  • Отсортировать данные о котировке акций по тикерам и по дате?

    @res2001
    Developer, ex-admin
    А что в плюсах уже стандартный std::sort перестал работать?
    Зачем вы пишете собственную сортировку пузырьком? Лучше чем в std вряд ли получится.
    Но учитывая, что
    Размер файла может быть достаточно большим для загрузки всех данных в память одновременно

    Нужно файл делить на несколько частей, помещающихся в память, каждую часть сортировать отдельно тем же std:sort, результаты сохранять в промежуточный файл. Затем результаты объединять с помощью сортировки слиянием.
    Ответ написан
    Комментировать
  • Какую IDE посоветуете для C( просто си, не плюсы!)? И с какой книги начать изучать программирование на языке С?

    @res2001
    Developer, ex-admin
    IDE: MSVS, VS Code, qtcreator.
    Я лично предпочитаю qtcreator, но там вам нужно будет еще как минимум cmake изучить, чтоб можно было проект компилировать из него, так что лучше MSVS на первых порах (или возможно VS Code).

    Из минусов микрософтовского компилятора - он не поддерживает ни один стандарт Си полностью. Т.е. ANSI С и то что микрософт посчитал нужным поддержать для себя любимых. На первых порах это будет не важно, но дальше захочется большего. Так что, возможно, для обучения лучше использовать mingw (msys2+mingw) и к нему прикрутить VS Code.

    Книга: Дейтелов "Как программировать на С"
    В книге по Си только 50%, дальше начинаются плюсы, что наверное и не плохо. Сам по себе Си - язык очень компактный и легкий.
    Ответ написан
    Комментировать
  • Как создать каталог в make?

    @res2001
    Developer, ex-admin
    Поставьте минус перед mkdir (и перед cp то же).
    make анализирует код возврата каждой выполняемой команды по отдельности, если команда завершается с кодом возврата не равным 0 (обычно это признак ошибки при работе программы), то make по умолчанию завершает процесс сборки с ошибкой. Знак минус заставляет make игнорировать код возврата.
    Ответ написан
    Комментировать
  • Можно ли переставить жесткий в DVD?

    @res2001
    Developer, ex-admin
    Ищите hdd caddy для своей модели ноутбука. На алике их полно всяких разных.
    У меня на Lenovo z510 уже несколько лет стоит - полет нормальный. Правда у меня второй винт.
    Проблем с тем, что у вас это единственный диск быть не должно, это то же самое как если бы вы в десктопе перекинули винт с одного SATA разъема на другой.
    Ответ написан
    Комментировать
  • Куда податься со знаниями языка Си?

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

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

    Я настраивал так - если питание от сети, то на закрытие крышки не реагировать. В этом случае схему менять не приходится - 1 раз активировал и все.

    Для смены схемы электропитания смотрите powercfg /?
    Создаете нужную схему и делаете батник с запуском powercfg. Батник можно вставить в шедулер (если там есть подходящее событие) или запускать руками.
    Ответ написан
  • Сколько потребуется действий, чтобы случились все события?

    @res2001
    Developer, ex-admin
    Событие возникает при определенном действии.
    Подскажите пожалуйста, как рассчитать количество действий, которое потребуется, чтобы совершились все события?

    Если действия, приводящие к наступлению событий разные, то очевидно, что нужно как минимум 4 действия для совершения 4 событий.
    Видимо вам нужно найти вероятность совершения всех 4 событий (или их действий) - перемножте вероятности: 0,03 * 0,08 * 0,1 * 0,15 = 0,000036 = 0,0036%
    Ответ написан
  • Как исправить "Выражение должно иметь константное значение"?

    @res2001
    Developer, ex-admin
    То как вы используете массив называется VLA (Variable Length Array). Появилось только в стандарте С99. В С++ его нет в принципе.
    Чтоб использовать VLA нужно компилятору явно задать используемый стандарт. Для gcc: -std=c99 или -std=c11. C11 - стандарт 2011 года.
    Если вы используете компилятор от микрософт (в составе MSVS например), то могу вас опечалить - микрософт никогда не стремилась поддерживать стандарты Си. Поддержки VLA там нет и вряд ли будет в ближайшее время.

    Но вообще не рекомендуется использовать VLA без четкого понимания что это, как работает и к каким последствиям может привести. Например, в свое время в ядре линукс была целая компания по выкорчевыванию кода с VLA. Так что лучше воспользуйтесь динамическими массивами или статическими с константными размерностями.
    Ответ написан
    2 комментария
  • Как автоматизировать подключение к VPN?

    @res2001
    Developer, ex-admin
    Видимо используете микрософтовские стандартные варианты ВПН?
    У микрософта есть такая штука CMAK помогает созадавать установщики ВПН соединения.
    Так же создать ВПН соединение можно с помощью powershell скрипта используя апплет Add-VpnConnection.
    Тут и тут пишут, что можно и просто в cmd (т.е. батником) создавать соединения.
    Подключить ВПН соединение с помощью rasdial, запустить RDP - mstsc.

    Если использовать openvpn, то можно уйти от паролей и сделать ВПН на ключах. Распространять уже преднастроенную сборку openvpn. Клиентские ключи можно регулярно банить и генерить новые. Новые выкладывать на сайте.
    Логин/пароль на винду лучше не прописывать в скрипте а публиковать на сайте и так же регулярно менять - пусть пользователь вводит их ручками. На всякий случай - сохранить логин/пароль для RDP соединения можно с помощью утилиты cmdkey.
    Ответ написан
    6 комментариев
  • Что отработает быстрее: связь или join?

    @res2001
    Developer, ex-admin
    Вы же сами уже ответили:
    В случае с left join, конечно, придется дописывать лишнее в sql запрос, зато одним запросом сразу вытащим все данные.

    join быстрее
    Ответ написан
    Комментировать
  • Умножение вещественного числа на -1 происходит на общих основаниях, не быстрее, чем на произвольное число?

    @res2001
    Developer, ex-admin
    Потренируйтесь тут или тут.
    Можно просто инвертировать старший бит.
    Ответ написан
    Комментировать