• Пример создания веб-приложения на PureQML



    Вступление


    Недавно мы открылись миру (совершили coming out, так сказать) и опубликовали статью про наш скромный фреймворк (исходники на GitHub). После общения с заинтересовавшимися участниками (большое им спасибо!) мы пришли к выводу, что для раскрытия темы необходимо написать подобие туториала на каком-нибудь реальном примере. На сайте проекта есть раздел с уроками, но эти уроки скорее описывают специфические ситуации, нежели картину в целом. Вот почему мы решили написать небольшой гайд. Для реалистичности, по шагам опишем создание простого, но реального, проекта, который хорошо показывает портируемость решений из веба в SmartTV. И да, результат этого гайда уже доступен в LG Smart World для телевизоров на базе WebOS (вы можете найти это приложение по названию «Earth Online»). В этой статье мы описываем создание ровно такого же приложения для десктопных и мобильных браузеров.

    Читать дальше →
  • Автоматизация печати в корпоративных системах или как подружить свой «велосипед» с принтером

    Привет, хабражитель! Хочу поделиться с тобой наболевшим опытом, надеюсь, будет полезен. Сегодня расскажу о том, как разрабатывали систему печати документов в корпоративной системе.

    С чего все начиналось


    А началось все с разработки ERP-платформы в одной торговой компании примерно 2 года назад. Был выбран Linux, стек С++/Qt, PostgreSql и фронт под web. На C++/Qt был реализован сервер приложений и там же, через прослойку JS интерпретатора писалась бизнес логика. Почему так — это отдельная история, здесь рассмотрим, как разрабатывалась система печати.
    Читать дальше →
  • Как я перестал бояться и переизобрел QML

      Что?


      Привет, Хабр! Прошло очень много лет, с тех пор как я писал сюда. Надеюсь, время тебя/меня не слишком/слишком потрепало.

      Я хотел бы написать о нашем опыте переосмысления идей QML. Qt — прекрасная (по совокупности заслуг) библиотека, и хотя её внутреннее устройство местами вызывает вопросы, но она дала миру не только кросс-платформенный UI тулкит, но и цельный профессиональный набор инструментов: Дизайнер, Креатор, Лингвист, и, конечно же, Qml. Результатом этого переосмысления стал наш скромный проект, который превращает qml в html5/javascript для разных платформ, и даже позволяет собирать простые android приложения используя Cordova.

      Qml всегда привлекал нас (небольшую неизвестную группу QML-адвокатов, как мы себя называем, надев монокли и цилиндры) своей абсолютной выразительностью в плане разработки интерфейсов, и поэтому каждый из нас использует их для разработки пользовательских интерфейсов и сайтов.

      Мы бы очень хотели, чтобы часть хабр-сообщества, открытая для всего нового, попробовала бы и оценила наши скромные возможности, мы получили фидбек, и смогли бы улучшить наш продукт.

      Исходные коды доступны на github, там же лежат исходные коды сайта, примеров и библиотека контролов, которые мы используем для всех своих проектов. Документацию и уроки можно посмотреть на нашем сайте, pureqml.com.
      Если вы чего-то не понимаете, можете присоединиться к группе поддержки в Telegram, мы постараемся ответить на все вопросы в реальном времени.

      Одно из бесплатных приложений, которые мы сделали, был порт игры Fontanero, она должна быть доступна в маркетах LG/Samsung.

      Ну а дальше можно не читать!

      Как мы дошли до жизни такой


      Всё началось в уже-далеком 2010-ом году, когда мы начали писать встраиваемое ПО (и интерфейс пользователя) в одной крупной корпорации для линейки разношерстных устройств на всевозможных платформах, доступных сейчас: arm, mips, x86, sh4, не хватало только sparc…
      Читать дальше →
    • Qt: Embedded World 2017 и roadmap

      Большая часть информации по Qt (новости, информация на сайте, статьи, публикации в блоге, аккаунты в соц.сетях) доступна только на английском языке. И хотя каждый разработчик желательно-обязательно должен владеть английским, для многих языковой барьер по-прежнему является проблемой.


      Я работаю в The Qt Company (в офисе Осло, Норвегия), и видя как обделено вниманием весьма немаленькое русскоязычное сообщество, я решил написать эту статью на русском и рассказать немного о прошедшей на позапрошлой неделе в Нюрнберге конференции Embedded World 2017, а также поделиться планами компании на будущие релизы Qt. Но хотя статья и на русском, ссылки всё же ведут на английскую документацию, а также некоторые термины я решил оставить в оригинале.

      Читать дальше →
    • Разработка для Sailfish OS: Модульное тестирование Qt/C++ под Sailfish OS

        Здравствуйте! Эта статья является продолжением цикла статей о тестировании Sailfish-приложений (предыдущая статья), и на этот раз мы рассмотрим модульное тестирование С++ в рамках проектов для Sailfish OS.
        Читать дальше →
      • AdBlock похитил этот баннер, но баннеры не зубы — отрастут

        Подробнее
        Реклама
      • eMule на Android

        eMule на Android


        image

        Это история про то, как стало возможным качать файлы из сети eDonkey на мобильные устройства под управлением Android. Бытует мнение что разработка клиентов для протокола eDonkey(ED2K) давно прекращена, но это не совсем так.

        Сразу оговорюсь — речь идет не о изменениях в программе eMule и даже не о моде этой программы, а о самостоятельном проекте. Почему eMule — потому что это общеизвестное название клиента стало именем нарицательным и обычно упоминается когда говорят об обмене файлами по протоколу ED2K.

        Подробности ниже.
        Читать дальше →
      • Попытки сделать изучение алгоритмов поиска пути проще

        Алгоритмы поиска пути — неотъемлемая часть разработки игр. А также различных систем навигации, ориентации и много чего ещё. Но мы сосредоточимся на именно игровой индустрии и алгоритмах, которые в ней применяются.

        Каждый игровой разработчик сталкивается с задачей, в которой требуется заставить персонажа(или бота) пройти из одной точки в другую, при этом не собрав все стены. А разработчикам стратегий ещё нужно учитывать проходимость клеток(дороги, болота, леса и так далее). Вот здесь на помощь приходят алгоритмы поиска пути.

        image
        Читать дальше →
      • Как написать собственную программу для контроллера ROBO TX

        Доброго времени суток! Сегодня я поделюсь опытом разработки программы для контроллера ROBO TX от немецкой фирмы Fischertechnik. Возможно, на данный момент он не является топовой моделью, однако базовые принципы, которые я собираюсь описать далее, могут быть полезны юным разработчикам, которые столкнутся с контроллерами этого производителя.

        Контроллер ROBO TX
        image

        Данный контроллер в основном предназначен для конструирования простых роботов с целью обучения. В комплекте идет графическая среда программирования, которая помогает заложить в него простые алгоритмы. Также ребята из русского представительства Fischertechnik подсказали, что имеется динамическая библиотека c API от создателей, которая предоставляет полный контроль и позволяет решать требуемые задачи более гибко уже путем разработки собственного софта, что как раз и произошло в моем случае.
        Читать дальше →
        • +19
        • 3,9k
        • 9
      • Простая реализация Stream из Java 8 в С++

          Всем привет! В статье будет представлена упрощенная реализацию Stream из Java 8 на С++. Скажу сразу, что:


          • в отличии от Java не используются отложенные вычисления;
          • нет параллельных версий;
          • местами совмещает Stream и Collectors;
          • используются простые и готовые решения от STL, здесь нету чистого ФП, где только рекурсия;
          • не используются техники оптимизации.

          В этой версии основной упор сделан на то, чтобы быстро и просто сделать велосипед). Про ФП упомянуто по-минимуму (комбинаторам внимание не уделено :)).


          Интерфейс


          template <typename Type>
          class Stream : private StreamImpl<Type>
          {
          private:
              typedef StreamImpl<Type> Parent;
          public:
              using Parent::Parent; // конструкторы унаследованы
              using Parent::data;
              using Parent::isEmpty;
              using Parent::count;
              using Parent::flatMap;
              using Parent::map;
              using Parent::reduce;
              using Parent::filter;
              using Parent::allMatch;
              using Parent::noneMatch;
              using Parent::groupingBy;
              using Parent::partitionBy;
              using Parent::minElement;
              using Parent::maxElement;
              ~Stream() = default;
          };
          Читать дальше →
        Самое читаемое