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

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

Send message

Поиск решений в логических играх на примере гомоку

Reading time10 min
Views44K

Вступление


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

image

За такой нехитрой игрой мы прослушали не одну лекцию. Меня всегда раздражало, что моя блестящая стратегия разбивается о собственную невнимательность. Ну ничего, думал я, вот напишу программу, которая не будет делать ошибок, я тогда всем им покажу! Раз плюнуть! Пару циклов, правда, надо повозиться с пользовательским интерфейсом, но за пару вечеров управлюсь. С момента окончания института прошло 10 лет, а программу я всё ещё не написал.
Читать дальше

Полезные ресурсы по открытым данным в России

Reading time2 min
Views36K
Для тех кто интересуется открытыми данными, тем что это такое и как с ними работать в этом посте собраны ссылки на открытые данные по России.

Федеральная власть




Регионы и муниципалитеты




Общественные проекты и блоги




Журналистика данных


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

Импортируем OpenStreetMap в MySQL

Reading time25 min
Views9.3K
Однажды мне потребовалось узнать номера улиц и домов Минска. Каково же было мое разочарование, когда я узнал, что полных данных нигде нет, и что делать если появляются новые улицы и дома. Вот тут и пришел на выход OpenStreetMap с открытым кодом и постоянными обновлениями. Беда в том, что карты представляют собой xml документ, объёмом аж целых 2 Гб и информация о домах представлена в таком виде:

<way id="25324320" >
  <nd ref="275904968"/>
  <nd ref="275904882"/>
  <nd ref="275904881"/>
  <nd ref="275904969"/>
  <nd ref="275904968"/>
  <tag k="addr:housenumber" v="17"/>
  <tag k="addr:postcode" v="220013"/>
  <tag k="addr:street" v="улица Якуба Коласа"/>
  <tag k="building" v="yes"/>
 </way>  

Обрабатывать 1.5 Гб данных проще, когда данные упорядочены а не представлены в виде строк. Так мной было принято решения конвертировать данные в БД. Сказано – сделано, в качестве рабочего инструмента выбраны: Eclipse(Java SE) и джентельменски набор денвера.
Читать дальше →

Написание бота для Grepolis

Reading time11 min
Views20K
image Добрый день. В этой статье я опишу написание бота для онлайн mmo strategy игры Grepolis. Учтите, что правилами игры использование подобных програм запрещено, за это банят, и не безпричинно. Просто у меня хобби писать боты для игр. А писать не запрещено. Кому интересны логика и реализация, прошу под кат.
Читать дальше →

RabbitMQ tutorial 3 — Публикация/Подписка

Reading time5 min
Views116K
Хочу продолжить серию перевода уроков с официального сайта. Примеры будут на php, но их можно реализовать на большинстве популярных ЯП.

Публикация/Подписка


В предыдущей статье было рассмотрено создание рабочей очереди сообщений. Было сделано допущение, что каждое сообщение будет направлено одному обработчику(worker). В этой статье усложним задачу – отправим сообщение нескольким подписчикам. Этот паттерн известен как "publish/subscribe" (публикация/подписка).
Чтобы понять этот шаблон, создадим простую систему логирования. Она будет состоять из двух программ – первая будет создавать логи, вторая считывать и печатать их.

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

По существу, каждое сообщение будет транслироваться каждому подписчику.
Читать дальше →

Про мой опыт разработки под Android или тренируемся на Крестиках-Ноликах

Reading time10 min
Views29K

  • Мой опыт: 4ре рабочих месяца (реально это растянулось на полтора года)
  • Уровень подготовки читателя: новичок
  • Темы о которых я попытаюсь рассказать в этой статье: как я к этому пришёл, мотивация, как сделать простой дизайн самому, немного про SEO в Google Play и одна затерявшаяся среди этого всего мысль про локализацию.

Добро пожаловать под кат

Нескучные интегралы

Reading time6 min
Views176K
Некоторые из вас, вероятно, видали на просторах сети эту задачку: какое число продолжает следующий ряд?

Предлагался такой очевидный правильный ответ:

Для тех, кому неочевидно, как он получен, предлагалось объяснение. Пусть (ну и 1 при x = 0, хотя неважно). Тогда каждый член ряда — это значение следующего интеграла в цепочке:

Пока всё идёт хорошо, но тут внезапно:

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

Использование каскада Хаара для сравнения изображений

Reading time4 min
Views74K
image

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

Астрофотография в каждый дом

Reading time6 min
Views126K
Думаю у любого человека, интересующегося космосом — возникала идея купить телескоп, чтобы лично все посмотреть.

Однако суровая реальность вечно портит всю малину: в пределах города – все небо засвечено уличным освещением и турбулентность воздуха высокая. Это означает, что либо придется ограничится самыми крупными и яркими объектами (вроде Луны и Юпитера), либо возить телескоп далеко за город.

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

Пример того, что получилось: галактика Андромеда, M31 на телескопе Т20
Читать дальше →

Открытые данные Москвы и соревнование API Challenge на их основе

Reading time6 min
Views8.5K
По моему опыту общения с разработчиками которые когда-либо участвовали в соревнования по открытым данным — все они говорят о том что нужны данные как можно большего уровня детализации.

Например, не статистика по регионам, а статистика по муниципалитетам. Не сводка преступлений/ДТП, а информация с адресами и координатами.
Не просто адреса учреждений с координатами, а подробная информация о каждом.

Пока таких детальных данных, прямо скажем, в удобном виде немного. Если взять Москву как пример, то даже на московском портале data.mos.ru большая часть данных — это геоданные или данные с геопривязкой в виде адреса и какой-то еще минимальной информацией. Понятное дело что сделать с ними что-то действительно интересное сложно. Поэтому скажем спасибо Правительству Москвы за то что они хотя бы это раскрыли и попробуем понять где взять более интересные данные и что с ними делать.

Конкурсы и соревнования

На вопрос зачем это нужно отвечу сразу — невозможно провести ни один конкурс/хакатон/соревнование для разработчиков не имея достаточного количества интересных данных. С этим мы сталкивались на хакатоне Яндекса, прошедшем конкурсе Apps4Russia и многих других.

Поэтому сейчас, поскольку мы помогаем в подготовке конкурса API Challenge мы решили подготовить столько полезных данных сколько только возможно. А поскольку API Challenge — это конкурс идущий от власти Москвы и ориентированный на Москву — мы и данные собираем по Москве.


Чтобы этого добиться мы начали просматривать десятки госсайтов и ищем на них то что можно использовать законно и с пользой.

Как это происходило и продолжается

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

Где jQuery хранит обработчики событий

Reading time1 min
Views22K
В «интернетах» я не нашел подробного ответа на этот вопрос. Как правило, рекомендуется использовать стандартный метод для получения обработчиков:
$(elem).data('events')

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

Ускоряем Nginx за 5 минут

Reading time5 min
Views298K
image
Попытайтесь повторить это сами

Как правило, настроенный должным образом сервер Nginx на Linux, может обрабатывать 500,000 — 600,000 запросов в секунду. Но этот показатель можно весьма ощутимо увеличить. Хотел бы обратить внимание на тот факт, что настройки описанные ниже, применялись в тестовой среде и, возможно, для ваших боевых серверов они не подойдут.

Минутка банальности.

yum -y install nginx

На всякий пожарный, создадим бэкап исходного конфига.

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
vim /etc/nginx/nginx.conf

А теперь можно и похимичить!
Бдыжь-бдыжь

Nginx на стероидах — расширяем функционал с помощью LUA

Reading time9 min
Views54K
Для обеспечения работы всех наших внешних продуктов мы используем популярный nginx. Это быстро и это надежно. Проблем с ним почти нет. Наши продукты также постоянно развиваются, появляются новые сервисы, добавляется новый функционал, расширяется старый. Аудитория и нагрузка только растет. Сейчас мы хотим рассказать о том, как мы ускорили разработку, неплохо увеличили производительность и упростили добавление в наши сервисы этого нового функционала, при этом сохранив доступность и отказоустойчивость затронутых приложений. Речь пойдет о концепции “nginx as web application”.
А именно, о сторонних модулях (в основном LUA), позволяющих делать совершенно магические вещи быстро и надежно.
image
Читать дальше →

Пишем numpy-модуль для ускорения математических функций с помощью SIMD-инструкций

Reading time11 min
Views9.9K
Пакеты numpy и scipy предоставляют прекрасные возможности для быстрого решения различных вычислительных задач. Концепция универсальных функций (ufunc), работающих как со скалярными значениями, так и с массивами различных размерностей, позволяет получить высокую производительность при сохранении присущей языку Python простоты и элегантности. Универсальная функция обычно используются для выполнения одной операции над большим массивом данных, что идеально подходит для оптимизации с помощью SIMD-инструкций, однако мне не удалось найти готового решения, основанного на свободном программном обеспечении и позволяющего использовать SIMD для вычисления в numpy таких математических функций, как синус, косинус и экспонента. Реализовывать алгоритмы вычисления этих функций с нуля совсем не хотелось, но к счастью в интернете нашлось несколько свободных библиотек на языке «С». Преодолев лень сомнения, я решил написать собственный numpy-модуль, предлагающий универсальные функции для синуса, косинуса и экспоненты. За подробностями и результатами тестов добро пожаловать под кат.
Пишем свой numpy-модуль!

6 советов для создания сложных AJAX сайтов

Reading time4 min
Views40K
Все мы знаем множество преимуществ использования AJAX: пользователям не нужно ждать загрузку новой страницы, действия выполняются в фоновом режиме, в результате чего можно обеспечить гораздо более динамичный user experience. Идеи вроде бы просты, но создать сложное AJAX веб приложение достаточно тяжело. Я создал свой блог на основе AJAX, у меня есть несколько советов и я хочу поделиться с вами своим опытом. Надеюсь я помогу вам избавиться от некоторых проблем в будущем!
Читать дальше →

Борьба с тридцатилетним багом

Reading time5 min
Views55K
В первой редакции говорилось о двадцатилетнем баге. На самом деле ему 30 лет. Спасибо Sidnekin.

Сегодня, считывая какие-то данные, моя программа обработала 36'916 возможных дат. Две из этих 36'916 не прошли проверку. Я не придал этому значения, потому что эти даты были из данных предоставленных клиентом, а такие данные часто удивляют. Однако, взглянув на исходные данные, выяснилось, что проверку не прошли 1 января 2011 и 1 января 2007. В программе, написанной мной месяц назад, был баг. Но оказалось, что этому багу 30 лет.

Любому человеку, который не очень понимает экосистему программного обеспечения, написанное ниже покажется странным, но в этом есть смысл. Из-за решения, принятого давным-давно, чтобы принести деньги одной компании, мой $клиент потратил деньги на оплату мне, чтобы я исправил баг, внесённый одной компанией случайно, а другой специально. Чтобы объяснить это, мне придётся рассказать о третьей компании, добавившей особенность, ставшую в конечном счёте багом, и ещё о нескольких фактах, повлиявших на непонятный баг, который я исправил сегодня.
Читать дальше →

Metaobject Protocol для базового Perl 5

Level of difficultyMedium
Reading time8 min
Views6.1K
Идея создания Metaobject Protocol (MOP) для Perl 5 витала достаточно давно. Хорошо известна одна из реализаций — Class::MOP, которая используется в Moose. Но попасть в базовую поставку Perl 5 может лишь такое решение, которое будет совместимо с существующей объектной моделью и не будет перегружено излишними возможностями и зависимостями. На днях Stevan Little опубликовал первый пробный релиз на CPAN возможного кандидата на это вакантное место — модуль mop. Проект прошёл долгую эволюцию, за процессом внимательно следило сообщество. Давайте же рассмотрим, что получилось и какие последствия это может иметь для Perl 5.
Читать дальше →

Селектел и открытое программное обеспечение

Reading time5 min
Views16K
Open Source

Вот уже два года наша компания занимается разработкой опенсорсных проектов. В мае 2011 года был зарегистрирован наш аккаунт на GitHub. О некоторых из размещенных там под свободными лицензиями продуктах мы уже писали, но это было давно — имеющиеся публикации датируются всё тем же 2011 годом. За прошедшее с тех пор время мы реализовали и выложили в свободный доступ много интересных и полезных проектов (общее число созданных нами репозиториев составляет около трех десятков), и о некоторых из них стоит рассказать более подробно.
Читать дальше →

Как не потерять данные в PostgreSQL

Reading time5 min
Views63K
PostgreSQL предлагает несколько вариантов резервирования данных. Обо всех них уже рассказано не раз, в том числе и на хабре. Но в основном рассказывается про технические особенности методов. Я же хочу постараться рассказать про общую стратегию резервного копирования, объединив все методы в эффективную систему, которая поможет вам сохранить все данные и уменьшить число погибших нервных клеток в критических ситуациях.
Вводные данные: сервер PostgreSQL 9.2, База размером >100Gb.
Читать дальше →

Сравнение производительности MongoDB vs PostgreSQL. Часть I: No index

Reading time3 min
Views57K
Не так давно встала необходимость самостоятельно оценить производительность и ресурсоёмкость всё более набирающей популярность noSQL СУБД MongoDB. Для наглядности решил заодно сравнить её с производительностью PostgreSQL, которая также небезызвестна и активно используется.
Читать дальше →

Information

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