Краткий обзор DPI — Deep Packet Inspection

Побудило меня на написание этого топика недавнее принятие в США закона о сетевом нейтралитете. Тема DPI на хабре раскрыта была достаточно слабо, поэтому я бы хотел немного рассказать об устройствах, которые применяют ведущие сервис-провайдеры и
Читать дальше →

Интернет-магазин за 5 вечеров

Как все начиналось


В конце сентября я ездил в Китай на 4 дня. Эта поездка была незапланированна, мама мне предложила за несколько дней съездить с ней за компанию. Я отпросился с учёбы и отправился в путешествие. Долгий перелёт и мы в удивительной стране. Но дело не в Китае, не в их культуре и кухне. Я очень хотел познакомится с их торговлей. Мы жили в русском районе. Там все китайцы знают мой родной язык. Я был в шоке, когда увидел все эти товары. В нашем районе торговали всем: одежда, обувь, техника, аудио и видео аппаратура, картины, часы и многое другое. Всё это на 95 % подделка под известные бренды или точные копии под собственным брендом. Я купил себе много хорошей одежды, качественной и красивой, в Москве никто и подумать не смог, что все это подделка за смешные деньги. Но у меня появилась мысль купить на оставшиеся деньги что-нибудь такое, что можно продать в Москве. Денег оставалось мало и мой выбор пал на чай. Я познакомился со многими китайцами, торгующими чаем, и из всех я выбрал одного, который более всех вызвал у меня доверие. За 1000 юаней я приобрел сумку чая весом около 9 кг. В пересчёте на рубли это приблизительно 5000 р. Вернувшись домой, я поделился с другом своей идеей как-то продать этот чай. Вместе мы решили, что такой товар при наших возможностях можно продать только в интернете и по знакомым. Мой друг начал обрабатывать весь наш круг людей, в основном посредством социальных сетей. А я занялся созданием сайта.


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

Собственно почему ipt_netflow и как так получилось

Собственно

ipt_netflow — это модуль ядра Linux, который собирает и экспортит Netflow v5, а также модуль для iptables, через который управляется то, что именно мы собираемся экспортить.

Почему

Причина возникновения этого проекта — это отсутствие возможностей в Linux (февраль 2008 год) экспортить Netflow под большим трафиком. До 300Mbit можно легко использовать ipcad через ULOG, но если трафики выше, то мы получаем 100% CPU на машине по причине бурного контекстсвитчинга (порог наступал при 60-70к в секунду).

Для FreeBSD эту проблему решает ng_netflow, сидящий в ядре, но ставить FreeBSD не хотелось, а покупать Cisco для небольшого провайдера было слишком дорогим удовольствием.


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

Просмотр видео на Android по сети напрямую из папки Windows через NFS

Есть Android и куча видео в папке на компьютере с Windows. Как смотреть видео не перекачивая фильмы на SD-карту? Можно подключить папку напрямую. Но в ядре нет поддержки smbfs/cifs, зато есть поддержка nfs. Установим на Windows nfs сервер и подключим в Android папку с фильмами.


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

Прогнозирование временных рядов методом муравьиных колоний

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

Для начала вкратце о задаче и о самом алгоритме:

Прогнозирование временных рядов подразумевает, что известно значение некой функции в первых n точках временного ряда. Используя эту информацию необходимо спрогнозировать значение в n+1 точке временного ряда. Существует множество различных методов прогнозирования, но на сегодняшний день одними из самых распространенных являются метод Винтерса и ARIMA модель. Подробнее о них можно почитать тут.

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


Теперь, перейдем непосредственно к решению задачи прогнозирования методом муравьиных колоний.
Первая проблема с которой мы сталкиваемся — необходимо представить временной ряд в виде графа, на котором будем запускать муравьиный алгоритм.
Было найдено два возможных решения:
1. Представить временной ряд в виде мультиграфа где из каждой точки временного ряда можно перейти в каждую набором определенных приростов. (Для облегчения задачи будем брать нормализованные значения на промежутке от -1 до 1). Это был первый подход, который мы попробовали. Он показал неплохой результат на временных рядах малой размерности, но с увеличением размерности стала резко падать как точность прогноза, так и производительность, поэтому от этого варианта отказались.
2. Представить временной ряд в виде набора сцепленых графов, где каждый граф отвечает за свою величину прироста значения временного ряда. иначе говоря, имеем граф который отвечает за прирост -1, -0,9… и так до 1. Шаг, естественно, можно уменьшить, или увеличить, что скажется на точности прогноза и ресурсоемкости задачи.(в конечном итоге этот вариант оказался наиболее удачным.)

На этом наборе сцепленных графов, запускался муравьиный алгоритм(на каждом графе свой), который откладывал феромон на ребрах, соответствующих известным значениям временного ряда. Причем, при откладывании феромона на графе i, феромон также откладывался на графах i-1и i+1, но в гораздо меньшем количестве(в нашем случае 1/10 от базового количества феромона) таким образом, муравьи выделяли наиболее часто встречающиеся последовательности прироста значения временного ряда, а за счет откладывания феромона на смежные графы, нивелировалась возможная погрешность и изначальная зашумленность временного ряда.

Данный алгоритм мы тестировали на искусственно подготовленных временных рядах с разным уровнем периодичности и шума. Результат получился двояким. С одной стороны, при уровнях шума до 0,3 алгоритм показывает высокие результаты прогноза, сравнимые с результатами ARIMA модели. На более высоких уровнях шума возникает большой разброс результатов: прогноз то очень точный, то совершенно неправильный.

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

Спасибо всем за внимание.

Свойства (properties) для C++

Но зачем?

Иногда программисту, который помимо С++ работает с другими языками, очень не хватает свойств объектов.

Казалось бы, языки вроде Java и C++ обходятся без свойств объектов, таких например как в Ruby, Python, JavaScript или
Читать дальше →

Доступ к данным в SharePoint

SharePoint предоставляет большое количество решений, позволяющих пользователям осуществлять доступ к имеющимся данным. Эти решения доступны за счет использования методов доступа к данным как со стороны клиента (Web браузера, мобильного приложения,
Читать дальше →

Локализация веб-страниц на стороне клиента

Локализация веб-страниц — весьма частая задача для современного интернета. В данной статье описывается моя попытка решить эту задачу на стороне клиента при помощи самописных инструментов js_tr и js-linguist.

Что такое js_tr

Это утилита,
Читать дальше →

Стриминг видео c USB камеры через SSH

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


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

Органичные namespace в JavaScript

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