Привет, Друзья!
Недавно стал играть в шахматы с Другом. Занятие это настолько
увлекательное, что начал решать шахматные задачки. Но вот беда - решаю я их на
смартфоне (ну нету у меня ифона, нету), а поделиться интересной задачкой
хочется. Как быть?
Как всегда,
пошел в Google, в поисках подходящего сервиса, а там этих
сервисов... что Кот наплакал. То, что удалось найти имело фантастически убогий
интерфейс и потрясающее неудобство использования. Вобщем, почему бы не сделать свой сервис? - Сделал. О нем и речь в
сегодняшней статье.
Знакомьтесь - Chess Url
Чешурл позволяет расставить фигуры на доске и получить URL к картинке,
которая соответствует расстановке. Например, в следующем примере у белых есть
прекрасный ход. Какой?
Ход белых
Эта картинка имеет следующий 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 настолько глубоки, что написанный код стыдно показывать
.
Отсутствие 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. Теперь число трансформаций упало в разы.
Что вы думаете?
Буду очень рад услышать ваше мнение о
сервисе,
коде и
шахматной задаче
сверху :). Если у вас есть свои интересные задачки - пишите, вставляйте в блог,
пользуйтесь на здоровье :). Надеюсь, вам понравится.
Спасибо за ваше внимание! Отличного программирования :)!