Pull to refresh
23
0

User

Send message

Безопасность (шифрование) трафика

Reading time5 min
Views102K
SSLПараллельно с развитием технологий защиты интернет-трафика от несанкционированного доступа развиваются и технологии перехвата защищенного трафика. Перехватить и изучить незашифрованный трафик пользователя уже давно не составляет труда даже для рядового юзера. Практически каждому известно слово «сниффер». Теоретически, защищенные SSL/TSL-соединения перехватить обычными средствами невозможно. Но так ли это?
Читать дальше →

Безопасное шифрованное хранилище данных и особенности работы с ним

Reading time5 min
Views29K
В какой-то момент мы столкнулись с необходимостью организовать шифрованное хранилище для удаленного размещения файлов. После недолгих поисков нашел легкое облачное решение, которое в итоге полностью устроило. Далее я вкратце опишу это решение и некоторые особенности работы с ним, возможно, кому-нибудь пригодится. На мой взгляд, вариант надежный и вместе с тем достаточно удобный.
Читать дальше →

Захват видео с сетевых камер, часть 2

Reading time19 min
Views262K

В первой своей статье «измерение расстояния до объекта и его скорости» я рассмотрел захват изображений с веб-камер через Video4Linux2 и через DirectX. В следующей статье «захват видео с сетевых камер, часть 1» я рассмотрел как работать с сетевыми Motion-JPEG камерами. Сейчас я поведаю Вам о захвате изображений с сетевых RTSP камер, в частности поток Motion-JPEG по RTSP.

Задача эта более сложная нежели Motion-JPEG по HTTP, так как необходимо больше действий, больше подключений, но взамен мы получаем большую гибкость, скорость, функциональность и даже некую универсальность. Честно говоря, RTSP для простых задач избыточен, но я не сомневаюсь, что найдутся ситуации, где он будет необходим.

Приступим

Новая жизнь старого синтезатора. Часть 1

Reading time6 min
Views83K
Внешний вид синтезатора
Несколько лет тому назад умер смертью храбрых мой старый синтезатор Yamaha PSR-GX76. Случилось это из-за того, что я по ошибке подключил к нему блок питания 24 В вместо положенных 12 В. В таком режиме синтезатор героически проработал несколько минут, после чего случился «пук», сопровождаемый аудиовизуальными спецэффектами и специфическим запахом и синтезатор больше не включался. С тех пор он пылился в коробке и ждал своего часа, который для него, наконец, настал. В нескольких статьях я расскажу как проходило движение от идеи вдохнуть в него новую жизнь до реализации и демонстрации полученных результатов.
Перейти ко вскрытию пациента

Reedy – Скорочтение, которое действительно можно использовать

Level of difficultyEasy
Reading time9 min
Views245K
Reedy – продвинутая реализация технологии скоростного чтения

В последнее время наблюдается рост интереса к скорочтению на основе технологии RSVP. Однако большинство приложений и расширений на эту тему, при более близком знакомстве, увы, оказываются не очень удобны для ежедневного использования. А ведь в потенциале они могу помочь значительно экономить время и быстрее получать информацию. Мой друг OlegCherr решил доработать технологию, создав реализацию пригодную для постоянного использования, а я ему в этом помогаю. После двух месяцев постоянной практики чтения, тестирования, исследований и улучшений решил написать статью с разбором того, что получилось в результате, потому что результат, смею считать, будет интересен и другим. На текущий момент всё выполнено в виде расширения к браузеру Chrome и названо Reedy. Приложение под Android на подходе.
Подробности

Как мы запрос в 100 раз ускоряли, или не все хеш-функции одинаково плохи

Reading time4 min
Views37K
Мы разрабатываем базу данных. Однажны к нам обратилась компания, которая столкнулась со следующей задачей:

Есть некоторое множество объектов, и некоторое множество тегов. Каждый объект может содержать несколько тегов. Какие-то теги очень редкие, а какие-то встречаются часто. Одному объекту один тег может быть сопоставлен несколько раз.
Новые объекты, теги и связи между ними непрерывно добавляются.
Задача — очень быстро отвечать на вопросы вида: «сколько есть объектов, у которых есть тег А или B, но нету тега С» и похожие. На такие запросы хотелось бы отвечать за десятые доли секунды, при этом не останавливая загрузку данных.

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

SELECT 
    COUNT(*) 
FROM (
    SELECT 
        object_id, 
        (MAX(tag == A) OR MAX(tag == B)) AND MIN(tag != C) AS good
    FROM tags
    WHERE tag IN (A, B, C)
    GROUP BY object_id
) WHERE good == 1;


Чтобы такой запрос выполнялся быстро, мы разбили данные между серверами кластера по object_id, а внутри каждого сервера отсортировали их по тегам. Таким образом сервер, выполняющий запрос, может отправить запрос без изменений на все сервера с данными, а затем просто сложить их результаты. На каждом сервере с данными для выполнения запроса достаточно найти строки для тегов A, B и C (а так как данные по тегу отсортированы, это быстрая операция), после чего выполнить запрос за один проход по этим строкам. Худший тег имеет несколько десятков миллионов объектов, несколько десятков миллионов строк обработать за десятые доли секунды видится возможным.
Стоит отметить, что подзапрос содержит GROUP BY object_id. GROUP BY в данной ситуации можно выполнить несколькими способами, например, если данные после тега отсортированы по object_id, то можно выполнить что-то похожее на merge sort. В данной ситуации, однако, мы данные по object_id не отсортировали, и оптимизатор разумно решил, что для выполнения GROUP BY надо построить хеш-таблицу.

Мы загрузили все данные в кластер, и запустили запрос. Запрос занял 25 секунд.
Читать дальше →

Перевод учебника по алгоритмам

Reading time1 min
Views167K


Рад сообщить, что вышел перевод отличнейшего учебника Дасгупты, Пападимитриу, Вазирани «Алгоритмы», над которым я работал последние несколько лет. В книге многие алгоритмы объяснены гораздо короче и проще, чем в других учебниках: с одной стороны, без излишнего формализа, с другой — без потери математической строгости. Откройте книгу на каком-нибудь известном вам алгоритме и убедитесь в этом. =)

В общем, угощайтесь: печатный вариант перевода, электронный вариант перевода (PDF), печатный вариант оригинала, электронный вариант оригинала (PDF).
Читать дальше →

Создание робота балансера на arduino

Reading time7 min
Views80K
Мне давно не давало покоя желание рассчитать какой-нибудь достаточно сложный механизм и воплотить его жизнь.
Выбор пал на задачу об обратном маятнике. Итог на видео:


Читать дальше →

Распознавание номеров: от А до 9

Reading time9 min
Views171K
Уже пару раз на Хабре возникали дискуссии на тему того, как сейчас работает распознавание номеров. Но статьи, где были бы показаны разные подходы к распознаванию номеров, на Хабре пока не было. Так что здесь попробуем разобраться, как все это работает. А потом, если статья вызовет интерес, продолжим и выложим работающую модель, которую можно будет поисследовать.

image
Читать дальше →

Интересные приемы программирования на Bash

Reading time6 min
Views133K
Эти приемы были описаны во внутреннем проекте компании Google «Testing on the Toilet» (Тестируем в туалете — распространение листовок в туалетах, что бы напоминать разработчикам о тестах).
В данной статье они были пересмотрены и дополнены.
Читать дальше →

Интеллектуализация купольной поворотной камеры: автоматическое патрулирование, выбор целей и слежение

Reading time8 min
Views56K
Автоматизация системы управления купольной поворотной камеры (PTZ-камеры) – интересная и актуальная задача. По мере концентрации ситуационных центров и внедрения видеоаналитики возникает потребность в интеллектуальных алгоритмах, позволяющих не только анализировать видео со стационарных (неподвижных) камер, но и наводить роботизированную камеру на цель без участия оператора. Задержка, вносимая цифровой подсистемой кодирования и декодирования видео, ограничивает возможности дистанционного слежения за целью при помощи поворотной камеры и усиливает необходимость локальной автоматизации слежения. Наш пост Хабру содержит обзор основных задач по интеллектуализации PTZ-камер, подходов к их решению и предложений на рынке.
Экспериментальная установка для автономного PTZ-слежения: видеоаналитическое устройство MagicBox, PTZ-камера Pelco и обзорная камера CNB
Рис. 1. Экспериментальная установка для автономного PTZ-слежения: видеоаналитическое устройство MagicBox, PTZ-камера Pelco и обзорная камера CNB. Рис. 2.Предпозиции PTZ-камеры, управляемые зональным детектором движения.

Читать дальше →

Новая версия Менеджера устройств ONVIF

Reading time4 min
Views85K
Менеджер устройств ONVIF (ONVIF Device Manager — onvifdm) — открытая реализация клиента (приемной части) системы охранного видеонаблюдения на базе международного стандарта ONVIF. В состав приложения входит библиотека ONVIF, которая позволяет взаимодействовать с сетевыми устройствами, такими как IP-камеры, видеоэнкодеры, считыватели ключей, турникеты, датчики дыма. Менеджер устройств ONVIF и библиотека могут быть использованы при разработке коммерческого или любительского ПО, например, для удаленного наблюдения за коттеджем, определения длины очереди в магазине, фотографирования птиц.

Менеджер устройств ONVIF
Читать дальше →

Запуск приложения во Вконтакте

Reading time8 min
Views48K
image Статья нацелена на начинающих разработчиков, которые хотят запустить свое приложение в социальной сети.

В статье описывается личный опыт создания IFrame-приложения, с нуля, для «Вконтакте», а так же все события которые произошли во время запуска и после, ну и конечно же совершённые ошибки. Можно даже сказать что это не совсем статья, а скорее рассказ.

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

Переход на PHP 5.5 и юнит-тесты

Reading time4 min
Views19K
С момента перехода с PHP 4.4 на PHP 5.3 в Badoo прошло уже 4 года, пришла пора обновлять PHP, на этот раз сразу на версию PHP 5.5. Помимо новых фич, новая версия PHP в очередной раз принесла нам существенное увеличение производительности, поэтому у нас было много причин для апгрейда. В этой статье мы расскажем о том, как мы переходили на PHP 5.5, какие «грабли» собрали, и зачем в очередной раз переписывали нашу систему для запуска юнит-тестов на основе PHPUnit.


Рис 1. Общая архитектура

«Грабли» при переходе с PHP 5.3 на PHP 5.5


В прошлый раз мы переходили с четвертой версии PHP на пятую, причём наша версия PHP 5.3 содержала патчи, чтобы работал «старый» синтаксис PHP, например, $a = &new ClassName();, и чтобы наша кодовая база могла работать на PHP4 и PHP5 одновременно. На этот раз у нас таких ограничений не было, поэтому при переходе мы просто нашли и заменили все устаревшие конструкции на более актуальные, и на этом переписывание кода было закончено.

Основные проблемы, которые у нас возникли:
  • часть deprecated-фич языка была убрана;
  • расширение mysql стало deprecated;
  • низкая производительность расширения runkit, которое мы используем при написании юнит-тестов.


После перехода на PHP 5.5 наши юнит-тесты начали проходить значительно дольше (в несколько раз), поэтому мы решили в очередной раз доработать нашу «пускалку», чтобы решить эту проблему.

Читать дальше →

Zabbix + Iostat: мониторинг дисковой подсистемы

Reading time4 min
Views100K
Zabbix + Iostat: мониторинг дисковой подсистемы.
image
Зачем?
Дисковая подсистема одна из важных подсистем сервера и от уровня нагрузки на дисковую подсистему зачастую зависит очень многое, например скорость отдачи контента или то как быстро будет отвечать база данных. Это в большей степени относится к почтовым или файловым серверам, серверам БД. Вобщем, показатели дисковой производительности отслеживать нужно. На основании графиков производительности дисковой подсистемы мы можем принять решение о необходимости наращивания мощностей задолго до того как петух клюнет. Да и вобще полезно поглядывать от релиза к релизу как работа разработчиков сказывается на уровне нагрузки.

Под катом, о мониторинге и о том как настроить.
Читать дальше →

MongoDB от теории к практике. Руководство по установке кластера mongoDB

Reading time9 min
Views90K
     Доброго времени суток, уважаемые читатели. В этом посте я хотел бы описать несколько примеров развертки mongoDB, отличия между ними, принципы их работы. Однако больше всего хотелось бы поделиться с вами практическом опытом шардирования mongoDB. Если бы этот пост имел план, он бы выглядел скорее всего так:

  1. Вступление. Кратко о масштабировании
  2. Некоторые примеры развертки mongoDB и их описание
  3. Шардинг mongoDB

    Пункты 1 и 2 — теоретические, а номер 3 претендует на практическое руководство по поднятию кластера mongoDB и больше всего подойдет тем, кто столкнулся с этим в первый раз.
Читать дальше →

Делаем детектор движения, или OpenCV — это просто

Reading time11 min
Views115K
Надо оправдывать название компании — заняться хоть чем-то, что связано с видео. По предыдущему топику можно понять, что мы не только чайник делаем, но и пилим «умное освещение» для умного дома. На этой недели я был занят тем, что ковырял OpenCV — это набор алгоритмов и библиотек для работы с компьютерным зрением. Поиск обьектов на изображениях, распознание символов и все такое прочее.

На самом деле что-то в ней сделать — не такая сложная задача, даже для не-программиста. Вот я и расскажу, как.
Читать дальше →

Настройка JavaCV в Windows 7

Reading time2 min
Views20K
Инструкция применима также для 2.4+ версии OpenCV и JavaCV

Я искал библиотеки для обработки изображений в Java. Мне порекомендовали JavaCV.
JavaCV предоставляет оболочки для OpenCV, так что вы можете напрямую использовать OpenCV функции в Java.
Определим пару шагов, которые следует выполнить чтобы установить JavaCV в Windows 7.
JavaCV
Читать дальше →

Почему в России почти нет гражданского/коммерческого высокотехнологичного производства?

Reading time27 min
Views412K
Статью с обзором ситуации с микроэлектроникой в России я закончил утверждением, что сейчас в России есть технические возможности для создания любых военных микросхем (если не считаться с ценой). Однако и в комментариях к той статье, и во многих других — всех больше волновал вопрос отсутствия (на уровне погрешности измерений) производства чисто-коммерческих (гражданских) высокотехнологичных продуктов. Этот вопрос волновал и меня, потому я постоянно мучил вопросами всех, кто так или иначе связан с высокими технологиями и бизнесом в России.

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

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

Сразу нужно отметить, что в связи с многогранностью проблемы объем статьи получился довольно большой, так что можно начать читать с резюме в конце, и затем прочитать лишь те разделы, которые вызовут интерес. Сразу хочу предупредить — повествование «нелинейное», соседние заголовки могут описывать разные аспекты проблемы и быть друг с другом практически не связанными.
Читать дальше →

Распределенное кодирование видео

Reading time4 min
Views21K
image
Думаю, большинству хабрапользователей хоть раз да приходилось кодировать видео. Возможно, вы хотели посмотреть свежую серию любимого сериала в метро, а ваш смартфон или иное портативное устройство никак не хотело играть этот кодек, или SmartTV отказывался декодировать звук в видеофайле, либо же вы застряли в 2004 и транскодировали H.264 в MPEG-4 для вашего старого DVD-проигрывателя. Или же, например, сжимали невероятного размера видео, снятое фотоаппаратом, во что-то более-менее приличное по размеру. Наверняка вы замечали, что это не самый быстрый процесс.

Для кодирования видео сделано огромное количество софта, начиная от программ типа «жми крестик чтобы кодировать» и заканчивая софтом, который принимает AviSynth-скрипты на вход. Однако программы, поддерживающие хоть какое-то распределение кодирования, можно пересчитать по пальцам одной руки.

Что вообще следует понимать под распределенным кодированием видео? В моем представлении, есть 2 разных задачи:
  1. Кодирование большого количества видеофайлов на множестве компьютеров одновременно
  2. Кодирование одного видеофайла по частям на множестве компьютеров одновременно

Первая задача подразумевает наличие большого количества видеофайлов, сильно больше, чем компьютеров, на которых их можно кодировать, и довольно легко автоматизируется с использованием CLI-кодировщиков, например, HandBrake или FFmpeg и любых средств автоматизации, которые поддерживают распределение, вроде GNU Parallel или PPSS (к слову, о нем мало кто знает, рекомендую!).

Вторая же задача подразумевает наличие малого количества файлов и большого числа компьютеров, и она несколько сложнее: нам необходимо, во-первых, разбить файл на маленькие части, во-вторых, перекодировать их, и в-третьих, собрать обратно.
Читать дальше →

Information

Rating
Does not participate
Registered
Activity