Блог Сергея Байдачного

Мой блог о технологиях

Archive for the ‘Windows 8’ Category

Выбираем язык программирования: Windows 8 vs Windows Phone 8

6 комментариев

 

Изучая вопросы создания приложений для Windows Phone 8 Вы будете натыкаться на некоторые странности, которые тяжело будет понять, если четко не понимать архитектуру платформы, причем как текущую, так и предыдущую. Поэтому, дальше, мы посмотрим на программную архитектуру платформы, но посмотрим со стороны разработчика, который хочет определиться с тем, на чем же ему разрабатывать приложения с современным интерфейсом в самое ближайшее время. В других темах я просто буду ссылаться на этот раздел. Кроме того, поскольку многие считают, что разработка на платформах Windows 8 и Windows Phone 8 ничем не отличается, я начну свой обзор именно с Windows 8 и объясню все отличия.

Итак, все Вы знаете, что Windows 8 представляет собой абсолютно новую операционную систему, ориентированную на пользователей, которые работают как с обычными компьютерами, так и с планшетами или лэптопами с Touch экраном. Это достигается за счет нового интерфейса, возможности работы на ARM процессорах и реализации абсолютно нового программного интерфейса, который получил название Windows Runtime. Именно Windows Runtime является набором тех строительных блоков, которые предоставляют множество элементов управления нового типа, компонентов по работе с данными, сетью и др. То есть, в Windows Runtime есть все то, что необходимо для построения типичного бизнес-приложения. При этом в Windows Runtime практически не используется старый программный интерфейс Win 32 API. Вместо этого Windows Runtime базируется непосредственно на ядре операционной системы (Kernel), а для прорисовки элементов управления использует DirectX.

Обычно Windows Runtime преподносится как новый, объектно-ориентированный, нативный программный интерфейс. По факту, это набор COM объектов. Технология COM отнюдь не нова для платформы Windows и лежит в основе работы этой операционной системы. Естественно, предоставляемый набор COM объектов является абсолютно новым и несет в себе некоторые расширения, хотя и сделанные не очень нативно. Ключевых изменений несколько:

1). Работа с COM объектами в предыдущих версиях Windows выглядела не очень привлекательно со стороны объектно-ориентированного разработчика. Вытянуть информацию о структуре объекта было затруднительно и основные ошибки можно было отловить только на этапе выполнения, а программирование требовало механизмов динамического создания объектов и большого количества проверок. По этой причине, весь набор COM, входящих в состав Windows Runtime, включают дополнительные файлы, содержащие метаданные. Формат метаданных был заимствован из .NET Framework, но, в .NET Framework они находились внутри сборки, а при работе с COM речь идет и стандартных динамических библиотеках. Поэтому ничего не остается, как хранить метаданные в отдельных файлах. Их можно найти в папке C:\Windows\System32\WinMetadata. Причем, если Вы используете утилиту ildasm из .NET Framework 4.5, то эти метаданные можно легко посмотреть и исследовать всю структуру Windows Runtime.

2). Поскольку работа с COM из языков С# или C++ не выглядит «натуральной», то компиляторы и средства разработки были модифицированы таким образом, что весь набор COM из Windows Runtime разработчику представляется как набор классов. Тут разработчик не думает об интерфейсе IUnknown, не обрабатывает HRESULT, а работает с исключениями и др. Все это стало возможно благодаря метаданным и специальным расширениям, преобразующим конструкции, понятные ООП программисту в вызовы COM. Причем в зависимости от языка эти расширения разные и работают по разному. Так, приложения на С++ компилируются в нативный код. То есть все расширения представляют собой синтаксических сахар, а вот приложения на C# продолжают использовать .NET Framework (.NET Core, включающей основные службы и множество утилитных класов) для своей работы. Естественно, создавая свои собственные компоненты для Windows Runtime Вы будете на выходе получать тот же самый COM и файл с метаданными.

3). Поскольку COM является нативной для Windows, а Win 32 API еще активно используется как старыми приложениями, так и некоторыми системными утилитами, то для того, чтобы обязать приложения (разработчика) использовать «правильный» программный интерфейс, в операционной системе появляется отдельный компонент Broker, который контролирует обращение к различным API из приложения, загруженного из Windows Store. Ведь на том же С++ можно попытаться вызвать как Win 32 API, так и Windows Runtime. Тут есть два варианта: если приложение обращается к небезопасному API, например, требующему дополнительного подтверждения пользователя, то Broker перехватывает такую ситуацию и инициирует вызов только в том случае, если пользователь дал подтверждение. Если приложение пытается вызвать API, который не разрешен при публикации приложений в Store, то тут все гораздо проще — Ваше приложение просто не пройдет сертификациюJ Хотя, на своей девелоперской машине Вы можете обращаться к любым методам того же Win 32 API. Следует отдельно отметить, что существует небольшое количество методов из Win 32 API, к которым все еще можно обращаться из современных Windows 8 приложений. Но их очень мало и все они описаны в документации.

Теперь, когда все стало ясно о Windows Runtime, прейдем к вопросу написания игр. И вот тут нас ждет сюрприз. Так, в Windows 8 в этом плане практически не изменилась. Для написания игр используется старый добрый DirectX (версия 11.1). Тут разработчик может использовать либо какие-то фреймворки, либо использовать DirectX напрямую. О сторонних фреймворках мы говорить не будем, их сейчас появляется большое количество. А вот если говорить о фреймворках, предоставляемых Microsoft, то их просто нет. Старый добрый XNA больше не поддерживается, как и управляемый DirectX. Поэтому единственный язык, который тут можно использовать, это С++.

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

 

image

 

К картинки можно придираться, но она отражает то, о чем я писал выше. Тут С++ можно использовать для разработки современных приложений с использование Windows Runtime, утилизировать часть разрешенных методов из Win 32 API и создавать игры с использованием DirectX. Обратите внимание, что небольшую часть DirectX использовать нельзя даже в C++. Это касается динамической компиляции шейдеров и еще пары механизмов (поэтому прямоугольник я не дотянул).

Если говорить о С#, то тут картина несколько другая:

 

image

 

Тут C# работает на основе .NET Framework, последние предоставляет не только свои возможности по работе с коллекциями, сериализацией и др., но и обвертки для Windows Runtime (хотя их можно отнести скорее к возможностям компилятора). Ни о каким DirectX речи и не идет. Нет, Вы можете написать свои обертки для DirectX и нечто подобное уже есть (SharpDX), но для этого Вам потребуется С++J Почему? Ответ тут очень простой и состоит в том, чтобы заставить разработчика создавать приложения с максимальной производительностью. Именно большое количество качественных приложений позволит сдвинуть ARM устройства в сторону потребителя. Напоминаю, что на ARM, в отличии от Intel архитектуры пользователь не сможет поставить старые приложения в режиме десктопа. Ведь на ARM всех старых приложений просто не существовало. Видимо это подход правильный и он сработает.

Если говорить об HTML 5, то тут идея похожа на C#, но вместо .NET Framework идет двигатель, заложенный в основе IE 10, а также библиотека Win JS, которая предоставляет обертки для Windows Runtime в JavaSсript.

А вот теперь переходим к вопросу о том, какой же язык лучше выбрать и как это все может развиваться.

Еще раз отмечу, что мое мнение не отражает официальную позицию, а скорее мое внутреннее ощущение.

Начну с возможных вариантов развития в будущей операционной системе. Если бы я когда-то построил архитектуру системы таким образом, то в следующей версии сконцентрировался бы на двух вещах:

1). Перебросил бы всю утилитную составляющую .NET Core в Windows Runtime и превратил бы язык C# в нативный, избавившись от дополнительной прослойки;

2). Заменил бы DirectX новым API для создания высокопроизводительных графических приложений, сделав бы его в стиле Windows Runtime (частью), что автоматически бы сравняло возможности C# и С++.

Но это все мои фантазии. Реальные же действия по улучшению платформы будут базироваться на отзывах разработчиков. Поэтому все в наших руках.

Перейдем к вопросу выбора языка. Как видите, тут все просто. Если такие технологии как Silverlight и WPF для Вас являются новыми, то однозначно выбирайте С++. Если уж учить новые подходы, то лучше и язык выбирать универсальный. Аналогично стоит поступить, если Вы только начинаете программировать. Но, если Вам нужно написать приложение, а Вы уже имеете знания Silverlight, WPF или JavaScript, то используйте эти языки. Это позволит Вам сразу включится в работу. Правда к большинству игр это не относится, хотя существующие внешние фреймворки могут решить и эту задачу.

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

И еще одна сноска о JavaScript. Помните, что JavaScript является объектно-ориентированным языком программирования, не уступающим по сложности С++. Поэтому, если Вы садитесь за создание Windows 8 приложения на этом языке, то обязательно проверьте свои знания. К сожалению, большинство современных JavaScript разработчиков с этим языком «дружат» не всегда (как ни странно), а все их программирование сводится к созданию небольших методов и утилизации существующих фреймворков.

Вот и все, что я хотел написать о выборе языка для создания Windows 8 приложений. К сожалению, чтобы сделать правильный выбор, нужно понимать архитектуру программной платформы. Поэтому к последним абзацам мы шли очень долгоJ

Теперь перейдем к Windows Phone 8. Во многих презентациях рассказывается, что Windows 8 и Windows Phone 8 обладают общей платформой и имеют одинаковое ядро. Вероятнее всего, так оно и есть, но нам, как разработчикам от этого не жарко и не холодно. Дело ведь не в ядре, а в том программном интерфейсе, который находится над ядром и разрешается разработчику к использованию. Вот сейчас об этом и поговорим.

Сразу хочу отметить, что я не верю в единый пакет для установки на Windows и Windows Phone (пусть даже в будущих версиях). Ведь размеры устройств и назначение достаточно разные для них. Возьмите хотя бы стандартную панель в Windows 8 или аппаратные кнопки в Windows Phone (в Windows 8 их всего одна, а в телефоне – три). Поэтому отвечая на вопрос о необходимости переписывать код с Windows Phone на Windows 8 и наоборот, я всегда отвечаю – да. Понятно, что бизнес-логику нужно сохранить, но интерфейс даже при одинаковых разрешениях экрана…. В общем, к этому вопросу больше не возвращаемся.

Итак, что представляет собой программный интерфейс Windows Phone 8. Первый и самый важный компонент, это SilverLight. Да, тот самый Silverlight, который присутствовал и в Windows Phone 7.x. И сразу же хочу обратить внимание, что в новой версии Windows Phone мы имеет дело не с Silverlight Core или чем-то подобным, а с полноценным Silverlight, который несет в себе не только полезные классы .NET Framework, но и все элементы управления по построению интерфейса. А что же Windows Runtime. Несомненно, Windows Runtime присутствует, но только на самом начальном уровне. Ведь действительно, ядро в Windows Phone 8 и Windows 8 одно и то же. Отсюда появляются дополнительные возможности, например использовать язык программирования С++, который в отличии от Silverlight позволяет создавать нативные приложения. Но, по каким-то загадочным причинам, Windows Runtime значительно урезан по сравнению с большим братом. Можно догадываться об этих причинах – необходимость работы старых приложений и совместимости. Но догадки не отвечают на вопрос о том, что будет дальше и как это будет развиваться. Поэтому я не буду ничего предполагать, а скажу лишь то, что Windows Runtime не содержит ни одного элемента управления! Это означает, что создавать приложения на С++ можно, но только в том случае, если они не имеют интерфейса или для его построения используют DirectX. Попробую зарисовать программную архитектуру:

 

image

 

На картинке C++ и Silverlight никак не пересекаются, просто я решил не рисовать две отдельные картинки. Тут на С++ можно создавать все то, что и в Windows 8, но его возможности ограничены возможностями Windows Runtime и DirectX. А вот Silverlight не только предоставляет окружение для управляемого кода и несет утилитные классы из .NET Core, но и предоставляет весь спектр элементов управления.

Таким образом, выбор языка программирования на Windows Phone 8 не совсем очевиден. Универсального средства в виде С++ тут не, так как интерфейсная часть все еще за пределами Windows Runtime. Таким образом, C# придется использовать и дальше, даже при очень большом желании полностью перейти на С++. Также хочу обратить ваше внимание на то, что Windows Phone продолжает поддерживать и XNA, что диктуется тем же вопросом совместимости. Кстати, из этой картинки становится ясно, почему в Windows Phone 8 присутствует два Location API. Опять же вопрос совместимости. Так, старое API было частью Silverlight, а новое — часть Windows Runtime.

Итак, чтобы выбрать язык(и) программирования для Вашего проекта, обязательно проанализируйте для какой из двух платформ Вы будете создавать приложение. Если Вы планируете покрыть обе платформы, то дальше выбирайте язык исходя из типа приложения и знаний Ваших разработчиков. Для игр выбор не особо велик, а вот с бизнес-приложениями можно экспериментировать достаточно долго. Например, можно писать все на C# или бизнес-логику выносить в отдельную библиотеку на С++ или … В общем, все зависит от ситуации. Надеюсь, что информация выше поможет сделать правильный выбор.

Written by Sergiy Baydachnyy

08.12.2012 at 15:10

Опубликовано в Windows 8, Windows Phone

Tagged with ,

Анонс первой встречи AppClub Kyiv “Запуск Windows 8”

leave a comment »

 

clip_image002

AppClub Kyiv – это клуб по интересам, где разработчики мобильных приложений могут обсуждать один из самых ярких современных трендов — разработку и монетизацию мобильных приложений.

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

Формат: открытые обсуждения с експертами и семинары

Первая встреча запланирована на 26 октября и будет посвящена официальному запуску Windows 8.

На встречу приглашены эксперты:

  • Никита Лукьянец (Microsoft Украина). Эксперт по проектированию интерфейсов, сотрудник департамента стратегических технологий компании «Майкрософт Украина»;
  • Сергей Корж, автор приложения Tutorle для Windows Phone & Windows 8;
  • Александр Краковецкий (DevRain Solutions). Microsoft Regional Director, Microsoft MVP, Telerik MVP, PhD., автор wp7rocks.com, колумнист Forbes Украина;
  • Михаил Галучшко (DevRain Solutions). Microsoft Certified Professional Developer, автор wp7rocks.com, спикер.

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

Когда: 26 октября, 19:00 — 22:00 
Где: ул. Кудряшева 14 (Epam Systems)

Если вы хотите выступить информационными партнерами или спонсором наших мероприятий — пишите на info@devrain.com.

Участие в мероприятиях клуба платное, но в разумных пределах.

Для студентов предусмотрены скидки в размере 50%, для участия вам необходимо прислать скан студенческого. Вы также вы можете получить 50% скидку, если опубликуете статью или обзор своего приложения на сайте wp7rocks.com.

Чтобы быть в курсе обновлений, вы можете лайкнуть нашу страницу в #fb, задать вопрос @msugvnua или @wp7rocks_com с хэштегом #appclubkyiv, написать на info@devrain.com или любым другим удобным для вас способом.

Официальная страница мероприятия – http://wp7rocks.com/AppClub

Written by Sergiy Baydachnyy

24.10.2012 at 07:20

Опубликовано в Windows 8

Tagged with

Украинские приложения в Windows 8 Store: Обозреватель

leave a comment »

Следующее приложение, на котором хочется остановиться, это клиент для популярного ресурса obozrevatel.com. Приложение Обозреватель предоставляет такие возможности как: отображение новостей с 17-ти разделов портала Обозреватель, доступ к нескольким десяткам тематических интернет радио-станций, с возможностью слушать музыку в фоне, а также возможность добавлять свои собственные новости в раздел Мой обозреватель.

На главной странице приложения доступны все новости, разбитые на категории:

clip_image002

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

clip_image004

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

clip_image006

Если Вы хотите опубликовать ссылку на новость в одном из своих социальный аккаунтов, то можете воспользоваться функциональностью Sharing.

Поддерживается интеграция с поиском. При этом результаты разбиты на категории:

clip_image008

Наконец, поддерживается возможность добавить свою новость, снабдив ее фотографиями. Новость тут же попадает на портал:

clip_image010

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

http://apps.microsoft.com/webpdp/app/45aa0d72-9854-4533-9694-47aa62c6e96f

Written by Sergiy Baydachnyy

30.07.2012 at 14:09

Опубликовано в Windows 8

Tagged with

Как попасть в Windows 8 Store

4 комментария

Итак, если верить анонсам, то до выхода Windows 8 осталось совсем мало времени, а это означает, что разработчики получат новый способ зарабатывать деньги, создавая и продавая свои приложения. Естественно, что у многих появилось желание занять «место под солнцем», разместив свои приложения раньше конкурентов и заявив о себе, как о компании (или о разработчике), способной создавать решения на инновационной платформе. Но не все так просто.

Базируясь на опыте Windows Phone и понимая свою ответственность перед пользователями Windows, компания Microsoft разрешает публикацию в Store только тем приложениям, которые прошли ревью со стороны Microsoft и получили «одобрение». Речь идет о соответствии интерфейсов Ваших приложений принципам Metro. Иными словами, если Вы освоили Windows 8 достаточно хорошо, чтобы создавать качественные приложения, то путь в Store открыт.

Естественно, было бы глупо разрабатывать приложение, а на последнем этапе выяснить, что его интерфейс не соответствует Metro стилю и все нужно переделывать. Именно поэтому, по всему миру Microsoft проводить серию мероприятий, где инженер компании может дать рекомендации по интерфейсу приложения еще на этапе прототипа. Иными словами, если у Вас есть наброски интерфейса или едва работающий прототип, то Вы уже на этом этапе можете принять участие в ревью и получить набор рекомендаций по улучшению интерфейса, а затем и токен для публикации готового приложения.

В большинстве случаев ревью проходит в оффлайн режиме (повторное ревью можно провести и онлайн) и требует личного присутствия разработчика. Отсюда и вопрос: когда подобное ревью для украинских приложений будет проходить в Украине.

Отвечаю:

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

Чтобы записаться на ревью, необходимо до 14 августа прислать заявку на email Sergiy.Baydachnyy@microsoft.com.
В письме опишите Ваше приложение: какие задачи оно решает и на какую аудиторию рассчитано, добавьте несколько скринов приложения, а также укажите контакты для связи.

Количество мест ограничено! Поэтому, чем раньше Вы пришлете свою заявку и данные по приложению, тем выше шансы попасть на ревью.

Written by Sergiy Baydachnyy

26.07.2012 at 08:53

Опубликовано в Windows 8

Дни разработчика (весна)

with one comment

Одесса, 3 апреля

Харьков, 10 апреля

Донецк, 11 апреля

Днепропетровск, 17 апреля

Львов, 19 апреля

Севастополь, 23 апреля

Приглашаем Вас на весеннюю серию событий для разработчиков. Основной темой тут выступает новая операционная система Windows 8, предлагающая разработчикам новые возможности по созданию приложений и распространению их среди пользователей.

Расписание

09:30 – 10:00 Регистрация

10:00 – 11:00 Windows 8 для разработчиков

Речь пойдет об архитектуре Windows Runtime, технологиях для разработчиков и перспективах разработки Windows 8 приложений

11:00 – 12:00 Что такое Metro-интерфейс

При разработке приложений для Windows 8 следует учитывать множество факторов и требований, соответствие которым позволит создать настоящее метро приложение. Об этом и пойдет речь в докладе.

12:00 – 12:30 Перерыв, кофе

12:30 – 13:30 Сенсоры, устройства, поддержка touch.

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

13:30 – 14:30 Новые элементы управления

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

14:30 – 15:30 Перерыв, Обед

15:30 – 16:30 Интеграция с платформой

Речь пойдет о возможностях хранения данных в Windows 8 приложениях, интеграции с платформой (Settings, Share и др.), а также о Tiles

Written by Sergiy Baydachnyy

27.03.2012 at 15:33

Опубликовано в Microsoft, Windows 8

Tagged with

Windows 8 для C# разработчиков

4 комментария

Как и обещал, книгу опубликовали в online. Все желающие могут скачать тут:

http://www.msswit.in.ua/book.aspx

Written by Sergiy Baydachnyy

26.03.2012 at 11:09

Опубликовано в Windows 8

Tagged with

Windows 8 для C# разработчиков

8 комментариев

Сегодня я отправил в издательство последнюю главу новой книги «Windows 8 для C# разработчиков». Ура!

Книга была написана совместно с Сергеем Лутаем и планируется для раздачи всем, кто примет участие во втором раунде номинации Metro Style Apps Challenge международного конкурса Imagine Cup 2012. Кстати, последний шанс – 6 марта!

Хочу сразу отметить, что книга не является официальным руководством, может содержать ошибки и не отражает официальную позицию Microsoft. Тем не менее, мы планируем продолжать работать над материалом и к релизу выпустить второе издание, где учтем все ошибки и существенно (в два раза) расширим объем материала.

Данная же версия построена на основе Windows 8 Consumer Preview и имеет следующую структуру:

Глава 1. Общие концепции и средства разработки

Глава 2. Построение базовых интерфейсов

Глава 3. Стили и ресурсы

Глава 4. Графика, трансформация и анимация

Глава 5. Работа с данными

Глава 6. Интеграция Metro приложений с платформой

Глава 7. Работа с сетью

Глава 8. Создание собственных элементов управления

Глава 9. Работа с аудио и видео

Глава 10. Хранение данных и жизненный цикл приложения

Глава 11. Подготовка приложения к публикации

Глава 12. Отладка, тестирование и повышение производительности

 

Выпить по этому поводу не получиться, так как ночью еду в командировку. Эх!

Written by Sergiy Baydachnyy

04.03.2012 at 10:42

Опубликовано в Windows 8

Tagged with

Windows 8 уже на Imagine Cup

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

Сегодня были анонсированы две новые номинации в рамках международного IT конкурса для студентов Imagine Cup 2012, это Kinect Fun Labs и Windows Metro Style App.

Особый интерес представляет вторая номинация, которая связана с Windows 8 и легко может быть освоена украинскими студентами. Номинация состоит из двух раундов и позволяет принимать участие как одному студенту, так и команде, вплоть до 4-х человек. При этом в команду может быть приглашен и ментор.

Номинация состоит из двух раундов.

В раунде 1 студенты (команда) должны пройти опрос, состоящий из 30 вопросов, который позволяет протестировать базовые знания команды в области создания Metro приложений. При этом, опрос может проходить как вся команда вместе, так и каждый член команды отдельно. Во втором случае, балл команды вычисляется как максимальный бал среди всех участников команды. Обращаю Ваше внимание на то, что даты опросов фиксированные и команда может попробовать улучшить свой результат в любом из раундов (если в предыдущем не добрала баллов). Даты опросов: 31 января, 7 февраля, 14 февраля, 21 февраля, 28 февраля и 8 марта. Рекомендую попробовать свои силы в одном из ближайших опросов.

Все, кто прошел в раунд 2, начинают работать над собственным приложением для Windows 8 в стиле Metro. Чтобы успешно пройти раунд 2, необходимо на сайт конкурса загрузить описание Вашего приложения и видеоролик работающего приложения.

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

Обращаю Ваше внимание на то, что команды финалисты будут приглашены в Сидней вместе с их ментором (естественно, за деньги Microsoft).

Written by Sergiy Baydachnyy

20.01.2012 at 09:17

Опубликовано в Imagine Cup, Windows 8

Tagged with ,