воскресенье, 25 апреля 2010 г.

Chess Url: Немного шахматных задач

Привет :)!

За неделю собралось немного красивых и сложных задачек (спасибо Андрею Котенко :)).

Задача 1


Белые начинают и дают мат в два хода.


Задача 2


Опять начинают белые и дают мат в опять два хода.


Задача 3


Наверное, вы уже начали догадываться :)... Начинают белые и дают мат в два хода.

вторник, 20 апреля 2010 г.

Chess Url (Чешурл) - Easy Chess Puzzles Sharing

Привет, Друзья!

Недавно стал играть в шахматы с Другом. Занятие это настолько увлекательное, что начал решать шахматные задачки. Но вот беда - решаю я их на смартфоне (ну нету у меня ифона, нету), а поделиться интересной задачкой хочется. Как быть?

Как всегда, пошел в Google, в поисках подходящего сервиса, а там этих сервисов... что Кот наплакал. То, что удалось найти имело фантастически убогий интерфейс и потрясающее неудобство использования. Вобщем, почему бы не сделать свой сервис? - Сделал. О нем и речь в сегодняшней статье.

Знакомьтесь - Chess Url


Чешурл позволяет расставить фигуры на доске и получить URL к картинке, которая соответствует расстановке. Например, в следующем примере у белых есть прекрасный ход. Какой?

White to Move
Ход белых

Эта картинка имеет следующий URL:

http://chessurl.appspot.com/?RA8,PA7,KB4,PC5,PF6/RA6,PB5,PC6,PD5,KF7

До слеша идут белые фигуры (RA8,PA7,KB4,PC5,PF6), после слеша - черные (RA6,PB5,PC6,PD5,KF7). Фигура начинается с имени (K - King, Q - Queen, R - Rook (ладья), B - Bishop, N - Knight (конь), P - Pawn). Следующие два символа - координаты фигуры на доске.

Как делался Chess Url?


Программа состоит из двух частей: дизайнера и просмотрщика. Дизайнер написан на Silverlight 4.0, просмотрщик на... Python в Google App Engine. Суть дизайнера - дать пользователю интерактивность при создании шахматной комбинации. Просмотрщик отвечает за генерацию картинки по указанным параметрам строки запроса.

Исходники дизайнера (Silverlight части) можно скачать здесь. Я решил открыть их под Microsoft Public License. Что касается исходников просмотрщика - позвольте оставить их за кулисами... Дело в том, что мои познания в Python настолько глубоки, что написанный код стыдно показывать blush. Отсутствие Python-исходников попробую компенсировать, поделившись полученным опытом.

  • Откуда картинки? - Изображения шахматных фигур я нашел на Википедии, в формате SVG.

  • Как конвертировать SVG в XAML? - Нужно скачать последнюю версию Inkscape. Редактор позволяет экспортировать SVG в XAML, и является абсолютно бесплатным. Единственный минус, у меня некорректно обработалась одна трансформация в SVG файле. Пришлось дотачивать напильником, но процесс этот безболезненный, т.к. форматы очень похожи.

  • Как происходит отрисовка картинки по строке запроса? - В состав Google App Engine входит Images API, который позволяет производить трансформации над картинками. Однако тут не без сюрпризов. Когда объединяешь .PNG файлы с прозрачностью, App Engine игнорирует прозрачность, заливая все белым цветом (как на эмуляторе сервера, так и на сервере). Решилась проблема использованием .GIF файлов. Благо Paint.NET легко конвертирует файлы.

  • В чем разрабатывалось Python приложение? - Мне очень понравилась Aptana. Это IDE, с открытым исходным кодом. Для Python устанавливается плагин, и вы получаете хороший user experience, имея полноценный intellisense в Python. Кстати, этим же IDE я пользуюсь для создания JavaScript приложений (прости меня Студия, но ты и рядом не стояло).

  • Сколько времени ушло на разработку? - около 4-х часов. Но я молчу о поиске изображений и их конвертировании. Так же промолчу и о поисках багов и их "конвертировании" :). Суммарных усилий хватило на два выходных дня.

Самым приятным сюрпризом был App Engine. Во-первых, очень либеральные квоты (один гиг трафика на вход и один на выход... в день). Во-вторых, простота программирования. Я заметил, что много потребляю ресурсов на конвертирование изображений (а это тоже входит в квоту: 2 592 000 трансформаций в день). Решение в три строчки кода: прикрутил Memcache. Теперь число трансформаций упало в разы.

Что вы думаете?


Буду очень рад услышать ваше мнение о сервисе, коде и шахматной задаче сверху :). Если у вас есть свои интересные задачки - пишите, вставляйте в блог, пользуйтесь на здоровье :). Надеюсь, вам понравится.

Спасибо за ваше внимание! Отличного программирования :)!