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

Синхронизация календарей. Google Calendar и SyncML.

Давным-давно телефон использовался исключительно как средство связи. Многие наверное уже и представить себе не могут такое. Те, кто не понимает, может смело проследить как пользуются их телефонами мамы и бабушки. Сейчас телефон это и ICQ, и почтовый клиент и все что угодно, например, особо продвинутые телефоны оснащаются открывалкой для бутылок и расческой. Функциональность каждого телефона сильно отличается, но 95% телефонов выпущенных за последние 3 года имеют в себе календарь.
Использовать календарь можно по-разному. Первые используют его как будильник, другие используют по прямому назначению, создавая задачи и строя планы, остальные не используют вообще. Рано или поздно перед любым человеком, использующим календарь, становится несколько вопросов:
1) Как перенести данные на новый телефон?
2) Как использовать календарь на компьютере?

Первый вопрос достаточно интересный, так как очень мало календарей на телефонах умеет делать экспорт данных, как впрочем и импорт. Для синхронизации был придуман специальный протокол syncML, этот протокол является разновидностью XML, и достаточно прост в реализации, кого интересуют технический подробности, можете найти его описание, в интернете, это сделать не сложно - протокол открытый. С точки зрения пользователя, этот протокол позволяет синхронизировать контакты, задачи, календарь, заметки и вообще все, что угодно, лишь бы это поддерживал сервер и телефон. Тут тоже на телефон ложится ограничение - он должен поддерживать связь с интернетом по протоколу GPRS, EDGE или еще какому. Особо страдающие паранойей могут утешиться и возможность не просто подключения к интернету, но и с использованием безопасных соединений таких как HTTPS с использованием SSL. Если ваш телефон умеет все это, то все, что вам нужно это найти подходящий сервис в интернете, благо доступно их предостаточно. Некоторые очень даже симпатичны и построены по подобию социальных сетей, где можно обмениваться контактами, картинками, смотреть где кто из друзей сейчас находится и тому подобные вещи. Большинство же несет в себе исключительно деловую функцию и решают обе изложенные выше проблемы. Во первых позволяют синхронизировать данные, и предоставляют к ним доступ со своего сайта, иногда удобно, иногда не очень. Некоторые за дополнительную плату, могут предоставить уведомления и напоминания, что тоже удобно, если ваш календарь открыт для начальника и он поставил вам туда задачу или назначил совещание. Я перепробовал несколько таких сервисов, и могу сказать, что большинство из них удобны и предоставляют все основные функции. Пользовался я исключительно бесплатными сервисами, есть и платные, но за деньги они предлагают, лишь дополнительные услуги или убирают наложенные ограничения. Справедливости ради можно сказать, что часто существуют бесплатные аналоги этих услуг или их можно сделать самому, но для этого требуются определенные навыки. А многие из услуг просто узкоспециализированные, и большинству, в том числе и мне, не очень нужные.
Пробуя разные сервисы я искал одно, как синхронизировать это не только с телефоном, но и с чем нибудь другим, что можно использовать для своих целей. Не секрет, что использовать календарь на странице сайта, не очень удобно, требуется доступ в интернет, а хочется делать это offline, при помощи какого-либо софта. Софта для календарей существует великое множество, сейчас их начали встраивать в операционные системы, потому дело это достаточно востребованное. Так, например, в Mac OS X существует iCal, в Windows Vista тоже добавили Windows Calendar, тогда как раньше люди использовали для этих целей Microsoft Outlook или какие нибудь сторонние средства. Описывать множество этих программ не вижу смысла, кому интересно почитает обзоры или сравнит сам, скажу лишь, что для себя я выбрал Mozilla Sunbird:


Продукт этот во первых полностью бесплатный, кросс платформенный (хотя мне это не очень то и надо), и я уважаю все, что делает Mozilla, да к тому же существует разновидность, которая встраивается в используемый мною почтовый клиент Mozilla Thunderbird в виде аддона, называется аддон - Lightning, и представляет собой тот же Sunbird, но встроенный в Thunderbird, чтобы не вводить путаницы дальше я буду писать только Sunbird. Сразу скажу, что для целей этой статьи нам понадобится еще аддон для Sunbird под названием Provider for Google Calendar, который позволяет синхронизировать календарь в программе с online-календарем на сайте Google. Думаю для большинства программ-календарей есть такое расширение или такая функция встроена в саму программу. Так что можно использовать любую другую программу, я же, повторюсь, буду использовать Sunbird.
У нас есть два варианта построения модели компьютер-клиент - мобильный телефон, оба они подразумевают доступ с нескольких компьютеров, это действительно необходимо, например, один компьютер дома, а второй на работе, или один это рабочий компьютер, второй - ноутбук.
Первый вариант подразумевает, что компьютер будет связываться с syncML сервисом и с сервисом Google. Это также подразумевает, что достаточно использовать всего один компьютер с доступом к syncML и остальные только к Google Calendar.

Второй же подразумевает, что компьютеры умеют работать только с сервисом Google.


Первый вариант в реализации достаточно сложен, по крайней мере тем, что необходимо искать софт и устанавливать на каждый компьютер, тогда как второй вариант, с виду проще, но накладывает ограничения на сервис syncML, который должен уметь синхронизироваться с Google Calendar. Скажу сразу первый вариант, хоть мне и получилось реализовать, но это было ужасно: даты плыли, события дублировались многократно. Все из-за того, что слишком много параллельных синхронизаций, тогда как второй вариант являет собой синхронизацию последовательную, что более надежно. Но это, конечно не значит что первый вариант построить нельзя, просто сделать это мне оказалось сложно, и я сделал все по второй моделе и далее я буду описывать как построить именно её.
Итак мы уже имеем на компьютере программу, умеющую работать с Google Calendar. Теперь нам необходимо найти сервис, который будет синхронизировать с ним syncML сервер. Богатые люди могут воспользоваться собственно гугловским сервисом синхронизации Goosync, стоит это добро около 30 фунтов в год. Что по понятным причинам, не дало повода протестировать сервис. (Думаю большинство деловых людей растраты в 30 фунтов в год не напрягут, и дальше они могут не читать. А вот тем, кто привык экономить или по просту не имеет такого количества лишних средств, придется все таки дочитать до конца.) Можно воспользоваться другим каким-нибудь сервисом, который может выгружать календарь, например стандартный сервис от мегафона Prosync, думаю у других операторов тоже есть подобные сервисы, просто у меня именно этот оператор, делать там выгрузку руками, и руками же загружать в гуглокалендаре, что, согласитесь, несколько накладно.
Был найден проект ScheduleWorld, который позволяет делать это автоматически, а именно синхронизировать календарь с Google. Он кстати предоставляет и расширение для Thunderbird, которое позволяет синхронизироваться напрямую, по нашей первой модели. Как все настраивается опишу поподробнее и по пунктам, но перед тем как что-то делать на телефоне или в календаре, лучше всего сделать бэкап ценной информации, такой как контакты и записи календаря, помните, что все делается на свой страх и риск, итак:
1. Регистрируемся на сайте ScheduleWorld.
2. Настраиваем свой телефон для работы с этим сервисом (в preferences есть значения для настройки). Для большего понимания что и как делать, я бы порекомендовал сначала зарегистрироваться на каком-нибудь русскоязычном сервисе, с целью ознакомления как что работает и как что настраивать. Это дало бы большой прогресс в понимании того, что происходит.
3. Создаем новый календарь в Google Calendar.
4. В настройках (все те же preferences) сайта ScheduleWorld есть пункты, там где Single User / Hosted Domains, вводим наши данные, и жмем Find Calendars. После чего в списке выбираем наш календарь, который будет использоваться для синхронизации. Ниже в настройках есть пункты, которые позволяют настроить модель синхронизации, а также включить автоматическую синхронизацию. Нас интересует двунаправленная модель, то есть мы сможем влиять на календарь как с телефона так и наоборот. Автоматическую синхронизацию тоже лучше включить.
5. Настраиваем Sunbird для работы с гугл. Для этого надо там где список календарей, нажать правой кнопкой и выбрать "Создать календарь" (New Calendar). После чего следовать мастеру настройки, не забыв указать, что календарь находится в сети. Адрес календаря в google можно найти в настройках календаря (управление календарями - "имя вашего календаря" - данные календаря), там будет зеленая иконка с надписью ICAL, её адрес и есть адрес календаря.
6. НЕОБХОДИМО ОБЯЗАТЕЛЬНО УБЕДИТЬСЯ, ЧТО ВСЕ КАЛЕНДАРИ(Google, ScheduleWorld и на телефоне) НАСТРОЕНЫ В ОДНОЙ TIMEZONE (временной зоне), иначе события будут дублироваться, даты поплывут, и можно ожидать вообще чего угодно.
7. Вызываем синхронизацию на телефоне.
8. Вызываем синхронизацию с Google в Sunbird (перегрузить удаленные календари или Reload remove calendars). Если после этого календарь остался пуст, не пугайтесь, ниже я объясню почему это возможно.
Данная схема показывает как надо действовать если основной ваш календарь находится на телефоне, если ваш основной календарь находится на компьютере или на каком-то другом сервере, то сделайте выгрузку в формате, который поймет гуглокалендарь и загрузить в него все данные, или сделайте с ним синхронизацию (если есть такая возможность, а обычно гуглокалендарь умеет загружать в себя удаленные календари). После чего нужно зайти в режиме Day View в ScheduleWorld и вызвать там Google Sync (есть в меню там где переключаются виды календаря (месяц/неделя/день)), и только затем вызвать синхронизацию с телефоном. Эта схема должна сработать, хотя я её и не тестировал.
Пришло время рассказать, что удалось понять опытным путем эксплуатирования сервиса. А именно то как это работает:

Цифрами на схеме обозначены номера действий. То есть сначала на каждом этапе идет выгрузка и только потом загрузка. Так по крайней мере было на момент написания этой статьи, эта схема, возможно, не совсем верная и, может быть, её исправят. В чем её неверность? А в том, что по такой схеме, если мы что-то изменим в телефоне, то на компьютере мы это получим только при следующей синхронизации. Но зато, если что то изменить на компьютере, то на телефон это придет при первой же синхронизации. Вызвано это тем, что сервис сначала синхронизируется с Google и только потом с телефоном. Такая схема снижает нагрузку на сервер синхронизации, так как ему не надо анализировать ничего, а просто передавать данные, иначе бы ему пришлось смотреть что пришло от гугла и что с телефона и выдавать только отличия, а так этим занимается телефон и гугл, соответственно. Проще говоря в данном случае главным звеном является Google Calendar.
Если знать эти особенности, то можно легко этим управлять, например если что-то очень важное, можно синхронизироваться и два раза. Если нет желания синхронизироваться два раза можно зайти на ScheduleWorld и нажать google sync в режиме Day view.
Телефон и компьютер как видно нужно соеденять не только, чтобы закинуть новую мелодию или картинку, и делать это не обязательно через шнур или какое то беспроводное средство. Можно связать телефон с компьютером для выполнения важных задач, даже если компьютер находится на другом континенте. Что, скажем прямо, замечательно и очень востребовано.

2 комментария:

Максим комментирует...

Спасибо, приятель, помог! Озаботился этим делом, а тут как раз твоя инфа.

Aleksey комментирует...

Статья хорошая, но на данный момент к сожалению не актуальная. Сервис ScheduleWorld умер =(