Задать вопрос
  • Консольное программа delphi?

    @Mercury13
    Программист на «си с крестами» и не только
    Для этого служат, извините, циклы. Самый простой способ — бесконечный цикл с break внутри
    repeat
      ваш код
      if [что-то там] then break;
      ваш код
    until false;
    Ответ написан
    Комментировать
  • Free Pascal ANSI или Unicode?

    @Mercury13
    Программист на «си с крестами» и не только
    Плавали, знаем. Долго видел на BCB6, а потом преобразовывал ANSI → UTF-16.
    1. Раз у нас UTF-16, придётся усложнить работу с путями и прочим (например, сокращение строк). Раньше символ был один char, стало — один-два WideChar.
    2. Где у нас низкоуровневые строки — придётся корректировать объёмы памяти. На всех языках, кроме Си и Си++, такого обычно мало: на Си нет своих строк, а в Си++ автодеструкторы.
    3. Где у нас сериализация — придётся перекодировать. В ANSI адресуемая единица (байт) совпадает с символом текста, в Юникоде уже нет.
    Ответ написан
    3 комментария
  • Как реализовать наследование статического поля/метода, если это возможно?

    @Mercury13
    Программист на «си с крестами» и не только
    Первое. Объясни, для себя и для меня, что собой представляет объект Command?

    Моё видение — разделить объекты Command (введённая пользователем и разобранная строка) и Program (программа, реализующая команду). Также я нарисовал — хочешь, используй, хочешь, нет — объект Console (консоль ввода-вывода) и System (окружение программы вроде текущего каталога, переменных окружения, файловой системы).

    Я тут работаю со значениями и указателями, в терминах C++03, но, возможно, вас заинтересуют умные указатели C++11.

    std::string commandLine = console.getSomeCommandLine();
    Command command;
    std::string error;
    if (!command.parse(commandLine, error)) {
      console.err().writeln(error);
      return;
    }
    Program* program = system.findProgram(command.programName);
    if (!program) {
      console.err().writeln("Bad command or file name");
      return;
    }
    Console redirectedConsole = console.redirectStreams(command);
    program->exec(redirectedConsole, system, command.getArguments());


    Второе. Возвращай ссылки, это быстрее.
    const std::vector<std::string>& getArguments() const;
    const std::vector<std::string>& getOptions() const;
    Ответ написан
  • Почему не работает libcurl?

    @Mercury13
    Программист на «си с крестами» и не только
    Как ни странно, нужна версия libcurl с поддержкой HTTPS.
    Большинству таких версий в нагрузку нужны два файла OpenSSL — libeay32.dll, ssleay32.dll.
    Ответ написан
    Комментировать
  • Ошибка C++ Builder XE Unable to open file 'ODBCPROVIDER150.OBJ'. Кто-нибудь поможет?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Этого файла не будет, он скрыт в файле с расширением lib. Найдём его. Если нет — значит, библиотека не была скомпилирована под Builder.
    2. Tools → Options → C++ Options → Paths and Directories → Library Path.
    Ответ написан
    Комментировать
  • Позволяет ли копилефт-лицензия DSL встраивать свободные компоненты в несвободный проприетарный продукт?

    @Mercury13
    Программист на «си с крестами» и не только
    The aggregation of the Work with other works that are not based on the Work -- such as but not limited to inclusion in a publication, broadcast, compilation, or other media -- does not bring the other works in the scope of the License; nor does such aggregation void the terms of the License for the Work.

    Действуй — лишь бы были доступные исходники. В отличие от LGPL, не нужна даже возможность подмены.
    Ответ написан
  • Распиновка 3 пин вентилятора. Что значит s?

    @Mercury13
    Программист на «си с крестами» и не только
    Sense, контроль частоты. Всё как я думал: синий — земля. А красный с оранжевым — питание и контроль.
    Ответ написан
    9 комментариев
  • Как понять такое поведение LibGDX?

    @Mercury13
    Программист на «си с крестами» и не только
    Учите понятие «цикл обработки сообщений». Между drawing() и loadLevel() вызвать принудительную обработку оконных сообщений.

    Насколько я понял (фреймворка не знаю), надо Display.processMessages();
    Ответ написан
    Комментировать
  • Почему в логотипах редко используют красивые, сложные иллюстрации?

    @Mercury13
    Программист на «си с крестами» и не только
    Когда рыцари стали носить закрытые шлемы, изобрели гербы — на щите стали рисовать что-то, связанное с личностью рыцаря. И все страшные и сложные геральдические законы — это: 1) опознать рыцаря даже с сотни метров в сумерках; 2) при крайней дороговизне цветного рисунка сохранять изображения гербов в гербовниках.

    А ведь для логотипов то же самое. Опознать бренд, например, из кабины автомобиля или при беглом проходе мимо. И не везде доступны цветные изображения — дизайнер решил выворотку, ч/б принтеры намного дешевле, ксерокс всё ещё не отжил, оформленный одной (но хорошей) краской прибор выглядит дороже. Только прогресс идёт, принтеру или офсетной машине что текст, что рисунок — всё едино, и геральдический язык уже не нужен. И даже чертёж для Знака качества — отжившее дело, восстанавливать знак с линейкой и циркулем не надо, достаточно выложить SVG.

    Сложные иллюстрации некогда были мейнстримом, да и сейчас, например, в логотипе Киевского университета стоит его Красный корпус. Но тут всё зависит от того, на что мы ставим логотип: в университете — максимум на папку, да и Красный корпус сам по себе бренд. По той же причине выжил логотип кока-колы: на этикетке он более чем хорош. А сложное изображение богини Kwanon превратилось в предельно стилизованное Canon.
    Ответ написан
    1 комментарий
  • Как правильно определить питание cpu куллер?

    @Mercury13
    Программист на «си с крестами» и не только
    Силу тока не надо, ноутбучный кулер — не настолько мощная штука, чтобы превысило ток на какой-то линии.
    Цвета надо. Их, как правило, три или четыре: питание (красный/зелёный), земля (чёрный), контроль (белый/жёлтый) и ШИМ (на ноутбучных обычно нет, синий).

    Если кулер влезает, но провода не сходятся по разводке (то ли единичный брак, то ли на сходную модель) — для единичного ремонта ничего не стоит перепаять. Только не забудьте заизолировать термоусадкой.

    Касательно вашего кулера — вероятно, землю (а без неё никак) сделали синей. Единственный способ проверить это точнее — если кулер работает, подключить его к какому-то блоку питания на 5 вольт. Если не работает и вы разбираетесь в схемотехнике — распатронить и выяснить по управляющий плате, что и куда.
    Ответ написан
    1 комментарий
  • Почему единицы измерения разрешений экранов мониторов и смартфонов разные?

    @Mercury13
    Программист на «си с крестами» и не только
    > но этот экран в 10 раз меньше экрана моего ноутбука
    Если только по площади — если пропорции сходные, 15" больше 5,5" в 7,43 раза.

    И там, и тут единицы измерения — пиксели. Просто у смартфонов больше пикселей на дюйм.
    Почему так?
    • Мы смотрим на экран с меньшего расстояния.
    • Смартфонные API молоды и потому изначально рассчитывались на переменный DPI. Имеющиеся программы не пострадают.
    • И в то же время из-за маленьких экранов и больших пальцев плотная компоновка элементов управления не требуется.
    • Видимо, HiDPI-экран настольных размеров без битых пикселей будет стоить запредельно дорого.

    Иногда размеры меряют в «диалоговых единицах» и «аппаратно-независимых пикселях» (например, 1px в вебе именно что «аппаратно-независимый пиксель», который может быть 2 или 3 реальных пикселя). Но это уже офтоп.
    Ответ написан
    1 комментарий
  • Алгоритм обхода площади за минимальное время?

    @Mercury13
    Программист на «си с крестами» и не только
    Если поворот «бесплатен», эквивалентны все несамопересекающиеся маршруты.
    Если нет — точного доказательства не вижу, но, по-видимому, тоже оптимальна (2h−2 поворота).

    UPD1. Если из-за каких-то особенностей прохождения поворотов на скорости нежелательны развороты на 180° — тогда спираль с первым отрезком по длинной стороне.
    Ответ написан
  • Qt. Как использовать сигналы-слоты?

    @Mercury13
    Программист на «си с крестами» и не только
    Нет, мы заводим где-то новый слот и подаём сигнал в него.
    Есть два способа завести новый слот: либо унаследоваться от QObject или его наследника (удобно унаследовать главную форму), либо воспользоваться лямбда-функцией C++11. Поскольку все наши формы на стеке, проще всего написать лямбду.

    connect(&Button, &QPushButton::clicked, 
                &Base, [&]() {
            // тут код
        });


    В реальных проектах каждая форма является наследником от QWidget (или чего-то подобного) и хранит свои компоненты. А слоты — это функции в форме.
    Ответ написан
    7 комментариев
  • Testing software for hardware. Что нужно знать о тестировании софта для периферии?

    @Mercury13
    Программист на «си с крестами» и не только
    Блин, я что, нажал на «Предпросмотр», затем F5? Повторю.

    1. Самому пользоваться этим железом, строить свои сценарии пользования.

    2. Ходить по форумам, выяснять чужие сценарии пользования и для чего покупают такое «железо».
    а) Мой сценарий пользования геймерской мышью: под большим пальцем кнопки браузера. Наклон колеса — очень быстрая прокрутка. Плюс быстрое переключение между работой и игрой (DPI/раскладка). У кого большой монитор и/или мало места — плавная (с шагом не более 100) регулировка DPI и сохранение, какой DPI был. В шутере, как известно, нужен большой DPI, но бывает, что тогда в меню курсор просто гоняет — значит, нужна легкодоступная регулировка в обе стороны.
    б) Не совсем, конечно, ПО, но всё-таки. Если у мыши настраиваемая высота подъёма, что будет, если она заглючит или пользователь выставит минимальную высоту? Не останемся ли мы с недействующей мышью без возможности запустить её снова?
    в) Выяснилось, что симмерам на RGB-клавиатурах нужна подсветка зонами. И от меня: подсветка в зависимости от раскладки клавиатуры.

    3. Подобное ПО, как правило, глючное, жирное (как для резидентной программы) и плохо локализованное. Выяснять, что в нём не так. Вот мои типичные жалобы.
    а) У дешёвых RGB-светодиодов плохая цветопередача. Можно ли её компенсировать программно? (Ну и ШИМ заел, но это уже аппаратное.)
    б) Часто приходится перекладывать руку с клавиатуры на мышь. Бывает, что ввод с клавиатуры, а OK — мышью.
    в) Можно ли разделить программу на резидентную управляющую и нерезидентную утилиту конфигурирования?
    (Мне-то с ПО Gigabyte повезло, за исключением юзабельности — там резидентного вообще ничего нет, вся логика, даже перекалибровка датчика, в самóй мыши.)
    Ответ написан
    Комментировать
  • C++ Builder и ProgressBar. Как сделать постоянное отображение квадратика бегающего слева направо?

    @Mercury13
    Программист на «си с крестами» и не только
    Нужно дать возможность оконным сообщениям ходить и обрабатываться.

    Простой способ. Поминутное Application->ProcessMessages().
    Сложный способ. Вынести долгую операцию в поток.

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

    @Mercury13
    Программист на «си с крестами» и не только
    Что вы имеете в виду? Инициализировать и закрыть библиотеку по мере появления-исчезновения объектов? Вот мой код (работает с cURL, но понятно).

    В чём его смысл? Как только объект cURL требуется первый раз, инициализируем глобальный объект. Теперь, скорее всего, cURL будет разрушен с его деструктором. Но если в каком-то потоке объект cURL будет слишком долго жить — ничего, подождём.

    (Внимание, тут гонка, если одновременно потребуются два объекта cURL. Нам такое не нужно, но если вдруг — защитите по принципу Singleton’а.)

    namespace curl {
    
        std::atomic<size_t> nLib(0);
    
        class _Lib
        {
        public:
            bool isIn = false;
            ~_Lib();
        };
    
        _Lib lib;
    
        void addLib()
        {
            int q = ++nLib;
            if (q == 1) {
                lib.isIn = true;
                q = ++nLib;
                curl_global_init(CURL_GLOBAL_ALL);
            }
            //std::cout << "Added lib, now " << q << std::endl;
        }
    
        void releaseLib()
        {
            int q = --nLib;
            if (q == 0) {
                //std::cout << "Cleaned up lib" << std::endl;
                curl_global_cleanup();
            } else {
                //std::cout << "Released lib, now " << q << std::endl;
            }
        }
    
        _Lib::~_Lib()
        {
            if (isIn)
                releaseLib();
        }
    
    }
    
    curl::Curl::Curl()
    {
        addLib();
        fData.handle = curl_easy_init();
    }
    
    curl::Curl::~Curl()
    {
        if (fData.handle)
            curl_easy_cleanup(fData.handle);
        releaseLib();
    }
    Ответ написан
    Комментировать
  • Как перевести число в строку с++?

    @Mercury13
    Программист на «си с крестами» и не только
    Ошибка вот где.
    else {
                cout<<"False";
                return 0;
            }
        }

    Проверяет только первую цифру, и если она не 3 — сразу же говорит false.
    Ответ написан
  • Можно ли написать такой драйвер под windows?

    @Mercury13
    Программист на «си с крестами» и не только
    vjoystick.sourceforge.net/site
    www.headsoft.com.au/index.php?category=vjoy
    Авось что-нибудь придумаете с этими драйверами. У обоих есть SDK.

    Есть ещё PPJoy, но сайт его какой-то мутный.

    Ну и, как сказал 123459, бывает проще сделать HID-устройство прямо внутри Arduino.
    Ответ написан
    Комментировать
  • Deadlock found when trying to get lock; try restarting transaction?

    @Mercury13
    Программист на «си с крестами» и не только
    Транзакции борются за строки таблицы таким образом, что их можно рассудить, лишь откатив одну из них. Не опасно. На уровне настроек сервера не решается, дело в прикладном коде.
    1. При взаимной блокировке откатить транзакцию и повторить снова.
    2. На ключевых транзакциях установить более мягкое или жёсткое правило изоляции транзакций.
    3. Кому-то помогало переписывание индексов: Mysql: Deadlock found when trying to get lock; try restarting transaction
    4. sqlinfo.ru/forum/viewtopic.php?id=2291 Кто-то сделал неверный LOCK и вместо деда Мороза пришёл дед Лок.
    5. Переписать архитектуру программы так, что не потребуется миллионы раз обращаться к одному и тому же.
    Ответ написан
    Комментировать
  • Как сделать преобразование hex to float правильно?

    @Mercury13
    Программист на «си с крестами» и не только
    Мы присвоили float’у целое число. Надо использовать union.
    union {
            float asF;
            uint32_t asI;
        };
        asF = 0x3EAE147B; // в десятичной - 0.340
        std::cout << asF << ' ' << std::hex << asI << std::endl;
        asI = 0x3EAE147B;
        std::cout << asF << ' ' << std::hex << asI << std::endl;
        return 0;
    Ответ написан
    Комментировать