Перейти к содержимому

Cubetutor и Data Mining

Недавно решил сделать очередной мини-проект — скачать все кубы с Cubetutor.com и найти там связанные «блоки», из которых кубы строятся — комбо, мана-фиксинг и т.п. Скачать листы оказалось делом несложным — я экспортировал один из кубов в текстовом виде, скопировал curl-вызовы в консоли Chrome (оказалось что нужен и запрос к странице и POST-запрос на сохранение) и подставил их в цикл в bash-скрипте. Задержку между скачиваниями я поставил в 6 секунд, поэтому все кубы по айдишникам экспортировались почти сутки. После этого из получившихся текстовых файлов я удалил те, в которых были страницы ошибок (удалённые кубы, видимо).

Читать далее…

Mercurial_keyring

Столкнулся недавно с неприятной проблемой — mercurial_keyring не хотел сохранять пароли. Mercurial_keyring — плагин к mercurial (системе контроля версий), позволяющий не вводить пароль при каждой операции с удалённым репозиторием. Мне это потребовалось для организации автодеплоя прямо из репо.

Когда я прошелся по коду mercurial_keyring (он написан на python), оказалось что проблема лежит в функции get_http_password, точнее в том, что модуль keyring не может сохранить/получить пароль, если в ключе присутствует знак :. Скрипт mercurial_keyring.py генерирует ключ из логина и url-а, соответственно если URL начинается с http: или https:, плагин просто не находит сохраненного пароля.

Я это у себя исправил просто правкой mercurial_keyring.py. Было:

    def _format_http_key(self, url, username):
        return "%s@@%s" % (username, url)

Стало:

    def _format_http_key(self, url, username):
        return "%s@@%s" % (username, url.replace(':', '#'))

nude.js и CORS

После случайного обнаружения в ленте поста про nude.js, у меня сразу появилась идея о том что можно с этим сделать. Nude.js — это javascript-библиотека для обнаружения обнаженного тела на фото. Я захотел сделать автоматическое скрытие NSFW-постов в ленте Tumblr, но, к сожалению, не получилось. Но всё по порядку.
Читать далее…

AI, Minecraft и Node.js

Пару месяцев назад я записался на онлайн-курс Artificial Intellingence от Stanford University. И пока курс не начался (он начался только в понедельник 10 октября) пришла ко мне мысль сделать какую нибудь «песочницу» для тестирования разных алгоритмов, которые будут встречаться в курсе. Захотелось сделать такую песочницу из Minecraft.

Вначале я думал о том чтобы просто модифицировать клиент или написать к нему плагин. Но т.к. при модификации пришлось бы работать с декомпилированным (плохо читаемым) Java-кодом, а система плагинов пока оставляет желать лучшего, я переключил своё внимание на сервер. Тут дела были несколько лучше. Для Minecraft есть несколько серверов с открытым исходным кодом на разных языках — C, Java, Python, .NET и т.д. Покопавшись в них, а также покопавшись в nodecraft — заброшенной попытке написать minecraft-сервер на JavaScript, я решил все таки попробовать написать сервер самостоятельно, благо опыт работы с двоичными протоколами после разработки limestone у меня есть, да и во внутренности Minecraft я уже немного забирался (правда с Питоном). Протокол Minecraft описан (пусть даже немного неточно) в Minecraft Coalition wiki.

За первые пару дней я разобрался с последовательностью авторизации клиента и перешёл непосредственно к логину. Для логина сервер должен выслать клиенту местность вокруг места появления и всякие стартовые параметры типа времени сервера, содержимого инвентаря, точки респауна в случае если игрок погибнет и т.д. В IRC на канале #mcdevs меня сразу предупредили что отправка чанков клиенту это довольно сложная часть разработки и многие авторы серверов срезаются именно здесь. В результате двухдневных попыток подбора библиотеки сжатия и экспериментов с порядком пакетов отправить местность всё таки получилось. На следующий день после этого я прикрутил отправку keepalive-пакетов (без этого время пребывания на сервере ограничивалось одной минутой) и добавил респаун мобов и их движение. Теперь осталось только добавить определение столкновений, чтобы делать лабиринты, и можно приступать к заданиям второй главы курса — алгоритмам поиска пути.

Когда доделаю сервер будет видимо отдельный большой пост о протоколе Minecraft, написании сервера и насколько он на самом деле подходит для тестирования AI-алгоритмов. Пока мои наработки можно найти на Github. Сервер я назвал blackstone (на #mcdevs предлагали node-minecraft, но по моему это скорее название для какой нибудь библиотеки утилит).

Яндекс.Метрика

Последнее время с интересом слежу за развитием истории с проиндексированными смс, заказами (а теперь ещё и билетами). На Хабре (да и в Интернете вообще, по моему) все горой стоят за Яндекс — дескать, кто не закрыл нужные страницы с помощью robots.txt, тот сам себе злобный Буратино. Я не совсем согласен с такой точкой зрения. Как пользователь Яндекс.Метрики лично я пропустил момент когда она начала по тихому сдавать страницы в очередь краулера (и, соответственно, в индекс). Я использую кое где Метрику для статистики, и для меня такое открытие было неприятной неожиданностью. Причём я сейчас проверил в новостях метрики — о таком нововведении там ни слова. Хотя мне скрывать какие то страницы смысла не имеет, подобное изменение всё равно вызывает вопросы. Имхо, раз уж метрика привязывается к почтовому аккаунту, могли бы и разослать предупреждение.

Впрочем, это не означает что владельцы сайтов тут совсем ни при чём. При защите пользовательских данных подход security through obscurity ни к чему хорошему привести не может. Особенно если данные действительно личные (номера телефонов, адреса + состав заказа, данные о поездке), лучше защищать их явно, чем просто надеяться на то что никто и никогда этих страниц не увидит. И неожиданно изменившиеся правила игры не обернулись бы такими конфузами.

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

Kue — очереди с приоритетами на основе Redis

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

Читать далее…

Случайная находка — dev-сервер Хабрахабра

Сегодня совершенно случайно обнаружил один из development-серверов Хабрахабра. Так получилось что как раз сегодня прошло 3 года с моей регистрации на ресурсе. Узнал я об этом, зайдя с утра в почту и увидев письмо от Хабрахабра с темой «Вам доступен значок ‘Старожил’«.

Точнее, таких писем было два.

Читать далее…

Отслеживать

Get every new post delivered to your Inbox.

Join 610 other followers