Введение
Добро пожаловать, друзья, в мир Windows 8! От имени тысяч дизайнеров, менеджеров, разработчиков, тестировщиков и технических писателей, которые дали этому продукту жизнь, я рад приветствовать вас в мире Преображенной Windows.
И это не какая-то маркетинговая уловка, которая нужна для того, чтобы придать чему-либо, в сущности, не изменившемуся, новый вид, наподобие лозунга: "Новая улучшенная упаковка" на товарах для дома. Нет, Microsoft Windows на самом деле была рождена заново, за более чем четверть века появилось кое-что по-настоящему новое.
Я подозреваю, а, на самом деле - ожидаю, что вы уже имеете некоторый опыт работы с преображенным пользовательским интерфейсом Windows 8. Возможно, вы читаете этот курс, так как вы уже знаете о возможностях Windows 8, которые позволяют ей работать на настольных компьютерах, ноутбуках и планшетных ПК. Эти возможности, дополненные глобальной доступностью Магазина Windows, могут дать вам невероятные бизнес-возможности, занимаетесь ли вы бизнесом, как я люблю говорить, ради славы, богатства, удовольствия или из чистого человеколюбия.
Конечно, мы рассмотрим множество граней нового опыта взаимодействия пользователя и системы на протяжении курса. Однако наша основная задача заключается в рассмотрении совершенно нового опыта взаимодействия разработчика и системы.
Я не говорю об этом в пренебрежительном тоне. Когда я впервые проводил презентацию Microsoft о создании приложений для Магазина Windows, мне захотелось показать слайд, показывающий мир, каким он был в 1985 году. Это было время Рональда Рейгана и Маргарет Тэтчер, время Холодной войны. Это было время видеомагнитофонов и обнаружения вируса СПИДа. Тогда вышел в прокат "Назад, в будущее", Майкл Джексон попал на вершину чартов с "Триллером", и Стива Джобса вышибли из Apple. И именно тогда разработчики впервые испробовали вкус оригинального API Windows и модель программирования настольных приложений.
Долговечность той модели программирования впечатляет. Она оставалась на своём месте более двадцати пяти лет, и выросла до уровня, который позволил ей стать сердцем самой большой деловой экосистемы на планете. Да и сам API, известный сегодня как Win32, так же вырос до размеров самого большого API в мире. То, что сначала выглядело как примерно 300 вызываемых методов, выросло на три порядка, в итоге, хорошо, если отдельно взятый человек способен разобраться хотя бы с частью всего этого. Я, конечно, сам оставил бесполезные попытки всё это охватить.
Поэтому, когда я столкнулся с моим старым другом Кайлом Маршем, осенью 2009-го, сразу после того, как была выпущена Windows 7, и узнал от него, что Microsoft планирует влить свежую кровь в разработку приложений для Windows 8, основанных на её собственных стандартах, я навострил уши. Время шло, и я узнал, что Microsoft представляет абсолютно новый API, который называется Windows Runtime (или WinRT). Это не означает замену Win32, если вы об этом подумали; классические приложения для настольных ПК всё еще поддерживаются. Нет, это модель программирования, построенная с нуля, предназначенная для совершенно нового поколения приложений, ориентированных на сенсорное управление, создающих эффект погружения пользователя в виртуальную среду. Эти приложения вполне могут конкурировать с приложениями, которые существуют на различных мобильных платформах. При разработке этой модели программирования больше учитывалась точка зрения разработчика, нежели системные особенности, в итоге, для реализации ключевых возможностей нужно лишь несколько строк кода - вместо сотен или тысяч строк. Кроме того, WinRT позволяет напрямую, без посредников, разрабатывать собственные приложения с использованием множества языков программирования. Это означает, что новые возможности операционной системы доступны разработчикам без необходимости ожидания обновления некоего промежуточного фреймворка. Кроме того, это означает, что разработчики, имеющие опыт программирования на каком-либо языке, будут чувствовать себя как дома при создании приложений для Windows 8.
Меня порадовали эти новости, так как в последний раз Microsoft делала что-то по-настоящему великое в сфере модели программирования для Windows, было в начале 1990-х, когда была представлена технология, названная Component Object Model (COM), которая и способствовала взрывному росту популярности Win32 API. По иронии судьбы, именно я представлял тогда COM сообществу разработчиков, делая это посредством двух редакций книги "Inside OLE" (Microsoft Press, 1993 и 1995) и в ходе почти бесконечных поездок с выступлениями на конференциях и с визитами в компании-партнёры. История, однако, имеет свойство повторяться, и вот, я снова здесь!
В декабре 2010 я был участником небольшой группы, созданной для того, чтобы написать самые первые приложения для Магазина Windows с использованием доступных частей WinRT API. Мы выбрали, в качестве текстового редактора, Notepad, мы компилировали и запускали приложения, используя командную строку и невразумительные скрипты Powershell, что требовало от нас вручную вводить ужасные хэш-строки. У нас не было документации, за исключением часто неполных функциональных спецификаций. У нас не было отладчика, за исключением методов проб и ошибок и использования window.alert и document.writeln. На самом деле, мы, в основном, работали с HTML, CSS и JavaScript, используя браузер и средства отладки F12, добавляя код, специфичный для WinRT лишь на завершающем этапе разработки, так как браузер не может работать с этим API. Вы можете представить себе, как мы ликовали, когда хоть что-то заработало!
К счастью, совсем скоро стали доступны инструменты разработки вроде Visual Studio Express и Blend для Visual Studio. Весной 2011, когда я проводил много тренингов по разработке Windows 8-приложений для сотрудников Microsoft, процесс разработки стал куда более приятным и быстрым. На самом деле, если в 2010-м нам нужно было несколько недель на то, чтобы программа вывела на экран "Hello World", то уже осенью 2011-го мы работали с компаниями-партнерами, которые за то же время создавали готовые приложения для Магазина Windows.
Как мы увидели, что полностью оправдало наши ожидания, можно создать отличное приложение за считанные недели. Я надеюсь, что данный курс, вместе с дополнительными материалами на http://dev.windows.com поможет вам сделать то же самое, и преобразить ваши собственные проекты.
Для кого этот учебный курс
Это учебный курс о создании приложений для Магазина Windows с использованием технологий HTML5, CSS3 и JavaScript. Наша главная цель заключается в применении этих веб-технологий внутри платформы Windows 8, с учетом специфики такого применения, а не в изучении тонкостей самих этих веб-технологий. В большинстве случаев, я предполагаю, что вы обладаете некоторыми познаниями в области этих стандартов. Мы подробно остановимся на некоторых наиболее важных вещах, таких, как CSS-сетка, которая играет ведущую роль при создании макетов страниц приложений, но, в то же время, я надеюсь, что вы способны будете найти дополнительную информацию о других технологиях.
Кроме того, я предполагаю, что ваш интерес к Windows 8 имеет в своей основе, как минимум, два основных мотива.
Во-первых, вы, возможно, хотите начать разработку настолько быстро, насколько это возможно, возможно, для того, чтобы обрести точку опоры в Магазине Windows как можно скорее. Следуя этой идее, я поместил в начальные главы самые важные сведения о разработке, которые, вместе с разделами "Быстрый старт", немедленно предоставят вам необходимый опыт обращения с инструментами разработки, с API и с некоторыми ключевыми возможностями платформы.
Во-вторых, вы, возможно, хотите разработать приложение наилучшим образом. Такое приложение, которое отлично работает и использует преимущества всех возможностей платформы. Ориентируясь на это, я постарался включить в курс материал, который поможет вам, по меньшей мере, узнать о возможностях оптимизации приложений. (Обратите внимание на то, что особенности Магазина Windows обсуждаются в Главе 6 курса "Программная логика приложений для Windows 8 с использованием HTML, CSS и JavaScript и их взаимодействие с системой").
Множество идей приходит от взаимодействия с реальными разработчиками, которые создают реально действующие программы. Как часть команды Windows Ecosystem, я и мои товарищи, находимся на переднем крае процесса, в ходе которого эти первые приложения попадают в Магазин Windows. Это включает в себя написание кода для таких приложений, процесс поиска ошибок, вместе с сопровождением дизайна, кода, обзоров производительности совместно с командой Windows-инженеров. И одна из моих целей, которые я пытаюсь достичь с помощью этого учебного курса - это предоставить возможность глубокого понимания происходящего многим другим разработчикам, и, в том числе - вам!
Что вам понадобится (Как насчет "Примеров"?)
Для того чтобы работать с этим учебным курсом, вам понадобится Windows 8, установленная на вашем рабочем компьютере вместе с Windows SDK и инструментами разработки. Все инструменты, вместе с большим списком других ресурсов, можно найти здесь: "Загрузки для разработчиков приложений Магазина Windows" (http://msdn.microsoft.com/ru-RU/windows/apps/br229516). В частности, вам понадобится Microsoft Visual Studio Express 2012 для Windows 8. Нам понадобятся и другие инструменты, мы, в ходе работы, рассмотрим их при возникновении необходимости. (Обратите внимание на то, что при создании скриншотов к этому курсу, я переключил Visual Studio из "тёмной" темы, которая установлена по умолчанию, на "светлую" тему, так как она лучше смотрится на белых страницах).
Кроме того, убедитесь, что вы загрузили набор примеров Windows 8 app samples (http://code.msdn.microsoft.com/windowsapps/Windows-8-Modern-Style-App-Samples), и, в частности, загрузили примеры по JavaScript SDK. Мы будем использовать много - если не большую часть этих примеров в последующих главах, вытягивая оттуда участки кода для того, чтобы показать, как много различных задач мы можем решать с помощью рассматриваемых технологий.
На самом деле, одна из второстепенных задач этого учебного курса - помочь вам понять, где и когда использовать эти огромные вспомогательные ресурсы, которые представляют собой лучший набор примеров, который мне приходилось когда-либо видеть в других выпусках Windows. Часто вы сможете найти фрагмент кода в одном из примеров, который делает в точности то, что вам нужно, или, после небольшой модификации, будет соответствовать нуждам вашего приложения. Поэтому я обращаю ваше внимание на то, чтобы вы лично просматривали все примеры на JavaScript, понимали то, что они демонстрируют, и, затем, могли бы использовать их в соответствующих ситуациях. Это, я надеюсь, убережет вас от того, чтобы самостоятельно изобретать то, что уже сделано, что, в итоге, позволит вам работать более продуктивно.
В некоторых случаях я беру один из SDK-примеров и произвожу некоторые модификации, обычно - для демонстрации дополнительных возможностей, но иногда - для исправления некоторых ошибок или для того, чтобы улучшить понимание того, что происходит после того, когда работа над примером завершается. Я включил эти модификации в набор дополнительных материалов к данному курсу, который вы загрузили при загрузке данного документа.
Эти дополнительные материалы, кроме того, включают несколько моих собственных разработок, на которые я всегда ссылаюсь как на "упражнения" для того, чтобы было понятно, что они не имеют отношения к официальному контенту из SDK. (Кроме того, я выделил измененные примеры для того, чтобы было понятно, что они - часть этого учебного курса). Я написал это всё для того, чтобы заполнить пробелы, которые имеются в SDK-примерах, или для того, чтобы предоставить более простую демонстрацию возможностей, которые раскрыты в соответствующих образцах более сложным способом. Кроме того, вы найдёте здесь множество редакций приложения, которое я назвал "Here My Am!". Работу над этим приложением мы начнем уже в "Главе 2" и будем улучшать его на протяжении всего цикла курсов, в который помимо данного курса входят еще два: "Пользовательский интерфейс приложений для Windows 8 с использованием HTML, CSS и JavaScript" и "Программная логика приложений для Windows 8 с использованием HTML, CSS и JavaScript и их взаимодействие с системой". Кроме прочего, это включает локализацию приложения для множества различных языков на финальной стадии работы.
Кроме того, вы обнаружите, что и в каталоге Windows 8 samples gallery (http://code.msdn.microsoft.com/windowsapps/) и на странице Visual Studio sample gallery (http://code.msdn.microsoft.com/vstudio) есть множество дополнительных примеров, которые добавлены другими разработчиками, и, возможно - вами. (На странице с примерами для Visual Studio, кстати, убедитесь в том, что включили отбор по приложениям для Магазина Windows (Windows Store), так как там присутствуют примеры, касающиеся всех платформ, поддерживаемых Microsoft). И, конечно, многие разработчики самостоятельно выкладывают в общий доступ свои проекты.
В этом курсе я иногда ссылаюсь на посты в "Блоге для разработчиков приложений для Windows 8" (http://blogs.msdn.com/b/windowsappdev_ru/). Это - ценный ресурс, на который стоит подписаться. Кроме того, я рекомендую подписаться на обновления блога "Магазин Windows: блог для разработчиков" (http://blogs.msdn.com/b/windowsstore_ru/) - для того, чтобы быть в курсе сообщений о том, как повысить эффективность вашего бизнеса в Магазине Windows. И, если вам интересны подробности о Windows 8, показаные с точки зрения команды разработчиков этой ОС, загляните в блог "Создание Windows 8" (http://blogs.msdn.com/b/b8_ru/).
Замечания о форматировании
В этом курсе идентификаторы, появляющиеся в коде, такие, как имена переменных, имена свойств, функции API, выделены цветом и набраны моноширинным шрифтом. Например, так: Windows.Storage.ApplicationData.current. Время от времени такие, полные имена, включающие в себя полное пространство имен, могут стать весьма длинными, в итоге, иногда нужно будет выполнять переносы таких имен на новую строку. Например, в таком имени, как Windows.Security.Cryptography.CryptographicBuffer.convertString-ToBinary. Обобщая сказанное, я пытался добавлять знаки переноса либо после точки, либо между отдельными словами, но не внутри слов. В любом случае - эти дефисы не являются частью идентификаторов, за исключением CSS, где использование дефисов разрешено (как в -ms-high-contrast-adjust) и в атрибутах HTML, наподобие aria-label или data-win-options.
Иногда вы будете видеть идентификаторы, выделенные другим цветом, как, например, datarequested. Такое выделение особо указывает на события, которые порождают объекты Windows Runtime, для которых имеются специальные условия на добавление и удаление обработчиков событий в JavaScript. Мы поговорим об этом в "Главе 3" . Я напоминаю иногда об этом, но цель данного цветового выделения - напомнить вам об этом, не прерывая поток повествования.
Благодарности
Во многом это - не мой учебный курс, то есть - он включает не только мой опыт и моё мнение о написании приложений для Windows 8. Я, скорее, рассказчик истории, которая была написана тысячами людей из команды Windows, страсть и энергия которых были постоянным источником вдохновления. Написание подобного материала невозможно без работы, которая касается исследований потребителей; написания спецификаций; реализации, тестирования, документирования деталей; пресс-релизов; и написания лучших примеров, которые я когда-либо видел. На самом деле, тексты некоторых разделов появились прямо после общения с людьми, которые проектировали и разрабатывали определенные функции. Я благодарен им за их время, и я счастлив дать им слово, посредством которого они могут разделить свою страсть к совершенству с вами.
Многие заслуживают особого упоминания за их длительную поддержку этого проекта. Во-первых, это Крис Селлс, с которым вместе я писал ранние версии этого курса, и который теперь возглавляет отдел разработки в Telerik. Достойны упоминания Махеш Пракрия, Ян ЛеГроув, Ананта Канчерла, Кейт Бойд и их сослуживцы, с которыми я близко сотрудничал, Кейт Роув, Деннис Фланаган, и Ульф Шу, с которыми я счастлив был работать.
Спасибо Дейвону Мастгрейву из Microsoft Press, который провёл много долгих часов, внося правки в мои главы, повторяя это снова и снова. Мои товарищи по команде - Кайл Марш, Тодд Ландстад, Шай Хайнитц, Патрик Денглер, Лора Хейни, Леон Брагински и Джозеф Нгари неоценимы в том, что они делились тем, что узнали от партнёров. Особое спасибо Кеничиро Танаке из Японского отделения Microsoft, который всегда был первым, кто передавал мне просмотренные главы, и за замечательные исследования различных аспектов платформы, о которых я спрашивал. Низкий поклон тебе, мой друг! Поклон и другим в нашей международной команде экосистемы Windows, которые помогли с локализацией "Here My Am!" для Главы 6 курса "Программная логика приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript и их взаимодействие с системой": Джил Пенне, Сэм Чанг, Селия Пипо Гарсия, Юрген Швертл, Матен Ван де Доспорт, и Ли-Юн Я (и Шай Хинитц на Иврите).
Следующие люди внесли определенный вклад в учебный курс, просматривая главы, отвечая на мои вопросы, обсуждая со мной подробные детали и так далее. Спасибо всем вам за ваше время и поддержку:
Shakil Ahmed | Scott Dickens | Kishore Kotteri | Daniel Oliver | Sam Spencer |
Chris Anderson | Tyler Donahue | Victoria Kruse | Jason Olson | Ben Srour |
Erik Anderson | Brendan Elliott | Nathan Kuchta | Elliot H Omiya | Adam Stritzel |
Axel Andrejs | Matt Esquivel | Elmar Langholz | Larry Osterman | Shijun Sun |
Tarek Ayna | David Fields | Bonny Lau | Rohit Pagariya | Sou Suzuki |
Art Baker | Erik Fortune | Travis Leithead | Ankur Patel | Simon Tao |
Adam Barrus | Jim Galasyn | Chantal Leonard | Harry Pierson | Henry Tappen |
Megan Bates | Gavin Gear | Cameron Lerum* | Steve Proteau | Chris Tavares |
Tyler Beam | Derek Gephard | Brian LeVee | Hari Pulapaka | David Tepper |
Ben Betz | Marcelo Garcia Gonzalez | Jianfeng Lin | Arun Rabinar | Sara Thomas |
Johnny Bregar | Sunil Gottumukkala | Tian Luo | Matt Rakow | Ryan Thompson |
John Brezak | Scott Graham | Sean Lyndersay | Ramu Ramanathan | Bill Ticehurst |
John Bronskill | Ben Grover | David Machaj | Ravi Rao | Stephen Toub |
Jed Brown | Paul Gusmorino | Mike Mastrangelo | Brent Rector | Tonu Vanatalu |
Vincent Celie | Rylan Hawkins | Jordan Matthiesen | Ruben Rios | Jeremy Viegas |
Raymond Chen | John Hazen | Ian McBurnie | Dale Rogerson | Nick Waggoner |
Rian Chung | Jerome Holman | Jesse McGatha | Nick Rotondo | David Washington |
Arik Cohen | Scott Hoogerwerf | Matt Merry | David Rousset | Sarah Waskom |
Justin Cooperman | Stephen Hufnagel | Markus Mielke | George Roussos | Marc Wautier |
Michael Crider | Sean Hume | Pavel Minaev | Jake Sabulsky | Josh Williams |
Priya Dandawate | Mathias Jourdain | John Morrow | Perumaal Shanmugam | Lucian Wischik |
Darren Davis | Damian Kedzierski | Feras Moussa | Edgar Ruiz Silva | Kevin Michael Woley |
Jack Davis | Suhail Khalid | John Mullaly | Karanbir Singh | Charing Wong |
Ryan Demopoulos | Daniel Kitchener | Jan Nelson* | Peter Smith | Michael Ziller |
Яну и Кэмерон - особое спасибо за то, что приехали из Редмонда, штат Вашингтон, чтобы навестить меня в Портленде, штат Орегон (где я живу), и разделили со мной тайский ланч, за которым мы говорили о локализации и многоязычных приложениях.
Я так же хотел бы попрощаться с лишними килограммами, которые сопровождали меня, когда я сидел за компьютером больше, чем следовало. Я уверен, вы ждёте возобновления более привычной фитнес-активности, как и я.
И, наконец, особая благодарность моей жене Кристи, и нашему маленькому сыну Лиаму (ему шесть), которые были со мной всё это время, и которые не были против, когда я тащился поздно ночью или рано утром через весь дом в мой офис.