• Как сэмулировать нажатие клавишы Пробел на Arduino?

    @Mercury13
    Программист на «си с крестами» и не только
    Странно: если ардуина — USB-клавиатура, то она передаёт именно нажатие физической клавиши «пробел».
    Впрочем, у вас тут стоит пробел в кавычках " ". Скорее всего, именно в этом ошибка: при плохой проверке типов, присущей Си, в функцию (которая требует char) будет передан адрес строки «пробел».

    Надо Keyboard.press(' '); или Keyboard.write(' ');. В одиночных кавычках. То есть целое число.

    Кроме того, Keyboard.press только нажимает на кнопку, и разбирай, как эту кнопку «отпустить». По крайней мере, моя «лисичка» требует именно ОТПУСКАНИЯ пробела. Как вариант — тот же Keyboard.write, который жмёт и отпускает.
    Ответ написан
    1 комментарий
  • Собранный компьютер не видит монитор, что делать?

    @Mercury13
    Программист на «си с крестами» и не только
    Может оказаться, что нужно подключить монитор ко встроенной видяхе, подстроить BIOS, чтобы в следующий раз брал видяху внешнюю, подключить ко внешней — и пошёл!
    У меня было именно такое (правда, в те времена встроенные видяхи распаивали на матплате, а не в процессоре).
    На вашей матплате DVI−, Dual Link — поэтому монитор (или телевизор-заменитель) придётся подключать через DVI или HDMI. VGA не катит.
    А у меня — я тогда отдал свой VGA-кабель кому-то, пришлось «стрелять».
    Ответ написан
  • Существует ли реализация J2ME для Java SE\С++?

    @Mercury13
    Программист на «си с крестами» и не только
    CLDC и MIDP — это всего лишь стандартные библиотеки Java ME. Первое — это штатные возможности процессора и JVM, более ограниченные, чем Java SE. Второе — доступ к аппаратуре телефона: LCDUI, MMAPI и прочее. Ещё одно отличие — т.н. преверификация классов (Java SE вычисляет информацию о классах сама, а Java ME с кастрированным загрузчиком — полагается на расчёт на настольном компьютере).

    Как они архитектурно реализованы, какой процент библиотек написан на Java и какой в машинном коде — программиста на Java ME совершенно не интересует (кроме случаев, когда на мобильнике какой-то класс глючит). На то он и ME, что даёт простой фреймворк для написания софта для мобильников.

    Какой-то эмулятор есть в Java ME SDK. Как его настроить под нужный мобильник, я не в курсе.
    Также есть MicroEmulator: https://code.google.com/archive/p/microemu/downloads . Если вы хотите быть такой элитой Java ME, что будете писать свои драйверы (или просто встроить поддержку ME куда-то в другую программу), думаю, что MicroEmulator — неплохой тестовый полигон. Обычный ME’шник драйверов не пишет, их пишут авторы прошивок мобильников.
    Ответ написан
  • Как определить, что начался новый пакет и закончился предыдущий?

    @Mercury13
    Программист на «си с крестами» и не только
    Протокол TCP считает, что данные идут непрерывным потоком; всё, что не пришло, переспросили, всё, что пришло вне очереди, поставили на место.

    Единственный способ — наладить в этом потоке данных искусственные границы пакета. Например:

    opcode : word
    packetLength : dword
    data : byte[packetLength]
    Ответ написан
    Комментировать
  • В чем суть self-bounded types?

    @Mercury13
    Программист на «си с крестами» и не только
    Не в этом дело. Тут задача — уже при компиляции сказать, что программа некорректна и нельзя сравнивать, например, enum TrLight { RED, YELLOW, GREEN } и enum Pet { CAT, DOG, HEN }.

    Для Java-машины TrLight и Pet — один и тот же класс, проверка шаблонных классов идёт при компиляции!
    Ответ написан
    Комментировать
  • Какой бюджетный ноут взять для учёбы на программиста?

    @Mercury13
    Программист на «си с крестами» и не только
    Core i3 очень не помешает при компиляции средних проектов (десятки исходных файлов), особенно на C++ и Java. Если хватит денег, берите его. Для учебных (до десятка исходных файлов) не столь важно.
    XML — очередное «модное слово», это лишь универсальный машиночитаемый (и достаточно человекоредактируемый) формат данных. Непонятно, что собираетесь с ним делать. Но, в любом случае, разбор медленный и не распараллеливается — на задачах, связанных с XML, i3 будет чувствовать себя изрядно лучше. ФШ тоже.

    О «бюджетной» паре. Intel незначительно (≈10%) быстрее в одном потоке, AMD несколько (10…40%, в зависимости от задачи) быстрее, если удастся распараллелить задачу на все четыре. И видяха лучше. Так что я в целом за AMD, правда, его видеодрайверы считаются намного менее стабильными.
    Ответ написан
    8 комментариев
  • Почему компилятор выдаёт ошибку?

    @Mercury13
    Программист на «си с крестами» и не только
    Это очень старый код, задолго до 1998 года, когда C++ стал стандартом.

    Сейчас (а вот не в курсе — в C++98 или C++03) огромное количество заголовков C++ объединили в стандартную библиотеку шаблонов (STL). Так что потребуется слегка изменить код.

    1. Вместо <iostream.h> использовать <iostream>. <stdio.h>, в принципе, работает, но рекомендуется брать <cstdio>.
    2. Все функции находятся в пространстве имён std. То есть: std::cout, std::endl, и т.д. Либо, как предложил D' Normalization, using namespace std;.
    Ответ написан
    Комментировать
  • Как в c++ уменьшить память, зарезервированную под вектор?

    @Mercury13
    Программист на «си с крестами» и не только
    c++11 — shrink_to_fit.
    Ответ написан
    Комментировать
  • Можно ли подготовиться к Яндекс ШАД дза год?

    @Mercury13
    Программист на «си с крестами» и не только
    Да более чем! Главная проблема — интегралы. Один средней сложности точно будет.
    Ответ написан
  • Что такое проекция на множество узлов в графе?

    @Mercury13
    Программист на «си с крестами» и не только
    Двудольный граф можно представить как соответствие R ⊆ A×B. Тогда проекция двудольного графа на долю A (или B) — это те вершины из A (или из B), из которых идёт ребро.
    Ответ написан
    Комментировать
  • 12 вольт на аудиоджек: стои́т ли задача, и как не допустить?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    В общем, решение общими силами выработалось.
    Какая-нибудь «мама» D-Sub.
    Ответ написан
    Комментировать
  • Как живётся программисту без дискретной видеокарты?

    @Mercury13
    Программист на «си с крестами» и не только
    Если не пишешь требовательные игры, никаких проблем. Хороший Core i7, один монитор FullHD.
    Только матплату надо накопать такую, чтобы два монитора всё-таки подключились (у меня VGA+DVI, этого явно не хватает).
    Ответ написан
    Комментировать
  • Как решить проблему поворота вектора в сторону заданных координат?

    @Mercury13
    Программист на «си с крестами» и не только
    sin(x^y) = x×y / (|x|·|y|)       (1-й курс института, но легко выводится и самостоятельно)
    cos(x^y) = (xy) / (|x|·|y|)      (школа)

    x, y — векторы в 2D
    x^y — угол между векторами
    x×y — косое произведение векторов
    (xy) — скалярное произведение векторов
    |x| — евклидова длина (модуль, 2-норма) вектора

    Отсюда x^y = atan2( (xy), x×y ).
    Возможно, где-то упустил знак и у меня получился не x^y, а y^x.
    Ответ написан
  • Абстрактные классы и интерфейсы - когда применять одно или другое?

    @Mercury13
    Программист на «си с крестами» и не только
    Всё зависит от того, что вы хотите. И вообще, с «опциональной» функциональностью есть много вариантов (для простоты пишу на Java).

    1. «Типа по ООП».
    class Animal {}
    class Dog extends Animal {
       public void doSound() {}
    }

    Недостаток: если у нас есть собака со звуком, кошка со звуком и утка со звуком и надо выдать звук, если возможно — фигвам!

    2. Реализовать интерфейс Vocal
    interface Vocal {
      void doSound();
    }
    class Animal {}
    class Dog extends Animal implements Vocal {
       @Override
       public void doSound();
    }

    В таком случае
    if (animal instanceof Vocal)
      ((Vocal)animal).doSound().

    Впрочем, такие преобразования типа — тоже слегка не по ООП.

    3. Не в курсе, возможно ли в Java, напишу это на C++. Protected doSound в Animal и public в Dog.
    class Animal {
    protected:
       void doSound();
    };
    class Dog : public Animal {
    public:
      using Animal::doSound;
    };

    Недостаток в том, что если всё же придётся организовывать общую функциональность — то приходится писать шаблон «Public Морозов».
    Пример: у всех компонентов VCL есть protected __property Caption. И в 99% случаев этого хватает: заглавие отображается где-то — вытягивай наружу. У меня возник вопрос с автоматическим переводом форм. Либо подключай интроспекцию, либо Public Морозов (в Delphi/Builder есть интроспекция и доп. право доступа published, подключающее свойство к ней). Я не стал мучиться и сделал второе.
    Также задача несколько неудобна, когда библиотека долго живёт и развивается: с каждой новой версией приходится выносить наружу всё новые и новые свойства
    Плюсы? Просто, малый расход памяти и удобно писать специальные задачи. Например, свойство Hint protected, но действует; если всплывающая подсказка какая-нибудь динамическая и снаружи менять нельзя — меняй на здоровье изнутри.

    ЗЫ. Пришёл с работы, то же самое на Java.
    public class Dog extends Animal {
        @Override
        public void doSound() { super.doSound(); }
    }

    Ну а роль Морозова будут играть API интроспекции и «морозовский» класс в том же пакете. Все мы забываем, что protected покрывает более жёсткое package, т.е. из того же пакета тоже можно.
    public static void main(String[] args) {
            Animal an = new Animal();
            an.doSound();   // protected!
        }


    4. Может ли издавать звук?
    class Animal {
    public boolean isVocal() { return false; }
    public void doSound() {}
    }


    5. Вернуть интерфейс Vocal; если null — животное молчит.
    class Animal {
    public Vocal getVocal() { return null; }
    }


    Что выбирать — однозначного ответа нет. Насколько много будут наследовать от этого класса, насколько много будет общих задач и насколько будет перегруженной документация… Допустим, если мы не имеем доступа к классу Animal, заманчиво второе. А если Vocal — не интерфейс, а абстрактный класс, то пятое.
    Ответ написан
    Комментировать
  • Наследование C++?

    @Mercury13
    Программист на «си с крестами» и не только
    Private и protected — это когда объект скрывает, что унаследован от студента. Снаружи не виден ни факт наследования, ни отцовские поля.
    class Father {};
    class Son : private Father {};
    
    int main()
    {
        Son son;
        Father& q = son;
    }

    error: 'Father' is an inaccessible base of 'Son'

    Private и protected — скорее «хаки» и пользоваться ими не рекомендуется. Хотя, разумеется, пользуются, чтобы упростить себе жизнь. Я вижу два назначения: 1) хорошая основа для совершенно постороннего класса; 2) реализация интерфейса, которая нужна только внутри.

    Вот пример второго. Объект FileWriter реализует интерфейс Callback для своих внутренних нужд.
    #include <iostream>
    
    class Callback {
    public:
        virtual void act(int x) = 0;
    };
    
    void generateFibonacci(int n, Callback& callback) {
        int x1 = 0, x2 = 1;
        for (int i = 0; i < n; ++i) {
            callback.act(x2);
            int x3 = x1 + x2;
            x1 = x2;
            x2 = x3;
        }
    }
    
    class FileWriter : private Callback {
    public:
        FileWriter(std::ostream& aOs, int aN) : os(aOs), n(aN) {}
        void run() { generateFibonacci(n, *this); }
    private:
        std::ostream& os;
        const int n;
        void act(int x) override { os << x << std::endl; }
    };
    using namespace std;
    
    int main()
    {
        FileWriter wri(std::cerr, 10);
        wri.run();
    }

    А если реальная жизнь — то объект может быть одновременно QDialog (диалоговое окно) и QAbstractItemModel (модель данных для какой-нибудь таблицы, лежащей на этом окошке). Хотя, повторяю, это скорее хак.

    P.S. В Delphi и Java всё наследование публичное, и если нужно скрытно реализовать какой-то интерфейс или задействовать удобный класс — то только скрытым полем. Так, как в комментариях.

    P.P.S. Пример первого. Какой-нибудь Array2d скрыто наследуется от Array1d, потому что у него совершенно другой интерфейс. У Array1d — alloc(n) и operator()(i), у Array2d — alloc(m, n) и operator()(i, j). А Array1d — неплохая штука, чтобы управляться блоком памяти длиной m×n элементов.
    Ответ написан
  • Как убрать раскладку клавиатуры на мобильном устройстве?

    @Mercury13
    Программист на «си с крестами» и не только
    Так работает браузер: ставишь курсор в поле — появляется клавиатура. И ничего с этим не сделаешь, надо искать обходы. Вот на выбор несколько вариантов.
    1. Сделать поле невидимым, как минимум на мобильных платформах.
    2. Сделать так, чтобы выбор даты не требовал постановки курсора в поле.
    3. В HTML5 есть несколько специализированных полей ввода специально для дат. WebRef говорит, что работает с большими ограничениями и потому желательно всё-таки сделать календарь на JS — но они есть.

    ЗЫ. Проверил специализированные элементы управления на мобильных Chrome и Firefox, вышло вот что.
    Number: Cr cool, Fx заглючивает тултип, если цифра не в диапазоне
    Date: Cr cool, Fx вылет
    Color: Cr работает (хотя можно наставить побольше предопределённых цветов), Fx выбор из десятка цветов
    Range: оба cool
    Month: Cr cool, Fx вылет
    Week: Cr недостаточный интерфейс, Fx вылет
    Time: оба cool
    Datetime: Cr не работает, Fx вылет
    Datetime-local: Cr недостаточный интерфейс, Fx вылет
    Search: ничем, кроме вида кнопки OK, не отличаются
    Tel: оба cool
    Url: оба cool
    Ответ написан
    Комментировать
  • А допустимо ли делать пхп страницу на инклюдах?

    @Mercury13
    Программист на «си с крестами» и не только
    Лучше вместо include использовать require.
    Хорошее дело, если нужно быстро придумать недо-CMS.
    Ответ написан
    Комментировать
  • Почему такая разница в производительности SQLite в PHP и Delphi?

    @Mercury13
    Программист на «си с крестами» и не только
    1. Есть подозрение, что вы по какой-то причине в C++-версии не предкомпилируете запросы. Запрос компилируется каждый раз, когда вы его исполняете. Хотя это зависит от обёртки — простыми Си’шными функциями работать с SQLite ой как тяжко, все используют обёртки.
    2. Если компилируете SQLite классическим компилятором Embarcadero — он в несколько раз медленнее других. Хотя разницу в несколько порядков давать не может. Кстати, столь большие Си-файлы быстро заглючивают Embarcadero, и лучше SQLite отправить в статическую или динамическую библиотеку.
    Ответ написан
    1 комментарий
  • Как сделать, чтобы аппаратная клавиатура Android печатала на русском?

    @Mercury13 Автор вопроса
    Программист на «си с крестами» и не только
    О, GK обновили, всё работает! Мой багрепорт подействовал.

    А временное решение — накопать любую подходящую клавиатуру. Я использовал SwiftKey.
    Ответ написан
  • Как создать калькулятор (аналоги строительных)?

    @Mercury13
    Программист на «си с крестами» и не только
    Самый лучший инструмент для прототипов — Excel. Или любая другая понравившаяся таблица, например, LibreCalc.
    Для Android — Android Development Studio, понятное дело.
    Настольную программу можно написать даже на JavaScript. Если же нужен EXE — что угодно, на чём умеешь программировать. Я бы взял визуальную систему наподобие Delphi, Qt или WinForms.
    Ответ написан
    Комментировать