Google Push Email и ошибка ActiveSync 0×8000FFFF

Категории: Интернет, Мобильное, Программы
Тэги: , , ,

Не так давно, Google анонсировал функцию Push Email в Google Sync. Проще говоря, если раньше на Windows Mobile-based устройствах (про остальные можно прочесть по ссылке на Google Sync), при синхронизации через ActiveSync с Exchange Server, эмулятор которого был поднят на стороне Google,  можно было синхронизировать только Контакты и Календарь, теперь стала доступна Почта. Фича работает как для обычных GMail аккаунтов, так и для Google Apps.

Однако все оказалось крайне не просто. В момент первой синхронизации почта “не взлетела”, а после пересоздания “партнерства” с сервером Google и вовсе перестала работать. В статусе ActiveSync фигурировала ошибка с кодом 0×8000FFFF. Тем не менее, два дня бесплодных поисков увенчались успехом, и совместными усилиями решение было найдено.

Все дело оказалось в слешах (символ “/”), которые создает GMail при импорте писем, например из Outlook, для разделения папок и подпапок. Смена слешов на точки очень благоприятно сказалась на работоспособности синхронизации и все стало снова в норме.

Подробнее можно почитать тут.

Folder Sharing в Google Docs

Категории: Интернет, Программы, Разработка ПО
Тэги: , , ,

До сих пор средствами Google Docs можно было открывать общий доступ только на документы, и, строго говоря, с точки зрения пользовательского интерфейса ничего не поменялось. Тем не менее, в новой редакции Google Docs API эта фича стала доступной.

Я написал небольшое приложение на Java, для автоматизации этого процесса, до тех пор пока нововведение не будет анонсировано официально.

Для запуска необходимо настроить, например, Eclipse таким образом, и в функцию main скопировать следующий код:

List<String> folderNames = Arrays.asList("Folder1", "Folder2", "...");
List<String> userMails = Arrays.asList("user1@domain.com", "user2@domain.com", "...");
String role = "reader"; // or "owner", "writer", "peeker", "none"
String appsName = "MyComp-MyApps-version";
String username = "username";
String password = "password";
 
if(!role.equals("reader")
&& !role.equals("writer")
&& !role.equals("owner")
&& !role.equals("none")
&& !role.equals("peeker"))  {
	return;
}
 
DocsService client = new DocsService(appsName);
client.setUserCredentials(username, password);
 
DocumentQuery query = new DocumentQuery(new URL("http://docs.google.com/feeds/default/private/full/-/folder"));
DocumentListFeed resultFeed = client.getFeed(query, DocumentListFeed.class);
for (DocumentListEntry entry : resultFeed.getEntries()) {
	for(String name : folderNames) {
		if(entry.getTitle().getPlainText().equalsIgnoreCase(name)) {
			for(String mail : userMails) {
				AclRole aclRole = new AclRole(role);
				AclScope aclScope = new AclScope(AclScope.Type.USER, mail);
				AclEntry aclEntry = new AclEntry();
				aclEntry.setRole(aclRole);
				aclEntry.setScope(aclScope);
				client.insert(new URL(entry.getAclFeedLink().getHref()), aclEntry);
			}
		}
	}
	AclFeed aclFeed = client.getFeed(new URL(entry.getAclFeedLink().getHref()), AclFeed.class);
	for (AclEntry aclEntry : aclFeed.getEntries()) {
	  System.out.println(
		aclEntry.getScope().getValue() + " (" + aclEntry.getScope().getType() + ") : " + aclEntry.getRole().getValue());
	}
}

Здесь списки folderNames и userMails необходимо заполнить соответствующими значениями. Параметр “…” в сигнатуре вызова функции asList – отсебятина, предназначенная просто показать, что количество параметров функции можно смело расширять. В конечном варианте когда его надо убрать. Вместо username и password вписать свои явки и пароли для доступа в к приложениям Google. Ну и роль выставить такую, какую требуется.

Теперь пользователи, с которыми вы разделили доступ к папке, смогут посмотреть на ее содержимое по ссылке: http://docs.google.com/#folders-shared-with-me

Тем не менее, не все сразу безоблачно заработает. Пользователи, которым вы разрешили доступ на изменение, не увидят созданные ими документы в этой папке. Чтобы все заработало как полагается, им необходимо добавить вас в соавторы их документов, а вам необходимо будет перетащить эти документы из общего списка в расшареную папку.

Марк Руссинович. Pushing the Limits of Windows.

Категории: Программы
Тэги:

В рамках выхода 5-го издания Windows Internals Марк Руссинович выпускает статьи под общим названием  Pushing the Limits of Windows. На текущий момент есть 4 статьи:

Pushing the Limits of Windows: Physical Memory

Pushing the Limits of Windows: Virtual Memory

Pushing the Limits of Windows: Paged and Nonpaged Pool

Pushing the Limits of Windows: Process and Threads

Хорошие статьи. Рекомнедую.

Google Apps как замена Microsoft Outlook

Категории: Интернет, Мобильное, Программы
Тэги: ,

Вот и пришло время объяснить, к чему были посты про Google Apps. Я предпринял попытку переползти от старого доброго Outlook, которым пользуюсь начиная с 97 офиса, в лоно cloud applications, под крыло Google Applications. Забегая немного вперед, скажу, что мне это удалось. Так как смысла куда-то переползать, получая ту же функциональность, но через другой сервис, особого нет. Потому надо сначала взвесить все положительные и отрицательные черты, присущие Outlook, и понять к чему стремиться.

Pro:

  1. Отправка/получение почты нескольких аккаунтов.
  2. Календарь с возможностью публикации в интернет.
  3. Организация контактов.
  4. Возможность синхронизации всего вышеперечисленного с мобильным устройством.
  5. Чтение RSS в offline.

Contra:

  1. Невозможность оперативно получить доступ к календарю/контактам/письмам с других машин или мобильного устройства (Miscrosoft Exchange Server по причине его дороговизны как, безусловно, решение, не рассматривается).

Детали того, как я выбирал между разным, как мучился в выборе и чем руководствовался, я опущу, возможно оставлю это на одну из следующих заметок. В сухом остатке я пришел к тому, о чем упомянул в заглавии.

Итак Google Applications. С сохранением всех Pro, изничтожая Contra.

  • Первым делом, настраиваем Google Applications на своем домене. Теперь у нас есть Mail/Calendar/Docs/Talk/Contacs не на gamil.com, а на выбранном нами домене. Почту из старых аккаунтов можно загрузить программой GMail Uploader. Кто не готов поднимать приложения на своем домене, этот пункт может смело пропустить и настроить все для стандартных сервисов Google.
  • Далее ставим из Google Pack: Google Chrome исключительно для сервисов Google Apps и, собственно, сами Google Apps, которые на рабочем столе создадут полезные иконки, о них позже, и заменят mail-клиент по-умолчанию на GMail.
  • Третьим пунктом включаем из Chrome Offline для GMail, Calendar и, если надо, Docs. Плюс, исследуем возможность включения Offline в Google Reader перед отключением связи. Он скачивает все сообщения и можно RSS читать offline. Безусловно, есть некоторое неудобство в том, что надо включать режим stanalone каждый раз руками.
  • Затем настраиваем в Active Sync на мобильном устройстве синхронизацию контактов и календаря с Google Apps сервером. И устанавливаем на кпк Mobile Google Apps, настроив их на использование собственного домена.

Казалось бы все. Но недалеко от каждой бочки меда, если присмотреться, можно обнаружить ложку дегтя. Все дело в ярлыках, которые создал инсталятор Google Apps, о них я писал выше.

Дело в том, что приложение Google Apps отчего-то ничего не знает об активации Offline на сервисах, и когда мы решаем воспользоваться, например, почтовым клиентом по-умолчанию, при отсутствии связи с интернетом, получаем стандартную ошибку о том, что страница не может быть найдена. Нелогично и обидно, но не нерешаемо.

Во-первых, можно в настройках Offline каждого сервиса создать на рабочем столе ярлыки на эти сервисы, но это не очень удобно – обилие одинаковых ярлыков не может не огорчать.
Во-вторых, можно поковырять реестр и настроить клиент по-умолчанию на использование offline версии.
Вторым путем я и пошел. Прикинув все возможные варианты я решил, что клиент по умолчанию будет открывать offline версию почту в Google Chrome, а ссылки “mailto:” его зависимую версию через Google Apps. Поскольку второе уже было настроено самими Google Apps, надо было поменять только первое.

Для этого отрываем редактор реестра и идем к ключу command и меняем там значение (Default) на значение из Offline ярлыка:

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Google Apps (your_domain.tld)\shell\open\command]
@="
\chrome.exe --app=https://mail.google.com/a/your_domain.tld/"

Для изменения поведения ссылок “mailto:” устанавливаем схожее, но с учетом адресата отправителя, в ключе:

[HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Google Apps (your_domain.tld)\Protocols\mailto\shell\open\command]

Вообще, существуют два типа ярлыков.

На Google Chrome:
Почта:

"<Path_to_Chrome>\chrome.exe --app=https://mail.google.com/a/your_domain.tld/"
"<Path_to_Chrome>\chrome.exe --app=https://mail.google.com/"

Календарь:

"<Path_to_Chrome>\chrome.exe --app=https://calendar.google.com/a/your_domain.tld/
"<Path_to_Chrome>\chrome.exe --app=https://calendar.google.com/"

Документы:

"<Path_to_Chrome>\chrome.exe --app=https://docs.google.com/a/your_domain.tld/
"<Path_to_Chrome>\chrome.exe --app=https://docs.google.com/"

И на Google Apps:
Почта:

"<Path_to_Apps>\googleapps.exe --mail.google.com --domain=your_domain.tld"
"<Path_to_Apps>\googleapps.exe --mail.google.com"

Календарь:

"<Path_to_Apps>\googleapps.exe --calendar.google.com --domain=your_domain.tld"
"<Path_to_Apps>\googleapps.exe --calendar.google.com"

Документы:

"<Path_to_Apps>\googleapps.exe --docs.google.com --domain=your_domain.tld"
"<Path_to_Apps>\googleapps.exe --docs.google.com"

Соответственно и пользоваться ими можно в зависимости от ситуации.

Google Apps Contacts. Service not available.

Категории: Интернет, Мобильное, Программы
Тэги: ,

Сегодня методом тыка установил, что если при попытке доступа к Google Applications Standalone Contact Manager (http://google.com/contacts/a/<your_domain.tld>) возникает ошибка “Service is not available for <your_domain.tld>”, то надо действовать так:

  1. Зайти на https://www.google.com/a/cpanel/<your_domain.tld>/ContactsSettings .
  2. Выбрать “Disable Contacts”.
  3. После того как контакты, якобы, отключатся, перейти на главную страницу.

Voilà:

ga_cntcts

Осталось только убедиться, что они и действительно “Active”, и настроить синхронизацию с Windows Mobile-based устройством.