четверг, 22 апреля 2010 г.

Google Wave Robot.

Google Wave Robot.

В конце прошлого года мне прислали инвайт в Google Wave. После нескольких часов "чата" захотелось взглянуть на Wave API. Из двух существующих способов расширения волны: роботы и гаджеты, выбор пал в сторону роботов. Гаджеты представляют собой встраиваемые в сообщения(блипы в терминах Wave) блоки html/JavaScript и, не вдаваясь в детали, позволяют пользователям взаимодействовать с собой. Роботы, в свою очередь, являются полноценными приложениями на платформе Google Apps Engine и могут реагировать на события, такие как добавление в волну участника или новый блип. Так же, роботы могут создавать новые блипы, редактировать существующие, добавлять в волну адресатов(участников) и главное, использовать всю мощь облачных вычислений платформы Google Apps Engine. В свою очередь, в отличии от гаджетов, роботы ограничены в средствах визуализации, что впрочем не мешает создавать комбинированные расширения робот + гаджет. Более того, думаю именно эта связка способна превратить волну в платформу для решения огромного спектра задач. Иными словами, можно считать что робот отвечает за логику, а гаджет за представление. Однако в целом, это две самостоятельные сущности приложения Google Wave.

Поскольку с первого взгляда волна больше всего напоминает коллективный чат, идея для робота пришла довольно быстро. Если кто не в курсе, в типичном веб-чате наряду с "роботами" заменяющими текстовые смайлы на графические, иногда существуют "роботы" реагирующие на заранее обозначенные слова или фильтрующие нецензурную лексику. Такого "цензора" я и решил написать. В принципе, задача довольно тривиальная: робот реагирует на каждый новый блип, читает его содержимое и если находит там вхождение или прямое соответствие, заменят подстроку - т.е. становится как бы соавтором сообщения, так как в волне можно совместно редактировать один и тот же блип. Этим роботы похожи на обычных участников. Кстати, сейчас их выдает наличие адреса в зоне @appspot.com, а когда появится возможность хостить их на собственных доменах и волновых серверах, не исключаю появления разнообразных роботов троллей, SEO спаммеров и прочих продуктов эволюции интернета.

Впрочем продолжим. GAE/GWT плагин для Eclipse IDE позволяет довольно легко создавать и публиковать приложения apps engine. Весь процесс описан в документах Google и не вызвал у меня никаких сложностей. Сложности начались в попытках разобраться с многочисленными "отказами в обслуживании" которые сыпались в консоль администратора, когда я начал тестировать робота. Робот то работал, то не работал и сходу было не так просто найти причины. Самое "веселье" заключалось в том, что пока я тестировал его самостоятельно, все вроде было ок. Однако, когда я создал публичную волну и попросил всех, кому это интересно помочь в тестировании, робот периодически умирал и не реагировал на сообщения. Вскоре, причины стали ясны. Честно говоря, я жутко не люблю "регулярные выражения". Каждый раз там, где ими можно эффективно воспользоваться, я для начала пытаюсь обойтись без них. Так и здесь, решение обойтись без регулярок было выполнено в лучших индусских традициях: сообщение разбивается на "массив" слов, который в цикле перебирается. Каждое слово отправляется в функцию, в которой создается(!) массив слов подлежащих фильтрации и уже внутри цикла по нему мы сравниваем конкретные слова и вхождение подстрок. Собственно эти вложенные циклы и были причинами отказа в обслуживании. Реализация средствами регулярных выражений исправила ситуацию и робот заработал стабильно.

Ну и в завершении. Во первых, доступ к волнам у меня совпал с периодом активного изучения Java. Таким образом робот оказался первым приложением которое исполнилось не на localhost, а в интернете, да еще и на период тестирования обрело своих пользователей. К сожалению, серия вандализма в публичных волнах, которая бушевала в конце прошлого года, докатилась и до нашей волны, в которой мы вместе с любезно согласившимися добровольцами тестировали робота. После этого, как мне показалось, интерес к волнам несколько спал, в том числе пропал интерес и к моему роботу. Однако он по прежнему доступен и работает по адресу gwcensor@appspot.com , а исходный код можно посмотреть на google code. Сам сервис google wave оказался невероятно удобным для коллективного обсуждения проекта. Хотя, честно говоря, я кроме "мантиса" ничего и не видел. И последнее, если вы начинающий разработчик изучающий python или один из JVM зыков, я рискну порекомендовать в качестве небольшой практики разработать своего "питомца". В "волнах" уже есть некоторая аудитория и главное что подобный опыт позволяет немного окунуться в атмосферу реальных проектов, получить отклик пользователей и по случаю, познакомиться с возможностями Google Apps Engine.

Комментариев нет:

Отправить комментарий