• Пробрасываем вызовы Steam API из Wine в GNU/Linux и обратно с помощью Nim

      У игроков на платформе GNU/Linux множество проблем. Одна из них — необходимость устанавливать отдельный клиент Steam для каждой Windows игры из Steam. Ситуация усугубляется необходимостью установки ещё и родного клиента Steam для портированных и кроссплатформенных игр.

      Но что если найти способ использовать один клиент для всех игр? За основу можно взять родной клиент, а игры для Windows пусть обращаются к нему так же как, например, к OpenGL или звуковой подсистеме GNU/Linux — средствами Wine. О реализации такого подхода и пойдёт речь далее.

      Читать дальше →
      • +46
      • 8,8k
      • 8
    • STM32 blink++ или читаем данные инкрементального энкодера

      • Tutorial

      Мотивация


      Пару месяцев назад я рассказывал, как работает инкрементальный энкодер и как читать угол при помощи простейшей ардуины. Разумеется, немедленно получил вот такие комментарии:



      У меня ардуино головного мозга. Пусть лично я самой средой ардуино и не пользуюсь, но всё же считаю, что это весьма полезная штука. Я слышал много ужасов про то, как начинать с stm32, и не хотел в это влезать. С другой стороны, в последнее время всё чаще стали слышны комментарии о том, что инструментарий допилили и вообще всё в шоколаде. Решил попробовать, сколько времени у меня займёт сделать простейший проект типа помигать светодидом. Купил синюю таблетку, купил китайский аналог отладчика st-link v2, и сел с этим всем разбираться.

      Забегая вперёд, вот так выглядит железка, о которой идёт речь:


      Читать дальше →
    • Флаги в аргументах функций

      • Перевод
      Вы когда-нибудь сталкивались с таким кодом?

      process(true, false);

      Эта функция, судя по названию, что-то обрабатывает (process). Но что означают параметры? Какой параметр здесь true, а какой false? По вызывающему коду об этом нельзя судить.

      Нам придется заглянуть в объявление функции, которое дает подсказку:

      void process(bool withValidation,
                   bool withNewEngine);

      Очевидно, автор использует два параметра типа bool как флаги (toggles). Реализация функции может быть похожа на это:

      void process(bool withValidation,
                   bool withNewEngine)
      {
        if (withValidation)  // используется 1-й флаг
          validate(); // % подтвердить
       
        do_something_toggle_independent_1
       
        if (withNewEngine)   // используется 2-й флаг
          do_something_new();
        else
          do_something_old();
       
        do_something_toggle_independent_2();
      }

      Назначение флагов очевидно, поскольку каждый из них имеет осмысленное название. Проблема возникает в вызывающем коде.
      Читать дальше →
    • Ускоряем метод Виолы-Джонса (Viola-Jones)

        В последнее время метод Виолы-Джонса, который долгое время был основным способом детектирования объектов на изображении, отступает под натиском более новых и совершенных алгоритмов. Тем не менее, актуальность этого метода еще сохраняется и в настоящем времени.

        Да, каскадный классификатор основанный на признаках Хаара (метод Виолы-Джонса) уступает в скорости работы каскадному LBP классификатору. Он менее точен, чем детектор, основанный на HOG признаках, и тем более детектор, базирующийся на сверточных нейронных сетях. И все же у него есть определенная ниша, когда требуется точность выше, чем у LBP каскада, но скорость работы более точных детекторов недостаточна высока. Не менее важным фактором является то, что для каскадного Хаар классификатора существует большое количество уже обученных каскадов, в том числе в стандартной поставке библиотеки OpenCV. Поэтому скорость работы этого алгоритма весьма важна. Что и побудило автора в свое время занятся его оптимизацией.

        image

        Ну и какая статья об детектировании лиц, может обойтись без фотографии Лены?
        Читать дальше →
      • Основные принципы C++: Правила выражений и операторов

        • Перевод
        Бобра!

        Что ж, мы плавно выходим на старт второго потока группы «Разработчик С++» и разбираем интересные материалы, которые накопились у преподавателя в свободное от работы и преподавания время. Сегодня рассмотрим (а потом и продолжим) серию материалов, где разбираются отдельные пункты С++ Core Guidelines.

        Поехали.

        В C++ Core Guidelines много правил, посвященных выражениям и операторам. Если быть точным, то более 50 правил посвящено объявлениям, выражениям, операторам и арифметическим выражениям.



        *перевод
        Информативные названия

        Оптимальная длина переменных

        • Не должны быть слишком длинными (maximimNumberOfPointsInModernOlympics.) или слишком короткими (например, x, x1)
        • Длинные названия сложно печатать, короткие названия недостаточно информативны..
        • Дебажить программы с названиями от 8 до 20 символов гораздо проще
        • Гайдлайны не заставляют вас срочно менять названия переменных на имена из 9-15 или 10-16 символов. Но если вы найдете в своем коде более короткие названия, убедитесь, что они достаточно информативны.

        Слишком длинные: numberOfPeopleOnTheUsOlympicTeam; numberOfSeatsInTheStadium; maximumNumberOfPointsInModernOlympics
        Слишком короткие: n; np; ntmn; ns; nslsd; m; mp; max; points
        В самый раз: numTeamMembers, teamMembersCount

        Читать дальше →
      • Qt: Пишем обобщенную модель для QML ListView

        Кому-то материал этой статьи покажется слишком простым, кому-то бесполезным, но я уверен, что новичкам в Qt и QML, которые впервые сталкиваются с необходимостью создания моделей для ListView, это будет полезно как минимум как альтернативное*, быстрое и довольно эффективное решение с точки зрения "цена/качество".


        *Как минимум, в свое время ничего подобного мне нагуглить не получилось. Если знаете и можете дополнить — welcome.


        О чем шум?


        С приходом в Qt языка QML создавать пользовательские интерфейсы стало проще и быстрее… пока не требуется тесное взаимодействие с C++ кодом. Создание экспортируемых C++ классов достаточно хорошо описано в документации и до тех пор пока вы работаете с простыми структурами все действительно достаточно тривиально (ну почти). Основная неприятность появляется, когда нужно "показать" в QML элементы какого-то контейнера, а по-простому — коллекции, и в особенности, когда эти элементы имеют сложную структуру вложенных объектов, а то и другие коллекции.


        Интересно?

        Читать дальше →
      • Ммм, длинные выходные!
        Самое время просмотреть заказы на Фрилансим.
        Мне повезёт!
        Реклама
      Самое читаемое