• Ускоряем метод Виолы-Джонса (Viola-Jones)

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

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

      image

      Ну и какая статья об детектировании лиц, может обойтись без фотографии Лены?
      Читать дальше →
    • Браузер != Браузерный движок


        Всем привет!


        В данной статье я хочу поделиться мыслями на счёт создания собственного браузерного движка. Мы рассмотрим текущие браузеры и браузерные движки. Вспомним про Modest и узнаем его нелёгкую судьбу.


        Это будет цикл статей в которых мы создадим свой собственный минималистичный браузерный движок. Каждая статья будет подкреплена реальным кодом и примерами.
        По прошествии десяти статей у нас с вами будет минимальная рабочая версия браузерного движка, сильно минимальная. После этого, если запал не уйдёт и будет интерес сообщества, продолжим, и в итоге доберёмся до JS.


        И конечно, первым делом необходимо понять, что такое браузер и браузерный движок.

        Приступим!
      • Avito Quiz: Golang

          Привет! Сегодня продолжаем серию мини-квизов в нашем блоге. Этот выпуск (предыдущий здесь) будет посвящен языку Go — будем считать, что это разминка в преддверие GopherCon Russia 2018 (кстати, у нас на этой конференции будет стенд, и мы планируем несколько интересных активностей).


          Под катом — семь вопросов и пара пасхалок. Ответы на вопросы выложим апдейтом к посту в понедельник, 26.02. Если будете решать — кладите ответы под спойлер, чтобы не портить другим фана.


          Enjoy!


          Читать дальше →
        • Машина времени на Java

          • Перевод

          В мире существует множество клёвых маленьких библиотек, которые как бы и не знаменитые, но очень полезные. Идея в том, чтобы потихоньку знакомить Хабр с такими вещами под тэгом #javalifehacker. Сегодня речь пойдёт о time-test, в котором всего 16 коммитов, но их хватает. Автор библиотеки — Никита Коваль, и это перевод его статьи, изначально написанной для блога Devexperts.


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




          Вот простейший метод, считающий количество дней до конца света:


          fun daysBeforeDoom() {
              return doomTime - System.currentTimeMillis()) / millisInDay
          }
          Читать дальше →
          • +52
          • 8,5k
          • 7
        • Портирование собственной ОС на Xen

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

            Привет, Хабрахабр. Как известно, технический английский — язык мира информационных технологий. Основная документация, все стандарты программирования представлены на английском языке. В числе прочих, главная кодовая страница ASCII и переносимый набор символов включают 26 латинский символов, с которыми не возникает проблем при использовании разных кодировок. Исторически так сложилось благодаря международному уровню английского языка и лидерству США в области информационных технологий. Это обстоятельство позволяет добиться максимальной совместимости техники в эпоху Интернета и глобализации. В данной статье я не ставлю цель менять стандарты, а просто хочу показать альтернативный подход к IT на русском языке.

            Изначально мне просто ради спортивного интереса захотелось построить похожую на ASCII 7-битную таблицу символов, включающую весь русский алфавит, 10 цифр и все знаки пунктуации из переносимого набора символов стандарта POSIX. В процессе все больше всё больше выяснялось, что такая таблица гораздо удобнее ASCII из-за чёткого определения её подразделов. Я знаю, что есть Юникод, но здесь рассматривается именно возможность однобайтового кодирования. В процессе создания находились дополнительные преимущества, таблица много раз полностью переписывалась, появились управляющие символы, далее представлен один из получившихся конечных результатов.



            В чём же преимущества? Разберём по частям.
            Читать дальше →
          • Обходим ASLR для Linux по-новому



              Ядро Linux широко распространено во всем мире как на серверах, так и на пользовательских машинах, на мобильных платформах (ОС Android) и на различных «умных» устройствах. За время существования в ядре Linux появилось множество различных механизмов защиты от эксплуатации уязвимостей, которые могут существовать как в самом ядре, так и в приложениях пользователей. Такими механизмами является, в частности, ASLR и stack canary, противодействующие эксплуатации уязвимостей в приложениях.

              Читать дальше →
              • +50
              • 6,1k
              • 6
            • Основные принципы 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

              Читать дальше →
            • Как построить сообщество. Перевод книги «Социальная архитектура»: Глава 4. Протокол для коллаборации C4

              • Перевод
              «Это эссенция тридцатилетнего опыты разработки программного обеспечения.»

              image

              Процесс ZeroMQ: C4


              Когда мы говорим о ZeroMQ, мы иногда имеем в виду libzmq — основную библиотеку. В начале 2012 года мы синтезировали процесс libzmq в формальный и многоразовый протокол для совместной работы, который мы назвали “Контрактом на разработку коллективного кода” или C4. Вы можете рассматривать это как слой над лицензией (например, MPLv2). Это наши правила, и я объясню причины возникновения каждого из них.

              C4 — это эволюция модели GitHub Fork + Pull. Вы можете подумать, что я поклонник git и GitHub. И это точно: эти два инструмента оказали положительное влияние на нашу работу в последние годы, особенно когда речь идет о создании сообщества.

              Язык

              Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «ДОЛЖЕН», «НЕ ДОЛЖЕН», «СЛЕДУЕТ», «НЕ СЛЕДУЕТ», «РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и «ДОПОЛНИТЕЛЬНО» в этом документе следует интерпретировать так, как описано в RFC 2119.

              Начиная с RFC 2119, в тексте про C4 четко указано, что он намерен выступать в качестве протокола, а не как случайно написанный набор рекомендаций. Протокол — это договор между сторонами, который определяет права и обязанности каждой стороны. Они могут быть знакомы в сети, или могут быть незнакомцами, работающими в одном проекте.
              Читать дальше →
              • +10
              • 1,4k
              • 4