Denis Gladkikh

outcoldman

My personal blog about software development

  • 04 Feb 2013
  • outcoldman, Windows 8, gMusic
  • 0 comments

Я очень долго выбирал какое будет мое первое приложение для Windows 8. Идеи были разные. До того как я сел писать клиент для Google Music я начинал и забрасывал около 5 разных приложений. В зависимости от приложения я так же выбирал язык: HTML вместе с JavaScript, либо C# и XAML. Во всех приложениях до gMusic я пытался использовать JavaScript, откуда-то во мне есть тайная любовь к JavaScript. Но все же после очередной попытки я понял, что разрабатывать на JavaScript для меня необоснованно дорого по времени. Пробовал я и TypeScript, с которым у меня уже есть небольшой опыт по работе, но у него нет коробочной поддержки разработки Windows 8 приложений на данный момент. Главная проблема, которую встретил: при использовании mixed кода, приходится описывать все declare файлы для managed/native библиотек, если хочется их использовать в приложении.

В итоге я сдался и решил вернуться к старому доброму C# и XAML.

Идея

Как я уже говорил, идей было предостаточно. Одна из первых идей была написание простого аналога Windows Live Writer. Для него я как раз и выбрал связку HTML + JavaScript, так как при помощи HTML5 тега ContentEditable сделать Rich Text редактор очень просто. Потратил около пары недель на написания прототипа и понял, что занимает это все необоснованно много времени, и полноценный клиент я напишу только через полгода. Более того, я не предвидел популярность для этого приложения. В результате я стал метаться от идеи к идеи, пытаясь найти что-нибудь действительно интересное для меня.

Я меломан со школы, слушал и слушаю практически все, от непонятного многим людям IDM, Noise или Breakcore до Scorpions или Король и Шут (только что вернулся с концерта Muse). Помню, что основным увлечением в школьные времена для меня было откладывание денег с обедов и мороженного на покупку кассет с каким-нибудь известным только на Украине альбомом-сборником The Prodigy. В студенческие годы я начал траться уже на CD. А сейчас трачусь на Amazon MP3, Google Music Play и Microsoft Xbox Music. Пробовал пользоваться подписками, вроде Microsoft Zune Pass, поначалу понравилось, но для меня выбор там слишком маленький. Поэтому отказался в конце прошлого года от Zune Pass в пользу локального хранилища и покупки тех альбомов, которые мне действительно интересны.

А вот 20 ноября я познакомился с сервисом Google Play Music, который предоставляет возможность для хранения 20 000 песен бесплатно в облаке. На самом деле даже больше, чем 20 000, так как песни, купленные на Google Play не идут в счет (на это, видимо, и делается расчет). В итоге я подсел на этот сервис. Начал изучать клиенты, которые были для Windows Phone и Windows 8. Все было огромным разочарованием. Хорошо, что на десктопе можно было пользоваться браузером, но из-за того, что постоянно открываешь и закрываешь вкладки браузера – легко теряешься в них и сложно искать вкладку с Google Music. В итоге я понял, что это и есть интересный проект для меня. Написать что-то, чем бы я был бы рад пользоваться сам. В стиле Джобса.

Реализация

Первым делом я честным образом отправил письмо в Google с вопросом об API, и о том, собираются ли они писать приложение под Windows 8 для этого сервиса. Получил отрицательные ответы на оба мои вопроса. Полазил по интернету, нашел несколько неофициальных попыток воссоздать API для этого сервиса, один на Python, один на .NET. Python реализация была достаточно неплоха, а вот .NET реализация была просто невообразимо ужасна, да и реализовано там было только загрузка Playlists. Так же я заметил, что в Apple Store существует неофициальный клиент для Google Music, что подтолкнуло меня на мысль, что Google по крайней мере не блокирует такие клиенты.

В результате, я вооружился Fiddler2 и начал изучать все запросы, которые осуществляет браузер к Google Music. Самая большая проблема была аутентификация, а так же удержание сессии больше суток, с этим я намучался. Более того, нормальное удержание сессии до сих пор держу в бета тестировании, так как не до конца уверен, что сделал все верно. А вот реализовать все остальное, вроде редактирование плейлистов, оказалось очень просто, так как нужно было просто воссоздать запрос, который отчетливо можно было проследить в Fiddler2.

Всю навигацию внутри приложения я сделал на контролах, не пользовался никакими Page или еще чем-нибудь, реализовал достаточно простой Navigation Service. Вообще, я заметил еще со времени Windows Phone, что, если хочется хороший performance на мобильных устройствах – нужно стараться меньше использовать Bindings и стандартные контролы для отображения списков, а просто делать специализированные Layout контролы, отнаследованные от Panel. Собственно, этим я сейчас и занимаюсь для новой версии – улучшение производительности для Surface при помощи отказа от GridView/ListView и перехода на собственные Panel (со своей собственной виртуализацией). Посмотрим на сколько получится улучшить производительность и usability. Как закончу – просвещу этому отдельный пост.

Вообще, знакомство с Windows Runtime было достаточно увлекательным для меня. Вроде все тот же .NET, а чувствуешь себя как новичок. Так, когда я реализовывал свой собственный IRandomAccessStream (чтобы улучшить буферизацию треков), я наткнулся на такое огромное количество вопросов с тем, как правильно писать или читать в/из IBuffer, как непросто было найти эти extension methods в System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBufferExtensions. И я потратил, наверное, около 30 минут на то, чтобы разобраться, как мне сохранить картинку по url локально на диск.

Результат

О результате пока сложно говорить, так как версия пока не очень-то функциональная. Она еще во многих вещах уступает браузеру (в некоторых выигрывает, конечно же). Но небольшие результаты уже есть. Приложение находится на 12 месте в списке бесплатных приложений категории Music & Video (USA). Его скачивают более 500 раз за день уже в течение 30 дней (более 15 000 загрузок за первый месяц). Пользователи покупают версию без рекламы, причем достаточно активно. Стандартный процент покупок на количество скаченных версий – 1-2%. Покупки осуществляются, в основном, из США, дальше идет Германия, где покупок в 10 раз меньше, остальные страны можно просто делать не target audience (это еще потому, что Google Music не открыт для всех стран). Был удивлен одной покупкой из России.

Ну а кто еще не видел приложение, его можно найти по этой ссылке http://apps.microsoft.com/windows/app/gmusic/939f0859-1413-4a52-9ab6-6e50405c8c2e.

Comments