Search
Write a publication
Pull to refresh
59
0
Roman Lugovkin @RomanL

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

Send message

Деобфускация бэкдора без единого буквенно-цифрового символа

Reading time5 min
Views32K
Месяц назад я увидел интересный пост про PHP-шелл без единого буквенно-цифрового символа и сильно захотел понять, что же он делает. Кому интересно — под кат!
Читать дальше →

Быстрые треки на google maps

Reading time11 min
Views32K
Я работаю над визуализацией парапланерных соревнований — пишу плеер просмотра гонки для Airtribune.com. В процессе работы мне попадаются интересные и нестандартные задачи. Одна из них — задача быстрой отрисовки маркеров и треков на карте google maps.

Масштабы такие: есть ~200 трекеров в довольно ограниченной области (50x50км), каждый передает данные о своем положении раз в 10 секунд. Нужно их все отрисовать на карте и плавно перемещать при изменении координат. За каждым маркером должен отрисовываться трек. Картинка примерно следующая:



Скоро обнаружилось, что встроенные объекты — google.maps.Marker и google.maps.Polyline — для данной задачи работают слишком медленно. Была куча идей по оптимизации, и в результате получилось решение на canvas-е, которое работает со скоростью 40fps даже на тысяче маркеров. Впрочем, fps вы можете померить сами — я собрал тестовое приложение для сравнения 4-х движков, в котором на лету можно подключать разные фишки и смотреть на скорость работы.

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

Развитие таксономии творческого самовыражения через понятийный аппарат математической теории игр

Reading time5 min
Views25K
Данная статья является логическим продолжением предыдущей.

Цель данной статьи — создать симбиоз таксономии творческого самовыражения и математической теории игр. Это поможет развить таксономию предложенную ранее, а также подвести её под математический базис.

Для раскрытия понятийного аппарата и определения точки с которой возможно развитие представленной ранее таксономии, необходимо прежде всего ответить на вопрос «Какие признаки игры используются в математической теории игр?».
Характеризующими признаками подобных игр являются:

  1. Наличие нескольких участников игры.
  2. Неопределенность поведения участников, связанная с наличием у каждого из них нескольких вариантов действий.
  3. Различие (несовпадение) интересов участников
  4. Взаимосвязанное поведение участников, поскольку результат получаемый каждым из них, зависит от поведения всех участников.
  5. Наличие правил поведения, известных всем участникам.

Как мы видим, уже первый признак игры пересекается с вопросом-разветвителем таксономии Кроуфорда — «Наличие соперника», что переносит математические игры в категорию "Конфликт".
Второй признак дополняет данный вывод заявляя, что соперник должен быть действующим агентом, т.к. алгоритмы искусственного интеллекта рано или поздно можно просчитать.
Третий и четвертый признаки не позволяют выйти нам за пределы данной категории, т.к. они одновременно удовлетворяют требованиям категории "Соревнование" и категории "Игра".
Пятый признак соответствует категории "Забава", но т.к. у нас есть признаки категории более низкого класса "Конфликт", то для развития мы выберем именно её.

Типы игр в математической теории игр

— Кооперативные, некооперативные и гибридные игры


Кооперативные или коалиционные игры в теории игр — игры, в которых игроки могут объединяться в группы, взяв на себя некоторые обязательства перед другими игроками и координируя свои действия.
Некооперативные игры — игры, в которых каждый игрок должен играть за себя.
image
Слева направо: 1. Настольная игра Dungeons&Dragons 2. Настольная игра Монополия 3. Шутер от первого лица Halo 4. Файтинг Mortal Kombat

Гибридные игры — игры, которые включают в себя элементы кооперативных и некооперативных игр. В таких играх игроки могут образовывать группы, но игра может вестись в некооперативном стиле (к примеру kill stealing в League of Legends).
image
Скриншот из игры League of Legends

Каждый игрок в такой игре будет преследовать интересы своей группы, вместе с тем стараясь достичь личной выгоды. Подобное поведение носит название «Трагедия общин».

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

Тонкости благополучного git-merge

Reading time8 min
Views374K

Вступительное слово


Считается, что «киллер фичей» СКВ Git является легковесное ветвление. Я ощутил это преимущество в полной мере, ведь я перешел на Git с SVN, где ветвление было достаточно дорогим процессом: для создания ветки нужно было скопировать весь рабочий каталог. В Git все проще: создание ветки подразумевает лишь создание нового указателя на определенный коммит в папке .git/refs/heads, который является файлом с 40 байтами текста, хешем коммита.

Основными командами пользовательского уровня для ветвления в Git являются git-branch, git-checkout, git-rebase, git-log и, конечно же, git-merge. Для себя я считаю git-merge зоной наибольшей ответственности, точкой огромной магической энергии и больших возможностей. Но это достаточно сложная команда, и даже достаточно длительный опыт работы с Git порой бывает недостаточным для освоение всех ее тонкостей и умения применить ее наиболее эффективно в какой-либо нестандартной ситуации.

Попробуем же разобраться в тонкостях git-merge и приручить эту великую магию.

Здесь я хочу рассмотреть только случай благополучного слияния, под которым я понимаю слияние без конфликтов. Обработка и разрешение конфликтов — отдельная интересная тема, достойная отдельной статьи. Я очень рекомендую так же ознакомиться со статьей Внутреннее устройство Git: хранение данных и merge, содержащей много важной информации, на которую я опираюсь.
Читать дальше →

Как находить и устранять утечки памяти на примере Яндекс.Почты

Reading time8 min
Views67K
На первый поверхностный взгляд, слова JavaScript и «утечка памяти» рядом стоять не могут. Настоящих утечек памяти в JS, конечно, не может быть, потому что процесс сборки мусора происходит автоматически и не может контролироваться из нашего кода. Выделить память под объект и забыть освободить невозможно. Но могут быть ситуации, связанные с ошибками в логике работы приложения, которые приводят к утечкам памяти другого рода. Например, забиндили обработчик, в котором что-то делаем с методами общего объекта и забыли его анбиндить. Или же посылаем письмо с большим телом и не очищаем тело даже после отправки.

image

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

HTML 5 Notifications API

Reading time3 min
Views118K

Привет, Хабр. В этой статье я расскажу о HTML Notification API.

Какие возможности предоставляет Notification API


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

Поддержка в браузерах


  • Safari 6
  • Chrome 27
  • Firefox 22

Opera 15 beta не работает с Notifications API, несмотря на наличие конструктора Notification.
На мобильных платформах технология не работает.
В движке webkit есть старая нотация в виде webkitNotifications.

Как это работает


Цикл работы следующий:
  1. Получить разрешение на отправку;
  2. Правило фиксируется для сайта;
  3. Отправить уведомление.

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

Защищаем систему. Или как настроить и использовать port knocking

Reading time2 min
Views35K
Салам-папалам всем!

Тут озадачился как же можно сделать свой сервер более безопаснее. Использование напрямую iptables с блокировкой по IP не решало проблемы, т.к. я могу к серверу подсоединяться не только с рабочего ПК, но и издому, или с другого города, или в автобусе (когда в пробках стою).
Решил использовать port knocking.
Кто ни разу не пользовался этим, милости прошу под кат.
Читать дальше →

Идеи для проектов по открытым данным и ближайшие хакатоны и соревнования на которые еще можно успеть

Reading time3 min
Views5.9K
Вы наверняка знаете что сейчас идет, заканчивается и начинается много соревнований по открытым данным и многие проводят хакатоны.

Например, Хакатон Яндекса пройдет завтра-послезавтра и еще не поздно зарегистрироваться, наши друзья в Санкт-Петербурге проводят свой Хакатон 5-6 октября.

Хакатоны — это прекрасный формат чтобы познакомиться с темой, попробовать себя и сделать что-то простое и интересное. На хакатоне, однако, редко получается сделать сложный продукт и даже найти возможность монетизации. Если Вы делаете что-то большое или хотите сделать — мы продляем наш конкурс Apps4Russia до 1 октября и очень ждем ваши заявки.

Идеи



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

  1. Игры и депутаты

    Игра Hot or Not по депутатам. Берем список депутатов из API — api.duma.gov.ru — фото с duma.gov.ru и запускаем крутилку со сравнениями. Прогоняем по сотням посетителей сайта и получаем интереснейшую статистику.
    Идеально — виджет для внедрения в сайты СМИ.

  2. Мониторинг качества воды

    Взять данные по качеству воды в Москве по районам и сделать приложение для мобильного телефона показывающие качество воды в районе. Данные уже готовы и находятся здесь — http://hubofdata.ru/dataset/moswaterquality-2013


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

Алгоритм Self-Organizing Incremental Neural Network (SOINN)

Reading time7 min
Views23K

Введение


Одной из задач обучения без учителя является задача нахождения топологической структуры, которая наиболее точно отражает топологию распределения входных данных. Существует несколько подходов решения этой задачи. Например, алгоритм Самоорганизующихся Карт Кохонена является методом проецирования многомерного пространства в пространство с более низкой размерностью (как правило, двумерное) с предопределенной структурой. В связи с понижением размерности исходной задачи, и предопределенной структурой сети, возникают дефекты проецирование, анализ которых является сложной задачей. В качестве одной из альтернатив данному подходу, сочетание конкурентного обучения Хебба и нейронного газа является более эффективным в построении топологической структуры. Но практическому применению данного подхода препятствует ряд проблем: необходимы априорные знания о необходимом размере сети и сложность применения методов адаптации скорости обучения к данной сети, излишняя адаптация приводит к снижению эффективности при обучении новым данным, а слишком медленная скорость адаптации вызывает высокую чувствительность к зашумленным данным.

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

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

Про Selenium и один «велосипед»

Reading time26 min
Views69K
Всем привет!

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

В этом посте я хочу поделиться своими идеями реализации шаблона Page Object, о том как можно обрабатывать ошибки, возникающие в процессе выполнения тестов, рассказать немного о логгинге. А так же поделиться сведениями о некоторых инструментах, которые реализованы с использованием Selenium WebDriver, и своими наработками.

План моей статьи следующий:

1. Капитан очевидность, вместо вступления.
2. Немного о себе, надо представиться…
3. Почему Selenium?
4. О Page Object…
5. Не баг, а фича!
6. И снова про логгинг и отчетность.
7. А разве нет аналогов?
8. Обещанные ссылки.
9. В заключение.


Итак, поехали!
Читать дальше →

Цикл разработки через Github

Reading time3 min
Views106K

Разработка



Я расскажу о цикле разработки через Github, который я использую. Он был проверен в течении года на командах разного размера: 3 — 14 человек.

Существует 2 основных ветки: master и dev.

master — стабильная ветка, готовая к выкатыванию на production сервер в любой момент.

dev — ветка, над которой в данный момент работает команда.

Итак, в начале разработки master и dev ветки идентичны.

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

Криптопереписка для недоверчивых

Reading time8 min
Views51K
Осторожно: данный пост может вызывать непродолжительное обострение паранойи

Привет! Не верите ли вы в популярные продукты для защищённой переписки так, как не верю в них я? Например, в браузерные крипточаты с шифрованием на стороне клиента, или в p2p-криптомессенжеры?

В данном посте речь пойдет об организации защищённого общения между двумя собеседниками. Он адресован таким же недоверчивым людям как я, поэтому в нём не будет ни кода, написанного мной, ни изобретённых на коленке протоколов и алгоритмов. Будет использоваться только библиотека openssl и набор программ openssh.

image

Подробнее

Переход с bootstrap 2 на bootstrap 3

Reading time5 min
Views61K


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

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

После чего захотелось всё быстренько поправить. И вот, что из этого получилось, читаем дальше.
Читать дальше →

Делаем «mindmap» на Javascript с локальным хранением в базе данных браузера

Reading time25 min
Views57K

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

Я опишу особенности создания редактора карты памяти, который использует базу данных браузера. Причём, это будет не LocalStorage, который не может превышать 5 мегабайт. Объём данных сможет превысить 100-200 мегабайт, так как используется IndexedDB или webSQL, смотря что доступно в конкретном браузере.

Исходники выложены в открытый доступ на Github.

Мы уложимся в 520 строк кода, при этом в нашей карте можно будет перетаскивать узлы между собой, удалять, переименовывать и создавать новые. А также можно будет назначать одну из 120 иконок через контекстное меню.

Секрет минимализма в том, что мы будем использовать проверенные в бою плагины:
  1. Ydn.db — хранение информации в базе данных браузера с автоматическим выбором лучшего метода и единым API
  2. jQuery context menu — контекстное меню, которое можно наполнять динамически при помощи Javascript
  3. jsPlumb — расширение позволяющее рисовать линии между HTML элементами
  4. jQuery UI — Drag&drop — перетаскивание элементов между собой


PS: Также мы научимся создавать «синглтон», облегчать себе асинхронное программирование при помощи jQuery и встроенного объекта $.Deferred(), а также при помощи плагина LiveReload, сохраним краску на клавише F5 при изменении свойств CSS и кода в HTML и Javascript.
Читать дальше →

Кэширование фронтэнда: Flask, Nginx+Memcached+SSI

Reading time7 min
Views17K
Достаточно давно мне на глаза попались следующие статьи по этой тематике:

С PHP я дружу, поэтому попробовал примеры и убедился, что это работает. Но всё это имело «фатальные недостатки» :) — PHP, а я фанат Python и по работе занимаюсь в основном бэкендом. Серьёзно говоря, применить на практике это не представлялось возможным.

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

В первую очередь было реализовано черновое решение для моего любимого фрэймворка Flask использующее для кэширования стек Varnish+ESI. Это заработало и даже показало неплохие результаты. Позже пришло понимание, что возможно Varnish «лишний игрок» и всё тоже и даже гибче можно получить на связке Nginx+Memcached+SSI. Был сделан и этот вариант, по производительности особых отличий замечено не было, но последний показался более гибким и управляемым.

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

Использование Selenium WebDriver для автоматического тестирования веб-интерфейса Яндекс.Почты

Reading time2 min
Views150K
Без качественного тестирования невозможно разрабатывать и поддерживать крупный веб-сервис. На ранних этапах его развития часто можно обходиться только ручным тестированием по заданному тест-плану, но с появлением новых фич и увеличением количества тест-кейсов довольствоваться только им становится все сложнее и сложнее. В этой статье мы расскажем о том, как автоматизируем функциональное тестирование веб-интерфейса Яндекс.Почты с помощью Selenium WebDriver и Node.js.

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

Скрипт проверки наличия свободных дат в посольстве

Reading time7 min
Views77K
Предисловие:

В Беларуси стоит острая проблема с получением виз в Еврозону (т.е. Шенген). Все из-за того, что Польское посольство предоставляет так называемые мульти-визы за покупками (т.е. многократные). Регистрация производится на сайте посольства онлайн. Но вся проблема состоит в том, что свободных дат не словить. Единственный вариант — круглосуточно чекать страницу, и если появится дата — быстро «ловить» ее и заканчивать регистрацию. Т.к. свободного времени для круглосуточного чека нет, было принято решение об автоматизации данного процесса.
Сразу оговорюсь, что существуют различные скрипты, которые вылавливают свободные даты и за которые люди получают деньги. Мой скрипт не претендует на их место по быстроте, качеству и т.д. Данный скрипт был сделан только для себя, никакой коммерческой и иной выгоды я не преследовал.
Читать дальше →

Почему с нормальным распределением не все нормально

Reading time7 min
Views53K
image

Нормальное распределение (распределение Гаусса) всегда играло центральную роль в теории вероятностей, так как возникает очень часто как результат воздействия множества факторов, вклад любого одного из которых ничтожен. Центральная предельная теорема (ЦПТ), находит применение фактически во всех прикладных науках, делая аппарат статистики универсальным. Однако, весьма часты случаи, когда ее применение невозможно, а исследователи пытаются всячески организовать подгонку результатов под гауссиану. Вот про альтернативный подход в случае влияния на распределение множества факторов я сейчас и расскажу.
Читать дальше →

Много бесплатных книг по программированию

Reading time7 min
Views347K
Читать дальше →

Деобфускация одного зловредного кода

Reading time14 min
Views37K
Новый клиент захотел перенести свой сайт, состоящий из сотен статичных страничек на систему управления контентом, а заодно и к нам на хостинг. Прежде чем переносить сайт была проведена беглая проверка и обнаружен код, находящийся в начале каждой страницы:
Под катом история превращения непонятного злого кода в понятный

Information

Rating
Does not participate
Location
Владимирская обл., Россия
Date of birth
Registered
Activity