Open Birthday 13.05

Сегодня мне 22. В этом году захотелось последовать ежегодному примеру Дмитрия Сошникова и устроить Open Birthday. Любой желающий может присоединиться ко мне в это воскресение 13 мая в Граблях на Пятницкой (м. Новокузнецкая), начиная с 14:00.
Основные правила:

  • Придти может любой желающий, который хочет пообщаться {со мной}/{моими друзьями}
  • Приходить только в хорошем настроении
  • В целом вы сами заботитесь о своей сытости и пьяности, но по кружке чего-нибудь я обеспечу
  • Никаких подарков. (Если же это противоречит вашим моральным принципам, то можете сделать так)

Увидимся!:)

Like!
0

Выступление на DevCon’12

Получил очень радостную новость: наш с Филиппом Пафиловым доклад “Секреты быстрой разработки привлекательных приложений для Windows Phone 7.” приняли на DevCon’12. До встречи на конференции или смотрите нас онлайн! :)

Like!
0

MSP Toolkit beta

Еще в октября мы релиши объединиться силами студентов-партнеров Microsoft и собрать все наши наработки для Windows Phone 7 в одну библиотеку. Да, их не так много, но мы надеемся, что они позволят экономить вам время так, как экономят нам.
Когда приходится разбирать HTML, полученный с какого-нибудь сайта, очень часто сталкиваешься с кодировками, отличными от UTF-8, которые не поддерживаются Windows Phone, и в такой ситуации вам может помочь наша библиотека.
Мы поддерживаем 10 однобайтовых кодировок:

  • windows1250 — Central and East European Latin
  • windows1251 — Cyrillic
  • windows1252 — West European Latin
  • windows1253 — Greek
  • windows1254 — Turkish
  • windows1255 — Hebrew
  • windows1256 — Arabic
  • windows1257 — Baltic
  • windows1258 — Vietnamese
  • windows874 — Thai

Такой код позволит работать с кодировкой Windows1251:

Как часто нужно скрывать блок рекламы в платной версии или делать какую-то функциональность недоступной в триальной?

Помню как писал статью в этот блог про генерацию изображений для Live Tiles находу, теперь это можно делать с помощью нашей библиотеки.

  • Тайл как у сообщений:

  • Тайл с расположением картинок в виде мозайки:

  • Тайл, позволяющий отображать элементы TexbBlock и Image:

Также есть еще 4 перегрузки метода GenerateTile. Все картинки сохраняются в формате PNG, что позволяет им подстраиваться под тему телефона.
Библиотека доступка в NuGet:

Или на нашей страничке на codeplex: http://msptoolkit.codeplex.com/.

Like!
2

WP7. Использование конвертеров для отображения данных.

Сделаем небольшой перерыв перед заключительной частью из серии про авторизацию через сторонние сервисы и потратим немного времени на конверторы в Silverlight. Они использутся для преобразования какой-то произвольной информации, в данные, которые могут быть отображены в графическом интерфейсе.

Когда некий элемент управления принимает тот же тип данных, то в xaml все очевидно:

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

Пусть мы пишем приложение на Silverlight + XNA. В этой ситуации UI кнопок навигации может существенно отличаться от стандартного, и локализация на другие языки обычным способом скорее всего будет затруднена. Решим эту задачу через конверторы.

Кнопки будут представлять из себя обычные картинки:


Конвертер – это класс, реализующий интерфейс IValueConverter, который содоржит 2 метода: Convert и ConvertBack. Последний используется, если режим биндинга «TwoWay». Сам класс:

В этом коде осуществляется возвращание Uri картинки в зависимости от языковых настроек пользователя.

В xaml надо добавить соответствующую сборку:

А также сам конвертер в список доступлных ресурсов:

Здесь Key – под каким названием этот ресурс будет доступен в xaml.

Завершающий штрих – код биндинга данных для Uri изображения:

В том случае, если нужно преобразоывать какие-то входные данные (а не системные, как в примере), то:

Переданное для конвертации значение будет находиться в переменной value, которую нужно не забыть привести к необходимому типу данных.

Скачать исходный код можно тут: http://dl.dropbox.com/u/1492419/Converter.zip. Надеюсь, кому-нибудь пригодится :)

Like!
1

Первая демонстрация Windows 7 в МЭИ

Сегодня провели вместе с Владимиром Суховерхим первую демонстрацию возможностей Windows 7, позволяющих существенно экономить время, для студентов первого курса ИРЭ. Большой спасибо Microsoft Innovation Center в МЭИ за поддержку. Пара фоток:

Like!
1

WP7. Авторизация через сторонние сервисы. Часть 3. Google.

В третье части поговорим о Google. Эта компания не ищет легких путей, потому алгоритм авторизации немного отличается от предыдущих:

  1. Получить Url для авторизации и одноразовый код;
  2. Перейти по этой ссылке, дать пользователю ввести его личные данные (логин/пароль), затем он должен ввести одноразовый код и дать разрешение на использование его данных;
  3. Получить токен и токен для обновлений.

У Google есть библиотека для работы с API через .NET, но на Windows Phone она напрочь вешает операционную систему, потому будем пользоваться обычными REST запросами. Для этого поставим специальную библиотеку через NuGet для упрощения работы с ними. Пусть это будет RestSharp, подключим два необходимых пространства имен:

Библиотека от Newtonsoft для разбора JSON поставится автоматически как необходимая зависимость для корректной работы RestSharp. Помните, что для авторизации вам необходимо получить специальные ключи и ссылки от Google: GoogleClientID, GoogleClientSecret, GoogleRedirectUri (передаются в заголовках запросов), а также выбрать список необходимых разрешений, в нашем случае просто доступ к списку контактов:

Созданим клиент для API:

Подпишемся на событие загрузки страницы:

В обработчике создадим запрос для получения Url для авторизации:

Получив Url, покажем пользователю эту станицу:

Google все данные передает в json, потому с помощью DeserializeObject мы делаем десериализацию данных. Кстати, отдаваемый json очень странный – зачем-то содержит символы для перехода нв новую строку.

Как только в url на переадресацию будет строка, содержащая «https://accounts.google.com/o/oauth2/device/approval?as=», необходимо вытащить из этого url специальный временный код, который можно обменять на токены:

Теперь можно получить токены:

Исходный код примера можно скачать отсюда (проверено на HTC Mozart): http://dl.dropbox.com/u/1492419/GoogleAuthorization.zip

Like!
13

WP7. Авторизация через сторонние сервисы. Часть 2. Twitter.

Принцип авторизации через твиттер во многом аналогичен таковой же через facebook, то есть нужно пройти следующие шаги:

  1. Получить специальную ссылку на страницу авторизации;
  2. Показать эту страницу в браузере и дать пользователю авторизоваться, а также разрешить приложению использовать его данные;
  3. Получить токен и секретное слово.

Графический инерфейс ничем не будет отличаться от такового же в примере для facebook. К сожалению, twitter не предоставляет какой-либо библиотеки для работы со своим API, потому будем пользоваться сторонней – TweetSharp (конечно же загрузим через NuGet и подключим соотвествующее пространство имен: using TweetSharp;), которая является оберткой над библиотекой, строящей REST запросы.

Создадим объект класса TwitterService, входными параметрами конструктора которого будут уникальные ключи, полученные на сайте https://dev.twitter.com/.

Теперь необходимо сделать запрос на получение уникальной (для наших ConsumerKey и ConsumerSecret) ссылки на страницу авторизации:

Первый параметр в методе GetRequestToken – это Url, на который произойдет переадресация после успешной авторизации (к сожалению, пока не удалось от этого избавиться, может вы знаете решение?).

Обрабатываем полученный результат:

Ждем, когда пользователь введет все необходимые данные и приложение будет переадресовано на страницу со специальным кодом верификации, который и обменяем на токен и секрет (разбор Uri не самый элегантный, но этой цели и не преследует данная статья):

Из ответа получаем токен, секрет и идентификатор пользователя, которые можно хранить для повторной авторизации, а также привязки аккаунта в twitter к какой-либо другой учетной записи.

Скачать пример можно отсюда (проверено на HTC Mozart): http://dl.dropbox.com/u/1492419/TwitterAuthorization.zip. Не забудьте вставить свои ConsumerKey и ConsumerSecret и обернуть все в блоки try-catch.

Like!
14

WP7. Авторизация через сторонние сервисы. Часть 1. Facebook.

В огромном количестве сервисов присутствует возможность привязать аккаунт какой-нибудь социальной сети для упрощения входа в систему. Авторизации через них на Windows Phone и будет посвящена небольшая серия статей в моем блоге. Начнем с facebook.

Facebook – крупнейшая мировая социальная сеть, предоставляющая отличную библиотеку для работу из .NET, именно ее и будем использовать для авторизации (через протокол oAuth, о котором можно почитать, например, на Википедии: http://ru.wikipedia.org/wiki/OAuth).

Что необходимо иметь для привзяки учетной записи от стороннего сервиса?

  1. Нужно знать некий уникальный идентификатор в этом сервисе (email в facebook, имя в twitter и т.д.);
  2. Получить набор токенов для отправки и получения различных данных.

В целом алгоритм авторизации через facebook будет выглядеть следующим образом:

  1. Получить Application Id и Application Secret (это можно сделать в центре разработчика на сайте facebook и будем считать, что они у вас уже есть);
  2. Выбрать необходимый список разрешений (при авторизации пользователь будет видеть на что соглашается);
  3. Авторизоваться, т.е. получить токен;
  4. Запросить email пользователя.

В списке разрешений у нас будет только один элемент, который отвечает за права на доступ к email: “email”.

Приступим непосредственно к реализации самой авторизации и добавим библиотеку от facebook для этого (через NuGet).

Подключим пространство имен:

При авторизации через facebook в браузере открывается специальная страница, на которой пользователь вводит свои личные данные, а также дает разрешение на использование запрашиваемых функций API. Для этого нужно получить ссылку на эту страницу, которая генерируется на стороне facebook в зависимости от Application Id и Application Secret.

В результате выполнения этого кода мы получим желанный Url, строка loginParameters["response_type"] = “code”; говорит, что после ввода логина и пароля наше приложение получит специальный временный код, который в дальнейшей будет обменен на токен.

В событии загрузки страницы сделаем переход браузера на полученную ссылку:

Как только пользователь введет свои данные, facebook автоматически перенаправит на пустую страницу, а запрос на переадресацию будет содержать искомый временный код, потому необходимо подписаться на событие webBrowser_Navigated (также помните, что в самом бразуре нужно включить поддержку скриптов: IsScriptEnabled=”True”).

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

Полученный email можно хранить в настройках приложения или отправлять на ваш сервер, если авторизация происходит на нем.

Исходный код (проверено на HTC Mozart) можно забрать отсюда (не забудьте вставить свои Application Id и Application Secret): http://dl.dropbox.com/u/1492419/FecebookAuthorization.zip, в следующей части поговорим про twitter.

Like!
17

WP7. Локальная генерация картинок для Live Tile

Для обновления содержимого Live Tiles существует специальный метод Update, который принимает объект, унаследованный от ShellTileData (обычно это StandardTileData). Он позволяет обновлять следующие данные на тайле: заголовок, счетчик, изображение на передней стороне, а на задней стороне это заголовок, текст и изображение. В ходе обновления своего приложения, показывающего курс валют на тайле я столкнулся с необходимостью рисования текста по передней части тайла. Этому и посвящена эта статья, а в качестве тестовой площадки выступит HTC Mozart.

Чтобы показывать обновляемый текст на передней части live tile необходимо откуда-то получать картинку, содержащую этот текст. Это можно делать двумя способами: тянуть ее с сервера или генерировать на устройстве. Для моей задачи первый вариант не подходит, так как включает необходимость создаение и поддержку специального сервиса. Потому я остановился на генерации на устройстве.

Для этого создадим специальный класс TileGenerator с единственным статическим методом GenerateTile, который и будет отвечать за генерацию и обновление рисунка на тайле.

Первое, что необходимо сделать – задать размеры тайла, шрифт и его размер, а также квадрат, с такими же размерами, который будет заливаться акцентным цветом.

Теперь нужно добавить в проект картинку, на которой будет отрисовываться квадрат и выбранный текст и загрузить ее как BitmapImage:

Следующим шагом является подписание на событие загрузки этого изображения:

В этом коде создаем TextBlock с текстом, который хотим показывать (время, например):

Для того, чтобы можно было обновить изображение на LiveTile нужно, чтобы эта картинка была сохранена локально, то есть в IsolatedStorage.

Заключительным этапом является выбор тайла, который нужно обновить (да, да, их может быть несколько) и вызвать для него метод Update:

Создадим кнопочку, добавим в ее обработчик по нажатию вызов нашего метода, запустим и порадуемся:


Модифицированный метод для работы из Background Agent будет выглядеть следующим образом:

Скачать исходный код проекта можно отсюда: http://dl.dropbox.com/u/1492419/LiveTileImage.zip

Like!
18

Windows Phone 7.5 Mango and HTC Mozart

Well, I usually don’t write any kind of reviews, but my good friend asked me and I can’t refuse (and that’s why it is in English). A week ago I got the HTC Mozart with Russian version of Windows Phone 7.5 Mango and it is time to share my feelings and opinion about this OS and the device in general and will compare it with HTC Desire S which I was using as a default phone since August.

What do I need from any kind of mobile phone?

  1. Email (Gmail, Hotmail, Exchange Online)
  2. Documents
  3. Twitter
  4. Phone calls
  5. Camera
  6. Calendar
  7. Facebook

Let’s start with email. It is good on Android and it is very good on WP7. Of course, it works fine everywhere, but still the UI implementation is more native on WP in conversation mode.

Office on Android is acceptable, it allows me to view MS Office files and it is good enough. But I need more: I want Office 365 integration and nice editing features. WP7 does it as good as no one do. Yes, you can tell me that MS Office files is not everything in the universe, but still it is just my own needs and I’m talking only about my requirements.

Let’s move to twitter now. I like the client on Android; it is extremely well designed and implemented. And the same would be nice on Windows Phone. No, I don’t mean that it works badly, but it needs more time for development of new (Andoid available) features and usability.

Phone calls. Come on! It is a computer with phone features and they work properly :)

I saw some pictures made by different WP7 devices and most of them are nice, but I can’t say that about HTC Mozart. Autofocus is too slow. Driver problem? OS problem? Hardware problem? I have no idea… Hope it is only the driver problem and it would be fixed in the next update.

Calendar is a little bit strange in the begging, especially in comparing with the Android one. But after a few hours it feels very useful and I enjoy it much more. And because of a great Office 365 integration it is very easy to share calendars over the corporate network.

In the begging of its road Windows Phone was positioned as an OS with the deep social networks integration. I even can’t feel when I’m switching from text messages to the facebook chat, it is perfect.

Of course, there is something I don’t like.

First of all, the error message during the first start because of the necessary registration on the Xbox Live. I don’t have an Xbox, I don’t play games at all and I don’t want to spend my time on this registration.

Second, services. It is the most important thing and there are a lot of nice services available for WP7 customers in the USA, UK. System barcode and QR-code reader is the best one I’ve ever seen, but it is not available in Russia. So I have to follow these “region+language” settings to have the best functionality:

  • Display language: English;
  • Region format: Russian;
  • System locale: English (United States);
  • Browser & search language: English (United States).

Third, I have two laptops, on the first of them I have Windows 7 with Russian Language Pack and on the second there is Windows 7 with English Language Pack. Zune on the second one doesn’t work properly with my Hotmail account because of these language settings.

In general I like this OS more than Android, but Microsoft have to work a lot to cover this small (or not?) issues because they create a sense of completeness of the product. I’m enjoying the HTC Mozart. It is a great solution in the “functionality-price” section, it is fast and probably it would be a great business device where Exchange and Microsoft Office are required.

What do you think?

Like!
22