Search
Write a publication
Pull to refresh
Александр @Almetread⁠-⁠only

Пользователь

Send message

Разрушители мифов: Автоматическое решение Google Recaptcha

Reading time9 min
Views33K
Привет! Я воплощаю интересные идеи на python и рассказываю о том, что из этого вышло. В прошлый раз я пробовал найти аномалии на карте цен недвижимости. Просто так. На этот раз идея была построить систему, которая смогла бы сама решать очень популярную ныне Google Recaptcha 2.0, основываясь на некоторых алгоритмах и большой базе обучающих примеров.
Google Recaptcha 2.0 представляет собой набор изображений (9 или 16 квадратных картинок под одной инструкцией), среди которых пользователю, для подтверждения своей разумности, нужно выбрать все изображения одной категории. Речь пойдет НЕ о построении системы машинного обучения — распознавать мы будем именно капчи!
Читать дальше →

WPS Pixie Dust Attack — Взлом Wi-Fi сети за 5 минут. Описание уязвимости

Reading time3 min
Views139K


Уязвимость не новая, но ввиду отсутствия материалов в «РУ» сегменте — решил написать данную статью.

Базово о WPS:
WPS — Wi-Fi Protected Setup. Второе название QSS — Quick Security Setup.
Стандарт разработанный для упрощения процесса настройки беспроводной сети.
WPS позволяет подключится двумя различными способами:
— ввод 8-ми значного пин кода (обычно указывается c обратной стороны роутера)
— нажатием специально предназначенной для этого кнопки на роутере

PIN являет собой код из 8 цифр, 8я — чек сумма. Брут такого кода, с учетом защиты от перебора, может занять до нескольких дней.

В конце 2014 года специалист по компьютерной безопасности Доминик Бонгард (Dominique Bongard) нашел уязвимость в WPS, которая позволила взломать Wi-Fi роутер за несколько минут.

Проблема была в генерации случайных чисел (E-S1 и E-S2) на многих роутерах. Если мы узнаем эти числа — мы сможем легко узнать WPS pin, так как именно они используются в криптографической функции для защиты от брутфорса по получению WPS pin.
Роутер отдает хэш, сгенерированный с использованием WPS pin и данных (E-S1 и E-S2) чисел, что бы доказать, что он его так же знает (это сделано для защиты от подключения к фейковой точке, которая могла бы просто принять ваш пароль и слушать трафик).
Читать дальше →

Невозможно проверить адрес e-mail на допустимость с помощью регулярных выражений

Reading time7 min
Views39K


Что, если бы я попросил вас написать регулярку для проверки e-mail адреса? Вы бы, наверное, подумали минутку, и потом бы нагуглили запрос. И получили бы нечто вроде:

^([a-zA-Z0-9_-.]+)@([a-zA-Z0-9_-.]+).([a-zA-Z]{2,5})$


Регулярок на эту тему существуют тысячи. Но почему? Наверняка же кто-нибудь, да прочёл стандарт RFC822 и выдал надёжную регулярку?

А вот вам ещё одна регулярочка…
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)



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

Построение Android приложений шаг за шагом, часть третья

Reading time13 min
Views50K


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

Лицензирование программного обеспечения

Reading time4 min
Views197K
Эта статья написана для тех, кто хочет понять, что такое лицензия и лицензирование программного обеспечения и для чего это нужно. Рассмотреть все возможные схемы лицензирования ПО в небольшой по объему статье, естественно, не представляется возможным, поэтому я попытаюсь кратко показать лишь наиболее популярные из них.
Читать дальше →

Контрольная цифра методом Дамма

Reading time3 min
Views18K
КДПВКонтрольную цифру часто добавляют к идентификаторам, которые люди могут записывать или передавать с ошибками, чтобы эти ошибки потом обнаруживать.

Примерами могут служить последняя цифра номера кредитной карты, девятая цифра VIN автомобилей, продаваемых в в США, или последняя цифра ISBN.

Алгоритм контрольной цифры ван Дамма — относительно новый и потому малоизвестный. Он опубликован 2004 году.

Алгоритм обнаруживает все ошибки в одной цифре и все одиночные перестановки соседних цифр. Он заметно проще, чем сравнимый по возможностям алгоритм Верхуффа, и не требует использования специальных символов (таких как X в 10-значном ISBN).
Читать дальше →

Как вести секретную переписку. Часть 2

Reading time2 min
Views55K
В нашем блоге мы часто рассказываем о собственных кейсах — пишем о том, как бизнес работает с IaaS. Помимо этого мы обращаемся и к западному опыту в профильной сфере.

Например, мы рассказывали:


Сегодня мы продолжим знакомство с руководством одного из авторов The Intercept, который привел детальный разбор того, как вести переписку с использованием методов шифрования.

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

Алгоритм определения движения через сравнение двух кадров

Reading time4 min
Views21K
Здравствуйте, хабражители.
Хочу с вами поделиться своими наработками по обработке изображений. В последнее время занимаюсь написанием домашнего сервера под «умный дом» и начал с видеонаблюдения.
Задача оказалась не такой тривиальной. По поводу всего видеонаблюдения я напишу отдельно (если кому-то это интересно), а сейчас хотел бы затронуть тему «Алгоритм определения движения через сравнение двух кадров».
Этот алгоритм необходим для включения (выключения) записи видео с видеокамер.
Читать дальше →

Детектируем, разбираем, изучаем, паяем и глушим полицейские радары и лидары

Reading time17 min
Views200K
Давным давно, в 1902 году, сидят в кустах трое полицейских (с интервалами в 1 милю), у каждого секундомер и телефон. Проносится мимо первого автомобиль, он тут же засекает время и звонит второму, второй делает математические вычисления и звонит третьему, а тот уже останавливает машину. (пруф)


«Антирадар» в разборе. (Радар-детектор — пассивный приемник сигналов полицейских радаров, предупреждающий водителя о необходимости соблюдать установленный скоростной режим.)

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

Радары, детекторы радаров, детекторы детекторов радаров. О том, какие бывают, как сделать/распилить самому и то и другое.
(Спасибо интернет-магазину fonarimarket.ru за предоставленное оборудование)
Читать дальше →

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

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

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

Знакомство с Arduino

Reading time4 min
Views81K

Введение


Торжественно открываю новый блог на Хабре, посвящённый Arduino! Блог об универсальном opensource-микроконтроллере Arduino, который будет интересен всем любителям микроэлектроники, самодельных гаджетов и всем, кто не боится взять в руки паяльник.

Внешний вид платы Arduino Diecimila Arduino представляет собой линейку электронных блоков-плат, которые можно подключать к компьютеру по USB, а в качестве периферии — любые устройства от светодиодов до механизмов радиуоправляемых моделей и роботов. Программы для него пишутся на простом и интуитивно понятном си-подобном языке Wiring (c возможностью подключения сторонних библиотек на C/C++, например, для управления LCD-дисплеями или двигателями), компилируются и загружаются в устройство одной кнопкой, после чего вы тут же получаете работающий автономный гаджет. Никакого ассемблера, никаких лишних проводов и дорогущих деталей и программаторов — чистое творчество, включай и работай!
Читать дальше →

Как устроена видеоаналитика

Reading time6 min
Views32K

Недавно я прочитал статью, в которой автор на простом примере рассказывает, как работает алгоритм распознавания движения. Это напомнило мне собственные исследования алгоритмов аналитики видео-потоков. Многие знают, что существует отличный проект OpenCV. Это обширная кроссплатформенная библиотека компьютерного зрения, содержащая множество различных алгоритмов. Однако разобраться в ней не так уж просто. Можно найти множество публикаций и примеров о том, как и где использовать машинное зрение, но не о том, как оно устроено. А именно этого часто и не хватает для понимания процесса, особенно когда только начинаешь изучать данную тему.

В этой статье я расскажу про архитектуру видеоаналитики.
Читать дальше →

Способы передачи финансовых данных #4: Протокол ASTS Bridge

Reading time10 min
Views14K


Помимо международных стандартов и протоколов передачи финансовой информации вроде FIX и FAST, о которых мы рассказывали ранее, на фондовом рынке функционируют и так называемые «нативные» протоколы передачи финансовых данных. Их используют для получения нужной информации как частные трейдеры, так и брокерские компании — такие нативные протоколы более функциональны, чем общепринятые стандарты (вроде того же FIX), что привлекает брокеров.

Ранее в России существовали две крупные биржи — ММВБ и РТС. Впоследствии они объединились в единую «Московскую биржу», но каждая из двух торговых площадок за годы независимости успела разработать собственный нативный протокол. О протоколе Plaza II, который был создан специалистами РТС, мы рассказывали в одном из прошлых материалов, а сегодня речь пойдет о проекте ASTS Bridge, который начали развивать их коллеги из ММВБ.
Читать дальше →

Голосовое управление мультимедиа центром

Reading time8 min
Views11K
В этой статье хотелось бы описать свой опыт по применению web speech api в браузере Google Chrome для реализации голосового поиска и автоматического воспроизведения видеороликов с канала Youtube. Для демонстрации данного функционала нам понадобиться сделать следующие шаги:

  1. Установить набор: Apache2, PHP5(пакет curl обязательно).
  2. Иметь в наличии мультимедиа центр Dune HD или установить XBMC и настроить его для работы в сети INTERNET.
  3. Получить Youtube API Key для выполнения поисковых запросов.

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

  1. Распознаем фразу с помощью скрипта, написанного на JavaScript — работать будет только в Google Chrome.
  2. Ищем ролики, соответствующие поисковому запросу.
  3. Получаем прямые ссылки на ролики.
  4. Создаем плейлист из ссылок и названий роликов.
  5. Отправляем плейлист для воспроизведения на устройство.
Читать дальше →

Алгоритм поиска смещения объекта на изображении

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

Pivoting Everywhere — техники продвижения внутрь локальной сети

Reading time2 min
Views20K


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

Пол Грэм: «Проектирование и исследование»

Reading time11 min
Views18K


Пол Грэм, Design and Research, January 2003

«Хакеры и Художники», глава 15
Проектирование и Исследование
За перевод спасибо knagaev

(Эта статья в своей основе содержит программный доклад на NEPLS осенью 2002 года)

Приезжающих в Америку часто застаёт врасплох манера американцев начинать разговор с вопроса «Чем вы занимаетесь?» Я никогда не любил этот вопрос. Я очень редко слышал достойный ответ на него. Но сейчас думаю, что решил эту проблему. Теперь, если кто-нибудь спрашивает чем я занимаюсь, я смотрю ему прямо в глаза и говорю «Я проектирую новый диалект Lisp.» Этот ответ я рекомендую всем, кто не любит когда интересуются что они делают. Разговор тут же свернёт на другие темы.

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

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

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

Поиск и чтение унаследованного кода

Reading time20 min
Views27K
Вася — молодой программист. Получив задачу и засучив рукава, он берется за написание кода. Уже через день решение задачи готово, Вася запускает его… И сталкивается с неожиданной досадной ошибкой. Вася старательно исправляет ее и повторно запускает решение. В результате — снова неприятная ошибка. Так Вася долго наступает на грабли, пару раз значительно переписывает программу, пока, наконец, через неделю задача окончательно не решена.

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

Как найти нужный вам кусок исходного кода? Как его понять? А главное — зачем все это делать? В поиске ответов на эти вопросы добро пожаловать под кат.
Читать дальше →

Нет ничего проще, чем вызвать функцию, я сам это делал неоднократно

Reading time12 min
Views36K

Предшествующая статья про исключения в С++ оставила кучу тёмных мест,
главное, что осталось непонятным — так как же всё-таки осуществляется
передача управления при возбуждении исключения?
С SJLJ всё понятно, но, утверждается, что эта технология практически
вытеснена некоторым без-затратным (при отсутствии исключений) табличным механизмом.
А вот что это за механизм такой и как он устроен, будем разбираться под катом.
Читать дальше →

О пользе железа, или знакомство с GPS/ГЛОНАСС трекерами

Reading time8 min
Views48K
Основное направление деятельности нашей компании – разработка ПО для спутникового мониторинга. В связи с чем мы вплотную сотрудничаем с производителями GPS/ГЛОНАСС оборудования. Поэтому мы решили поделиться опытом и выпустить цикл тематических статей, посвященных GPS/ГЛОНАСС трекерам, в которых расскажем, как классифицируем навигационное оборудование, и подробно рассмотрим технические особенности устройств, наиболее популярных среди пользователей нашего продукта.

Первая статья посвящена базовым понятиям: что такое GPS трекер, как он работает и каким бывает. Цель ‒ познакомить читателей с принципами работы навигационного оборудования и классификацией GPS трекеров по назначению и особенностям технической реализации.

image

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


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

GPS трекеры могут быть как самостоятельным электронным устройством, так и соответствующим программным обеспечением.

Софт трекер – программное обеспечение, позволяющее использовать смартфоны, планшеты и другие приборы в качестве аппаратной платформы GPS трекера. Приложение получает доступ к штатному GPS приемнику, а обмен сообщениями с навигационным сервером осуществляется посредством GSM и Wi-Fi модуля портативного устройства. Примером софт трекера может служить мобильное приложение для контроля выездных сотрудников WiaTag.

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

Information

Rating
Does not participate
Location
Сызрань, Самарская обл., Россия
Date of birth
Registered
Activity