четверг, 30 октября 2008 г.

Внимание: конкурс!

Российское представительство компании Google и журнал PC Magazine/RE объявляют конкурс для разработчиков гаджетов iGoogle и полезных Web-решений на базе технологий и служб Google.

К участию приглашаются как профессионалы Web-разработки, так и индивидуальные пользователи, желающие попробовать себя в деле создания полезных гаджетов.

Авторы лучших разработок получают призы (итоги конкурса подводятся раз в квартал), разработки размещаются в специальном каталоге решений и анонсируются в блоге конкурса.

Лучшие разработки получают призы: видеокамеры (за три призовых места)

10 участников также премируются годовой подпиской на PC Magazine/RE.

К участию принимаются разработки в следующих номинациях:
  1. Гаджеты для iGoogle (www.igoogle.ru).
  2. Решения на базе Google Earth.
  3. Web-решения на базе API различных служб Google.
  4. Прикладные программы, использующие службы Google.
  5. Специальный приз: за самые оригинальные идеи.

воскресенье, 6 июля 2008 г.

Google Gadgets: сделай сам. Введение в технологию

О том, что Google давно уже превратился из поисковой машины в глобальную онлайновую платформу, знают все. Google Docs, Google Map, Google Talk -- масса служб и подсистем. Но портал iGoogle занимает особое место: это не просто один из многочисленных сервисов, это скорее "точка сборки" всех возможностей Google... И даже не только Google, но вообще всех возможностей Всемирной Сети.
Идея портала iGoogle во многом близка к классической для Web 2.0 схеме "перемешивания" (mash-up) сервисов: подборка информации, получаемой из самых разных источников и собранной воедино на общей странице. Своего рода "панель управления". Главное отличие iGoogle от массы других "Web-десктопов" и "стартовых страниц" -- прежде всего в том, что это не просто интерфейс, а самостоятельная программная платформа, на основе которой можно создавать очень интересные и порой совершенно необычные решения.

Программные модули, подключаемые к iGoogle, называются "гаджетами" (gadgets). Это слово сегодня встречается все чаще и чаще, причем в разных значениях: так называют и мобильные устройства, и программные модули, и даже садовый инвентарь. (Само по себе это слово переводится как "устройство, приспособление", отсюда и большое количество значений). Поскольку слово гаджет в русском языке уже более или менее устоялось, мы будем использовать его без кавычек и в значении «программный модуль, содержащий набор функций, которыми разработчик хочет дополнить стартовую страницу iGoogle. С этой страницей работают миллионы пользователей».
Зачем собственно нужен гаджет и какие возможности он предоставляет?

Гаджет изнутри

С технической точки зрения, гаджет для iGoogle представляет собой XML-файл, содержимое которого выводится во вложенном фрейме (iframe). В XML-тексте файла гаджета применяется специальная разметка и информационные теги; там же содержится и HTML-или JavaScript-код, использующий специальный API (Google Gadget API) для интеграции с порталом iGoogle.

Гаджет может содержать как простой текст на языке разметки HTML, так и программы на JavaScript. Такое сочетание функций позволяет использовать гаджет в роли интерфейсного блока к какой-либо внешней Web-системе. Например, в качестве мини-витринки для Интернет-магазина, на которой выводится информация о скидках, новых поступлениях и др.

В то же время, роль Google Gadgets API не сводится к выводу динамического или HTML-содержимого внешних источников. Предусматриваются развитые функции формирования пользовательского интерфейса (вкладки, раскрывающиеся разделы и др.), работы с XML, интеграции с Flash или Silverlight, учета и ведения статистики (средствами Google Analytics), внешнего хранилища информации (например, параметров настройки гаджета для конкретного пользователя), локализации и др.

XML-модуль может редактироваться любым удобным разработчику способом, кроме того, есть специальный «редактор гаджетов», пригодный для создания не всех типов гаджетов, а только «унаследованных» (об этом ниже).

Программный код конкретного гаджета, как правило, хранится на серверах Google (http://hosting.gmodules.com/). С точки зрения пользователя, на страницу портала iGoogle они инсталлируются нажатием соответствующей кнопки на этой страницы (фактически просто добавляется ссылка), на внешние по отношению к iGoogle сайты их можно установить, скопировав специальный код:

Листинг 1. Код установки модуля игры Lines для iGoogle на произвольный сайт

<script src="%C2%ABhttp://gmodules.com/ig/ifr?url=" com="" ig="" gadgets="" file="" 116455917826824671162="" synd="open&w=" h="340&title=" border="%23ffffff%7C3px%2C1px+solid+%23999999&output=">
</script>

Собственно гаджет — в данном случае файл lines.xml — хранится в подкаталоге разработчика (создается автоматически при сохранении исходного текста в редакторе гаджетов, откуда и вызывается с заранее заданными параметрами.

Разместить гаджет можно и на собственном сайте, а также на страницах проекта Google Code (в этом случае появляются интересные возможности, вроде управления версиями). Но если автор хочет добиться популярности, то гаджет настоятельно рекомендуется добавлять в каталог Google. Иначе как о нем узнают широкие массы?

Структура API платформы Google для гаджетов довольно эклектична и несет явный отпечаток эволюционного развития. Так например, гадежеты могут создаваться не только для iGoogle, но и для утилиты Google Desktop (исторически она и была первой). Когда-то давно у этих двух платформ был различный API, затем программисты Google унифицировали их. Сегодня обеспечивается некоторая совместимость, хотя не все гаджеты Google Desktop могут работать в «среде» iGoogle и наоборот (скажем, если применен специфичный программный модуль, использующий API Win32; есть также функции, которые недоступны на платформе Google Desktop).

Но и это еще не все. Существуют две версии Gadgets API: «унаследованная» (Legacy Gadgets API) и текущая, причем «унаследованная» не означает «устаревшая». Это скорее наиболее общая, универсальная платформа, разработки на базе которой совместимы с максимальным числом платформ (хотя и благодаря некоторому усечению функций). В некоторых случаях даже рекомендуется использовать именно «унаследованную» версию API, например, при необходимости установки гаджета на внешнем сайте.
Новая версия API в документации Google обычно обозначается как пространство имен gadgets.*. Функциональность и возможности в целом соответствуют Legacy Gadgets API, но кроме того, предоставляется возможность создавать разработки, интегрированные с подсистемой OpenSocial (функционирующие во всех социальных сетях, совместимых с этим стандартом), специализированные графические средства, подсистема авторизации, загрузки данных, управления шаблонами и др. Далее в примерах этой статьи мы ограничимся только Legacy Gadgets API, вопросы работы с прочими версиями будут рассмотрены позднее.

среда, 18 июня 2008 г.

Итак, близятся предварительные итоги первого месяца конкурса. Разработки продолжают поступать, хотя конечно, летнее настроение захватило всех. Напоминаем, что среди призов конкурса — субноутбук ASUS Eee PC, плееры и полезные аксессуары.

Информация для разработчиков, зарегистрированных на beta.pcmag.ru: напоминаем, что в конце месяца информация о текущих версиях разработок, открывается для публичного доступа, так, что пожалуйста, у позаботьтесь об оформлении страничцы (как минимум, рекомендуется заполнить поля "Условия использования" и "Домашняя страница".

воскресенье, 8 июня 2008 г.

Структура гаджета и API

Программные интерфейсы, доступные разработчикам Google Gadgets (как «унаследованный», так и gadgets.*), ясно структурированы и позволяют реализовать практически любые идеи. Единственное ограничение накладывается скорее соображениями скорости работы и требованиями к пропускной способности каналов связи. Строго говоря, возможность подключения внешних модулей предоставляет возможности создать гаджет даже с трехмерной интерактивной игрой (благо, сегодня существуют «движки» 3D-графики для онлайновых применений). И это первое, о чем следует помнить разработчику.

Рассмотрим особенности внутренней организации гаджета и доступные API на примерах разработок, представленных на конкурс гаджетов, организованный компаниями Google и журналом PC Magazine/RE (подробнее о конкурсе можно прочитать в блоге проекта, http://ru-googlegadget.blogspot.com/).

Самый простой способ создания гаджета — воспользоваться заранее подготовленными экранными формами, доступными с персональной страницы iGoogle. Работа с ними предельно проста: достаточно заполнить несколько полей, получить код или кликнуть по ссылке добавления гаджета на Web-страницу. В то же время такие разработки не представляют особого интереса, поскольку их функциональность довольно невелика.

Разработчику, желающему воплотить более оригинальную идею, чем трансляция RSS-потока или демонстрация фотографий из Flickr, целесообразно воспользоваться онлайновым редактором, размещенным по адресу http://code.google.com/intl/en/apis/gadgets/docs/legacy/gs.html#GGE. Эта утилита, помимо базовых функций редактирования программного текста, содержит большой набор примеров — зачастую после их изучения можно обойтись даже без чтения документации; как уже говорилось, структура API вполне стройна и очевидна.

Обратите внимание: XML-файл должен предоставляться в кодировке UTF-8. Теоретически можно указать и другие кодировки, однако в этом случае API ядра системы управления гаджетами может работать некорректно (русские буквы просто преобразуются в спецсимволы HTML). При необходимости использовать русский язык в текстах (например, в диалогах) файл следует конвертировать в UTF-8 (а лучше использовать специальные функции подсистемы «интернационализации», но их мы рассмотрим в следующих обзорах). Самый наглядный способ — просто скопировать исходный текст гаджета в окно редактора и сохранить файл (он автоматически будет размещен на сервере Google).

Чрезвычайно полезная возможность, реализованная в редакторе, — предварительный просмотр. Разработчик может оперативно оценить внешний вид своей разработки и, что важнее, ее работоспособность. Кроме того, там же можно загрузить завершенную программу в глобальный каталог гаджетов Google.

Структура XML вполне очевидна, следует только отметить, если программный код разработки размещается в ее теле (используется тег ), а не во внешнем файле, то его следует обрамлять сигнатурами , указывающими XML-парсеру на то, что это — не часть структуры XML-файла, а данные, которые следует передать для обработки в неизменном виде (CDATA — это Character Data, стандартное XML-определение). Обычно в этом поле содержится не только HTML, но и JavaScript, который и обеспечивает прикладную функциональность гаджета.

Листинг 2. Гаджет, содержащий ссылку на программный модуль


title_url="http://gagdetmaster.
googlepages.com/"
category="games"/>



Разработчик данного гаджета разместил исходный текст программы на собственном сайте, ссылка на который размещена в атрибуте href тега . Это позволяет эффективно отделить функциональную часть модуля от интерфейсной. Такой подход накладывает и несколько ограничений. В частности, необходимо в явном виде декларировать необходимые разделы API гаджетов и выполнять специальную обработку адресной строки, передавая параметры вызывающего модуля. Иными словами, роль iGoogle здесь практически сводится к выводу внешнего содержимого в заданном фрейме, ну и небольшой библиотеки полезных функций. Это не то, чего бы хотелось.

В то же время такая техника может быть полезна, если гаджет получается очень объемным и (или) его функциональность вынесена в модули, подготовленные с помощью Flash/Flex, Silverliht и др. (хороший пример: размещение в теле гаджета видеороликов, транслируемых с помощью внешнего Flash-плеера). Тег описывает реквизиты разработки, к этому тегу мы еще вернемся.

Листинг 3. Гаджет, извлекающий данные из RSS- или XML-потока


scrolling="true"
author_email="info@antivirus-digest.net"
author="info@antivirus-digest.net"
width="340" height="230"
description="Рейтинг антивирусов"
thumbnail="http://antivirus-digest.net/img/current_week_antivir.png"/>

function displayRSSData() {
// Адрес RSS/XML-файла для загрузки
var url = "http://antivirus-digest.net/rss.php";
//Загружаем данные, в случае ошибки сообщаем пользователю
_IG_FetchXmlContent(url, function (response) {
if (response == null || typeof(response) != "object" || response.firstChild ==
null) {
_gel("content_div").innerHTML = "Сбой при загрузке";
return;
}
// Начало формирования HTML-текста (часть неинформативных строк, связанных
// с оформлением, в листинге опущена)
var html = "";
//Разбираем полученный массив информации, извлекая ключи и их значения
var itemList = response.getElementsByTagName("item");
for (var i = 0; i < itemList.length ; i++) {
var nodeList = itemList.item(i).childNodes;
for (var j = 0; j < nodeList.length ; j++) {
var node = nodeList.item(j);
if (node.nodeName == "title") {
var name = node.firstChild.nodeValue;
}
if (node.nodeName == "description") {
if (node.firstChild.nodeName == "#cdata-section")
var data = node.firstChild.nodeValue;
}
}
// В цикле добавляем значения переменных в переменную, содержащую HTML-код
html += name;
html += "
";
html += data;
html += "
";

}
html += "
";

// Выводим сформированный HTML-текст
_gel(‘content_div’).innerHTML = html;
});
}
//Важный момент: эта функция обеспечивает извлечение свежих данных из XML-потока
// при загрузке гаджета
_IG_RegisterOnloadHandler(displayRSSData);




Более сложный пример: гаджет, загружающий данные XML с внешнего (по отношению к iGoogle) сайта. Эта разработка была предоставлена проектом «Антивирусный дайджест» (www.antivirus-digest.net). Сайт (на нем размещается рейтинг антивирусов), формируемый, как заявляют создатели, «на основе реальных данных». На сервере размещается виртуальная машина, которая играет роль жертвы для вирусов, «троянов», червей, затем проверяется несколькими антивирусами, после чего формируется еженедельный дайджест успехов разных антивирусных программ в ловле всяческой «заразы». Данные рейтинга доступны в RSS, откуда их и извлекает гаджет.

Логика работы вполне прозрачна: загружается XML (посредством функции _IG_FetchXmlContent), формируется структура записей, откуда и извлекаются данные. Обратите внимание: второй параметр _IG_FetchXmlContent — функция, которая определяется по месту вызова; она содержит практически всю функциональность разработки, связанную с генерацией HTML. Функция _gel — просто короткий синоним для вызова JavaScript document.getElementById(), _IG_RegisterOnloadHandler более интересна — она позволяет зарегистрировать в системе функцию-обработчик события «загрузка гаджета».

API гаджетов разделен на две основные группы: ядро и расширения. Среди функций первой группы — средства и объекты для управления подсистемой хранения пользовательских данных, используемых для настройки параметров гаджета (_IG_Prefs()). Разработчику доступны инструменты для создания типизированных параметров (строка, целое число, булева переменная, массив). Кроме того, там же содержатся API общего назначения, такие, как загрузка текстового и XML-содержимого (что и использовано в листинге 3), средства для управления некоторыми событиями (_IG_RegisterOnloadHandler) и изображениями (_IG_GetImage, _IG_GetCachedUrl).

В «расширенных» библиотеках размещаются группы функций для выполнения специальных задач: динамическая настройка высоты окна гаджета (модуль dynamic-height), управление интерфейсными вкладками (tabs), обработка событий «перетаскивания» (drag), вывод табличных данных (grid), блокировок (locked-domain) и др.

четверг, 29 мая 2008 г.

Новые

Рейтинг антивирусов "в реальных условиях" сайта http://antivirus-digest.net/

http://beta.pcmag.ru/node/5

Правила оформления работ на конкурс

К участию в конкурсе допускаются любые разработки, так или иначе связанные с онлайновыми API и службами Google: гаджеты для страницы iGoogle.ru, разработки на базе Google Map, автономные программы, взаимодействиующие с Web-службами Google и др.

Представленные на конкурс разработки проходят технический контроль экспертов журнала PC Magazine/RE. Для организации процесса тестирования разработку необходимо разместить в системе отслеживания ошибок по адресу: http://beta.pcmag.ru/

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

По вопросам участия, оформления, размещения разработок и др. можно связываться по адресу newsdesk@pcmag.ru, ответственный специалист Игорь Новиков.