11 августа 2009 г.

Меняем меню: расширения волнового клиента


Как известно, в Google Wave можно использовать два типа расширений (extensions) - гаджеты и роботы. Напомню:

Гаджет - небольшая программка, которая выполняется на стороне клиента, принадлежит определенной волне и позволяет ее участникам взаимодействовать между собой, поскольку они все могут менять статус гаджета и одновременно видят эти изменения. Наглядный пример - гаджет голосования. Вы проголосовали "за" или "против", гаджет учел ваш голос и изменил таблицу результатов. Все участники волны, в которую внедрен данный гаджет, увидели это изменение.
Робот - исполняется на стороне сервера. Можно даже сказать "на стороне серверов", поскольку сейчас роботы размещаются "в облаках", на серверах Google AppEngine. Робот - равноправный участник волны. Так же, как люди, он имеет доступ к содержанию волны, может его изменять, добавлять или удалять участников данной волны, а также создавать новые "блипы" (реплики в обсуждении) и новые волны.

Возникает вопрос, а как добавлять роботов или гаджеты в волну? Поскольку роботы - это полноценные участники волны, то их можно добавлять точно так же, как и людей. Заносите адрес робота в свою адресную книгу, а потом оттуда по мере необходимости подключаете робота к нужной волне. Гаджет вставляется с помощью специального пункта в меню "Debug" (мы сейчас говорим о волновом клиенте, который используется в "песочнице" Google Wave Sandbox - http://wavesandbox.com/).

Однако со временем понимаешь, что этот процесс нужно сделать более гибким. Часто приходится подключать сразу несколько роботов к волне. Или нужно вставить какой-то собственный гаджет, которого нет в общедоступной библиотеке (или, как правильно, "гаджетнице"? :). Для решения этих вопросов мы имеем в данное время простой механизм расширения интерфейса волнового клиента. С его помощью мы можем добавлять дополнительные кнопки в меню редактирования блипа и в меню создания новой волны. Вот как это выглядит.

Задача 1. Вы написали (или откопали где-то код) удобный гаджет. Часто и с удовольствием вставляете его в волну. Но вам не хочется постоянно лезть в меню "Debug" и добавлять строку с адресом гаджета. Хорошо бы иметь просто кнопку, которая будет вставлять нужный гаджет по мановению вашего пальца.

Создаете "манифест", т.е. XML-файл с таким примерно текстом:
<extension location="Toolbar">
<info text="Are You In?"
description="Click to insert the Are You In? gadget."
imageUrl="http://wave-api.appspot.com/public/gadgets/areyouin/icon.png"/>
<insertGadget url="http://wave-api.appspot.com/public/gadgets/areyouin/gadget.xml"/>
</extension>

Затем создаете новую волну, идете в меню "Debug >Add Extension Installer" и там указываете адрес, где лежит ваш "манифест".

Сохраняете волну (кнопка "Done"). В ней появляется изображение элемента из "пазлов" с названием вашего гаджета, надписью "Автор неизвестен" и кнопкой "Install". Ее и нажимаем.


Все, теперь в вашем меню редактирования "блипа" появляется новая кнопка, которая вставляет ваш гаджет куда пожелаете. (Гусары, молчать! :) На моем скриншоте вы видите добавленную кнопку с сине-белым логотипом facebook'а.


Примечание: Структура "манифеста", как видим, очень проста. Location указывает место, куда будет добавлена кнопка (сейчас допустимо два варианта - Toolbar и NewWaveMenu, о котором чуть ниже). Info text - пояснение. Description - более подробное описание гаджета. ImageUrl - расположение картинки для кнопки. InsertGadget url - соответственно, местоположение xml-файла вашего гаджета. Можете попробовать с демо-гаджетом, который лежит здесь - http://wave-api-dmo.appspot.com/public/simplemap/whereareyou.xml


Задача 2. Вы продались роботам, частенько выкрикиваете во сне "Слава роботам! Смерть человекам!" и в любую волну добавляете с десяток любимых ботов. Правильно, Твитти нужна? Нужна, кто ж сообщит последние сплетни из твиттера. Рози нужна? Нужна, кто ж будет переводить их с разных языков. "Иветта, Мюзетта, Жанетта..."

Хочется иметь возможность одним нажатием добавлять нужный гарем роботов (ну, и людей заодно, конечно) к волне.


Создаем другой манифест:
<extension location="NewWaveMenu">
<info text="New Twave"
description="Creates a new Twitter wave."/>
<createNewWave>
<participant id="tweety-wave@appspot.com"></participant>
</createNewWave>
</extension>

Точно так же открываем новую волну, затем идем в меню "Debug >Add Extension Installer" и там указываем адрес, где в сети лежит этот "манифест".
Оп! И в панели рядом с кнопкой "New Wave" появляется кнопка со стрелкой вниз, которая при нажатии на нее показывает выпадающее меню с добавленными вами пунктами.

Примечание: Как видим, тут изменилась Location, а также появилась возможность создавать волну (createNewWave) и добавлять в нее участников (participant).

Пока, насколько мне известно, еще нет способа таким же образом добавлять участников в существующую волну или удалять их оттуда. Но API будет со временем расширяться и улучшаться. И если эти ожидания сбудутся, то у нас с вами появится возможность подстраивать свою рабочую среду в волнах сообразно нашим персональным вкусам и предпочтениям.
Или создавать "клоны" волнового клиента, заточенные под определенный круг задач (IM, совместное редактирование текстов, дискуссионное или игровое сообщество и т.п.).
Или под умения и привычки пользователей (хм, "1С-волна" для бухгалтерии, это наверное было бы круто, да! :).

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

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