• Умная кормушка: Machine Learning, Raspberry Pi, Telegram, немножко магии обучения + инструкция по сборке

    • Tutorial
    Всё началось с того, что жена захотела повесить кормушку для птиц. Идея мне понравилась, но сразу захотелось оптимизировать. Световой день зимой короткий — сидеть днём и смотреть на кормушку времени нет. Значит нужно больше Computer Vision!



    Идея была простой: прилетает птичка — вжуууух — она оказывается на телефоне. Осталось придумать как это сделать и реализовать.
    В статье:
    • Запуск Caffe на Raspberry Pi B+ (давно хотел это сделать)
    • Построение системы сбора данных
    • Выбор нейронной сети, оптимизация архитектуры, обучение
    • Оборачивание, выбор и приделывание интерфейса

    Все исходники открыты + описан полный порядок развёртывания получившейся конструкции.
    Читать дальше →
  • Сетевой жесткий диск с помощью SSHFS и Raspberry Pi



    Всем привет!

    Хочу поделиться с вами моим опытом создания сетевого жесткого диска на Raspberry Pi. Моя статья отлично подойдет тем, кто использует линукс в качестве основной ОС, т.к. тут я активно использую SSHFS.

    Всех заинтересовавшихся прошу под кат.
    Читать дальше →
    • –5
    • 23.1k
    • 9
  • Linux в кармане — на службе у фотографа

      Так получилось, что фотография, это мой основной профессиональный вид деятельности, а программирование — хобби, которое иногда позволяет размять мозг. Кроме непосредственно разминки для мозга, программирование помогает и в работе. Например, писал полезные штуки, такие как это или это, или это.

      Недавно поставил себе задачу, как бы еще порадовать своих клиентов. Вспомнил многочисленные просьбы клиентов на свадебную съемку: «Как хорошо было бы, если бы на банкете вы смогли показать коротенькое слайдшоу из фотографий, которые отсняли за день». На эти просьбы приходилось отказывать, по нескольким причинам: лень таскать с собой ноутбук для сборки слайдшоу, нет времени на отбор пары десятков снимков из сотен, из raw опять же нужно конвертировать, и самое главное — на это все нужно время, которого нет.

      Это рассказ, о том, как мне удалось сделать для себя инструмент, который с минимальным моим участием и минимальным дополнительным весом в рюкзаке, помогает сделать красивые слайдшоу. И конечно же рассказ о python, ffmpeg и linux на android.
      Читать дальше →
    • Работаем с модулями ядра в Linux


        Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т. к. пользователь с ним не работает напрямую: пользователь работает с программами. Но, тем не менее, без ядра невозможна работа ни одной программы, т.е. они без ядра бесполезны. Этот механизм чем-то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически незаметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен.
        В Linux ядро монолитное, т.е. все его драйвера и подсистемы работают в своем адресном пространстве, отделенном от пользовательского. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями. Об этом и пойдет речь в этой статье.
        Читать дальше →
      • Основы Linux от основателя Gentoo. Часть 2 (5/5): Модули ядра

        • Translation
        В заключительном отрывке второй части описаны основы управление модулями ядра Linux. Этот минимум неплохо знать всякому пользователю, однако, не стоит надеяться обнаружить в этом руководстве для начинающих информацию по сборке и конфигурированию модулей ядра.



        Навигация по основам Linux от основателя Gentoo:

        Часть I
        1. BASH: основы навигации (вступление)
        2. Управление файлами и директориями
        3. Ссылки, а также удаление файлов и директорий
        4. Glob-подстановки (итоги и ссылки)
        Часть II
        1. Регулярные выражения (вступление)
        2. Назначения папок, поиск файлов
        3. Управление процессами
        4. Обработка текста и перенаправления
        5. Модули ядра (итоги и ссылки)
        Часть III: 1, 2, 3, 4


        Читать дальше →
      • Идентификация загружаемых модулей ядра Linux [ч.1]: исходные тексты

          В этом посте я расскажу о своих поисках признаков того, как можно определить, что из некоторых файлов исходных текстов собирается загружаемый модуль ядра Linux (LKM), а не обычный исполняемый файл.
          Допустим, что информации о назначении исходников нет или её пытаются преднамеренно скрыть.
          Upd: Объём кода > 4 Гб и надо оперативно выделить только те исходники, которые реализуют модули ядра.





          #01 __KERNEL__ 


          При сборке исходных текстов определён символ препроцессора __KERNEL__.

          Читать дальше →
          • +25
          • 11.9k
          • 5
        • Полное практическое руководство по Docker: с нуля до кластера на AWS

          • Translation



          Содержание



          Вопросы и ответы


          Что такое Докер?


          Определение Докера в Википедии звучит так:


          программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.



          Ого! Как много информации.

          Читать дальше →
        • Паттерн гетерогенная иерархия моделей QML

          Введение


          Очень часто необходимо структурировать модели следующим образом — на одном уровне модели с одной структурой, а на другом уровне структура модели изменяется. Для примера возьмем задачу, в которой требуется отобразить список устройств, у каждого устройства присутствуют группы настроек, а у каждой группы настроек есть список настроек различных типов. Для простоты будем полагать что у устройства есть только название и список групп. У группы есть только название и список настроек. У настройки есть только название и тип — чекбокс, текстовое поле или слайдер.



          Данный паттерн был систематизирован на основе статьи. Далее идет описание паттерна, аналогично GoF.

          Назначение


          Паттерн, структурирующий использование сложных моделей в C++ с использованием QML. Облегчает использование вложенных списков моделей для образования иерархической структуры. При этом, для использования в QML, сложность не возрастает.

          Применимость


          Используйте паттерн, когда:

          • нужно представить иерархию моделей, в которой на разных уровнях разные типы моделей
          • модели заполняются динамически

          Структура



          Читать дальше →
        • Model-View в QML. Часть вторая: Кастомные представления

            Не всегда готовые представления идеально подходят. Рассмотрим компоненты, которые позволяют создать полностью кастомизированное представление и добиться большой гибкости в построении интерфейса. И еще от меня небольшой бонус для терпеливых читателей :)

            Model-View в QML:
            1. Model-View в QML. Часть нулевая, вводная
            2. Model-View в QML. Часть первая: Представления на основе готовых компонентов
            3. Model-View в QML. Часть вторая: Кастомные представления
            4. Model-View в QML. Часть третья: Модели в QML и JavaScript
            5. Model-View в QML. Часть четвертая: C++-модели

            Читать дальше →
            • +15
            • 25.2k
            • 4
          • Как я перестал бояться и переизобрел 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…
              Читать дальше →
            • Интеграция C++ с QML

              • Translation

              Вступление


              Язык QML для Qt Quick позволяет c легкостью делать многие вещи, особенно что касается анимированных пользовательских интерфейсов. Однако, не всё возможно сделать или не всё подходит под реализацию в QML, в частности:

              • получение доступа к функциональности извне окружения QML/Javascript
              • реализация критических по производительности функций, где требуется нативный код для повышения эффективности
              • большой или сложный не декларативный код, который было бы утомительно реализовывать в JavaScript

              Как Вы увидите впоследствии, Qt легко отображает C++ код для QML. В этой статье мы создадим маленькое, но функциональное приложение, делающее это. Пример написан для Qt 5 и использует компоненты Qt Quick, поэтому для запуска примера Вам необходим как минимум Qt 5.1.0.
              Подробней
              • +23
              • 46.9k
              • 3
            • Использование Loader в QML

              Добрый день! В этой статье я расскажу про такой компонент из QML как Loader.

              Он позволяет создать контейнер, в который затем можно вложить необходимый qml-элемент, использовать разные элементы в зависимости от состояния программы, а также сделать редко используемые части загружаемыми по требованию и сэкономить ресурсы. Loader является контейнером для QML-компонента и сам по себе не отображается.

              Я рассматриваю компонент из QtQuick 2.0 которая входит в Qt пятой версии. В более ранней версии этот компонент также есть, но функционал немного меньше.

              Читать дальше →
            • Применение шейдеров OpenGL в QML

                Этот пост участвует в конкурсе „Умные телефоны за умные посты“

                Данный пост посвящен применению шейдеров OpenGL вместе с элементами декларативного языка QML. Тема, на мой взгляд, является актуальной, так как в будущей версии QML 2.0 планируется широко использовать OpenGL, как backend для отрисовки графических элементов интерфейса. Написание шейдеров — тема непростая и целью данного поста является то, чтобы в первую очередь человек, прочитав её, мог сразу же что-то попробовать сделать интересное для себя и поэкспериментировать, получив, например, вот такие примеры:



                В конце я приведу полезные ссылки, где Вы сможете посмотреть материал для дальнейшего, более глубокого изучения данной темы, если она конечно Вас заинтересует, и реализовать еще более интересные шейдеры, применив их вместе с элементами языка QML. Работу с шейдерами можно рассмотреть на примере различных элементов QML: ShaderEffectItem, множества классов Qt3D, так же использующих OpenGL и т.д. В данном посте я продемонстрирую несколько примеров, используя элемент ShaderEffectItem вместе с ShaderEffectSource.
                Читать дальше →
              • Архитектура и алгоритмы индексации аудиозаписей ВКонтакте



                  Расскажем о том, как устроен поиск похожих треков среди всех аудиозаписей ВКонтакте.

                  Зачем всё это надо?


                  У нас действительно много музыки. Много — это больше 400 миллионов треков, которые весят примерно 4 ПБ. Если загрузить всю музыку из ВКонтакте на 64 ГБ айфоны, и положить их друг на друга, получится башня выше Эйфелевой. Каждый день в эту стопку нужно добавлять еще 25 айфонов — или 150 тысяч новых аудиозаписей объёмом 1.5 ТБ.

                  Конечно, далеко не все эти файлы уникальны. У каждого аудио есть данные об исполнителе и названии (опционально — текст и жанр), которые пользователь заполняет при загрузке песни на сайт. Премодерации нет. В результате мы получаем одинаковые песни под разными названиями, ремиксы, концертные и студийные записи одних и тех же композиций, и, конечно, совсем неверно названные треки.

                  Если научиться достаточно точно находить одинаковые (или очень похожие) аудиозаписи, можно применять это с пользой, например:

                  • не дублировать в поиске один трек под разными названиями;
                  • предлагать прослушать любимую композицию в более высоком качестве;
                  • добавлять обложки и текст ко всем вариантам песни;
                  • усовершенствовать механизм рекомендаций;
                  • улучшить работу с жалобами владельцев контента.

                  Читать дальше →
                • Внутренности движка QML. Часть 1: Загрузка файлов

                  • Translation
                  • Tutorial
                  В этой (2 часть в переводе) серии статей мы заглянем под капот движка QML и раскроем некоторые из особенностей его внутренней работы.Статьи основаны на Qt5 версия QtQuick, QtQuick 2.0.

                  Большинство людей знают, что каждый элемент в QML файле опирается на конкретный C++ класс. Когда QML файл загружен, движок QML как-то создает один C++ объект для всех элементов в файле. В этом посте мы рассмотрим, как движок QML переходит от чтения текстового файла, включающего полное дерево C++ объектов. В документации Qt присутствует раздел с обширным описанием взаимодействия QML и C++, прочтение которого стоит потраченного времени. В данной серии статей, я предполагаю что пользователь прочёл и понимает описанное в документации.
                  Читать дальше →
                  • +25
                  • 7.5k
                  • 7
                • Qt + QML на простом примере

                    Qt является удобным и гибким средством для создания кросс-платформенного программного обеспечения. Входящий в его состав QML предоставляет полную свободу действий при создании пользовательского интерфейса.
                    Об удобстве использования связки Qt и QML уже говорилось не раз, поэтому не буду дальше распространяться о плюсах, минусах, а приведу, шаг за шагом, пример простого Qt приложения.
                    Читать дальше →
                  • Топология на пальцах

                    Топология — довольно красивое, звучное слово, очень популярное в некоторых нематематических кругах, заинтересовало меня еще в 9 классе. Точного представления конечно же я не имел, тем не менее, подозревал, что все завязано на геометрии.

                    Читать дальше →
                  • Работа с Big Data при помощи GPU: ускорение работы баз данных в десятки раз



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

                      Благодаря ускорению на GPU работают многие сервисы, обеспечивающие работу нейронных сетей или обрабатывающие данные, поступающие с умных автомобилей. Плюсом такого метода является то, что ресурсоемкая часть приложения, которая требует большой вычислительной мощности, обрабатывается на GPU, а все остальное выполняется на CPU. В последние несколько лет стали появляться комбинированные решения, на основе которых создаются высокоскоростные базы данных. Такие решения стоит использовать, например, для визуализации крупных массивов данных.
                      Читать дальше →
                      • +11
                      • 12.4k
                      • 3
                    • Не пора ли реляционным базам данных на свалку истории?

                        Здравствуйте, меня зовут Дмитрий Карловский и я… антиконформист, то есть человек, который не держится за свои привычки и всегда готов их поменять, если в том есть необходимость. Например, как и многие разработчики, я начинал изучение баз данных с реляционных. Хотя реляционная алгебра и довольно красива в своей простоте, я постоянно ловил себя на мысли, что пытаюсь впихнуть круглую фигуру в квадратное отверстие и получалось как-то не герметично.



                        Нет, я не буду рассказывать вам про MongoDB или ещё какую неполноценную «убийцу SQL». Статей на тему «SQL vs NoSQL» сравнивающих на самом деле реляционные субд с документными и так полно:


                        Но у большинства из них есть фатальный недостаток — авторы просто не в курсе, что моделей данных в СУБД есть куда больше, чем два упомянутых: от узкоспециализированных «словарей», то универсальных «графов». А популярные «реляционные» и «документные» находятся лишь где-то по середине между универсальностью и специализированностью.

                        Давайте сравним типичных представителей упомянутых типов СУБД (от большего к меньшему).

                        • Популярность: Oracle, MongoDB, Redis, HBase, OrientDB.
                        • Функциональность: OrientDB, Oracle, MongoDB, HBase, Redis.
                        • Скорость: очень сильно зависит от задачи, данных и реализации приложения. Я пересмотрел кучу бенчмарков, везде всё по разному.
                        Читать дальше →