• FFmpeg практика аппаратного декодирования DXVA2

      Привет! Эта статья продолжение моей статьи FFmpeg начало работы Visual Studio. Здесь мы приступим к аппаратному декодированию RTSP-потока FULL HD. Заранее скажу, что с данной задачей легко справится даже Intel ATOM Z8350.

      Задача: аппаратное декодирование и запись до 4-х кадров в оперативную память для последующей параллельной обработки (четырьмя ядрами процессора) с IP-камеры RTSP h.264. Обработанные кадры отображаю с помощью функций WinAPI. Как итог мы получим быстродействующую систему для компьютерной обработки RTSP-потока в параллельном режиме. Далее можно подключать алгоритмы Компьютерного зрения для обработки кадров Real Time.

      image

      Вступление


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

      DirectX Video Acceleration (DXVA) — это API для использования аппаратного ускорения для ускорения обработки видео силами графических процессоров (GPU). DXVA 2.0 позволяет перенаправлять на GPU большее количество операций, включая захват видео и операции обработки видео.
      Читать дальше →
    • Как работает рендеринг 3D-игр: обработка вершин

      • Translation
      image

      В этом посте мы рассмотрим этап работы с вершинами. То есть нам придётся снова достать учебники по математике и вспомнить линейную алгебру, матрицы и тригонометрию. Ура!

      Мы выясним, как преобразуются 3D-модели и учитываются источники освещения. Также мы подробно объясним разницу между вершинными и геометрическими шейдерами, и вы узнаете, на каком этапе находится место для тесселяции. Чтобы облегчить понимание, мы используем схемы и примеры кода, демонстрирующие, как в игре выполняются вычисления и обрабатываются значения.

      На скриншоте в начале поста показана игра GTA V в каркасном (wireframe) режиме отображения. Сравните её с намного менее сложным каркасным отображением Half-Life 2. Изображения созданы thalixte при помощи ReShade.

      Читать дальше →
      • +31
      • 11.6k
      • 7
    • Как работает оптимизирующий компилятор

      • Translation

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

      В этой статье мы рассмотрим некоторые из основных методик приведения (inference techniques) в оптимизирующих компиляторах: как спроектировать программу, с которой компилятору будет легко работать; какие приведения можно сделать в вашей программе и как использовать их для её уменьшения и ускорения.
      Читать дальше →
    • Разработчиком на удаленке – c нуля до героя

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



      Джуны на удаленке не нужны


      Как любят говорить ребята с Тостера, в частности кураторы большинства разделов, джуны на удаленке никому не нужны, как и вероятность что-то заработать джуном на фрилансе. И это действительно так. Но также всем известно, что всегда найдется человек, который сделает то, что считалось практически невозможным.
      Читать дальше →
    • React + Mobx: в чём смысл?

        Сегодня я хочу рассказать вам о том, как на нашем проекте состоялся переход на Mobx, какие преимущества это даёт. Также будет показан типовой проект и даны пояснения по основным вопросам. Но сначала вводные.

        image
        Читать дальше →
      • Нейрофизиолог рассуждает о проекте Neuralink и рассказывает о работе мозга «на пальцах»


          Слева — нейрофизиолог Елена Белова, справа — робот-хирург Neuralink

          Летом 2019 прошла презентация стартапа Neuralink, цель которого — создать интерфейс типа «мозг—машина». Илон Маск рассказал, что компании удалось наработать за несколько лет с момента основания. Представили робота-хирурга, гибкие нити для подключения чипов к мозгу и эффективные алгоритмы обработки сигналов. Мы встретились с нейрофизиологом, чтобы поговорить о том, что же такое Neuralink: бизнес и маркетинг или реальный научный прорыв?

          На вопросы терпеливо отвечала Елена Белова — биохимик и биоинформатик по образованию, нейрофизиолог и иллюстратор по роду занятий, старший научный сотрудник Лаборатории клеточной нейрофизиологии человека Института химической физики.

          Глупые вопросы задавал Иван Звягин, который прочитал несколько научно-популярных книг о работе мозга и эволюции.
          Читать дальше →
        • Сбалансированная разработка в очень больших командах. Доклад Яндекса

            Когда продукт большой, разработчики скатываются в крайности:
            — слишком красивый код — медленные релизы,
            — слишком много внимания процессам — мало внимания разработке,
            — быстрая отправка новых фич в продакшен — слишком плохой код,
            — слишком много внимания автотестам — сложно вносить изменения,
            — забота о скорости интерфейса — уход от новых фич,
            — улучшение UI — мало внимания к архитектуре кода.

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



            — Хочется поговорить про то, как жить в больших командах. Большая команда — это когда людей даже больше, чем в этом зале.
            Читать дальше →
          • Примеры использования некоторых новых возможностей JavaScript

            • Translation
            Автор материала, перевод которого мы сегодня публикуем, говорит, что новые возможности JavaScript, которые попали в стандарт ES2019, уже официально доступны в браузерах Chrome, Firefox и Safari, а также на платформе Node.js. Если нужно поддерживать устаревшие браузеры, то воспользоваться новшествами можно, транспилируя JS-код с помощью Babel. Здесь мы рассмотрим примеры использования некоторых новых возможностей JS.


            Читать дальше →
          • Sampler. Консольная утилита для визуализации результата любых shell команд

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


              Sampler


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


              Код доступен на гитхабе. Инструкции по установке — для Linux, macOS и (экспериментально) Windows.

              Читать дальше →
            • Асинхронное программирование (полный курс)

              • Tutorial

              Методы асинхронного программирования


              Асинхронное программирование за последнее время стало не менее развитым направлением, чем классическое параллельное программирование, а в мире JavaSript, как в браузерах, так и в Node.js, понимание его приемов заняло одно из центральных мест в формировании мировоззрения разработчиков. Предлагаю вашему вниманию целостный и наиболее полный курс с объяснением всех широко распространенных методов асинхронного программирования, адаптеров между ними и вспомогательных проемов. Сейчас он состоит из 23 лекций, 3 докладов и 28 репозиториев с множеством примеров кода на github. Всего около 17 часов видео: ссылка на плейлист.

              Читать дальше →
            • RESTinio — это асинхронный HTTP-сервер. Простой пример из практики: отдача большого объема данных в ответ


                Недавно мне довелось поработать над приложением, которое должно было контролировать скорость своих исходящих подключений. Например, подключаясь к одному URL приложение должно было ограничить себя, скажем, 200KiB/sec. А подключаясь к другому URL — всего 30KiB/sec.


                Самым интересным моментом здесь оказалось тестирование этих самых ограничений. Мне потребовался HTTP-сервер, который бы отдавал трафик с какой-то заданной скоростью, например, 512KiB/sec. Тогда бы я мог видеть, действительно ли приложение выдерживает скорость 200KiB/sec или же оно срывается на более высокие скорости.


                Но где взять такой HTTP-сервер?


                Поскольку я имею некоторое отношение к встраиваемому в С++ приложения HTTP-серверу RESTinio, то не придумал ничего лучше, чем быстренько набросать на коленке простой тестовый HTTP-сервер, который способен отдавать клиенту длинный поток исходящих данных.


                О том, насколько это было просто и хотелось бы рассказать в статье. Заодно узнать в комментариях, действительно ли это просто или же я сам себя обманываю. В принципе, данную статью можно рассматривать как продолжение предыдущей статьи про RESTinio под названием "RESTinio — это асинхронный HTTP-сервер. Асинхронный". Посему, если кому-то интересно прочитать о реальном, пусть и не очень серьезном применении RESTinio, то милости прошу под кат.

                Читать дальше →
              • Реляционно-сетевая модель данных

                Реляционная модель потеряла свою исключительность


                Требования функциональности и структурированности баз данных (БД), наиболее полно реализованные в реляционных системах, сейчас находятся под давлением новых требований.


                Первая проблема – низкая эффективность для больших данных (big data). Источниками больших данных являются социальные сети, системы видеонаблюдения, пространственные сенсоры, биллинг и т.п. Реляционная БД (РБД) хорошо работает, если схема данных точно определена заранее, до запуска прикладного приложения. Но большие данные по своей сути трудно поддаются структурированию на этапе проектирования БД. Только по мере сбора информации, постепенно, ее структура проявляется более очевидно.


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

                Читать дальше →
              • Фрактал имён элементов

                  Здравствуйте, меня зовут… Человек. Число рук равно 2. Число ног равно 2. Группа крови равна 1. Резус равен истине.


                  Вам может показаться, что лишь по этой информации, без имени, фамилии и даже никнейма меня сложно отличить от множества других авторов статей. И будете правы. Однако, во фронтенде я часто вижу, как имя элемента заменяется его описанием. И это никого не волнует.


                  Три мужика и девочка


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

                  Читать дальше →
                • «Топологическая» сортировка графа с циклами

                  Полное название статьи должно было звучать как «Устойчивая „топологическая“ сортировка графа с циклами за O(|V| + |e| log |e|) по времени и O(|V|) по памяти без рекурсии», но мне сказали, что это перебор.
                  Читать дальше →
                • Простой JSON-RPC-подобный API на PHP

                  Вступление


                  Что такое JSON-RPC API? Это просто один из типов API, но ещё и чёткий стандарт, чего в этой статье может и не быть(да, будет самопис).

                  После того как я возился с RESTful API какое-то время и сильно на него разозлился, за то, насколько он прост снаружи и может быть сложен внутри, я полез в google на поиски замены.

                  И я наткнулся на статью о JSON-RPC API, и меня сильно заинтересовала его концепция, настолько, что я решил реализовать свой максимально простой велосипед.
                  Читать дальше →
                • Разработка электроники. О микроконтроллерах на пальцах



                    Задумывая технологический стартап, вы совсем не обязаны быть асом в электронике, гораздо больше шансов на хорошую идею имеет узкий специалист со знанием основ маркетинга, но, даже заказывая кому-то разработку, ориентироваться в возможностях современной элементной базы и представлять цену решения необходимо обязательно. Иначе можно потребовать невозможного, либо получить устройство с завышенной себестоимостью на устаревшей элементной базе.
                    Под катом попытка кратко и просто рассказать о возможностях современных микроконтроллеров людям от них далёким. Для тех, у кого есть идея нового электронного устройства, но отсутствует представление о том, что такое микроконтроллер. Те, кто хочет сделать первый шаг от занимательных экспериментов с платформой ардуино к проектированию собственных устройств, также могут найти в ней простые, но полезные советы. Я старался, не останавливаясь на технических подробностях, для этого и книги не достаточно изложить суть и дать несколько простейших, но полезных советов по схемотехнике, чтобы предостеречь от элементарных ошибок начинающих.
                    Микроконтроллеры - это просто!
                  • Асинхронность в программировании

                      В области разработки высоконагруженных многопоточных или распределенных приложений часто возникают дискуссии об асинхронном программировании. Сегодня мы подробно погрузимся в асинхронность и изучим, что это такое, когда она возникает, как влияет на код и язык программирования, которым мы пользуемся. Разберемся, зачем нужны Futures и Promises и затронем корутины и операционные системы. Это сделает компромиссы, возникающие во время разработки ПО, более явными.


                      В основе материала — расшифровка доклада Ивана Пузыревского, преподавателя школы анализа данных Яндекса.


                      Читать дальше →
                    • Как перестать беспокоиться и начать писать тесты на основе свойств

                        В последнее время все чаще встречаются упоминания о некоем волшебном средстве — тестировании на основе свойств (property based testing, если надо погуглить англоязычную литературу). Большинство статей на эту тему рассказывают о том, какой это классный подход, затем на элементарном примере показывают как написать такой тест используя какой-то конкретный фреймворк, в лучшем случае подсказывают несколько часто встречающихся свойств, и… на этом все заканчивается. Дальше изумленный и воодушевленный читатель пытается применить все это на практике, и упирается в то, что свойства как-то не придумываются. И к большому сожалению часто на этом сдается. В этой статье я постараюсь расставить приоритеты немного по другому. Начну все-таки с более-менее конкретного примера, чтобы объяснить что это за зверь такой. Но пример, надеюсь, не совсем типичный для подобного рода статей. Затем попробую разобрать некоторые проблемы, связанные с этим подходом, и как их можно решить. А вот дальше — свойства, свойства и только свойства, с примерами куда их можно приткнуть. Интересно?
                        Читать дальше →