Лекция 1.
Введение в разработку мобильных приложений
Цель лекции: Целью лекции является описание основных принципов разработки для ОС
Android. В лекции рассказывается об устройстве платформы Android, приводится обзор
сред программирования, описываются возможности отладки на эмуляторах и реальных
устройствах. Имеется большое количество разнообразных примеров и иллюстраций. В
конце приведен список дополнительных источников. Лекция является обязательной для
понимания следующих тем курса.
План лекции:
1 Введение. Немного истории
2 Устройство платформы Android
3 Обзор сред программирования
4 Эмуляторы
Эмуляция. Стандартный эмулятор Android
Альтернативные эмуляторы
5 Возможности отладки на реальных устройствах
6 Примеры приложений
Контрольные вопросы:
Ключевые слова: android, операционная система, ПО, очередь, программное
обеспечение, open source project, OPEN, handset, 3D, доступ, стек, ядро, управление
памятью, аппаратное обеспечение, Java, приложение, SDK, IDE, ADT, development, tools,
компиляция, архитектура, вредоносное ПО, application, пользователь, браузер, почтовый
клиент, программа, SMS, менеджер, список, play, файл, package, файлы ресурсов, среда
разработки, IDEA, Windows, atom, arm, инструментарий, cut, лицензия, программный
продукт, запись.
Содержание лекции:
1 Введение
Android - операционная система для мобильных устройств: смартфонов,
планшетных компьютеров, КПК. В настоящее время именно Android является самой
широко используемой операционной системой для мобильных устройств. Подтверждение
этого факта можно найти в таблице, составленной по данным аналитической компании
Gartner.
Операционная Доля рынка (%)
система 2012 2013 2015 2016
Android 72,6 81,9 82,2 86,2
iOS 14,3 12,1 14,6 12,9
Microsoft 2,3 3,6 2,5 0,6
BlackBerry 5,2 1,8 0,3 0,1
Bada 2,6 0,3 - -
Symbian 2,6 0,2 - -
другие 0,4 0,2 0,4 0,2
Общее кол-во: 100 100 100 100
Таблица 1. Мировые продажи смартфонов конечным пользователям, распределение по ОС
Внимательное изучение таблицы позволяет увидеть подавляющую популярность
смартфонов под управлением ОС Android в мире, доля таких устройств не первый год
превышает половину от общего числа купленных смартфонов. Кроме всего прочего, эта
популярность продолжает расти. Очевидно, что армия пользователей смартфонов под
управлением Android будет искать дополнительные приложения для своих устройств, в
связи с этим умение разрабатывать эти самые приложения может принести много пользы
своему владельцу. Например, можно разрабатывать для себя полезные, интересные,
занимательные (нужное подчеркнуть) приложения, а можно, разведав обстановку и
осмотревшись, сделать разработку мобильных приложений своей профессиональной
деятельностью, основной или дополнительной.
Наш курс предоставляет возможность приобрести начальные навыки разработки
мобильных приложений и позволит сделать серьезный шаг к тому, чтобы
профессионально разрабатывать мобильные приложения и получать от этой деятельности
не только моральное, но и материальное удовлетворение.
Данная лекция, призвана ввести слушателя в курс дела. В первую очередь в ней
рассматриваются вопросы становления и развития ОС Android. Для успешного
программирования под Android необходимо понимать внутреннюю организацию и
архитектуру этой платформы, а также полезно знать, какие инструменты и среды
разработки можно использовать. Этим вопросам посвящена основная часть лекции. Кроме
того, в лекции рассматриваются особенности запуска и отладки мобильных приложений.
Немного истории
Рассмотрим, как все начиналось. В 2003 году в Пало Альто, штат Калифорния
Энди Рубин с единомышленниками (Рич Майнер, Ник Сирс и Крис Уайт) основали
компанию Android Inc. Поначалу в компании занимались проектированием мобильных
гаджетов, которые на основе геолокационных данных автоматически подстраивались под
нужды пользователей.
В августе 2005 года Android Inc. стала дочерней компанией Google. Энди Рубин,
Рич Майнер и Крис Уайт остались в Android Inc. и начали работать над операционной
системой, базирующейся на ядре Linux. В Google задумали реализовать мощнейшую
платформу, пригодную к использованию на тысячах различных моделей телефонов. В
связи с этим был создан Open Handset Alliance (OHA) - консорциум, состоящий из более
80 компаний, направляющий свои усилия на разработку открытых стандартов для
мобильных устройств. В состав OHA входят такие гиганты, как Google (организатор и
идейный вдохновитель), HTC, Sony, Dell, Intel, Motorola, Qualcomm, Texas Instruments,
Samsung Electronics, LG Electronics, T-Mobile, Sprint Corporation, NVIDIA и многие другие.
Первая версия Android была представлена 23 сентября 2008 года, версии было дано
название Apple Pie (можно заметить созвучие с прямым конкурентом). Далее так
повелось, что название каждой очередной версии представляет какой-либо десерт, при
этом первые буквы наименований в порядке версий соответствуют буквам латинского
алфавита по порядку. С развитием обновлений Android можно познакомиться в таблице 2.
(источник: http://developer.android.com/about/versions/)
Версия, дата
Основные возможности
выхода
Android 1.0 Первый стабильный релиз, основан на ядре Linux 2.6.25.
Apple Pie Поддерживается: файловая система FAT32, стек интернет-протоколов
сентябрь 2008 TCP/IP; протоколы передачи данных: 802.11 b/g Wi-Fi,Bluetooth 2.0
EDR, GPRS, EDGE, UMTS, HSDPA; фото и видео съемка, однако
недостаточно опций для настройки разрешения камеры, баланса белого
и др.; сенсорные дисплеи и landscape режим отображения данных на
экране, максимальная цветность дисплея - 16 бит (тип HVGA); виджеты
и ярлыки на рабочем столе (Home Screen), сменные обои; регулярные
телефонные функции, контроль вызова, конференц-связь, легкая
интеграция с контактами; полноценный web-браузер на движке WebKit,
HTML, XHTML; e-mail клиент, протоколы POP3, IMAP4, SMTP; медиа
проигрыватель, позволяющий управлять, импортировать, проигрывать
медиа контент в различных форматах
Android 1.1 Исправлены проблемы: с будильником; со спящим режимом; с вызовом
Banana Bread дисплея набора номера; в IMAP ошибки запроса пароля и др.
февраль 2009 Добавлены подробности и отзывы к картам. Добавлена поддержка
вложений из MMS.
Android 1.5 Поддержка экранной клавиатуры (портретный и книжный режимы);
Cupcake акселерометра; видеозапись и воспроизведение видео; приложение для
апрель 2009 работы с YouTube; стерео Bluetooth; функция копирования и вставки
между приложениями (copy&paste).
Новое Linux ядро (версия 2.6.27); автоматическая проверка и
восстановление файловой системы на SD card; новое приложение для
просмотра СТК меню оператора (SIM Application Toolkit 1.0).
Изменено большинство UI-элементов, добавлены новые виджеты;
определение режима (книжный или портретный) работы программы;
анимированное переключение между окнами.
Android 1.6 Новое ядро Linux (версия 2.6.29); поддержка сотового стандарта
Donut CDMA; поддержка разрешений дисплеев: QVGA и WVGA;
сентябрь 2009 обновленный медиа-движок OpenCore 2; движок синтеза речи
(многоязыковой); Gesture Builder поддержка возможности (для
разработчиков) создавать, сохранять, загружать и распознавать жесты,
прикреплять к определенным действиям.
Строка быстрого поиска (прямо с рабочего стола): история и закладки в
браузере, контакты и поиск в интернете; возможность подключаться к
видам VPN: L2TP/IPSEC pre-shared key based VPN, L2TP/IPSEC
certificate based VPN, L2TP only VPN, PPTP only VPN; ускорение
работы камеры; индикатор работы батареи позволяет увидеть сколько
энергии потребляют работающие программы и сервисы.
Обновленный Android Market.
Android 2.0, Нововведения в 2.0:
2.0.1, 2.1 поддержка работы нескольких почтовых аккаунтов одновременно,
Eclair возможность использования совместных папок (входящие, исходящие)
октябрь 2009 для всех аккаунтов; быстрый способ работы с контактами Quick
Contact; поиск по всем сохраненным SMS и MMS сообщениям,
удаление старых после заданного срока; возможности камеры:
вспышка, цифровой зум, сценические режимы, баланс белого, цветовые
эффекты, макрофокусировка; улучшенное расположение виртуальных
клавиш клавиатуры, поддержка комбинированных нажатий клавиш
(технология мультитач), усовершенствованная функция
автодополнения; поддержка HTML5, версии Bluetooth 2.1, новых
профилей OPP и PBAP
Нововведения 2.0.1:
подрелиз версии 2.0, включающий в себя незначительные изменения в
функционале и по большей части bugfix-ом версии 2.0.
Нововведения 2.1: основным новшеством, представляющим интерес
для конечного пользователя, стало добавление анимированных (живых)
обоев, остальные изменения в Framework API, представляют интерес
для разработчиков.
Android 2.2 рост производительности примерно в 3-5 раз за счет использования
Froyo Dalvik Virtual Machine Just-in-Time компилятора; возможности
май 2010 установки приложений на SD-карту, переноса приложений из
внутренней памяти на карту и обратно; возможность использовать
смартфон в качестве точки доступа к интернету, в качестве модема для
других устройств; поддержка Adobe Flash; V8 javascript существенно
повысил скорость работы штатного браузера
Android 2.3, Нововведения:
2.3.3 новое ядро Linux 2.6.35; поддержка открытых мультимедийных
Gingerbread стандартов (VP8 и WebM), форматов ACC/AMR, звуковых эффектов и
декабрь 2010 эквалайзера, фронтальной камеры (интеграция с VOIP(SIP));
обновленный GUI: уменьшение времени доступа к функциям,
повышение общей энергоэффективности системы; улучшение
стандартной клавиатуры системы: поддержка словарей, технологии
мультитач, упрощенное выделение и копирование текста; поддержка
технологии NFC; расширение возможностей работы с датчиками
положения телефона.
Android 3.0- Нововведения 3.0: новое ядро Linux 2.6.36; поддержка файловой
3.2 системы ext4, файловой системы FUSE для MTP устройств; поддержка
Honeycomb режима USB-хост для работы с клавиатурой, мышью и USB-хабами;
февраль 2011 поддержка MTP/PTP; виртуальная машина Dalvik: поддержка и
оптимизация SMP, множество улучшений JIT, улучшенный сборщик
мусора; совершенно новый интерфейс с полноценной оптимизацией
под устройства с большими экранами; поддержка виртуальных рабочих
столов, каждый из которых может иметь свой набор виджетов и
ярлыков; улучшенные и переработанные базовые приложения: Browser,
e-mail и др.
Нововведения 3.1: поддержка работы кардридера; усовершенствован
GUI: доработан менеджер задач, позволяющий переключаться между
множеством различных приложений (в 3.0 только 5 программ
одновременно); возможность менять размер виджетов, как по
горизонтали, так и по вертикали.
Нововведения 3.2: расширен спектр поддерживаемых планшетов;
возможность автоматического масштабирования приложений для
отображения на более крупных экранах.
Android 4.0, Нововведения:
4.0.3 поддержка и смартфонов, и планшетов; поддержка новых
Ice Cream процессорных архитектур, помимо ARM поддержка Intel x86 и MIPS;
Sandwich возможность разблокировки экрана: при помощи функции определения
ноябрь 2011 лица; жестами: перетащить замочек из центра экрана на иконку
приложения и оно запустится; многозадачность: кнопка Recent Apps
позволяет мгновенно переходить от одной задачи к другой с помощью
списка в системной панели; новые элементы управления передачей
данных через сеть: в приложении Настройки можно увидеть общее
использование данных по каждому типу сети, объем данных,
используемых каждым работающим приложением; доступность
Android 4.0 для слепых и слабовидящих пользователей, браузер
поддерживает экранного чтеца, который воспроизводит все видимое
активное содержимое на экране;
Android 4.1- Нововведения 4.1:
4.3 увеличена скорость прорисовки интерфейса, улучшен поиск, добавлено
Jelly Bean несколько полезных сервисов; улучшена работа со словарями,
июль 2012 возможно использовать голосовой ввод без подключения к интернету;
специальные возможности: возможность управления смартфоном с
помощью жестов и голосовых подсказок, подключения устройств
ввода, поддерживающих шрифт Брайля; существенно доработана
функция передачи данных Beam; переработан поиск (вместо ссылок
ответ на запрос); голосовой поиск; Google Now: нужная информация в
нужное время.
Нововведения 4.2:
реализована поддержка нескольких пользователей (планшеты);
поддержка wireless display: возможность трансляции видео и
изображений на внешний экран; возможность отображения полезной
информации в режиме сна, при подключении к док-станции или на
зарядке; улучшена панель уведомлений.
Нововведения 4.3:
ускорение работы системы; более точный набор на клавиатуре; скрытая
возможность управления процессами программ (необходима
активация); поддержка OpenGL/ES 3.0 (не на всех устройствах).
Android 4.4 Нововведения:
Kit Kat многозадачность, оптимизация распределения ресурсов между
октябрь 2013 приложениями; определитель номера работает не только с адресной
книгой (например, Google maps); серьезная интеграция приложения
Hangouts (отправка SMS, MMS, голосовые и видеовызовы); в состав
вошел Quickoffice, интегрированный с Google Drive; поддержка
принтеров, подключение через приложения поддерживающие печать
(например, Google Cloud Print, HP ePrint); поддержка стандарта Wi-Fi
Miracast, позволяющий вещать изображение на телевизор; возможность
захвата экрана для записи видео.
Таблица 2. История обновлений ОС Android
2 Устройство платформы Android
Платформа Android объединяет операционную систему, построенную на основе
ядра ОС Linux, промежуточное программное обеспечение и встроенные мобильные
приложения. Разработка и развитие мобильной платформы Android выполняется в рамках
проекта AOSP (Android Open Source Project) под управлением OHA (Open Handset
Alliance), руководит всем процессом поисковый гигант Google.
Android поддерживает фоновое выполнение задач; предоставляет богатую
библиотеку элементов пользовательского интерфейса; поддерживает 2D и 3D графику,
используя OpenGL стандарт; поддерживает доступ к файловой системе и встроенной базе
данных SQLite.
С точки зрения архитектуры, система Android представляет собой полный
программный стек, в котором можно выделить следующие уровни:
Базовый уровень (Linux Kernel) - уровень абстракции между аппаратным уровнем и
программным стеком;
Набор библиотек и среда исполнения (Libraries & Android Runtime) обеспечивает
важнейший базовый функционал для приложений, содержит виртуальную машину
Dalvik и базовые библиотеки Java необходимые для запуска Android приложений;
Уровень каркаса приложений (Application Framework) обеспечивает разработчикам
доступ к API, предоставляемым компонентами системы уровня библиотек;
Уровень приложений (Applications) - набор предустановленных базовых приложений.
Наглядное изображение архитектуры на рисунке 1.
Рис. 1. Архитектура Android
Рассмотрим компоненты платформы более подробно.
В основании компонентной иерархии лежит ядро ОС Linux 2.6 (несколько
урезанное), служит промежуточным уровнем между аппаратным и программным
обеспечением, обеспечивает функционирование системы, предоставляет системные
службы ядра: управление памятью, энергосистемой и процессами, обеспечение
безопасности, работа с сетью и драйверами.
Уровнем выше располагается набор библиотек и среда исполнения. Библиотеки
реализуют следующие функции:
предоставляют реализованные алгоритмы для вышележащих уровней;
обеспечивает поддержку файловых форматов;
осуществляет кодирование и декодирование информации (например,
мультимедийные кодеки);
выполняет отрисовку графики и т.д.
Библиотеки реализованы на С/С++ и скомпилированы под конкретное аппаратное
обеспечение устройства, вместе с которым они и поставляются производителем в
предустановленном виде.
Рассмотрим некоторые библиотеки:
Surface Manager - композитный менеджер окон. Поступающие команды отрисовки
собираются в закадровый буфер, где они накапливаются, составляя некую композицию, а
потом выводятся на экран. Это позволяет системе создавать интересные бесшовные
эффекты, прозрачность окон и плавные переходы.
Media Framework - библиотеки, реализованные на базе PacketVideo OpenCORE.
Используются для записи и воспроизведения аудио и видео контента, а также для вывода
статических изображений. Поддерживаются форматы: MPEG4, H.264, MP3, AAC, AMR,
JPG и PNG.
SQLite - легковесная и производительная реляционная СУБД, используется в
Android в качестве основного движка для работы с базами данных.
3D библиотеки - используются для высокооптимизированной отрисовки 3D-графики,
при возможности используют аппаратное ускорение. Библиотеки реализованы на основе
API OpenGL|ES. OpenGL|ES (OpenGL for Embedded Systems) - подмножество
графического программного интерфейса OpenGL, адаптированное для работы на
встраиваемых системах.
FreeType - библиотека для работы с битовыми картами, для растеризации шрифтов и
осуществления операций над ними.
LibWebCore - библиотеки браузерного движка WebKit, используемого также в известных
браузерах Google Chrome и Apple Safari.
SGL (Skia Graphics Engine) - открытый движок для работы с 2D-графикой.
Графическая библиотека является продуктом Google и часто используется в других
программах.
SSL - библиотеки для поддержки одноименного криптографического протокола.
Libc - стандартная библиотека языка С, а именно ее BSD реализация, настроенная для
работы на устройствах на базе Linux.
Среда исполнения включает в себя библиотеки ядра, обеспечивающие большую
часть низкоуровневой функциональности, доступной библиотекам ядра языка Java, и
виртуальную машину Dalvik, позволяющую запускать приложения. Каждое приложение
запускается в своем экземпляре виртуальной машины, тем самым обеспечивается
изоляция работающих приложений от ОС и друг от друга. Для исполнения на
виртуальной машине Dalvik Java-классы компилируются в исполняемые файлы с
расширением .dex с помощью инструмента dx, входящего в состав Android SDK. DEX
(Dalvik EXecutable) - формат исполняемых файлов для виртуальной машины Dalvik,
оптимизированный для использования минимального объема памяти. При использовании
IDE Eclipse и плагина ADT (Android Development Tools) компиляция классов Java в
формат .dex происходит автоматически.
Архитектура Android Runtime такова, что работа программ осуществляется строго в
рамках окружения виртуальной машины, что позволяет защитить ядро ОС от возможного
вреда со стороны других ее составляющих. Поэтому код с ошибками или вредоносное ПО
не смогут испортить Android и устройство на его базе, когда сработают.
На еще более высоком уровне располагается каркас приложений (Application
Framework), архитектура которого позволяет любому приложению использовать уже
реализованные возможности других приложений, к которым разрешен доступ. В состав
каркаса входят следующие компоненты:
богатый и расширяемый набор представлений (Views), который может быть
использован для создания визуальных компонентов приложений, например,
списков, текстовых полей, таблиц, кнопок или даже встроенного web-браузера;
контент-провайдеры (Content Providers), управляющие данными, которые одни
приложения открывают для других, чтобы те могли их использовать для своей
работы;
менеджер ресурсов (Resource Manager), обеспечивающий доступ к ресурсам без
функциональности (не несущим кода), например, к строковым данным, графике,
файлам и другим;
менеджер оповещений (Notification Manager), позволяющий приложениям
отображать собственные уведомления для пользователя в строке состояния;
менеджер действий (Activity Manager), управляющий жизненными циклами
приложений, сохраняющий историю работы с действиями, предоставляющий
систему навигации по действиям;
менеджер местоположения (Location Manager), позволяющий приложениям
периодически получать обновленные данные о текущем географическом
положении устройства.
Application Framework предоставляет в распоряжение приложений в ОС Android
вспомогательный функционал, благодаря чему реализуется принцип многократного
использования компонентов приложений и ОС. Естественно, в рамках политики
безопасности.
И, наконец, самый высокий, самый близкий к пользователю уровень приложений.
Именно на этом уровне пользователь взаимодействует со своим устройством,
управляемым ОС Android. Здесь представлен набор базовых приложений, который
предустановлен на ОС Android. Например, браузер, почтовый клиент, программа для
отправки SMS, карты, календарь, менеджер контактов и др. Список интегрированных
приложений может меняться в зависимости от модели устройства и версии Android. К
этому уровню также относятся все пользовательские приложения.
Разработчик обычно взаимодействует с двумя верхними уровнями архитектуры
Android для создания новых приложений. Библиотеки, система исполнения и ядро Linux
скрыты за каркасом приложений.
Повторное использование компонентов других приложений приводит к идее задач
в Android. Приложение может использовать компоненты другого Android приложения для
решения задачи, например, если разрабатываемое приложение предполагает
использование фотографий, оно может вызвать приложение, управляющее фотографиями
и зарегистрированное в системе Android, выбрать с его помощью фотографию и работать
с ней.
Для пополнения коллекции приложений своего мобильного устройства
пользователь может воспользоваться приложением Google Play, которое позволяет
покупать и устанавливать приложения с сервиса Google Play. Разработчики, в свою
очередь, могут выкладывать свои приложения в этот сервис, Google Play отслеживает
появление обновлений приложения, сообщает пользователям этого приложения об
обновлении и предлагает установить его. Также Google Play предоставляет разработчикам
доступ к услугам и библиотекам, например, доступ к использованию и отображению
Google Maps.
Для установки приложения на устройствах с ОС Android создается файл с
расширением *.apk (Android package), который содержит исполняемые файлы, а также
вспомогательные компоненты, например, файлы с данными и файлы ресурсов. После
установки на устройство каждое приложение "живет" в своем собственном
изолированном экземпляре виртуальной машины Dalvik.
3 Обзор сред программирования
Прежде чем начать разрабатывать приложения под Android, рассмотрим
существующие инструменты, подходящие для этих целей. Можно выделить необходимые
инструменты, без которых разработка мобильных приложений под Android просто
невозможна. С другой стороны, существует большое количество вспомогательных систем,
в какой-то мере упрощающих процесс разработки.
К обязательным инструментам относится Android SDK - набор средств
программирования, который содержит инструменты, необходимые для создания,
компиляции и сборки мобильного приложения.
Рассмотрим кратко наиболее важные инструменты, входящие в состав Android
SDK:
SDK Manager - инструмент, позволяющий загрузить компоненты Android SDK.
Показывает пакеты Android SDK и их статус: установлен (Installed), не установлен
(Not Installed), доступны обновления (Update available).
Рис. 2. Android SDK Manager
Debug Monitor - самостоятельный инструмент, предоставляющий графический
интерфейс к нескольким инструментам, предназначенным для анализа и отладки
Android приложений:
DDMS (Dalvik Debug Monitor Server) предоставляет услуги переброса портов,
захват экрана устройства, информацию о потоках и динамической памяти
устройства, вывод информации о действиях Android в реальном времени
(logcat) и многое другое.
Hierarchy Viewer позволяет отлаживать и оптимизировать пользовательский
интерфейс Android приложения.
Tracer for OpenGL ES - инструмент для анализа OpenGL|ES кода,
используемого в мобильном приложении, позволяет захватывать команды
OpenGL|ES и демонстрировать их по отдельным кадрам, что помогает понять
как исполняются графические команды.
Рис.3. Окно инструмента Monitor
Android Emulator (emulator) - виртуальное мобильное устройство, которое создается
и работает на компьютере разработчика, используется для разработки и
тестирования мобильных приложений без привлечения реальных устройств.
AVD Manager - предоставляет графический интерфейс для создания виртуальных
Android устройств (AVDs), предусмотренных Android Emulator, и управления ими.
(В ЛР№1 подробно рассматривается создание и использование виртуального
устройства).
Android Debug Bridge (adb) - гибкий инструмент, позволяющий управлять
состоянием эмулятора или реального Android устройства, подключенного к
компьютеру. Также может использоваться для установки Android приложения (.apk
файл) на реальное устройство.
Мы рассмотрели основные инструменты, входящие в состав Android SDK,
разумеется, не все и недостаточно подробно. Для более серьезного изучения
инструментов имеет смысл обратиться к сайту разработчиков
(http://developer.android.com/tools/help/index.html). Для разработки мобильных приложений
под Android уверенного владения инструментами из SDK вполне достаточно. Если же
возникают какие-то вопросы, дополнительные инструкции по созданию проектов,
компиляции, запуску из командной строки содержатся в руководстве от Google
(http://developer.android.com/training/basics/firstapp/index.html).
В современных условиях разработка ПО в большинстве случаев ведется с
использованием интегрированных сред разработки (IDE). IDE имеют несомненные
достоинства: процесс компиляции, сборки и запуска приложения обычно
автоматизирован, в связи с чем для начинающего разработчика создать свое первое
приложение труда не составляет. Но чтобы заниматься разработкой всерьез, необходимо
потратить силы и время на изучение возможностей самой среды. Рассмотрим IDE,
пригодные для разработки под Android1.
Для начала поговорим о двух средах разработки, которые рекомендует Google:
Android IDE (ADT) и Android Studio.
Android IDE - среда разработки под Android, основанная на Eclipse. Предоставляет
интегрированные инструменты для разработки, сборки и отладки мобильных приложений.
В данном курсе Android IDE выбрана в качестве основной среды разработки.
Возможности этой среды более подробно рассмотрены в первой лабораторной работе.
Также там даны рекомендации по установке и настройке среды, созданию и запуску
первого приложения как на эмуляторе, так и на реальном устройстве.
Android Studio - среда разработки под Android, основанная на IntelliJ IDEA.
Подобно Android IDE, она предоставляет интегрированные инструменты для разработки и
отладки. Дополнительно ко всем возможностям, ожидаемым от IntelliJ, в Android Studio
реализованы:
поддержка сборки приложения, основанной на Gradle;
специфичный для Android рефакторинг и быстрое исправление дефектов;
lint инструменты для поиска проблем с производительностью, с юзабилити, с
совместимостью версий и других;
возможности ProGuard (утилита для сокращения, оптимизации и обфускации кода)
и подписи приложений;
основанные на шаблонах мастера для создания общих Android конструкций и
компонентов;
WYSIWYG редактор, работающий на многих размерах экранов и разрешений, окно
предварительного просмотра, показывающее запущенное приложение сразу на
нескольких устройствах и в реальном времени;
встроенная поддержка облачной платформы Google.
Загрузить последнюю версию Android Studio, а также получить рекомендации по
установке, настройке и началу работы можно по адресу:
http://developer.android.com/sdk/installing/studio.html
Рис. 4. Среда разработки Android Studio
Перейдем к рассмотрению других инструментов, пригодных для разработки
мобильных приложений под Android. Начнем с инструментов от Intel - Intel XDK и Intel
Beacon Mountain.
Intel XDK позволяет легко разрабатывать кроссплатформенные мобильные
приложения; включает в себя инструменты для создания, отладки и сборки ПО, а также
эмулятор устройств; поддерживает разработку для Android, Apple iOS, Microsoft Windows
8, Tizen; поддерживает языки разработки: HTML5 и JavaScript.
Intel Beacon Mountain - среда разработки, позволяющая создавать приложения для
устройств, работающих под управлением ОС Android. Предоставляет инструменты
необходимые для проектирования, разработки, отладки и оптимизации приложений под
Android. Освобождает разработчика от необходимости поддерживать систему разработки
в актуальном состоянии, следит за обновлениями и добавляет их в среду разработки по
мере появления. Поддерживает разработку для целевых платформ на основе процессоров
Intel Atom и ARM.
Beacon Mountain построена на основе Android IDE (Eclipse, Android ADT, Android
SDK), для более серьезной разработки и оптимизации добавлены следующие
инструменты Intel:
Intel* Hardware Accelerated Execution Manager (Intel* HAXM) - аппаратно
поддерживаемый процессор виртуализации, использующий технологию
виртуализации Intel* (Intel* VT) для ускорения работы эмулятора в среде
разработки.
Intel* Graphics Performance Analyzers (Intel* GPA) System Analyzer поддерживает
мобильные устройства с процессором Intel Atom под управлением ОС Android.
Позволяет разработчикам оптимизировать загруженность системы при
использовании процедур OpenGL, предоставляя возможность получать множество
системных метрик в реальном времени, отображающих загруженность CPU, GPU и
OpenGL ES API. Разработчик может запустить несколько графических
экспериментов для выявления узких мест в обработке графики.
Intel* Integrated Performance Primitives (Intel* IPP) Preview - библиотека
оптимизированной обработки данных и изображений, поддерживающая
мобильные устройства с платформой Intel под управлением ОС Android. Preview
версия является частью полной версии Intel IPP, которая тоже поддерживает ОС
Android.
Intel* Threading Building Blocks (Intel* TBB) - широко используемая, признанная
библиотека шаблонов С++ для создания масштабируемых приложений и
увеличения производительности. Поддерживает мобильные устройства с
платформой Intel под управлением Android. Проверенные алгоритмы позволяют
разработчикам эффективно распараллелить С++ мобильные приложения, что
повышает производительность при снижении энергетических затрат.
Загрузить Intel Beacon Mountain можно по ссылке
http://software.intel.com/ru-ru/vcsource/tools/beaconmountain
Рис. 5. Страница поддержки Intel* Beacon Mountain
Нельзя обойти вниманием инструментарий Marmalade SDK.
Marmalade SDK - кроссплатформенное SDK от Ideaworks3D Limited. Представляет
собой набор библиотек, образцов, инструментов и документации, необходимых для
разработки, тестирования и развертывания приложений для мобильных устройств.
Используется, в основном, для разработки игр. Многие получившие признание игры,
такие как Cut the Rope и Plants vs. Zombies, были разработаны с использованием этого
программного средства. К сожалению, Marmalade SDK представляет собой проприетарное
программное обеспечение (самая дешевая лицензия $15 в месяц) и не может быть
рекомендована в данном учебном курсе, но можно самостоятельно попробовать
бесплатную 30-дневную версию, доступную по ссылке
https://www.madewithmarmalade.com/free-trial
Нельзя не сказать об СНГ-овских разработках. Например, компания 1С идет в ногу
со временем, версия платформы 1С 8.3 позволяет разрабатывать мобильные приложения.
Программный продукт "1С:Предприятие 8. Расширение для карманных компьютеров"
обеспечивает возможность работы с данными информационных баз 1С:Предприятия 8 на
мобильных устройствах (карманных компьютерах, коммуникаторах, терминалах сбора
данных), а также на персональных компьютерах (в том числе ноутбуках), не имеющих
прямого доступа к информационным базам 1С:Предприятия 8.
Рис. 6. Редактор мобильных приложений 1С
Разумеется, данный программный продукт имеет очень узкую сферу применения,
однако в некоторых случаях может являться наиболее удачным решением.
4 Эмуляторы
Эмуляция. Стандартный эмулятор Android
Эмуляция (англ. emulation) в вычислительной технике - комплекс программных,
аппаратных средств или их сочетание, предназначенное для копирования (или
эмулирования) функций одной вычислительной системы (гостя) на другой, отличной от
первой, вычислительной системе (хосте) таким образом, чтобы эмулированное поведение
как можно ближе соответствовало поведению оригинальной системы (гостя). Целью
является максимально точное воспроизведение поведения в отличие от разных форм
компьютерного моделирования, в которых имитируется поведение некоторой абстрактной
модели (Википедия).
Эмулятор - виртуальное мобильное устройство, которое запускается на
компьютере. При помощи эмулятора можно разрабатывать и тестировать приложения без
использования реальных устройств. На рисунке 1.7 приведен пример запущенного
стандартного эмулятора. Подробно работа с эмуляторами рассмотрена в лабораторной
работе.
Рис. 7. Эмулятор Android SDK в процессе запуска и приложение "Hello, world!"
К достоинствам использования эмуляторов можно отнести простоту их
использования и нулевую стоимость. Разработчику не нужно покупать огромное
количество устройств с различными характеристиками, чтобы проверить
работоспособность приложения на различных смартфонах. Достаточно создать несколько
эмуляторов с требуемыми характеристиками и запустить на них приложение.
К сожалению, эмуляторы имеют и ряд недостатков:
Требуют много системных ресурсов.
Из-за различий в архитектуре процессоров компьютера и смартфона медленно
запускаются. Современные персональные компьютеры построены на архитектурах
x86 и x64, а большинство процессоров смартфонов на Android - ARM. Процесс
эмуляции одной архитектуры на другой чрезвычайно сложен и происходит
довольно медленно.
В некоторых случаях стандартного эмулятора недостаточно. Речь идет о
возможностях смартфонов, которыми обычные компьютеры не обладают
(например, наличие датчика gps или акселерометра). В таких случаях полноценную
отладку можно провести только с использованием реального устройства.
Альтернативные эмуляторы
Стандартный эмулятор, поставляемый вместе с Android SDK, не устраивает
многих. Существуют проекты, поддерживающие разработку и развитие альтернативных
эмуляторов. В качестве примера можно привести Genymotion (см. рис. 8) - быстрый
эмулятор Android (по мнению его разработчиков). Он содержит предварительно
настроенные образы Android (x86 с аппаратным ускорением OpenGL). Genymotion
доступен для Linux, Windows и Mac OS X и требует для своей работы VirtualBox. Иными
словами, Genymotion представляет собой виртуальную машину с установленной ОС
Android, которую пользователь запускает так же, как и другие виртуальные машины.
Проблема высокого потребления системных ресурсов, конечно, не исчезает, однако
скорость запуска существенно увеличивается.
В настоящее время активно развивается.
Рис. 8. Альтернативный эмулятор Genymotion
5 Возможности отладки на реальных устройствах
Разработанное приложение можно запустить на реальном устройстве, например, на
смартфоне. Для этого необходимо проделать предварительную работу.
Для запуска приложений, разработанных в Android IDE, необходимо:
Настроить устройство (включить режим отладки по USB).
Настроить компьютер (для Windows необходимо установить нужный драйвер
вручную, нужны права администратора).
Настроить среду и запустить проект на устройстве.
Подробности отладки на реальных устройствах описаны в лабораторной работе.
6 Примеры приложений
Google Play - это магазин приложений от Google, позволяющий владельцам
устройств с операционной системой Android устанавливать и приобретать различные
приложения. Учѐтная запись разработчика, которая даѐт возможность публиковать
приложения, стоит $25. В настоящее время Google Play насчитывает более миллиона
различных приложений, каждый месяц пользователями загружается несколько
миллиардов. Разумеется, далеко не все из них высокого качества и поддерживаются
разработчиками, встречается и вредоносное программное обеспечение.
В настоящий момент доступно более 30 различных категорий приложений. Внутри
каждой категории приложения упорядочены на основании рейтинга, отзывов, количества
скачиваний, страны распространения и других факторов.
Время от времени редакция Google Play собирает коллекции приложений или игр,
основанных на теме или сезонном событии. Коллекции пользуются популярностью у
клиентов за счет своевременности и актуальности.
Приведем примеры интересных и удобных приложений, заслуженно
удерживающих высокие места в своих категориях уже долгое время.
Популярное игровое приложение Cut the Rope позволяет разобраться в правилах
игры прямо в ее процессе и не требует чтения сложных инструкций (см. рисунок 9). Идея
игры предельно проста - в коробке сидит маленький зелѐный монстр Ам Ням, которого
надо кормить леденцами. Леденцы болтаются на веревках, и их надо правильно
перерезать, чтобы леденец попал точно в рот Ам Няма. По ходу игры сложность уровней
возрастает, появляются дополнительные препятствия. Попутно надо собирать звездочки,
которые позволяют открывать новые локации.
Рис. 9. Первый уровень игры Cut the Rope
Если вам нужен интерактивный помощник, который способен понимать сделанные
устно указания и напоминать о делах в нужное время, приложение "Помнить все" (см.
рис. 10) - то, что вам нужно. Используя библиотеку для распознавания речи, оно
анализирует полученную информацию, отображает ее в виде текста, который при
необходимости можно исправить, и устанавливает время для напоминания.
Рис.10. Приложение "Помнить все" распознает русскую речь
Контрольные вопросы:
1. Каково устройство платформы Android?
2. Что представляет собой Android SDK?
3. Назовите основные средства разработки под Android.
4. Перечислите достоинства и недостатки эмуляторов Android.
5. Выясните объем продаж мобильных устройств с ОС Android.
6. Какая версия платформы наиболее популярна в настоящее время?
Лекция 2. Виды мобильных приложений и их структура
Цель лекции: Целью лекции является обсуждение вопросов, связанных непосредственно
с разработкой мобильных приложений для устройств, работающих под управлением
Android. Рассматривается еще несколько общих вопросов: во-первых, какие виды
мобильных приложений существуют и каковы особенности каждого вида; во-вторых, как
организовано исполнение приложений в ОС Android и каким образом обеспечивается
безопасная среда их функционирования. Понимание этих вопросов позволяет вести более
осознанную разработку приложений. В лекции рассматривается архитектура Android
приложений, основанная на идее многократного использования компонентов, которые
являются основными строительными блоками. Подробно описываются основные
компоненты, а также такие важные понятия для мобильных приложений, работающих под
управлением Android, как манифест приложения и ресурсы.
План лекции:
1 Введение
2 Основные виды Android-приложений
3 Безопасность
4 Архитектура приложения, основные компоненты
4.1 Активности (Activities)
4.2 Сервисы (Services)
4.3 Контент-провайдеры (Content Providers)
4.4 Приемники широковещательных сообщений (Broadcast Receivers)
5 Манифест приложения
6 Ресурсы
Ключевые слова: android, исполнение, приложение, архитектура, манифест,
представление, Java, файл, доступ, ID, SMS, компонент, поведение приложения,
активность, пользователь, жизненный цикл, отображение, операции, запрос, запись,
широковещание, работ, SDK, иерархия, класс, GUI, интерфейс, XML, layout, дерево,
объект, механизмы, очередь, активный, корневой каталог, информация, альтернативные,
группа, default, файлы ресурсов, множества, компоновка, ресурс, подкласс.
Содержание лекции:
1 Введение
В "Введение в разработку мобильных приложений" были рассмотрены общие
вопросы, связанные с операционной системой Android, а также инструменты,
используемые для разработки мобильных приложений. Изучены основы разработки
интерфейсов мобильных приложений. В данной теме обсуждаются вопросы, связанные,
непосредственно, с разработкой мобильных приложений для устройств, работающих под
управлением Android.
Для начала предполагается рассмотреть еще несколько общих вопросов: во-
первых, какие виды мобильных приложений существуют и каковы особенности каждого
вида; во-вторых, как организовано исполнение приложений в ОС Android и каким образом
обеспечивается безопасная среда их функционирования. Понимание этих вопросов
позволяет вести более осознанную разработку приложений.
Невозможно создать осмысленное приложение, не изучив внутреннюю
организацию, свойственную приложениям, работающим на определенной платформе. В
данном курсе, очевидно, необходимо изучить структуру и основные компоненты
приложений, разрабатываемых для работы на смартфонах под управлением ОС Android.
От типа мобильного устройства внутренняя организация приложений не зависит, т. е.
Android-приложения, разработанные для смартфонов вполне смогут выполняться и на
планшетах. В данной лекции рассматривается архитектура Android приложений,
основанная на идее многократного использования компонентов, которые являются
основными строительными блоками. Подробно описываются основные компоненты, а
также такие важные понятия для мобильных приложений, работающих под управлением
Android, как манифест приложения и ресурсы.
2 Основные виды Android-приложений
Приступая к разработке мобильных приложений хорошо бы иметь представление о
том, какие виды приложений существуют. Дело в том, что если удастся определить к
какому типу относится приложение, то становится понятнее на какие моменты в процессе
его разработки необходимо обращать основное внимание. Можно выделить следующие
виды приложений:
o Приложения переднего плана выполняют свои функции только, когда видимы на
экране, в противном же случае их выполнение приостанавливается. Такими
приложениями являются, например, игры, текстовые редакторы,
видеопроигрыватели. При разработке таких приложений необходимо очень
внимательно изучить жизненный цикл активности, чтобы переключения в фоновый
режим и обратно проходили гладко (бесшовно), т. е. при возвращении приложения
на передний план было незаметно, что оно вообще куда-то пропадало. Для
достижения этой гладкости необходимо следить за тем, чтобы при входе в
фоновый режим приложение сохраняло свое состояние, а при выходе на передний
план восстанавливало его. Еще один важный момент, на который обязательно надо
обратить внимание при разработке приложений переднего плана, удобный и
интуитивно понятный интерфейс.
o Фоновые приложения после настройки не предполагают взаимодействия с
пользователем, большую часть времени находятся и работают в скрытом
состоянии. Примерами таких приложений могут служить, службы экранирования
звонков, SMS-автоответчики. В большинстве своем фоновые приложения
нацелены на отслеживание событий, порождаемых аппаратным обеспечением,
системой или другими приложениями, работают незаметно. Можно создавать
совершенно невидимые сервисы, но тогда они будут неуправляемыми. Минимум
действий, которые необходимо позволить пользователю: санкционирование
запуска сервиса, настройка, приостановка и прерывание его работы при
необходимости.
o Смешанные приложения большую часть времени работают в фоновом режиме,
однако допускают взаимодействие с пользователем и после настройки. Обычно
взаимодействие с пользователем сводится к уведомлению о каких-либо событиях.
Примерами таких приложений могут служить мультимедиа-проигрыватели,
программы для обмена текстовыми сообщениями (чаты), почтовые клиенты.
Возможность реагировать на пользовательский ввод и при этом не терять
работоспособности в фоновом режиме является характерной особенностью
смешанных приложений. Такие приложения обычно содержат как видимые
активности, так и скрытые (фоновые) сервисы, и при взаимодействии с
пользователем должны учитывать свое текущее состояние. Возможно потребуется
обновлять графический интерфейс, если приложение находится на переднем плане,
или же посылать пользователю уведомления из фонового режима, чтобы держать
его в курсе происходящего. И эти особенности необходимо учитывать при
разработке подобных приложений.
o Виджеты - небольшие приложения, отображаемые в виде графического объекта на
рабочем столе. Примерами могут служить, приложения для отображения
динамической информации, такой как заряд батареи, прогноз погоды, дата и время.
Разумеется, сложные приложения могут содержать элементы каждого из
рассмотренных видов. Планируя разработку приложения, необходимо определить
способ его использования, только после этого приступать к проектированию и
непосредственно разработке.
3 Безопасность
Обратим внимание на организацию исполнения приложений в ОС Android. Как уже
было отмечено приложения под Android разрабатываются на языке программирования
Java, компилируется в файл с расширением .apk, после этот файл используется для
установки приложения на устройства, работающие под управлением Android. После
установки каждое Android приложение "живет" в своей собственной безопасной
"песочнице", рассмотрим, как это выглядит:
o операционная система Android является многопользовательской ОС, в которой
каждое приложение рассматривается как отдельный пользователь;
o по умолчанию, система назначает каждому приложению уникальный
пользовательский ID, который используется только системой и неизвестен
приложению;
o система устанавливает права доступа ко всем файлам приложения следующим
образом: доступ к элементам приложения имеет только пользователь с
соответствующим ID;
o каждому приложению соответствует отдельный Linux процесс, который
запускается, как только это необходимо хотя бы одному компоненту приложения,
процесс прекращает работу, когда ни один компонент приложения не использует
его или же системе требуется освободить память для других (возможно, более
важных) приложений;
o каждому процессу соответствует отдельный экземпляр виртуальной машины
Dalvik, в связи с этим код приложения исполняется изолировано от других
приложений.
Перечисленные идеи функционирования приложения в ОС Android реализуют
принцип минимальных привилегий, т. е. каждому приложению, по умолчанию, разрешен
доступ только к компонентам, необходимым для его работы и никаким больше. Таким
образом обеспечивается очень безопасная среда функционирования приложений.
Однако, в случае необходимости приложения могут получить доступ к данным
других приложений и системным сервисам (услугам). В случае, когда двум приложениям
необходимо иметь доступ к файлам друг друга, им присваивается один и тот же
пользовательский ID. Для экономии системных ресурсов такие приложения запускаются в
одном Linux процессе и делят между собой один и тот же экземпляр виртуальной
машины, в этом случае приложения также должны быть подписаны одним сертификатом.
В случае же, когда приложению требуется доступ к системным данным, например,
контактам, SMS сообщениям, картам памяти, камере, Bluetooth и т. д., пользователю
необходимо дать приложению такие полномочия во время установки его на устройство.
4 Архитектура приложения, основные компоненты
Вот и пришла пора поговорить непосредственно о внутренней организации
приложений под Android: обсудить их архитектуру и основные компоненты.
Архитектура Android приложений основана на идее многократного использования
компонентов, которые являются основными строительными блоками. Каждый компонент
является отдельной сущностью и помогает определить общее поведение приложения.
Система Android выстроена таким образом, что любое приложение может
запускать необходимый компонент другого приложения. Например, если приложение
предполагает использование камеры для создания фотографий, совершенно необязательно
создавать в этом приложении активность для работы с камерой. Наверняка на устройстве
уже есть приложение для получения фотографий с камеры, достаточно запустить
соответствующую активность, сделать фотографию и вернуть ее в приложение, так что
пользователь будет считать, что камера часть приложения, с которым он работает.
Когда система запускает компонент, она запускает процесс приложения, которому
принадлежит компонент, если он еще не запущен, и создает экземпляры классов,
необходимых компоненту. Поэтому в отличие от большинства других систем, в системе
Android приложения не имеют единой точки входа (нет метода main(), например). В силу
запуска каждого приложения в отдельном процессе и ограничений на доступ к файлам,
приложение не может напрямую активировать компонент другого приложения. Таким
образом для активации компонента другого приложения необходимо послать системе
сообщение о намерении запустить определенный компонент, система активирует его.
Можно выделить четыре различных типа компонентов, каждый тип служит для
достижения определенной цели и имеет свой особый жизненный цикл, который
определяет способы создания и разрушения соответствующего компонента. Рассмотрим
основные компоненты Android-приложений.
1. Активности (Activities). Активность - это видимая часть приложения (экран, окно,
форма), отвечает за отображение графического интерфейса пользователя. При этом
приложение может иметь несколько активностей, например, в приложении,
предназначенном для работы с электронной почтой, одна активность может
использоваться для отображения списка новых писем, другая активность - для
написания, и еще одна - для чтения писем. Несмотря на то, что для пользователя
приложение представляется единым целым, все активности приложения не зависят
друг от друга. В связи с этим любая из этих активностей может быть запущена из
другого приложения, имеющего доступ к активностям данного приложения.
Например, приложение камеры может запустить активность, создающую новые
письма, чтобы отправить только что сделанную фотографию адресату, указанному
пользователем.
2. Сервисы (Services). Сервис - компонент, который работает в фоновом режиме,
выполняет длительные по времени операции или работу для удаленных процессов.
Сервис не предоставляет пользовательского интерфейса. Например, сервис может
проигрывать музыку в фоновом режиме, пока пользователь использует другое
приложение, может загружать данные из сети, не блокируя взаимодействие
пользователя с активностью. Сервис может быть запущен другим компонентом и
после этого работать самостоятельно, а может остаться связанным с этим
компонентом и взаимодействовать с ним.
3. Контент-провайдеры (Content providers). Контент-провайдер управляет
распределенным множеством данных приложения. Данные могут храниться в
файловой системе, в базе данных SQLite, в сети, в любом другом доступном для
приложения месте. Контент-провайдер позволяет другим приложениям при
наличии у них соответствующих прав делать запросы или даже менять данные.
Например, в системе Android есть контент-провайдер, который управляет
информацией о контактах пользователя. В связи с этим, любое приложение с
соответствующими правами может сделать запрос на чтение и запись информации
какого-либо контакта. Контент-провайдер может быть также полезен для чтения и
записи приватных данных приложения, не предназначенных для доступа извне.
4. Приемники широковещательных сообщений (Broadcast Receivers). Приемник -
компонент, который реагирует на широковещательные извещения. Большинство
таких извещений порождаются системой, например, извещение о том, что экран
отключился или низкий заряд батареи. Приложения также могут инициировать
широковещание, например, разослать другим приложениям сообщение о том, что
некоторые данные загружены и доступны для использования. Хотя приемники не
отображают пользовательского интерфейса, они могут создавать уведомление на
панели состояний, чтобы предупредить пользователя о появлении сообщения.
Такой приемник служит проводником к другим компонентам и предназначен для
выполнения небольшого объема работ, например, он может запустить
соответствующий событию сервис.
Все рассмотренные компоненты являются наследниками классов, определенных в
Android SDK.
Рис. 1. Иерархия классов Android SDK
(источник: http://habrahabr.ru/post/141201/)
На рис. 1 показана иерархия основных классов Android SDK, с которыми обычно
имеет дело разработчик. На самом деле классов намного больше, желтым цветом
выделены классы, с которыми разработчик работает непосредственно, наследует от них
свои классы. Остальные классы не менее важны, но они реже используются напрямую.
Для начала рассмотрим классы Intent и View.
Класс View является основным строительным блоком для компонентов
пользовательского интерфейса (UI), он определяет прямоугольную область экрана и
отвечает за прорисовку и обработку событий. Является базовым классом для виджетов
(GUI widgets), которые используются для создания интерактивных компонентов
пользовательского интерфейса: кнопок, текстовых полей и т. д. А также является базовым
классом для класса ViewGroup, который является невидимым контейнером для других
контейнеров и виджетов, определяет свойства расположения компонентов
пользовательского интерфейса. Интерфейс Android-приложения представляет собой
иерархию UI компонентов (см. рис. 2), можно описать эту иерархию программно, но более
простым и эффективным способом задать расположение элементов интерфейса является
XML файл, который предоставляет удобную для восприятия структуру компоновки
(layout file). Во время исполнения XML файл автоматически превращается в дерево
соответствующих объектов. Подробнее о классе View, свойствах и методах:
http://developer.android.com/reference/android/view/View.html.
Рис. 2. Иерархия компонентов, определяющая компоновку интерфейса пользователя
Объекты-экземпляры класса Intent используются для передачи сообщений между
основными компонентами приложений. Известно, что три из четырех основных
компонентов: активности, сервисы и приемники широковещательных сообщений, могут
быть активированы с помощью сообщений, которые называются намерениями. Такие
сообщения являются инструментом позднего связывания компонентов одного или
нескольких приложений. Экземпляр класса Intent представляет собой структуру данных,
содержащую описание операции, которая должна быть выполнена, и обычно используется
для запуска активности или сервиса. В случае с приемниками широковещательных
сообщений объект Intent содержит описание события, которое произошло или было
объявлено.
Для каждого типа компонентов существуют свои механизмы передачи намерений.
o Чтобы запустить активность или вызвать у работающей активности новое
действие, необходимо передать объект-намерение в метод Context.startActivity()
или Activity.startActivityForResult().
o Чтобы запустить сервис или доставить новые инструкции работающему сервису,
необходимо передать объект-намерение в метод Context.startService(). Также
объект-намерение может быть передан в метод Context.bindService(), чтобы связать
между собой вызывающий компонент и сервис.
o Чтобы доставить объект-намерение всем заинтересованным приемникам
широковещательных сообщений, необходимо передать его в любой из
широковещательных методов: Context.sendOrderedBroadcast(),
Context.sendStickyBroadcast(), Context.sendBroadcast().
В каждом случае система Android в ответ на намерение находит соответствующий
компонент: активность, сервис или множество широковещательных приемников и
запускает его если необходимо. В этой системе сообщений не случается накладок:
сообщение-намерение, отправленное определенному компоненту, будет получено именно
этим компонентом и никем другим.
Рис. 3. Передача намерений (Intent)
На рис. 3 можно увидеть как происходит передача намерений (Intent), в данном
случае одна активность запускает другую. Активность А создает намерение (Intent) с
описанием действия и передает его в метод startActivity(). Система Android проверяет все
приложения на совпадение с намерением, когда совпадение найдено, система запускает
соответствующую активность, для чего вызывает метод onCreate() и передает в него
объект-намерение Intent.
Подробнее о классе Intent:
http://developer.android.com/guide/components/intents-filters.html,
http://developer.android.com/reference/android/content/Intent.html
Пришло время более серьезно рассмотреть основные компоненты: активности,
сервисы, контент-провайдеры, приемники широковещательных сообщений. В первую
очередь нас будет интересовать жизненный цикл этих компонентов. Что же такое этот
жизненный цикл? Жизненный цикл можно рассматривать, как процесс функционирования
компонента: начиная с момента создания и запуска, включая активный и неактивный
периоды работы, и, заканчивая уничтожением и освобождением ресурсов.
4.1 Активности (Activities)
Активность - окно, несущее графический интерфейс пользователя. Окно
активности обычно занимает весь экран устройства, однако вполне возможно создавать
полупрозрачные или плавающие диалоговые окна. Мобильные приложения обычно
являются многооконными, т. е. содержат несколько активностей, по одной на каждое
окно. Одна из активностей определяется как "главная", и именно ее пользователь видит
при первом запуске приложения.
Каждый экран приложения является наследником класса Activity. Для создания
активности необходимо создать класс-наследник класса Activity напрямую или через
любого его потомка. В этом классе необходимо реализовать все методы, вызываемые
системой для управления жизненным циклом активности. Таких методов семь:
onCreate() - метод, вызываемый системой при создании активности. В реализации
метода необходимо инициализировать основные компоненты активности и в
большинстве случаев вызвать метод setContentView() для подключения
соответствующего XML-файла компоновки (layout file). После метода onCreate()
всегда вызывается метод onStart().
onRestart() - метод, вызываемый системой при необходимости запустить
приостановленную активность. После этого метода всегда вызывается метод
onStart().
onStart() - метод, вызываемый системой непосредственно перед тем, как активность
станет видимой для пользователя. После этого метода вызывается onResume().
onResume() - метод, вызываемый системой непосредственно перед тем, как активность
начнет взаимодействовать с пользователем. После этого метода всегда вызывается
onPause().
onPause() - метод, вызываемый системой при потере активностью фокуса. В этом
методе необходимо фиксировать все изменения, которые должны быть сохранены
за пределами текущей сессии. После этого метода вызывается onResume(), если
активность вернется на передний план, или onStop(), если активность будет скрыта
от пользователя.
onStop() - метод, вызываемый системой, когда активность становится невидимой для
пользователя. После этого метода вызывается либо onRestart(), если активность
возвращается к взаимодействию с пользователем, либо onDestroy(), если
активность уничтожается.
onDestroy() - метод, вызываемый системой перед уничтожением активности. Этот метод
вызывается либо когда активность завершается, либо когда система уничтожает
активность, чтобы освободить ресурсы. Можно различать эти два сценария с
помощью метода isFinishing(). Это последний вызов, который может принять
активность.
Рис. 4. Жизненный цикл активности
(источник: http://developer.android.com/guide/components/activities.html).
При реализации вышеперечисленных методов первым делом всегда необходимо
вызывать соответствующий метод предка.
Рассмотренные методы определяют жизненный цикл активности. На рис. 4 можно
увидеть пути, по которым активность может переходить из одного состояния в другое. В
прямоугольниках указаны методы, которые вызываются при смене состояний активности.
Фактически активность может существовать в одном из трех состояний:
o Выполняется (running). Активность находится на переднем плане и удерживает
фокус ввода. Если внимательно рассмотреть рис. 4 можно заметить, что в это
состояние активность попадает после вызова метода onResume(). Пока активность
находится в этом состоянии ее процесс не может быть уничтожен системой.
o Приостановлена. Активность частично видима, однако фокус ввода потерян. В это
состояние активность попадает после вызова метода onPause() ( рис. 4). В этом
состоянии активность поддерживается в "боевой готовности", т.е. в любой момент
может получить фокус ввода и стать активной. Однако в этом состоянии процесс
активности может быть уничтожен системой, в случае экстремальной нехватки
памяти.
o Остановлена. Активность полностью невидима. В это состояние активность
попадает после вызова метода onStop()( рис. 4). В этом состоянии активность
может быть "вызвана к жизни", она сохраняет все состояния и необходимую для
восстановления информацию, однако процесс активности может быть уничтожен,
если память понадобится для других целей.
4.2 Сервисы (Services)
Сервис (Service) является компонентом приложения, предназначенным для
выполнения длительных операций в фоновом режиме. Существует два способа
существования сервисов:
o первый заключается в том, что сервис запущен (started) и работает самостоятельно
в фоновом режиме, так он может работать неопределенно долго, пока не выполнит
свою задачу;
o второй заключается в том, что сервис привязан (bound) к некоторому компоненту
или нескольким компонентам, в этом случае сервис предлагает интерфейс для
взаимодействия с компонентом и работает пока привязан хотя бы к одному
компоненту, как только связь со всеми компонентами разрывается сервис
завершает свою работу.
Для создания сервиса необходимо создать класс-наследник класса Service
напрямую или через любого его потомка. При этом в реализации класса необходимо
переопределить (т. е. написать свою реализацию) некоторые методы, управляющие
ключевыми аспектами жизненного цикла сервиса и обеспечивающие механизм
связывания компонентов с сервисом, в соответствующем случае. Рассмотрим наиболее
важные методы требующие реализации при создании сервиса.
onStartCommand() - метод, вызываемый системой, когда некоторый компонент,
например активность, вызывает метод startService(). В этом случае сервис
запускается и может работать в фоновом режиме неопределенно долго,
поэтому необходимо позаботиться об остановке сервиса, когда он выполнит
свою работу. Для остановки сервиса используется метод stopSelf() в случае,
когда сервис сам прекращает свою работу, или stopService() в случае, когда
работу сервиса прекращает некоторый компонент. Нет необходимости писать
реализацию метода onStartCommand(), если не предполагается
самостоятельной работы сервиса (т. е. он будет работать только в связке с
некоторыми компонентами).
onBind() - метод, вызываемый системой, когда некоторый компонент желает привязать к
себе сервис и вызывает метод bindService(). Этот метод должен возвращать
реализацию интерфейса IBinder, которая может быть использована
компонентом-клиентом для взаимодействия с сервисом. Метод onBind()
необходимо реализовать в любом случае, но, если не предполагается
связывания сервиса с какими-либо компонентами, возвращаемое значение
должно быть равным null.
Необходимо отметить, что сервис может быть запущен как самостоятельная
единица, а в последствии может быть привязан к некоторым компонентам. В этом случае
в сервисе должны быть обязательно реализованы оба метода onStartCommand() и onBind().
onCreate() - метод, вызываемый системой, при первом обращении к сервису для
выполнения первоначальных настроек. Этот метод вызывается до вызова
методов onStartCommand() и/или onBind().
onDestroy() - метод, вызываемый системой, когда сервис либо выполнил все действия,
для которых создавался, либо больше не связан ни с одним компонентом, т. е.
его услуги больше не требуются. В реализации этого метода необходимо
предусмотреть освобождение всех ресурсов, таких как потоки,
зарегистрированные слушатели, приемники и т. д. Вызов этого метода является
последними вызовом, который может получить сервис.
Рис. 5. Жизненный цикл сервиса
(источник: http://developer.android.com/guide/components/services.html).
На рис. 5 показан жизненный цикл сервиса, левая диаграмма показывает
жизненный цикл самостоятельного сервиса, правая - жизненный цикл сервиса,
привязанного к некоторым компонентам. На рисунке хорошо видно, что жизненный цикл
сервиса намного проще жизненного цикла активности. Однако для разработчика
понимание того, как именно сервис создается, запускается и завершает свою работу,
может оказаться даже более важным, т. к. сервис работает в фоновом режиме и
пользователь может и не осознавать, что в некоторых случаях он имеет дело с работой
сервисов.
Android принудительно останавливает работу сервисов только, когда ресурсов
системы не хватает для активности, которая работает в данный момент на переднем плане.
Приоритет работающих сервисов всегда выше, чем у приостановленных или полностью
невидимых активностей, а если сервис привязан к выполняющейся активности, то его
приоритет еще выше. С другой стороны, со временем приоритет самостоятельно
работающего сервиса понижается и его шансы быть принудительно остановленным
системой в случае нехватки ресурсов повышаются. В связи с этим имеет смысл
проектировать сервис таким образом, чтобы через некоторое время он требовал у системы
перезапуска. В случае если система все таки экстренно завершила работу сервиса, она
перезапустит его как только освободятся ресурсы.
Подробнее о создании, использовании и удалении сервисов:
http://developer.android.com/guide/components/services.html;
http://developer.android.com/guide/components/processes-and-threads.html.
4.3 Контент-провайдеры (Content Providers)
Контент-провайдер управляет доступом к хранилищу данных. Для реализации
провайдера в Android приложении должен быть создан набор классов в соответствии с
манифестом приложения. Один из этих классов должен быть наследником класса
ContentProvider, который обеспечивает интерфейс между контент-провайдером и другими
приложениями. Основное назначение этого компонента приложения заключается в
предоставлении другим приложениям доступа к данным, однако ничто не мешает в
приложении иметь активность, которая позволит пользователю запрашивать и изменять
данные, находящиеся под управлением контент-провайдера.
В мобильных приложениях контент-провайдеры необходимы в следующих
случаях:
приложение предоставляет сложные данные или файлы другим приложениям;
приложение позволяет пользователям копировать сложные данные в другие
приложения;
приложение предоставляет специальные варианты поиска, используя поисковую
платформу (framework).
Если приложение требует использования контент-провайдера, необходимо
выполнить несколько этапов для создания этого компонента:
1. Проектирование способа хранения данных. Данные, с которыми работают контент-
провайдеры, могут быть организованы двумя способами:
o Данные представлены файлом, например, фотографии, аудио или видео. В этом
случае необходимо хранить данные в собственной области памяти приложения. В
ответ на запрос от другого приложения, провайдер может возвращать ссылку на
файл.
o Данные представлены некоторой структурой, например, таблица, массив. В этом
случае необходимо хранить данные в табличной форме. Строка таблицы
представляет собой некоторую сущность, например, сотрудник или товар. А
столбец - некоторое свойство этой сущности, например, имя сотрудника или цена
товара. В системе Android общий способ хранения подобных данных - база данных
SQLite, но можно использовать любой способ постоянного хранения.
Больше о хранении данных в Android можно узнать по ссылке:
http://developer.android.com/guide/topics/providers/content-provider-creating.html#DataStorage
2. Создание класса-наследника от класса ContentProvider напрямую или через любого
его потомка. При этом в реализации класса необходимо переопределить (т. е. написать
свою реализацию) обязательные методы.
query() - метод, извлекающий данные из провайдера, в качестве аргументов получает
таблицу, строки и столбцы, а также порядок сортировки результата,
возвращает объект типа Cursor.
insert() - метод, добавляющий новую строку, в качестве аргументов получает таблицу,
и значения элементов строки, возвращает URI добавленной строки.
update() - метод, обновляющий существующие строки, в качестве аргументов получает
таблицу, строки для обновления и новые значения элементов строк, возвращает
количество обновленных строк.
delete() - метод, удаляющий строки, в качестве аргументов принимает таблицу и
строки для удаления, возвращает количество удаленных строк.
getType() - метод, возвращающий String в формате MIME, который описывает тип
данных, соответствующий URI. Подробнее:
http://developer.android.com/guide/topics/providers/content-provider-
creating.html#MIMETypes
onCreate() - метод, вызываемый системой, сразу после создания провайдера, включает
инициализацию провайдера. Стоит отметить, что провайдер не создается до тех
пор, пока объект ContentResolver не попытается получить к нему доступ.
Созданный контент-провайдер управляет доступом к структурированным данным,
выполняя обработку запросов от других приложений. Все запросы, в конечном итоге,
вызывают объект ContentResolver, который в свою очередь вызывает подходящий метод
объекта ContentProvider для получения доступа. Все вышеперечисленные методы, кроме
onCreate(), вызываются приложением-клиентом. И все эти методы имеют такую же
сигнатуру, как одноименные методы класса ContentResolver. Подробнее о классе
ContentProvider: http://developer.android.com/guide/topics/providers/content-provider-
creating.html#ContentProvider
3. Определение строки авторизации провайдера, URI для его строк и имен столбцов.
Если от провайдера требуется управление намерениями, необходимо определить действия
намерений, внешние данные и флаги. Также необходимо определить разрешения, которые
необходимы приложениям для доступа к данным провайдера. Все эти значения
необходимо определить как константы в отдельном классе, этот класс в последствии
можно предоставить другим разработчикам.
Подробнее об URI:
http://developer.android.com/guide/topics/providers/content-provider-creating.html#ContentURI
Подробнее о намерениях:
http://developer.android.com/guide/topics/providers/content-provider-creating.html#Intents
4.4 Приемники широковещательных сообщений (Broadcast Receivers)
Каждый широковещательный приемник является наследником класса
BroadcastReceiver. Этот класс рассчитан на получение объектов-намерений отправленных
методом sendBroadcast().
Можно выделить две разновидности широковещательных сообщений:
o Нормальные широковещательные сообщения передаются с помощью
Context.sendBroadcast в асинхронном режиме. Все приемники срабатывают в
неопределенном порядке, часто в одно и то же время.
o Направленные широковещательные сообщения передаются с помощью
Context.sendOrderedBroadcast только одному приемнику в один момент времени.
Как только приемник сработает, он может передать сообщение следующему
приемнику, а может прервать вещание так, что больше ни один приемник это
сообщение не получит.
Даже в случае нормального широковещания могут сложиться ситуации, в которых
система будет передавать сообщения только одному приемнику в один момент времени.
Особенно это актуально для приемников, которые требуют создания процессов, чтобы не
перегружать систему новыми процессами. Однако в этом случае ни один приемник не
может прервать широковещание.
Объект типа BroadcastReceiver действителен только во время вызова метода
onRecieve(), как только метод выполнен, система завершает работу объекта и больше не
активирует его.
Подробнее о приемниках широковещательных сообщений:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
5 Манифест приложения
Корневой каталог каждого приложения под Android должен содержать файл
AndroidManifest.xml (в точности с таким названием). Манифест приложения содержит всю
необходимую информацию, используемую системой для запуска и выполнения
приложения. Основная информация, содержащаяся в манифесте:
o Имя Java пакета приложения, которое используется как уникальный
идентификатор приложения.
o Описание компонентов приложения: активностей, сервисов, приемников
широковещательных сообщений и контент-провайдеров, которые составляют
приложение. Для каждого компонента приложения определено имя
соответствующего класса и объявлены их основные свойства (например, с какими
сообщениями-намерениями они могут работать). Эта информация позволяет
системе Android узнать какие компоненты и при каких условиях могут быть
запущены.
o Определение процессов, в которых будут выполняться компоненты приложения.
o Объявление полномочий, которыми должно обладать приложение для доступа к
защищенным частям API и взаимодействия с другими приложениями.
o Объявление полномочий, которыми должны обладать другие приложения для
взаимодействия с компонентами данного.
o Список вспомогательных классов, которые предоставляют информацию о ходе
выполнения приложения. Эти объявления содержатся в манифесте пока идет
разработка и отладка приложения, перед публикацией приложения они удаляются.
o Определение минимального уровня Android API для приложения.
o Список библиотек связанных с приложением.
В файле манифеста только два элемента: <manifest> и <application> являются
обязательными и при этом встречаются ровно по одному разу. Остальные элементы могут
встречаться несколько раз или не появляться совсем, в этом случае манифест определяет
пустое приложение.
Следующий листинг демонстрирует общую структуру файла манифеста.
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<support-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> … </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> … </intent-filter>
<meta-data />
</service>
<receiver>
<intent-filter> … </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
<path-permission />
</provider>
<uses-library />
</application>
</manifest>
Листинг 1. Структура файла AndroidManifest.xml
В манифесте элементы одного уровня, такие как <activity>, <service>, <receiver>,
<provider>, могут следовать друг за другом в любой последовательности. Элемент
<activity-alias> является исключением из этого правила, он должен следовать за
соответствующей активностью.
Более предметно разговор о файле манифеста и его основных элементах пойдет в
лабораторных работах.
Подробности: http://developer.android.com/guide/topics/manifest/manifest-intro.html
6 Ресурсы
При разработке мобильных приложений необходимо выработать привычку
отделять ресурсы приложения от кода. К ресурсам приложения могут относиться:
изображения, строки, цвета, компоновки элементов пользовательского интерфейса (layout)
и т. д. Отделение ресурсов от кода позволяет использовать альтернативные ресурсы для
различных конфигураций устройств: язык, разрешение экрана и т. д. Для обеспечения
совместимости с различными конфигурациями, ресурсы необходимо сгруппировать в
директории по типу ресурсов и конфигурации устройства, полученные директории
поместить в папку res/.
Для любого типа ресурсов можно определить две группы. Первая определяет
ресурсы, которые будут использоваться независимо от конфигурации устройства или в
том случае, когда под конфигурацию нет подходящих альтернативных ресурсов. Эта
группа называется ресурсы по умолчанию (default). Вторая группа определяет ресурсы,
подходящие для определенной конфигурации устройства, размещается в директории с
названием, обозначающим данную конфигурацию. Такие ресурсы называются
альтернативными.
а) используется компоновка по умолчанию б) каждое устройство использует
(приложение не содержит альтернативы) соответствующую компоновку
Рис. 6. Использование ресурсов
Каждый тип ресурсов необходимо размещать в специальной поддиректории папки
res/. Рассмотрим основные из этих поддиректорий:
animator/ - содержит XML файлы, которые определяют свойства анимации;
anim/ - содержит XML файлы, которые определяют анимацию преобразований;
color/ - содержит XML файлы, которые определяют списки цветов;
drawable/ - содержит графические файлы или XML файлы, которые компилируются в
графические ресурсы;
layout/ - содержит XML файлы, которые определяют компоновку элементов
пользовательского интерфейса;
menu/ - содержит XML файлы, которые определяют все меню приложения;
values/ - содержит XML файлы, которые определяют простые значения, таких
ресурсов как, строки, числа, цвета.
Следует отметить, что файлы ресурсов нельзя размещать в папку res/ напрямую,
они обязательно должны размещаться в соответствующем каталоге, иначе будет выдана
ошибка компиляции.
Все ресурсы, которые содержатся в рассмотренных поддиректориях являются
ресурсами по умолчанию. Понятно, что различные типы устройств могут требовать
различных типов ресурсов. Например, для устройств с разными размерами экрана
компоновки элементов пользовательского интерфейса должны отличаться. Рис 6
показывает варианты внешнего вида приложения с использованием только компоновки по
умолчанию (а) и с использованием альтернативных компоновок (б). Даже на схеме
понятно, что при правильном подходе приложение, изменяющее свой внешний вид в
зависимости от размера экрана привлекательнее, чем остающееся неизменным.
Чтобы определить зависимые от конфигурации альтернативы для множества
ресурсов:
1. необходимо создать директорию в каталоге res/, присвоить этой директории имя в
следующей форме: имя_ресурса-спецификатор_конфигурации, где
o имя_ресурса - имя директории, соответствующего ресурса по умолчанию (см.
выше);
o спецификатор_конфигурации - имя, определяющее конфигурацию, для
которой используются данные ресурсы. Полный список доступных
спецификаторов: http://developer.android.com/guide/topics/resources/providing-
resources.html
2. необходимо сохранить ресурсы в новой директории, файл ресурсов должен
называться в точности так же, как соответствующий файл ресурсов по умолчанию.
Например, если компоновка элементов пользовательского интерфейса сохранена,
как ресурс по умолчанию, в папке res/layout/, можно (скорее даже нужно) определить
альтернативную компоновку элементов пользовательского интерфейса, соответствующую
горизонтальной (альбомной) ориентации экрана смартфона и сохранить ее в папке
res/layout-land/. Android автоматически определит подходящую компоновку, сверяя
текущее состояние устройства с именами папок в каталоге /res.
Все ресурсы после определения могут быть доступны по ссылке на их ID, которые
определены в автоматически генерируемом классе R. Для каждого типа ресурсов в R
классе существует подкласс, например, R.drawable для всех графических ресурсов. ID
ресурса всегда имеет две составляющие:
o тип ресурса - все ресурсы группируются по типам, например, string, drawable,
layout;
o имя ресурса - либо имя файла без расширения, либо значение атрибута
android:name в XML файле для простого значения.
Получить доступ к ресурсу можно двумя способами:
o в коде: можно использовать выражения вида R.тип_ресурса.имя_ресурса,
например, R.string.hello;
o в XML: используется специальный XML синтаксис, который соответствует ID
определенному в R классе, например, @string/hello.
Более предметно разговор об использовании ресурсов в лабораторных работах.
Подробности: http://developer.android.com/guide/topics/resources/index.html
Лекция 3. Основы разработки интерфейсов мобильных приложений
Цель лекции: Большинство современных мобильных устройств имеют сенсорные
дисплеи. Между традиционным оконным и тачевым интерфейсами существует огромная
разница. Разработка удобного интерфейса для мобильных приложений является довольно
сложной проблемой. Основной целью лекции является рассмотрение основ разработки
интерфейсов мобильных приложений. В лекции рассказывается об особенностях
визуального дизайна интерфейсов, строительных блоках и элементах управления.
Приведены рекомендации по проектированию GUI под Android, а также имеется большое
количество разнообразных примеров.
План лекции:
1 Визуальный дизайн интерфейсов
1.1 Изобразительное искусство, визуальный дизайн интерфейсов и прочие
дисциплины дизайна
1.2 Графический дизайн и пользовательские интерфейсы
1.3 Визуальный информационный дизайн
2 Строительные блоки визуального дизайна интерфейсов
2.1 Форма
2.2 Размер
2.3 Цвет
2.4 Яркость
2.5 Направление
2.6 Текстура
2.7 Расположение
3 Элементы управления и дизайн навигации
3.1 Командные элементы управления
Кнопки
Кнопки-значки
Гиперссылки
3.2 Элементы управления выбором
Флажки
Выключатели
Триггеры
Радиокнопки
Списки
Комбо-списки и комбо-кнопки
3.3 Элементы ввода
Ограничивающие элементы ввода
Счетчики
Рукоятки и ползунки
Неограничивающие элементы ввода
3.4 Элементы управления отображением
Текстовые элементы
Полосы прокрутки
Разделители
Выдвижные панели
4 Рекомендации по проектированию GUI под Android
4.1 Рекомендации разработчиков. AndroidGuideline
4.2 Обзор интерфейса
4.3 Шрифты
4.4 Масштабирование
Ключевые слова:play, дизайн, пользователь, интерфейс, элементы управления, Windows.
Содержание лекции:
Для подготовки данной лекции в качестве основного источника информации была
использована книга "Алан Купер об интерфейсе" {Купер А., Рейман Р., Кронин Д., Алан
Купер об интерфейсе. Основы проектирования взаимодействия. – Пер. с англ. – СПб.:
Символ-Плюс, 2009. – 688 с. [ISBN 978-5-93286-132-5] }, однако задекларированные в ней
принципы были переработаны в контексте программирования для мобильных устройств, а
примеры заменены на более подходящие в рамках данного курса. Скриншоты
приложений взяты из магазина приложений GooglePlay или сделаны самостоятельно с
использованием смартфона Мегафон SP-A20i Mint на платформе IntelMedfield.
1 Визуальный дизайн интерфейсов
Силы, вложенные в разработку модели поведения программного продукта, будут
потрачены впустую, если вы не сумеете должным образом донести до пользователей
принципы этого поведения. В случае мобильных продуктов это делается визуальными
средствами - путем отображения объектов на дисплее (в некоторых случаях
целесообразно использовать тактильные ощущения от нажатия).
Визуальный дизайн интерфейсов - очень нужная и уникальная дисциплина,
которую следует применять в сочетании с проектированием взаимодействия и
промышленным дизайном. Она способна серьезно повлиять на эффективность и
привлекательность продукта, но для полной реализации этого потенциала нужно не
откладывать визуальный дизайн на потом, а сделать его одним из основных инструментов
удовлетворения потребностей пользователей и бизнеса.
1.1 Изобразительное искусство, визуальный дизайн интерфейсов и прочие
дисциплины дизайна
Художники и визуальные дизайнеры работают с одними и теми же
изобразительными средствами, однако их деятельность служит различным целям. Цель
художника - создать объект, взгляд на который вызывает эстетический отклик.
Изобразительное искусство - способ самовыражения художника. Художник не связан
почти никакими ограничениями. Чем необычнее и своеобразнее продукт его усилий, тем
выше он ценится.
Дизайнеры создают объекты, которыми будут пользоваться другие люди. Если
говорить о дизайнерах визуальных интерфейсов, то они ищут наилучшее представление,
доносящее информацию о поведении программы, в проектировании которой они
принимают участие. Придерживаясь целеориентированного подхода, они должны
стремиться представлять поведение и информацию в понятном и полезном виде, который
поддерживает маркетинговые цели организации и эмоциональные цели персонажей.
Разумеется, визуальный дизайн пользовательских интерфейсов не исключает
эстетических соображений, но такие соображения не должны выходить за рамки
функционального каркаса.
1.2 Графический дизайн и пользовательские интерфейсы
Графические дизайнеры обычно очень хорошо разбираются в визуальных аспектах
и хуже представляют себе понятия, лежащие в основе поведения программного продукта
и взаимодействия с ним. Они способны создавать красивую и адекватную внешность
интерфейсов, а кроме того - привносить фирменный стиль во внешний вид и поведение
программного продукта. Для таких специалистов дизайн или проектирование интерфейса
есть в первую очередь тон, стиль, композиция, которые являются атрибутами бренда, во
вторую очередь - прозрачность и понятность информации и лишь затем - передача
информации о поведении посредством ожидаемого назначения.
Дизайнерам визуальной части интерфейса необходимы некоторые навыки, которые
присущи графическим дизайнерам, но они должны еще обладать глубоким пониманием и
правильным восприятием роли поведения. Их усилия в значительной степени
сосредоточены на организационных аспектах проектирования. В центре их внимания
находится соответствие между визуальной структурой интерфейса с одной стороны и
логической структурой пользовательской ментальной модели и поведения программы - с
другой. Кроме того, их заботит вопрос о том, как сообщать пользователю о состояниях
программы и что делать с когнитивными аспектами пользовательского восприятия
функций.
1.3 Визуальный информационный дизайн
Информационные дизайнеры работают над визуализацией данных, содержимого и
средств навигации. Усилия информационного дизайнера направлены на то, чтобы
представить данные в форме, способствующей их верному истолкованию. Результат
достигается через управление визуальной иерархией при помощи таких средств, как цвет,
форма, расположение и масштаб. Распространенными объектами информационного
дизайна являются всевозможные графики, диаграммы и прочие способы отображения
количественной информации.
Чтобы создавать привлекательные и удобные пользовательские интерфейсы,
дизайнер интерфейсов должен владеть базовыми визуальными навыками - пониманием
цвета, типографики, формы и композиции - и знать, как их можно эффективно применять
для передачи поведения и представления информации, для создания настроения и
стимулирования физиологических реакций. Дизайнеру интерфейса также требуется
глубокое понимание принципов взаимодействия и идиом интерфейса, определяющих
поведение продукта.
2 Строительные блоки визуального дизайна интерфейсов
Дизайн интерфейсов сводится к вопросу о том, как оформить и расположить
визуальные элементы таким образом, чтобы внятно отразить поведение и представить
информацию. Каждый элемент визуальной композиции имеет ряд свойств, и сочетание
этих свойств придает элементу смысл. Пользователь получает возможность разобраться в
интерфейсе благодаря различным способам приложения этих свойств к каждому из
элементов интерфейса. В тех случаях, когда два объекта обладают общими свойствами,
пользователь предположит, что эти объекты связаны или похожи. Когда пользователи
видят, что свойства отличаются, они предполагают, что объекты не связаны.
Создавая пользовательский интерфейс, проанализируйте перечисленные ниже
визуальные свойства каждого элемента или группы элементов. Чтобы создать полезный и
привлекательный пользовательский интерфейс, следует тщательно поработать с каждым
из этих свойств.
2.1 Форма
Форма - главный признак сущности объекта для человека. Мы узнаем объекты по
контурам. Если мы увидим на картинке синий ананас, мы его сразу опознаем, потому что
мы помним его форму. И лишь потом мы удивимся странному цвету (см. рис. 1). При этом
различение форм требует большей концентрация внимания, чем анализ цвета или размера.
Поэтому форма - не лучшее свойство для создания контраста, если требуется привлечь
внимание пользователя.
Рис. 1. В первую очередь мы видим ананас, а уже потом начинаем задумываться, почему
он синий
Рассмотрим компоненты платформы более подробно.
2.2 Размер
Более крупные элементы привлекают больше внимания, особенно если они
значительно превосходят размерами окружающие элементы. Люди автоматически
упорядочивают объекты по размеру и склонны оценивать их по размеру; если у нас есть
текст в четырех размерах, предполагается, что относительная важность текста растет
вместе с размером и что полужирный текст более важен, чем текст с нормальным
начертанием. Таким образом, размер - полезное свойство для обозначения
информационных иерархий.
2.3 Цвет
Цветовые различия быстро привлекают внимание. В некоторых профессиональных
областях цвета имеют конкретные значения, и этим можно пользоваться. Так, для
бухгалтера красный цвет - отрицательные результаты, а черный - положительные.
Цвета приобретают смыслы и благодаря социальным контекстам, в которых
проходит наше взросление. Например, белый цвет на Западе ассоциируется с чистотой и
миром, а в Азии и арабских странах - с похоронами и смертью. При этом цвет изначально
не обладает свойством упорядоченности и не выражается количественно, поэтому далеко
не идеален для передачи информации такого рода. Кроме того, не следует делать цвет
единственным способом передачи информации, поскольку цветовая слепота встречается
довольно часто.
Применяйте цвет с умом. Чтобы создать эффективную визуальную систему,
позволяющую пользователю выявлять сходства и различия объектов, используйте
ограниченный набор цветов - эффект радуги перегружает восприятие пользователя и
ограничивает возможности по передаче ему информации.
Выбор цветовой палитры для программы необходимо проводить очень осторожно.
По разным данным, той или иной формой цветовой слепоты страдают до 10% мужчин, и
использование, например, красного и зеленого цветов для указания контраста затрудняет
работу с приложением для этих людей.
2.4 Яркость
Понятия темного и светлого обретают смысл преимущественно в контексте
яркости фона. На темном фоне темный текст почти не виден, тогда как на светлом он
будет резко выделяться. Контрастность люди воспринимают легко и быстро, так что
значение яркости может стать хорошим инструментом привлечения внимания к тем
элементам, которые требуется подчеркнуть. Значение яркости - также упорядоченная
переменная, например, более темные (с более низкой яркостью) цвета на карте легко
интерпретируются: они обозначают большие глубины или большие значения других
параметров.
2.5 Направление
Направление полезно, когда требуется передавать информацию об ориентации
(вверх или вниз, вперед или назад). Помните, что восприятие направления может быть
затруднено в случае некоторых форм и при малых размерах объектов, поэтому ее лучше
использовать в качестве вторичного признака. Так, если требуется показать, что рынок
акций пошел вниз, можно использовать направленную вниз стрелку красного цвета.
2.6 Текстура
Разумеется, изображенные на экране элементы не обладают настоящей текстурой,
но способны создавать ее видимость. Текстура редко бывает полезна для передачи
различий или привлечения внимания, поскольку требует значительной концентрации на
деталях. И тем не менее текстура может быть важной подсказкой. Засечки и выпуклости
на элементах пользовательского интерфейса обычно указывают, что элемент можно
перетаскивать, а фаски или тени у кнопки усиливают ощущение, что ее можно нажать.
2.7 Расположение
Расположение - это переменная, упорядоченная и выражаемая количественно, а
значит, полезная для передачи иерархии. Расположение также может служить средством
создания пространственных отношений между объектами на экране и объектами
реального мира (например, небо в верхней половине, земля в нижней).
Расположение элементов мобильного приложения очень сильно влияет на удобство
использования и зависит от того, как пользователь будет держать устройство (см. рис. 2).
Подробнее об этом будет рассказано в продолжении данного курса.
Рис. 2. Различные варианты удержания смартфона
3 Элементы управления и дизайн навигации
Элементы управления - это доступные для манипулирования самодостаточные
экранные объекты, посредством которых люди взаимодействуют с цифровыми
продуктами. Элементы управления (controls, другое название - widgets - сокращение от
windowsgadgets - оконные приспособления) - это базовые строительные блоки
графического пользовательского интерфейса.
Рассматривая элементы управления с учетом целей пользователя, их можно
разбить на четыре основные категории:
o командные элементы управления, применяемые для выполнения функций;
o элементы выбора, позволяющие выбирать данные или настройки;
o элементы ввода, применяемые для ввода данных;
o элементы отображения, используемые для наглядного непосредственного
манипулирования.
Некоторые элементы управления сочетают в себе свойства более чем одной
категории.
3.1 Командные элементы управления
Командные элементы управления выполняют действия, причем делают это
немедленно. Главным и по сути единственным командным элементом является кнопка,
которая обладает множеством вариантов отображения. Элементы меню также являются
командными идиомами.
Кнопки
Кнопки обычно легко опознаются благодаря их псевдотрехмерности (рис. 3).
Действие выполняется сразу после нажатия на кнопку. Часто особым образом выделяется
кнопка по умолчанию, соответствующая наиболее часто используемому действию.
Рис. 3 Скриншоты популярной игры "CuttheRope". Кнопки кажутся выпуклыми, а нажатая
кнопка меняет цвет
Кнопка - удобный и привлекательный с визуальной точки зрения элемент
управления. Весь ее облик подсказывает, что на нее можно нажать, и это характеризует ее
ожидаемое назначение. Рекомендуется изменять внешний вид нажатой кнопки, так как это
облегчает понимание работы программы пользователем.
Кнопки-значки
Кнопки, помещенные на панель инструментов, обычно становятся квадратными,
теряют текстовую надпись и обзаводятся пиктограммой - пояснением в виде графического
значка ( рис. 4).
Рис. 4. Кнопки-значки в Android-приложении Twitter
Считается, что кнопки-значки очень удобны: они постоянно на виду и
взаимодействовать с ними проще, чем с элементами раскрывающегося меню. Поскольку
они постоянно видны, то легко запоминаются. У большинства пользователей не возникает
вопросов относительно ожидаемого назначения кнопки. Проблема в том, что изображение
на кнопке иногда бывает непонятным. Например, пиктограмма с изображением дискеты,
традиционно обозначающая сохранение, часто непонятна молодым пользователям,
которые никогда не работали с реальными дискетами.
Гиперссылки
Текстовые гиперссылки - распространенный способ навигации в сети и веб-
приложениях, однако при программировании для мобильных устройств их следует
избегать. Дело в том, что попасть по ссылке пальцем с первого раза часто затруднительно
и пользователей раздражает необходимость повторения этих действий.
3.2 Элементы управления выбором
Элементы выбора позволяют пользователю выбрать из группы допустимых
объектов тот, с которым будет совершено действие. Элементы выбора применяются также
для действий по настройке. Распространенными элементами выбора являются флажки и
списки.
Раньше использование элементов управления выбором не приводило к
немедленному выполнению действий - требовалась еще и активация командного
элемента. Сейчас возможны оба варианта. Если желательно дать пользователю
возможность несколько раз осуществить выбор перед выполнением действия, следует
создать явный командный элемент управления (кнопку). Если же пользователю полезно
сразу видеть результат своих действий, и эти действия легко отменить, разумно сделать
так, чтобы элемент выбора играл также и роль командного элемента.
Флажки
Назначение флажка очевидно. Щелкнув по флажку, пользователь немедленно
увидит появившуюся галочку. Флажок прост, нагляден и изящен, однако основан на
тексте. Качественный текст может исключить возможность неоднозначного толкования
флажка. Однако этот же поясняющий текст вынуждает пользователя замедляться для
прочтения, а также занимает значительное экранное пространство.
Традиционно флажки имеют квадратную форму. Не забывайте, что пользователи
распознают визуальные объекты по форме, и квадратная форма флажков - важный
стандарт.
Выключатели
Существует возможность сделать флажок более наглядным, применив в качестве
основы кнопку-значок, которая может фиксироваться в нажатом состоянии. Такой
элемент называется выключателем ( рис. 5).
Рис. 5. Один из самых распространенных выключателей - кнопка "Pause" в играх
Состояние выключателя остается неизменным до следующего щелчка.
Выключатели экономно расходуют экранное пространство: они занимают меньше места,
потому что их назначение описывается не с помощью текста, а посредством визуальных
средств. Разумеется, это означает, что им присущ тот же недостаток обычных кнопок-
значков - неоднозначность пиктограмм.
Триггеры
Кнопки-триггеры - это разновидность элементов управления. Они призваны
экономить экранное пространство, к сожалению, ценой значительной дезориентации
пользователя. Классический пример - размещение на одной кнопке функций
воспроизведения и паузы для музыкального проигрывателя. Подводным камнем такого
подхода является то, что элемент управления можно ошибочно посчитать индикатором
состояния проигрывателя ("на паузе" или "идет воспроизведение"). Элемент управления
может служить либо индикатором состояния, либо кнопкой переключения состояний, но
не тем и другим одновременно ( рис. 6).
Рис. 6. Если кнопка говорит "ВКЛЮЧЕНО", когда находится в состоянии "выключено", то
непонятно, в каком же состоянии находится кнопка. Если кнопка говорит
"ВЫКЛЮЧЕНО", когда находится в состоянии "выключено", тогда возникает вопрос, где
искать кнопку "ВКЛЮЧЕНО"?
Радиокнопки
Радиокнопки внешне похожи на флажки ( рис. 7), но являются
взаимоисключающими, то есть выбор одного из вариантов автоматически аннулирует
предыдущий выбор. В каждый момент времени может быть выбрана только одна кнопка.
Радиокнопки всегда объединяются в группы из двух или более радиокнопок, причем в
каждой группе одна радиокнопка всегда выбрана. Радиокнопки всегда круглые по той же
причине, по которой флажки всегда имеют квадратную форму: именно такими они были
изначально.
Радиокнопки занимают даже больше места, чем флажки, однако в некоторых
случаях такой расход экранного пространства оправдан.
Кнопка-значок преобразовала радиокнопки так же, как флажки, заменив их в
основном интерфейсе приложения. Если два или более выключателя объединены схемой
взаимного исключения - так, чтобы в каждый момент мог быть включен лишь один из
них, - они ведут себя точно так же, как радиокнопки. Так образуются радиокнопки со
значками. Элементы управления цветом в AdobePhotoshop - хороший пример радиокнопок
со значками ( рис.8).
Рис. 7. Радиокнопки Android-приложения Dr.Web
Рис. 8. Элементы управления цветом в Android-приложении AdobePhotoshop
представляют собой группу радиокнопок со значками
Списки
Элементы управления типа "список" позволяют осуществлять выбор из конечного
множества текстовых строк, каждая из которых представляет команду, объект или
признак. Подобно радиокнопкам, списки - мощный инструмент, упрощающий
взаимодействие за счет устранения возможности неправильного выбора. Списки - это
небольшие текстовые области с полосой прокрутки, автоматически подключаемой при
необходимости ( рис. 9). Пользователь может выбрать единственную строку текста, нажав
на нее.
Рис. 9. Стандартный список в Android
Раскрывающийся список - повсеместно встречающийся вариант обычного списка.
Он показывает лишь выбранный элемент в одну строку, но если нажать на стрелку,
открываются другие варианты выбора.
Элемент управления представление в виде списка предоставляет возможность
сопровождать каждую строку текста пиктограммой. Такая возможность весьма полезна -
существует множество ситуаций, когда можно упростить работу пользователя, располагая
графические идентификаторы рядом со строками важных вариантов выбора ( рис. 10).
Рис. 10. Элемент управления типа "список" с пиктограммами в Android-приложении,
позволяющий визуально оценивать погоду в различных городах
Комбо-списки и комбо-кнопки
Комбо-элементы представляют собой сочетание элементов. Комбо-кнопка -
разновидность радиокнопки со значком. Обычно она выглядит как кнопка-значок с
небольшой стрелкой, но если нажать на стрелку и удерживать ее в нажатом состоянии,
разворачивается меню.
Комбо-список представляет собой сочетание списка и поля редактирования (рис.
11).
Рис. 11. Раскрывающееся поле со списком в Android-приложении ABBYY Translator
позволяет выбрать нужный язык из списка
Вариант с раскрывающимся списком значительно экономит экранное
пространство. Комбо-список хорошо подходит для тех случаев, когда необходимо
организовать выбор единственного объекта.
3.3 Элементы ввода
Элементы ввода дают пользователю возможность не только выбирать
существующие сведения, но и вводить новую информацию. Самый простой элемент -
поле редактирования текста (поле ввода). В эту категорию попадают также такие
элементы управления, как счетчики и ползунки.
Ограничивающие элементы ввода
Любой элемент управления, ограничивающий набор значений, доступных для
ввода пользователем, является ограничивающим элементом ввода. Так, например,
ползунок со шкалой значений от 0 до 100 является ограничивающим элементом ввода.
Независимо от действий пользователя не может быть введено число, выходящее за
диапазон определенных программой значений. Проще говоря, ограничивающие элементы
ввода должны использоваться везде, где необходимо ограничить множество допустимых
значений.
Ограничивающий элемент ввода должен четко информировать пользователя о
допустимых границах. Текстовое поле, которое отвергает ввод пользователя после того,
как он выполнил ввод, не может считаться ограничивающим элементом управления. Если
пользователь должен выразить выбор числовым значением в определенных границах,
предоставьте ему элемент управления, сообщающий об этих границах и
предотвращающий ввод недопустимых значений. Такую возможность дает ползунок.
Ползунок позволяет пользователю определять числовые значения в относительных
терминах, а не в результате непосредственного ввода с клавиатуры. Но для ввода точных
значений лучше подходят счетчики.
Счетчики
Счетчик состоит из небольшого поля ввода и двух прикрепленных к нему кнопок
(рис. 12). Благодаря счетчикам грань между ограничивающими и неограничивающими
элементами ввода данных становится размытой. Маленькие кнопки со стрелками
позволяют пользователю изменять значение в поле редактирования небольшими шагами.
Эти шаги могут выполняться до определенного предела: значение не может превысить
максимум, установленный программой, или стать меньше установленного минимума.
Если пользователь пожелает ввести определенное число, он может сделать это за счет
прямого ввода числа в поле редактирования.
Рис. 12. Реализация счетчиков в Android-приложении Quickoffice
Рукоятки и ползунки
Рукоятки и ползунки очень эффективно расходуют экранное пространство, и оба
этих элемента управления замечательно справляются с задачей обеспечения визуальной
обратной связи по настройкам ( рис. 13). Ползунки и рукоятки применяются в основном в
качестве ограничивающих элементов управления ввода. Например, ползунки -
превосходное средство для действий, связанных с масштабированием.
Рис. 13. Ползунок в Android-приложении Winamp осуществляет перемотку
воспроизводимой композиции
Неограничивающие элементы ввода
Пожалуй, главный неограничивающий элемент ввода - поле ввода текста. Этот
простейший элемент управления позволяет пользователям набирать любые алфавитно-
цифровые строки. Как правило, поля ввода - это небольшие области, внутри которых
можно набрать одно-два слова, но они могут быть реализованы и в виде довольно
сложных текстовых редакторов.
Когда пользователю предложено неограничивающее текстовое поле ввода, которое
при этом принимает лишь строки определенного формата, вероятно, имеется
необходимость помочь пользователям вводить "допустимые" строки. Имеется множество
стандартных форматов вводимых данных - даты, телефонные номера, почтовые индексы,
номера социального страхования. Ключ к успешному проектированию элемента ввода с
проверкой данных - в хорошо развитой обратной связи с пользователем.
3.4 Элементы управления отображением
Элементы управления отображением используются для управления визуальным
представлением информации на экране. Типичными примерами элементов отображения
являются разделители и полосы прокрутки. Сюда же входят разделители страниц,
линейки, направляющие, сетки и рамки.
Текстовые элементы
Вероятно, самый простой элемент управления отображением - элемент вывода
текстовой информации, который отображает текстовое сообщение в некоторой позиции
на экране. Он предоставляет текстовые метки для других элементов управления и выводит
данные, которые не могут или не должны быть изменены пользователем. Единственная
серьезная проблема этого элемента состоит в том, что он зачастую используется там, где
должны присутствовать элементы ввода (и наоборот).
Полосы прокрутки
Полосы прокрутки служат важной цели - они позволяют осмысленным образом
помещать большие объемы информации внутри рамок окон и панелей. К сожалению, они
расходуют экранное пространство и ими сложно манипулировать. Однако замечательное
преимущество полосы прокрутки состоит в создании контекста текущего положения в
окне. Бегунок полосы прокрутки указывает текущее положение и нередко масштаб
"территории", доступной для прокрутки.
Разделители
Разделители - удобный инструмент для разделения главного окна приложения на
несколько связанных между собой панелей, в каждой из которых можно просматривать,
изменять или переносить ту или иную информацию. Подвижные разделители всегда
должны сообщать о своей подвижности посредством изменения формы курсора. Однако
следует проявлять осторожность, выбирая, какие именно разделители должны стать
подвижными. В общем случае разделитель не должен перемещаться таким образом, чтобы
содержимое панели становилось непригодным к использованию.
Выдвижные панели
Выдвижные панели - это панели приложения, которые можно открывать и
закрывать в одно действие. Выдвижные панели - замечательное место для элементов
управления и функций, которые используются совместно с основной рабочей областью
приложения, но не столь часто. Выдвижные панели более удобны, чем диалоговые окна,
так как не закрывают основное окно (рис. 14).
Рис. 14. Скриншоты популярной игры "CuttheRope". Новостная панель появляется, если
потянуть за кольцо
4 Рекомендации по проектированию GUI под Android
4.1 Рекомендации разработчиков. AndroidGuideline
Когда платформа Android только появилась, не было никаких рекомендаций по
разработке дизайна, поэтому все разработчики проектировали внешний вид приложений
по своему вкусу. Отсутствие единого стиля сказалось на интерфейсах не лучшим образом,
многие программы были откровенно некрасивы и неудобны. Кроме того, операционная
система Android работает на устройствах с различными экранами, и разработчику
необходимо помнить, что его приложение должно масштабироваться под различные
параметры смартфонов и планшетов.
В настоящее время существует стандарт AndroidDesign, и, если вы хотите, чтобы
ваше приложение стало по-настоящему популярным и нужным, настоятельно
рекомендуем его придерживаться. Далее мы рассмотрим основные принципы дизайна.
Разумеется, в рамках этого курса невозможно учесть все нюансы. В списке источников
есть ссылка на рекомендации от Android User ExperienceTeam, к сожалению, все на
английском языке.
Приведем выдержки из рекомендаций по дизайну:
o Реальные объекты гораздо веселее, чем кнопки и меню. Позвольте людям
манипулировать знакомыми вещами! Тогда работа будет эффективнее.
o Картинки работают быстрее, чем слова.
o Используйте короткие фразы, состоящие из простых слов. Люди часто
пропускают предложения, если они слишком длинные.
o Никогда не теряйте пользовательскую информацию. Если человеку придется
вводить данные повторно, велика вероятность того, что он откажется использовать
ваше приложение.
o Если объекты похожи, они должны выполнять сходные действия.
o Показывайте только то, что необходимо пользователю именно в этот момент.
o Выводите пользователю сообщения, только если вопрос действительно важен.
o Делайте важные вещи быстро.
o Разбивайте сложные задачи на несколько простых шагов.
o Будьте вежливы и корректны в общении с пользователем.
o Пользователь всегда должен быть уверен в том, что он знает, где сейчас
находится. На любом шаге он должен иметь возможность вернуться назад, даже
если это прервет выполнение какой-то задачи.
o Используйте интерфейсные элементы, которые будут работать в любой
ситуации.
o Самый главный принцип - НЕ УСЛОЖНЯЙТЕ пользователю жизнь!
4.2 Обзор интерфейса
Приведем выдержки из рекомендаций по дизайну приложений для Android.
Сделаем краткий обзор интерфейса операционной системы.
Домашний экран - это настраиваемая пользователем область, которая может
содержать иконки приложений, папки и виджеты. Смартфон может иметь несколько
домашних экранов, навигация между ними осуществляется с помощью перелистывания
влево или вправо.
На домашнем экране в центре нижней части есть кнопка для открытия экрана
приложений. Экран приложений позволяет пользователю запустить любую из
установленных программ. Если устройство было использовано для отладки в процессе
разработки, то приложение тоже окажется в этом списке и его можно будет вызвать даже
после отключения от компьютера. Если приложение было использовано недавно, его
можно найти в списке недавно использованных приложений, который вызывается
нажатием на третью кнопку на панели внизу (см. рис. 15).
Рис. 15. Домашний экран, экран всех приложений и список недавно использовавшихся
приложений
Рис. 16. Информационная (1) и навигационная (2) панели
В нижней и верхней частях экрана находятся системные панели, предназначенные
для размещения уведомлений и навигации по устройству. Нижняя панель (NavigationBar)
предназначена для навигации на тех устройствах, которые не имеют аппаратных
навигационных клавиш (все современные устройства). Верхняя часть экрана (StatusBar)
предназначена для вывода различных сведений, например, времени, уровня заряда
батареи, сигнала сотовой сети, а так же информационных сообщений.
Уведомления - это быстрые сообщения, к которым пользователь может получить
доступ в любое время из информационной панели. Это могут быть сообщения об
обновлениях или других важных сообщениях, которые не настолько серьезны, чтобы
прерывать работу пользователя. Но к ним легко можно получить доступ, потянув вниз
верхнюю панель. Нажатие на уведомление вызывает соответствующее сообщение.
4.3 Шрифты
В дизайне Android используются традиционные типографические инструменты,
такие как масштаб, разреженность и выравнивание по сетке. Успешное применение этих
выразительных средств помогает пользователю воспринимать информацию быстрее. В
версии Android 4.0 IceCreamSandwich была представлена шрифтовая гарнитура без
засечек Roboto, специально разработанная для экранов с высоким разрешением. Набор
шрифтов доступен для бесплатной загрузки. Гарнитура включает в себя прямое и
наклонное начертания для шрифтов различной ширины (см. рис. 17).
Рис. 17. Шрифт Roboto и его возможные варианты
4.4 Масштабирование
Рис. 18. Размеры экранов телефонов и планшетов
Устройства различаются не только физическими размерами. Важным параметром
является плотность экрана (DPI - количество точек на дюйм). Выделяют несколько
категорий плотности экрана для Android-устройств: LDPI, MDPI, HDPI, XHDPI, XXHDPI,
и XXXHDPI. Чтобы элементы интерфейса имели одинаковый физический размер на
экранах разных устройств, компания Google ввела абстрактную единицу измерения - DP
(независимый от разрешения пиксель). Один DP равен одному пикселю на экране типа
MDPI. Устройства, имеющие меньше 600dp по короткой стороне, считаются телефонами,
в противном случае мы говорим о планшетах (см. рис. 18).
Соответствие размеров экранов и их плотностей представлено в таблице 1:
Таблица 1. Плотности и размеры экранов
№ Обозначение Название Соответствие 1 dp =
1 LDPI Lowdensity 120 dpi 0,75 пикселя
2 MDPI Mediumdensity 160 dpi 1 пиксель
3 HDPI Highdensity 240 dpi 1,5 пикселя
4 XHDPI Extra-highdensity 320 dpi 2 пикселя
5 XXHDPI Extra-extra!-highdensity 480 dpi 3 пикселя
6 XXXHDPI Extra-extra-extra!-high density 640 dpi 4 пикселя
Минимальный размер элемента управления - 48dp. Такое значение обусловлено
тем, что на реальном устройстве оно соответствует 7-10 миллиметрам. При управлении
кончиками пальцев такой размер является минимальным для отделения нужного элемента
от всех остальных. Если какой-то из размеров элемента управления должен быть больше,
чем 48dp, рекомендуется делать его размеры кратным этому значению (см. рис. 19).
Рис. 19. Размеры элемента управления кратны 48dp
Рис. 20. Пример расположения элементов управления
Расстояние между элементами управления рекомендуется делать кратным 8dp (см.
рис. 20).
Прочие нюансы дизайна для Android рассмотрены в лабораторной работе.
Лекция 4. Основы разработки многооконных приложений
Цель лекции: В прошлых лекциях мы рассмотрели особенности разработки приложений
для ОС Android и настройки их интерфейсов. Однако все рассмотренные примеры
вписывались в рамки экрана отдельно взятого устройства. Что делать в случаях, когда это
условие не может быть соблюдено? В лекции рассказывается о работе с диалоговыми
окнами, уведомлениями и всплывающими подсказками. Приведены особенности
разработки приложений, содержащих несколько активностей, а так же способы
перемещения между ними в запущенном приложении.
План лекции:
1 Многооконные приложения
2 Работа с диалоговыми окнами
2.1 Диалоговые окна
2.2 Использование класса Dialog
2.3 Уведомления
2.4 Всплывающие подсказки
3 Особенности разработки приложения, содержащего несколько активностей
4 Перелистывание (Swipe)
Контрольные вопросы:
Ключевые слова:активность, поле, управляющие, файл, место, приложение, twitter.
Содержание лекции:
1 Многооконные приложения
Для мобильных приложений главным ограничением является размер экрана
устройства. Очень часто невозможно разместить все элементы полнофункционального
приложения так, чтобы их можно было увидеть одновременно. Очевидным решением
этой проблемы является разделение интерфейса на части по какому-либо принципу.
Основные пути решения этой проблемы:
o Использовать различные сообщения (диалоговые окна, уведомления, всплывающие
подсказки). Этот способ наиболее прост и не требует редактирования файла
манифеста, однако очевидно, что так можно решить только часть задач.
o Использовать в одном приложении несколько активностей. Способ универсальный
и подходит для любых приложений, однако прежде чем его реализовывать,
необходимо очень хорошо продумать структуру будущего приложения. Здесь
требуется редактировать манифест и организовать переключение между
различными активностями удобным для пользователя способом.
o Разместить компоненты на активности таким образом, что в нужный момент
можно будет легко переключиться на работу с другой частью интерфейса.
Каждый способ имеет свои нюансы использования. Рассмотрим их более подробно.
2 Работа с диалоговыми окнами
2.1 Диалоговые окна
Диалог - это небольшое окно, позволяющее пользователю получить или ввести
дополнительную информацию. Диалоговое окно занимает только часть экрана и обычно
используется в модальном режиме. Это означает, что работа приложения
приостанавливается до момента, пока пользователь не закроет диалоговое окно. При этом
ему, возможно, потребуется ввести какие-то данные или просто выбрать один из
вариантов ответа (см. рис. 1).
Примеры диалоговых окон
Рис. 1. Примеры диалоговых окон
В ОС Android можно выделить три вида диалоговых окон:
o Класс Dialog и его производные. Помимо традиционного набора диалоговых окон,
он содержит несколько дополнительных вариантов, в которых используются
возможности сенсорного интерфейса (см. рис. 1 слева). Диалоги этого типа не
создают новых активностей и их не нужно регистрировать в файле манифеста (см.
следующие разделы лекции), что существенно упрощает разработку. Однако они
работают в модальном режиме и требуют немедленного ответа пользователя,
поэтому для простого информирования рекомендуется использовать сообщения
следующих двух типов.
o Уведомления (notifications). Это сообщения, которые отображаются в верхней
панели в области уведомлений. Для того чтобы прочитать это сообщение,
необходимо на домашнем экране потянуть вниз верхнюю шторку. Пользователь
может это сделать в любой момент времени, следовательно, уведомления стоит
использовать, когда сообщение является важным, однако не требует немедленного
прочтения и ответа.
o Всплывающие подсказки (toasts). Сообщения, которые появляются прямо на экране
приложения, перекрывая его интерфейс, и через некоторое время (обычно
несколько секунд) автоматически пропадают. Их рекомендуется использовать для
простых уведомлений, не требующих ответа пользователя, но важных для
продолжения его работы.
2.2 Использование класса Dialog
Класс Dialog является базовым для диалогов и редко используется напрямую.
Рекомендуется применять производные от этого класса:
o AlertDialog. Диалоговое окно может содержать заголовок, до трех кнопок, список
выбираемых значений или настраиваемое содержимое. Пример на рис. 1 справа.
o DatePickerDialog или TimePickerDialog. Диалоговое окно с предопределенным
интерфейсом, позволяющее выбрать дату или время.
o ProgressDialog. Показывает диалоговое окно, содержащее линейку процесса
выполнения какого-то действия. В рекомендациях по дизайну для Android
советуют использовать вместо него компонент ProgressBar.
Существует возможность создавать собственные диалоговые окна с
использованием класса DialogFragment в качестве контейнера. В таком случае можно
контролировать его поведение. Обратите внимание, что минимальной версией,
поддерживающей DialogFragment напрямую, является Android 3.0 (API level 11). Если вы
хотите использовать возможности этого класса на более ранних версиях, необходимо
добавить библиотеку SupportLibrary в ваше приложение.
Рассмотрим создание диалогового окна на примере класса AlertDialog. Существует
множество вариантов диалоговых окон этого класса, однако все они содержат следующие
три части (см. рис. 2):
1. Заголовок. Не является обязательным элементом и должен быть использован,
только если содержательная часть занята детализированным сообщением, списком
или чем-то еще. Если нужно сделать небольшое сообщение или вопрос, не стоит
снабжать его выделенным заголовком.
2. Содержательная часть. Здесь может быть сообщение, список или какой-то другой
настраиваемый компонент.
3. Управляющие кнопки. Диалог может содержать не больше трех кнопок. Если
элементы содержательной части являются кликабельными, можно вообще
обойтись без кнопок (см. рис. 3).
Рис. 2. Компоновка диалогового окна (класс Рис. 3. Можно выбрать один из трех
AlertDialog) перечисленных цветом непосредственно
нажатием на его название
Возможности использования диалоговых окон будут рассмотрены в лабораторной
работе более подробно.
2.3 Уведомления
Уведомления являются неотъемлемой частью дизайна Android-приложений. На
рис. 4 показаны уведомления в свернутом и развернутом виде.
Рис. 4. Уведомления. Слева - информационная панель со свернутыми уведомлениями,
справа эти же уведомления развернуты
Существует два варианта отображения уведомлений в развернутом виде -
нормальный и расширенный (доступен начиная с Android 4.1).
Состав уведомления в нормальном виде представлен на рис. 5. Высота
уведомления составляет 64 dp. Уведомление содержит следующие части:
1. Заголовок.
2. Большая иконка.
3. Текст сообщения.
4. Информация о сообщении.
5. Маленькая иконка приложения.
6. Время (или дата), когда было отправлено сообщение.
Рис. 5. Стандартное уведомление
Уведомление появляется в расширенном виде, только если оно находится вверху
списка уведомлений, или же когда пользователь сделал жест с целью его увеличения.
Расширенное уведомление (см. рис. 6) включает в себя те же пункты, что и обычное, но
при этом дополнительно содержит детализированную область (на рисунке отмечено
номером 7). Это может быть, например, картинка до 256 dp высотой, блок текстовой
информации или что-то еще.
Рис. 6. Расширенное уведомление
2.4 Всплывающие подсказки
Всплывающие подсказки помогают отобразить обратную связь с действиями
пользователя. Они занимают минимум места на экране и быстро исчезают (см. рис. 7).
Поэтому рекомендуется использовать их для простого уведомления пользователя, когда
не требуется получить от него ответа. Всплывающие подсказки могут появляться в любом
месте экрана, что позволяет делать их работу более эффективной.
Рис. 7. Всплывающие подсказки
3 Особенности разработки приложения, содержащего несколько активностей
Приложения, содержащие несколько активностей, используются в самых разных
сферах. При проектировании такого приложения следует уделить большое внимание
распределению его функционала по разным активностям. С одной стороны, не стоит
перегружать экран информацией, а с другой - нужна ли активность, содержащая только
одно поле для ввода? Может быть, стоит ее заменить диалоговым окном?
Существует два основных способа переключения между активностями:
o При помощи кнопок и других элементов управления. Не требует перестройки
мышления у программистов, которые имеют большой опыт разработки десктопных
приложений, а так же у пользователей, привыкших к действиям в стиле "нажал на
кнопку, получил результат". Однако этот способ не является наиболее подходящим
для сенсорных экранов и требует от опытного пользователя смартфона совершения
лишних движений.
o С использованием сенсорного экрана смартфона. Основная идея состоит в том, что
весь экран мобильного устройства можно использовать в качестве управляющего
элемента, и, нажимая на отдельные его участки, пользователь может инициировать
те или иные действия. Более подробно возможности жестового интерфейса будут
рассмотрены далее, в этой и следующей темах.
Какой из способов выбрать, зависит от конкретной задачи.
Существует ряд правил расположения интерфейсных элементов в зависимости от
их важности. Так, кнопку, выполняющую важное действие (например, отправку письма),
не стоит располагать в том месте, где она может быть случайно нажата. В то же время
управляющие элементы, используемые наиболее часто, должны быть расположены
наиболее удобным для нажатия образом. Скорее всего, перемещение между активностями
будет использоваться не очень часто, поэтому рекомендуется располагать кнопки,
управляющие этими действиями, в верхней части экрана. Одновременно с этим неплохо
продублировать нажатия кнопок перелистыванием между активностями.
В любом случае для вызова другой активности необходимо вручную править файл
манифеста. Для каждой новой активности необходимо занести информацию о ее имени и
названии xml-файла, в котором она описана (см. листинг 1). Обратите внимание, что при
загрузке приложения первой появляется активность, чье описание находится первым в
манифесте! Если вы хотите изменить порядок загрузки активностей, необходимо
поместить новую активность на первое место.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myproject.screen"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.myproject.screen.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.myproject.screen.AboutActivity"
android:label="@string/about_title" >
</activity>
<activity
android:name="com.myproject.screen.SecondActivity"
android:label="@string/title_activity_second" >
</activity>
</application>
</manifest>
Листинг 1. Исправленныйфайлманифеста
4 Перелистывание (Swipe)
Существует способ разместить на активности больше элементов, чем
одновременно помещается на экран, иными словами, отображать по очереди несколько
экранов, используя только одну активность. В этом случае не нужно править файл
манифеста - активность только одна. Однако для каждого экрана необходимо сделать свой
xml-файл с его описанием.
Такой способ размещения элементов удобен и программисту, и пользователю.
Разработчик может организовать перемещение между частями активности и с помощью
кнопок, и с помощью перелистывания. В качестве примера подобного интерфейса можно
привести приложение Twitter (см. рис. 8). О разработке подобных приложений
рассказывается в лабораторной работе.
Рис. 8. Главный экран приложения Twitter. Можно переключаться между экранами,
используя жест горизонтальной прокрутки или с помощью кнопок в верхней части
Контрольные вопросы:
1. Назовите основные виды диалоговых окон. Где они используются?
2. Подумайте над концепцией собственного приложения. Сколько активностей оно
будет содержать? Каким образом будет организовано перемещение между ними?
3. Нарисуйте прототип собственного приложения, состоящего из нескольких
активностей.
Лекция 5. Использование возможностей смартфона в приложениях
Цель лекции: Особенностью большинства мобильных устройств является наличие
сенсорного экрана и возможность управления пальцем (touch-interface), очевидно, что это
необходимо учитывать и использовать при разработке приложений. Смартфон, если уж
появляется у человека, становится его спутником всегда и везде, в связи с этим, довольно
часто используется, как фотоаппарат или проигрыватель музыки, а также смартфоны все
чаще становятся инструментами ориентирования на местности.В данной лекции
предполагается рассмотрение вопросов разработки приложений, ориентированных на тач-
интерфейс, работу со звуком, использование камеры и глобальных систем
позиционирования.
План лекции:
1 Введение
2 Отличительные особенности смартфонов
3 Сенсорное (touch) управление
3.1 Сбор данных о сенсорных событиях
3.2 Распознавание жестов
4 Работа с мультимедиа
5 Использование встроенной камеры
6 Взаимодействие с системами позиционирования
7 Другие сенсоры и датчики
Ключевые слова:среда разработки, android, смартфон, интерфейс, площадь, элементы
управления, мультимедиа, media, поддержка, запись, GPS, координаты, приложение,
точное время, расстояние, связь, акселерометр, гироскоп, распознавание, множества,
RAW, API, информация, класс, диаграмма, цикла, объект, globalpositioningsystem,
надежность, точность, Дополнение, NFC, очередь, network, location, provider, доступ, play,
store, SDK, мобильное устройство, значение, hardware.
Содержание лекции:
1 Введение
В этом курсе проделана уже немалая работа: установлена и настроена среда
разработки, созданы первые приложения, хочется двигаться дальше. Разработка
мобильных приложений под Android имеет ряд особенностей, часть из них мы уже
рассмотрели, часть ожидают рассмотрения в ближайших темах. Данная тема, как видно из
названия, посвящена возможностям смартфонов и их использованию в приложениях.
Особенностью большинства мобильных устройств является наличие сенсорного
экрана и возможность управления пальцем (touch-interface), очевидно, что это необходимо
учитывать и использовать при разработке приложений. Смартфон, если уж появляется у
человека, становится его спутником всегда и везде, в связи с этим, довольно часто
используется, как фотоаппарат или проигрыватель музыки, а также смартфоны все чаще
становятся инструментами ориентирования на местности.
В данной теме предполагается рассмотрение вопросов разработки приложений,
ориентированных на тач-интерфейс, работу со звуком, использование камеры и
глобальных систем позиционирования.
2 Отличительные особенности смартфонов
Пришло время поговорить о наиболее интересных возможностях смартфонов,
которые можно использовать в приложениях. Ни для кого не секрет1, что смартфон
является "умным телефоном": предполагает обязательное наличие операционной системы
и возможность установки дополнительных приложений, существенно расширяющих
функционал устройства. С одной стороны, смартфон выполняет все привычные функции
мобильного телефона и, благодаря компактным размерам, всегда под рукой. С другой
стороны, благодаря наличию процессора и операционной системы, позволяет выполнять
многие функции полноценного компьютера. Дополнительно ко всему, смартфоны
обладают рядом интересных особенностей, не характерных для телефонов и компьютеров.
Для начала обратим внимание на экран смартфона. В современных смартфонах
экран занимает практически всю площадь передней панели устройства, имеет высокое
разрешение и является чувствительным к прикосновениям. Благодаря такой
чувствительности, для взаимодействия с устройством и его приложениями можно
использовать виртуальные элементы управления, чаще всего кнопки, отображаемые на
экране. В связи с чем отпадает необходимость в физических кнопках. В смартфонах
реализуется, так называемый, touch-интерфейс - интерфейс, основанный на виртуальных
элементах управления, выбор которых выполняется простым касанием, а также на
использовании жестов (gestures). Если точек касания несколько (т. е. используется
несколько пальцев), такой интерфейс, уже называется multi-touch.
Еще одна особенность смартфонов состоит в том, что для большинства их
владельцев не последнюю роль играет возможность использования этого "умного
телефона" в качестве аудио или видеоплеера, поэтому современные устройства становятся
все более и более мультимедийными. В первой лекции обсуждалось, что в состав
платформы Android входит набор библиотек для обработки мультимедиа
MediaFramework, в котором реализована поддержка большинства общих медиа-форматов.
В связи с чем, в приложения, разрабатываемые для смартфонов под управлением Android,
можно интегрировать запись и воспроизведение аудио и видео, а также работу с
изображениями.
Важной и часто используемой особенностью смартфонов является наличие камеры,
которая позволяет снимать все самое интересное: от первых шагов ребенка до падения
метеорита. Телефон всегда под рукой и готов к работе, в связи с этим количество
фотографий и небольших видеороликов резко увеличилось, и любое интересное событие в
жизни индивидуума может быть запечатлено и сохранено для потомков. С ростом
возможностей получения фото и видео материалов увеличивается потребность в
приложениях, способных работать с этими материалами. Платформа Android позволяет
разрабатывать такие приложения, которые предоставляют пользователям возможности
делать фотоснимки или записывать видео, каким-то образом обрабатывать полученные
материалы и использовать их далее.
Большинство смартфонов оснащены GPS-модулем, а некоторые даже
комбинированным модулем GPS/ГЛОНАСС, что позволяет использовать такое
устройство в качестве инструмента для ориентирования на местности. Во многих случаях
смартфон с установленным соответствующим программным обеспечением вполне может
заменить GPS навигатор. В разрабатываемых приложениях иногда бывает очень полезно
добавить возможность получения координат устройства и хозяина, если оба находятся в
одном месте, и использовать эти координаты для каких-либо целей. Например, уже
существуют приложения, которые позволяют отслеживать параметры человека
(спортсмена) во время преодоления некоторых расстояний бегом, на велосипеде, на
лыжах и т. д. Такое приложение работает во время тренировки (устройство должно
перемещаться вместе со спортсменом), по окончанию можно получить полную статистику
маршрута: точное время в пути, расстояние, подъемы/спуски, среднюю скорость,
потраченные калории и т. д. Заметим, что большая часть информации опирается на
данные, полученные со спутников GPS.
Рассмотрение особенностей смартфонов будет неполным, если оставить без
внимания датчики и сенсоры, которыми оснащены большинство устройств. Эти
микроустройства обеспечивают связь смартфона с окружающей средой и добавляют
новые удивительные функции. С помощью датчика приближения, например, можно
отключать подсветку экрана при приближении телефона к уху пользователя во время
разговора, блокировать экран, чтобы не было возможности случайно нажать на отбой.
Акселерометр может использоваться для смены ориентации экрана, для управления в
играх, особенно симуляторах, а также в качестве шагомера. Датчик освещенности
позволяет регулировать яркость экрана. Гироскоп может применяться для определения
более точного позиционирования устройства в пространстве.
Все рассмотренные особенности в совокупности увеличивают привлекательность
смартфонов, позволяют разработчикам создавать приложения с разнообразными,
полезными, интересными и иногда неожиданными функциями. Далее в лекции
рассмотрим перечисленные возможности смартфонов более подробно и узнаем как можно
их использовать при разработке приложений.
3 Сенсорное (touch) управление
В этом разделе лекции рассмотрим возможности добавления сенсорного
управления в мобильные приложения под Android. Сенсорное управление подразумевает
использование сенсорных жестов для взаимодействия с приложением. В таблице 1
представлен набор жестов, поддерживаемый системой Android.
Таблица 1. Система жестов Android
Касание (touch).
Использование: Запуск действия по
умолчанию для выбранного элемента.
Выполнение: нажать, отпустить.
Длинное касание (longtouch).
Использование: Выбор элемента. Не стоит
использовать этот жест для вызова
контекстного меню.
Выполнение: нажать, ждать, отпустить.
Скольжение или перетаскивание
(swipeordrag).
Использование: Прокрутка содержимого
или навигация между элементами
интерфейса одного уровня иерархии.
Выполнение: нажать, переместить,
отпустить.
Скольжение после длинного касания
(longpressdrag).
Использование: Перегруппировка данных
или перемещение в контейнер.
Выполнение: длительное касание,
переместить, отпустить.
Двойное касание (doubletouch).
Использование: Увеличение масштаба,
выделение текста.
Выполнение: быстрая последовательность
двух касаний.
Перетаскивание с двойным касанием
(doubletouchdrag).
Использование: Изменение размеров:
расширение или сужение по отношению к
центру жеста.
Выполнение: касание, следующее за
двойным касанием со смещением вверх или
вниз при этом:
смещение вверх уменьшает размер
содержимого;
смещение вниз увеличивает размер
содержимого.
Сведение пальцев (pinchclose).
Использование: уменьшение содержимого,
сворачивание.
Выполнение: касание экрана двумя
пальцами, свести, отпустить.
Разведение пальцев (pinchopen).
Использование: увеличение содержимого,
разворачивание.
Выполнение: касание экрана двумя
пальцами, развести, отпустить.
О возможности управлять приложением с помощью сенсорных жестов можно
говорить в том случае, когда приложение способно распознать, что под набором касаний
экрана скрывается некоторый жест и выполнить соответствующее действие. Процесс
распознавания жеста обычно состоит из двух этапов: сбор данных и распознавание жеста.
Рассмотрим эти этапы подробнее.
3.1 Сбор данных о сенсорных событиях
Основные действия, которые может произвести пользователь при взаимодействии с
сенсорным экраном: коснуться экрана пальцем, переместить палец по экрану и отпустить.
Эти действия распознаются системой Android, как сенсорные события (touch-события).
Каждый раз при появлении сенсорного события инициируется вызов метода
onTouchEvent(). Обработка события станет возможной, если этот метод реализован в
классе активности или некоторого компонента, иначе событие просто игнорируется.
Жест начинается, при первом касании экрана, продолжается пока система
отслеживает положение пальцев пользователя и заканчивается получением финального
события, состоящего в том, что ни один палец не касается экрана. Объект MotionEvent,
передаваемый в метод onTouchEvent(), предоставляет детали каждого взаимодействия.
Рассмотрим основные константы класса MotionEvent, определяющие сенсорные события:
MotionEvent.ACTION_DOWN - касание экрана пальцем, является начальной точкой для
любого сенсорного события или жеста;
MotionEvent.ACTION_MOVE - перемещение пальца по экрану;
MotionEvent.ACTION_UP - поднятие пальца от экрана.
Приложение может использовать предоставленные данные для распознавания
жеста.
Можно реализовать свою собственную обработку событий для распознавания
жеста, таким образом можно работать с произвольными жестами в приложении. Если же в
приложении необходимо использовать стандартные жесты, описанные в таблице 1, можно
воспользоваться классом GestureDetector. Этот класс позволяет распознать стандартные
жесты без обработки отдельных сенсорных событий.
3.2 Распознавание жестов
Android предоставляет класс GestureDetector для распознавания стандартных
жестов. Некоторые жесты, которые он поддерживает включают: onDown(), onLongPress(),
onFling() и т. д. Можно использовать класс GestureDetector в связке с методом
onTouchEvent(). Подробно распознавание поддерживаемых жестов рассмотрено в первой
части лабораторной работы в этой теме.
Начиная с версии 1.6, Android предоставляет API для работы с жестами, который
располагается в пакете android.gesture и позволяет сохранять, загружать, создавать и
распознавать жесты. Виртуальное устройство Android (AVD), начиная все с той же версии
1.6, содержит предустановленное приложение, которое называется GestureBuilder и
позволяет создавать жесты. После создания жесты сохраняются на SD карте виртуального
устройства и могут быть добавлены в приложение в виде бинарного ресурса.
Для распознавания жестов необходимо добавить компонент GestureOverlayView, в
XML файл активности. Этот компонент может быть добавлен как обычный элемент
графического интерфейса пользователя и встроен в компоновку, например RelativeLayout.
C другой стороны он может быть использован, как прозрачный слой поверх других
компонентов, в этом случае в XML файле активности он должен быть записан, как
корневой элемент.
Кроме всего вышеперечисленного, для использования собственных жестов в
приложении необходимо реализовать интерфейс OnGesturePerformedListener и его метод
onGesturePerformed(). Подробно создание и использование собственных жестов
рассмотрено во второй части лабораторной работы в этой теме.
4 Работа с мультимедиа
Мультимедиа библиотека Android включает поддержку воспроизведения
множества наиболее распространенных форматов, что позволяет легко использовать в
приложениях аудио, видео и изображения. Можно проигрывать аудио или видео из медиа
файлов сохраненных как ресурсы приложения (raw ресурсы), из файлов, расположенных в
файловой системе или из потока данных, получаемого через сетевое соединение, для всего
этого используется MediaPlayer API.
Замечание: проигрывать аудиофайлы можно только на стандартном
устройстве вывода, невозможно воспроизводить аудио во время звонка.
Актуальная информация о поддерживаемых форматах аудио и видео приводится по
ссылке: http://developer.android.com/guide/appendix/media-formats.html.
Для воспроизведения аудио и видео Android предоставляет класс MediaPlayer.
Причем при работе с аудиоконтентом этот класс позволяет воспроизводить
необработанные данные, т. е. возможно проигрывание динамически генерируемого аудио.
Диаграмма жизненного цикла экземпляра класса MediaPlayer представлена на рис.
1. Овалы представляют состояния объекта MediaPlayer, дуги показывают вызовы каких
методов необходимо выполнить, чтобы сменить состояние объекта MediaPlayer. Дуги с
одной стрелкой представляют вызовы синхронных методов, с двумя стрелками - вызовы
асинхронных методов.
Рис. 1. Жизненный цикл экземпляра класса MediaPlayer
(http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram)
В ходе жизненного цикла объект MediaPlayer проходит через несколько состояний:
o бездействие (Idle) - создан экземпляр класса MediaPlayer для создания может
использоваться оператор new или вызов метода reset() (см. рис. 1);
o инициализирован (Initialized) - задан источник медиа-информации, для задания
источника используется метод setDataSource();
o ошибка (Error) - появилась какая-то ошибка, например, не поддерживаемый
аудио/видео формат, слишком высокое разрешение, чтобы вывести объект из этого
состояния, необходимо вызвать метод reset();
o подготовка (Preparing) - MediaPlayer занимается подготовкой медиаисточника к
воспроизведению, подготовка инициируется методом prepareAsync();
o готов (Prepared) - состояние готовности к воспроизведению, может быть достигнуто
двумя способами:
o синхронный способ: вызов метода prepare(), который переводит объект в готовое
состояние;
o асинхронный способ: срабатывание метода onPrepared()
интерефейсаOnPreparedListener() в состоянии подготовки, как реакция на событие
готовности;
o запущен (Started) - выполняется воспроизведение медиа-контента, в это состояние
объект переходит после вызова метода start();
o приостановлен (Paused) - воспроизведение приостановлено, MediaPlayer переходит в
это состояние после вызова метода pause();
o остановлен (Stopped) - воспроизведение остановлено, MediaPlayer переходит в это
состояние после вызова метода stop();
o воспроизведение завершено (PlaybackCompleted) - достигнут конец воспроизводимого
содержания, в это состояние объект переходит после срабатывания метода
onCompleted() интерфейса-слушателя OnCompitionListener, как реакции на конец
воспроизводимого материала;
Замечание: из состояний Paused, PlaybackCompleted можно вернуться к
воспроизведению вызовом метода start(). Из состояния Stopped прежде, чем вернуться в
состояние воспроизведения, необходимо пройти через подготовку медиа-содержимого.
Вызов метода seekTo() позволяет поменять место воспроизведения.
o конец (End) - конец жизненного цикла MediaPlayer объекта, в это состояние объект
переходит после вызова метода release().
Для получения более детальной информации см. ссылки:
http://developer.android.com/guide/topics/media/mediaplayer.html;
http://developer.android.com/reference/android/media/MediaPlayer.html.
Для записи аудио и видео Android предоставляет класс MediaRecorder. Диаграмма
жизненного цикла экземпляра класса MediaRecorder представлена на рис. 2. Овалы
представляют состояния объекта MediaPlayer, дуги показывают вызовы каких методов
необходимо выполнить, чтобы сменить состояние объекта MediaPlayer. Дуги с одной
стрелкой представляют вызовы синхронных методов, с двумя стрелками - вызовы
асинхронных методов.
Рис. 2. Жизненный цикл экземпляра класса MediaRecorder
(http://developer.android.com/reference/android/media/MediaRecorder.html)
В ходе жизненного цикла объект MediaRecorder проходит через несколько
состояний:
o начальное (Initial) - создан объект класса MediaRecover, для создания может
использоваться оператор new или вызов метода reset() (см. рис. 2);
o инициализирован (Initialized) - объект MediaRecover готов к использованию, в
данное состояние объект переходит после вызова одного из методов
setAudioSource() или setVideoSource(), которые задают источники аудио или видео
для записи;
o сконфигурирован приемник данных для записи (DataSourceConfigured) -
задаются основные свойства приемника данных, состояние инициируется методом
setOutputFormat(), для настройки свойств должны быть выполнены некоторые
методы из списка: setAudioEncoder(), setVideoEncoder(), setOutputFile(),
setVideoSize(), setVideoFrameRate(), setPreviewDisplay();
o готов (Prepared) - состояние готовности к записи, инициируется методом
prepare();
o записывает (Recording) - идет запись, инициируется вызовом метода start();
o освобожден (Released) - запись завершена, все ресурсы освобождены.
Для получения более детальной информации см. ссылки:
http://developer.android.com/reference/android/media/MediaRecorder.html;
http://developer.android.com/guide/topics/media/audio-capture.html.
5 Использование встроенной камеры
Платформа Android включает поддержку камеры, доступной на устройстве,
позволяющей приложениям получать фотографии и записывать видео. Для решения этих
задач, существует два способа:
1. непосредственное обращение к камере;
2. использование намерений (Intent) для вызова существующего приложения.
Рассмотрим основные относящиеся к делу классы:
Camera - класс, реализующий управление камерами устройства. Этот
класс используется для получения фотографий или записи
видео при создании приложения, работающего с камерой.
SurfaceView - класс, используемый для предоставления пользователю
возможности предварительного просмотра.
MediaRecorder - класс, используемый для записи видео с камеры.
Intent - класс, содержащий абстрактное описание выполняемой
операции, которое передается системе Android, а ОС сама
находит и запускает необходимое приложение и возвращает
результат его работы. Для работы с камерой используются два
типа намерений:
o MediaStore.ACTION_IMAGE_CAPTURE - для запроса на
выполнение фотоснимков;
o MediaStore.ACTION_VIDEO_CAPTURE - для запроса на
запись видео.
Подробно процесс разработки приложения, позволяющего производить фото и
видеосъемку рассмотрен в третьей части лабораторной работы к данной теме.
6 Взаимодействие с системами позиционирования
Системы позиционирования позволяют определить местоположение в некоторой
системе координат, обычно определяются широта и долгота.
Так как смартфон является мобильным телефоном, ему доступны методы, обычно
используемые мобильными телефонами для определения своего местоположения.
o Во-первых, смартфон постоянно связывается с сотовой вышкой, в зоне действия
которой он находится. Каждая сотовая вышка в мире имеет уникальный
идентификатор, называемый идентификатором соты (Cell ID), а также для нее
точно известны широта и долгота ее расположения. В связи с этим, смартфон, зная
идентификатор соты, в которой он находится, может получить географические
координаты центра этой соты. Радиусы сот варьируются в зависимости от того,
насколько активный сетевой трафик ожидается в конкретном районе. Разумеется,
такой способ позиционирования дает очень приблизительные результаты, что
называется: "плюс-минус трамвайная остановка".
o Во-вторых, чаще всего смартфон оказывается в зоне действия более, чем одной
сотовой вышки. В современных мобильных технологиях, начиная с поколения 2G,
сотовая вышка может определить, с какого направления приходит сигнал. В
случае, когда телефон находится в зоне действия двух или трех сотовых вышек,
они могут выполнять триангуляцию его местоположения. Телефон может
запросить у сети информацию о том, где он находится. Такая техника определения
местоположения может быть очень точной и не требует установки
дополнительного оборудования.
Дополнительно к возможностям определения местоположения, доступным
обычным мобильным телефонам, большинство смартфонов укомплектованы
спутниковыми системами глобального позиционирования (GlobalPositioningSystem, GPS).
В настоящее время наиболее распространенными в мире системами глобального
спутникового позиционирования являются: GPS, разработанная и реализованная в США,
и система ГЛОНАСС (Глобальная навигационная спутниковая система), советская, а
позже российская спутниковая система навигации. Многие смартфоны могут
использовать сигналы сразу от двух навигационных систем, что позволяет серьезно
увеличить надежность и точность определения координат, прежде всего, в городских
условиях.
В дополнение к вышеперечисленным методам позиционирования, добавляется
возможность использования сигналов WiFi, Bluetooth и NFC, а также внутреннего сенсора
для более точной геолокации, особенно внутри помещений.
В этом разделе нас, в первую очередь, будет интересовать возможность добавления
в приложения способностей определять координаты устройства и работать с картами. При
создании приложений, учитывающих текущее местоположение, под Android можно
воспользоваться GPS и определением местоположения в сети (с помощью
NetworkLocationProvider). Несмотря на то, что GPS дает более точные результаты, он не
очень хорошо работает в помещениях (чаще не работает), он сильно расходует заряд
батареи и скорость определения координат не всегда соответствует ожиданиям
пользователя. NetworkLocationProvider определяет координаты, используя сигналы
сотовых вышек и WiFi, может работать как на улице, так и внутри помещений, более
экономно расходует заряд батареи и работает быстрее по сравнению с GPS. Для
получения координат в приложении можно использовать оба способа или один из них на
выбор.
Android предоставляет приложениям доступ к геолокационным возможностям
мобильного устройства, через классы пакета android.location. Центральным классом этого
пакета является класс LocationManager, который предоставляет доступ к системным
сервисам для определения координат устройства.
В приложения можно добавлять карты, используя GoogleMapsAndroid API, которое
автоматически управляет доступом к серверам GoogleMaps, загрузкой данных,
отображением карт и сенсорными жестами на карте. Также можно использовать вызовы
API для добавления маркеров, многоугольников и внешних прозрачных слоев, а также для
изменения пользовательского представления отдельных участков карты.
Ключевым классом в GoogleMapsAndroid API является класс MapView, который
отображает карту с данными полученными из сервиса GoogleMaps. Когда MapView имеет
фокус, он может перехватывать нажатия клавиш и сенсорные жесты для выполнения
автоматического перемещения и изменения масштаба карты, а также может управлять
сетевыми запросами для получения дополнительных фрагментов карты. Этот класс так же
предоставляет все элементы пользовательского интерфейса, необходимые для управления
картой.
GoogleMapsAndroid API не является частью платформы Android, но доступен на
любом устройстве с GooglePlayStore, работающем, начиная с Android 2.2, через
GooglePlayservices. Чтобы обеспечить возможность интеграции GoogleMaps в
приложения, в Android SDK необходимо установить библиотеку GooglePlayservices.
Подробнее вопросы добавления в приложения геолокационных возможностей и
использование карт (GoogleMaps) рассмотрены в четвертой части лабораторной работы к
данной теме.
7 Другие сенсоры и датчики
Большинство устройств, работающих под управлением Android, укомплектованы
встроенными сенсорами, которые предоставляют исходные данные высокой точности.
Сенсоры могут быть полезны в том случае, если необходимо регистрировать положение и
перемещения, повороты устройства в трехмерном пространстве, а также изменения
параметров окружающей среды.
Платформа Android поддерживает три категории сенсоров:
Датчики движения Эти сенсоры измеряют силы ускорения и вращательные силы
по трем осям. Эта категория включает акселерометры, гироскопы, датчики
вектора вращения и сенсоры силы тяжести.
Датчики окружающей среды Эти сенсоры измеряют различные параметры
окружающей среды, такие как температура воздуха и давление, освещенность
и влажность. Эта категория включает барометры, термометры и датчики
освещенности.
Датчики положения Эти сенсоры измеряют физическое положение устройства. Эта
категория включает магнитометры и датчики ориентации устройства в
пространстве.
Сенсоры могут быть реализованы аппаратно или программно. Аппаратно-
реализованные датчики являются физическими элементами встроенными в мобильное
устройство, они получают данные путем прямых измерений некоторых свойств, таких как
ускорение, сила геомагнитного поля или изменение углов. Программно-реализованные
датчики получают свои данные с одного или нескольких физических датчиков и
вычисляют значение, которое от них ожидается.
Какие типы датчиков поддерживаются Android можно узнать по ссылке:
http://developer.android.com/guide/topics/sensors/sensors_overview.html.
Android предоставляет набор классов и интерфейсов для работы с сенсорами. Эти
классы и интерфейсы являются частью пакета android.hardware и позволяют выполнять
следующие задачи:
o определять какие сенсоры доступны на устройстве;
o определять индивидуальные возможности сенсоров, такие как максимальное
значение, производитель, требования к потребляемой энергии и разрешения;
o собирать данные с сенсоров и определять минимальную частоту, с которой
выполняется сбор данных;
o подключать и отключать слушателей событий от датчиков, события состоят в
изменении значений датчиков.
Для работы с датчиками Android предоставляет следующие классы и интерфейсы:
SensorManager Этот класс может использоваться для создания экземпляра сервиса,
связанного с сенсором. Также он предоставляет различные методы
для доступа и составления списка сенсоров, подключения и
отключения слушателей событий от сенсоров, сбора информации.
Этот класс содержит константы, которые используются для задания
точности сенсора, частоты получения данных и настройки датчиков.
Sensor Этот класс используется для создания экземпляра датчика,
предоставляет методы, позволяющие определить свойства сенсора.
SensorEvent Система использует этот класс для создания объекта,
соответствующего событию датчика и предоставляющего
следующую информацию: данные сенсора; тип сенсора, который
породил событие, точность данных и время появления события.
SensorEventListener Данный интерфейс может использоваться для реализации двух
методов, получающих уведомления (события датчиков), когда
меняется значение сенсора или когда меняется точность сенсора.
Использование в приложении полученных от сенсоров данных будет рассмотрено в
лабораторной работе темы 7. Подробнее об использовании сенсоров можно узнать по
ссылке: http://developer.android.com/guide/topics/sensors/sensors_overview.html.
Лекция 1. Использование библиотек
Цель лекции: Прежде чем браться за решение какой-то вспомогательной задачи, следует
сначала выяснить, не была ли она решена кем-то ранее. Повторное использование кода
позволяет сберечь ресурсы на выполнение проекта. Такие возможности предоставляют
подключаемые библиотеки, рассмотрению возможностей которых посвящена данная
лекция. В лекции приведена классификация библиотек по их назначению и возможности
их подключения. Рассматриваются некоторые популярные подключаемые библиотеки,
как официальные, так и альтернативные. Затрагиваются вопросы безопасности
использования библиотек.
План лекции:
1 Библиотеки
1.1 Использование библиотек
1.2 Подключение библиотек
2 Обзор популярных библиотек
2.1 Android Support Library
2.2 Сторонние библиотеки
2.3 Библиотеки специального назначения
2.4 Прикладные библиотеки
3 Безопасность использования подключаемых библиотек
Ключевые слова: список, HTTP, злоумышленник, анализ.
Содержание лекции:
1 Библиотеки
1.1 Использование библиотек
Библиотека (от англ. library) в программировании - сборник подпрограмм или
объектов, используемых для разработки программного обеспечения (ПО). Для ОС Android
существует большое количество подключаемых библиотек. Их можно классифицировать
в зависимости от их предназначения. Выделим следующие группы:
o Библиотеки совместимости. Они позволяют использовать возможности,
появившиеся в какой-то версии ОС Android, на более ранних версиях платформы.
Дело в том, что новые версии API выходят гораздо быстрее, чем в широком
использовании оказываются устройства, поддерживающие эту версию.
Разработчик с одной стороны должен ориентироваться на новые возможности и
уметь их использовать, а с другой - стараться сделать так, чтобы приложение
работало на максимальном количестве устройств. Библиотеки совместимости
позволяют сделать это противоречие менее жестким.
o Библиотеки специального назначения. Используются для разработки игр, работы с
социальными сетями, сбора статистики и в других случаях.
o Библиотеки, предоставляющие дополнительные возможности. В эту категорию
можно отнести большое количество самых разных библиотек. Сюда можно отнести
библиотеки рисования графиков, работы с изображениями, модифицированные
элементы управления и многое другое.
1.2 Подключение библиотек
Библиотеки могут поставляться как в собранном и уже готовом к использованию
виде (jar-файлы), так и в исходниках. Подключить библиотеку (файл *.jar) очень просто.
Достаточно создать папку libs в проекте (на том же уровне, что и папки src и res) и
копировать туда файл библиотеки (можно просто перетащить). Дальше необходимо
добавить ее в проект через меню Project -> Properties.
Если библиотека представлена в виде исходного кода, необходимо ее
предварительно собрать. Необходимо щелкнуть правой кнопкой по корневой папке
проекта - > Export: -> Java -> Runnable JAR file ->Указать класс для запуска -> Указать
место сборки -> Finish (см. рис. 1).
Рис. 1. Сборка библиотеки из исходного кода
2 Обзор популярных библиотек
2.1 Android Support Library
Android Support Library - это набор библиотек, которые обеспечивают обратную
совместимость новых API на более старых версиях платформы. Каждая библиотека из
этого набора обладает обратной совместимостью к конкретному уровню Android API. Это
означает, что ваши приложения смогут использовать возможности библиотеки и быть
запущены на устройствах Android 1.6 (API level 4) и выше.
Подключение библиотек поддержки в Android является хорошим тоном в
разработке приложений, зависящих от версии и возможностей платформы. Использование
возможностей Support Library поможет вам распространить ваше приложение для
большего числа пользователей. Если вы используете примеры Android-приложений, вы
можете заметить, что все они содержат по умолчанию одну или несколько библиотек
поддержки.
О возможностях различных версий Android Support Library можно узнать на
официальном сайте. Скачать и установить эти библиотеки можно с помощью Android
SDK Manager, выбрав в разделе Extras нужные пункты (см. рис. 2).
При настройке обратной совместимости необходимо отредактировать файл
манифеста, указав в нем минимальную версию Android SDK, которая необходима для
запуска приложения, и основную (целевую) версию:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="17" />
Рис. 2. Подключение Android Support Library
2.2 Сторонние библиотеки
Помимо официальных и поддержанных Google библиотек совместимости,
существуют аналогичные решения от сторонних разработчиков. Вы можете их
использовать на свой страх и риск, но в некоторых случаях они предпочтительнее, так как
обладают некоторыми дополнительными возможностями.
NineOldAndroids - один из примеров таких библиотек. Она предназначена для
использования анимации, которая стала доступна только с версии Honeycomb (Android
3.0), на всех более ранних платформах. Она поддерживает различные возможности
анимации и очень удобна в использовании (см. рис. 3). Главным преимуществом этой
библиотеки является то, что она работает для всех версий Android, начиная с 1.0.
Рис. 3. Использование библиотеки NineOldAndroids
Другим примером подобного решения является автономная библиотека
ActionBarSherlock. С ее помощью можно использовать нативный компонент ActionBar,
появившийся только в версии Android 4.0, в более ранних (2.x и выше). Ее можно
загрузить с официального сайта. Там же содержатся подробные указания по работе с этой
библиотекой, имеются примеры. На рис. 4 представлена работа приложения,
использующего библиотеку ActionBarSherlock, на устройствах со старыми версиями.
Рис. 4. Использование библиотеки ActionBarSherlock
2.3 Библиотеки специального назначения
Yandex.Metrica for Apps - набор библиотек для сбора статистики использования
мобильного приложения. Метрика показывает актуальную статистику об использовании
приложения. Сервис позволяет отвечать на вопросы об аудитории и выделять любые ее
сегменты. Инструменты помогают понять, как люди пользуются приложением. SDK
позволяет отслеживать следующие данные:
o информация об устройстве;
o информация о сессиях;
o информация об источнике перехода пользователя на страницу скачивания
приложения;
o действия, выполненные пользователем в приложении;
o местоположение пользователя;
o ошибки, возникающие во время использования приложения;
o собственные события;
o другие данные (например, количество пользователей, установивших приложение).
Подробные инструкции по добавлению в приложение Яндекс.Метрики и работе с
ней есть на официальном сайте.
Facebook SDK for Android - официальная библиотека Facebook для Android.
Позволяет писать сообщения на стену, читать и менять статусы, смотреть ленту друзей и
многое другое. Официальный сайт содержит большое количество примеров и указаний по
разработке приложений (см. рис. 5).
Рис. 5. Пример приложения, подготовленного с использованием Facebook SDK for Android
2.4 Прикладные библиотеки
К этой категории можно отнести различные библиотеки, предоставляющие
дополнительные возможности.
Рис. 6. Пример работы с библиотекой Universal Image Loader for Android
Universal Image Loader for Android - мощная и гибкая библиотека,
предназначенная для загрузки, кеширования и отображения картинок в Android.
Подробности на сайте https://github.com/nostra13/Android-Universal-Image-Loader.
Возможности:
o Многопоточная загрузка изображений.
o Широкие возможности настройки и конфигурирования.
o Кеширование загруженных изображений как в оперативной памяти, так и на карте.
o Поддержка виджетов.
o Поддерживает Android 2.0 и выше.
jsoup: Java HTML Parser предназначена для парсинга HTML-страниц.
Предоставляет очень удобный API для извлечения данных и манипуляции с ними,
используя DOM, CSS и методы в стиле jQuery. Поддерживает спецификации HTML5 и
позволяет парсить страницы так же, как это делают современные браузеры.
Возможности:
o Может принимать в качестве параметра URL, файл или строку.
o Находит и извлекает данные, используя DOM и селекторы CSS.
o Позволяет манипулировать HTML-элементами, атрибутами и текстом.
o Выводит чистый HTML.
Примеры ее использования есть на официальном сайте http://jsoup.org/.
Android Holo ColorPicker - удобная библиотека, позволяющая выбирать цвет с
использованием цветового колеса, выполненная в официально рекомендованном стиле
Holo. Сайт библиотеки [https://github.com/LarsWerkman/HoloColorPicker] содержит
описание работы с ней и необходимые ссылки.
Рис. 7. Пример использования Android Holo ColorPicker
Библиотека MapNavigator предназначена для работы с картами Google Maps.
Позволяет определять направления и отображать маршрут на карте. Работает только с
Google Maps v2. Скачать можно на официальном сайте
[https://github.com/tyczj/MapNavigator].
Рис. 8. Пример использования библиотеки MapNavigator
AChartEngine - библиотека, предназначенная для построения графиков. Позволяет
строить графики различных типов:
o Линии графиков функций.
o Поточечные графики.
o Гистограммы.
o Круговые диаграммы.
o Пузырьковые диаграммы.
o Комбинированные диаграммы.
o Другие виды диаграмм и графиков.
Все типы диаграмм поддерживают несколько рядов данных.
Сайт разработчика [http://code.google.com/p/achartengine] содержит подробную
документацию, оформленную в стиле Javadoc pages, примеры использования библиотеки,
а также ее исходный код.
Рис. 9. Пример использования библиотеки AChartEngine
Разумеется, мы рассмотрели лишь малую долю существующих библиотек. Обзор
не претендует на полноту, но это не так важно, так как его целью было представить
многообразие возможностей, открывающихся перед разработчиком. Кроме того, большое
количество разнообразных библиотек описаны на сайте http://www.androidviews.net/.
3 Безопасность использования подключаемых библиотек
Подключаемые библиотеки являются очень удобным инструментом, облегчающим
труд программиста. Однако разработчики приложений, использующие сторонние
библиотеки подобного рода, часто не подозревают об их проблемах с безопасностью.
Библиотека может содержать возможности, которые могут использоваться
злоумышленниками в преступных целях.
Например, в октябре 2013 года была опубликована статья с результатами
исследования, согласно которому популярная у разработчиков библиотека,
предоставляющая возможность отображения рекламы в приложениях, может
использоваться для сбора информации и запуска вредоносного кода. Исследователи не
раскрыли истинного названия библиотеки, зато описали возможный вред. Например, она
может запускать на устройстве произвольный код, извлекать текстовые сообщения,
список контактов и вызовов, передавать секретную информацию пользователя в виде
простого текста по протоколу HTTP, использовать камеру без ведома пользователя,
запускать вредоносные java-скрипты. Злоумышленник может превратить эту библиотеку в
ботнет, перехватывая ее трафик и отправляя вредоносные команды и код.
При выборе библиотеки следует соблюдать осторожность. Если библиотека
поставляется в виде исходников и о ней мало информации, не лишним будет просмотреть
ее код в поисках странных функций, которые не нужны для ее функционирования. Но для
уже собранной библиотеки анализ исходников может стать непростой задачей. Поэтому
при выборе библиотеки следует соблюдать ряд правил:
o Не использовать скомпрометированные библиотеки. Если о какой-то библиотеке
появляются сведения, что она может содержать вредоносный код, следует
отказаться от ее использования в новых проектах и по возможности пересмотреть
ее применение в уже существующих.
o С осторожностью использовать библиотеки из сомнительных источников.
o Обязательно ознакомиться с форумами и сайтами, где могут обсуждаться
библиотеки. Кроме того, это может помочь вам подобрать наиболее подходящее
решение для вашей конкретной задачи.
o По возможности просмотреть исходники.
o Применять другие правила информационной безопасности, которые могут иметь
значение в каждом конкретном случае.
Лекция 7. Работа с базами данных, графикой и анимацией. Разработка игр
Цель лекции: В данной лекции рассматриваются вопросы, связанные с разработкой
приложений использующих систему управления базами данных SQLite. Также в лекции
рассказывается о поддерживаемых системах анимации, основных классах, используемых
для добавления анимации в приложения, приводятся способы изображения графических
объектов в Android. Небольшой раздел лекции посвящен введению в разработку игр,
рассмотрены основные принципы разработки игр для смартфонов.
План лекции:
1 Введение
2 Основы работы с базами данных, SQLite
3 Анимация
4 2D и 3D графика
5 Основные принципы разработки игровых приложений для смартфонов
Ключевые слова: программирование, android, базы данных, ПО, SQL, база данных, файл,
компьютер, имя пакета, приложение, DDL, modification, запрос, доступ, content, класс,
константы, объект, массив, информация, URI, синтаксис, API, 3D, анимация,
распределение времени, animation, интерфейс, XML, определение, корневой элемент,
исполнение, атрибут, кадр, операции, GPU, RAM, графика, поддержка, игра, мощность.
Содержание лекции:
1 Введение
Будем двигаться дальше в рассмотрении вопросов связанных с разработкой
приложений для смартфонов.
Современное программирование трудно представить без использования баз
данных, рано или поздно в процессе развития приложения появляется осознание
необходимости долговременного хранения и обработки структурированной информации.
Данная лекция посвящена рассмотрению вопросов, связанных с использованием баз
данных SQLite в приложениях, разрабатываемых под Android. Базы данных SQLite
являются основой построения рабочей и функциональной программы, в которой
необходимо работать с большими объемами структурированной информации.
Далее в лекции перейдем к рассмотрению таких интересных тем, как создание
графических изображений и анимации, а также работа с этими элементами. Платформа
Android предоставляет разнообразные способы для добавления в приложения и
использования графики и анимации.
Очень часто мобильные устройства помогают "скоротать время" в очередях, в
ожидании транспорта и многих других ситуациях, часто возникающих в современной
жизни. Проще всего в такие моменты занять себя несложной игрой, в связи с этим тема
разработки игр для мобильных устройств стала довольно популярна в последнее время.
Разумеется, разработка игр дело серьезное, но даже отдельному разработчику по силам
создать игру, способную увлечь пользователя. В данной теме рассмотрим основные
принципы создания игр для смартфонов, в лабораторной работе рассмотрим процесс
создания несложной игры.
2 Основы работы с базами данных, SQLite
SQLite - небольшая и при этом мощная система управления базами данных. Эта
система создана в 2000 году, ее разработчик доктор Ричард Хипп (Dr. Richard Hipp). В
настоящее время является одной из самых распространенных SQL-систем управления
базами данных в мире. Можно выделить несколько причин такой популярности SQLite:
она бесплатная; она маленькая, примерно 150 Кбайт; не требует установки и
администрирования. Подробнее см. http://www.sqlite.org.
База данных SQLite - это обычный файл, его можно перемещать и копировать на
другую систему (например, с телефона на рабочий компьютер) и она будет отлично
работать. Android хранит файл базы данных приложения в папке (см. рис. 1.):
data/data/packagename/databases/,
где packagename - имя пакета, в котором расположено приложение.
Для доступа к этому файлу необходимо запускать команды SQL, Android с
помощью вспомогательных классов и удобных методов скрывает часть деталей, но все
таки необходимо иметь хотя бы минимальные знания об SQL, чтобы пользоваться этими
инструментами.
Рис. 1. Расположение файла базы данных SQLite
Обращения к базе данных SQL выполняются посредством запросов, существует
три основных вида SQL запросов: DDL, Modification и Query.
o DDL запросы. Такие запросы используются для создания таблиц. Каждая
таблица характеризуется именем и описанием столбцов, которое содержит имя
столбца и тип данных. В файле базы данных может быть несколько таблиц.
Пример запроса для создания таблицы:
create Table_Name (
_id integer primary key autoincrement,
field_name_1 text,
field_name_2 text);
Первый столбец обозначен, как primary key (первичный ключ), т. е. уникальное
число, которое однозначно идентифицирует строку. Слово autoincrement
указывает, что база данных будет автоматически увеличивать значение ключа
при добавлении каждой записи, что и обеспечивает его уникальность.
Существует договоренность первый столбец всегда называть _id, это не жесткое
требование SQLite, однако может понадобиться при использовании контент-
провайдера в Android.
Стоит иметь в виду, что в SQLite, в отличие от многих других баз данных,
типы данных столбцов являются лишь подсказкой, т. е. не вызовет никаких
нареканий попытка записать строку в столбец, предназначенный для хранения
целых чисел или наоборот. Этот факт можно рассматривать, как особенность
базы данных, а не как ошибку, на это обращают внимание авторы SQLite.
o Modification запросы. Такие запросы используются для добавления, изменения
или удаления записей.
Пример запроса на добавление строки:
insert into Table_Name values(null, value1, value2);
В этом случае значения разместятся в соответствующие столбцы таблицы,
первое значение задается для поля _id и равно null, т. к. SQLite вычисляет
значение этого поля самостоятельно.
При добавлении можно указывать столбцы, в которые будут размещаться
значения, остальные столбцы заполнятся значениями по умолчанию, в этом
случае можно добавлять элементы в измененном порядке. Пример такого
запроса:
insert into Table_Name(field_name_2, field_name_1)
values(value2, value1);
В этом случае добавляются значения только в поля field_name_1 и
field_name_2, причем изменен порядок следования полей, а вместе с этим и
порядок следования значений, иногда это бывает удобно.
Примеры запросов на изменение строки:
update Table_Name set Field_Name_1 = value;
поменяет значение столбца Field_Name_1 на value во всей таблице;
update Table_Name set Field_Name_1 = value where _id = smth;
поменяет значение столбца Field_Name_1 только в той строке, _id которой
равен smth.
Примеры запросов на удаление строк:
delete from Table_Name;
delete from Table_Name where Field_Name_1 = smth;
первый запрос удаляет все строки таблицы, второй - только те строки, в
которых столбец Field_Name_1 имеет значение smth.
o Query запросы. Такие запросы позволяют получать выборки из таблицы по
различным критериям. Пример запроса:
select * from Table_Name where (_id = smth);
select Field_Name_1, Field_Name_2 from Table_Name
Field_Name_1 = smth);
Первый запрос выводит строку с _id равным smth, второй - выводит два элемента
Field_Name_1 и Field_Name_2 строк, в которых Field_Name_1 равен smth.
Вернемся к рассмотрению вопросов, связанных с использованием базы данных
SQLite в приложениях под Android. Любая база данных, созданная в приложении
доступна любому классу приложения, но недоступна из вне. Чтобы открыть доступ к базе
данных другим приложениям необходимо использовать контент-провайдеры (Content
Providers).
Для создания и обновления базы данных в Android предусмотрен класс
SQLiteOpenHelper. При разработке приложения, работающего с базами данных,
необходимо создать класс-наследник от SQLiteOpenHelper, в котором обязательно
реализовать методы:
onCreate() - вызывается при первом создании базы данных;
onUpgrade() - вызывается, когда необходимо обновить базу данных.
По желанию можно реализовать метод:
onOpen() - вызывается при открытии базы данных.
В этом же классе имеет смысл объявить строковые константы, в которых
определить названия таблиц и столбцов. Полученный класс позаботится об открытии базы
данных, если она существует, или о создании ее в противном случае, а так же об
обновлении базы данных в случае необходимости.
В Android предусмотрен класс для работы с базой данных SQLite напрямую, этот
класс называется SQLiteDatabase и содержит методы:
openDatabase() - позволяет открыть базу данных;
update() - позволяет обновить строки таблицы базы данных;
insert() - позволяет добавлять строки в таблицу базы данных;
delete() - позволяет удалять строки из таблицы базы данных;
query() - позволяет составлять запросы к базе данных;
execSQL() - позволяет выполнять запросы к базе данных.
Для добавления новых строк в таблицу используется класс ContentValues, каждый
объект этого класса представляет собой одну строку таблицы и выглядит как
ассоциативный массив с именами столбцов и значениями, которые им соответствуют.
Для получения результатов запросов к базе данных используется класс Cursor,
объекты этого класса ссылаются на результирующий набор данных, позволяют управлять
текущей позицией в возвращаемом при запросе наборе данных.
Для предоставления доступа к данным для других приложений можно
использовать контент-провайдеры (ContentProvider). Любая информация, управляемая
контент-провайдером адресуется посредством URI:
content://authority/path/id
где:
content:// - стандартный требуемый префикс;
authority - имя провайдера, рекомендуется использовать полное квалификационное
имя пакета для избежания конфликта имен;
path - виртуальная папка внутри провайдера, которая определяет вид
запрашиваемых данных;
id - первичный ключ отдельной запрошенной записи, для запроса всех
записей определенного типа этот параметр не указывается.
Контент-провайдеры поддерживают стандартный синтаксис запросов для чтения,
изменения, вставки и удаления данных.
Подробнее работу с SQLite базами данных в приложениях под Android рассмотрим
в первой части лабораторной работы в этой теме.
3 Анимация
Android предоставляет мощные API для анимации элементов пользовательского
интерфейса и построения 2D и 3D изображений.
Платформа Android предоставляет две системы анимации: анимация свойств,
появившаяся в Android 3.0, и анимация компонентов пользовательского интерфейса
(наследников класса View). Рассмотрим подробнее обе эти системы.
Анимация свойств (Property Animation). Система анимации свойств позволяет
определить анимацию для изменения любого свойства объекта, независимо от того
изображается оно на экране или нет. Используя эту систему, можно задать следующие
характеристики анимации:
o Продолжительность предполагает задание длительности временного промежутка
выполнения анимации, по умолчанию это значение равно 300 мс.
o Временная интерполяция предполагает вычисление значения свойства в каждый
момент времени, как функции от промежутка времени, прошедшего с начала
анимации.
o Количество повторов и поведение определяет необходимость повторения
анимации при достижении конца заданного временного промежутка, а также
количество повторов в случае необходимости. Эта же характеристика позволяет
задать возможность воспроизведения в обратном порядке, если эта возможность
выбрана, то анимация прокручивается вперед-назад заданное число раз.
o Группа анимаций позволяет организовать анимации в некоторое множество и
задать режим исполнения: одновременно, последовательно непрерывно или с
некоторыми задержками.
o Частота обновления кадров определяет, как часто будет происходить смена
кадров анимации. По умолчанию обновление происходит каждые 10 мс, однако
скорость, с которой приложение сможет обновлять кадры, в конечном итоге,
зависит от загруженности системы.
Большая часть API системы анимации свойств находится в пакете
android.animation. Также можно использовать блоки интерполяции, определенные в пакете
android.view.animation.
Класс Animator предоставляет базовую структуру для создания анимации.
Напрямую этот класс обычно не используется, так как обеспечивает минимальную
функциональность, поэтому чаще всего используются классы-наследники, расширяющие
возможности класса Animator. Рассмотрим основные классы, используемые для создания
анимации свойств.
o ValueAnimator (потомок класса Animator). Этот класс является главным
обработчиком распределения времени для анимации свойств, а также
рассчитывает значения свойства, предназначенного для анимации. Он
обеспечивает всю основную функциональность: рассчитывает значения
анимации и содержит распределенные во времени детали каждой анимации;
содержит информацию о необходимости повторений анимации; содержит
слушателей, получающих уведомления о событиях обновления; предоставляет
возможность задавать пользовательские типы для вычисления. В процессе
анимации свойств можно выделить две части: вычисление значения свойства,
для которого определяется анимация, и присвоение полученного значения
соответствующему полю объекта. ValueAnimator не выполняет вторую часть,
поэтому необходимо следить за обновлениями значений, вычисляемых в классе
ValueAnimator, и изменять объекты, подверженные анимации. Наглядно
рассмотренные части анимации с использованием класса ValueAnimator
представлены на рис. 2.
Рис. 2. Процесс анимации свойств с использованием класса ValueAnimator
o AnimatorSet (потомок класса Animator). Предоставляет механизмы группировки
анимаций, таким образом, что они выполняются некоторым образом
относительно друг друга. Можно определять выполнение анимаций
одновременно, последовательно и с временными задержками.
Классы-вычислители определяют как вычислять значения заданных свойств. Они
получают: данные о распределение времени, предоставляемые классом Animator,
начальное и конечное значения свойства, после чего на основе этих данных вычисляют
значения свойства, для которого выполняется анимация. В системе анимации свойств
существуют следующие вычислители:
o IntEvaluator для вычисления целочисленных значений свойств;
o FloatEvaluator для вычисления вещественных значений свойств;
o ArgbEvaluator для вычисления значений цвета в шестнадцатеричном
представлении;
o TypeEvaluator - интерфейс, позволяющий создавать собственных вычислителей.
Интерполяторы определяют с помощью каких функций от времени, вычисляются
значения свойств, для которых задается анимация. Интерполяторы определены в пакете
android.view.animation. Если ни один из существующих интерполяторов не подходит,
можно создать собственный, реализовав интерфейс TimeInterpolator.
Подробнее с системой анимации свойств можно познакомиться по ссылке:
http://developer.android.com/guide/topics/graphics/prop-animation.html.
Анимация компонентов пользовательского интерфейса. Эта система может
быть использована для реализации анимации преобразований над наследниками класса
View. Для расчета анимации преобразований используется следующая информация:
начальная точка, конечная точка, размер, поворот и другие общие аспекты анимации.
Анимация преобразований может выполнять серии простых изменений содержимого
экземпляра класса View. Например, для текстового поля можно перемещать, вращать,
растягивать, сживать текст, если определено фоновое изображение, оно должно
изменяться вместе с текстом. Пакет android.view.animation предоставляет все классы,
необходимые для реализации анимации преобразований.
Для задания последовательности инструкций анимации преобразований можно
использовать или XML, или Android код. Более предпочтительным является определение
анимации в XML файлах, располагаться эти файлы должны в папке res/anim/ проекта.
XML файл должен иметь единственный корневой элемент, это может быть любой из
отдельных элементов: <alpha>, <scale>, <translate>, <rotate>, интерполятор, или же
элемент <set>, который содержит группы этих элементов, в том числе может содержать
другие элементы <set>. По умолчанию инструкции анимации выполняются одновременно,
чтобы задать последовательное исполнение необходимо определить атрибут startOffset.
Подробнее с системой анимации преобразований можно познакомиться по ссылке:
http://developer.android.com/guide/topics/graphics/view-animation.html.
Дополнительно к рассмотренным системам анимации может использоваться,
кадровая анимация, которая реализуется быстрой сменой кадров, каждый кадр является
графическим ресурсом и располагается в папке res/drawable/ проекта.
Подробнее с кадровой анимацией можно познакомиться по ссылке:
http://developer.android.com/guide/topics/graphics/drawable-animation.html.
4 2D и 3D графика
При разработке приложения важно четко понимать требования к графике в этом
приложении. Для разных графических задач необходимы разные техники их решения.
Далее в лекции рассмотрим несколько способов изображения графических объектов в
Android.
Холсты и графические объекты. Платформа Android предоставляет API для
изображения 2D графики, который позволяет изображать на холсте свои графические
объекты или изменять существующие. Для отображения 2D графики существуют два
пути:
1. Изобразить графику или анимацию в элементе пользовательского интерфейса. В
этом случае графика управляется процессом отображения иерархии элементов
интерфейса. Подходит, когда необходимо отобразить простую графику, не
требующую динамических изменений.
2. Изображать графику напрямую на холсте (класс Canvas). В этом случае
необходимо позаботиться о вызове метода onDraw(), передавая его в класс Canvas,
или же о вызове одного из draw...() методов класса Canvas (например,
drawPicture()). Действуя таким образом, можно управлять анимацией. Этот путь
подходит, когда необходимо постоянно перерисовывать окно приложения,
например, для видео игр.
Аппаратное ускорение. Начиная с Android 3.0 (API уровень 11), конвейер
изображения 2D графики в Android поддерживает аппаратное ускорение. Это означает,
что все операции рисования на холсте исполняются с использованием GPU. В связи с
увеличением требований к ресурсам приложение будет потреблять больше RAM.
Аппаратное ускорение доступно по умолчанию, если целевой уровень API больше или
равен 14, но может быть включено явно. Если в приложении используются только
стандартные представления и графика, включение аппаратного ускорения не должно
привести к каким-либо нежелательным графическим эффектам. Однако из-за того, что
аппаратное ускорение поддерживается не всеми операциями 2D графики, его включение
может нарушать некоторые пользовательские изображения или вызовы рисования.
Проблемы обычно проявляются в невидимости некоторых элементов, появлении
исключений или неверно изображенных пикселях. Чтобы исправить это, Android
позволяет включать или выключать аппаратное ускорение на разных уровнях: уровень
приложения, уровень активности, уровень окна, уровень элемента интерфейса.
OpenGL. Android поддерживает высокопроизводительную 2D и 3D графику с
использованием открытой графической библиотеки OpenGL, точнее OpenGL ES API.
Библиотека OpenGL является кросс-платформенным API, который определяет
стандартный программный интерфейс для аппаратного обеспечения, занимающегося
обработкой 3D графики. OpenGL ES является разновидностью OpenGL, предназначенной
для встроенных устройств. Android поддерживает несколько версий OpenGL ES API:
o OpenGL ES 1.0 и 1.1 поддерживается Android 1.0 и выше;
o OpenGL ES 2.0 поддерживается Android 2.2 (API уровень 8) и выше;
o OpenGL ES 3.0 поддерживается Android 4.3 (API уровень 18) и выше.
Поддержка OpenGL ES 3.0 на реальном устройстве требует реализации
графического конвейера, предоставленной производителем. Поэтому устройство с Android
4.3 и выше может не поддерживать OpenGL ES 3.0.
Подробнее с графикой в Android можно познакомиться по ссылкам:
http://developer.android.com/guide/topics/graphics/2d-graphics.html;
http://developer.android.com/guide/topics/graphics/opengl.html;
http://developer.android.com/guide/topics/graphics/hardware-accel.html.
5 Основные принципы разработки игровых приложений для смартфонов
Разработка игр дело обычно благодарное т. к. в игры люди играли, играют и будут
играть. Даже если результат работы не принесет особой прибыли, в любом случае он
способен доставить радость детям и друзьям, да и о себе забывать не стоит. При этом сам
процесс разработки способен серьезно повысить уровень мастерства особенно
начинающего разработчика.
Если возникло острое желание создать именно игровое приложение, необходимо
иметь в виду некоторые особенности: практически любая игра предполагает наличие
сюжета, игры обычно отличаются эффектным графическим оформлением и обеспечивают
определенный игровой процесс (геймплей). И эти моменты стоит хорошо продумать
прежде, чем начинать программирование.
Сюжет игры состоит из последовательности событий. Необходимость сюжета
больше всего зависит от жанра игры: в некоторых жанрах можно обойтись совсем без
сюжета. Не стоит, как недооценивать, так и переоценивать важность сюжета, т. к. он
является лишь одной из составляющих успеха игры. Решение о том нужен или ненужен
сюжет в игре, если нужен, то в какой мере и каким образом он будет выстраиваться,
необходимо принимать взвешенно и до начала разработки.
При выборе способа графического оформления игры стоит иметь в виду, что
использование 3D графики серьезно усложнит процесс разработки, даже несложная 3D
игра отнимет очень много времени. В большинстве игр для мобильных устройств
достаточно 2D графики, особенно в случае начинающего разработчика или команды
таковых.
Следует учитывать ограниченные возможности мобильных устройств:
сравнительно невысокая вычислительная мощность; ограниченный объем оперативной и
дисковой памяти; небольшой размер и невысокое разрешение экрана; возможные
проблемы, связанные с организацией передачи данных; ограниченный заряд
аккумуляторных батарей.
Процесс разработки простого игрового приложения для смартфонов рассмотрен во
второй части лабораторной работы к данной теме.
Лекция 8. Новое поколение инструментальных средств разработки мобильных
HTML5-приложений. Intel XDK
Цель лекции: Разработка нативных приложений для ОС Android довольно непростое
занятие. Эти приложения работают практически напрямую с операционной системой,
поэтому могут задействовать любые ресурсы. В некоторых случаях такие возможности не
обязательны, и одновременно с этим хочется иметь возможности быстрой разработки
мобильных приложений. Данная лекция посвящена особенностям разработки мобильных
приложений для ОС Android при помощи среды разработки Intel XDK. Эта среда
позволяет разрабатывать приложения на HTML5, которые фактически представляют
собой web-страницу и специализированный браузер для ее отображения. Лекция содержит
краткие сведения о среде разработки Intel XDK, а так же описания технологий, которые
используются при написании HTML5-приложений. Следует отметить, что Intel XDK
является кроссплатформенной средой разработки и позволяет создавать программные
продукты для различных мобильных платформ.
План лекции:
1 Обзор среды Intel® XDK
1.1 Обзор возможностей Intel XDK
1.2 Состав среды
1.3 Эмулятор и запуск на устройстве
2 Используемые технологии
2.1 HTML
2.2 CSS
2.3 JavaScript
Ключевые слова: HTML, CSS.
Содержание лекции:
1 Обзор среды Intel® XDK
1.1 Обзор возможностей Intel XDK
Intel® XDK NEW - первая редакция новой версии Intel® XDK, выпущенная в
сентябре 2013 года. Выпуск был обусловлен тем, что корпорация Intel в феврале 2013 года
приобрела средства разработки appMobi* для HTML5, которые включают appMobi* XDK
и Dev Center (служба сборки версий).
Основные возможности и достоинства новой версии:
o Кроссплатформенная и бесплатная среда разработки.
o Содержит средства быстрого прототипирования интерфейсов мобильных
приложений.
o Включает в себя инструменты для создания, отладки и сборки ПО, а также
эмулятор устройств.
o Простота разработки кроссплатформенных приложений (не только Android, но и
Apple iOS, Microsoft Windows 8, Tizen).
o Языки разработки HTML5 и JavaScript. HTML5 - это новый тренд в разработке
приложений. По мнению Intel, очень важно дать опытным разработчикам все
возможности для перехода на этот многоплатформенный стандарт и помочь
начинающим воспользоваться новыми функциями, чтобы они могли быстро
создавать приложения и игры, совместимые практически со всеми современными
платформами.
o После регистрации разработчики получают возможность использовать облачный
сервис для хранения своих приложений.
К сожалению, Intel XDK имеет и ряд недостатков:
o Наличие "багов" в работе среды, осложняющих работу над приложениями.
o Приложения html5 исполняются медленнее и требуют больших ресурсов, чем так
называемые "нативные" ("родные").
1.2 Состав среды
Среда Intel XDK состоит из набора средств разработки (редактор, эмулятор
устройств и отладчик), библиотеки пользовательских интерфейсов Javascript,
оптимизированной для мобильных приложений, приложения для тестирования на
устройствах, прикладных программных интерфейсов для разработчиков игровых
приложений с ускоренной визуализацией, системы Intel на базе облака для подготовки
версий приложений для большинства Интернет-магазинов и средства переноса
приложений iOS* в среду HTML5.
Среда легко устанавливается на операционные системы Linux, Microsoft Windows и
Apple и предоставляет спектр функций для взаимодействия с операционной системой
устройства: подключение нативных плагинов, работу с контактами телефона, камерой,
акселерометром, геолокацией, мультисенсорностью, встроенными видео- и
аудиоплеерами и т.д.
Разработка приложений может осуществляться на основе пустых шаблонов и
готовых примеров. Встроенное приложение App Designer позволяет легко и быстро
создавать и редактировать пользовательский интерфейс (UI) в режиме кода и
конструктора ( рис. 1).
Рис. 1. Intel XDK. Приложение App Designer
1.3 Эмулятор и запуск на устройстве
Среда разработки Intel XDK содержит собственный эмулятор. Его запуск не
требует большого количества ресурсов и выполняется быстро. Кроме того, он имеет
возможности моделирования работы акселерометра и прочих датчиков, что также
является несомненным достоинством. К сожалению, эмулятор среды Intel XDK не может
стать универсальным решением проблемы. Причина в том, что на самом деле это браузер,
способный исполнять JavaScript и отображать HTML5 в окошке нужного размера.
Конечно, этот эмулятор работает только для приложений, разработанных с помощью Intel
XDK.
Эмулятор Intel XDK запускается и работает почти мгновенно. Это легко объяснить
тем, что отпадает необходимость эмуляции команд процессора другой архитектуры. По
сути приложение работает в браузере (рис. 2). Кроме того, он позволяет эмулировать
работу акселерометра и некоторых других функций, что выгодно отличает его от
эмулятора Android SDK.
Рис. 2. Intel XDK. Эмулятор с запущенным приложением "Hello, world!"
Рис 3. Установка приложения и запуск приложения на устройстве
Запустить на устройстве приложение, разработанное с использованием Intel XDK,
можно двумя способами:
o Или установив на устройство специальную программу Intel XDK App Preview (есть
в магазине Google Play).
o Или собрав проект и установив результат сборки на устройство. В этом случае для
запуска *.apk, полученных не из магазина приложений Google Play, необходимо
разрешить установку приложений из альтернативных источников (рис. 3).
2 Используемые технологии
Тройка HTML, CSS и Javascript уже давно вышла за пределы технологий для
отображения содержимого web-страниц. Принципы простоты, модульности,
совместимости и расширяемости, которые лежат в основе этих технологий, позволили им
стать универсальными. Сегодня с их помощью можно:
o автоматизировать рутинные операции в операционной системе;
o создавать и редактировать изображения, аудио и видео в онлайн-режиме;
o совместно работать над документами;
o разрабатывать игры и т.п.
Браузеры с поддержкой HTML, CSS и Javascript сегодня можно встретить в
мобильных устройствах, телевизорах и даже некоторых холодильниках.
HTML, CSS и Javascript лежат в основе разработки мобильных приложений в среде
Intel XDK.
2.1 HTML
HTML (Hypertext Markup Language), так называемый "язык разметки гипертекста",
был разработан еще в конце 80-х годов прошлого века как язык для обмена научной и
технической документацией [48]. Сегодня HTML - стандарт для оформления документов
во Всемирной паутине. При разработке HTML-документа выполняется разметка
текстового документа точно так же, как это делает редактор при помощи красного
карандаша. Эти пометки служат для указания формы представления информации,
содержащейся в документе: где будут заголовки, что выделить цветом или может
подчеркнуть, а где будут находиться иллюстрации. Совокупность команд, которыми
оперирует язык, называют тегами. Для просмотра HTML-документов, оформленных с
использованием тегов, используются браузеры. Существует большое количество
программ-браузеров, разработанных различными компаниями, каждый из которых имеет
свои уникальные особенности.
На сегодняшний день рабочим стандартом является HTML5, ориентированный на
улучшенную поддержку мультимедиа-технологий и независимость от устройств вывода.
Большинство браузеров поддерживает целый ряд новых элементов, созданных в
HTML5 и API: новые элементы для организации более грамотной семантики и
структурирования элементов документа, рисования и для медиа-контента. Среди них
<header> и <footer>, регламентирующие заголовочный блок и "футер" подвал документа
(секции), <nav> для работы с навигационное меню. Несомненным плюсом данного
стандарта стало появление двух новых элементов для стандартного способа вставки аудио
и видео файлов на web-страницу: это соответственно <audio> и <video> с рядом
вспомогательных тегов для тонкой настройки параметров воспроизведения.
Один из самых интересных и функциональных тегов, появившихся в новом
стандарте, - холст для рисования <canvas> для создания двумерных изображений и
динамической анимации, осуществляемой с помощью языка JavaScript. Кроме того,
элемент <figure> позволяет работать с отображением фотографий, иллюстраций,
диаграмм и графиков, листингов кода и т.п.
Не осталась нетронутой и такая область интернет-приложений, как форма. Новый
стандарт добавил множество новых элементов, контролирующих ввод и проверку
введенных данных, позволяющих выбрать на календаре дату или цвет в палитре, с
помощью бегунка визуально откорректировать тот или иной параметр.
В скором времени технология HTML5 будет признана консорциумом World Wide
Web Consortium (W3C) новым стандартом HTML. С каждой новой версией все
современные браузеры поддерживают все больше новых тегов. Не является исключением
и ОС Android, которая отличается великолепной поддержкой почти всех новых
возможностей.
2.2 CSS
Второе звено тройки технологий - CSS (Cascading Style Sheets, каскадные таблицы
стилей) - набор параметров форматирования, который применяется к элементам
документа, чтобы изменить их внешний вид.
Возможность работы со стилями издавна включают в издательские системы и
текстовые редакторы, тем самым позволяя одним нажатием кнопки придать тексту
заданный заранее установленный вид. Эта же возможность реализована и для web-
страниц: цвет, размеры текста и другие параметры хранятся в определенном месте и легко
применяются к любому тегу. Еще одним преимуществом стилей является то, что они
предлагают намного больше возможностей для форматирования, чем обычный HTML.
"HTML-страница похожа на человека … если HTML задает "скелет" нашего человечка
(страницы), то CSS позволяет задать цвет глаз, кожи, вид и форму одежды, и т.д.".
Таблицы стилей позволяют определить цвет и начертание текстового фрагмента,
выполнить его выравнивание относительно других блоков и компонентов страницы,
задать размер, положение и границы каждого из них в рамках HTML-разметки.
На сегодняшний день рабочим стандартом каскадных таблиц стилей является CSS
3, ориентированный на более гибкое оформление фоновых изображений, работу со
сглаженными углами и тенями, расширенным набором шрифтов и принципами
оформления текстовых фрагментов, тонкую настройку параметров под различные
устройства вывода.
Многие возможности, которые были ранее труднодоступны, или требовали
использования дополнительных внешних программ, скриптов или специальных
"хитростей" могут теперь легко достигаться в CSS3 за счет использования новых свойств
оформления.
Так, например, новое свойство установки размера фоновых изображений
background-size, которого так не хватало в традиционном CSS, позволяет автоматически
изменять размер фона под размер браузера, а также использовать несколько фоновых
изображений одновременно, создавая эффект многослойности.
Еще одно свойство, которого ждали многие - возможность добавления
скругленных углов. К каким только ухищрениям не прибегали, пытаясь реализовать одно
из направлений WEB 2.0. С помощью нового CSS3 свойства border-radius это делается
элементарно. CSS 3 сделал шаг и в сторону перемещения web-пространства в трехмерную
среду, добавив возможность задания теней для текста и блочных элементов.
2.3 JavaScript
Наконец, третий в тройке универсальных технологий - JavaScript. Данный язык
программирования зародился как сценарный язык программирования, применяемый для
придания интерактивности web-страницам. Сценарий - это программа, которая
вызывается из HTML-документа или непосредственно в него вложена и исполняется на
компьютере-клиенте. Сценарии позволяли авторам дополнить HTML-документы
динамически изменяемыми свойствами и интерактивными возможностями.
Результат конкурентной борьбы двух компаний-производителей браузеров
JavaScript сегодня из узкоспециализированного языка сценариев браузера превратился в
язык общего назначения. Так серверная программная платформа Node.js предоставляет
возможность JavaScript взаимодействовать с устройствами ввода/вывода через свой API,
подключать другие внешние библиотеки, написанные на разных языках, разрабатывать
десктопные оконные приложения и даже программировать микроконтроллеры.
JavaScript позволяет:
o расширить функциональность браузеров путем написания собственных плагинов;
o одновременно использовать несколько подключаемых библиотек, расположенных
на удаленных серверах;
o создавать геометрические фигуры и анимацию с помощью SVG, трехмерную
графику с помощью WebGL, запускать видео;
o наносить метки и объекты на карту;
o отображать математические формулы;
o управлять файловой системой и сетевым окружением;
o работать с реестром.
Создание графического интерфейса средствами JavaScript гораздо проще, чем
создание GUI для самого простого приложения, ведь работа с HTML, CSS или JavaScript
гораздо проще, чем с C++, Objective-C или Java. Именно поэтому программирование веб-
приложений привлекает все больше разработчиков.
Лекция 9. Тенденции развития современных инфраструктурных решений
Цель лекции: В данной лекции рассматриваются основные этапы развития аппаратного и
программного обеспечения. Проводится небольшой исторический обзор.
Рассматриваются основные современные тенденции развития аппаратного обеспечения,
основные требования к инфраструктуре. Рассматриваются современные тенденции
развития инфраструктурных решений, которые привели к появлению концепции
облачных вычислений.
План лекции:
1 Введение.
2 Развитие аппаратного обеспечения
3 Современные инфраструктурные решения
Появление блэйд-систем
Преимущества Blade-серверов
Появление систем и сетей хранения данных
Сети хранения данных
Топологии SAN
Консолидация ИТ инфраструктуры
4. Краткие итоги:
5. Ключевые термины:
Ключевые слова: анализ, вычисление, компьютер, язык программирования, класс,
машина Тьюринга, IBM, international, поток, интегратор, transistor, интегральная схема,
корпорация, мейнфрейм, интеграция, микропроцессор, процессор, память, RAM, площадь,
PET, VIC, PC, ST, мощность, LSI, VLSI, сервер, cloud computing, подключение модуля,
шасси, backplane, сеть передачи данных, обмен данными, channel, расстояние,
объединение.
Содержание лекции:
Уже сейчас 70% сотрудников Microsoft создают решения, связанные с облачными
вычислениями. В течение года их число достигнет 90%.
Стив Балмер, генеральный директор Microsoft
1. Введение
В настоящее время технологии "облачных" вычислений приобретают все большую
популярность, а концепция Cloud Computing является одной из самых модных тенденций
развития информационных технологий. По оценкам Gartner, "облака" — один из главных
приоритетов бизнеса на 2010 год. Крупнейшие мировые ИТ вендоры (Microsoft, Amazon,
Google и прочие) так или иначе внедряют сервисы "облачных" вычислений.
Сегодня под облачными вычислениями обычно понимают возможность получения
необходимых вычислительных мощностей по запросу из сети, причем пользователю не
важны детали реализации этого механизма и он получает из этого "облака" все
необходимое. Ярким примером могут служить поисковые системы, интерфейс которых
очень прост, но в то же время они предоставляют пользователям огромные
вычислительные ресурсы для поиска нужной информации. Сегодня крупные
вычислительные центры не только позволяют хранить и обрабатывать внутри себя
определенные данные, но и дают возможности для создания собственных виртуальных
дата-центров, позволяя молодым компаниям не тратить силы на создание всей
инфраструктуры с нуля. На сегодняшний день существует множество определений
"облачных вычислений". Зачастую они расходятся в своем значении и акцентах.
Рассмотрим некоторые из этих определений для того чтобы понять что такое "облачные"
вычисления с разных точек зрения.
Облачные вычисления представляют собой динамически масштабируемый способ
доступа к внешним вычислительным ресурсам в виде сервиса, предоставляемого
посредством Интернета, при этом пользователю не требуется никаких особых знаний об
инфраструктуре "облака" или навыков управления этой "облачной" технологией.
Cloud computing – это программно-аппаратное обеспечение, доступное
пользователю через Интернет или локальную сеть в виде сервиса, позволяющего
использовать удобный интерфейс для удаленного доступа к выделенным ресурсам
(вычислительным ресурсам, программам и данным). Компьютер пользователя выступает
при этом рядовым терминалом, подключенным к Сети. Компьютеры, осуществляющие
cloud computing, называются "вычислительным облаком". При этом нагрузка между
компьютерами, входящими в "вычислительное облако", распределяется автоматически.
Облачные вычисления - это новый подход, позволяющий снизить сложность ИТ-
систем, благодаря применению широкого ряда эффективных технологий, управляемых
самостоятельно и доступных по требованию в рамках виртуальной инфраструктуры, а
также потребляемых в качестве сервисов. Переходя на частные облака, заказчики могут
получить множество преимуществ, среди которых снижение затрат на ИТ, повышение
качества предоставления сервиса и динамичности бизнеса".
"Облако" является новой бизнес-моделью для предоставления и получения
информационных услуг.Эта модель обещает снизить оперативные и капитальные затраты.
Она позволяет ИТ департаментам сосредоточиться на стратегических проектах, а не на
рутинных задачах управления собственным центром обработки данных.
Облачные вычисления – это не только технологическая инновация в ИТ, но и
способ создания новых бизнес-моделей, когда у небольших производителей ИТ-
продуктов, в том числе и в регионах, появляется возможность быстрого предложения
рынку своих услуг и мало затратного способа воплощения своих бизнес-идей. Поддержка
облачных вычислений в сочетании с инвестициями в молодые компании создают быстро
развивающуюся экосистему инновационных производств.
Облачные вычисления являются рыночным ответом на систематическую
специализацию и усиление роли аутсорсинга в ИТ. По сути, переход к облачным
вычислениям означает аутсорсинг традиционных процессов управления ИТ-
инфраструктурой профессиональными внешними поставщиками. Большинство
современных поставщиков решений сферы облачных вычислений предоставляет
возможность не только использовать существующие облачные платформы, но и создавать
собственные, отвечающие технологическим и юридическим требованиям заказчиков.
"Облачные вычисления" работают следующим образом: вместо приобретения,
установки и управления собственными серверами для запуска приложений, происходит
аренда сервера у Microsoft, Amazon, Google или другой компании. Далее пользователь
управляет своими арендованными серверами через Интернет, оплачивая при этом только
фактическое их использование для обработки и хранения данных. Вычислительные
облака состоят из тысяч серверов, размещенных в датацентрах, обеспечивающих работу
десятков тысяч приложений, которые одновременно используют миллионы
пользователей. Непременным условием эффективного управления такой
крупномасштабной инфраструктурой является максимально полная автоматизация. Кроме
того, для обеспечения различным видам пользователей - облачным операторам, сервис-
провайдерам, посредникам, ИТ-администраторам, пользователям приложений -
защищенного доступа к вычислительным ресурсам облачная инфраструктура должна
предусматривать возможность самоуправления и делегирования полномочий.
Концепция "облачных" вычислений появилась не на пустом месте, а явилась
результатом эволюционного развития информационных технологий за последние
несколько десятилетий и ответом на вызовы современного бизнеса. Аналитики Гартнер
групп (Gartner Group) называют "Облачные" вычисления — самой перспективной
стратегической технологией будущего, прогнозируя перемещение большей части
информационных технологий в "облака" в течение 5–7 лет. По их оценкам, к 2017 году
объѐм рынка облачных вычислений достигнет 200 миллиардов долларов.
В России технологии "облачных" вычислений делают лишь первые шаги. Несмотря
на существующие предложения со стороны крупнейших международных корпораций
Microsoft, IBM, Intel, NEC, а также ряда отечественных ИТ-поставщиков спрос на
облачные сервисы в России пока невелик. Однако, по прогнозу аналитической компании
IDC, за ближайшие 5 лет рынок облачных услуг в России вырастет более чем на 500% и
составит 113 миллионов долларов.
Перспективы "облачных" вычислений неизбежны, поэтому знание об этих
технологиях необходимо любому специалисту, который связывает свою текущую или
будущую деятельность с современными информационными технологиями.
2. Развитие аппаратного обеспечения
Для того, чтобы понять, как появились "облачные" вычисления, необходимо
представлять основные моменты процесса развития вычислений и вычислительной
техники.
В наше время жизнь без компьютеров не представляется возможной. Внедрение
вычислительной техники проникло почти во все жизненные аспекты, как личные, так и
профессиональные. Развитие компьютеров было достаточно быстрым. Началом
эволюционного развития компьютеров стал 1930 год, когда двоичная арифметика была
разработана и стала основой компьютерных вычислений и языков программирования. В
1939 году были изобретены электронно-вычислительные машины, выполняющие
вычисление в цифровом виде. Появление вычислительных устройств приходится на 1942
год, когда было изобретено устройство, которое могло механически добавлять числа.
Вычисления производились с использованием электронных ламп.
Появившаяся в 1941 году модель Z3 Конрада Цузе в немецкой Лаборатории
Авиации в Берлине была одним из наиболее значительных событий в развитии
компьютеров, потому что эта машина поддерживала вычисления как с плавающей точкой,
так и двоичную арифметику. Это устройство рассматривают как самый первый
компьютер, который был полностью работоспособным. Язык программирования считают
"Turing-complete", если он попадает в тот же самый вычислительный класс, как машина
Тьюринга.
Первое поколение современных компьютеров появилось в 1943, когда были
разработаны Марк I и машина Колосс. С финансовой поддержкой от IBM (International
Business Machines Corporation) Марк был сконструирован и разработан в Гарвардском
университете. Это был электромеханический программируемый компьютер общего
назначения. Первое поколение компьютеров было построено с использованием
соединенных проводов и электронных ламп (термоэлектронных ламп). Данные хранились
на бумажных перфокартах. Колосс использовался во время Второй мировой войны, чтобы
помочь расшифровать зашифрованные сообщения.
Чтобы выполнить его задачу расшифровки, Колосс сравнил два потока данных,
прочитанных на высокой скорости с перфоленты. Колосс оценивал поток данных, считая
каждое совпадение, которое было обнаружено, основываясь на программируемой Булевой
функции. Для сравнения с другими данными был создан отдельный поток.
Другой компьютер общего назначения этой эры был ENIAC (Электронный
Числовой Интегратор и Компьютер), который был построен в 1946. Он был первым
компьютером, способным к перепрограммированию, чтобы решать полный спектр
вычислительных проблем. ENIAC содержал 18 000 термоэлектронных ламп, он весил
более чем 27 тонн, и потреблял электроэнергии 25 киловатт в час. ENIAC выполнял 100
000 вычислений в секунду. Изобретение транзистора означало, что неэффективные
термоэлектронные лампы могли быть заменены более мелкими и надежными
компонентами. Это было следующим главным шагом в истории вычислений.
Компьютеры Transistorized отметили появление второго поколения компьютеров,
которые доминировали в конце 1950-ых и в начале 1960-ых. Несмотря на использование
транзисторов и печатных схем, эти компьютеры были все еще большими и
дорогостоящими. В основном они использовались университетами и правительством.
Интегральная схема или чип были развиты Джеком Килби. Благодаря этому достижению
он получил Нобелевскую премию по физике в 2000 году.
Изобретение Килби вызвало взрыв в развитии компьютеров третьего поколения.
Даже при том, что первая интегральная схема была произведена в сентябре 1958, чипы не
использовались в компьютерах до 1963. Историю мейнфреймов - принято отсчитывать с
появления в 1964 году универсальной компьютерной системы IBM System/360, на
разработку которой корпорация IBM затратила 5 млрд долларов.
Мейнфрейм - это главный компьютер вычислительного центра с большим объемом
внутренней и внешней памяти. Он предназначен для задач, требующих сложных
вычислительных операций. Сам термин "мейнфрейм" происходит от названия типовых
процессорных стоек этой системы. В 1960-х — начале 1980-х годов System/360 была
безоговорочным лидером на рынке. Еѐ клоны выпускались во многих странах, в том числе
— в СССР (серия ЕС ЭВМ). В то время такие мэйнфреймы, как IBM 360 увеличили
способности хранения и обработки, интегральные схемы позволяли разрабатывать
миникомпьютеры, что позволило большому количеству маленьких компаний производить
вычисления. Интеграция высокого уровня диодных схем привела к развитию очень
маленьких вычислительных единиц, что привело к следующему шагу развития
вычислений.
В ноябре 1971 Intel выпустили первый в мире коммерческий микропроцессор, Intel
4004. Это был первый полный центральный процессор на одном чипе и стал первым
коммерчески доступным микропроцессором. Это было возможно из-за развития новой
технологии кремниевого управляющего электрода. Это позволило инженерам объединить
на много большее число транзисторов на чипе, который выполнял бы вычисления на
небольшой скорости. Эта разработка способствовала появлению компьютерных платформ
четвертого поколения.
Компьютеры четвертого поколения, которые развивались в это время,
использовали микропроцессор, который помещает способности компьютерной обработки
на единственном чипе. Комбинируя память произвольного доступа (RAM),
разработанную Intel, компьютеры четвертого поколения были быстрее, чем когда-либо
прежде и занимали на много меньшую площадь. Процессоры Intel 4004 были способны
выполнять всего 60 000 инструкций в секунду. Микропроцессоры, которые развились из
Intel 4004 разрешенные изготовителями, стали базой для начала развития персональных
компьютеров, маленьких достаточно дешевых, чтобы быть купленными широкой
публикой. Первым коммерчески доступным персональным компьютером был MITS Altair
8800, выпущенный в конце 1974. В последствии были выпущены такие персональные
компьютеры, как Apple I и II, Commodore PET, VIC-20, Commodore 64, и, в конечном
счете, оригинальный IBM-PC в 1981. Эра PC началась всерьез к середине 1980-ых. В
течение этого времени IBM-PC, Commodore Amiga и Atari ST были самыми
распространенными платформами PC, доступными общественности. Даже при том, что
микровычислительная мощность и память увеличились на много порядков, начиная с
изобретения из Intel 4004 процессоров, технологии чипов интеграции высокого уровня
(LSI) или интеграция сверхвысокого уровня (VLSI) сильно не изменились. Поэтому
большинство сегодняшних компьютеров все еще попадает в категорию компьютеров
четвертого поколения.
Одновременно с резким ростом производства персональных компьютеров в начале
1990-х начался кризис рынка мейнфреймов, пик которого пришѐлся на 1993 год. Многие
аналитики заговорили о полном вымирании мейнфреймов, о переходе от
централизованной обработки информации к распределѐнной (с помощью персональных
компьютеров, объединѐнных двухуровневой архитектурой "клиент-сервер"). Многие
стали воспринимать мейнфреймы как вчерашний день вычислительной техники, считая
Unix- и PC-серверы более современными и перспективными.
C 1994 года вновь начался рост интереса к мейнфреймам. Дело в том, что, как
показала практика, централизованная обработка на основе мейнфреймов решает многие
задачи построения информационных систем масштаба предприятия проще и дешевле, чем
распределѐнная. Многие из идей, заложенных в концепции облачных вычислений также
"возвращают" нас к эпохе мэйнфреймов, разумеется с поправкой на время. Еще шесть лет
назад в беседе с Джоном Мэнли, одним из ведущих научных сотрудников центра
исследований и разработок HP в Бристоле, обсуждалась тема облачных вычислений, и
Джон обратил внимание на то, что основные идеи cloud computing до боли напоминают
мэйнфреймы, только на другом техническом уровне: "Все идет от мэйнфреймов.
Мэйнфреймы научили нас тому, как в одной среде можно изолировать приложения, –
умение, критически важное сегодня".
3. Современные инфраструктурные решения
С каждым годом требования бизнеса к непрерывности предоставления сервисов
возрастают, а на устаревшем оборудовании обеспечить бесперебойное функционирование
практически невозможно. В связи с этим крупнейшие ИТ-вендоры производят и внедряют
более функциональные и надежные аппаратные и программные решения. Рассмотрим
основные тенденции развития инфраструктурных решений, которые, так или иначе,
способствовали появлению концепции облачных вычислений.
o Рост производительности компьютеров. Появление многопроцессорных и
многоядерных вычислительных систем, развитие блейд-систем
o Появление систем и сетей хранения данных
o Консолидация инфраструктуры
Появление блэйд-систем
В процессе развития средств вычислительной техники всегда существовал большой
класс задач, требующих высокой концентрации вычислительных средств. К ним можно
отнести, например сложные ресурсоемкие вычисления (научные задачи, математическое
моделирование), а так же задачи по обслуживанию большого числа пользователей
(распределенные базы данных, Интернет-сервисы, хостинг).
Рис. 1. Типичный Blade-сервер (Sun Blade X6250)
Не так давно (порядка 5ти лет назад) производители процессоров достигли разумного
ограничения наращивания мощности процессора, при котором его производительность
очень высока при относительно низкой стоимости. При дальнейшем увеличении
мощности процессора, необходимо было прибегать к нетрадиционным методам
охлаждения процессоров, что достаточно неудобно и дорого. Оказалось, что для
увеличения мощности вычислительного центра более эффективно увеличить количество
отдельных вычислительных модулей, а не их производительность. Это привело к
появлению многопроцессорных, а позднее и многоядерных вычислительных систем.
Появляются многопроцессорные системы, которые насчитывают более 4 процессоров. На
текущий момент существуют процессоры с количеством ядер 8 и более, каждое из
которых эквивалентно по производительности. Увеличивается количество слотов для
подключения модулей оперативной памяти, а также их емкость и скорость.
Увеличение числа вычислительных модулей в вычислительном центре требует новых
подходов к размещению серверов, а также приводит к росту затрат на помещения для
центров обработки данных, их электропитание, охлаждение и обслуживание.
Для решения этих проблем был создан новый тип серверов XXI века — модульные,
чаще называемые Blade-серверами, или серверами-лезвиями (blade — лезвие).
Преимущества Blade-серверов, первые модели которых были разработаны в 2001 г.
изготовители описывают с помощью правила "1234". "По сравнению с обычными
серверами при сравнимой производительности Blade-серверы занимают в два раза меньше
места, потребляют в три раза меньше энергии и обходятся в четыре раза дешевле".
Рис. 2. Типичное 10U шасси для 10 Blade-серверов (Sun Blade 6000)
Что представляет собой Blade-сервер? По определению, данному аналитической
компании IDC Blade-сервер или лезвие - это модульная одноплатная компьютерная
система, включающая процессор и память. Лезвия вставляются в специальное шасси с
объединительной панелью (backplane), обеспечивающей им подключение к сети и подачу
электропитания. Это шасси с лезвиями, является Blade-системой. Оно выполнено в
конструктиве для установки в стандартную 19-дюймовую стойку и в зависимости от
модели и производителя, занимает в ней 3U, 6U или 10U (один U - unit, или монтажная
единица, равен 1,75 дюйма). За счет общего использования таких компонентов, как
источники питания, сетевые карты и жесткие диски, Blade-серверы обеспечивают более
высокую плотность размещения вычислительной мощности в стойке по сравнению с
обычными тонкими серверами высотой 1U и 2U.
Технология блэйд-систем заимствует некоторые черты мейнфреймов. В настоящее
время лидером в производстве блэйд-систем являются компании Hewlett-Packard, IBM,
Dell, Fujitsu Siemens Computers, Sun.
Преимущества Blade-серверов
Рассмотрим основные преимущества блейд-систем:
Уникальная физическая конструкция. Архитектура блейд-систем основана на
детально проработанной уникальной физической конструкции. Совместное использование
таких ресурсов, как средства питания, охлаждения, коммутации и управления, снижает
сложность и ликвидирует проблемы, которые характерны для более традиционных
стоечных серверных инфраструктур. Физическая конструкция блейд систем предполагает
размещение блейд серверов в специальном шасси и основным ее конструктивным
элементом является объединительная панель. Объединительная панель разработана таким
образом, что она решает все задачи коммутации блейд серверов с внешним миром: с
сетями Ethernet, сетями хранения данных Fiber Channel, а также обеспечивает
взаимодействие по протоколу SAS (SCSI) с дисковыми подсистемами в том же шасси.
Шасси для блейдов также позволяет размещать в нем необходимые коммутаторы Ethernet
или Fiber Channel для связи с внешними сетями. Выход на эти коммутаторы из блейд
серверов обеспечивают предустановленные или устанавливаемые дополнительно
контроллеры. Средства коммутации во внешние сети, интегрированные в общую полку,
значительно сокращают количество кабелей для подключения к ЛВС и SAN, чем
традиционным стоечным серверам. Блейд сервера имеют общие средства питания и
охлаждения. Размещение систем питания и охлаждения в общей полке, а не в отдельных
серверах, обеспечивает снижение энергопотребления и повышение надежности.
Лучшие возможности управления и гибкость. Блейд-серверы принципиально
отличаются от стоечных серверов тем, что серверная полка имеет интеллект в виде
модулей управления, который отсутствует в стойках при размещении традиционных
серверов. Для управления системой не требуется клавиатура, видео и мышь. Управление
блейд системой осуществляется с помощью централизованного модуля управления и
специального процессора удаленного управления на каждом блейд-сервере. Система
управления шасси и серверами как правило имеют достаточно удобное программное
обеспечение для управления. Появляются возможности удаленно управлять всей "Blade"-
системой, в том числе управление электропитанием и сетью отдельных узлов.
Масштабируемость – при необходимости увеличение производительных
мощностей, достаточно приобрести дополнительные лезвия и подключить к шасси.
Серверы и инфраструктурные элементы в составе блейд-систем имеют меньший размер и
занимают меньше места, чем аналогичные стоечные решения, что помогает экономить
электроэнергию и пространство, выделенное для ИТ. Кроме того, благодаря модульной
архитектуре, они являются более удобными во внедрении и модернизации.
Повышенная надежность. В традиционных стоечных средах для повышения
надежности устанавливается дополнительное оборудование, средства коммутации и
сетевые компоненты, обеспечивающие резервирование, что влечет за собой
дополнительные расходы. Блейд-системы имеют встроенные средства резервирования,
например предполагается наличие нескольких блоков питания, что позволяет при выходе
из строя одного блока питания, обеспечивать бесперебойную работу всех серверов,
расположенных в шасси. Также дублируются и охлаждающие компоненты. Выход из
строя одного из вентиляторов не приводит к критическим последствиям. При выходе
одного сервера из строя системный администратор просто заменяет лезвие на новое и
затем в дистанционном режиме инсталлирует на него ОС и прикладное ПО.
Снижение эксплуатационных расходов. Применение блейд-архитектуры
приводит к уменьшению энергопотребления и выделяемого тепла, а также к уменьшению
занимаемого объема. Помимо уменьшения занимаемой площади в ЦОД, экономический
эффект от перехода на лезвия имеет еще несколько составляющих. Поскольку в них
входит меньше компонентов, чем в обычные стоечные серверы, и они часто используют
низковольтные модели процессоров, что сокращаются требования к энергообеспечению и
охлаждению машин. Инфраструктура блейд-систем является более простой в управлении,
чем традиционные ИТ- инфраструктуры на стоечных серверах. В некоторых случаях
блейд-системы позволили компаниям увеличить количество ресурсов под управлением
одного администратора (серверы, коммутаторы и системы хранения) более чем в два раза.
Управляющее программное обеспечение помогает ИТ-организациям экономить время
благодаря возможности эффективного развертывания, мониторинга и контроля за
инфраструктурой блейд-систем. Переход к серверной инфраструктуре, построенной из
лезвий, позволяет реализовать интегрированное управление системы и отойти от прежней
схемы работы Intel-серверов, когда каждому приложению выделялась отдельная машина.
На практике это означает значительно более рациональное использование серверных
ресурсов, уменьшение числа рутинных процедур (таких, как подключение кабелей),
которые должен выполнять системный администратор, и экономию его рабочего времени
Появление систем и сетей хранения данных
Другой особенностью современной истории развития вычислительных систем,
наряду с появлением блейд-серверов, стало появление специализированных систем и
сетей хранения данных. Внутренние подсистемы хранения серверов часто уже не могли
предоставить необходимый уровень масштабируемости и производительности в условиях
лавинообразного наращивания объемов обрабатываемой информации. В итоге появились
внешние системы хранения данных, ориентированные сугубо на решение задач хранения
данных и предоставление интерфейса доступа к данным для их использования.
Система Хранения Данных (СХД) - это программно-аппаратное решение по
организации надѐжного хранения информационных ресурсов и предоставления к
ним гарантированного доступа.
Системы хранения данных представляют собой надежные устройства хранения,
выделенные в отдельный узел. Система хранения данных может подключаться к серверам
многими способами. Наиболее производительным является подключение по оптическим
каналам (Fiber Channel), что дает возможность получать доступ к системам хранения
данных со скоростями 4-8 Гбит/сек. Системы хранения данных так же имеют
резервирование основных аппаратных компонент – несколько блоков питания, raid
контроллеров, FC адаптеров и оптических патчкордов для подключения к FC
коммутаторам.
Рис. 3. Типичная Система хранения данных начального уровня (Sun StorageTek 6140)
Отметим основные преимущества использования СХД:
Высокая надѐжность и отказоустойчивость – реализуется полным или
частичным резервированием всех компонент системы (блоков питания, путей доступа,
процессорных модулей, дисков, кэша и т.д.), а также мощной системой мониторинга и
оповещения о возможных и существующих проблемах;
Высокая доступность данных – обеспечивается продуманными функциями
сохранения целостности данных (использование технологии RAID, создание полных и
мгновенных копий данных внутри дисковой стойки, реплицирование данных на
удаленную СХД и т.д.) и возможностью добавления (обновления) аппаратуры и
программного обеспечения в беспрерывно работающую систему хранения данных без
остановки комплекса;
Мощные средства управления и контроля – управление системой через web-
интерфейс или командную строку, выбор нескольких вариантов оповещения
администратора о неполадках, полный мониторинг системы, работающая на уровне
"железа" технология диагностики производительности;
Высокая производительность – определяется числом жѐстких дисков, объѐмом
кэш-памяти, вычислительной мощностью процессорной подсистемы, числом внутренних
(для жѐстких дисков) и внешних (для подключения хостов) интерфейсов, а также
возможностью гибкой настройки и конфигурирования системы для работы с
максимальной производительностью;
Беспроблемная масштабируемость – обычно существует возможность
наращивания числа жѐстких дисков, объѐма кэш-памяти, аппаратной модернизации
существующей системы хранения данных, наращивания функционала с помощью
специального ПО, работающего на стойке, без значительного переконфигурирования или
потерь какой-то функциональности СХД. Этот момент позволяет значительно экономить
и более гибко проектировать свою сеть хранения данных.
Сегодня системы хранения данных являются одним из ключевых элементов, от
которых зависит непрерывность бизнес-процессов компании. В современной
корпоративной ИТ-инфраструктуре СХД, как правило, отделены от основных
вычислительных серверов, адаптированы и настроены для различных
специализированных задач. Системы хранения данных реализуют множество функций,
они играют важную роль в построении систем оперативного резервного копирования и
восстановления данных, отказоустойчивых кластеров, высоко доступных ферм
виртуализации.
Сети хранения данных
SAN - это высокоскоростная коммутируемая сеть передачи данных,
объединяющая серверы, рабочие станции, дисковые хранилища и ленточные
библиотеки. Обмен данными происходит по протоколу Fibre Channel,
оптимизированному для быстрой гарантированной передачи сообщений и
позволяющему передавать информацию на расстояние от нескольких метров до
сотен километров.
Движущей силой для развития сетей хранения данных стал взрывной рост объема
деловой информации (такой как электронная почта, базы данных и высоконагруженные
файловые сервера), требующей высокоскоростного доступа к дисковым устройствам на
блочном уровне. Ранее на предприятии возникали "острова" высокопроизводительных
дисковых массивов SCSI. Каждый такой массив был выделен для конкретного
приложения и виден ему как некоторое количество "виртуальных жестких дисков". Сеть
хранения данных (Storage Area Network или SAN) позволяет объединить эти "острова"
средствами высокоскоростной сети. Основу SAN составляет волоконно-оптическое
соединение устройств по интерфейсу Fibre Chanel, обеспечивающее скорость передачи
информации между объектами 1,2,4 или 8 Gbit/sec. Сети хранения помогают повысить
эффективность использования ресурсов систем хранения, поскольку дают возможность
выделить любой ресурс любому узлу сети. Рассмотрим основные преимущества SAN:
o Производительность. Технологии SAN позволяют обеспечить высокую
производительность для задач хранения и передачи данных.
o Масштабируемость. Сети хранения данных обеспечивают удобство расширения
подсистемы хранения, позволяют легко использовать приобретенные ранее
устройства совместно с новыми устройствами хранения данных.
o Гибкость. Совместное использование систем хранения данных, как правило,
упрощает администрирование и добавляет гибкость, поскольку кабели и дисковые
массивы не нужно физически транспортировать и перекоммутировать от одного
сервера к другому. SAN позволяет подключить новые серверы и дисковые массивы
к сети без остановки системы.
o Централизованная загрузка. Другим преимуществом является возможность
загружать сервера прямо из сети хранения. При такой конфигурации можно быстро
и легко заменить сбойный сервер, переконфигурировав SAN таким образом, что
сервер-замена, будет загружаться с логического диска сбойного сервера.
o Отказоустойчивость. Сети хранения помогают более эффективно восстанавливать
работоспособность после сбоя. В SAN может входить удаленный участок с
вторичным устройством хранения. В таком случае можно использовать
репликацию — реализованную на уровне контроллеров массивов, либо при
помощи специальных аппаратных устройств. Спрос на такие решения значительно
возрос после событий 11 сентября 2001 года в США.
o Управление. Технологии SAN позволяют обеспечить централизованное
управление всей подсистемой хранения данных.
Топологии SAN
Рассмотрим некоторые топологии сетей хранения данных
Однокоммутаторная структура (англ. single-switch fabric) состоит из одного
коммутатора Fibre Channel, сервера и системы хранения данных. Обычно эта топология
является базовой для всех стандартных решений — другие топологии создаются
объединением однокоммутаторных ячеек.
Рис. 4. Однокоммутаторная структура SAN
Каскадная структура— набор ячеек, коммутаторы которых соединены в дерево с
помощью межкоммутаторных соединений.
Рис. 5. Каскадная структура SAN
Решетка — набор ячеек, коммутатор каждой из которых соединен со всеми
другими. При отказе одного (а в ряде сочетаний — и более) соединения связность сети не
нарушается. Недостаток — большая избыточность соединений
Рис. 6. Структура Решетка
Кольцо— практически повторяет схему топологии решѐтка. Среди преимуществ —
использование меньшего количества соединений.
Рис. 7. Структура Кольцо
Консолидация ИТ инфраструктуры
Консолидация — это объединение вычислительных ресурсов либо структур
управления в едином центре.
Анализ международного опыта позволяет сегодня говорить о четкой тенденции к
консолидации ИТ-ресурсов корпораций. Именно она способна существенно уменьшить
затраты на ИТ. Сэкономленные же средства можно направить на повышение качества
имеющихся информационных услуг и внедрение новых. Кроме оптимизации расходов на
ИТ, консолидация ИТ-ресурсов позволяет улучшить управляемость предприятий за счет
более актуальной и полной информации об их функционировании. Обычно говорят о
консолидации:
o серверов - перемещение децентрализованных, приложений, распределенных на
различных серверах компании, в один кластер централизованных гомогенных
серверов;
o систем хранения - совместное использование централизованной системы хранения
данных несколькими гетерогенными узлами;
o приложений - размещение нескольких приложений на одном хосте.
При этом можно выделить два базовых типа консолидации — физическую и
логическую. Физическая консолидация подразумевает географическое перемещение
серверов на единую площадку (в центр данных), а логическая — централизацию
управления.
Перемещение компьютеров в единый центр обработки данных позволяют
обеспечить комфортные условия для оборудования и технического персонала, а также
увеличить степень физической защиты серверов. Кроме того, в центре обработки данных
можно использовать более производительное и высококачественное оборудование,
которое экономически неэффективно устанавливать в каждом подразделении. Создавая
центры обработки данных, можно снизить расходы на техническую поддержку и
управление самыми важными серверами предприятия. Удачным примером оборудования,
которое может успешно решить задачи консолидации вычислительных ресурсов в
организациях любого уровня являются блейд-системы, а также и системы и сети хранения
данных.
Очевидное преимущество этого решения в том, что упрощается выделение
персонала поддержки и его работа по развертыванию и управлению системами, снижается
степень дублирования опытных кадров. Централизация также облегчает использование
стандартизованных конфигураций и процессов управления, создание рентабельных
систем резервного копирования для восстановления данных после сбоя и поддержания
связности бизнеса. Упрощается и решение вопросов организации высококачественного
контроля за состоянием окружающей среды и обеспечения физической защиты. Может
быть улучшена и сетевая безопасность, поскольку серверы оказываются под защитой
единого, централизованно управляемого межсетевого экрана.
Логический тип консолидации подразумевает перестройку системы управления
ИТ-инфраструктуры. Это необходимо как для увеличения масштабируемости и
управляемости сложной распределенной вычислительной системы, так и для объединения
сегментов корпоративной сети. Логическая консолидация обеспечивает введение
централизованного управления и унификацию работы с ресурсами компании на основе
открытых стандартов. В результате появляется возможность создания глобальных
информационных служб предприятия — каталога LDAP, корпоративного портала или
ERP-системы, что в конечном итоге позволит улучшить управляемость предприятия за
счет более актуальной и полной информации об его функционировании.
Логическая консолидация приложений приводит к централизации управления
критическими для бизнеса системами и приложениями. Преимущества логической
консолидации очевидны: в первую очередь это высвобождение аппаратных ресурсов,
которые можно использовать на других участках информационной системы. Во-вторых,
более простая и логичная структура управления ИТ-инфраструктурой делает ее более
гибкой и приспособленной для будущих изменений.
Сценарий гомогенной консолидации предусматривает перенос одного масштабного
приложения, ранее выполнявшегося на нескольких серверах, на один, более мощный (рис.
8). В качестве примера такой операции можно привести базы данных, которые зачастую
наращивают экстенсивным путем по мере роста объема обрабатываемой информации.
Объединение данных и приложений на одном сервере заметно ускоряет процессы
обработки и поиска, а также повышает уровень целостности.
Гетерогенная консолидация по содержанию схожа с гомогенной, но в этом случае
объединению подлежат разные приложения. Например, несколько экземпляров Exchange
Server и SQL Server, ранее запускавшиеся на отдельных компьютерах, могут быть сведены
на единой машине. Преимущества гетерогенной консолидации - возрастающая
масштабируемость сервисов и более полное задействование системных ресурсов.
Рис. 8. Консолидация приложений
Как отмечают специалисты по облачным технологиям – консолидация ИТ-
инфраструктуры – является первым шагом к "облаку". Чтобы перейти к использованию
облачных технологий, компаниям необходимо сначала решить задачи
неконсолидированной ИТ-инфраструктуры. "Без консолидации невозможно построить
эффективное процессно-ориентированное управление, поскольку отсутствует единая
точка предоставления сервисов".
Анализируя историю развития информационных технологий и современные
тенденции можно сделать вывод, что эволюционный виток ИТ, начавшийся вместе с
эпохой мэйнфреймов более пятидесяти лет назад, замкнулся – вместе с облаками мы
вернулись к централизации ресурсов, но на этот раз не на уровне мэйнфреймов с их
зелеными терминалами а на новом технологическом уровне.
Выступая на конференции, посвященной проблемам современных процессоров,
профессор Массачусетского технологического института Ананд Агарвал сказал:
"Процессор – это транзистор современности". Новый уровень отличается тем, что здесь
также собираются мэйнфреймы, но виртуальные, и не из отдельных транзисторов, как
полвека назад, а из целых процессоров или целиком из компьютеров. На заре ИТ
многочисленные компании и организации "лепили" собственные компьютеры из
дискретных компонентов, монтируя их на самодельных печатных платах – каждая
организация делала свою машину, и ни о какой стандартизации или унификации и речи не
могло быть. И вот на пороге второго десятилетия XXI века ситуация повторяется – точно
так же из серверов-лезвий, компьютеров, разнообразного сетевого оборудования
собираются внешние и частные облака. Одновременно наблюдается та же самая
технологическая разобщенность и отсутствие унификации: Microsoft, Google, IBM,
Aptana, Heroku, Rackspace, Ning, Salesforce строят глобальные мэйнфреймы, а кто-то под
собственные нужды создает частные облака, которые являются теми же мэйнфреймами,
но меньшего масштаба. Остается предположить, что впереди изобретение интегральной
схемы и микропроцессора.
4. Краткие итоги:
В данной лекции мы ознакомились с основными моментами исторического
развития средств вычислительной техники. Рассмотрели тенденции современных
инфраструктурных решений.
5. Ключевые термины:
Мейнфрейм - это главный компьютер вычислительного центра с большим объемом
внутренней и внешней памяти.
Блэйд-сервер — компьютерный сервер с компонентами, вынесенными и обобщѐнными в
корзине для уменьшения занимаемого пространства.
Система Хранения Данных (СХД) - это программно-аппаратное решение по организации
надѐжного хранения информационных ресурсов и предоставления к ним
гарантированного доступа.
SAN - это высокоскоростная коммутируемая сеть передачи данных, объединяющая
серверы, рабочие станции, дисковые хранилища и ленточные библиотеки. Обмен
данными происходит по протоколу Fibre Channel, оптимизированному для быстрой
гарантированной передачи сообщений и позволяющему передавать информацию на
расстояние от нескольких метров до сотен километров.
Консолидация — это объединение вычислительных ресурсов либо структур управления в
едином центре.
Лекция 10. Технологии виртуализации
Цель лекции: Информационные технологии принесли в жизнь современного общества
множество полезных и интересных вещей. Каждый день изобретательные и талантливые
люди придумывают все новые и новые применения компьютерам как эффективным
инструментам производства, развлечения и сотрудничества. Множество различных
программных и аппаратных средств, технологий и сервисов позволяют нам ежедневно
повышать удобство и скорость работы с информацией. Все сложнее и сложнее выделить
из обрушивающегося на нас потока технологий действительно полезные и научиться
применять их с максимальной пользой. В этой лекции пойдет речь о еще одной
невероятно перспективной и по-настоящему эффективной технологии, стремительно
врывающейся в мир компьютеров – технологии виртуализации, которая занимает
ключевое место в концепции "облачных" вычислений. Цель данной лекции – получить
сведения о технологиях виртуализации, терминологии, разновидностях и основных
достоинствах виртуализации. Ознакомиться с основными решениями ведущих ИТ-
вендоров. Рассмотреть особенности платформы виртуализации Microsoft.
План лекции:
1 Технологии виртуализации
2 Виртуализация серверов
3 Краткий обзор платформ виртуализации
VMware
Citrix (Xen)
Microsoft
4 Краткие итоги:
5 Ключевые термины:
Ключевые слова: Windows, приложение, сервер, администрирование,
энергопотребление, Виртуализация, ПО, значение, инфраструктура, безопасность,
программное обеспечение, пользователь, объект, IBM, x86, server, место, Oracle, SUN,
корпорация, virtual, PC, application virtualization, virtual desktop, infrastructure, VDI, remote,
system, center, virtual machine, manager, потенциал, AMD, виртуальная машина, server
virtualization, hypervisor, system-level, Java Virtual Machine, удаленный терминал, server
software, жизненный цикл продукта, peek, heartbeat, virtual infrastructure, VSP, P2V, V2V,
операционная система, API, запуск, представление, архитектура, ядро, стек, компьютер,
Windows Server, VMM, workstation.
Содержание лекции:
1 Технологии виртуализации
Согласно статистике средний уровень загрузки процессорных мощностей у
серверов под управлением Windows не превышает 10%, у Unix-систем этот показатель
лучше, но тем не менее в среднем не превышает 20%. Низкая эффективность
использования серверов объясняется широко применяемым с начала 90-х годов подходом
"одно приложение — один сервер", т. е. каждый раз для развертывания нового
приложения компания приобретает новый сервер. Очевидно, что на практике это означает
быстрое увеличение серверного парка и как следствие — возрастание затрат на его
администрирование, энергопотребление и охлаждение, а также потребность в
дополнительных помещениях для установки всѐ новых серверов и приобретении лицензий
на серверную ОС.
Виртуализация ресурсов физического сервера позволяет гибко распределять их
между приложениями, каждое из которых при этом "видит" только предназначенные ему
ресурсы и "считает", что ему выделен отдельный сервер, т. е. в данном случае реализуется
подход "один сервер — несколько приложений", но без снижения производительности,
доступности и безопасности серверных приложений. Кроме того, решения виртуализации
дают возможность запускать в разделах разные ОС с помощью эмуляции их системных
вызовов к аппаратным ресурсам сервера.
Виртуализация подразумевает запуск на одном физическом компьютере нескольких
виртуальных компьютеров
В основе виртуализации лежит возможность одного компьютера выполнять работу
нескольких компьютеров благодаря распределению его ресурсов по нескольким средам. С
помощью виртуальных серверов и виртуальных настольных компьютеров можно
разместить несколько ОС и несколько приложений в едином местоположении. Таким
образом, физические и географические ограничения перестают иметь какое-либо
значение. Помимо энергосбережения и сокращения расходов благодаря более
эффективному использованию аппаратных ресурсов, виртуальная инфраструктура
обеспечивает высокий уровень доступности ресурсов, более эффективную систему
управления, повышенную безопасность и усовершенствованную систему восстановления
в критических ситуациях.
В широком смысле понятие виртуализации представляет собой сокрытие
настоящей реализации какого-либо процесса или объекта от истинного его представления
для того, кто им пользуется. Продуктом виртуализации является нечто удобное для
использования, на самом деле, имеющее более сложную или совсем иную структуру,
отличную от той, которая воспринимается при работе с объектом. Иными словами,
происходит отделение представления от реализации чего-либо. Виртуализация призвана
абстрагировать программное обеспечение от аппаратной части.
В компьютерных технологиях под термином "виртуализация" обычно понимается
абстракция вычислительных ресурсов и предоставление пользователю системы, которая
"инкапсулирует" (скрывает в себе) собственную реализацию. Проще говоря, пользователь
работает с удобным для себя представлением объекта, и для него не имеет значения, как
объект устроен в действительности.
Рис. 1. Виртуализация подразумевает запуск на одном физическом компьютере
нескольких виртуальных компьютеров
Сейчас возможность запуска нескольких виртуальных машин на одной физической
вызывает большой интерес среди компьютерных специалистов, не только потому, что это
повышает гибкость ИТ-инфраструктуры, но и потому, что виртуализация, на самом деле,
позволяет экономить деньги.
История развития технологий виртуализации насчитывает более сорока лет.
Компания IBM была первой, кто задумался о создании виртуальных сред для различных
пользовательских задач, тогда еще в мэйнфреймах. В 60-х годах прошлого века
виртуализация представляла чисто научный интерес и была оригинальным решением для
изоляции компьютерных систем в рамках одного физического компьютера. После
появления персональных компьютеров интерес к виртуализации несколько ослаб ввиду
бурного развития операционных систем, которые предъявляли адекватные требования к
аппаратному обеспечению того времени. Однако бурный рост аппаратных мощностей
компьютеров в конце девяностых годов прошлого века заставил ИТ-сообщество вновь
вспомнить о технологиях виртуализации программных платформ.
В 1999 г. компания VMware представила технологию виртуализации систем на базе x86 в
качестве эффективного средства, способного преобразовать системы на базе x86 в единую
аппаратную инфраструктуру общего пользования и назначения, обеспечивающую полную
изоляцию, мобильность и широкий выбор ОС для прикладных сред. Компания VMware
была одной из первых, кто сделал серьезную ставку исключительно на виртуализацию.
Как показало время, это оказалось абсолютно оправданным. Сегодня WMware предлагает
комплексную виртуализационную платформу четвертого поколения VMware vSphere 4,
которая включает средства как для отдельного ПК, так и для центра обработки данных.
Ключевым компонентом этого программного комплекса является гипервизор VMware
ESX Server. Позднее в "битву" за место в этом модном направлении развития
информационных технологий включились такие компании как Parallels (ранее SWsoft),
Oracle (Sun Microsystems), Citrix Systems (XenSourse).
Корпорация Microsoft вышла на рынок средств виртуализации в 2003 г. с
приобретением компании Connectiх, выпустив свой первый продукт Virtual PC для
настольных ПК. С тех пор она последовательно наращивала спектр предложений в этой
области и на сегодня почти завершила формирование виртуализационной платформы, в
состав которой входят такие решения как Windows 2008 Server R2 c компонентом Hyper-
V, Microsoft Application Virtualization (App-v), Microsoft Virtual Desktop Infrastructure
(VDI), Remote Desktop Services, System Center Virtual Machine Manager.
На сегодняшний день поставщики технологий виртуализации предлагают
надежные и легкоуправляемые платформы, а рынок этих технологий переживает
настоящий бум. По оценкам ведущих экспертов, сейчас виртуализация входит в тройку
наиболее перспективных компьютерных технологий. Многие эксперты предсказывают,
что к 2015 году около половины всех компьютерных систем будут виртуальными.
Повышенный интерес к технологиям виртуализации в настоящее время неслучаен.
Вычислительная мощь нынешних процессоров быстро растет, и вопрос даже не в том, на
что эту мощь расходовать, а в том, что современная "мода" на двухъядерные и
многоядерные системы, проникшая уже и в персональные компьютеры (ноутбуки и
десктопы), как нельзя лучше позволяет реализовать богатейший потенциал идей
виртуализации операционных систем и приложений, выводя удобство пользования
компьютером на новый качественный уровень. Технологии виртуализации становятся
одним из ключевых компонентов (в том числе, и маркетинговых) в самых новых и
будущих процессорах Intel и AMD, в операционных системах от Microsoft и ряда других
компаний.
Преимущества виртуализации
Приведем основные достоинства технологий виртуализации:
1. Эффективное использование вычислительных ресурсов. Вместо 3х, а то 10
серверов, загруженных на 5-20% можно использовать один, используемый на 50-70%.
Кроме прочего, это еще и экономия электроэнергии, а также значительное
сокращение финансовых вложений: приобретается один высокотехнологичный
сервер, выполняющий функции 5-10 серверов. С помощью виртуализации можно
достичь значительно более эффективного использования ресурсов, поскольку она
обеспечивает объединение стандартных ресурсов инфраструктуры в единый пул и
преодолевает ограничения устаревшей модели "одно приложение на сервер".
2. Сокращение расходов на инфраструктуру: Виртуализация позволяет сократить
количество серверов и связанного с ними ИТ-оборудования в информационном
центре. В результате этого потребности в обслуживании, электропитании и
охлаждении материальных ресурсов сокращаются, и на ИТ затрачивается гораздо
меньше средств.
3. Снижение затрат на программное обеспечение. Некоторые производители
программного обеспечения ввели отдельные схемы лицензирования специально для
виртуальных сред. Так, например, покупая одну лицензию на Microsoft Windows
Server 2008 Enterprise, вы получаете право одновременно еѐ использовать на 1
физическом сервере и 4 виртуальных (в пределах одного сервера), а Windows Server
2008 Datacenter лицензируется только на количество процессоров и может
использоваться одновременно на неограниченном количестве виртуальных серверов.
4. Повышение гибкости и скорости реагирования системы: Виртуализация
предлагает новый метод управления ИТ-инфраструктурой и помогает ИТ-
администраторам затрачивать меньше времени на выполнение повторяющихся
заданий — например, на инициацию, настройку, отслеживание и техническое
обслуживание. Многие системные администраторы испытывали неприятности, когда
"рушится" сервер. И нельзя, вытащив жесткий диск, переставив его в другой сервер,
запустить все как прежде… А установка? поиск драйверов, настройка, запуск… и на
все нужны время и ресурсы. При использовании виртуального сервера — возможен
моментальный запуск на любом "железе", а если нет подобного сервера, то можно
скачать готовую виртуальную машину с установленным и настроенным сервером, из
библиотек, поддерживаемых компаниями разработчиками гипервизоров (программ
для виртуализации).
5. Несовместимые приложения могут работать на одном компьютере. При
использовании виртуализации на одном сервере возможна установка linux и windows
серверов, шлюзов, баз данных и прочих абсолютно несовместимых в рамках одной не
виртуализированной системы приложений.
6. Повышение доступности приложений и обеспечение непрерывности работы
предприятия: Благодаря надежной системе резервного копирования и миграции
виртуальных сред целиком без перерывов в обслуживании вы сможете сократить
периоды планового простоя и обеспечить быстрое восстановление системы в
критических ситуациях. "Падение" одного виртуального сервера не ведет к потере
остальных виртуальных серверов. Кроме того, в случае отказа одного физического
сервера возможно произвести автоматическую замену на резервный сервер. Причем
это происходит не заметно для пользователей без перезагузки. Тем самым
обеспечивается непрерывность бизнеса.
7. Возможности легкой архивации. Поскольку жесткий диск виртуальной машины
обычно представляется в виде файла определенного формата, расположенный на
каком-либо физическом носителе, виртуализация дает возможность простого
копирования этого файла на резервный носитель как средство архивирования и
резервного копирования всей виртуальной машины целиком. Возможность поднять из
архива сервер полностью еще одна замечательная особенность. А можно поднять
сервер из архива, не уничтожая текущий сервер и посмотреть положение дел за
прошлый период.
8. Повышение управляемости инфраструктуры: использование централизованного
управления виртуальной инфраструктурой позволяет сократить время на
администрирование серверов, обеспечивает балансировку нагрузки и "живую"
миграцию виртуальных машин.
Виртуальной машиной будем называть программную или аппаратную среду,
которая скрывает настоящую реализацию какого-либо процесса или объекта от его
видимого представления.
Виртуальная машина — это полностью изолированный программный контейнер,
который работает с собственной ОС и приложениями, подобно физическому
компьютеру. Виртуальная машина действует так же, как физический компьютер, и
содержит собственные виртуальные (т.е. программные) ОЗУ, жесткий диск и сетевой
адаптер.
ОС не может различить виртуальную и физическую машины. То же самое можно
сказать о приложениях и других компьютерах в сети. Даже сама виртуальная машина
считает себя "настоящим" компьютером. Но несмотря на это виртуальные машины
состоят исключительно из программных компонентов и не включают оборудование. Это
дает им ряд уникальных преимуществ над физическим оборудованием.
Рис. 2. Виртуальная машина
Рассмотрим основные особенности виртуальных машин более детально:
1. Совместимость. Виртуальные машины, как правило, совместимы со всеми
стандартными компьютерами. Как и физический компьютер, виртуальная машина
работает под управлением собственной гостевой операционной системы и выполняет
собственные приложения. Она также содержит все компоненты, стандартные для
физического компьютера (материнскую плату, видеокарту, сетевой контроллер и т.д.
). Поэтому виртуальные машины полностью совместимы со всеми стандартными
операционными системами, приложениями и драйверами устройств. Виртуальную
машину можно использовать для выполнения любого программного обеспечения,
пригодного для соответствующего физического компьютера.
2. Изолированность. Виртуальные машины полностью изолированы друг от друга, как
если бы они были физическими компьютерами Виртуальные машины могут
использовать общие физические ресурсы одного компьютера и при этом оставаться
полностью изолированными друг от друга, как если бы они были отдельными
физическими машинами. Например, если на одном физическом сервере запущено
четыре виртуальных машины, и одна из них дает сбой, это не влияет на доступность
оставшихся трех машин. Изолированность — важная причина гораздо более высокой
доступности и безопасности приложений, выполняемых в виртуальной среде, по
сравнению с приложениями, выполняемыми в стандартной, невиртуализированной
системе.
3. Инкапсуляция. Виртуальные машины полностью инкапсулируют вычислительную
среду. Виртуальная машина представляет собой программный контейнер,
связывающий, или "инкапсулирующий" полный комплект виртуальных аппаратных
ресурсов, а также ОС и все еѐ приложения в программном пакете. Благодаря
инкапсуляции виртуальные машины становятся невероятно мобильными и удобными
в управлении. Например, виртуальную машину можно переместить или скопировать
из одного местоположения в другое так же, как любой другой программный файл.
Кроме того, виртуальную машину можно сохранить на любом стандартном носителе
данных: от компактной карты Flash-памяти USB до корпоративных сетей хранения
данных.
4. Независимость от оборудования. Виртуальные машины полностью независимы от
базового физического оборудования, на котором они работают. Например, для
виртуальной машины с виртуальными компонентами (ЦП, сетевой картой,
контроллером SCSI) можно задать настройки, абсолютно не совпадающие с
физическими характеристиками базового аппаратного обеспечения. Виртуальные
машины могут даже выполнять разные операционные системы (Windows, Linux и др.)
на одном и том же физическом сервере. В сочетании со свойствами инкапсуляции и
совместимости, аппаратная независимость обеспечивает возможность свободно
перемещать виртуальные машины с одного компьютера на базе x86 на другой, не
меняя драйверы устройств, ОС или приложения. Независимость от оборудования
также дает возможность запускать в сочетании абсолютно разные ОС и приложения
на одном физическом компьютере.
Рассмотрим основные разновидности виртуализации, такие как:
o виртуализация серверов (полная виртуализация и паравиртуализация)
o виртуализация на уровне операционных систем,
o виртуализация приложений,
o виртуализация представлений.
2 Виртуализация серверов
Сегодня, говоря о технологиях виртуализации, как правило, подразумевают
виртуализацию серверов, так как последняя становится наиболее популярным решением
на рынке IT. Виртуализация серверов подразумевает запуск на одном физическом сервере
нескольких виртуальных серверов. Виртуальные машины или сервера представляют собой
приложения, запущенные на хостовой операционной системе, которые эмулируют
физические устройства сервера. На каждой виртуальной машине может быть установлена
операционная система, на которую могут быть установлены приложения и службы.
Типичные представители это продукты VmWare (ESX, Server, Workstation) и Microsoft
(Hyper-V, Virtual Server, Virtual PC).
Рис. 3. Виртуализация серверов
Центры обработки данных используют большое пространство и огромное
количество энергии, особенно если прибавить к этому сопровождающие их системы
охлаждения и инфраструктуру. Средствами технологий виртуализации выполняется
консолидация серверов, расположенных на большом количестве физических серверов в
виде виртуальных машин на одном высокопроизводительном сервере.
Число физических машин, необходимых для работы в качестве серверов
уменьшается, что снижает количество энергии, необходимой для работы машин и
пространство, требуемое для их размещения. Сокращение в количестве серверов и
пространстве уменьшает количество энергии, необходимой для их охлаждения. При
меньшем расходе энергии вырабатывается меньшее количество углекислого газа. Данный
показатель, например в Европе, имеет достаточно важную роль.
Немаловажным фактором является финансовая сторона. Виртуализация является
важным моментом экономии. Виртуализация не только уменьшает потребность в
приобретении дополнительных физических серверов, но и минимизирует требования к их
размещению. Использование виртуального сервера предоставляет преимущества по
быстроте внедрения, использования и управления, что позволяет уменьшить время
ожидания развертывания какого-либо проекта.
Не так давно появились модели последнего поколения процессоров в архитектуре
x86 корпораций AMD и Intel, где производители впервые добавили технологии
аппаратной поддержки виртуализации. До этого виртуализация поддерживалась
программно, что естественно приводила к большим накладным расходам
производительности.
Для появившихся в восьмидесятых годах двадцатого века персональных
компьютерах проблема виртуализации аппаратных ресурсов, казалось бы, не
существовала по определению, поскольку каждый пользователь получал в свое
распоряжение весь компьютер со своей ОС. Но по мере повышения мощности ПК и
расширения сферы применения x86-систем ситуация быстро поменялась. "Диалектическая
спираль" развития сделала свой очередной виток, и на рубеже веков начался очередной
цикл усиления центростремительных сил по концентрации вычислительных ресурсов. В
начале нынешнего десятилетия на фоне растущей заинтересованности предприятий в
повышении эффективности своих компьютерных средств стартовал новый этап развития
технологий виртуализации, который сейчас преимущественно связывается именно с
использованием архитектуры x86.
Отметим, что хотя в идеях x86-виртуализации в теоретическом плане вроде бы
ничего неизвестного ранее не было, речь шла о качественно новом для ИТ-отрасли
явлении по сравнению с ситуацией 20-летней давности. Дело в том, что в аппаратно-
программной архитектуре мэйнфреймов и Unix-компьютеров вопросы виртуализации
сразу решались на базовом уровне и аппаратном уровне. Система же x86 строилась совсем
не в расчете на работу в режиме датацентров, и ее развитие в направлении виртуализации
— это довольно сложный эволюционный процесс со множеством разных вариантов
решения задачи.
Важный момент заключается также в качественно разных бизнес-моделях развития
мэйнфреймов и x86. В первом случае речь идет фактически о моновендорном
программно-аппаратном комплексе для поддержки довольно ограниченного круга
прикладного ПО для достаточно узкого круга крупных заказчиков. Во втором - мы имеем
дело с децентрализованным сообществом производителей техники, поставщиков базового
ПО и огромной армией разработчиков прикладного программного обеспечения.
Использование средств x86-виртуализации началось в конце 90-х с рабочих
станций: одновременно с увеличением числа версий клиентских ОС постоянно росло и
количество людей (разработчиков ПО, специалистов по технической поддержке,
экспертов), которым нужно было на одном ПК иметь сразу несколько копий различных
ОС.
Виртуализация для серверной инфраструктуры стала применяться немного
позднее, и связано это было, прежде всего, с решением задач консолидации
вычислительных ресурсов. Но тут сразу сформировалось два независимых направления:
o поддержка неоднородных операционных сред (в том числе, для работы
унаследованных приложений). Этот случай наиболее часто встречается в рамках
корпоративных информационных систем. Технически проблема решается путем
одновременной работы на одном компьютере нескольких виртуальных машин, каждая
из которых включает экземпляр операционной системы. Но реализация этого режима
выполнялась с помощью двух принципиально разных подходов: полной
виртуализации и паравиртуализации ;
o поддержка однородных вычислительных сред подразумевает изоляцию служб в
рамках одного экземпляра ядра операционной системы ( виртуализация на уровне ОС
), что наиболее характерно для хостинга приложений провайдерами услуг. Конечно,
тут можно использовать и вариант виртуальных машин, но гораздо эффективнее
создание изолированных контейнеров на базе одного ядра одной ОС.
Следующий жизненный этап технологий x86-виртуализации стартовал в 2004-2006
гг. и был связан с началом их массового применения в корпоративных системах.
Соответственно, если раньше разработчики в основном занимались созданием технологий
исполнения виртуальных сред, то теперь на первый план стали выходить задачи
управления этими решениями и их интеграции в общую корпоративную ИТ-
инфраструктуру. Одновременно обозначилось заметное повышение спроса на
виртуализацию со стороны персональных пользователей (но если в 90-х это были
разработчики и тестеры, то сейчас речь уже идет о конечных пользователях как
профессиональных, так и домашних).
Многие трудности и проблемы разработки технологий виртуализации связаны с
преодолением унаследованных особенностей программно-аппаратной архитектуры x86.
Для этого существует несколько базовых методов:
Полная виртуализация (Full, Native Virtualization). Используются не
модифицированные экземпляры гостевых операционных систем, а для поддержки работы
этих ОС служит общий слой эмуляции их исполнения поверх хостовой ОС, в роли
которой выступает обычная операционная система. Такая технология применяется, в
частности, в VMware Workstation, VMware Server (бывший GSX Server), Parallels Desktop,
Parallels Server, MS Virtual PC, MS Virtual Server, Virtual Iron. К достоинствам данного
подхода можно причислить относительную простоту реализации, универсальность и
надежность решения; все функции управления берет на себя хост-ОС. Недостатки —
высокие дополнительные накладные расходы на используемые аппаратные ресурсы,
отсутствие учета особенностей гостевых ОС, меньшая, чем нужно, гибкость в
использовании аппаратных средств.
Рис. 4. Полная виртуализация
Паравиртуализация (paravirtualization). Модификация ядра гостевой ОС
выполняется таким образом, что в нее включается новый набор API, через который она
может напрямую работать с аппаратурой, не конфликтуя с другими виртуальными
машинами. При этом нет необходимости задействовать полноценную ОС в качестве
хостового ПО, функции которого в данном случае исполняет специальная система,
получившая название гипервизора (hypervisor). Именно этот вариант является сегодня
наиболее актуальным направлением развития серверных технологий виртуализации и
применяется в VMware ESX Server, Xen (и решениях других поставщиков на базе этой
технологии), Microsoft Hyper-V. Достоинства данной технологии заключаются в
отсутствии потребности в хостовой ОС – ВМ, устанавливаются фактически на "голое
железо", а аппаратные ресурсы используются эффективно. Недостатки — в сложности
реализации подхода и необходимости создания специализированной ОС-гипервизора.
Рис. 5. Паравиртуализация
Виртуализация на уровне ядра ОС (operating system-level virtualization). Этот
вариант подразумевает использование одного ядра хостовой ОС для создания
независимых параллельно работающих операционных сред. Для гостевого ПО создается
только собственное сетевое и аппаратное окружение. Такой вариант используется в
Virtuozzo (для Linux и Windows), OpenVZ (бесплатный вариант Virtuozzo) и Solaris
Containers. Достоинства — высокая эффективность использования аппаратных ресурсов,
низкие накладные технические расходы, отличная управляемость, минимизация расходов
на приобретение лицензий. Недостатки — реализация только однородных
вычислительных сред.
Рис. 6. Виртуализация на уровне ОС
Виртуализация приложений подразумевает применение модели сильной
изоляции прикладных программ с управляемым взаимодействием с ОС, при которой
виртуализируется каждый экземпляр приложений, все его основные компоненты: файлы
(включая системные), реестр, шрифты, INI-файлы, COM-объекты, службы. Приложение
исполняется без процедуры инсталляции в традиционном ее понимании и может
запускаться прямо с внешних носителей (например, с флэш-карт или из сетевых папок). С
точки зрения ИТ-отдела, такой подход имеет очевидные преимущества: ускорение
развертывания настольных систем и возможность управления ими, сведение к минимуму
не только конфликтов между приложениями, но и потребности в тестировании
приложений на совместимость. Данная технология позволяет использовать на одном
компьютере, а точнее в одной и той же операционной системе несколько несовместимых
между собой приложений одновременно. Виртуализация приложений позволяет
пользователям запускать одно и то же заранее сконфигурированное приложение или
группу приложений с сервера. При этом приложения будут работать независимо друг от
друга, не внося никаких изменений в операционную систему. Фактически именно такой
вариант виртуализации используется в Sun Java Virtual Machine, Microsoft Application
Virtualization (ранее называлось Softgrid), Thinstall (в начале 2008 г. вошла в состав
VMware), Symantec/Altiris.
Рис. 7. Виртуализация приложений
Виртуализация представлений (рабочих мест) Виртуализация представлений
подразумевает эмуляцию интерфейса пользователя. Т.е. пользователь видит приложение и
работает с ним на своѐм терминале, хотя на самом деле приложение выполняется на
удалѐнном сервере, а пользователю передаѐтся лишь картинка удалѐнного приложения. В
зависимости от режима работы пользователь может видеть удалѐнный рабочий стол и
запущенное на нѐм приложение, либо только само окно приложения.
Рис. 8. Виртуализация представлений
Потребности бизнеса меняют наши представления об организации рабочего
процесса. Персональный компьютер, ставший за последние десятилетия неотъемлемым
атрибутом офиса и средством выполнения большинства офисных задач, перестает
успевать за растущими потребностями бизнеса. Реальным инструментом пользователя
оказывается программное обеспечение, которое лишь привязано к ПК, делая его
промежуточным звеном корпоративной информационной системы. В результате активное
развитие получают "облачные" вычисления, когда пользователи имеют доступ к
собственным данным, но не управляют и не задумываются об инфраструктуре,
операционной системе и собственно программном обеспечении, с которым они работают.
Вместе с тем, с ростом масштабов организаций, использование в ИТ-
инфраструктуре пользовательских ПК вызывает ряд сложностей:
o большие операционные издержки на поддержку компьютерного парка;
o сложность, связанная с управлением настольными ПК;
o обеспечение пользователям безопасного и надежного доступа к ПО и приложениям,
необходимым для работы;
o техническое сопровождение пользователей;
o установка и обновление лицензий на ПО и техническое обслуживание;
o резервное копирование и т.д.
Уйти от этих сложностей и сократить издержки, связанные с их решением,
возможно благодаря применению технологии виртуализации рабочих мест сотрудников
на базе инфраструктуры виртуальных ПК – Virtual Desktop Infrastructure (VDI). VDI
позволяет отделить пользовательское ПО от аппаратной части – персонального
компьютера, - и осуществлять доступ к клиентским приложениям через терминальные
устройства.
VDI - комбинация соединений с удаленным рабочим столом и виртуализации. На
обслуживающих серверах работает множество виртуальных машин, с такими
клиентскими операционными системами, как Windows 7, Windows Vista и Windows XP
или Linux операционными системами. Пользователи дистанционно подключаются к
виртуальной машине своей настольной среды. На локальных компьютерах пользователей
в качестве удаленного настольного клиента могут применяться терминальные клиенты,
старое оборудование с Microsoft Windows Fundamentals или дистрибутив Linux.
VDI полностью изолирует виртуальную среду пользователей от других
виртуальных сред, так как каждый пользователь подключается к отдельной виртуальной
машине. Иногда используется статическая инфраструктура VDI, в которой пользователь
всегда подключается к той же виртуальной машине, в других случаях динамическая VDI,
в которой пользователи динамически подключаются к различным виртуальным машинам,
и виртуальные машины создаются по мере необходимости. При использовании любой
модели важно хранить данные пользователей вне виртуальных машин и быстро
предоставлять приложения.
Наряду с централизованным управлением и простым предоставлением
компьютеров, VDI обеспечивает доступ к настольной среде из любого места, если
пользователи могут дистанционно подключиться к серверу.
Представим, что на клиентском компьютере возникла неполадка. Придется
выполнить диагностику и, возможно, переустановить операционную систему. Благодаря
VDI в случае неполадок можно просто удалить виртуальную машину и за несколько
секунд создать новую среду, с помощью созданного заранее шаблона виртуальной
машины. VDI обеспечивает дополнительную безопасность, так как данные не хранятся
локально на настольном компьютере или ноутбуке.
Как пример виртуализации представлений можно рассматривать и технологию
тонких терминалов, которые фактически виртуализируют рабочие места пользователей
настольных систем: пользователь не привязан к какому-то конкретному ПК, а может
получить доступ к своим файлам и приложениям, которые располагаются на сервере, с
любого удаленного терминала после выполнения процедуры авторизации. Все команды
пользователя и изображение сеанса на мониторе эмулируются с помощью ПО управления
тонкими клиентами. Применение этой технологии позволяет централизовать
обслуживание клиентских рабочих мест и резко сократить расходы на их поддержку —
например, для перехода на следующую версию клиентского приложения новое ПО нужно
инсталлировать только один раз на сервере.
Рис. 9. Пример тонкого клиента. Терминал Sun Ray.
Одним из наиболее известных тонких клиентов является терминал Sun Ray, для
организации работы которого используется программное обеспечение Sun Ray Server
Software. Для начала сеанса Sun Ray достаточно лишь вставить в это устройство
идентификационную смарт-карту. Применение смарт-карты существенно повышает
мобильность пользователя — он может переходить с одного Sun Ray на другой,
переставляя между ними свою карточку и сразу продолжать работу со своими
приложениями с того места, где он остановился на предыдущем терминале. А отказ от
жесткого диска не только обеспечивает мобильность пользователей и повышает
безопасность данных, но и существенно снижает энергопотребление по сравнению с
обычными ПК, поэтому терминал Sun не имеет вентилятора и работает практически
бесшумно. Кроме того, сокращение числа компонентов тонкого терминала уменьшает и
риск выхода его из строя, а следовательно, экономит расходы на его обслуживание. Еще
одно преимущество Sun Ray — это существенно расширенный по сравнению с обычными
ПК жизненный цикл продукта, поскольку в нѐм нет компонентов, которые могут
морально устареть.
3 Краткий обзор платформ виртуализации
VMware
Компания VMware – один из первых игроков на рынке платформ виртуализации. В
1998 году VMware запатентовала свои программные техники виртуализации и с тех пор
выпустила немало эффективных и профессиональных продуктов для виртуализации
различного уровня: от VMware Workstation, предназначенного для настольных ПК, до
VMware ESX Server, позволяющего консолидировать физические серверы предприятия в
виртуальной инфраструктуре.
В отличие от ЭВМ (мэйнфрейм) устройства на базе x86 не поддерживают
виртуализацию в полной мере. Поэтому компании VMware пришлось преодолеть немало
проблем в процессе создания виртуальных машин для компьютеров на базе x86.
Основные функции большинства ЦП (в ЭВМ и ПК) заключаются в выполнении
последовательности сохраненных инструкций (т.е. программ). В процессорах на базе x86
содержатся 17 особых инструкций, создающих проблемы при виртуализации, из-за
которых операционная система отображает предупреждающее сообщение, прерывает
работу приложения или просто выдает общий сбой. Итак, эти 17 инструкций оказались
значительным препятствием на начальном этапе внедрения виртуализации для
компьютеров на базе x86.
Для преодоления этого препятствия компания VMware разработала адаптивную
технологию виртуализации, которая "перехватывает" данные инструкции на этапе
создания и преобразует их в безопасные инструкции, пригодные для виртуализации, не
затрагивая при этом процессы выполнения всех остальных инструкций. В результате мы
получаем высокопроизводительную виртуальную машину, соответствующую
аппаратному обеспечению узла и поддерживающую полную программную
совместимость. Компания VMware первой разработала и внедрила данную
инновационную технологию, поэтому на сегодняшний день она является неоспоримым
лидером технологий виртуализации.
В весьма обширном списке продуктов VMware можно найти немало инструментов
для повышения эффективности и оптимизации ИТ-инфраструктуры, управления
виртуальными серверами, а также средства миграции с физических платформ на
виртуальные. По результатам различных тестов производительности средства
виртуализации VMware почти всегда по большинству параметров выигрывают у
конкурентов. VMware имеет более 100 000 клиентов по всему миру, в списке ее клиентов
100% организаций из Fortune 100. Сеть партнерств охватывает более 350 производителей
оборудования и ПО и более 6000 реселлеров. На данный момент объем рынка,
принадлежащий VMware, оценивается на 80%. Между тем, среди платформ
виртуализации у VMware есть из чего выбирать:
VMware Workstation – платформа, ориентированная на desktop-пользователей и
предназначенная для использования разработчиками ПО, а также профессионалами в
сфере ИТ. Новая версия популярного продукта VMware Workstation 7 стала доступна в
2009 г, в качестве хостовых операционных систем поддерживаются Windows и Linux.
VMware Workstation 7 может использоваться совместно со средой разработки, что делает
ее особенно популярной в среде разработчиков, преподавателей и специалистов
технической поддержки. Выход VMware Workstation 7 означает официальную поддержку
Windows 7 как в качестве гостевой, так и хостовой операционной системы. Продукт
включает поддержку Aero Peek и Flip 3D, что делает возможным наблюдать за работой
виртуальной машины, подводя курсор к панели задач VMware или к соответствующей
вкладке на рабочем столе хоста. Новая версия может работать на любой версии Windows
7, также как и любые версии Windows могут быть запущены в виртуальных машинах.
Кроме того, виртуальные машины в VMware Workstation 7, полностью поддерживают
Windows Display Driver Model (WDDM), что позволяет использовать интерфейс Windows
Aero в гостевых машинах.
VMware Player – бесплатный "проигрыватель" виртуальных машин на основе
виртуальной машины VMware Workstation, предназначенный для запуска уже готовых
образов виртуальных машин, созданных в других продуктах VMware, а также в Microsoft
VirtualPC и Symantec LiveState Recovery. Начиная с версии 3.0 VMware Player позволяет
также создавать образы виртуальных машин. Ограничение функциональности теперь
касается в основном функций, предназначенных для IT-специалистов и разработчиков
ПО.
VMware Fusion – настольный продукт для виртуализации на платформе Mac от
компании Apple.
VMware Server, Бесплатный продукт VMware Server является довольно мощной
платформой виртуализации, которая может быть запущена на серверах под управлением
хостовых операционных систем Windows и Linux. Основное предназначение VMware
Server – поддержка малых и средних виртуальных инфраструктур небольших
предприятий. В связи с небольшой сложностью его освоения и установки, VMware Server
может быть развернут в кратчайшие сроки, как на серверах организаций, так и на
компьютерах домашних пользователей.
VMware Ace – продукт для создания защищенных политиками безопасности
виртуальных машин, которые затем можно распространять по модели SaaS (Software-as-a-
Service).
Рис. 10. Структура платформы vShpere
VMware vSphere – комплекс продуктов, представляющий надежную платформу
для виртуализации ЦОД. Компания позиционирует данный комплекс также как мощную
платформу виртуализации для создания и развертывания частного "облака". VMware
vSphere поставляется в нескольких выпусках с возможностями, предназначенными
специально для малых компаний и средних компаний и корпораций.
VMware vSphere включает ряд компонентов, преобразующих стандартное
оборудование в общую устойчивую среду, напоминающую мейнфрейм и включающую
встроенные элементы управления уровнями обслуживания для всех приложений:
o Службы инфраструктуры — это компоненты, обеспечивающие всестороннюю
виртуализацию ресурсов серверов, хранилищ и сетей, их объединение и точное
выделение приложениям по требованию и в соответствии с приоритетами бизнеса.
o Службы приложений — это компоненты, предоставляющие встроенные элементы
управления уровнями обслуживания для всех приложений на платформе платформы
vSphere независимо от их типа или ОС.
o VMware vCenter Server предоставляет центральную консоль для управления
виртуализацией, обеспечивающую администрирования служб инфраструктуры и
приложений. Эта консоль поддерживает всестороннюю визуализацию всех аспектов
виртуальной инфраструктуры, автоматизацию повседневной эксплуатации и
масштабируемость для управления крупными средами ЦОД.
VMware ESX Server – это гипервизор, разбивающий физические серверы на
множество виртуальных машин. VMware ESX является основой пакета VMware vSphere и
входит во все выпуски VMware vSphere.
Рис. 11. Гипервизор VMware ESX.
VMware vSphere Hypervisor (ранее VMware ESXi) - "облегчѐнная" платформа
виртуализации корпоративного уровня, основанная на технологиях ESX. Продукт
является бесплатным и доступен для загрузки с сайта VMware. VSphere VMware
Hypervisor является простейшим способом для начала работы с виртуализацией
VMware vCenter – предоставляет расширяемую и масштабируемую платформу
для упреждающего управления виртуальной инфраструктурой и обеспечивает получение
о ней всеобъемлющей информации. VMware vCenter Server обеспечивает
централизованное управление средами vSphere и упрощает выполнение повседневных
задач, значительно улучшая административное управление средой. Продукт обладает
широкими возможностями по консолидации серверов, их настройке и управлению.
VMware vCenter Server агрегирует в себе все аспекты управления виртуальной средой: от
виртуальных машин до сбора информации о физических серверах для последующей их
миграции в виртуальную инфраструктуру. Кроме центрального продукта управления
виртуальной инфраструктурой vCenter Server существует также ряд дополнений,
реализующих различные аспекты планирования, управления и интеграции
распределенной виртуальной инфраструктуры (VMware vCenter Server Heartbeat, VMware
vCenter Orchestrator, VMware vCenter Capacity IQ, VMware vCenter Site Recovery Manager,
VMware vCenter Lab Manager, VMware vCenter Configuration Manager, VMware vCenter
Converter). В частности, vCenter Converter предназначен для перевода в виртуальную
среду физических серверов, позволяющий осуществлять "горячую" (без останова систем)
и "холодную" миграцию. vCenter Site Recovery Manager – это ПО для создания
территориально-удаленного резервного сегмента виртуальной инфраструктуры, который в
случае отказа основного узла, берет на себя функции по запуску виртуальных машин в
соответствии с планом восстановления после сбоев. vCenter Lab Manager - продукт для
создания инфраструктуры хранения и доставки конфигураций виртуальных машин,
позволяющий организовать эффективную схему тестирования в компаниях-разработчиках
ПО.
VMware ThinApp - бывший продукт Thinstall Virtualization Suite, ПО для
виртуализации приложений, позволяющее распространять предустановленные
приложения на клиентские рабочие станции, сокращая время на стандартные операции по
установке и конфигурации.
VMware View - комплекс продуктов, обеспечивающий централизацию
пользовательских рабочих станций в виртуальных машинах на платформе vSphere. Это
позволяет сократить затраты на стандартные ИТ-операции, связанные с развертыванием и
обслуживанием пользовательских десктопов.
VMware Capacity Planner - средство централизованного сбора и анализа данных
об аппаратном и программном обеспечении серверов, а также производительности
оборудования. Эти данные используются авторизованными партнерами VMware для
построения планов консолидации виртуальных машин на платформе VMware ESX Server.
VMware VMmark - продукт, доступный только производителям аппаратного
обеспечения, предназначенный для тестирования производительности VMware ESX Server
на серверных платформах.
Citrix (Xen)
Разработка некоммерческого гипервизора Xen начиналась как исследовательский
проект компьютерной лаборатории Кембриджского университета. Основателем проекта и
его лидером был Иан Пратт (Ian Pratt) сотрудник университета, который создал
впоследствии компанию XenSource, занимающуюся разработкой коммерческих платформ
виртуализации на основе гипервизора Xen, а также поддержкой Open Source сообщества
некоммерческого продукта Xen. Изначально Xen представлял собой самую развитую
платформу, поддерживающую технологию паравиртуализации. Эта технология позволяет
гипервизору в хостовой системе управлять гостевой ОС посредством гипервызовов VMI
(Virtual Machine Interface), что требует модификации ядра гостевой системы. На данный
момент бесплатная версия Xen включена в дистрибутивы нескольких ОС, таких как Red
Hat, Novell SUSE, Debian, Fedora Core, Sun Solaris. В середине августа 2007 года компания
XenSource была поглощена компанией Citrix Systems. Сумма проведенной сделки около
500 миллионов долларов (акциями и денежными средствами) говорит о серьезных
намерениях Citrix в отношении виртуализации. Эксперты полагают, что не исключена и
покупка Citrix компанией Microsoft, учитывая давнее ее сотрудничество с XenSource.
Бесплатный Xen. В настоящее время Open Source версия платформы Xen
применяется в основном в образовательных и исследовательских целях. Некоторые
удачные идеи, реализованные многочисленными разработчиками со всего мира, находят
свое отражение в коммерческих версиях продуктов виртуализации компании Citrix.
Сейчас бесплатные версии Xen включаются в дистрибутивы многих Linux-систем, что
позволяет их пользователям применять виртуальные машины для изоляции программного
обеспечения в гостевых ОС с целью его тестирования и изучения проблем безопасности,
без необходимости установки платформы виртуализации. К тому же многие независимые
разработчики ПО могут распространять его с помощью виртуальных шаблонов, в которых
уже установлена и настроена гостевая система и предлагаемый продукт. Кроме того, Xen
идеально подходит для поддержки старого программного обеспечения в виртуальной
машине. Для более же серьезных целей в производственной среде предприятия
необходимо использовать коммерческие платформы компании Citrix.
Citrix XenApp - предназначен для виртуализации и публикации приложений в
целях оптимизации инфраструктуры доставки сервисов в крупных компаниях. XenApp
имеет огромное количество пользователей по всему миру и во многих компаниях является
ключевым компонентом ИТ-инфраструктуры.
Citrix XenServer - платформа для консолидации серверов предприятий среднего
масштаба, включающая основные возможности для поддержания виртуальной
инфраструктуры. Производитель позиционирует данный продукт как решение Enterprise-
уровня для виртуализации серверов, поддерживающее работу в "облачном" окружении.
Citrix XenDesktop - решение по виртуализации десктопов предприятия,
позволяющее централизованно хранить и доставлять рабочие окружения в виртуальных
машинах пользователям. Продукт поддерживает несколько сценариев доставки
приложений на настольные ПК, тонкие клиенты и мобильные ПК и совместим с
серверными виртуализационными решениями конкурентов.
Microsoft
Для Microsoft все началось, когда в 2003 году она приобрела компанию Connectix,
одну из немногих компаний производящую программное обеспечение для виртуализации
под Windows. Вместе с Connectix, компании Microsoft достался продукт Virtual PC,
конкурировавший тогда с разработками компании VMware в отношении настольных
систем виртуализации. По большому счету, Virtual PC предоставлял тогда такое
количество функций, что и VMware Workstation, и при должном внимании мог бы быть в
настоящее время полноценным конкурентом этой платформы. Однако с того времени,
компания Microsoft выпускала по минорному релизу в год, не уделяя особого внимания
продукту Virtual PC, в то время как VMware стремительно развивала свою систему
виртуализации, превратив ее по-настоящему в профессиональный инструмент. Осознав
свое технологическое отставание в сфере виртуализации серверных платформ, компания
Microsoft выпустила продукт Virtual Server 2005, нацеленный на создание и консолидацию
виртуальных серверов организаций. Однако было уже поздно. Компания VMware уже
захватила лидерство в этом сегменте рынка, предлагая в тот момент две серверные
платформы виртуализации VMware GSX Server и VMware ESX Server, каждая из которых
по многим параметрам превосходила платформу Microsoft. Окончательный удар был
нанесен в 2006 году, когда VMware фактически объявила продукт VMware GSX Server
бесплатным, взявшись за разработку продукта VMware Server на его основе и
сконцентрировав все усилия на продажах мощной корпоративной платформы VMware
ESX Server в составе виртуальной инфраструктуры Virtual Infrastructure 3. У компании
Microsoft был только единственный выход в этой ситуации: в апреле 2006 года она также
объявила о бесплатности продукта Microsoft Virtual Server 2005. Также существовавшие
ранее два издания Standard Edition и Enterprise Edition были объединены в одно – Microsoft
Virtual Server Enterprise Edition. С тех пор Microsoft существенно изменила стратегию в
отношении виртуализации, и летом 2008 года был выпущен финальный релиз платформы
виртуализации Microsoft Hyper-V, интегрированной в ОС Windows Server 2008. Теперь
роль сервера виртуализации доступна всем пользователям новой серверной операционной
системы Microsoft.
Microsoft Virtual Server. Серверная платформа виртуализации Microsoft Virtual
Server может использоваться на сервере под управлением операционной системы
Windows Server 2003 и предназначена для одновременного запуска нескольких
виртуальных машин на одном физическом хосте. Платформа бесплатна и предоставляет
только базовые функции.
Microsoft Virtual PC. Продукт Virtual PC был куплен корпорацией Microsoft
вместе с компанией Connectix и впервые под маркой Microsoft был выпущен как Microsoft
Virtual PC 2004. Приобретая Virtual PC и компанию Connectix, компания Microsoft строила
далеко идущие планы по обеспечению пользователей инструментом для облегчения
миграции на следующую версию операционной системы Windows. Теперь Virtual PC 2007
бесплатен и доступен для поддержки настольных ОС в виртуальных машинах.
Microsoft Hyper-V. Продукт Microsoft позиционируется как основной конкурент
VMware ESX Server в области корпоративных платформ виртуализации. Microsoft Hyper-
V представляет собой решение для виртуализации серверов на базе процессоров с
архитектурой x64 в корпоративных средах. В отличие от продуктов Microsoft Virtual
Server или Virtual PC, Hyper-V обеспечивает виртуализацию на аппаратном уровне, с
использованием технологий виртуализации, встроенных в процессоры. Hyper-V
обеспечивает высокую производительность, практически равную производительности
одной операционной системы, работающей на выделенном сервере. Hyper-V
распространяется двумя способами: как часть Windows Server 2008 или в составе
независимого бесплатного продукта Microsoft Hyper-V Server.
В Windows Server 2008 технология Hyper-V может быть развернута как в полной
установке, так и в режиме Server Core, Hyper-V Server работает только в режиме Core. Это
позволяет в полной мере реализовать все преимущества "тонкой", экономичной и
управляемой платформы виртуализации.
Hyper-V является встроенным компонентом 64-разрядных версий Windows Server
2008 Standard, Windows Server 2008 Enterprise и Windows Server 2008 Datacenter. Эта
технология недоступна в 32-разрядных версиях Windows Server 2008, в Windows Server
2008 Standard без Hyper-V, Windows Server 2008 Enterprise без Hyper-V, Windows Server
2008 Datacenter без Hyper-V, в Windows Web Server 2008 и Windows Server 2008 для
систем на базе Itanium.
Рассмотрим кратко особенности архитектуры Hyper-v. Hyper-v представляет собой
гипервизор, т.е. прослойку между оборудованием и виртуальными машинами уровнем
ниже операционной системы. Эта архитектура была первоначально разработана IBM в
1960-е годы для мэйнфреймов и недавно стала доступной на платформах x86/x64, как
часть ряда решений, включая Windows Server 2008 Hyper-V и Vmware ESX.
Рис. 12. Архитектура виртуализации с гипервизором
Виртуализация на базе гипервизора основана на том, что между оборудованием и
виртуальными машинами появляется прослойка, перехватывающая обращения
операционных систем к процессору, памяти и другим устройствам. При этом доступ к
периферийным устройствам в разных реализациях гипервизоров может быть организован
по-разному. С точки зрения существующих решений для реализации менеджера
виртуальных машин можно выделить два основных вида архитектуры гипервизора:
микроядерную и монолитную.
Монолитный подход размещает гипервизор в едином уровне, который также
включает большинство требуемых компонентов, таких как ядро, драйверы устройств и
стек ввода/вывода. Это подход, используемый такими решениями, как VMware ESX и
традиционные системы мэйнфреймов.
Монолитный подход подразумевает, что все драйвера устройств помещены в
гипервизор. В монолитной модели – гипервизор для доступа к оборудованию использует
собственные драйверы. Гостевые ОС работают на виртуальных машинах поверх
гипервизора. Когда гостевой системе нужен доступ к оборудованию, она должна пройти
через гипервизор и его модель драйверов. Обычно одна из гостевых ОС играет роль
администратора или консоли, в которой запускаются компоненты для предоставления
ресурсов, управления и мониторинга всех гостевых ОС, работающих на сервере.
Рис. 13. Архитектура монолитного гипервизора
Модель монолитного гипервизора обеспечивает прекрасную производительность,
но имеет ряд недостатков, таких как:
o Устойчивость - если в обновленную версию драйвера затесалась ошибка, в результате
сбои начнутся во всей системе, во всех ее виртуальных машинах.
o Проблемы обновления драйверов – при необходимости обновления драйвера какого-
либо устройства (например сетевого адаптера) обновить драйвер возможно только
вместе с выходом новой версии гипервизора, в которую будет интегрирован новый
драйвер для данного устройства.
o Трудности с использованием неподдерживаемого оборудования. Например, вы
собрались использовать оборудование "Сервер" достаточно мощный и надежный, но
при этом в гипервизоре не оказалось нужного драйвера для RAID-контроллера или
сетевого адаптера. Это сделает невозможным использование соответствующего
оборудования, а, значит, и сервера.
Микроядерный подход использует очень тонкий, специализированный гипервизор,
выполняющий лишь основные задачи обеспечения изоляции разделов и управления
памятью. Этот уровень не включает стека ввода/вывода или драйверов устройств. Это
подход, используемый Hyper-V. В этой архитектуре стек виртуализации и драйверы
конкретных устройств расположены в специальном разделе ОС, именуемом родительским
разделом.
В микроядерной реализации можно говорить о "тонком гипервизоре", в этом
случае в нем совсем нет драйверов. Вместо этого драйверы работают в каждом
индивидуальном разделе, чтобы любая гостевая ОС имела возможность получить через
гипервизор доступ к оборудованию. При такой расстановке сил каждая виртуальная
машина занимает совершенно обособленный раздел, что положительно сказывается на
защищенности и надежности. В микроядерной модели гипервизора (в виртуализации
Windows Server 2008 R2 используется именно она) один раздел является родительским
(parent), остальные – дочерними (child). Раздел – это наименьшая изолированная единица,
поддерживаемая гипервизором. Размер гипервизора Hyper-V менее 1,5 Мб , он может
поместиться на одну 3.5-дюймовую дискету.
Рис. 14. Архитектура микроядерного гипервизора
Каждому разделу назначаются конкретные аппаратные ресурсы – долю
процессорного времени, объем памяти, устройства и пр. Родительский раздел создает
дочерние разделы и управляет ими, а также содержит стек виртуализации (virtualization
stack), используемый для управления дочерними разделами. Родительский раздел
создается первым и владеет всеми ресурсами, не принадлежащими гипервизору.
Обладание всеми аппаратными ресурсами означает, что именно корневой (то есть,
родительский) раздел управляет питанием, подключением самонастраивающихся
устройств, ведает вопросами аппаратных сбоев и даже управляет загрузкой гипервизора.
В родительском разделе содержится стек виртуализации – набор программных
компонентов, расположенных поверх гипервизора и совместно с ним обеспечивающих
работу виртуальных машин. Стек виртуализации обменивается данными с гипервизором и
выполняет все функции по виртуализации, не поддерживаемые непосредственно
гипервизором. Большая часть этих функций связана с созданием дочерних разделов и
управлением ими и необходимыми им ресурсами (ЦП, память, устройства).
Преимущество микроядерного подхода, примененного в Windows Server 2008 R2,
по сравнению с монолитным подходом состоит в том, что драйверы, которые должны
располагаться между родительским разделом и физическим сервером, не требуют
внесения никаких изменений в модель драйверов. Иными словами, в системе можно
просто применять существующие драйверы. В Microsoft этот подход избрали, поскольку
необходимость разработки новых драйверов сильно затормозила бы развитие системы.
Что же касается гостевых ОС, они будут работать с эмуляторами или синтетическими
устройствами.
С другой стороны, микроядерная модель может несколько проигрывать
монолитной модели в производительности. Однако в наши дни главным приоритетом
стала безопасность, поэтому для большинства компаний вполне приемлема будет потеря
пары процентов в производительности ради сокращения фронта нападения и повышения
устойчивости.
Все версии Hyper-V имеют один родительский раздел. Этот раздел управляет
функциями Hyper-V. Из родительского раздела запускается консоль Windows Server
Virtualization. Кроме того, родительский раздел используется для запуска виртуальных
машин (VM), поддерживающих потоковую эмуляцию старых аппаратных средств. Такие
VM, построенные на готовых шаблонах, эмулирующих аппаратные средства, являются
аналогами VM, работающих в продуктах с виртуализацией на базе хоста, например Virtual
Server.
Рис. 15. Архитектура Hyper-v
Гостевые VM запускаются из дочерних разделов Hyper-V. Дочерние разделы
поддерживают два типа VM: высокопроизводительные VM на основе архитектуры
VMBus и VM, управляемые системой-хостом. В первую группу входят VM с системами
Windows Server 2003, Windows Vista, Server 2008 и Linux (поддерживающими Xen).
Новую архитектуру VMBus отличает высокопроизводительный конвейер,
функционирующий в оперативной памяти, соединяющий клиентов Virtualization Service
Clients (VSC) на гостевых VM с провайдером Virtual Service Provider (VSP) хоста. VM,
управляемые хостом, запускают платформы, не поддерживающие новую архитектуру
VMBus: Windows NT, Windows 2000 и Linux (без поддержки технологии Xen, например
SUSE Linux Server Enterprise 10).
Microsoft System Center Virtual Machine Manager (SCVMM) - отдельный продукт
семейства System Center для управления виртуальной инфраструктурой, эффективного
использованием ресурсов физических узлов, а также упрощение подготовки и создания
новых гостевых систем для администраторов и пользователей. Продукт обеспечивает
всестороннюю поддержку консолидации физических серверов в виртуальной
инфраструктуре, быстрое и надежное преобразование физических машин в виртуальные,
разумное размещение виртуальных нагрузок на подходящих физических узлах, а также
единую консоль для управления ресурсами и их оптимизации. SCVMM обеспечивает
следующие возможности:
Централизованное управление серверами виртуальных машин в масштабах
предприятия. SCVMM поддерживает управление серверами Microsoft Hyper-V, Microsoft
Virtual Server, VMware ESX и в будущем будет реализована поддержка Xen.
Создание библиотеки шаблонов виртуальных машин. Шаблоны виртуальных
машин представляют собой наборы образов предустановленных операционных систем,
которые могут быть развѐрнуты за считанные минуты.
Мониторинг и размещение виртуальных машин в соответствие с загруженностью
физических серверов.
Миграция (конвертирование) физических серверов в виртуальные машины -
технология P2V. Технология P2V позволяет произвести перенос физического сервера на
виртуальный без остановки работы. Таким образом, появляется возможность онлайнового
резервирования целого сервера, и в случае выхода его из строя, можно в течение минуты
запустить виртуальный сервер и продолжить работу.
Миграция (конвертирование) виртуальных машин других форматов в виртуальные
машины Hyper-V - технология V2V. Данная технология аналогична P2V, но при этом
позволяет переносить виртуальные машины Microsoft Virtual Server или VMware ESX в
Hyper-V.
Управление кластерами Hyper-V.
4 Краткие итоги:
В ходе данной лекции мы ознакомились с технологиями виртуализации,
рассмотрели основные типы виртуализации. Также рассмотрели набор программных
продуктов крупнейших компаний виртуализации
5 Ключевые термины:
Виртуализация – процесс представления набора вычислительных ресурсов или их
логического объединения, который даѐт какие-либо преимущества перед оригинальной
конфигурацией.
Виртуальная машина – программная или аппаратная среда, которая скрывает настоящую
реализацию какого-либо процесса или объекта от его видимого представления.
Полная виртуализация – Виртуализация при которой используются не
модифицированные экземпляры гостевых операционных систем, а для поддержки работы
этих ОС служит общий слой эмуляции их исполнения поверх хостовой ОС, в роли
которой выступает обычная операционная система.
Паравиртуализация – Виртуализация при которой производится модификация ядра
гостевой ОС выполняется таким образом, что в нее включается новый набор API, через
который она может напрямую работать с аппаратурой, не конфликтуя с другими
виртуальными машинами.
Виртуализация на уровне ОС – Вид виртуализации, который подразумевает
использование одного ядра хостовой ОС для создания независимых параллельно
работающих операционных сред.
Виртуализация серверов - это запуск на одном физическом сервере нескольких
виртуальных серверов. Виртуальные машины или сервера представляют собой
приложения, запущенные на хостовой операционной системе, которые эмулируют
физические устройства сервера. На каждой виртуальной машине может быть установлена
операционная система, на которую могут быть установлены приложения и службы.
Виртуализация приложений – вид виртуализации, которая подразумевает применение
модели сильной изоляции прикладных программ с управляемым взаимодействием с ОС,
при которой виртуализируется каждый экземпляр приложений, все его основные
компоненты: файлы (включая системные), реестр, шрифты, INI-файлы, COM-объекты,
службы. Приложение исполняется без процедуры инсталляции в традиционном ее
понимании и может запускаться прямо с внешних носителей.
Виртуализация представлений (рабочих мест) Виртуализация представлений имеет место,
когда сервер предоставляет свои ресурсы клиентам, причем клиентское приложение
выполняется на этом сервере, а клиент получает только представление.
Монолитная архитектура гипервизора – архитектура гипервизора при которой
гипервизор размещается в едином уровне, который также включает большинство
требуемых компонентов, таких как ядро, драйверы устройств и стек ввода/вывода
Микроядерная архитектура гипервизора – Подход при котором используется очень
тонкий, специализированный гипервизор, выполняющий лишь основные задачи
обеспечения изоляции разделов и управления памятью. Этот уровень не включает стека
ввода/вывода или драйверов устройств.
Лекция 11. Основы облачных вычислений
Цель лекции: В предыдущих лекциях мы рассмотрели две ключевых тенденции,
предопределивших появление концепции облачных вычислений. Это консолидация и
виртуализация ИТ-инфраструктуры. Третьим ключевым компонентом или третьим китом
CloudComputing является понятие Softwareas a Service (SaaS). Цель данной лекции –
получить сведения о появлении облачных вычислений, их преимуществах и недостатках.
План лекции:
1. Примеры применения концепции SaaS
2. Инфраструктура как сервис (IaaS)
3. Платформа как сервис (PaaS)
4. Программное обеспечение как сервис (SaaS).
5. Достоинства облачных вычислений
6. Недостатки и проблемы облачных вычислений
7. Препятствия развитию облачных технологий в Казахстане.
8. Распределенные вычисления (gridcomputing)
9. Краткие итоги:
10. Ключевые термины:
Ключевые слова:Lisp, MIT, COM, программное обеспечение, software, AS, service, Web,
PDC, platform, выход, доступ, paas, webdav, cloudstorage, CIFS, KVM, cloudcomputing,
HDF, WAAS, workplace, onlinebackup, android, privatecloud, эффект масштаба.
Содержание лекции:
1Примеры применения концепции SaaS
Рис. 1. Примеры применения концепции SaaS
Первые идеи об использовании вычислений как публичной услуги были
предложены еще в 1960-х известным ученым в области информационных технологий,
изобретателем языка Lisp, профессором MIT и Стэнфордского университета Джоном
Маккарти (JohnMcCarthy). Реализация первого реального проекта приписывается
компании Salesforce.com, основанной в 1999 году. Именно тогда и появилось первое
предложение нового вида b2b продукта "Программное обеспечение как сервис"
("Softwareas a Service", "SaaS"). Определенный успех Salesforce в этой области возбудил
интерес у гигантов ИТ индустрии, которые спешно сообщили о своих исследованиях в
области облачных технологий. И вот уже первое бизнес-решение под названием
"AmazonWebServices" было запущено в 2005 году компанией Amazon.com, которая со
времен кризиса доткомов активно занималась модернизацией своих датацентров.
Следующим свою технологию постепенно ввела Google, начав с 2006 года b2b
предложение SaaS сервисов под названием "GoogleApps". И, наконец, свое предложение
анонсировала компания Microsoft, презентовав ее на конференции PDC 2008 под
названием "AzureServicesPlatform".
Рис. 2. SaaS сервисы Google
Сам факт высокой заинтересованности крупнейших игроков рынка ИТ
демонстрирует определенный статус облачных вычислений как тренда 2009-2010 годов.
Кроме того, с релизом MicrosoftAzureServicePlatform множество экспертов связывает
новый виток развития веб-технологий и выход всей сферы облачных вычислений на
новый уровень.
Напомним, что под облачными вычислениями мы понимаем программно-
аппаратное обеспечение, доступное пользователю через Интернет или локальную сеть в
виде сервиса, позволяющего использовать удобный интерфейс для удаленного доступа к
выделенным ресурсам (вычислительным ресурсам, программам и данным).
На данный момент большинство облачных инфраструктур развернуто на серверах
датацентров, используя технологии виртуализации, что фактически позволяет любому
пользовательскому приложению использовать вычислительные мощности, совершенно не
задумываясь о технологических аспектах. Тогда можно понимать "облако" как единый
доступ к вычислениям со стороны пользователя.
Виды облачных вычислений
С понятием облачных вычислений часто связывают такие сервис-предоставляющие
(Everythingas a service) технологии, как:
"Инфраструктуракаксервис" ("Infrastructure as a Service" или "IaaS")
"Платформакаксервис" ("Platform as a Service", "PaaS")
"Программное обеспечение как сервис" ("Softwareas a Service" или "SaaS").
Рассмотрим каждую из этих технологий подробнее.
2 Инфраструктура как сервис (IaaS)
IaaS - это предоставление компьютерной инфраструктуры как услуги на основе
концепции облачных вычислений.
IaaS состоит из трех основных компонентов:
Аппаратные средства (серверы, системы хранения данных, клиентские системы,
сетевое оборудование)
Операционные системы и системное ПО (средства виртуализации, автоматизации,
основные средства управления ресурсами)
Связующее ПО (например, для управления системами)
Рис. 3. Компоненты облачной инфраструктуры
IaaS основана на технологии виртуализации, позволяющей пользователю
оборудования делить его на части, которые соответствуют текущим потребностям
бизнеса, тем самым увеличивая эффективность использования имеющихся
вычислительных мощностей. Пользователь (компания или разработчик ПО) должен будет
оплачивать всего лишь реально необходимые ему для работы серверное время, дисковое
пространство, сетевую пропускную способность и другие ресурсы. Кроме того, IaaS
предоставляет в распоряжение клиента весь набор функций управления в одной
интегрированной платформе.
IaaS избавляет предприятия от необходимости поддержки сложных инфраструктур
центров обработки данных, клиентских и сетевых инфраструктур, а также позволяет
уменьшить связанные с этим капитальные затраты и текущие расходы. Кроме того, можно
получить дополнительную экономию, при предоставлении услуги в рамках
инфраструктуры совместного использования.
Первопроходцами в IaaS считается компания Amazon, которые на сегодняшний
день предлагают два основных IaaS-продукта: EC2 ( ElasticComputeCloud ) и S3 (
SimpleStorageService ). EC2 представляет собой Xen-хостинг со статическими VPS-
характеристиками, которые не расширяются на лету (хотя многие подобные сервисы уже
предоставляют т.н. autoscaling). Хранилище S3 имеет интерфейс WebDAV и поддерживает
работу со многими известными языками программирования.
Среди других инфра-сервисных компаний можно отметить:
GoGrid имеет очень удобный интерфейс для управления VPS, а также cloudstorage с
поддержкой протоколов SCP, FTP, SAMBA/CIFS, RSYNC, причем размер хранилища
масштабируется на лету. В скором времени разработчики обещают добавить управление
посредством API.
Enomaly представляет собой решение для развертывания и управления
виртуальными приложениями в облаке, при этом управление услугами осуществляется
через браузер. Приятным дополнением является автоматическое масштабирование
виртуальных машин под текущую нагрузку, а также автобалансировка нагрузки. Среди
поддерживаемых виртуальных архитектур поддерживаются Linux, Windows, Solaris и BSD
Guests. Для виртуализации применяют не только Xen, но и KVM, а также VMware.
Eucalyptus представляет собой программный комплекс с открытым кодом для
реализации cloudcomputing на кластерных системах. В настоящее время интерфейс
совместим с Amazon EC2, но заявлена поддержка и других.
3 Платформа как сервис (PaaS)
PaaS - это предоставление интегрированной платформы для разработки,
тестирования, развертывания и поддержки веб-приложений как услуги.
Для разворачивания веб-приложений разработчику не нужно приобретать оборудование и
программное обеспечение, нет необходимости организовывать их поддержку. Доступ для
клиента может быть организован на условиях аренды.
Такой подход имеет следующие достоинства:
o масштабируемость;
o отказоустойчивость;
o виртуализация;
o безопасность.
Масштабируемость PaaS предполагает автоматическое выделение и освобождение
необходимых ресурсов в зависимости от количества обслуживаемых приложением
пользователей.
PaaS как интегрированная платформа для разработки, тестирования,
разворачивания и поддержки веб-приложений позволит весь перечень операций по
разработке, тестированию и разворачиванию веб-приложений выполнять в одной
интегрированной среде, исключая тем самым затраты на поддержку отдельных сред для
отдельных этапов.
Способность создавать исходный код и предоставлять его в общий доступ внутри
команды разработки значительно повышает производительность по созданию приложений
на основе PaaS.
Самым известным примером такой платформы является AppEngine от Google,
которая предлагает хостинг для веб-приложений с возможностью покупать
дополнительные вычислительные ресурсы (например, для тестирования высоких
нагрузок). Для запуска приложений GoogleAppEngine на виртуальных кластерных
системах была разработана платформа AppScale, не имеющая, тем не менее, никакого
отношения к Google.
В системах веб-поиска и контекстной рекламы компании Yahoo используется
платформа Hadoop, ориентированная на передачу больших объемов данных между
сетевыми серверами. На базе Hadoop построены HBase (аналог базы данных
GoogleBigTable), а также HDFS (HadoopDistributedFileSystem, аналог GoogleFileSystem).
Еще одним ярким представителем PaaS являются продукты компании Mosso:
o CloudSites — веб-хостинг (Linux, Windows, Mail) для нагрузочных веб-проектов с
возможностью расширять базовые бесплатные — возможности за дополнительную
плату (трафик, хранилище данных, вычислительная мощность).
o CloudFiles — файловый cloud-хостинг с ежемесячной погигабайтной оплатой за
объем хранимых файлов. Управление осуществляется через браузер, либо
посредством API (PHP, Python, Java, .NET, Ruby).
o CloudServers — почасовая аренда серверов (RAM в час), с возможностью выбора
серверной ОС. Можно изменять характеристики сервера, но не в режиме реального
времени. В скором времени разработчики обещают сделать API для управления
серверами.
Ну а в центре всей облачной инфраструктуры Microsoft — операционная система
WindowsAzure. WindowsAzure создает единую среду, включающую облачные аналоги
серверных продуктов Microsoft (реляционная база данных SQL Azure, являющаяся
аналогом SQL Server, а также ExchangeOnline, SharePointOnline и MicrosoftDynamics CRM
Online) и инструменты разработки (.NET Framework и VisualStudio, оснащенная в версии
2010 года набором WindowsAzureTools). Так, например, программист, создающий сайт в
VisualStudio 2010, может не выходя из приложения разместить свой сайт в WindowsAzure.
4 Программное обеспечение как сервис (SaaS).
Рис. 4. вершина айсберга облачных технологий представлена сервисами SaaS
SaaS – модель развертывания приложения, которая подразумевает предоставление
приложения конечному пользователю как услуги по требованию (ondemand). Доступ к
такому приложению осуществляется посредством сети, а чаще всего посредством
Интернет-браузера. В данном случае, основное преимущество модели SaaS для клиента
состоит в отсутствии затрат, связанных с установкой, обновлением и поддержкой
работоспособности оборудования и программного обеспечения, работающего на нѐм.
Целевая аудитория - конечные потребители.
В модели SaaS:
o приложение приспособлено для удаленного использования;
o одним приложением могут пользоваться несколько клиентов;
o оплата за услугу взимается либо как ежемесячная абонентская плата, либо на
основе суммарного объема транзакций;
o поддержка приложения входит уже в состав оплаты;
o модернизация приложения может производиться обслуживающим персоналом
плавно и прозрачно для клиентов.
С точки зрения разработчиков программного обеспечения, модель SaaS позволит
эффективно бороться с нелицензионным использованием программного обеспечения,
благодаря тому, что клиент не может хранить, копировать и устанавливать программное
обеспечение.
По-сути, программное обеспечение в рамках SaaS можно рассматривать в качестве
более удобной и выгодной альтернативы внутренним информационным системам.
Развитием логики SaaS является концепция WaaS (Workplaceas a Service - рабочее
место как услуга). То есть клиент получает в свое распоряжение полностью оснащенное
всем необходимым для работы ПО виртуальное рабочее место.
По недавно опубликованным данным SoftCloud спросом пользуются следующие
SaaS приложения (в порядке убывания популярности):
o Почта
o Коммуникации (VoIP)
o Антиспам и антивирус
o Helpdesk
o Управление проектами
o Дистанционное обучение
o CRM
o Хранение и резервирование данных
Рис. 5. Сервисы SaaS имеют наибольшую потребительскую базу
Весьма схожими являются продукты MobileMe (Apple), Azure (Microsoft) и
LotusLive (IBM). Суть данных сервисов в том, что они предоставляют пользователям
доступ к хранению своих данных (контакты, почта, файлы), а также для совместной
работы нескольких пользователей с документами.
Вопросами хранения пользовательских данных в Интернет озадачена и компания
Google, которая разрабатывает проект GDrive, который будет представлять собой
виртуальный жесткий диск, который будет определяться ОС как локальный. Также
заявлено, что можно будет хранить неограниченное количество данных, что звучит весьма
заманчиво.
Хранение файлов без ограничений также предлагает MediaFire.com. Имеется как
полностью бесплатное использование (правда, с некоторыми ограничениями, например,
на максимальный размер загружаемого файла), так и покупка премиум-аккаунта,
расширяющего возможности (например, шифрование файлов, получение прямых ссылок
на скачивание).
Еще одним интересным представителем вида SaaS является продукт iCloud,
представляющий собой операционную систему, работать с которой можно
непосредственно через браузер. Интерфейс операционной системы выполнен в стиле
WindowsVista/XP. На сегодняшний день проект находится в стадии беты и в самой ОС
реализован минимум приложений.
Также к SaaS относятся услуги Onlinebackup, или, проще говоря — резервному
копированию данных. Пользователь просто платит абонентскую плату, а сервисы сами
автоматически в определенное время шифруют данные с компьютера или другого
устройства и отправляют их на удаленный сервер, тем самым данные могут быть
доступны из любой точки земного шара. Данную услугу сейчас предоставляют множество
компаний, в том числе, такие как Nero и Symantec.
Интересное применение cloud-технологиям нашли и разработчики компьютерных
игр: теперь современным компьютерам и игровым приставкам не будут нужны мощные
графические адаптеры (видеокарты), ведь вся обработка данных и рендеринг будут
производиться cloud-серверами, а игроки будут получать уже обработанное видео. Одним
из первых заявил о себе сервис OnLive, и совсем недавно об этом заговорила и компания
Sony, которая собирается внедрить данную идею в Playstation 3.
Согласно SaaS-концепции пользователь платит не единовременно, покупая
продукт, а как бы берет его в аренду. Причем, использует ровно те функции, которые ему
нужны. Например, раз в год вам нужна некая программа. И чаще вы ее использовать не
собираетесь. Так зачем же покупать продукт, который будет у вас лежать без дела? И
зачем тратить на него место (в квартире, если это коробка с диском, на винчестере, если
это файл)?
Конкуренция в облачной сфере привела к появлению бесплатных сервисов. Именно
по такому пути пошли два конкурента — Microsoft и Google. Обе компании выпустили
наборы сервисов, позволяющих работать с документами. У Google это GoogleDocs, у
Microsoft — OfficeWebApps.
При этом, оба сервиса тесно взаимосвязаны с почтой (Gmail в первом случае и
Hotmail во втором) и файловыми хранилищами. Таким образом, пользователя как бы
переводят из привычной ему оффлайн-среды в онлайн. Важно, что и Google, и Microsoft
интегрируют поддержку своих онлайн-сервисов во все программные среды — как
настольные, так и мобильные (напомним, что Google создала ОС Android, а Microsoft —
WindowsPhone 7).
Аналогичную концепцию (но с несколько другими акцентами) продвигает и
главный конкурент обеих компаний — Apple. Речь идет об очень любопытном сервисе
под названием MobileMe. Сервис включает в себя почтовый клиент, календарь, адресную
книгу, файловое хранилище, альбом фотографий и инструмент для обнаружения
утерянного iPhone. За возможность пользоваться всем этим Apple берет примерно 65 евро
(или 100 долларов) в год. При этом Apple обеспечивает такой уровень взаимодействия
своего набора интернет-сервисов и приложений на компьютере (под управлением Mac OS
X), телефоне, плеере и iPad, что необходимость в использовании браузера пропадает. Вы
пользуетесь привычными программами на своем Mac, iPhone и iPad, однако, все данные
хранятся не на них, а в облаке, что позволяет забыть о необходимости синхронизации, а
также — о их доступности.
Если Apple интегрирует веб-сервисы в привычные приложения операционной
системы, то Google заходит с противоположной стороны: разрабатываемая интернет-
гигантом операционная система Chrome OS представляет собой, фактически, один
браузер, через который пользователь взаимодействует с разветвленной сетью веб-
сервисов. ОС ориентирована на нетбуки, отмечаются очень низкие системные требования
и отсутствие необходимости самостоятельной установки программ (так как все
программы работают непосредственно в вебе). То есть Google предоставляет
преимущества облачной концепции, обычно декламируемые при работе с
корпоративными клиентами, обычным пользователям. Вместе с тем, очевидна
невозможность использования таких нетбуков в странах с недостаточно широким
проникновением широкополосного интернета. Потому что без интернета нетбук на базе
Chrome OS будет совершенно бесполезен.
Все три типа облачных сервисов взаимосвязаны, и представляют вложенную
структуру.
Рис. 6. Взаимосвязь облачных сервисов
Помимо различных способов предоставления сервисов различают несколько
вариантов развѐртывания облачных систем:
Частное облако (privatecloud) - используется для предоставления сервисов внутри
одной компании, которая является одновременно и заказчиком и поставщиком услуг. Это
вариант реализации "облачной концепции", когда компания создает ее для себя самой, в
рамках организации. В первую очередь реализация privatecloud снимает один из важных
вопросов, который непременно возникает у заказчиков при ознакомлении с этой
концепцией – вопрос о защите данных с точки зрения информационной безопасности.
Поскольку "облако" ограничено рамками самой компании, этот вопрос решается
стандартными существующими методами. Для privatecloud характерно снижение
стоимости оборудования за счет использования простаивающих или неэффективно
используемых ресурсов. А также, снижение затрат на закупки оборудования за счет
сокращения логистики (не думаем, какие сервера закупать, в каких конфигурациях, какие
производительные мощности, сколько места каждый раз резервировать и т.д.
В сущности, мощность наращивается пропорционально растущей в целом нагрузке,
не в зависимости от каждой возникающей задачи – а, так сказать, в среднем. И становится
легче и планировать, и закупать и реализовывать — запускать новые задачи в
производство.
Публичное облако - используется облачными провайдерами для предоставления
сервисов внешним заказчикам.
Смешанное (гибридное) облако - совместное использование двух
вышеперечисленных моделей развѐртывания
Вообще одна из ключевых идей Cloud заключается как раз в том, чтобы с
технологической точки зрения разницы между внутренними и внешними облаками не
было и заказчик мог гибко перемещать свои задания между собственной и арендуемой
ИТ-инфраструктурой, не задумываясь, где конкретно они выполняются.
Рис. 7. Взаимосвязь облаков разных типов
Таким образом, эти технологии при совместном использовании позволяют
пользователям облачных вычислений воспользоваться вычислительными мощностями и
хранилищами данных, которые посредством определенных технологий виртуализации и
высокого уровня абстракции предоставляются им как услуги.
5Достоинства облачных вычислений
Рассмотрим основные преимущества и достоинства технологий облачных
вычислений:
Доступность и отказоустойчивость – всем пользователям, из любой точки где
есть Интернет, с любого компьютера, где есть браузер.
Клиентские компьютеры. Пользователям нет необходимости покупать дорогие
компьютеры, с большим объемом памяти и дисков, чтобы использовать программы через
веб-интерфейс. Также нет необходимости в СD и DVD приводах, так как вся информация
и программы остаются в "облаке". Пользователи могут перейти с обычных компьютеров и
ноутбуков на более компактные и удобные нетбуки.
Доступ к документам. Если документы хранятся в "облаке", они могут быть
доступны пользователям в любое время и в любом месте. Больше нет такого понятия как
забытые файлы: если есть Интернет - они всегда рядом.
Устойчивость к потере данных или краже оборудования. Если данные хранятся в
"облаке", их копии автоматически распределяются по нескольким серверам, возможно
находящимся на разных континентах. При краже или поломке персональных компьютеров
пользователь не теряет ценную информацию, которую он к тому же может получить с
любого другого компьютера.
Надежность. Дата центры управляются профессиональными специалистами,
обеспечивающими круглосуточную поддержку функционирования виртуальных машин.
И даже если физическая машина "рухнет", благодаря распределению приложения на
множество копий оно все равно продолжит свою работу. Это создает определенный
высокий уровень надежности и отказоустойчивости функционирования системы.
Экономичность и эффективность - плати столько, сколько используешь, позволь
себе дорогие, мощные компьютеры и программы. "Облако" позволяет учитывать и
оплачивать только фактически потребленные ресурсы строго по факту их использования;
Аренда ресурсов. Обычные сервера средней компании загружены на 10-15%. В
одни периоды времени есть потребность в дополнительных вычислительных ресурсах, в
других эти дорогостоящие ресурсы простаивают. Используя необходимое количество
вычислительных ресурсов в "облаке" в любой момент времени, компании сокращают
затраты на оборудование и его обслуживание. Это дает возможность заказчику отказаться
от закупок дорогостоящих ИТ-активов в пользу их даже не аренды, а операционного
потребления по мере надобности, при сокращении затрат на обслуживание своих систем и
получении от поставщика гарантий уровня сервиса.
Аренда ПО. Вместо приобретения пакетов программ для каждого локального
пользователя, компании покупают нужные программы в "облаке". Данные программы
будут использоваться только теми пользователями, которым эти программы необходимы
в работе. Более того, стоимость программ, ориентированных на доступ через Интернет,
значительно ниже, чем их аналогов для персональных компьютеров. Если программы
используются не часто, то их можно просто арендовать с почасовой оплатой. Затраты на
обновление программ и поддержку в работоспособном состоянии на всех рабочих местах
вовсе сведены к нулю.
Для поставщика ИТ-услуг экономический смысл облака состоит в эффекте
масштаба (обслуживать большой однородный центр обработки дешевле, чем множество
маленьких разнородных) и сглаживания нагрузки (когда потребителей много,
маловероятно, что пиковые мощности понадобятся всем им одновременно).
Разработчики ПО тоже получают выгоду от перехода в облака: теперь им стало
проще, быстрее и дешевле разрабатывать, тестировать под нагрузкой и предлагать
клиентам свои решения – это можно делать прямо в облаке с минимальными затратами.
Кроме того, Облачные вычисления - это эффективный инструмент повышения прибыли и
расширения каналов продаж для независимых производителей программного обеспечения
в форме SaaS. Этот подход позволяет организовать динамическое предоставление услуг,
когда пользователи могут производить оплату по факту и регулировать объем своих
ресурсов в зависимости от реальных потребностей без долгосрочных обязательств.
Простота - не требуется покупка и настройка программ и оборудования, их
обновление.
Обслуживание. Так как физических серверов с внедрением CloudComputing
становится меньше, их становится легче и быстрее обслуживать. Что касается
программного обеспечения, то последнее установлено, настроено и обновляется в
"облаке". В любое время, когда пользователь запускает удаленную программу, он может
быть уверен, что эта программа имеет последнюю версию - без необходимости что-то
переустанавливать или платить за обновления.
Совместная работа. При работе с документами в "облаке" нет необходимости
пересылать друг другу их версии или последовательно редактировать их. Теперь
пользователи могут быть уверенными, что перед ними последняя версия документа и
любое изменение, внесенное одним пользователем, мгновенно отражается у другого.
Открытые интерфейсы. "Облако" как правило, имеет стандартные открытые API
(интерфейсы прикладного программирования) для связи с существующими
приложениями и разработки новых – специально для облачной архитектуры.
Гибкость и масштабируемость - неограниченность вычислительных ресурсов
(память, процессор, диски). "Облако" масштабируемо и эластично – ресурсы выделяются
и освобождаются по мере надобности;
Производительные вычисления. По сравнению с персональным компьютером
вычислительная мощь, доступная пользователю "облачных" компьютеров, практически
ограничена лишь размером "облака", то есть общим количеством удаленных серверов.
Пользователи могут запускать более сложные задачи, с большим количеством
необходимой памяти, места для хранения данных, тогда, когда это необходимо. Иными
словами, пользователи могут при желании легко и дешево поработать с
суперкомпьютером без каких-либо фактических приобретений. Возможность запуска
множества копий приложения на многих виртуальных машинах представляет
преимущества масштабируемости: количество экземпляров приложения способно
практически мгновенно увеличиваться по требованию, в зависимости от нагрузок.
Хранение данных. По сравнению с доступным местом для хранения информации на
персональных компьютерах объем хранилища в "облаке" может гибко и автоматически
подстраиваться под нужды пользователя. При хранении информации в "облаке"
пользователи могут забыть об ограничениях, накладываемых обычными дисками, -
"облачные" размеры исчисляются миллиардами гигабайт доступного места.
Инструмент для стартапов. В глазах таких потребителей сервиса облачных
вычислений как компании, начинающие свой бизнес основным преимуществом данной
технологии является, отсутствие необходимости закупать все соответствующее
оборудование и ПО, а затем поддерживать их работу.
6Недостатки и проблемы облачных вычислений
Есть ли минусы у "облачных" вычислений? Почему "облачные" технологии в
России только набирают обороты, а директора некоторых крупных компаний не спешат
переводить ИТ-инфраструктуру своих предприятий в "облака"? Итак, отметим основные
недостатки и трудности использования cloudcomputing:
Постоянное соединение с сетью.CloudComputing почти всегда требует
соединения с сетью (Интернет). Если нет доступа в сеть - нет работы, программ,
документов. Многие "облачные" программы требуют хорошего Интернет-соединения с
большой пропускной способностью. Соответственно программы могут работать
медленнее чем на локальном компьютере. По мнению ведущих российских ИТ-компаний,
основным препятствием широкому развитию облаков, является отсутствие
широкополосного доступа в Интернет (ШПД) – прежде всего в регионах.
Безопасность.
Безопасность данных теоретически может быть под угрозой. Не все данные можно
доверить стороннему провайдеру в интернете, тем более, не только для хранения, но ещѐ
и для обработки. Все зависит от того, кто предоставляет "облачные" услуги. Если этот
кто-то надежно шифрует Ваши данные, постоянно делает их резервные копии, уже не
один год работает на рынке подобных услуг и имеет хорошую репутацию, то угрозы
безопасности данных может никогда не случиться. У пользователя "облачных" бизнес
приложений могут также возникнуть и юридические проблемы, например связанные с
выполнением требований защиты персональных данных.
Государство, на территории которого размещен датацентр, может получить доступ
к любой информации, которая в нем хранится. Например, по законам США, где находится
самое большое количество датацентров, в этом случае компания-провайдер даже не имеет
права разглашать факт передачи конфиденциальной информации кому-либо, кроме своих
адвокатов.
Эта проблема является, наверное, одной из самых существенных в вопросе вывода
конфиденциальной информации в облако. Путей ее решения может быть несколько. Во-
первых, можно шифровать всю информацию, помещаемую на облако. Во-вторых, можно
просто ее туда не помещать. Однако, во всяком случае, у компаний, пользующихся
облачными вычислениями, это должно быть определенным пунктом в списке вопросов
информационной безопасности. Кроме того, сами провайдеры должны улучшать свои
технологии, предоставляя некоторые услуги по шифрованию.
Функциональность "облачных" приложений. Не все программы или их свойства
доступны удаленно. Если сравнивать программы для локального использования и их
"облачныe"аналоги, последние пока проигрывают в функциональности. Например,
таблицы GoogleDocs или приложения Officewebapplication имеют гораздо меньше
функций и возможностей, чем MicrosoftExcel.
Зависимость от "облачного" провайдера.
Всегда остаѐтся риск, что провайдер онлайновых сервисов однажды не сделает
резервную копию данных – как раз перед крушением сервера. Риск этот, впрочем, вряд ли
превышает опасность того, что пользователь сам упустит свои данные – потеряв или
разбив мобильник или ноутбук, не создав на домашнем ПК резервную копию. Кроме того,
привязавшись к той или иной услуге, мы в какой-то степени также ограничиваем свою
свободу – свободу перехода на старую версию софта, выбора способов обработки
информации и так далее.
Некоторые эксперты, например Г. Маклеод (HughMacleod) в статье "Самый
хорошо охраняемый секрет Облаков", утверждают, что облачные вычисления ведут к
созданию огромной, невиданной ранее монополии. Возможно ли это? Конечно, на рынке
облачных вычислений для помещения в облако какой-либо информации, в отношении
которой существуют правила информационной безопасности, компании будут скорее
использовать таких вендоров, чье имя "на слуху" и кому они доверяют. Таким образом,
существует определенная опасность того, что все вычисления и данные будут
агрегированы в руках одной сверхмонополии. Однако на данный момент на рынке уже
существуют несколько компаний с примерно одинаковым высоким уровнем доверия со
стороны клиентов (Microsoft, Google, Amazon), и нет никаких фактов, которые бы
указывали на возможность доминирования одной компанией всех остальных. Поэтому в
ближайшем будущем появление глобальной сверхкомпании, которая будет
координировать и контролировать все вычисления в мире, очень маловероятно, хотя одна
лишь возможность такого события отпугивает некоторых клиентов.
7Препятствия развитию облачных технологий в Казахстане.
Недостаточное доверие потребителей облачных услуг.Нередко бизнес относится к
облачным услугам несколько настороженно. "Причин же недоверчивого отношения
малого и среднего бизнеса к облачным дата-центрам может быть несколько. Скорее всего,
это боязнь лишиться контроля над ИТ-ресурсами, опасения насчет гарантии сохранности
и защиты переданной информации и представление дата-центра лишь как площадки для
размещения оборудования" (Дмитрий Петров "Встречный план").
Каналы связи в большинстве регионов страны характеризуются отсутствием SLA
по качеству предоставляемого сервиса (QoS), что особенно относится к последним милям.
Что толку от того, что ваш основной трафик идет по магистрали с гарантированным QoS
(со своими ограничениями), если конечные устройства подключены к ней через местного
оператора, даже не слышавшего о такой проблеме. При этом стоимость связи для крупных
организаций может составлять до 50% от ИТ-бюджета. Соответственно переход к
облачной модели существенно влияет на сетевую топологию ваших потоков данных и,
скорее всего, QoS будет хуже чем во внутренней сети. Или чтобы получить качество
обслуживания на приемлемом уровне придется заплатить столько денег, что вся экономия
от централизации инфраструктуры или приложений будет перечеркнута ростом
коммуникационных затрат.
Безопасность. Проблема безопасности является серьезным сдерживающим
фактором. Нередко Службы Безопасности создают довольно высокий заградительный
барьер для идеи вынести какие-либо данные за периметр своей сети. Часто без какой-либо
вменяемой аргументации.
Отсутствие надежных ЦОДов. По поводу центров обработки данных (ЦОД)
достаточно вспомнить, что в стране, кажется, еще нет ни одного Tier III ЦОДа по
классификации UptimeInstitute. Совершенно понятно, что их появление – это вопрос
времени. Из-за кризиса большинство строек было заморожено или отложено. Тем не
менее, пока достаточной инфраструктуры в стране просто нет.
8Распределенные вычисления (gridcomputing)
Отметим в заключение еще одну технологию, которая с одной стороны также
оказала влияние на появление концепции облачных вычислений, а с другой стороны
имеет ряд существенных отличий. Речь идет о коллективных, или распределѐнных
вычислениях (gridcomputing) – когда большая ресурсоѐмкая вычислительная задача
распределяется для выполнения между множеством компьютеров, объединѐнных в
мощный вычислительный кластер сетью в общем случае или интернетом в частности.
Установление общего протокола в сети Интернет непосредственно привело к
быстрому росту онлайн пользователей. Это привело к необходимости выполнять больше
изменений в текущих протоколах и к созданию новых. На текущий момент обширно
используется протокол Ipv4 (четвѐртая версия IP протокола), но ограничение адресного
пространства, заданного ipv4, неизбежно приведет к использованию протокола ipv6. В
течение долгого времени усовершенствовалось аппаратное и программное обеспечение, в
результате чего удалось построить общий интерфейс в Интернет. Использование веб-
браузеров привело к использованию модели "Облака", взамен традиционной модели
информационного центра.
В начале 1990-ых, ИэнФостер и Карл Кесселмен представили их понятие Грид
вычислений. Они использовали аналогию с электрической сетью, где пользователи могли
подключаться и использовать услугу. Грид вычисления во многом опираются на методах,
используемых в кластерных вычислительных моделях, где многократные независимые
группы, действуют, как сеть просто потому, что они не все расположены в пределах той
же области.
В частности, развитие Грид технологий позволило создать так называемые GRID-
сети, в которых группа участников могла общими усилиями решать сложные задачи. Так,
сотрудники IBM создали интернациональную команду grid-вычислений, позволившую
существенно продвинуться в области борьбы с вирусом иммунного дефицита. Целые
команды из разных стран присоединяли свои вычислительные мощности и помогли
"обсчитать" и смоделировать наиболее перспективные формы для создания лекарства от
СПИДа..."
На практике границы между этими (grid и cloud) типами вычислений достаточно
размыты. Сегодня с успехом можно встретить "облачные" системы на базе модели
распределѐнных вычислений, и наоборот. Однако будущее облачных вычислений всѐ же
значительно масштабнее распределѐнных систем, к тому же не каждый "облачный сервис"
требует больших вычислительных мощностей с единой управляющей инфраструктурой
или централизованным пунктом обработки платежей.
9Краткие итоги:
Мы рассмотрели основные понятия облачных вычислений, примеры, особенности,
основные разновидности облачных технологий, их достоинства и недостатки.
10Ключевые термины:
Облачные вычисления – технология обработки данных, в которой компьютерные ресурсы
и мощности предоставляются пользователю как Интернет-сервис.
Инфраструктура как сервис - это предоставление компьютерной инфраструктуры как
услуги на основе концепции облачных вычислений.
Платформа как сервис - это предоставление интегрированной платформы для разработки,
тестирования, развертывания и поддержки веб-приложений как услуги.
Программное обеспечение как сервис - модель развертывания приложения, которая
подразумевает предоставление приложения конечному пользователю как услуги по
требованию. Доступ к такому приложению осуществляется посредством сети, а чаще
всего посредством Интернет-браузера.
Частное облако - это вариант локальной реализации "облачной концепции", когда
компания создает ее для себя самой, в рамках одной организации.
Публичное облако – используется облачными провайдерами для предоставления сервисов
внешним заказчикам.
Распределенные вычисления – Технология когда большая ресурсоѐмкая вычислительная
задача распределяется для выполнения между множеством компьютеров, объединѐнных в
мощный вычислительный кластер сетью или интернетом.
Лекция 12. Веб-службы в Облаке
Цель лекции: Рассмотрим некоторые из веб-служб, предоставляемые концепцией
облачных вычислений. Инфраструктура является услугой в концепции облачных
вычислений. Есть много разновидностей управления инфраструктурой в облачной
окружающей среде. "Инфраструктура как Сервис" (Infrastructure-as-a-Service, IaaS) в
основном предоставляется по запросу на базе современных вычислительных технологий и
высокоскоростных сетей. "Коммуникаций как Сервис" (Communication-as-a-Service, CaaS).
"Программное обеспечение как Сервис" (Software-as-a-Service, SaaS), такие как
Amazon.com с их эластичной платформой облака, характеристики, преимущества, и
архитектурный уровень обслуживания. Исследуем ключевые особенности использования
внешних источников/ресурсов (outsourcing), доступные как "Платформы как Сервис"
(Platforms-as-a-Service, PaaS). Целью данной лекции является обзор веб-служб,
предоставляемые концепцией облачных вычислений. Особое внимание уделяется типу
"Инфраструктура как Сервис".
План лекции:
1 Инфраструктура как Сервис (IaaS)
Amazon
2 Платформа как Сервис (PaaS)
Microsoft Azure
3 Программное обеспечение как Сервис (SaaS)
4 Коммуникация как Сервис (CaaS)
5 Мониторинг как Сервис (MaaS)
6 Краткие итоги:
7 Ключевые термины:
Ключевые слова: инфраструктура, затраты, доступ, AMIS, paas, premise, внутренние
параметры, CTP, sod, распространение программного обеспечения, Веб-аналитика,
критерий существования, caas, failover, maas, контроль безопасности, SOC,
инфраструктура безопасности, бизнес-модель, веб-приложение, Интернет.
Содержание лекции:
Поскольку технологии мигрируют от традиционной локальной модели в новую
модель облака, сервисные предложения развиваются практически ежедневно.
Предложения веб-служб часто имеют много общих характеристик. Часто от клиента
требуются лишь минимальные затраты для получения услуги. Масштабируемость
предполагается для каждого из типов предложений, но это не всегда необходимо. Многие
из "облачных" вендоров еще работают над использованием масштабируемости, потому
что их пользователи пока не нуждаются в данном виде услуг. Наконец, устройство и
независимость местоположения позволяет пользователям получить доступ к системам
независимо от того, где они находятся или какие устройства используют.
1 Инфраструктура как Сервис (IaaS)
Инфраструктура как Сервис (Infrastructure-as-a-Service, IaaS) - предоставление
компьютерной инфраструктуры (как правило, это платформы виртуализации) как сервиса.
IaaS существено усиливает технологию, услуги и вложения в центры обработки данных,
чтобы предоставить это как услугу клиентам. В отличие от традиционного аутсорсинга,
который требует должного усердия, бесконечных переговоров и сложных, длинных
контрактов, IaaS сосредоточенна вокруг модели предоставления услуг, которая
обеспечивает предопределенную, стандартизированную инфраструктуру, определенно
оптимизированную под потребности клиента. Упрощенные предложения работы и выбор
уровня сервисного обслуживания облегчает клиенту выбор решения с определенным
набором основных эксплуатационных характеристик. Как правило, поставщики
предоставляют компоненты следующих уровней:
Аппаратное обеспечение (как правило, Грид с массивной горизонтальной
масштабируемостью);
Компьютерная сеть (включая маршрутизаторы, брандмауэры, балансировку
нагрузки и т.д.);
Подключение Интернет;
Платформа виртуализации для того, чтобы запускать виртуальные машины;
Соглашения сервисного обслуживания;
Инструменты учета вычислений.
Вместо покупки пространства в центрах обработки данных, серверов,
программного обеспечения, сетевого оборудования, и т.д., клиенты IaaS по существу
арендуют ресурсы, которые находятся на стороне обслуживающих поставщиков услуг
IaaS. Оплата за предоставление услуг обычно производится ежемесячно. Клиент платит
только за потребленные ресурсы. Основные преимущества данного типа услуг включает:
Свободный доступ к предварительно сконфигурированной окружающей среде;
Использование инфраструктуры последнего поколения;
Защищенные и изолированные вычислительные платформы;
Уменьшение риска, за счет использования сторонних ресурсов, поддерживаемых
третьими лицами;
Способность управлять пиковыми нагрузками;
Более низкие затраты;
Меньшее время, стоимость и сложность при добавлении или расширении
функциональности.
Рис. 1. Грид вычисления
Вычисления по требованию приобретают все большую популярность среди
предприятий. Вычислительные ресурсы, которые обслуживают пользовательские веб
сайты, становятся все меньше и меньше, в то время, как доступные ресурсы поставщиков
услуг постоянно возрастают. Модель по требованию развилась, чтобы преодолеть
проблему того, как эффективно удовлетворить колеблющимся требованиям системы к
ресурсам. Спрос на вычислительные ресурсы может существенно меняться за достаточно
короткие промежутки времени, и поддержка ресурсов достаточных, чтобы удовлетворить
пиковым требованиям может быть дорогостоящей. Технически переусложненное решение
может быть столь же неблагоприятной, как ситуация, когда предприятие сокращает
издержки, поддерживая только минимальные вычислительные ресурсы. Такие понятия
как кластерные вычисления, Грид вычисления и т.д., могут казаться очень подобными
понятию вычислений по требованию, но лучше их понять можно, если думать о них, как
стандартных блоках, которые развивались в течение долгого времени, чтобы достигнуть
современной модели облачных вычислений, которую мы используем сегодня.
Amazon
Рассмотрим один из примеров – Amazon’s Elastic Compute Cloud (Amazon EC2).
Amazon EC2 – веб-служба, которая обеспечивает вычислительные мощности порядочного
размера в облаке. Это разработано, чтобы сделать веб-вычисления доступнее для
разработчиков и чтобы предложить множество преимуществ для клиентов:
Интерфейс веб-службы, позволяет клиентам получать и формировать пространство
с минимальным усилием;
Предоставляет пользователям полный контроль над их (арендованными)
вычислительными ресурсами и позволяют им работать в проверенной
вычислительной окружающей среде;
Уменьшает время, требуемое для получения и загрузки нового сервера до минут,
разрешая клиентам быстро изменять конфигурацию, согласно их вычислительным
требованиям;
Изменяет экономику вычислений, позволяя клиентам платить только за
используемые ресурсы;
Предоставляет разработчикам инструменты, которые необходимы для построения
отказоустойчивых приложений и изолирования себя от общих сценариев отказа.
Amazon EC2 представляет вычислительную окружающую среду, разрешая
клиентам использовать веб интерфейс, для получения и управления услугами,
необходимыми для запуска одного или более экземпляров операционной системы.
Клиенты могут загрузить окружающую среду с их настроенными приложениями. Они
могут управлять сетевыми правами доступа и так много систем, сколько им нужно. Для
использования Amazon EC2, клиентам сначала необходимо создать Amazon Machine
Image (AMI). Этот образ содержит приложения, библиотеки, данные и связанные
параметры конфигурации, используемые в виртуальной вычислительной среде. Amazon
EC2 предлагает использование предварительно сконфигурированные образы, созданные с
шаблонами, необходимыми для немедленного запуска. Когда пользователи определили и
сформировали их AMI, они используют инструменты Amazon EC2 для загрузки образа в
Amazon S3. Amazon S3 – склад, который обеспечивает безопасный, надежный и быстрый
доступ к клиенту AMI. Прежде, чем клиенты смогут использовать AMI, они должны
использовать веб интерфейс Amazon EC2 для настройки безопасности и сетевой доступ.
Во время конфигурации пользователи выбирают, какой тип категории и какую
операционную систему они хотят использовать. Доступные типы категорий составляют
две различные категории: Стандартный процессор или High-CPU процессор. Большинству
приложений лучше всего удовлетворяет Стандартный случай, в который входят
маленький, большой и очень большой экземпляры платформы. В случае High-CPU
используется пропорционально больше ресурсов центрального процессора, чем памяти
произвольного доступа (RAM), что более подходит высоконагруженным приложениям. В
случае High-CPU процессора для выбора есть средняя и очень большая платформы. После
определения, какую сущность использовать, клиенты могут запустить, завершить, и
контролировать так много экземпляров их AMI, сколько необходимо при использовании
интерфейсов прикладного программирования веб-службы (API) или большое
разнообразие других инструментов управления, которыми производится обслуживание.
Пользователи могут выбрать, хотят ли они запускать приложения в разных центрах
обработки данных, использовать статические IP адреса конечных точек, при этом они
платят только за фактически потребляемые ресурсы. Пользователи также могут выбрать
доступные AMI из библиотеки. Например, если необходим обычный Linux сервер, то
клиентами может быть один из стандартных Linux сборок AMIs.
Есть довольно много особенностей сервиса EC2, которые обеспечивают
существенные льготы для предприятия. Прежде всего, Amazon EC2 обеспечивает
финансовую выгоду. Из-за крупного масштаба компании Amazon и большой клиентской
базы, это недорогая альтернатива многим другим возможным решениям. Затраты
понесенные на запуск и управление разделены между большим количеством клиентов,
делая стоимость для любого клиента намного ниже, чем любая другая альтернатива.
Клиенты платят очень низкий процент за вычислительные мощности, которые они
фактически потребляют. Безопасность также обеспечена через интерфейсы веб-службы
Amazon EC2. Эти интерфейсы позволяют пользователям формировать параметры
настройки брандмауэра, которые контролируют сетевой доступ к и между группами
экземпляров служб. Amazon EC2 предлагает очень надежную среду, где случаи замены
могут быть быстро обеспечены.
o Динамическая Масштабируемость.
Amazon EC2 позволяет пользователям увеличивать или уменьшать производительность за
несколько минут. Пользователи могут запускать единственный экземпляр, сотни
экземпляров или даже тысячи экземпляров служб одновременно. Всем этим управляют с
помощью API веб-службы, приложение может автоматически масштабировать себя вверх
или вниз, в зависимости от его потребностей. Данный тип динамической
масштабируемости очень привлекателен для клиентов предприятий, потому что это
позволяет им соответствовать требованиям своих клиентов, не имея необходимость
достраивать их инфраструктуру.
o Полный контроль над экземплярами.
У пользователей есть полный контроль над их экземплярами. У них есть полный доступ к
каждому экземпляру, и они могут взаимодействовать с ними с любой машины.
Экземпляры могут быть перезагружены, удаленно используя API веб-службы.
Пользователи также имеют доступ к консоли своих экземпляров. Как только пользователи
настроили их аккаунт и загрузили их AMI в сервис Amazon S3, им необходимо только
запустить экземпляр. Возможно запустить AMI на любом числе экземпляров (или для
любого типа), вызвав RunInstances API, который поддерживается Amazon.
o Гибкость конфигурации.
Параметры настройки конфигурации могут значительно различаться среди
пользователей. У них есть выбор из разных типов экземпляров, операционных
систем, и пакетов программного обеспечения. Amazon EC2 позволяет им
выбирать конфигурацию памяти, центрального процессора, и системы
хранения, которая оптимально подходит для их выбора операционной системы
и приложения. Например, выбор пользователя операционной системы может
также включать многочисленные сборки Linux, Microsoft Windows Server, и
даже OpenSolaris, все запущенные на действительных серверах.
o Интеграция с Другими Веб-службами Amazon.
Amazon EC2 работает в соединении со множеством других веб-служб Amazon.
Например, Amazon Simple Storage Service (Amazon S3), Amazon SimpleDB,
Amazon Simple Queue Service (Amazon SQS) и Amazon CloudFront все
интегрированы, чтобы обеспечить полное решение для вычислений, обработки
запросов и хранение между широким диапазоном приложений.
Amazon S3 обеспечивает интерфейс веб-служб, который позволяет пользователям
хранить и восстанавливать любой объем данных через Интернет в любое время, где
угодно. Это предоставляет разработчикам прямой доступ к тому же самому, хорошо
масштабируемому, надежному, быстрому, недорогому использованию инфраструктуры
хранения данных Amazon, чтобы управлять их собственной глобальной сетью веб сайтов.
Служба S3 стремится максимизировать преимущества масштабируемости и передать эти
преимущества разработчикам.
Amazon SimpleDB - другой веб сервис, разработанный для того, чтобы выполнять
запросы на структурированных данных Amazon Simple Storage Service (Amazon S3) в
режиме реального времени. Этот сервис работает в соединении с Amazon EC2, чтобы
предоставить пользователям возможность хранения, обработки и запросов наборов
данных в пределах окружающей среды облака. Эти сервисы разработаны, чтобы сделать
веб масштабируемые вычисления легче и более прибыльными для разработчиков.
Традиционно данный тип функциональности был обеспечен использованием кластерной
реляционной базы данных, которая требует значительных инвестиций. Внедрение данных
технологий вызывало больше сложности и часто требовало услуг администрирования и
поддержки базы данных.
В сравнении с традиционным подходом, Amazon SimpleDB легка в использовании
и обеспечивает основную функциональность баз данных (например, поиск в реальном
времени и запросы структурированных данных), не наследуя сложности эксплуатации,
возникающие при традиционном выполнении. Amazon SimpleDB не требует схемы,
данные индексируются автоматически, обеспечивает простой интерфейс API для
хранения и доступа к данным. Это избавляет клиентов от необходимости выполнить
задачи, такие как моделирование данных, обслуживание индексов и настройка
производительности.
Amazon Simple Queue Service (Amazon SQS) – сервис принимает очереди
сообщений для хранения. При использовании Amazon SQS, разработчики могут просто
переместить данные, распределѐнные между компонентами своих приложений, которые
выполняют различные задачи, не теряя при этом сообщения. При этом достигается
высокая масштабируемость и надѐжность. Amazon SQS работает как демонстрация
масштабируемой передачи сообщений Amazon, инфраструктуры как сервиса. Любой
компьютер, связанный с Интернетом, может добавить или прочитать сообщения без
необходимости в установке какого-либо программного обеспечения или специальный
конфигурации брандмауэра. Компоненты приложений, использующие Amazon SQS, могут
запускаться независимо и не должны обязательно размещаться в той же самой сети,
использующей те же самые технологии или работающие в то же самое время.
Amazon CloudFront – веб-сервис для доставки контента (содержания). Amazon
CloudFront интегрируется с другими Amazon Web Services. Цель сервиса — дать
разработчикам и предприятиям простой способ распространять контент для конечных
пользователей с низкой задержкой, высокой скоростью передачи данных, при этом не
требуя никаких обязательств. Запросы объектов автоматически маршрутизируются на
самый близкий граничный сервер. Таким образом, содержание доставлено с лучшей
возможной производительностью. Граничный сервер получает запрос от компьютера
пользователя и соединяется с другим компьютером, вызывая оригинальный сервер, где
расположено приложение. Когда оригинальный сервер выполняет запрос, он отправляет
данные приложения назад на граничный сервер, который передает данные обратно
компьютеру клиента, который выполнял запрос. Сервис не является свободным для
пользования.
2 Платформа как Сервис (PaaS)
Развитие "облачных" вычислений привело к появлению платформ, которые
позволяют создавать и запускать веб-приложения. Платформа как сервис (Platform as a
Service, PaaS) — это предоставление интегрированной платформы для разработки,
тестирования, развертывания и поддержки веб-приложений как услуги, организованная на
основе концепции облачных вычислений.
Модель PaaS создает все условия требуемые для поддержки полного жизненного
цикла создания и доставки веб-приложений и услуг доступных из сети Интернет, не
требующих загрузки или установки программного обеспечения для разработчиков, ИТ
менеджеров или конечных пользователей. В отличие от модели IaaS, где разработчики
могут создавать определенные экземпляры операционных систем с доморощенными
приложениями, разработчики PaaS заинтересованы только веб разработкой и не заботятся
о том, какая операционная система используется. PaaS сервисы позволяют пользователям
сосредотачиваться на инновациях, а не на сложной инфраструктуре. Организации могут
направить существенную часть их бюджета на создание приложений, которые
обеспечивают реальную ценность, вместо затрат на поддержку инфраструктуры. Модель
PaaS таким образом открывает новую эру массовых инноваций. Теперь разработчики во
всем мире могут получить доступ к неограниченной вычислительной мощности. Любой
человек, имеющий доступ в Интернет, может создавать приложения и легко
разворачивать.
Традиционный подход создания и запуска локальных (On-Premises) приложений
всегда был сложен, дорог и рискован. Строительство Вашего собственного решения
никогда не предоставляло гарантии успеха. Каждое приложение было разработано, чтобы
удовлетворить определенным деловым требованиям. Каждое решение потребовало
определенной конфигурации аппаратных средств, операционной системы, базы данных,
электронную почту, веб-серверы, и т.д. Когда была создана окружающая среда
аппаратного и программного обеспечения, команда разработчиков должна была выбрать
комплекс платформ для разработки, чтобы создавать приложения. Неизбежно бизнес
требует от разработчиков производить изменения в приложении. Измененное приложение
требует новых циклов испытательных работ, прежде чем быть распространенным.
Крупные компании часто нуждаются в специализированных средствах, чтобы разместить
их в центрах обработки данных. Огромное количество электричества необходимо для
работы серверов и поддержки системы кондиционирования. Наконец, все это требует
использования отказоустойчивых площадок для центров обработки данных так, чтобы
информация могла копироваться в случае сбоя.
PaaS предлагает более быструю, более экономически выгодную модель для
разработки и доставки приложений. PaaS обеспечивает всю инфраструктуру для запуска
приложений через Интернет. Аналогичные сервисы предоставляют большое количество
компаний, таких как Microsoft, Amazon.com, Google. PaaS основан на модели учета
лицензий или модели подписки, таким образом, пользователи платят только за то, что они
используют. Предложения PaaS включают рабочие процессы для создания приложений,
разработки приложений, тестирования, развертывания и размещения. Также сервисы
приложений, виртуальные офисы, командное сотрудничество, интеграцию баз данных,
безопасность, масштабируемость, хранение, работоспособность, управление состоянием,
инструментарий приборных панелей и много другое.
Главные особенности PaaS включают сервисы для разработки, тестирования,
развертывания, размещения и управления приложениями для поддержки жизненного
цикла разработки приложений. Веб интерфейсы инструментов создания, как правило,
обеспечивают некоторый уровень поддержки чтобы упростить создание пользовательских
интерфейсов, основанных на таких технологиях как HTML, JavaScript и других
технологиях. Поддержка многопользовательской архитектуры помогает избежать проблем
при разработке относительно использования приложений многими пользователями
одновременно. Провайдеры PaaS часто включают услуги для управления параллельной
обработкой, масштабируемостью, отказоустойчивостью и безопасностью. Другая
особенность – это интеграция с веб-службами и базами данных. Поддержка протокола
обмена структурированными сообщениями в распределѐнной вычислительной среде
(Simple Object Access Protocol, SOAP) и других интерфейсов позволяют приложениям
PaaS создавать комбинации веб-сервисов (которые называют mashup) так же легко, как
наличие доступа к базам данных и повторному использованию услуг внутри частных
сетей. Способность формировать и распространять код между специализированными,
предопределенными или распределенными командами очень увеличивают
производительность предложений вендоров PaaS. Интегрированные предложения PaaS
обеспечивают возможность для разработчиков, чтобы наиболее хорошо понимать
внутреннюю работу их приложений и поведение пользователей при использовании
инструментов, подобных приборной панели, чтобы рассмотреть внутренние параметры,
основанные на измерениях количества параллельных соединений и т.д. Некоторые
предложения PaaS расширяют этот инструментарий, что позволяет составлять счета
оплаты за использование.
Microsoft Azure
Платформа корпорации Майкрософт Windows Azure (первоначально известная под
названием Azure Services Platform) — это группа "облачных" технологий, каждая из
которых предоставляет определенный набор служб для разработчиков приложений. На
рисунке 2 показано, что платформа Windows Azure может быть использована как
приложениями, выполняющимися в "облаке", так приложениями, работающими на
локальных компьютерах
Рис. 2. Платформа Windows Azure поддерживает приложения, данные и инфраструктуру,
находящиеся в "облаке"
Платформа Windows Azure состоит из следующих компонентов:
o Windows Azure. Обеспечивает среду на базе Windows для выполнения приложений
и хранения данных на серверах в центрах обработки данных корпорации
Майкрософт.
o SQL Azure. Обеспечивает службы данных в "облаке" на базе SQL Server.
o .NET Services. Обеспечивают распределенную инфраструктуру для "облачных"
приложений и локальных приложений.
Каждый компонент платформы Windows Azure играет собственную роль.
На высоком уровне понять Windows Azure очень легко. Это платформа для
выполнения приложений Windows и хранения их данных в Интернете ("облаке"). На
рисунке 3 показаны ее основные компоненты.
Рис. 3. Windows Azure предоставляет "облачные" приложениям службы для вычисления и
хранения на базе Windows
Как показано на рисунке, Windows Azure выполняется на большом количестве
компьютеров, расположенных в центрах обработки данных корпорации Майкрософт, и
доступна через Интернет. Общая структура подключения Fabric Windows Azure соединяет
множество вычислительных мощностей в единое целое. Службы Windows Azure для
вычисления и хранения построены на основе этой структуры.
Вычислительная служба Windows Azure, естественно, работает на базе Windows.
Для обеспечения первоначальной доступности этой службы осенью 2008 г. была открыта
для широкой публики CTP-версия. Корпорация Майкрософт разрешила выполнять на
Windows Azure только приложения, разработанные на платформе .NET Framework.
Сегодня, однако, Windows Azure также поддерживает неуправляемый код, позволяя
разработчикам выполнять приложения, которые разработаны не на базе .NET Framework.
В любом случае такие приложения написаны на обычных языках Windows — C#, Visual
Basic, C++ и других — с помощью Visual Studio 2008 или других средств разработки.
Разработчики могут создавать веб-приложения с помощью таких технологий, как
ASP.NET и Windows Communication Foundation (WCF), приложения, которые
выполняются как независимые фоновые процессы, или приложения, сочетающие и то и
другое.
Как приложения Windows Azure, так и локальные приложения могут получать
доступ к службе хранилища Windows Azure, делая это одним и тем же способом: с
помощью подхода RESTful. Однако Microsoft SQL Server не является базовым
хранилищем данных. Фактически хранилище Windows Azure не относится к реляционным
системам, и язык его запросов не SQL. Поскольку оно изначально предназначено для
поддержки приложений на базе Windows Azure, то обеспечивает более простые и
масштабируемые способы хранения. Следовательно, оно позволяет хранить большие
двоичные объекты (binary large object — blob), обеспечивает создание очередей для
взаимодействия между компонентами приложений и даже что-то вроде таблиц с простым
языком запросов. (Для тех приложений Windows Azure, которым требуется обычное
реляционное хранилище, платформа Windows Azure предоставляет базу данных SQL
Azure, описанную далее.)
Выполнение приложений и хранение их данных в Интернете имеет очевидные
преимущества. Например, вместо того, чтобы покупать, устанавливать и эксплуатировать
собственные компьютеры, организация может доверить все это поставщику услуг
Интернета. При этом заказчики платят только за вычислительные мощности и хранилище,
которое они используют, и не связаны с обслуживанием большого количества серверов,
предназначенных только для пиковых нагрузок. Если приложения правильно написаны,
их можно легко масштабировать, воспользовавшись преимуществами огромных центров
обработки данных, которые могут предложить поставщики.
И все же для получения этих преимуществ требуется эффективное управление. В
Windows Azure каждое приложение имеет файл конфигурации, как показано на рис. 2.
Изменяя информацию в этом файле вручную или с помощью программы, владелец
приложения может контролировать различные аспекты его поведения, такие как
настройка количества экземпляров, которые должны выполняться на платформе Windows
Azure. Структура Fabric платформы Windows Azure наблюдает за тем, чтобы приложение
поддерживалось в требуемом состоянии.
Чтобы позволить своим заказчикам создавать, настраивать приложения и
наблюдать за ними, Windows Azure предоставляет портал, доступный с помощью
браузера. Заказчик предоставляет Windows Live ID, а затем решает, создавать ему
учетную запись размещения для выполнения приложений, учетную запись хранения для
хранения данных или и ту и другую. Оплата использования приложения заказчиками
может производиться любым удобным способом: с помощью подписки, повременно или
как-нибудь иначе.
Windows Azure — это общая платформа, которую можно использовать в различных
сценариях. Приведем несколько примеров, все они описываются с учетом возможностей
CTP-версии.
o При создании нового веб-сайта, скажем, такого как Facebook, можно разрабатывать
приложения на платформе Windows Azure. Благодаря тому, что данная платформа
поддерживает как веб-службы, так и фоновые процессы, приложение может
предоставлять интерактивный интерфейс пользователя и асинхронно выполнять
работу для пользователей. Вместо того, чтобы тратить время и деньги, думая об
инфраструктуре, пусковая группа может полностью сосредоточить свое внимание
на разработке кода, который будет приносить пользу пользователям и инвесторам.
Компания может также запустить небольшой веб-сайт, требующий незначительных
затрат, если у ее приложения очень мало пользователей. Если приложение
приобретает популярность и количество пользователей растет, Windows Azure при
необходимости позволяет масштабировать его.
o Независимые поставщики программного обеспечения, создающие версию
программы как службы имеющегося локального приложения Windows, могут
разработать его на базе Windows Azure. Благодаря тому, что Windows Azure
главным образом обеспечивает стандартную среду Windows, перемещение бизнес-
логики приложения на эту "облачную" платформу не должно создавать особых
проблем. Еще раз подчеркнем: разработка на базе имеющейся платформы
позволяет независимым поставщикам ПО сосредоточить внимание на бизнес-
логике, то есть на том, что позволяет им делать деньги, а не тратить время на
инфраструктуру.
o Компания, создающая приложение для своих заказчиков, может выбрать для его
разработки платформу Windows Azure. В силу того что Windows Azure
поддерживает .NET, не представляет труда найти разработчиков с
соответствующими навыками к тому же за разумную плату. Выполнение
приложения в центрах обработки данных Microsoft освобождает предприятия от
ответственности и расходов на поддержку собственных серверов, превращая
капитальные затраты в эксплуатационные расходы. В особенности если у
приложения имеются периоды пиковой нагрузки (если это, например, сетевой
магазин цветов, которые необходимо вручить во время всеобщего ажиотажа 8
марта), предоставление корпорации Microsoft функции поддержки большой
серверной базы, необходимой для этого, может оказаться экономически выгодным.
Выполнение приложений в "облаке" — один из самых важных аспектов
"облачных" вычислений. С помощью Windows Azure корпорация Microsoft обеспечивает
как платформу для выполнения приложений, так и способ хранения данных. По мере того,
как растет интерес к "облачным" вычислениям, ожидается создание еще большего
количества приложений Windows для этой новой области.
Один из наиболее привлекательных способов использования серверов, доступных
через Интернет, — это обработка данных. Цель SQL Azure — решить эту проблему,
предлагая набор веб-служб для хранения самой разной информации и работы с ней. В то
время, как представители Microsoft заявляют, что постепенно SQL Azure будет содержать
целый ряд возможностей, ориентированных на данные, включая создание отчетов, анализ
данных и многое другое, первыми компонентами SQL Azure станут база данных SQL
Azure Database и средство синхронизации данных Huron. Это наглядно
продемонстрировано на рисунке 4.
Рис. 4. SQL Azure обеспечивает средства в Интернете, ориентированные на работу с
данными
База данных SQL Azure Database (ранее известная под названием SQL Data
Services) обеспечивает систему управления базами данных (СУБД) в Интернете. Эта
технология позволяет локальным и веб-приложениям хранить реляционные и другие типы
данных на серверах Microsoft в центрах обработки данных Microsoft. Так же как при
работе с другими веб-технологиями, компания платит только за то, что использует,
увеличивая и уменьшая объем использования (и затраты) по мере возникновения
необходимости в изменениях. Использование базы данных в "облаке" также меняет
характер капитальных затрат: на место инвестиций в жесткие диски и ПО для СУБД
приходят эксплуатационные затраты.
В отличие от службы хранилища Windows Azure база данных SQL Azure
разработана на основе Microsoft SQL Server. Тем не менее в первоначальной CTP-версии
2008 г. база данных SQL Azure Database не предоставляла традиционный реляционный
подход к данным. Учитывая отзывы заказчиков, корпорация Microsoft решила внести
соответствующие изменения. В дальнейшем база данных SQL Azure Database будет
поддерживать реляционные данные, обеспечивая среду SQL Server в "облаке" с
индексами, представлениями, хранимыми процедурами, триггерами и многим другим.
Доступ к этим данным можно получить с помощью ADO.NET и других интерфейсов
доступа к данным Windows. Фактически приложения, которые сегодня получают доступ к
SQL Server локально, будут работать почти точно так же с данными в SQL Azure Database.
Для работы с этой информацией в "облаке" заказчики могут также использовать
локальное ПО, такое как службы отчетов SQL Server.
В то время, как приложения могут использовать базу данных SQL Azure Database в
значительной степени также, как локальную СУБД, требования к управлению
существенно сокращены. Вместо того, чтобы беспокоиться о технике, например,
обеспечивать мониторинг использования диска и обслуживание файлов журнала, заказчик
SQL Azure Database может сосредоточить внимание на том, что действительно важно, на
данных. Корпорация Microsoft будет отвечать за вопросы эксплуатации. Кроме того, так
же как в случае с другими компонентами платформы Windows Azure, использование SQL
Azure Database не составляет труда. Нужно просто зайти на веб-портал и предоставить
необходимую информацию.
Второй компонент SQL Azure был заявлен под названием Huron Data Sync. Эта
технология, разработанная на основе Microsoft Sync Framework и SQL Azure Database,
позволяет синхронизировать реляционные данные в разных локальных СУБД. Владельцы
данных могут определять, что именно должно синхронизироваться, как должны
разрешаться конфликты и многое другое.
Приложения могут использовать SQL Azure самыми разными способами.
Приведем несколько примеров.
o Приложение Windows Azure может хранить данные в SQL Azure Database.
Несмотря на то, что Windows Azure обеспечивает собственное хранилище,
реляционные таблицы не входят в число предлагаемых вариантов. Учитывая то,
что многие имеющиеся приложения используют реляционное хранилище, а многие
разработчики знают, как с ним работать, значительное количество приложений
Windows Azure, скорее всего, будет работать с данными привычным способом, то
есть с опорой на SQL Azure Database. Для повышения производительности
заказчики могут указать, что определенное приложение Windows Azure должно
выполняться в том же центре обработки данных, где SQL Azure Database хранит
информацию этого приложения.
o В небольшой компании или подразделении большой организации приложение
может использовать SQL Azure Database. Вместо того, чтобы хранить данные в
базе данных SQL Server или Access, работающей на компьютере под чьим-то
столом, приложение может использовать преимущества надежного и
отказоустойчивого "облачного" хранилища.
o Предположим, производитель хочет сделать информацию о продукте доступной
для своей дилерской сети и непосредственно для заказчиков. Размещение данных в
SQL Azure Database позволит сделать их доступными для приложений,
выполняемых на стороне дилеров, и для ориентированных на заказчиков веб-
приложений, которые выполняются на стороне производителя.
o Компания с клиентской базой данных, реплицированной в географически
удаленных местах, должна использовать компонент Huron для синхронизации этих
реплик. Возможно, в каждой из географических точек требуется собственная копия
данных для повышения производительности, обеспечения доступности или по
каким-то иным причинам. Автоматическая синхронизация может сделать такое
обязательное распределение менее проблематичным.
Идет ли речь о приложении Windows Azure, обеспечении большей доступности
данных, синхронизации этих данных или о чем-то еще, службы данных в Интернете могут
оказаться очень полезными. По мере появления новых технологий в рамках SQL Azure
организации будут получать возможность использования Интернета для выполнения все
большего количества задач, ориентированных на работу с данными.
Выполнение приложений и хранение данных в Интернете относятся к важным
аспектам вычислительной сетевой среды. Однако они далеко не исчерпывают ее
возможности. Другая возможность заключается в обеспечении инфраструктуры служб на
базе "облака", которые могут использоваться локальными приложениями или веб-
приложениями. Заполнить этот пробел и призваны службы .NET Services.
Первоначально известные как BizTalk Services, службы .NET Services предлагают
функции для решения общих проблем инфраструктуры при создании распределенных
приложений. На рисунке 5 показаны их основные компоненты.
Рис. 5. Службы .NET Services обеспечивают инфраструктуру в "облаке", которая может
быть использована для веб-приложений и локальных приложений
Службы .NET Services состоят из следующих компонентов.
o Управление доступом. Получающий все большее распространение подход к
удостоверениям заключается в том, что каждый пользователь должен предоставить
приложению маркер, содержащий некоторый набор утверждений. На основании
этих утверждений приложение решает, что разрешено делать пользователю.
Эффективное осуществление этой процедуры в масштабах компании требует
федерации удостоверений, которая позволяет принимать утверждения, сделанные в
одной области удостоверений, в другой области. Может также потребоваться
преобразование утверждений, изменяющее их при передаче из одной области
удостоверений в другую. Служба управления доступом обеспечивает реализацию
обеих функций на основе "облака".
o Шина служб. Предоставление служб приложений в Интернете гораздо труднее, чем
может показаться. Задача шины служб — упростить эту процедуру, позволяя
приложениям предоставлять конечные точки веб-служб, доступ к которым может
быть получен другими приложениями — локальными или работающими в
"облаке". Каждой предоставленной конечной точке присваивается URI, который
клиенты могут использовать для поиска службы и получения доступа к ней. Шина
служб также решает проблему преобразования сетевых адресов и прохождения
через межсетевые экраны без открытия новых портов для предоставленных
приложений.
Приведем несколько примеров использования службы .NET Services.
o Независимый поставщик ПО, который поставляет приложение, необходимое
заказчикам из разных организаций, может использовать службу управления
доступом для упрощения разработки и эксплуатации приложения. Например, этот
компонент .NET Services может преобразовывать различные утверждения,
применяемые в разных организациях с различными технологиями идентификации
в согласованный набор, подходящий для приложения независимого поставщика
ПО. Такое преобразование позволяет также разгрузить механизм федерации
удостоверений за счет службы управления доступом, освобождая независимых
поставщиков ПО от необходимости выполнения собственной локальной
программы федерации.
o Предположим, предприятие хочет открыть доступ к одному из своих приложений
торговым партнерам. Оно может распределить функции приложения с помощью
веб-служб SOAP или RESTful и зарегистрировать их конечные точки с помощью
шины служб. Затем торговые партнеры могут использовать шину для поиска
конечных точек и доступа к службам. Это позволяет снизить риски, связанные с
предоставлением приложения, поскольку не требует открытия новых портов в
межсетевом экране компании. Организация может также использовать службу
управления доступом, предназначенную для работы с шиной служб, для
рационализации сведений о проверке подлинности, отправленной приложению ее
партнерами.
Так же как в случае Windows Azure, предоставляется портал, доступный с
помощью браузера, чтобы дать заказчикам возможность использовать службы .NET
Services с помощью Windows Live ID. Цель корпорации Microsoft, достигаемая с помощью
.NET Services, совершенно очевидна: обеспечить полезную "облачную" инфраструктуру
для распределенных приложений.
3 Программное обеспечение как Сервис (SaaS)
Программное обеспечение как сервис (Software as a service, SaaS) или программное
обеспечение по требованию (Software on Demand, SoD) — бизнес-модель продажи
программного обеспечения, при которой поставщик разрабатывает веб-приложение и
самостоятельно управляет им, предоставляя заказчикам доступ к программному
обеспечению через Интернет. Основное преимущество модели SaaS для потребителя
состоит в отсутствии затрат, связанных с установкой, обновлением и поддержкой
работоспособности оборудования и работающего на нѐм программного обеспечения.
Программное обеспечение как сервис является моделью распространения программного
обеспечения, в которой приложения размещены у вендора SaaS или поставщика услуг и
доступны для клиентов по сети, как правило, Интернет. Модель SaaS доставки
приложений становится все более и более распространенной технологией, которая
поддерживает веб-службы и сервис-ориентированную архитектуру (SOA). SaaS также
часто ассоциирована с моделью лицензирования, когда оплата происходит по мере
получения услуг. Тем временем, услуги широкополосных сетей стали все более и более
доступными, для поддержки доступа пользователей из большего количества мест по
всему миру.
Очевидны огромные успехи, достигнутые поставщиками услуг интернет (ISP),
чтобы увеличить полосу пропускания и сохранить возможность использования более
мощных микропроцессоров вместе с недорогими устройствами хранения данных. Это
обеспечивает огромную платформу для того, чтобы проектировать, разворачивать и
использовать программное обеспечение через все области бизнес- и частных вычислений.
Приложения SaaS также должны быть в состоянии взаимодейстововать с другими
данными и другими приложениями среди большого разнообразия окружающих сред и
платформ. Компания IDC описывает две немного отличающихся модели поставки SaaS.
SaaS чаще всего предназначен для обеспечения бизнес функциональности
программного обеспечения для корпоративных клиентов по низкой цене, что позволяет
избавиться от установки, управления, поддержки, лицензирования и высоких затрат в
компании. Большинству клиентов неинтересно знать, как или почему программное
обеспечение реализовано, развернуто и т.д., но все они, в тоже время, имеют потребность
в использовании программного обеспечения в их работе. Многие типы программного
обеспечения хорошо удовлетворяют модели SaaS (например, бухгалтерский учет, работа с
клиентами, электронная почта, учет трудовых ресурсов, ИТ безопасность, управление ИТ,
видеоконференцсвязь, веб-аналитика, управление веб-контентом). Различие между SaaS и
более ранними способами доставки приложений через Интернет в том, что решения SaaS
были разработаны специально, чтобы работать с веб браузерами. Архитектура
приложений на основе SaaS специально предназначена для поддержки обработки
запросов от большого количества пользователей. В этом и заключается большая разница
между традиционным клиент-серверным приложением решением, расположенным у
поставщиков услуг. С другой стороны, поставщики услуг SaaS увеличивают экономию
масштабирования при развертывании, управлении, поддержке и обслуживании их
предложений.
Много типов компонентов программного обеспечения и Фреймворков могут быть
использованы при разработке приложений SaaS. Используя новые технологии в этих
современных компонентах и средах разработки приложений, можно значительно
уменьшить время разработки и стоимости преобразования традиционного продукта в
решение SaaS. Согласно Microsoft, SaaS архитектура может быть классифицирована в
один из четырех уровней, с ключевыми признаками: простота конфигурации,
эффективность при многопользовательском доступе и масштабируемость. Каждый
уровень отличается от предыдущего добавлением одного из этих признаков. Рассмотрим
уровни, описанные Microsoft:
o Архитектурный Уровень 1 — Специальный/Настраиваемый.
Первый уровень является фактически самым низким. Каждый клиент имеет уникальную,
настроенную версию размещаемого приложения. Приложение запускает свои
собственные экземпляры на серверах. Миграция традиционных несетевых или клиент-
серверных приложений на этот уровень SaaS, как правило, требует незначительных
усилий при разработке и уменьшает эксплуатационные расходы, благодаря объединению
серверного аппаратного обеспечения и администрирования.
o Архитектурный Уровень 2 — Конфигурируемость.
Второй уровень SaaS обеспечивает большую гибкость программы благодаря метаданным
конфигурации. На данном уровне клиенты могут использовать много отдельных
экземпляров одного приложения. Это позволяет вендорам удовлетворять переменные
потребностям каждого клиента при использовании детализированной конфигурации.
Также облегчается обслуживание, появляется возможность обновить общую кодовую
базу.
o Архитектурный Уровень 3 — Эффективность Мультиарендатора.
Третий уровень отличается от второго наличием поддержки многопользовательского
доступа. Единственный экземпляр программы способен обслужить всех пользователей.
Данный подход позволяет более эффективно использовать ресурсы сервера незаметно для
конечного пользователя, но, в конечном счете, этот уровень не позволяет выполнять
масштабирование системы.
o Архитектурный Уровень 4 — Масштабируемость.
В четвертом Уровень SaaS, масштабируемость добавлена благодаря
использованию многоуровневой архитектуры. Эта архитектура способна
поддерживать распределение нагрузки фермы идентичных экземпляров
приложений, запущенных на переменном количестве серверов, которое
достигает сотен и даже тысяч. Мощность системы может быть динамически
увеличена или уменьшена в соответствии с требованиями. Это осуществляется
путем добавления или удаления серверов без необходимости для дальнейшего
изменения прикладной архитектуры программного обеспечения.
Развертывание приложений в сервис-ориентированной архитектуре является более
сложной проблемой, чем развертывание программного обеспечения в традиционных
моделях. В результате стоимость использования приложения SaaS основывается на числе
пользователей, которые осуществляют доступ к сервису. Довольно часто возникают
дополнительные расходы, связанные с использованием услуг сервисной службы,
дополнительной полосы пропускания, и дополнительного дискового пространства.
Доходы поставщиков услуг SaaS обычно первоначально ниже, чем традиционные расходы
за лицензии на программное обеспечение. Однако компромисс для более низких затрат
лицензии – ежемесячно возвращающий доход, который рассматривается финансовым
директором компании, как более предсказуемый критерий существования бизнеса. К
ключевым особенностям программного обеспечения SaaS относятся:
o Управление по сети и сетевой доступ к коммерческому программному
обеспечению в централизованных центрах обработки данных, а не на сайтах
клиентов, предоставление возможности клиентам получить доступ к приложениям
удаленно через Интернет.
o Доставка приложений по модели "один ко многим", в противоположность
традиционной модели "один к одному".
o Централизованная модернизация и обновления, что позволяет избежать
необходимости в загрузке и установке приложений пользователем. SaaS часто
используется в крупных сетях коммуникаций и программного обеспечения для
совместной работы, иногда как программное расширение к архитектуре PaaS.
Циклы разработки программ в компаниях могут занимать достаточно долгое время,
потребляя большие ресурсы и приводя к неудовлетворительным результатам. Хотя
решение уступить контроль является трудным, это может привести к улучшению
эффективности, снижению рисков и сокращению расходов. Постоянно увеличивается
число компаний, которые хотят использовать модель SaaS для корпоративных
приложений, таких как работа с клиентами, финансовые расходы, управление персоналом.
Модель SaaS гарантирует предприятиям, что все пользователи системы используют
правильную версию приложения и поэтому формат зарегистрированных и переданных
данных корректен, совместим и точен. Возлагая ответственность за приложения на
поставщика SaaS, предприятия могут уменьшить затраты на администрирование и
управление, которые необходимы для поддержки собственного корпоративного
приложения. SaaS увеличивает доступность приложений в сети Интернет. SaaS
гарантирует, что все транзакции приложения зарегистрированы. Преимущества SaaS для
клиентов достаточно понятны:
o Рациональное управление;
o Автоматизированное обновление и исправление;
o Целостность данных в рамках предприятия;
o Совместная работа сотрудников предприятия;
o Глобальная доступность.
Серверная виртуализация может использоваться в архитектуре SaaS вместо или в
дополнение к поддержке многопользовательского режима. Главное преимущество
платформы виртуализации – увеличение производительности системы без необходимости
в дополнительном программировании. Эффект объединения совместного использования
ресурсов и платформы виртуализации в решение SaaS обеспечивает большую гибкость и
производительность для конечного пользователя.
4 Коммуникация как Сервис (CaaS)
Коммуникация как Сервис (CaaS) - построенное в облаке коммуникационное
решение для предприятия. Поставщики этого типа облачного решения отвечают за
управление аппаратным и программным обеспечением, требуемым для того, чтобы
предоставить:
o систему связи, обеспечивающую передачу речевого сигнала по сети Интернет или
по любым другим IP-сетям (VoIP),
o обмен мгновенными сообщениями (IM),
o видеоконференц-связь.
Эта модель начала свой эволюционный процесс в индустрии телекоммуникаций, не
сильно отличаясь от модели SaaS, стала результатом сектора служб доставки
программного обеспечения. Вендоры CaaS ответственные за управление аппаратным и
программным обеспечением их пользователей. Вендоры CaaS, как правило,
предоставляют гарантируемое качество обслуживания (QoS) в соответствии с
соглашением сервисного обслуживания (SLA).
Модель CaaS позволяет деловым клиентам выборочно разворачивать средства
коммуникаций и услуг на оснований оплаты услуг в срок для используемых сервисов.
CaaS разработан на ценовой политике общего назначения, которая предоставляет
пользователям всесторонний, гибкий и легкий в понимании сервисный план. Согласно
Gartner, рынок CaaS, как ожидается, будет насчитывать $2,3 миллиарда в 2011 году, с
ежегодным темпом роста более 105 %.
Сервисные предложения CaaS часто связаны и включают интегрированный доступ
к традиционному голосу (или VoIP) и данным, дополнительная функциональность
объединенных коммуникаций, такие как видео вызовы, совместная работа, беседы,
присутствие в реальном времени и передача сообщений, телефонная сеть, местная и
распределенная голосовые услуги, голосовая почта. CaaS решение включает избыточное
переключение, сеть, избыточность оборудования, WAN failover – что определенно
подходит к потребностям клиентов. Все транспортные компоненты VoIP расположены в
географически распределенных, безопасных информационных центрах для высокой
доступности и жизнеспособность. CaaS предполагает гибкость и масштабируемость для
мелкого и среднего бизнеса, чего зачастую сами компании не могут обеспечить.
Поставщики услуг CaaS подготовлены к пиковым нагрузкам, оказывают услуги по
расширению емкости устройств, состояний или области покрытия по требованию
заказчика. Пропускная способность сети и наборы средств могут быть изменены
динамически, таким образом, функциональность идет в ногу с потребительским спросом и
ресурсы, находящиеся в собственности поставщика не используются впустую. В отличие
от поставщика услуг, перспектива клиента фактически не приводит к риску обслуживания
устаревшего оборудования, так как обязательства поставщика услуг CaaS заключается в
том, чтобы периодически модернизировать или заменять аппаратное и программное
обеспечение, чтобы подерживать платформу в технологически актуальном состоянии.
CaaS не требует контроля от клиентов. Это избавляет от необходимости клиентов
совершать какие-либо капиталовложения в инфраструктуру, и это устраняет накладные
расходы для инфраструктуры. С решением CaaS клиенты в состоянии усиливать
коммуникационные услуги класса предприятия, не имея необходимости к построению
собственное решение внутри своей организации. Это позволяет клиентам
перераспределять бюджет и трудозатраты персонала, использовать их в тех местах, где
это наиболее необходимо.
От телефонной трубки, которую можно найти на столе каждого сотрудника до
клиентского программного обеспечения на ноутбуке сотрудника, VoIP частная основа, и
все необходимые действия между каждым из компонентов в решении CaaS
поддерживаются в режиме 24/7 поставщиком услуг CaaS.
o Решения размещения и управления
Удаленное управление услугами инфраструктуры обеспечивается третьими
лицами, казалось недопустимой ситуацией для большинства компаний. Однако
за прошлое десятилетие с развитием технологий, организацией сети и
программным обеспечением отношение изменилось. Это частично связано со
снижением издержек при использовании выбранных услуг. Однако в отличие
от единичных услуг предложение поставщиков услуг CaaS предоставляет
полное коммуникационное решение, которое является полностью управляемый
одним вендором. Наряду с особенностями, такими как VoIP и объединенные
коммуникации, интеграция офисной автоматической телефонной станции с
дополнительной функциональностью управляется одним вендором, который
ответственен за всю интеграцию и доставку услуг пользователям.
o Удобство управления и функциональность
Когда клиенты пользуются услугами связи на стороне поставщика услуг CaaS,
они платят только за необходимую функциональность. Поставщик услуг может
распределять стоимость услуг. Как отмечалось ранее, это способствует более
экономичному внедрению и использованию общей необходимой
функциональности для клиентов. Экономия за счет роста производства
позволяет поставщикам услуг производить обслуживание достаточно гибко,
они не привязаны к единственному поставщику инвестиций. Поставщики услуг
в состоянии усилить решения лучших среди аналогичных поставщиков, таких
как Microsoft, Google, Amazon, Cisco, Nortel более экономично.
o Нет затрат средств на оборудования
Все оборудование расположено у поставщиков услуг CaaS, это фактически
избавляет от необходимости клиентов поддерживать собственные
информационные центры и оборудование. Отсутствуют расходы средств на
электропотребление, охлаждение, аренду помещений. Клиенты получают
многократную выгоду, используя центры обработки данных масштаба крупных
компаний с полным резервированием — и это все включено в ежемесячную
оплату.
o Гарантируемая непрерывность бизнеса
Позволяет ли Ваш план аварийного восстановления после катастрофических
событий в центре обработки данных продолжать непрерывно работать Вашему
бизнесу? Как долго Ваша компания может работать при отключении
электроэнергии? Для большинства компаний эти события неизбежно означают
ощутимые финансовые потери, связанные с простоем бизнеса. Распределение
информационной системы компании между географически распределенными
центрами обработки данных становятся нормой для все большего числа
компаний. Это смягчает риск финансовых потерь и позволяет компаниям
расположенным в месте, где произошли какие либо катастрофические события,
восстанавливать инфраструктуру так скоро, насколько это возможно. Этот
процесс осуществлен поставщиками услуг CaaS. Для большого количества
компаний, работающий с голосовой передачей данных, перебои в работе
системы являются катастрофическими. В отличие от целостности данных,
устранение единственных точек отказа для голосовой сети является обычно
достаточно дорогостоящим из-за крупного масштаба и сложности управления
проектом. Решения CaaS обладают многократными уровнями избыточности
системы, что исключает из системы единые точки отказа.
5 Мониторинг как Сервис (MaaS)
Мониторинг как Сервис (Monitoring-as-a-Service, MaaS) является обслуживаемым в
облаке обеспечением безопасности, прежде всего на бизнес платформах. За прошлое
десятилетие MaaS стал все более и более популярным. С появлением облачных
вычислений, популярность MaaS стала больше. Контроль безопасности затрагивает
защиту клиентов – предприятий или правительства от кибер угроз. Служба безопасности
играет важную роль в обеспечении и поддержании конфиденциальность, целостность, и
доступность средств ИТ. Однако время и ограниченные ресурсы ограничивают
мероприятия безопасности и их эффективность для большинство компаний. Это требует
постоянной бдительности безопасности инфраструктуры и критических информационных
средств. Много промышленных правил требуют, чтобы организации контролировали
свою среду безопасности, журналы серверов, и другие информационные средства, чтобы
гарантировать целостность этих систем. Однако обеспечение эффективного контроля
состояния безопасности может быть пугающей задачей, потому что она требует
передовых технологий, квалифицированных экспертов по безопасности, и
масштабируемые процесс, ни один из которых не является дешевым. Сервисы контроля
состояния безопасности MaaS предлагает контроль в реальном времени, в режиме 24/7 и
практически немедленные реагирование по инцидентам через инфраструктуру
безопасности. Эти сервисы помогают защитить критические информационные активы
клиентов. До появления электронных систем обеспечения безопасности, контроль
состояния безопасности и реагирование зависели в большой степени от человеческих
ресурсов и человеческих способностей, которые ограничивали правильность и
эффективность контролирующих усилий. За прошедшие два десятилетия, были
разработаны информационные технологии в системах обеспечения безопасности, которые
способны взаимодействовать с центрами операционной безопасности (SOC) через
корпоративные сети, что значительно изменило картину. Данные средства включают две
важных вещи:
1. Общая стоимость владения центром операционной безопасности намного выше,
чем для современной технологии SOC;
2. Достижение более низких операционных затрат безопасности и более высокая
эффективность средств безопасности.
SOC услуги контроля состояния безопасности могут улучшить эффективность
инфраструктура безопасности клиента, активно анализируя журналы и оповещения от
устройств инфраструктуры круглосуточно и в режиме реального времени. Контроль
команд соотносит информацию с различных устройств безопасности, чтобы предоставить
аналитикам по безопасности данные, необходимые им для устранения ложный угроз и для
реагирования на истинный угрозы предприятия. Служба информационной безопасности
может оценить производительность системы на периодически повторяющейся основе и
обеспечить рекомендации для усовершенствований если необходимо.
Сервис раннего обнаружения сообщает о новых слабых местах в безопасности
вскоре после того, как они появляются. Вообще, угрозы взаимосвязаны с источниками,
имеющими отношение к третьей стороне. Отчет обычно посылается по электронной почте
ответственному человеку, назначенному компанией. Отчеты об уязвимости безопасности,
кроме содержания подробного описания уязвимости, также включает информацию о
влиянии данной уязвимости на систему или приложение. Наиболее часто отчет также
указывает на определенные действия, которые нужно выполнить, чтобы минимизировать
эффект уязвимости.
Платформа, управление и мониторинг сервиса часто предоставляются как
приборная панель, что позволяет в любое время узнать рабочее состояние системы.
Доступ можно получить через веб-интерфейсы, что позволяет работать удаленно. Каждый
рабочий элемент, который проверяется обычно содержит рабочий индикатор статуса,
всегда принимая во внимание критическое воздействие каждого элемента. Данные
сервиса позволяют определить, какие элементы находятся в рабочем состоянии, каким не
хватает мощности, а какие находятся за пределами установленных параметров.
Обнаруживая и идентифицируя такие проблемы, можно принимать профилактические
меры, для предотвращения потери работоспособности сервиса.
Краткие итоги:
В данной лекции была рассмотрена технология предоставления веб-сервисов
"инфраструктура как сервис". Был получен базовый материал о технологиях ведущих
вендоров Amazon и Microsoft.
Ключевые термины:
Инфраструктура как Сервис, IaaS - предоставление компьютерной инфраструктуры (как
правило, это платформы виртуализации) как сервиса.
Платформа как сервис, PaaS – предоставление интегрированной платформы для
разработки, тестирования, развертывания и поддержки веб-приложений как услуги,
организованная на основе концепции облачных вычислений
Программное обеспечение как сервис, SaaS – бизнес-модель продажи программного
обеспечения, при которой поставщик разрабатывает веб-приложение и самостоятельно
управляет им, предоставляя заказчикам доступ к программному обеспечению через
Интернет.
Коммуникация как Сервис, CaaS - построенное в облаке коммуникационное решение для
предприятия MaaS.
Лекция 13. Windows Azure SDK
Цель лекции: Windows Azure SDK предоставляет разработчикам интерфейс
программирования приложений, необходимый для разработки, развертывания и
управления масштабируемых сервисов в Windows Azure. В данной лекции мы рассмотрим
основные возможности Windows Azure SDK. Цель данной лекции – ознакомиться с
комплектом средств разработки Windows Azure SDK.
План лекции:
1 Установка Windows Azure SDK
2 Состав Development Fabric
3 Краткие итоги:
Ключевые слова: Windows, SDK, интерфейс, cloud, fabric, storage, операции, development,
net, SQL, ASP, HTTP, IIS, Windows Server, Windows Vista, Visual Studio, tools, cloud
service, new, CPU, стоимость, Solution Explorer, пространство, шаблон, default, BLOB,
массив, инструментарий, client, ADO, класс, microsoft, приложение, samples, ZIP, права,
запись, Директория, минимум, доступ, файл, значение, hosting service, TCP, конфликт.
Содержание лекции:
1 Установка Windows Azure SDK
Windows Azure SDK предоставляет разработчикам интерфейс программирования
приложений, необходимый для разработки, развертывания и управления масштабируемых
сервисов в Windows Azure.
Рис. 1. Создание нового проекта Cloud Service в Visual Studio
Azure Cloud Fabric и службы Azure Storage не поддерживают разработку или
отладочные операции в облаке, поэтому Azure SDK позволяет делать это локально в виде
приложений Development Fabric (DF) и Development Storage (DS), которые устанавливает
Windows Azure SDK. Вместе с SDK также устанавливаются коллекция приложений
примеров и библиотеки упакованных классов для облегчения программирования
приложений.
Должны быть установлены .NET Framework 3.5 SP1 и SQL Express 2005 или 2008,
также необходимо включить ASP.NET и WCF HTTP Activation для IIS 7.0 для Windows
Server 2008, Windows Vista SP2, или Windows 7 RC или позже для установки и запуска
SDK. Заметки к выпуску включают инструкции для настройки этих опций. Использование
SDK не является обязательным, потому что есть возможность пользоваться любыми
операционными системами и языками программирования, которые поддерживают HTTP
запросы и ответы. Однако, вы увидите что использование SDK интерфейсов прикладного
программирования .NET и библиотек для приложений и хранилищ позволяет наиболее
просто работать с HTTP напрямую.
Рис. 2. Solution Explorer Cloud Service
После того, как вы установили Azure SDK, Вы должны скачать и установить
инструменты Windows Azure для Visual Studio для добавления шаблонов проектов Web
Cloud Sevice, Worker Cloud Service, Web and Worker Cloud Service Workflow Service. Вы
можете скачать текущую версию Windows Azure SDK и Windows Azure Tools для Visual
Studio с главной страницы Windows Azure по ссылке
www.microsoft.com/azure/windowsazure.mspx.
После установки Windows Azure Tools в Visual Studio появляются шаблоны Cloud
Service в диалоге создания нового проекта. При выборе узла Cloud Service открываются
New Cloud Service, который позволяет добавить ASP.NET Web Roles, Worker Roles или
CGI Web Roles для нового проекта. Windows Azure SDK позволяет добавить более чем
одну роль для каждого типа Cloud Service. Каждая роль использует отдельный экземпляр
Windows Azure CPU, так минимальная стоимость запуска проекта в облаке будет
примерно 4 * $0.12 = $0.48 в час.
Добавив указанные роли и нажав ОК, откроется новое решение с проектами
WebRole и Worker-Role в Solution Explorer как показано на рис. 2.
Узел Roles содержит элементы WebRole, которые указывают на каждую WebRole,
которая обеспечивает пользовательский интерфейс ASP.NET для приложения и каждый
WorkerRole для вычислительный операций, которые не требуют пользовательского
интерфейса или используют страниц ASP.NET WebRole вместо этого.
В зависимости от типа Cloud Service проекты включают пространство имен
Microsoft.ServiceHosting.ServiceRuntime, которое содержит классы, указанные в таблице
ниже.
Класс Описание
RoleEntryPoint Обеспечивает методы для управления инициализацией, запуском и
остановкой методов сервиса, так же используется для мониторинга
состояния сервиса.
RoleException Сообщает об ошибках когда происходят недопустимые операции внутри
роли
RoleManager Обеспечивает методы для журналирования сообщений и поступающих
предупреждений, извлекает настройки конфигурации сервиса и
возвращает местоположение ресурса
RoleStatus Информирует о текущем статусе роли: Healthy, NonExistent, Started,
Starting, Stopped, Stopping или Unhealthy
Проекты, которые используют шаблон WebRole определяют веб страницу
ASP.NET Default.aspx как начальную точку для пользовательского интерфейса
приложения в облаке.
Это сервис объединяет библиотеку класса Common из приложения-образца
HelloFabric для содействия в журналировании проблем приложения. Журналы
приложения – это практичные средства откладки приложений, запущенных в Cloud Fabric.
Для чтения журналов, вы должны скопировать их в Blob массив использую
инструментарий портала.
Образец проекта StorageClient включает библиотеку класса StorageClient, которая
обеспечивает в объединении с библиотекой .NET Client для сервиса данных ADO.NET,
интерфейсный класс Microsoft .NET для HTTP операций над Azure Blob, Queue и Table
Storage сервисами. Этот проект также включает консольное приложение, которые
позволяет Вам тестировать возможности библиотеки. Консольное приложение C#
запускается в Development Fabric с Development Storage.
При установке Windows Azure SDK не устанавливаются образцы приложений,
которые включены в Program Files\Microsoft Windows Azure SDK\v1.0\samples.zip.
Установите образцы, разархивировав samples.zip в директорию, где Вы имеете права на
запись. В таблице ниже можно найти описание некоторых образцов приложений.
Для запуска примера CloudDrive необходим PowerShell.
Директория, в которую было извлечено содержимое архива samples.zip также
содержит следующие три пакетных файла (cmd), которые можно запустить из командной
строки:
buildall.cmd строит все образцы проектов без использования Visual Studio:
createtables.cmd вызывает buildall.cmd и создает базу данных и таблицы,
необходимые для образцов, которые используют Table Storage.
rundevstore.cmd вызывает createtables.cmd и запускает разработку хранилища,
размещая его в базе данных, созданной createtables.cmd.
Рис. 3. Сообщения, отображаемые нажатии правой кнопкой мыши по значку Development
Fabric в области уведомлений панели задач
2 Состав Development Fabric
В состав Development Fabric входят следующие исполняемые файлы: DFAgent.exe ,
DFLoadBalancer.exe, DFMonitor.exe и DFService.exe, которые по умолчанию
устанавливаются программой установки Azure SDK в каталог \Program Files\Windows
Azure SDK\v1.0\bin\devfabric. После запуска Development Fabric в диспетчере задач вы
можете увидеть эти четыре процесса. Сделать это можно выполнив:
Выберите Программы\Windows Azure SDK\Development Fabric для запуска службы
Development Fabric и его пользовательского интерфейса DFUI.exe
Правый щелчок мыши по значку Development Fabric в области уведомлений панели
задач и выбрать запуск службы Development Fabric ( рис. 3)
Скомпилировать и запустить приложение Azure в Visual Studio.
Рис. 4. Пользовательский интерфейс приложения Development Fabric
Рис. 4 показывает пользовательский интерфейс DFUI. Когда вы запускаете или
останавливаете отладку, соответствующие приложения появляются или пропадают из
пользовательского интерфейса DFUI.
Платформа Windows Azure поддерживает три типа масштабируемых хранилищ:
o Неструктурированные данные (blob)
o Структурированные данные (таблицы)
o Сообщение между приложениями и сервисами (очереди)
Запуская rundevstore.exe или собирая и запуская пользовательский код Azure в
Visual Studio, запускаются все три сервиса, даже если Ваш проект требует только один
сервис и отображается в пользовательском интерфейсе Development Storage
Для защиты от потери данных, облако Azure хранит блобы, таблицы и очереди в
минимум трех раздельных контейнерах в одном центре обработки данных. Инструмент
геолокации Azure позволяет дублировать данные в нескольких центрах обработки данных
Microsoft для уменьшения последствий восстановления после катастроф и для повышения
производительности в специфичных географических регионах.
Приложение Azure, которые Вы запускаете в Development Framework, могут иметь
доступ к локальным данным в Development Storage или к данным, загруженным в облако
Azure. Приложение обращается к определенному порту и данным, расположенным в
определенных местах в файле конфигурации проекта ServiceConfiguration.cscfg.
Файл конфигурации проекта Azure ServiceDefinition.csdef определяет стандартные
точки входа и настройки конфигурации, которые хранятся в файле
ServiceConfiguration.cscfg. В распечатке показано содержимое файла
ServiceDefinition.csdef по умолчанию, когда Вы создаете проект Azure, используя один из
стандартных шаблонов Windows Azure Tools для Visual Studio (отмечены важные
значения).
<ServiceDefinition name="SampleWebCloudService"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole">
<InputEndpoints>
<!-- Must use port 80 for http and port 443 for https
when running in the cloud -->
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</InputEndpoints>
<ConfigurationSettings>
<Setting name="AccountName"/>
<Setting name="AccountSharedKey"/>
<Setting name="BlobStorageEndpoint"/>
<Setting name="QueueStorageEndpoint"/>
<Setting name="TableStorageEndpoint"/>
</ConfigurationSettings>
</WebRole>
</ServiceDefinition>
Листинг 1. Содержимое файла ServiceDefinition.csdef
Значение InputEndpoint применяется только для хранилищ в облаке.
Распечатка 2 показывает содержимое файла ServiceConfiguration.cscfg для веб
приложения SampleWebCloudService с конфигураций по умолчанию для Development
Storage (выделено):
<?xml version="1.0"?>
<ServiceConfiguration serviceName="SampleWebCloudService"
xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
<Role name="WebRole">
<Instances count="1"/>
<ConfigurationSettings> <Setting name="AccountName" value="devstoreaccount1"/>
<Setting name="AccountSharedKey" value="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ
1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/>
<Setting name="BlobStorageEndpoint" value="http://127.0.0.1:10000/"/>
<Setting name="QueueStorageEndpoint" value="http://127.0.0.1:10001/"/>
<Setting name="TableStorageEndpoint" value="http://127.0.0.1:10002/"/>
<!--<Setting name="AccountName" value="oakleaf"/>
<Setting name="AccountSharedKey" value="3elV1ndd . . . Coc0AMQA==" />
<Setting name="BlobStorageEndpoint"
value="http://blob.core.windows.net" />
<Setting name="QueueStorageEndpoint"
value="http://queue.core.windows.net" />
<Setting name="TableStorageEndpoint"
value="http://table.core.windows.net" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
Листинг 5.2. Содержимое файла ServiceConfiguration.cscfg
Описания элементов файла конфигурации ServiceConfiguration.csfg:
Instances count – количество экземпляров вашего приложения, которое будет создано в
облаке, когда вы развернете его.
AccountName– имя, ассоциированное с Вашим Hosted Service, с которым вы создавали
учетную запись, для Development Storage это devstoreaccount1.
AccountSharedKey шифрует несколько элементов в HTTP запросе.
BlobStorageEndpoint– это публичный постоянный Universal Resource Identifier (URI). Для
Developer Storage это адрес интерфейса компьютера loopback (localhost = 127.0.0.1) с TCP
портом по умолчанию 10000.
QueueStorageEndpoint для хранилища в облаке это публичный постоянный URI. Для
Developer Storage это адрес интерфейса компьютера loopback с TCP портом по умолчанию
10001.
TableStorageEndpoint публичный постоянный Universal Resource Identifier (URI). Для
Developer Storage это адрес интерфейса компьютера loopback с TCP портом по умолчанию
10002.
Значения конечных точек в пользовательском интерфейсе Development Storage
представлены на рисунке 5. Вы можете настроить собственные номера TCP портов если
при использовании значений по умолчанию возникает конфликт с текущей
конфигурацией.
Рис. 5
3 Краткие итоги:
В данной лекции мы получили первоначальные сведения о работе с Windows Azure
SDK. Рассмотрели процедуру создание Cloud Service, пользовательский интерфейс
Development Fabric
Лекция 14. Azure Services Platform
Цель лекции: Платформа Windows Azure – это модель Платформа как Сервис, которая
предполагает запуск приложений на серверах и связанной сетевой инфраструктуре,
размещенной в центрах обработки данных Microsoft и имеющей доступ в Интернет. В
ходе данной лекции мы рассмотрим основные узлы и компоненты данной платформы.
Цель данной лекции – получить представление об архитектуре Windows Azure.
План лекции:
1 Архитектура Windows Azure Platform
2 Windows Azure Storage
Azure Table Services
Пример
3 Краткие итоги:
4 Ключевые термины
Ключевые слова: представление, Windows, запуск, microsoft, доступ, Интернет,
Виртуализация, Windows Server, SDK, API, Visual Studio, net, опыт, ASP, communication,
Internet, information, IIS, security, pipe, ruby, PHP, python, SOAP, HTTP, XML, atom, COM,
live, ID, technical, CTP, SQL, токен, запись, service, storage, connect, hosting service, SAN,
производительность, GUID, resource, token, список, email, tools, AND, приложение, секция
таблицы, потенциальный ключ, схема секционирования, Нагрузочное тестирование, table,
абстракция.
Содержание лекции:
1 Архитектура Windows Azure Platform
Платформа Windows Azure – это модель Платформа как Сервис, которая
предполагает запуск приложений на серверах и связанной сетевой инфраструктуре,
размещенной в центрах обработки данных Microsoft и имеющей доступ в Интернет.
Платформа состоит из мастшабируемой "облачной" операционной системы, фабрики
хранения данных и связанных сервисов доставки через физические или логические
(виртуализация) экземпляры Windows Server 2008. Комплект средств разработки Windows
Azure (SDK) обеспечивает разработку версии "облачных сервисов", также хорошо, как
инструменты и интерфейсы прикладного программирования (API), необходимые для
разработки, разворачивания и управления масштабируемых сервисов в Windows Azure,
включая шаблоны приложений Azure для Visual Studio 2008 и 2010. На рисунке 6.1
изображены компоненты основа "облачной" платформы и компоненты разработчика.
Согласно Microsoft, при использовании Azure Вы получаете:
o Адаптация существующих приложений для работы с веб сервисами;
o Построение, изменение и распределение приложений в Сети с минимальными
локальными ресурсами;
o Выполняют услуги, таких как хранение больших объемов данных, пакетная
обработка данных, вычисления больших объемов данных, и так далее;
o Создание, тестирование, отладка и распределение веб сервисов быстро и недорого;
o Снижение стоимости и рисков построения и распространения местных ресурсов;
o Снижение затрат и усилий на ИТ управление;
Экономическая обстановка Microsoft во время выпуска платформы Azure
акцентировала внимание на снижении затрат, что является основным поводом для
использования Azure мелкими, средними и крупными ИТ отделами.
Рис. 1. Компоненты платформы Windows Azure и Комплекта средств разработки
Microsoft разработали платформу Azure, позволив .NET разработчикам усилить их
опыт создания в Visual Studio 2008 (и выше) ASP.NET веб приложений и Windows
Communication Framework (WCF) сервисов. Проекты веб приложений запускаются в
изолированной версии Internet Information Services (IIS) 7. Веб приложения и веб сервисы
запускаются в частично доверенном механизме защиты, позволяющем ограничивать
доступ коду к ресурсам компьютера (Code Access Security), который приблизительно
соответсвует среднему уровню доверия ASP.NET и ограничивает доступ к некоторым
ресурсам операционной системы. Комплект средств разработки Windows Azure (Март
2009) позволяет использоваться полный доступ к ресурсам компьютера для запуска не
.NET кода, использования .NET библиотек, которые требуют полного доверия и процесс
обработки взаимодействия, используя программные каналы (Pipe). Microsoft обещает
поддержку запуска программного кода Ruby, PHP и Python в "облачной" платформе.
Исходный вариант платформы разработки был ограничен средой программирования
Visual Studio 2008 и выше с планом на поддержку инструментов Eclipse. Платформа
Windows Azure поддерживает веб стандарты и протоколы включая SOAP, HTTP, XML,
Atom и AtomPub.
Исходной точкой входа для разработчиков Azure для размещения ASP.NET
приложений в облако является портал Windows Azure по адресу
https://windows.azure.com/Cloud/Provisioning/Default.aspx. Портал требует входа с
использованием Windows Live ID. Предварительная версия Azure (Community Technical
Previews , CTPs) требует разных токенов для:
Windows Azure, которая включает:
o Azure Hosted service;
o Storage Accounts;
SQL Azure Live службы, которые включают:
o Live Framework: Предварительная версия;
o Live Services: существующие интерфейсы прикладного программирования.
Live сервисы: существующие интерфейсы прикладного программирования не
являются частью предварительной версии и не требуют токена. С начала 2009 года
Windows Azure токен дает право на одну учетную запись Hosted Service, две учетные
записи для Storage. Вы запрашиваете токены Azure через страницу Microsoft Connect, на
которую можно попасть со страницы портала.
На рисунке 1 показана страница учетной записи, которая содержит ссылки на
страницы настроек и управления SQL Azure, сервисами .NET и Live сервисами. Эта
страница также позволяет вам получать Azure и Live Framework CTP токены. Страница
Live Alerts позволяет настроить, как и когда получать сообщения, содержащие
критические сигналы приложения, информационные бюллетени и обновления портала.
Предварительная версия марта 2009 года включает геолокацию, которая позволяет
владельцам учетных записей выбрать центры обработки данных для расположения Hosted
Services и Storage Accounts. Например, USA-Northwest (Quincy, WA) и USA-Southeast (San
Antonio, TX.). Вы можете добавить наборы Hosted Services и Storage Accounts в группу,
чтобы гарантировать, что сервисы и хранилище располагаются в одном и том же центре
обработки данных, для того, чтобы увеличить производительность.
Вы можете вставить GUID полученные в сообщении от члена команды Azure в
текстовое окно Resource Token ID и нажать Claim Token для добавление еще одной или
больше точки входа для подходящего объекта или нескольких объектов в список.
Если вы хотите разрабатывать веб сайты с поддержкой Live Framework или Mesh
(программный комплекс для синхронизации данных в кроссплатформенных средах
разработанный компанией Microsoft) веб приложений, необходимо запросить токен Live
Framework по email
[email protected]. После того, как вы получите Live Framework
токен, вы можете скачать и установить текущие версии Live Framework SDK и Live
Framework Tools для Visual Studio по ссылкам указанным на странице
http://dev.live.com/liveframework/sdk/. Вы должны оплатить Live Framework токен для того,
чтобы скачать Live SDK и дополнительные инструменты. Нет необходимости
использовать учетную запись Windows Azure для тестирования Azure Hosted Services and
Storage Services, потому что платформа разработки Azure эмулирует "облачные" сервисы
Azure на вашем компьютере.
2 Windows Azure Storage
Хранилище Windows Azure Storage обеспечивает разработчикам возможность
хранения данных в облаке. Приложение может выполнять доступ к своим данным в
любой момент времени из любой точки планеты, хранить любой объем данных и как
угодно долго. При этом данные гарантированно не будут повреждены и утеряны. Windows
Azure Storage предлагает богатый набор абстракций данных:
o Windows Azure Table – обеспечивает структурированное хранилище состояний
сервиса.
o Windows Azure Blob – обеспечивает хранилище больших элементов данных.
o Windows Azure Queue – обеспечивает диспетчеризацию асинхронных заданий для
реализации обмена данными между сервисами.
Azure Table Services
Windows Azure Table - структурированное хранилище, которе поддерживает
высокомасштабируемые таблицы в облаке, которые могут содержать миллиарды
сущностей и терабайты данных. По мере увеличения трафика, система будет эффективно
масштабироваться, автоматически подключая тысячи серверов. Структурированное
хранилище реализовано в виде таблиц (Tables), в которых располагаются сущности
(Entities), содержащие ряд именованных свойств (Properties). Вот некоторые из основных
характеристик Windows Azure Table:
o Поддержка LINQ, ADO .NET Data Services и REST.
o Контроль типов во время компиляции при использовании клиентской библиотеки
ADO .NET Data Services.
o Богатый набор типов данных для значений свойств.
o Поддержка неограниченного количества таблиц и сущностей без ограничения
размеров таблиц.
o Поддержка целостности для каждой сущности.
o Нежесткая блокировка при обновлениях и удалениях.
o Для запросов, выполнение которых требует длительного периода времени, или
запросов, прерванных по завершению времени ожидания, возвращаются частичные
результаты и маркер продолжения
Рассмотрим модель данных таблицы Windows Azure Table:
o Учетная запись хранилища (Storage Account) – для доступа к Windows Azure
Storage приложение должно использовать действительную учетную запись. Новую
учетную запись можно создать через веб-интерфейс портала Windows Azure. Как
только учетная запись создана, пользователь получает 256-разрядный секретный
ключ, который впоследствии используется для аутентификации запросов этого
пользователя к системе хранения. В частности, с помощью этого секретного ключа
создается подпись HMAC SHA256 для запроса. Эта подпись передается с каждым
запросом данного пользователя для обеспечения аутентификации. Имя учетной
записи входит в состав имени хоста в URL. Для доступа к таблицам используется
следующий формат имени хоста: <имяУчетнойЗаписи>.table.core.windows.net.
o Таблица (Table) – содержит набор сущностей. Область действия имен таблиц
ограничена учетной записью. Приложение может создавать множество таблиц в
рамках учетной записи хранилища.
o Сущность (строка) (Entity (Row)) – Сущности (сущность является аналогом
"строки") – это основные элементы данных, хранящиеся в таблице. Сущность
включает набор свойств. В каждой таблице имеется два свойства, которые
образуют уникальный ключ для сущности.
o Свойство (столбец) (Property (Column)) – Представляет отдельное значение
сущности. Имена свойств чувствительны к регистру. Для значений свойств
поддерживается богатый набор типов.
o Ключ секции (PartitionKey) – Первое свойство ключа каждой таблицы. Эта система
использует данный ключ для автоматического распределения сущностей таблицы
по множеству узлов хранения.
o Ключ строки (RowKey) – Второе свойство ключа таблицы. Это уникальный ID
сущности в рамках секции. PartitionKey в сочетании с RowKey уникально
идентифицирует сущность в таблице.
o Временная метка (Timestamp) – Каждая сущность имеет версию, сохраняемую
системой.
o Секция (Partition) – Набор сущностей в таблице с одинаковым значением ключа
секции.
o Порядок сортировки (Sort Order) – Для CTP-версии предоставляется всего один
индекс, в котором все сущности сортированы по PartitionKey и затем по RowKey.
Это означает, что запросы с указанием этих ключей будут более эффективными, и
все возвращаемые результаты будут сортированы по PartitionKey
Таблица имеет гибкую схему. Windows Azure Table отслеживает имя и
типизированное значение каждого свойства каждой сущности. Приложение может
моделировать фиксированную схему на стороне клиента, обеспечивая одинаковый набор
свойств для всех создаваемых сущностей.
Рассмотрим некоторые дополнительные сведения о сущностях:
o Сущность может иметь до 255 свойств, включая обязательные системные свойства:
PartitionKey, RowKey и Timestamp. Имена всех остальных свойств сущностей
определяются приложением.
o Свойства PartitionKey и RowKey строкового типа.
o Свойство Timestamp является доступным только для чтения обслуживаемым
системой свойством, которое должно рассматриваться как непрозрачное свойство.
o Отсутствие фиксированной схемы – Windows Azure Table не сохраняет никакой
схемы, поэтому все свойства хранятся как пары <имя, типизированное значение>.
Это означает, что свойства сущностей одной таблицы могут сильно отличаться. В
таблице даже может быть две сущности, свойства которых имеют одинаковые
имена, но разные типы значений.
o Суммарный объем всех данных сущности не может превышать 1 МБ. Сюда входит
размер имен свойств, а также размер значений свойств или их типов, включая и два
обязательных свойства ключей (PartitionKey и RowKey).
o Поддерживаются типы Binary, Bool, DateTime, Double, GUID, Int, Int64, String.
Ограничения представлены в таблице ниже.
Таблица 1.
Тип свойства Описание
Binary Массив байтов размером до 64 КБ
Bool Булево значение
DateTime 64-разрядное значение, представляющее время в формате UTC.
Поддерживаемый диапазон значений: от 1/1/1600 до 12/31/9999
Double 64-разрядное значение с плавающей точкой
GUID 128-разрядный глобально уникальный идентификатор
Int 32-разрядное целое значение
Int64 64-разрядное целое значение
String 16-разрядное UTF-кодированное значение. Размер строковых
значений может быть до 64 КБ.
Windows Azure Table обеспечивает возможность масштабирования таблиц до тысяч
узлов хранения через распределение сущностей в таблице. При распределении сущностей
желательно обеспечить, чтобы сущности, входящие в одно множество, располагались в
одном узле хранения. Приложение формирует эти множества соответственно значениям
свойства PartitionKey сущностей.
Рис. 2. Примеры секций
Приложениям должна быть известна рабочая нагрузка каждой отдельно взятой
секции. Для обеспечения желаемых результатов тестирование должно моделировать
максимальную рабочую нагрузку.
На рисунке 2 представлена таблица, содержащая множество версий документов.
Каждая сущность данной таблицы соответствует определенной версии определенного
документа. В этом примере ключом секции таблицы является имя документа, и ключом
строки – номер версии. Имя документа и версия уникально идентифицируют каждую
сущность таблицы. В данном примере секцию образуют все версии одного документа.
Хорошая масштабируемость системы хранения достигается за счет распределения
секций по множеству узлов хранения.
Система отслеживает характер использования секций и автоматически равномерно
распределяет эти секции по всем узлам хранения. Это позволяет системе и приложению
масштабироваться соответственно количеству запросов к таблице. То есть если некоторые
секции запрашиваются больше других, система автоматически разнесет их на несколько
узлов хранения, таким образом, распределяя трафик между множеством серверов. Однако
секция, т.е. все сущности, имеющие одинаковый ключ секции, будут обслуживаться как
один узел. Но даже несмотря на это, объем данных в рамках секции не ограничен
емкостью хранилища одного узла хранения.
Сущности одной секции хранятся вместе. Это обеспечивает наиболее эффективную
обработку запросов к секции. Более того, в этом случае приложение может использовать
все преимущества эффективного кэширования и других оптимизаций
производительности, обеспечиваемых расположением данных в секции.
В примере выше секцию образуют все версии одного документа. Таким образом,
для извлечения всех версий данного документа необходимо выполнить доступ всего к
одной секции. Чтобы получить все версии документов, измененные до 5/30/2007, придется
запрашивать несколько секций, что будет не так эффективно и более ресурсоемко,
поскольку по запросу должны будут проверяться все секции, которые к тому же могут
располагаться на разных узлах хранения.
Выбор ключа секции важен с точки зрения обеспечения эффективного
масштабирования приложения. При этом необходимо найти компромисс между
размещением сущностей в одной секции, что обеспечивает большую эффективность
запросов, и масштабируемостью таблицы, поскольку, чем больше секций в таблице, тем
проще для Windows Azure Table распределить нагрузку между множеством серверов.
Для наиболее частых и критичных по времени ожидания запросов PartitionKey
должен быть включен как часть выражения запроса. Запрос, в котором указан
PartitionKey, будет намного эффективнее, поскольку в этом случае просматриваются
сущности только одной секции. Если при выполнении запроса PartitionKey не указан, в
поисках необходимых сущностей просматриваются все секции таблицы, что значительно
снижает эффективность.
Далее представлены некоторые советы и рекомендации по выбору PartitionKey для
таблицы:
1. Прежде всего, выявите важные свойства таблицы. Это свойства, используемые в
условиях запросов.
2. Из этих важных свойств выберите потенциальные ключи.
o Из преобладающего запроса выберите свойства, используемые в условиях.
Важно понять, какой запрос будет преобладающим для приложения.
o Это будет исходный набор свойств ключей.
o Расставьте свойства ключей в порядке их значимости в запросе.
3. Проверьте, обеспечивают ли свойства ключей уникальную идентификацию
сущности? Если нет, включите в набор ключей уникальный идентификатор.
4. Если имеется только одно свойство ключа, используйте его в качестве PartitionKey.
5. Если имеется только два свойства ключей, первое используйте как ParitionKey и
второе – как RowKey.
6. При наличии более двух свойств ключей можно попытаться распределить их в две
группы: первая группа будет PartitionKey, и вторая – RowKey. При таком подходе
приложение должно знать, что PartitionKey, например, состоит из двух ключей,
разделенных "-".
Теперь, когда приложение имеет набор потенциальных ключей, необходимо
убедиться, что выбранная схема секционирования является масштабируемой:
1. Исходя из статистических данных интенсивности использования приложения,
определите, не приведет ли секционирование по выбранному выше PartitionKey к
созданию слишком загруженных секций, которые не смогут эффективно
обслуживаться одним сервером? Проверить это можно, применив нагрузочное
тестирование секции таблицы. Для этого в тестовой таблице создается секция
соответственно выбранным ключам. Она подвергается пиковой нагрузке,
полученной исходя из предполагаемых полезной нагрузки и запросов. Это
позволяет проверить, может ли секция таблицы обеспечить необходимую
производительность приложения.
2. Если секция таблицы проходит нагрузочное тестирование, ключи выбраны
правильно.
3. Если секция таблицы не проходит нагрузочного тестирования, найдите ключ
секции, который обеспечил бы более узкое подразделение сущностей. Это можно
сделать через объединение выбранного ключа секции со следующим свойством
ключа, или выбрав в качестве ключа секции другое важное свойство. Целью этой
операции должно быть создание большего количества секций, чтобы не возникало
одной слишком большой или слишком загруженной секции.
4. Система спроектирована так, что обеспечивает необходимое масштабирование и
обработку большого количества запросов. Но при чрезвычайно высокой
интенсивности запросов ей приходится выполнять балансировку нагрузки, в
результате чего некоторые из запросов могут завершаться ошибкой превышения
времени ожидания. Сократить или устранить ошибки такого рода может снижение
интенсивности запросов. Вообще говоря, такие ошибки возникают редко; однако
если вы столкнулись с частыми или неожиданными ошибками превышения
времени ожидания, свяжитесь с нами через сайт
MSDN, мы обсудим, как оптимизировать использование Windows Azure Table и
предотвратить возникновение таких ошибок в вашем приложении.
Также можно проанализировать расширяемость выбранных ключей, особенно если
на момент их выбора нет точных сведений о характеристиках пользовательского трафика.
В этом случае важно выбирать ключи, которые можно легко расширять для обеспечения
более тонкого секционирования. Далее в данном документе приводится подробный
пример этого.
Для таблиц и сущностей поддерживаются следующие базовые операции:
o Создание таблицы или сущности.
o Извлечение таблицы или сущности с применением фильтров.
o Обновление сущности (но не таблицы).
o Удаление таблицы или сущности.
Для работы с таблицами в .NET-приложении можно просто использовать
ADO.NET Data Services.
В следующей таблице приведен список предлагаемых API. Поскольку применение
ADO.NET Data Services в итоге сводится к передаче REST-пакетов, приложения могут
использовать REST напрямую. Кроме того, что REST обеспечивает возможность доступа
к хранилищу посредством не-.NET языков, он также позволяет реализовывать более
тонкое управление сериализацией/десериализацией сущностей, что пригодится при работе
с такими сценариями, как наличие разных типов сущностей или более чем 255 свойств в
таблице и т.д.
Пример
В приведенных ниже примерах описываются операции с таблицей "Blogs". В этой
таблице хранятся блоги для приложения MicroBlogging.
В приложении MicroBlogging есть две таблицы: Channels (Каналы) и Blogs (Блоги).
Имеется список каналов, блоги публикуются в определенном канале. Пользователи
подписываются на каналы и ежедневно получают новые блоги этих каналов.
В данном примере рассмотрим только таблицу Blogs и приведем примеры
следующих операций с ней:
1. Описание схемы таблицы
2. Создание таблицы
3. Вставка блога в таблицу
4. Получение списка блогов из таблицы
5. Обновление блога в таблице
6. Удаление блога из таблицы
Схема таблицы описывается как C#-класс. Такую модель использует ADO.NET
Data Services. Схема известна только клиентскому приложению и упрощает доступ к
данным. Сервер схему не применяет.
Рассмотрим описание сущностей Blog, хранящихся в таблице Blogs. Каждая
сущность блога содержит следующие данные:
1. Имя канала (ChannelName) – канал, в котором размещается блог.
2. Дата размещения.
3. Текст (Text) – содержимое тела блога.
4. Рейтинг (Rating) – популярность этого блога.
Во-первых, обратите внимание, что для таблицы определен PartitionKey,
представляющий имя канала, частью которого является блог, и в качестве RowKey
используется дата размещения блога. PartitionKey и RowKey – ключи таблицы Blogs, они
объявляются посредством атрибута класса DataServiceKey (Ключ сервиса данных). То
есть таблица Blogs секционирована по именам каналов (ChannelName). Это позволяет
приложению эффективно извлекать самые недавние блоги канала, на который подписан
пользователь. Кроме ключей, в качестве свойств объявлены характерные для пользователя
атрибуты. Все свойства имеют открытые (public) методы считывания и присвоения
значения и хранятся в таблице Windows Azure Table. Итак, в примере ниже:
o Text и Rating хранятся для экземпляра сущности в таблице Azure.
o RatingAsString нет, потому что для него не определен метод присвоения значения.
o Id не хранится, потому что методы доступа не public.
[DataServiceKey("PartitionKey", "RowKey")]
public class Blog
{
// ChannelName
public string PartitionKey { get; set; }
// PostedDate
public string RowKey { get; set; }
// Определяемые пользователем свойства
public string Text { get; set; }
public int Rating { get; set; }
public string RatingAsString { get; }
protected string Id { get; set; }
}
Далее рассмотрим, как создать таблицу Blogs для учетной записи хранилища.
Создание таблицы аналогично созданию сущности в основной таблице "Tables". Эта
основная таблица определена для каждой учетной записи хранилища, и имя каждой
таблицы, используемой учетной записью хранения, должно быть зарегистрировано в
основной таблице. Описание класса основной таблицы приведено ниже, где свойство
TableName (Имя таблицы) представляет имя создаваемой таблицы.
[DataServiceKey("TableName")]
public class TableStorageTable
{
public string TableName { get; set; }
}
Фактическое создание таблицы происходит следующим образом:
// Uri сервиса: "http://<Account>.table.core.windows.net/"
DataServiceContext context = new DataServiceContext(serviceUri);
TableStorageTable table = new TableStorageTable("Blogs");
// Создаем новую таблицу, добавляя новую сущность
// в основную таблицу "Tables"
context.AddObject("Tables", table);
// результатом вызова SaveChanges является отклик сервера
DataServiceResponse response = context.SaveChanges();
serviceUri – это uri сервиса таблицы, http://<Здесь указывается имя учетной
записи>.table.core.windows.net/. DataServiceContext (Контекст сервиса данных) – один из
основных классов сервиса данных ADO.NET, представляющий контекст времени
выполнения для сервиса. Он обеспечивает API для вставки, обновления, удаления и
запроса сущностей с помощью либо LINQ, либо RESTful URI и сохраняет состояние на
стороне клиента.
Рассмотрим вставку элемента Blog. Чтобы вставить сущность, приложение должно
выполнить следующее.
1. Создать новый C#-объект и задать все свойства.
2. Создать экземпляр DataServiceContext, который представляет подключение к
серверу в сервисе данных ADO .NET для вашей учетной записи хранилища.
3. Добавить C#-объект в контекст.
4. Вызвать метод SaveChanges (Сохранить изменения) объекта DataServiceContext для
отправки запроса серверу. Это обеспечивает отправку на сервер HTTP-запроса с
сущностью в XML-формате ATOM.
Далее представлены примеры кода для перечисленных выше операций:
Blog blog = new Blog {
PartitionKey = "Channel9", // ChannelName
RowKey = DateTime.UtcNow.ToString(), // PostedDate
Text = "Hello",
Rating = 3
};
serviceUri = new Uri("http://<account>.table.core.windows.net");
var context = new DataServiceContext(serviceUri);
context.AddObject("Blogs", blog);
DataServiceContext response = context.SaveChanges();
Запрос сущностей выполняется с помощью встроенного в C# языка запросов LINQ
(Language Integrated Query). В данном примере извлечем все блоги, рейтинг которых равен
3.
При обработке запроса (например, с помощью выражение foreach), он передается
на сервер. Сервер отправляет результаты в XML-формате ATOM. Клиентская библиотека
ADO .NET Data Services десериализует результаты в C#-объекты, после чего они могут
использоваться приложением.
var serviceUri = new Uri("http://<account>.table.core.windows.net");
DataServiceContext context = new DataServiceContext(serviceUri);
// LINQ-запрос с использованием DataServiceContext для выбора
// из таблицы Blogs всех сущностей блогов, для которых rating = 3
var blogs =
from blog in context.CreateQuery<blog>("Blogs")
where blogs.Rating == 3
select blog;
// запрос отправляется на сервер и выполняется
foreach (Blog blog in blogs) { }
Обновление сущности выполняется следующим образом.
1. Создается DataContext (Контекст данных), свойству MergeOption (Вариант
объединения) которого задается значение OverwriteChanges (Перезапись
изменений) или PreserveChanges (Сохранение изменений), как описывается в
разделе 4.8. Это обеспечивает правильную обработку ETag для каждого
извлекаемого объекта.
2. С помощью LINQ DataContext получает сущность, которая будет обновляться.
Извлечение ее с сервера гарантирует обновление ETag в сущностях,
отслеживаемых контекстом, и то, что при последующих обновлениях и удалениях
в заголовке if-match будет использоваться обновленный ETag. Меняем C#-объект,
представляющий сущность.
3. Возвращаем C#-объект в тот же DataContext для обновления. Использование того
же DataContext гарантирует автоматическое повторное использование ETag,
полученного ранее для этого объекта.
4. Вызываем метод SaveChanges для отправки запроса на сервер.
Blog blog =
(from blog in context.CreateQuery<blog>("Blogs")
where blog.PartitionKey == "Channel9"
&& blog.RowKey == "Oct-29"
select blog).FirstOrDefault();
blog.Text = "Hi there";
context.UpdateObject(blog);
DataServiceResponse response = context.SaveChanges();
Удаление Blog
Удаление сущности аналогично ее обновлению. Для этого извлекаем сущность с
помощью DataServiceContext и вызываем для содержимого вместо метода UpdateObject
метод DeleteObject (Удалить объект).
// Получаем объект Blog для ("Channel9", "Oct-29")
context.DeleteObject(blog);
DataServiceResponse response = context.SaveChanges();
Рассмотрим рекомендации по работе с DataServiceContext:
o Объект DataServiceContext не обеспечивает безопасность потоков, поэтому он не
может использоваться совместно разными потоками, а также имеет
непродолжительное время существования.
o DataServiceContext не является объектом с длительным временем жизни. Вместо
того, чтобы использовать один DataServiceContext в течение всей жизни потока,
рекомендуется создавать объект DataServiceContext каждый раз, когда возникает
необходимость выполнить ряд транзакций с WindowsAzureTable, и затем удалять
этот объект.
o Если для всех вставок/обновлений/удалений используется один экземпляр
DataServiceContext и возникает сбой при выполнении SaveChanges, сведения об
операции, давшей сбой, сохраняются в DataServiceContext. При последующем
вызове SaveChanges попытка выполнить эту операцию повторяется.
o DataServiceContext имеет свойство MergeOption, которое используется для
управления тем, как DataServiceContext обрабатывает отслеживаемые сущности.
Возможные значения:
AppendOnly (Только добавление): Это значение по умолчанию, при
использовании которого DataServiceContext не загружает экземпляр
сущности с сервера, если он уже имеется в его кэше.
OverwriteChanges: DataServiceContext всегда загружает экземпляр сущности
с сервера и перезаписывает предыдущий вариант сущности, т.е.
обеспечивает соответствие экземпляра сущности ее текущему состоянию.
PreserveChanges: Если экземпляр сущности существует в DataServiceContext,
он не загружается из постоянного хранилища. Все изменения, вносимые в
свойства объектов в DataServiceContext, сохраняются, но ETag обновляется,
поэтому данную опцию следует использовать при необходимости
восстановления после ошибок совместного доступа с нежесткой
блокировкой.
NoTracking (Без отслеживания): DataServiceContext не отслеживает
экземпляры сущностей. Обновление сущности в контексте без
отслеживания реализуется с помощью Etag, который обновляется
посредством AttachTo. Этот вариант не рекомендуется к применению.
context.AttachTo("Blogs", blog, "etag to use");
context.UpdateObject(blog);
context.SaveChanges();
Когда MergeOption контекста задано значение AppendOnly и объект
DataServiceContext уже отслеживает сущность в результате предыдущей операции
извлечения или добавления, повторное извлечение сущности с сервера не приведет к
обновлению отслеживаемой сущности в контексте. Таким образом, если сущность на
сервере была изменена, последующие обновления/удаления приведут к сбою
необходимых условий ( PreCondition ). В примере кода раздела 5 MergeOption задано
значение PreserveChanges, которое обеспечивает, что сущность будет загружаться с
сервера всегда.
Результатом всех рассматриваемых выше операций является передача HTTP-
сообщений на и с сервера. Приложение может отказаться от использования клиентской
библиотеки .NET и работать на уровне HTTP/REST.
Рассмотрим параллельные обновления. Для обновления сущности необходимо
выполнить следующие операции.
1. Получить сущность с сервера
2. Обновить объект локально и вернуть его на сервер.
Предположим, два процесса, выполняющихся параллельно, пытаются обновить
одну и ту же сущность. Поскольку шаги 1 и 2 не являются неделимыми, на любом из них
может возникнуть ситуация внесения изменений в уже устаревшую версию сущности. Для
решения этой проблемы Windows Azure Table использует нежесткую блокировку.
1. Для каждой сущности система сохраняет версию, которая изменяется сервером при
каждом обновлении.
2. При извлечении сущности, сервер отправляет эту версию клиенту в виде ETag
HTTP.
3. Когда клиент передает запрос UPDATE (обновить) на сервер, он отправляет на
него этот ETag в виде заголовка If-Match.
4. Если версия сущности, хранящаяся на сервере, аналогична ETag в заголовке If-
Match, изменение принимается, и хранящаяся на сервере сущность получает новую
версию. Эта новая версия возвращается клиенту как заголовок ETag.
5. Если версия сущности на сервере отличается от ETag в заголовке If-Match,
изменение отклоняется, и клиенту возвращается HTTP-ошибка "precondition failed"
(необходимое условие не выполнено).
При получении ошибки "precondition failed" типовым поведением клиентского
приложения будет повторение всей операции, как показано в фрагменте кода ниже.
1. Приложение должно извлечь этот объект снова, т.е. получить его последнюю
версию.
2. Обновить объект локально и вернуть его на сервер.
При использовании клиентской библиотеки .NET приложение получает HTTP-код
ошибки в виде исключения DataServiceRequestException.
В примере ниже два разных клиента выполняют один и тот же код для изменения
текста. Эти два клиента пытаются задать Text разные значения.
1. Они извлекают сущность. При этом для каждой сущности извлекается ETag,
например, "v1". Оба клиента полагают, что предыдущая версия сущности – "v1".
2. Каждый клиент локально обновляет свойство Text.
3. Каждый клиент вызывает методы UpdateObject и SaveChanges.
4. Каждый клиент отправляет на сервер HTTP-запрос с заголовком "If-Match: v1".
5. Запрос одного из клиентов попадает на сервер первым.
Сервер сравнивает заголовок If-Match с версией сущности. Они совпадают.
Сервер применяет изменение.
Версия сущности на сервере обновляется и становится "v2".
В качестве ответа клиенту отправляется новый заголовок "ETag:v2".
6. Далее на сервер поступает запрос другого клиента. На этот момент изменения
первого клиента уже применены.
Сервер сравнивает заголовок If-Match с версией сущности. Они не совпадают,
поскольку версия сущности уже изменена на "v2", тогда как в запросе
указывается версия "v1".
Сервер отклоняет запрос.
// Задаем такой вариант объединения, который обеспечивает
// сохранение обновлений, но позволяет обновление etag.
// По умолчанию применяется значение AppendOnly, при котором
// уже отслеживаемая сущность не перезаписывается значениями,
// полученными с сервера, в результате чего в случае изменения
// сущности на сервере используется недействительный etag.
context.MergeOption = MergeOption.PreserveChanges;
Blog blog =
(from blog in context.CreateQuery<blog>("Blogs")
where blog.PartitionKey == "Channel9"
&& blog.RowKey == "Oct-29"
select blog).FirstOrDefault();
blog.Text = "Hi there again";
try
{
context.UpdateObject(blog);
DataServiceResponse response = context.SaveChanges();
}
catch (DataServiceRequestException e)
{
OperationResponse response = e.Response.First();
if (response.StatusCode == (int)HttpStatusCode.PreconditionFailed)
{
// выполняем запрос объекта повторно, чтобы получить
// последний etag, и проводим обновление
}
}
Для безусловного обновления сущности приложение выполняет следующее:
1. Создает новый объект DataServiceContext или, в случае использования
существующего контекста, отсоединяет объект, как демонстрирует пример ниже.
2. Присоединяем сущность к контексту и используем "*" как новое значение ETag.
3. Обновляем сущность.
4. Вызываем SaveChanges.
// задаем опцию объединения, разрешающую перезапись,
// чтобы обеспечить возможность обновления отслеживаемой сущности
context.Detach(blog);
// Присоединяем сущность к контексту, используя имя таблицы, сущность,
// которая должна быть обновлена, и "*" как значение etag.
context.AttachTo("Blogs", blog, "*");
blog.Text = "Hi there again";
try
{
context.UpdateObject(blog);
DataServiceResponse response = context.SaveChanges();
}
catch (DataServiceRequestException e)
{
// Обработка ошибки, но в данном случае формировнание ошибки PreCondition
невозможно
}
Для запросов, которые могут возвращать большое количество результатов, система
обеспечивает два механизма:
1. Возможность получать первые N сущностей, используя LINQ-функцию Take(N).
2. Маркер продолжения, который обозначает место начала следующего множества
результатов.
Система поддерживает функцию возвращения первых N соответствующих запросу
сущностей. Например, если программа разрабатывается на .NET, для извлечения первых
N сущностей (в данном примере это первые 100 сущностей) можно использовать LINQ-
функцию Take(N).
serviceUri = new Uri("http://<account>.table.core.windows.net");
DataServiceContext svc = new DataServiceContext(serviceUri);
var allBlogs = context.CreateQuery<blog>("Blogs");
foreach (Blog blog in allBlogs.Take(100))
{
// выполняем некоторые операции с каждым блогом
}
Аналогичная функциональность поддерживается в интерфейсе REST через опцию
строки запроса $top=N. Например, запрос "GET http://<UriСервиса>/Blogs?$top=100"
обеспечил бы возвращение первых 100 сущностей, соответствующих запросу.
Фильтрация выполняется на сервере, поэтому в ответе клиенту может быть передано
максимум 100 сущностей.
1. В запросе указывается максимальное число сущностей, которое должно быть
возвращено.
2. Количество сущностей превышает максимально разрешенное сервером число
сущностей в ответе (в настоящее время это 1000 сущностей).
3. Общий размер сущностей в ответе превышает максимально допустимый размер
ответа (в настоящее время это 4МБ, включая имена свойств, но исключая xml-теги,
используемые для REST ).
4. На выполнение запроса требуется больше времени, чем заданный период ожидания
сервера (в настоящее время это 60 секунд)
В любом из этих случаев ответ будет включать маркер продолжения в виде
специального заголовка. Для запроса к вашим сущностям используются такие заголовки:
o x-ms-continuation-NextPartitionKey
o x-ms-continuation-NextRowKey
Если клиент получил эти значения, он должен передать их со следующим запросом
в виде опций HTTP-запроса; во всем остальном запрос остается неизменным. Это
обеспечит возвращение следующего набора сущностей, начинающегося с места,
обозначенного маркером продолжения.
Последующий запрос выглядит следующим образом:
http://<UriСервиса>/Blogs?<исходныйЗапрос>&NextPartitonKey=<некотороеЗначени
е>&NextRowKey=<другоеЗначение>
Это повторяется до тех пор, пока клиентом не будет получен ответ без маркера
продолжения, что свидетельствует об извлечении всех соответствующих запросу
результатов.
Маркер продолжения должен рассматриваться как непрозрачное значение. Оно
указывает на точку начала следующего запроса и может не соответствовать фактической
сущности в таблице. Если в таблицу добавляется новая сущность, так что Key (новая
сущность) > Key (последняя сущность, извлеченная запросом), но Key (новая сущность) <
"Маркера продолжения", тогда эта новая сущность не будет возвращена повторным
запросом, использующим маркер продолжения. Но новые сущности, добавленные так, что
Key(новая сущность) > "Маркера продолжения", войдут в результаты, возвращаемые
последующими использующими маркер продолжения запросами.
Теперь рассмотрим модель согласованности, обеспечиваемую Windows Azure
Table.
В рамках одной таблицы система обеспечивает гарантии транзакции ACID для всех
операций вставки/обновления/удаления для одной сущности.
Для запросов в рамках отдельной секции выполняется изоляция моментального
снимка. Запрос обеспечивается согласованным представлением секции с момента его
начала и в течение всей транзакции. Моментальный снимок обеспечивает следующее:
1. Отсутствие "грязного считывания". Транзакция не будет видеть
незафиксированные изменения, вносимые другими транзакциями, которые
выполняются параллельно. Будут представлены только те изменения, которые
были завершены до начала выполнения запроса на сервере.
2. Механизм изоляции моментального снимка позволяет производить чтение
параллельно с обновлением секции без блокирования этого обновления.
Изоляция моментального снимка поддерживается только в рамках секции и в
рамках одного запроса. Система не поддерживает изоляцию моментального снимка для
нескольких секций таблицы или других фаз запроса.
Приложения отвечают за сохранение согласованности между множеством таблиц.
В примере MicroBlogging использовалось две таблицы: Channels и Blogs.
Приложение выполняет согласование таблиц Channels и Blogs. Например, когда канал
удаляется из таблицы Channels, приложение должно удалить соответствующие блоги из
таблицы Blogs.
Сбои могут возникать в моменты синхронизации состояния множества таблиц.
Приложение должно уметь обрабатывать такие сбои и иметь возможность возобновлять
работу с момента, на котором она была прервана.
В предыдущем примере, когда канал удаляется из таблицы каналов, приложение
должно также удалить все блоги этого канала из таблицы Blogs. В ходе этого процесса
могут возникать сбои приложения. Для обработки таких сбоев приложение может
сохранять транзакцию в Windows Azure Queues, что позволяет пользователю возобновить
операцию удаления канала и всех его блогов даже в случае сбоя.
Вернемся к примеру с таблицами Channels и Blogs. Channels имеет следующие
свойства: Name (Имя) как PartitionKey, пустая строка как RowKey, Owner (Владелец),
CreatedOn (Дата создания). И Blogs имеет свойства Channel Name (Имя канала) как
PartitionKey, CreatedOn как RowKey, Title (Название), Blog, UserId. Теперь, когда канал
удален, необходимо обеспечить, чтобы все ассоциированные с ним блоги также были
удалены. Для этого выполняем следующие шаги:
1. Создаем очередь для обеспечения согласованности таблиц, назовем ее
"DeleteChannelAndBlogs" (Удаление каналов и блогов).
2. При поступлении запроса на удаление канала от роли веб-интерфейса, ставим в
созданную выше очередь элемент, определяющий имя канала.
3. Создаем рабочие роль, которые будут ожидать событие добавления элемента в
очередь "DeleteChannelAndBlogs".
4. Рабочая роль изымает элемент из очереди DeleteChannelAndBlogs, задавая для
извлеченного элемента очереди время невидимости в течение N секунд. При этом
элемент, определяющий имя канала, который должен быть удален, изымается.
Если роль работника удаляет элемент очереди в течение этих N секунд, данный
элемент будет удален из очереди. Если нет, элемент станет вновь видимым и
доступным для использования рабочей ролью. При извлечении элемента рабочая
роль делает следующее:
В таблице Channels помечает канал как недействительный, чтобы с этого
момента никто не мог выполнять чтение из него.
Удаляет из таблицы Blogs все записи, для которых PartitionKey = "имени
канала", указанному в элементе очереди.
Удаляет канал из таблицы Channels.
Удаляет элемент из очереди.
Возвращается.
Если в ходе выполнения, например, шага 4, возникает какой-либо сбой,
производится аварийное завершение рабочего процесса, при этом элемент очереди не
удаляется из нее. Таким образом, как только соответствующий элемент очереди станет
снова видимым (т.е. когда истечет время, заданное как время ожидания видимости), это
сообщение будет вновь извлечено из очереди рабочим процессом, и процесс удаления
возобновится с шага 4. Более подробно обработка очередей рассматривается в
документации Windows Azure Queue.
3 Краткие итоги:
В данной лекции мы ознакомились с одной из абстракций данных Windows Azure Storage -
Windows Azure Table. Это технология, которая обеспечивает структурированное
хранилище состояний сервиса.
4 Ключевые термины
Windows Azure Table – абстракция данных, которая обеспечивает структурированное
хранилище состояний сервиса.
Windows Azure Blob – абстракция данных, которая обеспечивает хранилище больших
элементов данных.
Windows Azure Queue – абстракция данных, которая обеспечивает диспетчеризацию
асинхронных заданий для реализации обмена данными между сервисами
Лекция 15. Microsoft® .NET Services
Цель лекции: Платформа Azure™ Services Platform представляет комплексную
стратегию, разработанную Microsoft для облегчения разработчикам задач по реализации
возможностей обработки данных в облаке. В ходе данной лекции нам предстоит
ознакомиться с технологиями Microsoft .NET Services. Так же в лекции производится
обзор NET Services SDK. Цель данной лекции – ознакомиться с технологиями Microsoft
.NET Services.
План лекции:
1 Microsoft® .NET Services
2 Краткие итоги:
3 Ключевые термины:
Ключевые слова: net, platform, SOAP, SDK, опыт, visual, portal, Java, ruby, ПО, COM, try,
регистрация, сайт, connect, Windows, SQL, Data, live, ID, CTP, пароль, меню, контейнер,
конечные, service, BUS, control, Windows Cardspace, информация, запись, интеграция,
архитектура, ESB, преобразование данных, программное обеспечение, шаблон,
управление доступом, присваивание, Internet, Интернет, NAT, обмен информацией, агент,
приложение, связь, динамическая, DNS, upnp, пользователь, имя пользователя, адрес,
браузер, диапазон, ACSE, интерфейс, операции, CRUD, create, retrieve, UPDATE,
DELETE, предметной области, консоль, обмен сообщениями, API, пул сервера, провайдер,
сервер, рабочий процесс, подмножество, стабильность, доверие, представление, Active,
directory, BLOB.
Содержание лекции:
1 Microsoft® .NET Services
.NET Services предоставляет основные стандартные блоки, которые понадобятся
при построении приложений в облаке и работающих с облаком для Azure™ Services
Platform.
Сервисы, собранные под именем .NET Services, обеспечивают инфраструктуру
облака, которая, в конечном счете, упрощает построение работающих в облаке
приложений.
Сегодня .NET Services обеспечивают основную функциональность, связанную с
возможностями подключения приложений, управления доступом и взаимодействия
посредством сообщений на базе рабочего процесса. Со временем они будут предоставлять
больший набор функций и среду на базе облака. На данный момент под именем .NET
Services объединены следующие основные блоки сервисов:
o Microsoft® .NET Service Bus: предоставляет сетевую инфраструктуру для
соединения приложений через Интернет с использованием разнообразных
шаблонов обмена сообщениями способом, обеспечивающим возможность
прохождения межсетевых экранов и NAT-устройств без нарушения безопасности,
предоставляемой этими устройствами.
o Microsoft® .NET Access Control Service: обеспечивает управление доступом в
облаке на основании утверждений. Он включает механизм преобразования
утверждений, который объединяется с поставщиками удостоверений, такими как
Active Directory и Windows Live ID (WLID). В будущих версиях будет реализована
интеграция с любыми поставщиками удостоверений.
o Microsoft® .NET Workflow Services: предоставляет инфраструктуру для
размещения и управления рабочими процессами (WF), уделяя основной внимание
взаимодействию через сообщения посредством .NET Service Bus. Поставляется с
новыми действиями WF и инструментами для размещения и управления
экземплярами рабочего процесса.
Данные новые сервисы можно рассматривать как .NET-инфраструктуру сервисов
для облака. Все они доступны через открытые протоколы и стандарты, включая REST,
SOAP, Atom/AtomPub и WS. Это означает, что разработчики на любой платформе могут
интегрироваться с этими сервисами.
Однако, в попытке сделать все максимально привычным для .NET-разработчиков,
Microsoft также предоставляет .NET Services SDK, который обеспечивает первоклассные
условия для .NET-разработчика и скрывает многие сложные моменты работы с сервисами.
.NET Services SDK позволяет разработчикам использовать имеющийся опыт .NET-
разработки, в частности в областях WCF и WF, через применение новых расширений
инфраструктуры SDK (например, новых привязок, каналов и действия). SDK также
включает поддержку инструментов Visual Studio для интеграции с порталом Azure™
Services Portal. Кроме .NET Services SDK, сегодня партнеры Microsoft предлагают Java и
Ruby SDK (ссылки можно найти в разделе " Дополнительные ресурсы ").
Чтобы начать работу с .NET Services, перейдите на портал Azure™ Services
Platform по адресу http://azure.com и щелкните ссылку "Try It Now" (Попробуйте сейчас).
Вы перейдете на страницу " Register for Azure Services " (Регистрация для сервисов Azure),
представленную на рисунке 1. На этой странице даются важные ссылки для скачивания
различных SDK, доступа к дополнительным ресурсам и перехода на сайт Microsoft
Connect, где можно зарегистрироваться для получения кода приглашения.
Рис. 1. Портал Azure™ Services Platform
Далее потребуется загрузить .NET Services SDK. Обратите внимание, что имеется
несколько SDK: один – специально предназначенный для разработки Windows® Azure™;
другой – для разработки .NET Services; и остальные – для SQL Data Services и Live
Framework. Для воспроизведения примеров, предлагаемых в данной серии документов,
понадобится скачать и установить .NET Services SDK.
Скачав .NET Services SDK, просто запустите программу установки, как показано на
рисунке 2. Тем самым вам будут доступны новые .NET-сборки, которые вместе с
некоторыми надстройками Visual Studio помогут начать использование различных
функций .NET Services. Приступая к работе с .NET Services, обязательно ознакомьтесь с
остальными ресурсами, доступными с этой страницы (демонстрации, видео, практические
лабораторные и т.д.), цель которых – сделать процесс обучения более насыщенным и
разнообразным. Скачать SDK можно, не создавая учетной записи, но, чтобы использовать
сервисы, необходимо зарегистрироваться.
Рис. 2. Запуск установки NET Services SDK
Чтобы зарегистрироваться на получения учетной записи Azure Services, щелкните
показанную выше ссылку " Register for Services " (Регистрация для сервисов). Вам будет
предложено зарегистрироваться, используя Windows Live ID (WLID). После этого вы
перейдете на сайт Microsoft Connect, где потребуется заполнить регистрационную форму
Azure Services CTP. После успешной регистрации на Azure Services CTP, на экране
появится страница, представленная на рисунке 3.
Рис. 3. Регистрация для Azure Services Platform на сайте Microsoft Connect
Теперь можно вернуться на страницу входа .NET Services Эту страницу можно
увидеть на рисунке 4.
Рис. 4. Страница входа .NET Services
Теперь, щелкнув " Sign Up " (Войти), вы получаете возможность создавать решение
.NET Services. Примечание: в CTP-версии, вышедшей в марте 2009, для создания решения
.NET Services больше не требуется код приглашения.
Рис. 5. Завершение процесса подготовки решения
Для создания решения необходимо просто ввести уникальное имя решения,
принять условия использования и нажать " Create Solution " (Создать решение). После
этого новое решение будет подготовлено и ассоциировано с вашим WLID. Теперь, в
любой момент, зарегистрировавшись на портале Azure™ Services Platform, вы имеете
возможность управлять решениями, ассоциированными с вашим WLID.
Имя решения должно быть не менее 6 символов длиной и глобально уникальным
среди всех пользователей .NET-сервисов. Возможно, придется проявить смекалку, чтобы
придумать такое имя для решения, которое еще не используется никем другим.
После того, как новое решение создано, на экран выводится страница (рисунок 5),
предлагающая пароль решения, который желательно сохранить для использования в
будущем. Имя решения и пароль выступают в роли учетных данных для доступа к
различным сервисам .NET Services.
После успешного создания решения можно приступать к работе с ним на портале
Azure™ Services Platform. Зарегистрировавшись под собственным WLID, на странице
портала справа вы увидите меню " My Solutions " (Мои решения) (рисунок 8.6). Для
работы с конкретным решением необходимо просто выбрать его в меню " My Solutions ",
после чего вам будет представлена страница, показанная на рисунке 8.7.
По сути, решение – это контейнер верхнего уровня для организации различных
ресурсов .NET Services.Например, в нем размещаются конечные точки .NET Service Bus,
типы и экземпляры рабочих процессов .NET Workflow Service, а также ваши
удостоверения .NET Access Control Service и правила преобразования утверждений. Но
одним из самых важных аспектов, которым вы захотите управлять после создания
собственного решения, являются учетные данные решения.
Именно поэтому имя решения должно быть уникальным среди всех пользователей.
Рис. 6. Управление своими решениями
Рис. 7. Управление отдельным решением
посредством меню "My Solutions"
Пароль решения, предоставленный в процессе подготовки, можно изменить на
странице " Credential Management " (Управление учетными данными) (просто щелкните
ссылку " Solution Credentials " (Учетные данные решения), которую можно видеть на рис.
8). С этой страницы можно также конфигурировать информационные карточки Windows
CardSpace, ассоциированные с данным решением, и также любые сертификаты, которые
необходимо ассоциировать с решением (рисунок 8)
Рис. 8. Управление учетными данными своего решения
Для Windows CardSpace и сертификатов вам предложат выбрать необходимую
карточку/сертификат, после чего соответствующая информация будет передана в учетную
запись вашего решения. С этого момента в сочетании со своей учетной записью вы
можете использовать учетные данные указанной карточки/сертификата.
Самым распространенным требованием в распределенных приложениях с высоким
уровнем масштабируемости является возможность подключения приложений. Обычно
интеграция приложений – одна из самых дорогостоящих и хлопотных областей ИТ.
Сегодня для этих задач многие организации используют решение Enterprise Service Bus.
Enterprise Service Bus (сервисная шина предприятия, ESB) — подход к построению
распределѐнных корпоративных информационных систем. Обычно включает в себя
промежуточное ПО, которое обеспечивает взаимосвязь между различными приложениями
по различным протоколам взаимодействия.
Архитектура ESB заключается в взаимодействии всех приложений через единую
точку, которая, при необходимости, обеспечивает транзакции, преобразование данных,
сохранность обращений. Данный подход обеспечивает большую гибкость, простоту
масштабирования и переноса: при замене одного приложения подключенного к шине нет
необходимости перенастраивать остальные.
Одним из стандартов взаимодействия являются веб-сервисы. В популярных
реализациях ESB добавляются шлюзы для обмена данными с корпоративным ПО. С
использованием ESB может быть реализована сервисно-ориентированная архитектура.
Существует некоторое разногласие, что именно считать ESB — архитектуру или
программное обеспечение. Обе точки зрения имеют право на существование.
NET Service Bus является основной частью предложения .NET Services. Ее
основная задача – сделать шаблон ESB реальностью в Интернете в рамках платформы
Azure™ Services Platform. Предоставляемые .NET Service Bus архитектурные
характеристики во многом аналогичны предлагаемым типовыми решениями ESB,
включая идентификацию и управление доступом, присваивание имен, реестр сервиса и
общую среду обмена сообщениями. Основное отличие в области применения. В случае с
.NET Service Bus компоненты должны разрабатываться для работы в облаке, в глобальной
области Интернета, с обеспечением высокого уровня масштабируемости и
интегрируемости. Именно поэтому в прошлом этот предлагаемый сервис назывался
Microsoft Internet Service Bus (рисунок 9).
Internet Service Bus позволила бы интегрировать ваш локальный ESB-продукт с
вашими собственными выполняющимися в облаке сервисами, с различными сторонними
сервисами, предоставляемыми Microsoft или другими производителями (такими как
предлагаются в рамках платформы Azure™ Service Platform) и с различными
настольными, RIA3 и веб-приложениями, которые могут выполняться на
вспомогательных площадках вне межсетевого экрана корпорации.
Чтобы это стало реальностью, реализация должна обеспечивать интегрированные
решения, основанные на открытых Интернет-стандартах, и насыщенную среду обмена
сообщениями с возможностью двусторонней связи в Интернет.
1. Сервисная шина предприятия.
2. Эта терминология применялась в документации BizTalk Services, но более не
является официальным наименованием, используемым Microsoft.
3. RIA = Rich Internet Application (Насыщенное Интернет-приложение).
Рис. 9. Сервисная шина Интернет
Реализация двусторонней связи в Интернете не такая уж тривиальная задача из-за
некоторых реалий организации современных сетей. Преимущественно, барьеры в сети
создают межсетевые экраны и устройства, работающие по протоколу NAT, которые
усложняют обмен информацией с узлами, располагающимися за ними. Представьте
ситуацию: торговый агент использует ваше приложение по беспроводной сети в
случайной гостинице в некоторой точке земного шара. Как при таком сценарии
определить его местоположение и инициировать связь?
Часто компании решают эти проблемы связи, открывая входящие порты
межсетевых экранов (что доставляет немало хлопот системным администраторам) или
используя различных обходные приемы, такие как динамическая DNS, сопоставление
портов NAT или технологию UpnP. Все эти методы неустойчивы, трудно управляемы и
восприимчивы к угрозам безопасности. Число приложений, для которых требуется такой
тип двусторонней связи, постоянно растет. .NET Service Bus призвана удовлетворить эту
потребность.
Решение идентификации, реализацией которой Microsoft занимается последние
несколько лет, основано на концепции утверждений. Модель идентификации на базе
утверждений позволяет выносить общие функции аутентификации и авторизации из
приложений и осуществлять их централизованно во внешних сервисах, написанных и
обслуживаемых экспертами безопасности и идентификации, что выгодно всем, кто
участвует в этом процессе.
Microsoft® .NET Access Control Service – это сервис в облаке, выполняющий
именно эту функцию. Вместо того чтобы создавать собственную базу данных
пользовательских учетных записей и ролей, можно предоставить возможность .NET
Access Control Service управлять аутентификацией и авторизацией ваших пользователей.
.NET Access Control Service использует существующие хранилища учетных записей
пользователей, такие как Windows Live ID и Active Directory, а также любые другие
хранилища, поддерживающие стандартные протоколы интегрирования. Таким образом,
использование единой регистрации для доступа ко всем приложениям становится вполне
естественным. Также это обеспечивает централизацию логики аутентификации и
управления доступом, что упрощает ваши приложения.
В поддерживающих утверждения приложениях пользователь представляет свое
удостоверение как набор утверждений. Одним утверждением может быть имя
пользователя; другим – его адрес электронной почты. Эти утверждения предоставляются
организацией, выдающей удостоверения, которая знает, как аутентифицировать
пользователя и где найти его атрибуты. Клиентское приложение, в роли которого может
выступать браузер или насыщенный клиент, напрямую получает утверждения от этой
организации и передает их в ваше приложение (рисунок 10).
Рис. 10. Использование идентификации на базе утверждений для веб-сервисов
В итоге, приложение получает все сведения, необходимые для идентификации
пользователя, в виде набора утверждений. Эти утверждения подписываются, что
обеспечивает криптографическое подтверждение их происхождения.
Модель идентификации на базе утверждений упрощает реализацию единой
регистрации, при этом приложение больше не отвечает ни за один из перечисленных ниже
аспектов безопасности:
o Аутентификация пользователей
o Хранение учетных записей пользователей и паролей
o Обращение к каталогам предприятия в поисках данных удостоверения
пользователя
o Интеграция с системами удостоверений других платформ или компаний
Используя такую модель, приложение может принимать решения об
идентификации на основании предоставленных пользователем утверждений. И диапазон
таких решений велик: от простой персонализации приложения по имени пользователя до
авторизации пользователя для доступа к особо важным функциям и ресурсам приложения.
.NET Access Control Service реализовывает идентификацию на базе утверждений в
рамках платформы Azure™ Services Platform. Система администрирования является
важной частью .NET Access Control Service.
.NET Access Control Service предоставляет портал администрирования (рисунок 11)
в рамках портала Azure™ Services Portal. Здесь вы выполняете настройку правил, которые
определяют схему выпуска утверждений для различных пользователей.
Портал Access Control Service – замечательное средство для исследования,
изучения и начала работы с ACS. И для относительно простых приложений он может
быть единственным необходимым инструментом. Но для нетривиальных систем с
сотнями или тысячами пользователей и, возможно, таким же количеством правил,
использование портала становится громоздким. В таких случаях программный интерфейс
– более предпочтительный вариант, поэтому ACS также предоставляет интерфейс
AtomPub для программного администрирования. AtomPub – это протокол RESTful,
который стандартизует базовые операции CRUD (Create, Retrieve, Update и Delete) для
управления удаленными ресурсами. Это открывает совершенно новые возможности.
Рис. 11. Портал ACS
Сервис .NET Access Control Service также включает конечные точки SOAP и REST
для программного администрирования, а также ряд .NET-классов, которые упрощают
вызов этих конечных точек. Итак, если вам не нравится портал, предоставляемый ACS,
или вы желаете реализовать настройки, характерные для определенной предметной
области, можно создать собственную консоль администрирования.
Самой большой проблемой в построении крупномасштабных распределенных
приложений является принятие решения о моделировании сложных схем взаимодействия
через обмен сообщениями. Microsoft .NET Workflow Service позволяет разрабатывать
логику взаимодействия сообщений с помощью WF и обеспечивает размещенную
масштабируемую среду для выполнения и управления экземплярами рабочего процесса
WF в облаке, освобождая разработчика от необходимости создания собственного хоста
для WF.
.NET Workflow Service является частью Azure™ Services Platform и интегрируется с
сервисами .NET Service Bus и .NET Access Control Service для безопасного
координирования взаимодействия посредством сообщений. .NET Workflow Service также
обеспечивает инструменты управления для создания и управления типами и экземплярами
рабочих потоков и API веб-сервисов для ситуаций, когда требуется создать собственные
инструменты.
Поскольку управляющая среда построена на платформе Windows® Azure™, она
может масштабироваться по требованию и в значительной степени, при этом организации
или разработчику не приходится беспокоиться о планировании большего количества
оборудования или программного обеспечения. Благодаря использованию среды
выполнения WF экземпляры рабочего потока могут выполняться в пуле серверов и
перемещаться с одного сервера на другой в каждом эпизоде выполнения. Управляющая
среда включает сервис хранения, который использует безопасные тиражированные
сервисы Microsoft SQL Service для сохранения состояния выполняющихся рабочих
процессов и для обеспечения возможности восстановления.
На период перехода к обработке данных в облаке .NET Workflow Services
предоставляет упрощенный подход для управления сложными взаимодействиями .NET
Service Bus в создаваемых вами составных решениях "в облаке".
Построение хоста для рабочих процессов WF означает принятие решений о том,
какие возможности будет поддерживать среда и как лучше сделать ее безопасной,
масштабируемой и стабильной. Сегодня .NET Workflow Service построен на .NET
Framework 3.5 и действиях и компонентах WF, входящих в данную версию
инфраструктуры. Однако для обеспечения наилучших условий Microsoft были добавлены
несколько специальных действий и сервисов, которые наложили некоторые ограничения
на рабочие процессы, выполняющиеся в облаке.
В облаке не используется сервис хранения SqlWorkflowPersistenceProvider,
получивший наибольшую популярность среди разработчиков, применяющих WF. Чтобы
использовать операционную среду Azure и обеспечить наилучшие возможности
масштабирования и стабильности, в инфраструктуре облака имеется специальный
провайдер услуг хранения, который реализует сохранение состояния выполняющихся
рабочих процессов посредством возможностей хранения Microsoft SQL Services. Кроме
всего прочего, для Интернет-сервиса необходима Интернет-технология хранения и
извлечения данных. Но поскольку механизм WF един – как в облаке, так и в ваших
локальных решениях, – применение специального провайдера услуг хранения прозрачно
для разработчиков рабочих процессов. Все делается так же, как в любой другое среде WF.
При построении рабочих процессов для облака разработчики используют
привычные инструменты Visual Studio, включая тот же дизайнер рабочего процесса для
создания XAML-файлов рабочих процессов и файлов правил. Затем эти XML-файлы
загружаются на сервер в облаке, где они могут использоваться для создания экземпляров
рабочего процесса. .NET Services SDK включает шаблон проекта для создания
SequentialCloudWorkflow (Последовательный рабочий процесс в облаке), который
является специальной версией стандартного шаблона SequentialWorkflow
(Последовательный рабочий процесс). Одним из ограничений текущей инфраструктуры
является то, что при определении рабочих процессов, которые будут выполняться в
облаке, можно использовать только подмножество действий базовой библиотеки
действий, а также комплект специальных действий, предоставляемый как часть .NET
Services SDK.
Набор действий требует, чтобы рабочие процессы были полностью
декларативными и ограничивающими. Это предотвращает введение пользовательского
кода, т.е. позволяет гарантировать стабильность среды. При построении управляющей
среды для рабочих процессов, написанных любым количеством разработчиков,
разбросанных по всему миру, такой уровень контроля является обязательным. Поскольку
сегодня для выполнения WF необходимо полное доверие, мы не можем обеспечить
ограниченный набор функциональности, просто выделив пользовательский код в
безопасную изолированную программную среду на серверах. Следует отметить, что со
временем доступный сегодня ограниченный набор действий будет расширен для
увеличения возможностей рабочего процесса в облаке. По мере выхода новых версий
.NET Framework и .NET Workflow Service также будет поддерживать их. Кроме того, если
понадобятся специальные этапы, возможности локальных рабочих процессов могут
комбинироваться с рабочими процессами в облаке с помощью .NET Service Bus.
.NET Services SDK содержит новый шаблон проекта для построения рабочих
процессов в облаке, набором новых действий в облаке и клиентским API для удаленного
развертывания и управления рабочими процессами, размещаемыми в облаке.
При написании рабочих процессов в облаке необходимо быть аккуратным с
используемыми действиями (дизайнер предложит только допустимые действия).
Разрешенными являются некоторые основные действия потока управления WF, включая
IfElse (Если…то), While (Пока), Sequence (Последовательность), Suspend (Приостановить),
Terminate (Завершить) и FaultHandler (Обработчик сбоев). Кроме базовых действий потока
управления, в рабочих процесса в облаке могут также использоваться
CancellationHandlerActivity и FaultHandlersActivity для моделирования обработки
исключений и логики отмены. Обратите внимание, что эти действия обычно не
добавляются в модель напрямую; для этого используется дизайнер составных действий,
который вводит их автоматически, когда представление переходит к этому действию.
Ни одно другое действие WF или пользовательские действия не могут
использоваться. Разрешены к применению только новые специальные действия в облаке,
включенные в .NET Services SDK. Ниже описаны новые специальные действия в облаке,
которые поставляются с .NET Services SDK.
Поскольку основной задачей .NET Workflow Service является упрощение
взаимодействия сообщений, эти действия, главным образом, касаются отправки,
получения и обработки сообщений. Отправлять/принимать сообщения можно
посредством традиционных HTTP-запросов или через .NET Service Bus. Эти действия
можно будет найти на панели инструментов Visual Studio при использовании шаблона
проекта последовательного рабочего процесса в облаке.
2 Краткие итоги:
Платформа Azure™ Services Platform представляет комплексную стратегию,
разработанную Microsoft для облегчения разработчикам задач по реализации
возможностей обработки данных в облаке. Microsoft® .NET Services – ключевая
составляющая этой платформы, созданная специально, чтобы помочь .NET-разработчикам
сделать первый шаг. .NET Services предлагает ориентированные на работу в облаке
стандартные блоки и инфраструктуру для обеспечения возможности подключения
приложений, управления доступом, размещения и управления рабочим процессом. Эти
стандартные блоки станут основными средствами организации работы "с облаком" для
.NET-разработчиков на годы вперед. Больше информации о .NET Service Bus, .NET Access
Control Service и .NET Workflow Service можно найти в документах данной серии,
посвященных каждой из этих тем в отдельности.
3 Ключевые термины:
Microsoft® .NET Service Bus – блок сервисов, который предоставляет сетевую
инфраструктуру для соединения приложений через Интернет с использованием
разнообразных шаблонов обмена сообщениями способом, обеспечивающим возможность
прохождения межсетевых экранов и NAT-устройств без нарушения безопасности,
предоставляемой этими устройствами.
Microsoft® .NET Access Control Service – блок сервисов, который обеспечивает
управление доступом в облаке на основании утверждений. Он включает механизм
преобразования утверждений, который объединяется с поставщиками удостоверений,
такими как Active Directory и Windows Live ID (WLID). В будущих версиях будет
реализована интеграция с любыми поставщиками удостоверений.
Microsoft® .NET Workflow Services – блок сервисов, который предоставляет
инфраструктуру для размещения и управления рабочими процессами WF, уделяя
основной внимание взаимодействию через сообщения посредством
Network address translation – Преобразование сетевых адресов.
Domain Name System – Служба доменных имен.
Universal Plug and Play – Универсальная автоматическая настройка сетевых устройств.
Лабораторная работа 1. Установка и настройка среды программирования ADT Bundle
Цель лабораторной работы: Установка и настройка среды программирования ADT Bundle
Задачи лабораторной работы:
1. Установить и настроить среду программирования ADT
2. Создать первое приложение Hello, world!
3. Научиться запускать приложение на эмуляторе мобильного устройства
1 Введение
Лабораторная работа посвящена описанию работы в среде ADT Bundle (Android
IDE). В работе рассказывается о программном обеспечении, которое необходимо скачать с
официальных сайтов, установить и настроить, создании и запуске простейшего
приложения на эмуляторе и мобильном устройстве. В связи с тем, что отладка на
устройствах сопряжена с рядом трудностей, приводится подробная инструкция по
настройке устройств и операционной системы Windows (версия не ниже 7).
2 Установка среды
Большинство приложений для OS Android написано на Java. Одной из самых
популярных сред разработки является Eclipse (для неѐ также необходим JDK) с
установленным плагином ADT и Android SDK. Раньше приходилось ставить все
компоненты отдельно. Сейчас появилась версия среды Eclipse с уже настроенными
дополнениями - ADT Bundle. Здесь есть минимум инструментов, необходимый для
разработки приложений. С этой версией мы и будем работать. Однако в ней есть далеко
не всѐ, поэтому, если при разработке какого-либо проекта вам потребуются инструменты,
не входящие в ADT Bundle, вы можете скачать их с сайта разработчиков и дополнить
свою среду.
Скачать среду можно с сайта для разработчиков Android
(http://developer.android.com/sdk/index.html).
Рис. 1. Сайт разработчика
Для того, чтобы скачать среду необходимо принять условия лицензионного
соглашения и выбрать вашу версию Windows (32-bit или 64-bit).
Рис. 2. Скачивание среды
После скачивания распакуйте архив в ту папку, где собираетесь работать (среда не
требует специальной установки). После распаковки зайдите в папку и запустите Eclipse.
Здесь возможна небольшая проблема: если у вас не установлен JDK, среда не запустится и
потребует указать путь к папке с JDK или установить его.
Скачать JDK можно с сайта Oracle (http://www.oracle.com)
Сайт компании Oracle
Рис. 3. Сайт компании Oracle
Чтобы скачать JDK нужно сначала принять условия лицензионного соглашения, а
затем выбрать нужную версию.
Скачивание JDK
Рис. 4. Скачивание JDK
После скачивания запустите setup-файл и установите JDK.
Рис. 5. Установка JDK
После установки JDK среда должна запуститься.
Далее вам необходимо выбрать (или создать новое) рабочее пространство, т.е.
место, где будут находиться ваши проекты. Если поставить галочку, то это рабочее
пространство будет выбираться по умолчанию, а противном случае это окно будет
появляться при каждом запуске Eclipse.
Рис. 6. Выбор рабочего пространства
Затем появляется окно, в котором разработчики предлагают отправлять статистику
для дальнейшего улучшения SDK. Вы можете согласиться или отказаться.
Рис. 7. Отправка статистики
Обратите внимание на значок Android SDK Manager, находящийся на панели
инструментов (его также можно найти в меню Window). С его помощью вы сможете
добавлять в свою среду новые инструменты.
Android SDK Manager
Рис. 8. Android SDK Manager
3 Создание проекта
Итак, наконец, мы подошли к самому главному - созданию проекта.
Чтобы создать проект, зайдите в меню File->New->Android Application Project.
Рис. 9. Создание проекта
В появившемся окне обязательно нужно прописать имя приложения, имя проекта, а
также имя пакета (package). Лучше не оставлять его именем example, т.к. пакет с таким
именем нельзя разместить в GooglePlay. Конечно, учебные приложения туда не
загружают, однако, следует иметь это в виду на будущее.
MinimumRequired SDK - минимальная версия Android, которую будет
поддерживать приложение. Чаще всего по умолчанию указывается версия 2.2,
чтобы поддерживать как можно больше устройств. Если определенная функция
вашего приложения работает только на более новых версиях Android, и это не
является критическим для основного набора функций приложения, вы можете
включить ее в качестве опции на версиях, которые поддерживают его.
Target SDK - версия Android, под которую будет написано ваше приложение;
определяет максимальную версию Android, на которой вы тестировали
приложение. Это нужно для режимов совместимости.
CompileWith определяет, возможности какой версии Android будет использовать
приложение.
Оставьте пока установки, заданные по умолчанию в качестве значений для этого
проекта.
Следующее окно можно пропустить без изменений.
Рис. 10. Наименование проекта Рис. 11. Конфигурация проекта
Createcustomlaunchericon - создать значок приложения.
Createactivity - создать Activity (активность, деятельность).
Mark this project as library - создатьпроект, какбиблиотеку. Сейчас в этом нет
необходимости, наше приложение в других проектах использоваться не будет.
Create Project in Workspace - создатьпроектвпапке Workspace. В этой папке будут
храниться все наши проекты.
Следующий этап - создание иконки. Можете оставить стандартную или создать
свою собственную. В нашем примере изменена цветовая гамма, форма, а также выбрана
фигурка из клипарта.
Рис. 12. Создание иконки приложения
Большинство приложений на Android имеют свой экран (форму, окно), которое
называется активностью или деятельностью (Activity).
Следующее два окна создают пустую активность. В первом ничего пока менять не
нужно. Во втором вы можете переименовать свою активность (в приложении их может
быть несколько).
Рис. 13. Создание активности
BlankActivity - шаблон, предназначенный для мобильных телефонов.
FullscreenActivity - шаблон, позволяющий растянуть приложение на весь экран
(без навигационной панели и статус-бара).
Master/DetailFlow - шаблон, предназначенный для планшетных компьютеров.
Рис. 14. Переименование активности
Итак, вы создали свой первый проект. Конечно, это всего лишь встроенное в среду
приложение для проверки корректной установки инструментария, однако множество
приложений создаются именно из него.
Посмотрим на его структуру. Она показана в области слева.
В первую очередь нас интересует файл активности. Он находится в папке src в
вашем пакете. Он имеет расширение .java.
Активность
Рис. 15. Активность
В папке res в подпапке layout находится xml-файл, который является оболочкой
нашей активности. Именно этот файл будет виден на экране устройства.
C xml-файлами можно работать как в режиме графического редактора, так и
непосредственно редактировать код.
Xml-файл. Графический редактор
Рис. 16. Xml-файл. Графический редактор Рис. 17. Xml-файл
4 Запуск проекта на эмуляторе устройства
В первую очередь нужно создать эмулятор устройства. Это можно сделать, нажав
на кнопку на панели инструментов, изображающую смартфон. Если кнопки нет на панели,
ее можно найти в меню Window.
Рис. 18. Запуск проекта
Откроется Android Virtual Device Manager. Пока в нем нет ни одного виртуального
устройства.
AndroidVirtualDeviceManager
Рис. 19. Android Virtual Device Manager
Чтобы создать виртуальное устройство, нажмите кнопку New. Появится окно
создания. Вам нужно назвать устройство и выбрать обязательные характеристики: Device
- модель вашего устройства, и Target - версия Android. Также можно изменять
дополнительные параметры: размер sd-карты, встроенной памяти и т.п.
Рис. 20. Создание AVD
Теперь можно запускать приложение. Для этого нужно нажать на кнопку Run (белый
треугольник в зеленом кружочке) на панели инструментов. Проблемы с запуском можно
отследить в консоли.
Если приложение не запускается, попробуйте нажать на черный треугольник справа от
кнопки Run, выбрать RunConfigurations, затем во вкладке Target выбрать созданное
устройство и запустить проект снова.
Рис. 21. Запуск приложения
Если все сделано правильно, должен запуститься эмулятор. Время запуска зависит
от размера оперативной памяти на вашем компьютере. В дальнейшем эмулятор можно не
закрывать, приложения будут запускаться в работающем.
Рис. 22. Запуск эмулятора Рис. 23. Запущенный эмулятор
Рис. 24. Приложение Hello, world!
Если ваше приложение сразу не запустилось, его можно найти в меню приложений
устройства.
Рис. 25. Меню приложений
Прежде чем запустить проект на реальном устройстве, необходимо:
1. Настроить устройство
2. Настроить компьютер
3. Настроить среду
5.1 Настройка устройства
Настройка устройства состоит в
следующем:
1. Включить режим отладки по USB.
2. Для запуска файлов с расширением
*.apk, полученных не из магазина
приложений GooglePlay, необходимо
разрешить установку приложений из
альтернативных источников.
Рис. 26. Настройка устройства
5.2 Настройка компьютера
Чтобы настроить компьютер необходимо выполнить следующие действия:
1. Зайти в Диспетчер устройств (Пуск->Панель управления->Система и
безопасность->Система->Диспетчер устройств) и найти ваше устройство
Рис. 27. Диспетчер устройств
2. Щелкнуть по нему правой кнопкой мыши и вызвать меню Свойства.
Рис. 28. Меню Свойства
3. Во вкладке Драйвер нажать на кнопку Обновить драйвер.
Рис. 29. Обновление драйвера
4. В появившемся окне выбрать Выполнить поиск драйвера на этом компьютере.
Рис. 30. Поиск драйверов на компьютере
5. В следующем окне нужно прописать путь, откуда будет установлен драйвер.
Внашемслучаепутьследующий: adt-bundle-windows-x86-
20130729\sdk\extras\google\usb_driver\i386.
Или можно отыскать драйвер следующим образом:
o В следующем окне нажмите Установить с диска
Рис. 31. Выбор драйвера устройства Рис. 32. Поиск драйвера
o Далеевыберитефайл android_winusb.inf
Рис. 33. Сведения для установки
o Нажмите Далее в этом и следующем окнах.
o Из предложенного списка выберите Android ADB Interface и нажмите Далее и
Да.
Рис. 34. Завершение установки драйвера
2.5.3 Настройка среды
1. В ADT зайдите в меню Run\DebugConfigurations и перейдите на вкладку Target.
Поставьте флажок напротив Alwaysprompttopickdevice.
Рис. 35. Настройка среды
2. В открывшемся окне выберите подключенное устройство, поставив флажок
напротив Choose a runningAndroidDevice
Рис. 36. Выбор устройства
3. Теперь можно запустить приложение.
Задание
Создайте и запустите на вашем устройстве аналогичный проект, поменяв размер,
цвет и рисунок иконки и изменив текст приветствия с Hello, world! на Hello, F.I.O.!
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 2. Основные этапы разработки приложения с использованием
Android IDE
Цель лабораторной работы: Разработка простого приложения, помогающего понять
структуру приложения, освоить основные операторы, привыкнуть к среде разработки.
Задачи лабораторной работы:
создать новое приложение и изучить его структуру;
настроить интерфейс приложения;
реализовать логику приложения.
1 Введение
Для достижения поставленной цели в лабораторной работе создадим приложение в
среде разработки Android IDE (Eclipse и ADT), подробно рассмотрим структуру
полученного проекта и разберем назначение основных его элементов.
Чтобы дальнейшие действия приобрели некоторый смысл, сформулируем задачу,
которую будет решать наше приложение, назовем его "Угадай число". Суть приложения в
том, что программа случайным образом "загадывает" число от 0 до 100, а пользователь
должен угадать это число. При каждом вводе числа, программа сообщает пользователю
результат: введенное число больше загаданного, меньше или же "Ура, победа!" число
угадано.
Разрабатываемое приложение выполняет свои функции только когда видимо на
экране, когда оно не видимо его работа приостанавливается, т. е. имеем дело с
приложением переднего плана. Для выполнения всей работы достаточно определить одну
активность в приложении, фоновые процессы не предусмотрены.
Далее в работе рассмотрим простейшие элементы интерфейса пользователя и
добавим их в приложение, а также рассмотрим вопросы, связанные непосредственно с
программированием: научимся обрабатывать события, возникающие при взаимодействии
приложения с пользователем; реализуем логику проверки числа на совпадение с
загаданным.
2 Создание приложения и изучение его структуры
Создайте новый проект в среде Android IDE (Eclipse с ADT). Процесс создания
нового проекта и описание основных настроек подробно рассмотрен в лабораторной
работе к первой лекции.
В процессе создания проекта, мы назвали его ProjectN, среда разработки
подготавливает необходимые папки и файлы. Полный иерархический список
обязательных элементов проекта можно увидеть на вкладке Package Explorer
(аналогичную информацию предоставляет вкладка Project Explorer), иерархия полученных
папок и файлов для нашего проекта изображена на рис. 1.
В настоящее время нас будет интересовать назначение нескольких файлов и папок.
Рассмотрим папки:
папка src - содержит файлы с исходным кодом на языке Java. Именно в этой папке
размещаются все классы, создаваемые в процессе разработки приложения. Сейчас
в этой папке в пакете com.example.projectn размещается единственный класс
MainActivity.java. Этот класс определяет главную и единственную активность в
этом приложении.
Комментарий 1: Имя пакету присваивается в процессе создания приложения в поле
Package Name, использовать com.example не рекомендуется, т. к. пакет с таким
именем нельзя загрузить в Google Play. Часто рекомендуют использовать в качестве
имени пакета название сайта программиста, записанное в обратном порядке, можно
просто использовать свои имя и фамилию. Последнее слово в имени пакета
формируется автоматически и совпадает с именем проекта.
Комментарий 2: Имя файлу присваивается в процессе создания приложения на этапе
настройки активности. Имя определяется в поле Activity Name.
Комментарий 3: Package Explorer отображает структуру папок, которая создается в
каталоге, выбранном в качестве рабочего (Workspace) при запуске Eclipse. Например,
рабочий каталог называется workspaceADT, в нем для нашего проекта появилась папка
с именем ProjectN, в ней есть папка src, в ней com, в ней example, в ней projectn
(заметьте, что название пакета распалось на три папки, каждое слово, отделенное
точкой определило новую папку). И уже в папке projectn находится файл
MainActivity.java и будут размещаться другие java-файлы проекта.
Рис. 1. Структура проекта ProjectN
папка gen - содержит java-файлы, которые не требуется изменять и лучше вообще
не трогать. Эти файлы генерируются автоматически. Нас может заинтересовать
файл R.java он содержит идентификаторы (ID) для всех ресурсов приложения.
папка res - содержит структуру папок ресурсов приложения, рассмотрим некоторые
из них:
o layout - в данной папке содержатся xml-файлы, которые описывают внешний
вид форм и их элементов, пока там находится только activity_main.xml;
o values - содержит XML файлы, которые определяют простые значения,
таких ресурсов как, строки, числа, цвета, темы, стили, которые можно
использовать в данном проекте;
o menu - содержит XML файлы, которые определяют все меню приложения.
Рассмотрим файл AndroidManifest.xml - файл в формате xml, который описывает
основные свойства проекта, разрешение на использование ресурсов устройства и др.
Сразу после создания приложения файл AndroidManifest.xml выглядит так, как показано
на рис. 2.
Рис. 2. Файл AndroidManifest.xml только созданного проекта
Рассмотрим подробно файл манифеста.
Первый обязательный элемент <manifest> является корневым элементом файла,
должен содержать обязательный элемент <application> и все остальные элементы по
необходимости. Рассмотрим основные атрибуты этого элемента:
o xmlns:android - определяет пространство имен Android, всегда должен иметь
значение: "http://schemas.android.com/apk/res/android". Обязательный атрибут.
o package - полное имя пакета, в котором располагается приложение.
Обязательный атрибут. Имя должно быть уникальным, может содержать заглавные
и строчные латинские буквы, числа и символ подчеркивания. Однако начинаться
должно только с буквы. Для избежания конфликтов с другими разработчиками
рекомендуется использовать имя вашего сайта (если он есть) записанное в
обратном порядке. В нашем случае пакет имеет имя "com.example.projectn" и наше
приложение не удастся разместить в Google Play (но мы на это и не претендуем).
Внимание: если Вы опубликовали свое приложение, Вы не можете менять имя
пакета, т.к. имя пакета служит уникальным идентификатором для приложения и в
случае его смены приложение будет рассматриваться, как совсем другое и
пользователи предыдущей версии не смогут его обновить.
o android:versionCode - внутренний номер версии приложения не виден
пользователю. Этот номер используется только для определения является ли одна
версия более современной по сравнению с другой, больший номер показывает
более позднюю версию.
o android:versionNumber - номер версии, является строкой и используется только
для того, чтобы показать пользователю номер версии приложения.
o android:shareUserID, android:sharedUserLabel, android:installLocation - эти атрибуты
в нашем файле манифеста не представлены, про их назначение можно почитать по
ссылке: http://developer.android.com/guide/topics/manifest/manifest-element.html.
Рассмотрим элемент <uses-sdk>, который показывает совместимость приложения с
версиями Android. Основные атрибуты:
o android:minSdkVersion - указывает значение минимального уровня API,
необходимого для работы приложения. Система Android не позволит установить
приложение, если уровень API ниже, чем уровень, указанный в этом атрибуте.
Внимание: если этот атрибут не указан, система установит значение по умолчанию
равным "1", которое означает, что приложение совместимо со всеми версиями
Android. И в случае, если приложение не совместимо со всеми версиями, установка
пройдет на любую версию Android, а во время работы приложение сломается,
когда попытается обратиться к недоступным элементам API. Поэтому необходимо
всегда указывать значение этого атрибута.
o android:targetSdkVersion - указывает уровень API целевой платформы Android
приложения, если этот атрибут пропущен, по умолчанию принимается значение
android:minSdkVersion.
o android:maxSdkVersion - указывает максимальное значение уровня API, под
который разрабатывалось приложение. Если значение этого атрибута ниже, чем
уровень API соответствующий версии Android, на которую устанавливается
приложение, то система не позволит установить такое приложение.
Если внимательно посмотреть на файл манифеста рис. 4.2, можно заметить, что
данный атрибут в нем отсутствует. На самом деле разработчикам не рекомендуются
задавать значение этого атрибута. Во-первых, это значение будет препятствовать
использованию приложений на новых версиях Android при их появлении, несмотря на то,
что все новые версии полностью обратно-совместимы. Во-вторых, стоит иметь ввиду, что
задание этого атрибута может привести к тому, что приложение будет удалено с
устройства после обновления Android до более высокого уровня API.
Подробнее с элементом <uses-sdk> и его атрибутами можно ознакомиться по
ссылке: http://developer.android.com/guide/topics/manifest/uses-sdk-element.html.
Рассмотрим элемент <application>, который является обязательным элементом
манифеста, полностью определяет состав приложения. Представляет собой контейнер для
элементов <activity>, <service>, <receiver>, <provider> (и не только), каждый из которых
определяет соответствующий компонент приложения. Содержит набор атрибутов,
действие которых распространяется на все компоненты приложения. Рассмотрим
атрибуты элемента <application>, представленные в манифесте на рис. 4.2:
o android:allowBackup - определяет разрешение для приложения участвовать в
резервном копировании и восстановлении. Если значение этого атрибута false, то
для приложения никогда не может быть создана резервная копия, даже если
проводится резервное копирование всей системы целиком. По умолчанию значение
этого атрибута равно true.
o android:icon - определяет иконку для приложения целиком, а также иконку по
умолчанию для компонентов приложения, которая может быть переопределена
атрибутом android:icon каждого компонента. Задается как ссылка на графический
ресурс, содержащий изображение, в нашем случае значение этого атрибута равно
"@drawable/ic_launcher".
o android:label - определяет видимый для пользователя заголовок приложения
целиком, а также заголовок по умолчанию для компонентов приложения, который
может быть переопределен атрибутом android:label каждого компонента. Задается
как ссылка на строковый ресурс, в нашем случае значение атрибута равно
"@string/app_name".
o android:theme - определяет тему по умолчанию для всех активностей приложения,
может быть переопределен атрибутом android:theme каждой активности. Задается
как ссылка на стилевой ресурс, в нашем случае значение атрибута равно
"@style/AppTheme".
На самом деле у элемента <application> гораздо больше атрибутов, чем нам удалось
рассмотреть, найти полный список атрибутов с описаниями можно по ссылке:
http://developer.android.com/guide/topics/manifest/application-element.html.
В приложении всего одна активность, других компонентов нет, в связи с этим
элемент <application> в манифесте содержит ровно один элемент <activity> и больше
никаких других элементов не содержит. Рассмотрим элемент <activity>, который
определяет активность. Для каждой активности обязательно необходим свой элемент
<activity> в манифесте. Рассмотрим атрибуты элемента <activity>, представленные в
манифесте на рис. 3:
o android:name - определяет имя класса, который задает активность. Значение
атрибута должно полностью определять имя класса с указанием пакета, в котором
располагается класс. В нашем случае атрибут имеет значение:
"com.example.projectn.MainActivity". Можно использовать сокращенную запись
".MainActivity", в этом случае добавляется имя пакета, определенное
соответствующим атрибутом элемента <manifest>.
o android:configChanges - перечисляет изменения конфигурации, которыми
может управлять активность. Если конфигурация меняется во время работы, то по
умолчанию активность останавливается и перезапускается. Если же изменение
конфигурации указано в этом атрибуте, то при появлении этого изменения
активность не перезапускается, вместо этого она продолжает работать и вызывает
метод onConfigurationChanged(). В нашем случае атрибут имеет значение
"orientation|keyboardHidden|screenSize", т. е. при смене ориентации экрана, смене
размера экрана и изменении доступности клавиатуры не произойдет перезапуск
активности.
o android:label - определяет видимый пользователю заголовок активности, если он
отличается от общего заголовка приложения. Задается как ссылка на строковый
ресурс, в нашем случае значение атрибута равно "@string/app_name"(т.е. можно
было и не задавать).
o android:theme - определяет тему активности, если она отличается от общей темы
приложения, заданной соответствующим атрибутом элемента <application>.
Задается как ссылка на стилевой ресурс, в нашем случае значение атрибута равно
"@style/FullscreenTheme".
На самом деле у элемента <activity> гораздо больше атрибутов, чем нам удалось
рассмотреть, найти полный список атрибутов с описаниями можно по ссылке:
http://developer.android.com/guide/topics/manifest/application-element.html.
В манифесте для нашего приложения элемент <activity> содержит ровно один
элемент: <intent-filter>, определяющий типы намерений, которые может принимать
активность. Этот элемент содержит два элемента: <action> и <category>.
Первый элемент определяет действия, которые проходят в фильтр намерений, при
этом <intent-filter> должен содержать хотя бы один элемент <action>, в противном случае
ни один объект-намерение не сможет пройти через фильтр и активность не возможно
будет запустить. Элемент <action> имеет единственный атрибут
android:name="android.intent.action.MAIN".
Второй элемент определяет имя категории в фильтре намерений. Имеет
единственный атрибут android:name="android.intent.category.LAUNCHER".
На этом разбор манифеста приложения закончим, подробно с описанием всех
элементов этого файла можно познакомиться по ссылке:
http://developer.android.com/guide/topics/manifest/manifest-intro.html.
Чаще всего, при создании приложения приходится иметь дело с папками src,
res/layout и res/values, т.к. там находятся основные файлы проекта.
3 Настройка интерфейса приложения
До того, как начнем формировать интерфейс, имеет смысл подготовить
возможность проверки разрабатываемого приложения на ошибки. Чтобы не загружать
каждый раз приложение на реальное устройство, в Android SDK предусмотрена
возможность использования виртуального устройства (AVD или Android virtual device),
эмулирующего работу реального смартфона. Процесс создания виртуального устройства
или эмулятора подробно расписан в "Установка и настройка среды программирования
ADT Bundle" .
Пришло время задуматься о внешнем виде приложения. Для начала необходимо
определить какие элементы графического интерфейса нам нужны, как эти элементы будут
располагаться на форме и каким образом будет реализовано взаимодействие с
пользователем.
Так как приложение очень простое, то и интерфейс особой сложностью отличаться
не будет. Нам потребуется поле для ввода чисел (TextEdit), текстовая метка для вывода
информации (TextView) и кнопка для подтверждения введенного числа (Button).
Располагать элементы интерфейса будем друг под другом, сверху информационная часть,
ниже поле ввода, кнопку разместим в самом низу приложения. Взаимодействие
приложения с пользователем организуется очень просто: пользователь вводит число в
поле для ввода и нажимает кнопку, читает результат в информационном поле и, либо
радуется победе, либо вводит новое число.
Если пользователь вводит правильное число, то приложение предлагает ему
сыграть снова при этом кнопка будет играть роль подтверждения, а в информационное
поле будет выведено приглашение к повторной игре.
Схематично интерфейс приложения изображен на рис. 3.
Рис. 3. Схема интерфейса приложения "Угадай число"
Нам необходимо добавить на форму три элемента: информационное поле
(TextView), поле ввода (TextEdit) и кнопку (Button).
Android IDE поддерживает два способа для выполнения действий по
формированию интерфейса приложения: первый основан на XML-разметке, второй
относится к визуальному программированию и позволяет перетаскивать объекты
интерфейса и размещать их на форме с помощью мыши. Считается, что визуальный
способ подходит для новичков, а более продвинутые разработчики могут писать код
вручную, однако чаще всего используется комбинированный подход.
Для формирования интерфейса будем работать с файлом
res/layout/activity_main.xml. На рис. 4 можно увидеть редактор, соответствующий
визуальному способу формирования интерфейса, этому режиму соответствует вкладка
Graphical Layout.
Рис. 4. Графическое изображение активности приложения
На рис. 4 рядом с вкладкой Graphical Layout расположена вкладка
activity_fullscreen.xml. Она соответствует режиму редактирования интерфейса путем
формирования XML файла. На рис. 5 можно увидеть редактор XML файла.
Рис. 5. Описание активности в XML формате
Зададим табличное расположение компонентов на форме, для этого выберем
вкладку Layouts, найдем там TableLayout и добавим его на форму. На рис. 6 можно
увидеть результат этих действий.
Рис. 6. Настройка интерфейса, добавление TableLayout
Теперь начнем добавлять элементы интерфейса, будем использовать графический
режим правки.
Во-первых, нам необходимо добавить информационное поле. Для этого на панели
=Palette= выбираем вкладку Form Widgets, на этой вкладке найдем поле TextView,
перенесем в окно приложения, разместим в первой строке таблицы (TableLayout).
Во-вторых, нам потребуется поле ввода информации, на вкладке Text Fields найдем
текстовое поле Number и разместим во второй строке таблицы.
В-третьих, вернемся на вкладку Form Widgets, выберем там элемент Button и
добавим в третью строку таблицы. Не нужную четвертую строку таблицы удалим,
получим следующий вид приложения, см. рис. 7.
Рис. 7. Интерфейс приложения
После настройки интерфейса можно заглянуть в файл activity_main.xml, в этом
файле прописано, что используется TableLayout и дано описание каждой из трех строк. На
рис. 8 можно увидеть, как выглядит такое описание на примере первой строки таблицы.
Рис. 8. Фрагмент файла activity_main.xml, описание строки в TableLayout
Теперь необходимо наполнить наши элементы интерфейса смыслом, нам
понадобится текст для общения с пользователем, при программировании под Android
существует практика разделять ресурсы и код приложения. Для хранения любых строк,
которые могут понадобиться приложению, используется файл strings.xml. Хранение всех
строковых ресурсов в этом файле серьезно облегчает локализацию приложения на другие
языки. Этот файл можно найти в Package Explorer в папке res/values. Откроем его и
посмотрим, что там есть, см. рис. 9.
Рис. 9. Файл string.xml
Уберем лишние строки и добавим новые, результат можно посмотреть на рис. 10.
Рис. 10. Отредактированный файл string.xml
Данные переменные будут выполнять следующие задачи:
o app_name установит "видимое" название приложения;
o behind, ahead, hit оповестят пользователя об его успехах в игре;
o play_more и try_to_guess установит название кнопки, которое объяснит еѐ функции;
o input_value пригласит пользователя к вводу числа;
o error сообщит о неверном вводе.
После изменения strings.xml, при переходе на другую вкладку, не забудьте
сохранить изменения (самый быстрый способ - нажать Ctrl+S).
Настроим текст в информационном поле. Для этого на вкладке Properties в правой
части окна выберем элемент textView1 (это и есть наше информационное поле, имеет
смысл придумать ему более осмысленное имя). Найдем свойство Text, подставим в него
значение строки с именем try_to_guess, см. рис. 4.11.
Аналогично можно настроить текст, которым нас будет приветствовать кнопка,
только в этом случае надо работать с элементом button1.
Рис. 11. Настройка текста для кнопки button1
Пришло время вспомнить о виртуальном устройстве, если оно работает, уже можно
запустить проект и посмотреть, как приложение будет выглядеть на экране устройства, а
выглядеть оно может как показано на рис. 12.
Рис. 12. Запуск приложения на виртуальном устройстве
Приложение выглядит довольно просто, но мы на многое и не рассчитывали.
Главное, что нас интересует, это наличие всех элементов на экране, верный текст в
каждом элементе, где он предусмотрен и возможность вводить числа в поле ввода. На рис.
12 видно, что все требования выполнены. Приложение есть, его можно запустить на
виртуальном или реальном устройстве, но оно ничего не делает. Следующим шагом будет
реализация логики приложения, т. е. обработка события нажатия на кнопку, как было
прописано в задании.
4 Реализация логики приложения
Приступим непосредственно к программированию, работать будем с файлом
src/com.example.projectn/MainActivity.java. Найдем этот файл в Package Explorer см. рис.
13, откроем и начнем редактировать.
Рис. 13. Файл MainActivity.java в Package Explorer
Пока файл выглядит следующим образом, см. рис. 14.
Рис. 14. Файл MainActivity.java после создания приложения
Можно заметить, что класс MainActivity является наследником класса Activity и в
нем уже реализован метод onCreate(), который запускается при первоначальном создании
активности, нам потребуется его дополнить, но об этом чуть позже.
Мы предполагаем программно менять информацию в поле TextView, получать значение
из поля EditText и обрабатывать события нажатия на кнопку Button, поэтому необходимо
объявить соответствующие переменные, как поля класса MainActivity:
TextView tvInfo;
EditText etInput;
Button bControl;
Чтобы не было ошибок, необходимо импортировать пакет android.widget, который
содержит все элементы графического интерфейса:
import android.widget.*;
На самом деле среда разработки подскажет, что делать.
Теперь необходимо связать эти переменные с элементами интерфейса, уже
добавленными нами в activity_main.xml, сделать это необходимо в методе onCreate(), а для
получения уже созданного элемента интерфейса воспользуемся методом findViewById().
Итак в метод onCreate() добавим следующие строки:
tvInfo = (TextView)findViewById(R.id.textView1);
etInput = (EditText)findViewById(R.id.editText1);
bControl = (Button)findViewById(R.id.button1);
Метод findViewById() возвращает объект класса View, который является общим
предком для всех компонентов пользовательского интерфейса, для того чтобы избежать
возможных ошибок в скобках перед вызовом метода указываем до какого конкретно
компонента необходимо сузить возможности объекта View.
Пришло время выполнить обработку нажатия на кнопку. Вернемся к файлу
activity_main.xml в графический режим редактирования, выберем элемент Button и на
вкладке со свойствами элемента найдем свойство On Click и запишем в него onClick - имя
метода, который будет обрабатывать нажатие на кнопку. Как это выглядит показывает
рис. 15.
Рис. 15. Настройка свойства On Click для кнопки
Эти же действия можно выполнить в фале activity_main.xml, достаточно дописать
выделенную на рис. 16 строку:
Рис. 16. Настройка свойствами On Click для кнопки в файле XML
Для настройки свойств элементов интерфейса достаточно использовать любой
способ: графический или редактирование XML файла.
Вернемся в файл MainActivity.java, в класс активности необходимо добавить метод:
public void onClick(View v){...}
Имя метода не обязательно должно быть onClick(), главное, чтобы оно совпадало с
именем, указанным в свойстве On Click. В этом методе и будет происходить все наше
программирование в этой лабораторной работе.
Нам потребуются две переменные:
o целочисленная для хранения загаданного числа (случайное число от 1 до 100);
o логическая для хранения состояния закончена игра или нет.
Обе эти переменные имеет смысл объявить как поля класса активности,
первоначальные значения присвоить в методе onCreate.
Получить целочисленное значение из поля ввода, можно с помощью следующей
конструкции:
Integer.parseInt(etInput.getText().toString())
изменить значение текста в информационном поле можно с помощью следующей
конструкции:
tvInfo.setText(getResources().getString(R.string.ahead));
в данном случае в информационном поле появится значение строкового ресурса с именем
ahead.
Осталось реализовать логику приложения в методе onClick(). Предлагаем написать
код этого метода самостоятельно, для контроля в приложении предложен листинг,
который содержит один из вариантов кода описанного приложения.
4.5 Немного о работе с эмулятором
При выполнении данной работы мы использовали эмулятор для проверки
работоспособности приложения. Рассмотрим некоторые возможности, облегчающие и
ускоряющие взаимодействие с виртуальным устройством.
Во-первых, существует набор полезных комбинаций клавиш для управления
виртуальным устройством:
o Alt+Enter - разворачивает эмулятор до размеров экрана;
o Ctrl+F11 - меняет ориентацию эмулятора с портретной на альбомную и обратно;
o F8 - включает/выключает сеть.
Полный список комбинаций клавиш для работы с эмулятором можно найти по
ссылке: http://developer.android.com/tools/help/emulator.html.
Во-вторых, кто бы ни работал с эмулятором, тот на себе прочувствовал насколько
терпеливым надо быть, чтобы взаимодействовать с ним, так медленно он работает.
Существует решение для ускорения работы эмулятора Android и этим решением является
Intel Hardware Accelerated Execution Manager (Intel® HAXM).
Intel Hardware Accelerated Execution Manager (Intel® HAXM) - это приложение с
поддержкой аппаратной виртуализации (гипервизор), которое использует технологию
виртуализации Intel для ускорения эмуляции приложений Android на компьютере для
разработки. (http://software.intel.com/ru-ru/android/articles/intel-hardware-accelerated-
execution-manager)
Intel HAXM способен ускорить работу эмулятора для x86 устройств. При этом
эмулятор будет работать со скоростью, приближенной к скорости работы реального
устройства, что поможет сократить время на запуск и отладку приложения. Подробно
познакомиться с установкой Intel HAXM и настройкой эмулятора на работу с ускорителем
можно в статье по ссылке: http://habrahabr.ru/company/intel/blog/146114/.
В-третьих, не стоит прерывать процесс запуска виртуального устройства,
наберитесь терпения, на старых компьютерах первый запуск AVD может занять до 10
минут, на современных - от одной до трех минут. После того, как создали и запустили
виртуальное устройство имеет смысл оставить его открытым, при всех последующих
запусках приложения будет использоваться уже открытое виртуальное устройство, что
позволит сэкономить время.
6 Заключение
В лабораторной работе рассмотрен процесс разработки простого приложения переднего
плана. Описано создание активности, настройка интерфейса и реализация логики
приложения. Других компонентов в приложении не предусмотрено. В последующих
работах будут рассматриваться приложения, содержащие несколько активностей.
Смешанные приложения, работающие на переднем плане и при этом поддерживающие
сервисы, работающие в фоновом режиме.
Задания для самостоятельной работы:
Разумеется предложенная в приложении реализация не идеальна, требует
доработок:
Что произойдет, если кнопка будет нажата до ввода какого-либо числа? Скорей
всего приложение будет остановлено, необходимо как-то отслеживать этот вариант
развития событий и адекватно реагировать. Предлагаем поработать самостоятельно над
этой проблемой.
Что произойдет, если пользователь введет число меньшее нуля или большее 100?
Скорей всего приложение обработает этот ввод, но было бы лучше, если бы появилось
сообщение о том, что введенное число не удовлетворяет условиям задачи.
Как завершить приложение? И надо ли это делать?
Предлагаем подумать, как еще можно улучшить приложение и реализовать эти
улучшения.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Приложение 1.
package com.example.projectn;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
public class MainActivity extends Activity {
TextView tvInfo;
EditText etInput;
Button bControl;
int guess;
boolean gameFinished;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView)findViewById(R.id.textView1);
etInput = (EditText)findViewById(R.id.editText1);
bControl = (Button)findViewById(R.id.button1);
guess = (int)(Math.random()*100);
gameFinished = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClick(View v){
if (!gameFinished){
int inp=Integer.parseInt(etInput.getText().toString());
if (inp > guess)
tvInfo.setText(getResources().getString(R.string.ahead));
if (inp < guess)
tvInfo.setText(getResources().getString(R.string.behind));
if (inp == guess)
{
tvInfo.setText(getResources().getString(R.string.hit));
bControl.setText(getResources().getString(R.string.play_more));
gameFinished = true;
}
}
else
{
guess = (int)(Math.random()*100);
bControl.setText(getResources().getString(R.string.input_value));
tvInfo.setText(getResources().getString(R.string.try_to_guess));
gameFinished = false;
}
etInput.setText("");
}
}
Лабораторная работа 3. Основы разработки интерфейсов мобильных приложений
Цель лабораторной работы: Изучение основ разработки интерфейсов мобильных
приложений
Задачи лабораторной работы:
Изучить элементы интерфейса
Практическим путём научиться размещать элементы и менять их свойства
Разработать прототип интерфейса собственного приложения
1 Введение
Лабораторная работа посвящена разработке интерфейсов мобильных приложений.
Работа содержит подробное описание построения гармоничного понятного
пользовательского интерфейса для главной активности приложения и описание основных
элементов интерфейса. Лабораторная работа поможет выбрать концепцию своего
приложения и начать разработку его интерфейса.
2 Создание прототипа интерфейса
Рассмотрим пример разработки интерфейса приложения, которое ищет в сети
Интернет изображения по запросу пользователя, позволяет оценивать их, скачивать, и
посещать интернет-страницы сайтов, на которых было найдено изображение.
2.1 Создание заготовки для приложения
Выглядеть главное окно будет примерно так:
Рис. 1. Интерфейс главной активности
На нём присутствуют поле ввода текста для запроса пользователя и кнопка,
начинающая поиск изображений. Внизу экрана две кнопки: "like" и "dislike", с их
помощью пользователь сможет оценить изображение. После того, как пользователь
сделает оценку изображения, текущее изображение закрывается и загружается
следующее.
Итак, начнём с создания нового проекта. Назовём его "RatingImages" ("Рейтинг
изображений").
На данном этапе изучения программирования под Android не обязательно менять
иконку запуска, но эта лабораторная работа направлена на разработку дизайна
интерфейса, и потому, приступим.
Создайте иконку на свой вкус.
Рис. 2. Создание иконки
После создания проекта откройте activity_main.xml из каталога res/layout/.
Когда вы откроете файл activity_main.xml, вы увидите графический редактор
макета. Благодаря этому редактору создание интерфейсов стало ещё интереснее,
поскольку добавить элемент на форму можно при помощи перетаскивания мышью, к тому
же, благодаря графическому редактору, не обязательно запускать эмулятор, чтобы
увидеть результат своих трудов.
Теперь щелкните по вкладке activity_main.xml в нижней части экрана. Открылся
XML-редактор кода. Этот способ редактирования стандартный, но все изменения,
вносимые в этот документ, можно так же ощутить визуально, перейдя на графический
редактор.
Вернёмся на вкладку с графическим редактором. Во-первых, подготовим документ
к началу работы, для этого удалите <TextView>.
Результат выглядит так:
Рис. 3. Проект, готовый к началу разработки
На рабочей области экрана остался один элемент. Это макет <RelativeLayout>. В
нём позиция дочерних элементов может быть описана по отношению друг к другу или к
родителю. Подробнее о макетах можно узнать здесь.
Два атрибута, ширина и высота (android:layout_width и android:layout_height),
требуются для всех элементов для того, чтобы указать их размер.
Так как <RelativeLayout> - это корень в макете, то нужно, чтобы он заполнял всю
область экрана. Это достигается при помощи установки параметра "match_parent" для
ширины и высоты. Это значение указывает, что ширина и высота элемента будет равна
ширине и высоте родителя.
Рис. 4. Свойства <RelativeLayout> элемента
Как установить это значение? Будем разбираться.
Однократным щелчком левой кнопкой мыши по надписи "Width" активируйте
строку с параметрами ширины:
Рис. 5. Свойства <RelativeLayout> элемента, выбран атрибут android:layout_width
Щелчком левой кнопки мыши по области ввода вызовите диалоговое окно, и
двойным щелчком сделайте выбор параметра:
Рис. 6. Свойства <RelativeLayout> элемента, выбран параметр "match_parent"
Или щелчком правой кнопки мыши по <RelativeLayout> в Outline:
Рис. 7. Контекстное меню <RelativeLayout> элемента
При выполнении первого способа вы увидели еще два возможных параметра:
"fill_parent" и "wrap_content".
На самом деле, match_parent = fill_parent, но "fill_parent" считается устаревшим, и к
использованию в новых проектах предлагается "match_parent".
Параметр "wrap_content" указывает, что представление будет увеличиваться при
необходимости, чтобы поддерживать соответствие содержанию экрана.
2.2 Добавление текстового поля
Для начала добавьте элемент <LinearLayout> с горизонтальной ориентацией в
<RelativeLayout>, и укажите для ширины и высоты параметр "wrap_content". Теперь, для
создания пользовательского редактируемого текстового поля, добавьте элемент
<EditText> с параметром "wrap_content" для ширины и высоты в <LinearLayout>.
Сейчас должно получиться примерно следующее:
Рис. 8. Добавление текстового поля
Возможно, появился желтый предупреждающий знак, но сейчас это не важно, со
временем он исчезнет. Наличие таких предупреждений никак не влияет на
компилируемость проекта.
Теперь переходим к настройке добавленных нами элементов.
Для многих элементов нужно назначать id, он обеспечивает уникальный
идентификатор, который можно использовать как ссылку на объект из кода вашего
приложения для управления им.
Откроем редактор кода XML-файла и обратим внимание на элемент
<EditText>:
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<requestFocus/>
</EditText>
Строка <requestFocus/> появляется добавлением элемента requestFocus (папка
Advanced), и позволяет установить фокус на нужном компоненте. Важно использовать
этот элемент, когда у вас имеется, к примеру, три текстовых поля, и нужно, чтобы фокус
был на втором из них.
При указании id, знак (@) требуется в том случае, если вы имеете в виду любой
ресурс объекта из XML-файла. За ним следуют тип ресурса (в данном случае ID), косая
черта (слеш) и имя ресурса (editText1).
Знак плюс (+) перед типом ресурсов необходим только тогда, когда вы впервые
определяете идентификатор ресурса.
По сути, id, который создается автоматически, уже уникален, но грамотнее
переименовывать id в соответствии со назначением элемента.
Зададим id для текстового поля. Для этого прямо в коде строку
android:id="@+id/editText1" заменяем на android:id="@+id/edit_message", жмём CTRL+S и
открываем графический редактор. Если всё хорошо, то в свойствах текстового поля в
графе id будет следующее:
Рис. 9. Идентификатор текстового поля
Добавим в код ещё две строки:
android:ems="10" - задает соответствия для симметричного отображения шрифтов,
android:hint="@string/edit_message" - содержание тестового поля "по умолчанию",
т.е. пока пользователь не начал вводить в поле текст. Вместо того, чтобы
использовать просто слово (например android:hint="message"), что крайне не
удобно при изменении основного языка приложения, используется ссылка на
значение, хранящееся в файле strings.xml. Поскольку это относится к конкретному
ресурсу (а не только к id), знак плюс не нужен.
Однако, мы ещё не определили строку ресурсов файле strings.xml, и потому вы
получите следующее:
Рис. 10. Предупреждение: не найден ресурс, на который прописана ссылка
Для того, чтобы ссылка на ресурс начала работать, нужно этот ресурс создать.
Откройте файл res/values/strings.xml. Очевидно, что его тоже можно редактировать
двумя способами: графически и вручную.
Выбирайте тот способ, который больше по душе.
Рис. 11. Редактирование файла ресурсов графическим способом; добавление нового
ресурса
Рис. 12. Редактирование файла ресурсов графическим способом; выбор типа ресурса,
выбран тип String
Заполняем поля "Имя" и "Значение":
Рис. 13. Редактирование файла ресурсов графическим способом
Сохраняем и любуемся результатом:
Рис. 14. Отображение текста "По умолчанию" в поле ввода
Подробнее о ресурсах - здесь.
Аналогично создадим id для <LinearLayout>
android:id="@+id/linear1"
Сохраните изменения.
2.3 Добавление кнопки
Теперь добавьте <Button> в макет после элемента <EditText>:
Рис. 15. Новая кнопка
Чтобы кнопка трансформировалась в соответствии с текстом кнопки, ширина и
высота должны быть установлены во "wrap_content".
Теперь поменяем надпись на кнопке на "Go!" с помощью ссылки на ресурс в XML-
коде главной активности и добавления одного ресурса в файл strings.xml:
Рис. 16. Редактор XML-кода файла strings.xml
Сохраните.
На графическом редакторе главной активности будут изменения:
Рис. 17. Кнопка приняла новую форму, в соответствии с надписью на ней
Теперь, когда мы поместили два главных представления на <LinearLayout>
элемент, настало время добавить ещё два параметра для этого элемента.
Речь идет о "приращении" правого и левого краёв лейаута к правому и левому
краям <RelativeLayout> элемента соответственно. А сделать это проще простого - просто
потяните мышкой один край к другому!
Рис. 18. "Приращение" правого края
Зелёные стрелки по краям дают понять, к какому элементу удалось прицепить
край:
Рис. 19. <LinearLayout> после выравнивания
И, конечно, это отобразится в свойствах:
Рис. 20. Свойства <LinearLayout>
2.4 Смена фона
Идём дальше - попробуем поменять фон.
Чтобы изменить цвет фона на чёрный, нужно в XML-коде главной активности
написать одну строку в блоке <RelativeLayout> элемента:
android:background="#000000".
Сохраните и проверьте результат, открыв графический редактор.
Рис. 21. Фон стал чёрным
Красиво, но скучно. Как сделать фон ещё интереснее? Поместить на него рисунок!
Для этого сначала в папке res/ создадим папку drawable/
Рис. 22. Создание папки
Рис. 23. Создание папки: имя папки
После того, как папка создана, нужно положить в эту папку изображение -
картинка называется got.png:
Рис. 24. Изображение в папке drawable/
После этого в папке drawable/ нужно создать файл background.xml, важно при
создании выбрать параметр bitmap.
Рис. 25. Создание нового XML-файла
Рис. 26. Создание нового XML-файла
Как только новый файл открылся, пропишем в него одну строчку, с указанием на
то, откуда и какой файл использовать:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/got">
</bitmap>
Вернемся в редактор XML-кода, туда, где прописывали цвет фона.
Вместо строки android:background="#000000" напишем ссылку на XML-файл
android:background="@drawable/background".
Сохраняем и видим результат:
Рис. 27. Новый фон
Несомненно, фон смотрится хорошо, но очевидно, что кнопка и поле ввода просто
затерялись, а это значит, что для этого приложения такой фон не подходит. Можно
продолжить подбирать изображения на фон, но лучше создать черепичную заливку
небольшим изображением. На этом сайте можно найти узор на любой вкус!
Когда вы выбрали узор и скачали его, скопируйте изображение в папку drawable/.
Рис. 28. Копирование изображения
Рис. 29. Скопированное изображение
Теперь немного изменим файл background.xml.
Во-первых, нужно изменить имя изображение со старого на новое.
android:src="@drawable/starring"
Во-вторых, добавим такую строчку:
android:tileMode="repeat"
Сохраняем.
Атрибут android:tileMode задает тип заполнения, в данном случае простое
повторение исходного изображения. Кроме repeat возможны варианты clamp и mirror.
Помните, что данный приём применим только к bitmap, к фигурам, созданным при
помощи XML, применить данную операцию нельзя.
Рис. 30. Варианты заполнения
Настало время посмотреть, что из этого получилось:
Рис. 31. Фон из звездочек
В <RelativeLayout> стоит добавлять android:background только в том случае, если
вы хотите неподвижный фон, а в <ScrollView> чтобы фон прокручивался вместе с
контентом.
Если вы выбрали тёмный фон, то стоит поменять цвет текста, вводимого в поле
ввода, например на белый.
Для этого в блок <EditText> добавим строчку
android:textColor="#ffffff"
2.5 Область просмотра изображений
Теперь займемся созданием области отображения изображений, которые
пользователь будет оценивать.
Добавьте "рамку" <FrameLayout> в <RelativeLayout>:
Рис. 32. Добавление "рамки"
Обратите внимание, что предупреждающий жёлтый треугольник исчез, но
появился у нового элемента, и это значит, что всё идёт по плану.
Укажем этому элементу ширину, высоту и id. Предупреждение должно пропасть.
Рис. 33. Свойства "рамки"
Сейчас FrameLayout "заезжает" на поле ввода и кнопку. Чтобы исправить это,
нужно задать для "рамки" параметр, который будет следить, чтобы "рамка" находилась
ниже, чем поле ввода и кнопка.
Выберите из списка Outline "рамку" и кликом правой кнопки мыши вызовите
контекстное меню: Other Properties -> Layout Parametrs -> Layout Below…
Рис. 34. Контекстное меню "рамки"
Появится окно. В нём выбираем из списка "ID" имя лейаута, на котором находятся
поле ввода и кнопка:
Рис. 35. Выбор элемента, ниже которого должна быть "рамка"
Жмём ОК и "рамка" примет вид:
Рис. 36. Новое расположение "рамки"
Теперь для наглядности поместим туда изображение.
Сначала поместим само изображение в папку res/drawable/ и обновим её.
Это нужно для того, чтобы новые данные загрузились в проект.
Рис. 37. Обновление папки
Теперь поместим внутрь "рамки" <ImageView>
Рис. 38. Перемещение <ImageView>
В появившемся окне выбираем нужное нам изображение и жмём OK
Рис. 39. Выбор файла
Изображение должно появится на активности:
Рис. 40. Визуализация изображения
Вместе с изображением появился новый предупреждающий знак.
В описании предупреждения сказано: "[Accessibility] Missing contentDescription
attribute on image". Давайте разберёмся, что это означает.
Атрибут android:contentDescription используется в программах, которые
поддерживают специальные возможности для людей с нарушениями зрения и слуха. То
есть, текст, прописанный в этом атрибуте, не будет показан на экране, но при включенной
в "Специальных возможностях" услуге "звуковые подсказки" этот текст будет
проговариваться, когда пользователь переходит к этому элементу управления.
Этот атрибут можно задать для ImageButton, ImageView и CheckBox, и задавать его
или нет - дело каждого.
Свойства у изображения должны быть следующими:
Рис. 41. Свойства изображения
2.6 Кнопки "like" и "dislike"
Пришло время создать кнопки оценивания.
Для этого добавьте на форму <RelativeLayout>, задайте для него ширину и высоту
wrap_content, и укажите id.
Снова в папку res/drawable/ нужно добавить файлы. Найдите изображения "Палец
вверх" и "Палец вниз", и поместите их в эту папку, после чего обновите её.
Изображения и другие полезные файлы можно скачать здесь.
Добавьте <ImageButton>, выберите изображение "Палец вверх", и переместите
<RelativeLayout> в такое положение:
Рис. 42. Новая кнопка
Укажите "рамке" быть выше, чем поле с кнопкой оценки:
Рис. 43. Контекстное меню "рамки"
Рис. 44. Выбор элемента, выше которого должна быть "рамка"
В результате должно получиться следующее:
Рис. 45. Новое расположение элементов
Добавьте еще одну кнопку - кнопку "Палец вниз". Она "наложилась" на первую
кнопку. Чтобы это исправить, проделайте с <RelativeLayout> то же самое, что и с
<LinearLayout>: растяните элемент влево и вправо, до получения такого результата:
Рис. 46. Выравнивание области с кнопками
Теперь расставьте кнопки по краям так, чтобы они "прикрепились" к краям.
Рис. 47. Выравнивание кнопок
Готово! Теперь можно запустить эмулятор и посмотреть, что получилось.
Рис. 48. Главная активность
2.7 Листинги
1)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="@drawable/background">
<LinearLayout
android:id="@+id/linear1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:orientation="horizontal" >
<EditText
android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/edit_message"
android:textColor="#ffffff" >
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
/>
</LinearLayout>
<FrameLayout
android:id="@+id/imgview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/relative2"
android:layout_below="@id/linear1" >
<ImageView
android:id="@+id/puppy"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/puppy"
/>
</FrameLayout>
<RelativeLayout
android:id="@+id/relative2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/imgview"
android:layout_alignParentBottom="true"
android:layout_alignRight="@+id/imgview" >
<ImageButton
android:id="@+id/imageButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:src="@drawable/dislike"
/>
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/like"
/>
</RelativeLayout>
</RelativeLayout>
2)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">RatingImages</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="edit_message">Enter your text here</string>
<string name="button_send">Go!</string>
</resources>
3)
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android
" android:src="@drawable/starring"
android:tileMode="repeat" >
</bitmap>
3 BuildingBlocks или элементы для построения интерфейса
Среда разработки "AndroidIDE" открывает широкий выбор готовых к
использованию элементов для создания выдающихся приложений.
Кнопка (Button) состоит из текста и/или изображения, которые дают понять
пользователю, что произойдёт, если нажать на эту кнопку. Важно помнить, что человек по
своей природе привык взаимодействовать с объектами, поэтому фон у кнопки абсолютно
не обязателен.
Рис. 49a. Кнопка-изображение Рис. 49b. Кнопка-текст
Текстовые поля (TextFields)
Текстовые поля позволяют пользователю вводить текст в приложения. Они могут
быть однострочными или многострочными. Одно касание текстового поля помещает
курсор на поле ввода и автоматически выводит на экран клавиатуру. В дополнение к
набору текста на клавиатуре текстовые поля позволяют выделять текст (вырезать,
копировать, вставить). Поиск вариантов завершения слова помогает правописанию слов и
упрощает поиск контактов в списке.
Рис. 50. Текстовые поля, поиск контактов
Рис. 51. Выделение текста
Ползунки и слайдеры (Seek Bars and Sliders)
Интерактивные ползунки позволяют выбирать значение из непрерывного или
дискретного диапазона значений путем перемещения ползунка. Наименьшее значение
находится слева, наибольшее справа.
Рис. 52. Ползунки в светлой и темной темах
Интерактивный характер слайдера делает его удобным для настроек, которые
отражают уровни интенсивности, такие как громкость, яркость, или насыщенность цвета.
Так, например, уровень громкости можно регулировать кнопками на корпусе
устройства или при помощи жеста пальцем по экрану.
Рис. 53. Настройка звука
Прогресс-бары и активности (Progress&Activity)
Прогресс-бары и показатели активности сигнализируют пользователям о
происходящем в данный момент времени длительном действии, что означает для
пользователя подождать завершения процесса некоторое время.
Рис. 54. Процесс загрузки приложения
Переключатели (Switches) позволяют пользователю выбирать параметры.
Есть три вида переключателей: флажки, радио-кнопки, и включение/выключение
выключателей.
Флажки используются в том случае, если из предлагаемого списка можно выбрать
одновременно несколько вариантов.
Рис. 55. Флажки
Радио-кнопки позволяют выбрать только один вариант из списка. Радио-кнопки
формируются в группы.
Рис. 56. Радио-кнопки
Выключатели дают возможность сделать флажок более наглядным, применив в
качестве основы кнопку-значок, которая может фиксироваться в нажатом состоянии.
Рис. 57. Выключатели
Диалоговые окна (Dialogs) помогают приложению взаимодействовать с пользователем.
Это может быть как банальный вопрос с двумя вариантами ответа (OK и Отмена), так и
сложные окна с множеством настраиваемых пользователем параметров.
Рис. 58. Примеры диалоговых окон
Средство выбора (Pickers) - это простой способ выбрать одно значение из набора
путём последовательного перебора. Удобный перебор предлагаемых значений при
помощи клика по стрелочкам или прокрутки, так же можно ввести значение с клавиатуры.
Рис. 59. Примеры пикеров
Прокрутка (Scrolling), как интуитивно ожидаемый элемент, уже давно плотно сидит в
головах у разработчиков и пользователей. Плавное или быстрое перемещение по
содержимому экрана и контенту, который "вылез" за рамки экрана, осуществляется
прокруткой, достаточно лишь провести пальцем по экрану в нужную сторону с желаемой
скоростью.
Для того чтобы индикатор прокрутки не занимал место у рабочей области экрана,
после приостановки пользования прокруткой, индикатор исчезает, и появляется снова,
стоит только начать "прокручивать" пальцем. Для удобства поиска чего-либо в
алфавитном списке, рядом с индикатором прокрутки возникает индекс с указанием на то,
в каком разделе находится индикатор.
Рис. 60. Индикатор и индекс прокрутки
Выпадающий список (Spinner) обеспечивает удобный способ выбора одного значения из
набора.
Рис. 61. Спиннер для выбора типа e-mail адреса
Вкладки (Tabs) позволяют легко просматривать и переключаться между различными
окнами или функциональными элементами приложения. Вкладки, прокручиваемые
движением пальца (ScrollableTabs), делают этот процесс еще прощё и приятнее.
Основные вкладки (FixedTabs) удобны при отображении трех и менее вкладок,
поскольку ширина вкладок фиксируется по самому длинному названию вкладки.
Рис. 62. Вкладки
Списки (Lists) удобны для представления нескольких позиций информации в
вертикальном расположении.
Рис. 63. Список
Сетки (GridLists) - это альтернатива стандартного списка. С помощью сетки можно
создавать более удобное представление образных данных, нежели с помощью списка. Ещё
одним плюсом сетки является то, что прокрутку можно осуществлять не только в
вертикальном, но и в горизонтальном направлении.
Однако нужно стараться избегать создания сетки с возможностью прокрутки в
обоих измерениях сразу.
Использование ярлычков для всех панелей сетки и полупрозрачных "занавесок"
для неактивных панелей помогает пользователю быстрее понять, что скрывается под той
или иной панелью.
Рис. 64. Сетка с альбомами
Задание
Создайте в приложении на главной активности строку, в которой будет выводиться
адрес сайта, откуда загружено изображение, и кнопку для перехода на этот сайт.
Подумайте над интерфейсом собственного приложения. Какие элементы
управления оно может содержать? Попробуйте воплотить его интерфейс на практике.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 4. Создание многоэкранного приложения
Цель лабораторной работы: Научиться создавать приложения, состоящие из нескольких
активностей, и диалоговые окна, а также познакомиться с элементами тач-интерфейса
Задачи лабораторной работы:
Научиться создавать многоэкранные приложения
Научиться создавать диалоговые окна и всплывающие подсказки
Научиться писать приложения со слайдингом
1 Введение
Данная лабораторная работа посвящена различным способам разработки
многоэкранных приложений. Предлагается разработать три приложения, каждое из
которых посвящено отдельному аспекту этой тематики. По завершению работы над
приложениями слушатели смогут разработать собственные программы с использованием
изученных компонентов и технологий.
2 Создание многоэкранного приложения со списком
1. Создайте проект MultiScreen. В java-файле замените Activity на ListActivity. Класс
ListActivity разработан таким образом, что на экране есть только прокручиваемый список
и ему не нужна дополнительная разметка. Поэтому файл activity_main.xml можно удалить.
Также следует удалить следующую строчку из класса MultiScreen:
setContentView(R.layout.activity_main);
т.к. layout-файл мы только что удалили.
2. Теперь нам нужен посредник, который свяжет список и названия элементов этого
списка. Для этого в Android есть интерфейс Adapter. Нам потребуется наследник этого
класса ArrayAdapter:
new ArrayAdapter(Context context, int textViewResourceId, String[] objects)
В качестве аргументов ArrayAdapter потребует текущий контекст, идентификатор
ресурса с разметкой для каждой строки, массив строк.
Мы можем указать в качестве текущего контекста ListActivity (можно использовать
ключевое слово this), готовый системный идентификатор ресурса
(android.R.layout.simple_list_item_1) и созданный массив строк (String[] islands = {
"Канары", "Курилы", "Мальдивы", "Филиппины"};). А выглядеть это будет так:
private ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, islands);
Обратите внимание на строчку android.R.layout.simple_list_item_1. В ней уже
содержится необходимая разметка для элементов списка. Если вас не устраивает
системная разметка, то можете создать собственную разметку в xml-файле и подключить
её.
Осталось только подключить адаптер:
setListAdapter(adapter);
3. Теперь нам нужно подключить обработку нажатия. Для этого необходимо знать, на
какой пункт списка осуществляется нажатие. Существует специальный интерфейс
OnItemClickListener с методом onItemClick(). Подключаем обработчик:
getListView().setOnItemClickListener(itemListener); Набираем все в том же onCreate
OnItemClickListener itemListener = new OnItemClickListener(){
}
Если подчеркнётся первое слово, то импортируем нужный класс. Далее подведём
курсор ко второму слову new OnItemClickListener. Нам будет предложено добавить метод
(Add unimplemented method). Соглашаемся и получаем заготовку:
OnItemClickListener itemListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
}
};
Меняем имена переменных arg на более привычные и понятные
public void onItemClick(AdapterView<?> parent,
View v, int position, long id);
4. Осталось описать, что будет происходить при нажатии на элемент.
По нашей задумке каждый элемент будет открывать новое окно с
соответствующим содержимым.
Для начала следует создать еще 4 класса: Canari, Curili, Maldivi, Philippini, и 4 xml-
оболочки к ним. Можно просто создать и копировать по одному файлу в обеих
директориях, меняя только название и содержимое.
Например, создадим файлы Canari.java и canari.xml типа Activity. Обратите
внимание, что как только мы создали ещё один java-файл, нужно записать его в файл
манифеста, иначе приложение не будет видеть этот новый класс. Файл
AndtoidManifest.xml находится сразу под папкой res. Добавьте код с именем класса в тегах
<activity></activity>, сразу под главной активностью.
<activity android:name="com.mypackage.multiscreen.Canari"
android:label="@string/can" >
</activity>
Строку can нужно создавать в файле strings.xml, также как и другие строки.
Перейдем в файл canari.xml и создадим на экране TextView. Экраны будут
отличаться друг от друга картинками. Возьмите 4 любые картинки с вашего компьютера
(можете также найти их в интернете) и перетащите из проводника Windows в папку
res\drawable. Теперь вы можете поместить элемент ImageView на экран и, выбрав нужную
картинку из ресурсов проекта, подключить ее.
Остальные экраны создаются аналогично.
5. Теперь перейдем в главный класс и опишем обработку события onItemClick(). Создадим
переключатель, который зависит от номера элемента.
switch (position) {
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
break;
}
Для запуска нового экрана необходимо создать экземпляр класса Intent и указать
класс, на который будем переходить (у нас их 4, поэтому для каждого случая выбираем
свою). После этого вызывается метод startActivity(), который и запускает новый экран.
Intent intent = new Intent(MultiScreen.MainActivity.this, Canari.class);
startActivity(intent);
6. Теперь осталось добавить всплывающее окно Toast, которое будет показывать, какой
элемент мы выбрали. Этот виджет можно импортировать так же, как и предыдущие. Нам
потребуется метод makeText(), у которого есть три параметра: контекст приложения,
текстовое сообщение и продолжительность времени показа уведомления.
Toast.makeText(getApplicationContext(), "Вы выбрали " +
parent.getItemAtPosition(position).toString(),Toast.LENGTH_SHORT).show();
Полные листинги файлов проекта, в которых были сделаны изменения, см. ниже.
package com.mypackage.multiscreen;
import android.os.Bundle;
import android.view.View;
import android.app.ListActivity;
import android.content.Intent;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Toast;
public class MultiScreenMainActivity extends ListActivity{
String[] islands = { "Канары", "Курилы", "Мальдивы", "Филиппины"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, islands);
setListAdapter(adapter);
OnItemClickListener itemListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long
id) {
switch (position) {
case 0:
Intent intent = new Intent(MultiScreenMainActivity.this, Canari.class);
startActivity(intent);
break;
case 1:
Intent intent1 = new Intent(MultiScreenMainActivity.this, Curili.class);
startActivity(intent1);
break;
case 2:
Intent intent2 = new Intent(MultiScreenMainActivity.this, Maldivi.class);
startActivity(intent2);
break;
case 3:
Intent intent3 = new Intent(MultiScreenMainActivity.this,
Philippini.class);
startActivity(intent3);
break;
}
Toast.makeText(getApplicationContext(), "Вы выбрали " +
parent.getItemAtPosition(position).toString(),
Toast.LENGTH_SHORT).show();
}
};
getListView().setOnItemClickListener(itemListener);
}
}
Листинг 1. Файл MultiScreenMainActivity.java
package com.mypackage.multiscreen;
import android.app.Activity;
import android.os.Bundle;
public class Canari extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.canari);
}
}
Листинг 2. Файл Canari.java
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="186dp"
android:src="@drawable/canari" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="80dp"
android:text="@string/enjoy"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>
Листинг 3. Файл canari.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Куда бы поехать в отпуск?</string>
<string name="action_settings">Settings</string>
<string name="enjoy">Enjoy yourself!</string>
<string name="can">Канары</string>
<string name="phil">Филиппины</string>
<string name="cur">Курилы</string>
<string name="mal">Мальдивы</string>
</resources>
Листинг 4. Файл strings.xml
Рис. 1. Приложение "Куда бы поехать в отпуск?", запущенное на эмуляторе
Рис. 2. Приложение "Куда бы поехать в отпуск?", запущенное на устройстве
3 Создание диалогового окна
1. Создайте новый проект Dialog
2. Создайте кнопку на вашей активности и назовите ее "Выбрать фон" (для этого нужно в
файле strings создать строку соответствующего содержания). Присвойте активности и
кнопке id.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<Button
android:id="@+id/background_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="174dp"
android:text="@string/bg"/>
</RelativeLayout>
Листинг 5. Код файла activity_main.xml
3. Наше приложение меняет фон на выбранный. Значит, нам нужно создать цвета и их
названия в файле strings.xml. Как вы помните, этот файл находится в папке values, которая
в свою очередь находится в папке res. Также создадим строку messages, которая нам
понадобятся для диалогового окна.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Dialog</string>
<string name="action_settings">Settings</string>
<string name="bg">Выбрать фон</string>
<string name="message">Хотите поменять фон?</string>
<color name="redColor">#FF0000</color>
<color name="yellowColor">#FFFF00</color>
<color name="greenColor">#00FF00</color>
<string name="red">Красный</string>
<string name="yellow">Жёлтый</string>
<string name="green">Зелёный</string>
</resources>
Листинг 6. Файл strings.xml
4. Перейдем в файл MainActivity.java. Создайте следующие переменные:
private Button bgButton;
public RelativeLayout relativeLayout;
Context context;
Если компилятор подчеркивает тип и сообщает об ошибке, например, подчеркивает
Context, наведите курсор на подчеркнутое слово: должно появиться контекстное меню,
предлагающее варианты, как можно исправить ошибку. Выберете Import 'Context', чтобы
импортировать библиотеку.
5. Теперь нужно описать, что будет происходить при нажатии на нашу кнопку.
Для начала свяжем объекты из activity_main.xml и переменные в MainActivity.java
через id (в onCreate):
bgButton = (Button)findViewById(R.id.background_button);
relativeLayout = (RelativeLayout)findViewById(R.id.relativelayout);
Context - это объект, который предоставляет доступ к базовым функциям
приложения.
Добавляем в код
context = MainActivity.this;
6. Теперь нужно добавить событие onClick и навесить на кнопку OnClickListener.
Добавляем в заголовок класса MainActivity implements OnClickListener. Чтобы связать
кнопку и Listener в onCreate пишем
bgButton.setOnClickListener(this);
Создадим теперь событие onClick
@Override
public void onClick(View v){
}
В этом объекте создаем собственно диалог и называем его:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.message);
AlertDialog alert = builder.create();
alert.show();
Мы будем создавать диалоговое окно, предоставляющее пользователю выбор из
списка. Для этого потребуется ещё одна переменная, которая сформирует список из
имеющихся строк.
final CharSequence[] items = {
getText(R.string.red), getText(R.string.yellow), getText(R.string.green)
};
7. Сформируем собственно наш список и зададим еще один Listener, который будет
менять цвет фона на выбранный:
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0: { relativeLayout.setBackgroundResource(R.color.redColor);
break;}
case 1: {relativeLayout.setBackgroundResource(R.color.yellowColor);
break;}
case 2: {relativeLayout.setBackgroundResource(R.color.greenColor);
break;}
}
8. Осталось добавить в каждый case всплывающие окна Toast, и приложение полностью
готово!
Toast.makeText(context, R.string.green, Toast.LENGTH_LONG).show();
package com.mypackage.dialog;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private Button bgButton;
public RelativeLayout relativeLayout;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bgButton = (Button) findViewById(R.id.background_button);
bgButton.setOnClickListener(this);
context = MainActivity.this;
relativeLayout = (RelativeLayout)findViewById(R.id.relativelayout);
}
@Override
public void onClick(View v) {
final CharSequence[] items = {getText(R.string.red) ,
getText(R.string.yellow),getText(R.string.green)
};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.message);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0: { relativeLayout.setBackgroundResource(R.color.redColor);
Toast.makeText(context, R.string.red, Toast.LENGTH_LONG).show();
break;}
case 1: {relativeLayout.setBackgroundResource(R.color.yellowColor);
Toast.makeText(context, R.string.yellow, Toast.LENGTH_LONG).show();
break;}
case 2: {relativeLayout.setBackgroundResource(R.color.greenColor);
Toast.makeText(context, R.string.green, Toast.LENGTH_LONG).show();
break;}
}
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Листинг 7. Код файла MainActivity.java
Скриншоты работающего приложения
Рис. 3. Приложение "Dialog", запущенное на эмуляторе
Рис. 4. Диалоговое окно
Рис. 5. Выбран зеленый фон
Рис. 6. Приложение "Dialog", запущенное на устройстве
4 Создание приложения со слайдингом из шаблона
1. Создайте проект TabsAndSwipe. Обратите внимание: чтобы использовать стандартный
шаблон активности Fixed Tabs + Swipe, вам необходимо при создании проекта указать
Minimum Required SDK не меньше, чем API11, т.к. в более ранних версиях этот шаблон не
поддерживается.
Рис. 7. Создание приложения TabsAndSwipe
Следующие три окна оставляем без изменений.
Далее в окне Blank Activity выбираем в графе Navigation Type.
Рис. 8. Выбор шаблона Navigation Type
2. Посмотрите на структуру проекта: у вас появились два xml-файла в папке res\layout -
activity_main.xml и fragment_main_dummy.xml.
3. Запустите приложение, чтобы убедиться, что все компилируется правильно.
4. Создайте три копии файла fragment_main_dummy.xml. Назовите их соответственно
first_tab, second_tab и third_tab. Присвойте элементу TextView в каждом файле
уникальный id. Можете поместить на экраны какие-набудь элементы, например картинки
или надписи.
5. Теперь переходим к файлу MainActivity.java. Нас интересует класс
public static class DummySectionFragment extends Fragment
Делаем три копии данного класса со всем содержимым, называя их соответственно
FirstActivity, SecondActivity, ThirdActivity.
6. Поменяйте в них следующие строки
View rootView = inflater.inflate(R.layout.fragment_main_dummy, container, false);
TextView dummyTextView = (TextView)
rootView.findViewById(R.id.section_label);
Замените R.layout.fragment_main_dummy на R.layout.first и R.id.section_label на
R.id.section_label1 соответственно.
7. Поменяйте строки-названия секций в файле strings.xml.
<string name="title_section1">Лента</string>
<string name="title_section2">Фото</string>
<string name="title_section3">Карта</string>
8. Теперь переходим к классу SectionsPagerAdapter(). Нас интересует его метод Fragment
getItem(), именно его мы будем изменять. Чтобы при перелистывании менялось не только
содержимое TextView, но и всего фрагмента, замените код этого метода на следующий:
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a DummySectionFragment (defined as a static inner class
// below) with the page number as its lone argument.
Fragment fragment=null;
Bundle args;
switch (position) {
case 0:
fragment = new FirstFragment();
args = new Bundle();
args.putInt(FirstFragment.ARG_SECTION_NUMBER, position + 1);
fragment.setArguments(args);
break;
case 1:
fragment = new SecondFragment();
args = new Bundle();
args.putInt(SecondFragment.ARG_SECTION_NUMBER, position + 1);
fragment.setArguments(args);
break;
case 2:
fragment = new ThirdFragment();
args = new Bundle();
args.putInt(ThirdFragment.ARG_SECTION_NUMBER, position + 1);
fragment.setArguments(args);
break;
}
return fragment;
}
9. Приложение готово, можно запускать.
Рис. 9. Приложение TabsAndSwipe, запущенное на устройстве
Задание
Подумайте над собственным приложением, сочетающим различные возможности
проектирования многооконных приложений, рассмотренные выше. Создайте прототип
этого приложения и настройте его пользовательский интерфейс.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 5. Демонстрации распознавания стандартных жестов
Цель лабораторной работы: разработать простейшие приложения для демонстрации
распознавания стандартных жестов.
Задачи лабораторной работы:
рассмотреть распознавание всех поддерживаемых жестов;
рассмотреть распознавание только части поддерживаемых жестов.
1 Введение
Для работы со стандартными жестами Android предоставляет класс GestureDetector.
Этот класс содержит два вложенных интерфейса-слушателя: OnGestureListener и
OnDoubleTapListener, эти интерфейсы задают методы, отслеживающие стандартные
жесты. А также GestureDetector содержит вложенный класс SimpleOnGestureListener,
который содержит пустые реализации, возвращающие значение false, где это необходимо,
всех методов интерфейсов: OnGestureListener и OnDoubleTapListener.
В лабораторной работе рассмотрим две возможности распознавания жестов:
o случай распознавания всех поддерживаемых жестов, для этого реализуем в классе
активности оба интерфейса;
o случай распознавания только некоторого набора поддерживаемых жестов, для
этого в классе активности объявим внутренний класс-наследник класса
GestureDetector.SimpleOnGestureListener.
2 Распознавание всех поддерживаемых жестов
Разработаем приложение, в котором продемонстрируем распознавание всех
поддерживаемых жестов. Приложение содержит одну активность, одно информационное
поле для вывода информации о распознанном жесте. Приложение работает следующим
образом: пользователь выполняет один из поддерживаемых сенсорных жестов, в
информационном поле отображается информация о распознанном жесте.
1. Создадим простое приложение и добавим на форму TextView для вывода
информации.
2. Настроим логику приложения. В java класс, соответствующий активности внесем
следующие дополнения.
o Класс активности должен реализовывать интерфейсы:
GestureDetector.OnGestureListener и GestureDetector.OnDoubleTapListener, для
этого в объявление класса добавим конструкцию:
implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener
o Нам понадобится экземпляр класса GestureDetectorCompat поэтому в качестве поля
класса активности объявим следующую переменную:
GestureDetectorCompat mDetector;
В методе onCreate() класса активности, создадим экземпляр класса
GestureDetectorCompat и присвоим его переменной mDetector:
mDetector = new GestureDetectorCompat(this,this);
одним из параметров конструктора является класс, который реализует интерфейс
GestureDetector.OnGestureListener, в нашем случае использовано слово this, т. е.
параметром является сам класс активности. Этот интерфейс уведомляет пользователей
когда появляется определенное сенсорное событие.
В методе OnCreate() класса активности, следующая строка:
mDetector.setOnDoubleTapListener(this);
устанавливает слушатель событий, связанных с двойным касанием, это должен быть
класс, реализующий интерфейс GestureDetector.OnDoubleTapListener. В нашем случае
использовано слово this, т.е. слушателем будет опять сам класс активности.
1. Чтобы позволить вашему объекту GestureDetector получать события, необходимо
переопределить метод onTouchEvent() для активности или элемента GUI. И
передавать в экземпляр детектора все обнаруженные события.
public boolean onTouchEvent(MotionEvent event){
this.mDetector.onTouchEvent(event);
// Be sure to call the superclass implementation
return super.onTouchEvent(event);
}
2. После проведенной подготовки пришло время реализовать все методы,
объявленные в интерфейсах, отвечающих за прослушивание сенсорных событий.
Методы интерфейса GestureDetector.OnGestureListener:
onDown() - отслеживает появление касания, т. е. палец прижат к экрану;
onFling() - отслеживает появление жеста смахивания;
onLongPress() - отслеживает удерживание пальца прижатым к экрану длительное
время;
onScroll() - отслеживает появление жеста прокрутки (пролистывания);
onShowPress() - отслеживает, что произошло событие касания и больше никаких
событий не происходит короткое время;
onSingleTapUp() - отслеживает появление жеста одиночного нажатия (клик).
Методы интерфейса GestureDetector.OnDoubleTapListener:
onDoubleTap() - отслеживает появление жеста двойного нажатия ("двойной клик");
onDoubleTapEvent() - отслеживает появление события во время выполнения жеста
двойного нажатия, включая касание, перемещение, подъем пальца.
onSingleTapConfirmed() - отслеживает появление жеста одиночного нажатия (клик).
В листинге 1 представлен код приложения, в котором распознаются все
поддерживаемые жесты, информация о появившемся и распознанном жесте выдается в
информационное поле (TextView).
В качестве практики предлагается воспроизвести данное приложение и проверить,
как система распознает тот или иной жест. Очень полезно для понимания, как
выполняются основные жесты.
3 Распознавание только части поддерживаемых жестов
Разработаем приложение, в котором продемонстрируем распознавание только
некоторой части поддерживаемых жестов по выбору программиста. Мы рассмотрим
распознавание жеста смахивания (fling). Приложение содержит одну активность, одно
информационное поле для вывода информации о распознанном жесте. Приложение
работает следующим образом: пользователь выполняет один из поддерживаемых
сенсорных жестов, в информационном поле отображается информация о распознанном
жесте.
1. Создадим простое приложение и добавим на форму TextView для вывода
информации.
2. Настроим логику приложения. В java класс, соответствующий активности внесем
следующие дополнения.
Нам понадобится экземпляр класса GestureDetectorCompat поэтому в качестве поля
класса активности объявим следующую переменную:
GestureDetectorCompat mDetector;
В методе onCreate() класса активности, создадим экземпляр класса
GestureDetectorCompat и присвоим его переменной mDetector:
mDetector=new GestureDetectorCompat(this, new MyGestListener());
в конструкторе аргументом, отвечающим за отслеживание сенсорных событий, служит
экземпляр класса MyGestListener() - внутренний класс, который является наследником
класса GestureDetector.SimpleOnGestureListener.
Имеет смысл немного рассмотреть класс GestureDetector.SimpleOnGestureListener.
Этот класс реализует интерфейсы GestureDetector.OnGestureListener и
GestureDetector.OnDoubleTapListener, все методы заявленные в интерфейсах в этом классе
имеют пустую реализацию и те, которые должны возвращать значение, возвращают false.
Поэтому для распознавания какого-то события или некоторого подмножества событий
достаточно написать реализацию соответствующих методов, в классе наследнике.
В листинге 2 представлен код приложения, в котором распознается только жест
смахивания, т. е. реализован метод onFling(), информация о появившемся и распознанном
жесте выдается в информационное поле (TextView). В качестве слушателя используется
экземпляр класса MyGestListener(), являющийся наследником класса
GestureDetector.SimpleOnGestureListener.
Получить больше информации о распознавании жестов можно по ссылке:
http://developer.android.com/training/gestures/index.html
package com.example.lab5_1_gestall;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.GestureDetectorCompat;
import android.view.*;
import android.widget.*;
public class MainActivity extends Activity
implements GestureDetector.OnGestureListener,
GestureDetector.OnDoubleTapListener
{
TextView tvOutput;
GestureDetectorCompat mDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvOutput = (TextView)findViewById(R.id.textView1);
mDetector = new GestureDetectorCompat(this,this);
mDetector.setOnDoubleTapListener(this);
}
public boolean onTouchEvent(MotionEvent event){
this.mDetector.onTouchEvent(event);
// Be sure to call the superclass implementation
return super.onTouchEvent(event);
}
@Override
public boolean onDown(MotionEvent event) {
tvOutput.setText("onDown: " + event.toString());
return false;
}
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
tvOutput.setText("onFling: " + event1.toString()+event2.toString());
return true;
}
@Override
public void onLongPress(MotionEvent event) {
tvOutput.setText("onLongPress: " + event.toString());
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
tvOutput.setText("onScroll: " + e1.toString()+e2.toString());
return true;
}
@Override
public void onShowPress(MotionEvent event) {
tvOutput.setText("onShowPress: " + event.toString());
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
tvOutput.setText("onSingleTapUp: " + event.toString());
return true;
}
@Override
public boolean onDoubleTap(MotionEvent event) {
tvOutput.setText("onDoubleTap: " + event.toString());
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent event) {
tvOutput.setText("onDoubleTapEvent: " + event.toString());
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
tvOutput.setText("onSingleTapConfirmed: " + event.toString());
return true;
}
}
Листинг 1. Распознавание поддерживаемых жестов с помощью реализации интерфейсов
package com.example.lab5_1_gestsubset;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.view.*;
import android.view.*;
import android.widget.*;
public class SubsetGestActivity extends Activity {
private GestureDetectorCompat mDetector;
private TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_subset_gest);
mDetector = new GestureDetectorCompat(this, new MyGestListener());
tvOut = (TextView)findViewById(R.id.textView1);
}
@Override
public boolean onTouchEvent(MotionEvent event){
this.mDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
class MyGestListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent event1, MotionEvent event2,
float velocityX, float velocityY) {
tvOut.setText("onFling: " + event1.toString()+event2.toString());
return true;
}
}
}
Листинг 2. Распознавание жестов с использованием класса
GestureDetector.SimpleOnGestureListener.
Задание
Создайте и запустите на вашем устройстве аналогичный проект для демонстрации
распознавания стандартных жестов.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 6. Принципы работы c жестами вводимыми пользователями
Цель лабораторной работы: Разработка приложения, помогающего понять принципы
работы c жестами вводимыми пользователями.
Задачи лабораторной работы:
создать набор жестов
использовать созданные жесты в приложении
1 Введение
Начиная с версии 1.6, Android предоставляет API для работы с жестами, который
располагается в пакете android.gesture и позволяет сохранять, загружать, создавать и
распознавать жесты.
В данной работе рассмотрим процесс создания набора жестов, для создания жестов
будем использовать приложение Gesture Builder, которое предустановлено на
виртуальные устройства Android (AVD), начиная с версии 1.6.
После этого разработаем приложение, в котором предполагается распознавание и
использование созданных жестов.
2 Создание набора жестов
Для начала создадим новое приложение.
Рис. 1. Создание жестов с помощью Рис. 2. Набор жестов, созданных в
приложения Gesture Builder приложении Gesture Builder
Далее запустим эмулятор и используем приложение Gesture Builder для создания
жестов "1", "2" и "S". Жест всегда связан с именем, но имя не обязательно должно быть
уникальным, в действительности, для повышения точности в распознавании жеста
рекомендуется сохранять несколько жестов с одним и тем же именем.
На рис. 1 можно увидеть приложение Gesture Builder в работе, чтобы добавить
жест, необходимо нажать на кнопку Add gesture, в свободном пространстве изобразить
жест (обычно он рисуется желтым цветом), в поле ввода задать имя жеста. Результат
последовательного добавления жестов можно увидеть на рис. 2.
Жесты сохраняются на SD карте эмулятора, чтобы использовать их в приложении
необходимо импортировать файл жестов в проект.
Комментарий: Gesture Builder может сообщить, что ему некуда сохранять
жесты, в этом случае необходимо запустить эмулятор с образом SD карты.
Сначала образ нужно создать с помощью утилиты mksdcard (расположена в папке
<AndrSDK>/sdk/tools, где <AndrSDK> - путь, куда установлен Android SDK). В командной
строке напишем:
mksdcard -l mySdCard 64M gesture.img
Следующим шагом будет создать и запустить эмулятор с образом gesture.img, для
этого зайдем в папку <AndrSDK>/sdk/tools и выполним команду:
emulator -avd nameEmulator -sdcard gestures.img
nameEmulator - имя, которое присвоено эмулятору при создании.
Интересная статья на эту тему по ссылке: http://habrahabr.ru/post/120016/
Каждый раз, когда мы создаем или редактируем жесты с помощью Gesture Builder,
создается файл gestures на SD карте эмулятора. Необходимо импортировать этот файл в
директорию res/raw/, созданного проекта, в котором планируем использовать жесты.
Рис. 3. Расположение файла gestures
Самый простой способ импортировать жесты в проект заключается использовании
вкладки File Explorer в компоновке (perspective) DDMS. (Если компоновки DDMS нет
найти ее можно следующим образом: Window->Open Perspective->Other...->DDMS. Если
вкладки File Explorer нет, можно добавить: Window-> Show View-> File Explorer). На
вкладке File Explorer найти директорию sdcard/ (в нашем случае оказалась директория
storage/sdcard/, имеет смысл при создании жестов обратить внимание в какую директорию
Gesture Builder их сохраняет). На рис. 3 показана вкладка File Explorer в компоновке
DDMS.
Чтобы скопировать файл жестов с эмулятора в проект, необходимо выбрать его и
нажать кнопку "Pull a file from the device", выделенную на рис. 3 красным подобием
окружности. Откроется диалог с предложением выбрать папку, в которую необходимо
скопировать жесты, здесь надо найти папку проекта, в ней папку res/raw/ (если папки raw/
нет, ее необходимо создать) и нажать кнопку Сохранить. Теперь жесты есть в нашем
проекте и их можно использовать.
3 Использование созданных жестов в приложении
Для распознавания жестов необходимо добавить элемент GestureOverlayView в
XML файл активности. И этот файл может выглядеть, например, как показано на рис. 4:
Рис. 4. XML файл активности приложения, элемент GestureOverlayView обычный
компонент интерфейса пользователя
Можно добавить элемент GestureOverlayView поверх всех компонентов, как
прозрачный слой, в этом случае XML файл активности может выглядеть так, как показано
на рис. 5.
Рис. 5. XML файл активности приложения, элемент GestureOverlayView поверх всех
компонентов интерфейса пользователя
Далее необходимо обработать ввод жеста пользователя, сравнить с загруженными
жестами, и либо определить жест, либо сообщить пользователю, что такого жеста нет.
Теперь вся работа будет выполняться в java файле, описывающем главную (и
единственную) активность приложения. Внесем в этот класс следующие дополнения:
o Класс активности должен реализовывать интерфейс OnGesturePerformedListener,
для этого в объявление класса добавим конструкцию:
implements OnGesturePerformedListener;
o Нам понадобятся экземпляры классов GestureLibrary и GestureOverlayView,
поэтому в качестве полей класса активности объявим следующие переменные:
GestureLibrary gLib;
GestureOverlayView gestures;
o В методе onCreate() выполним следующие действия:
gLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLib.load()) {
finish();
}
В первой строке выполнена инициализация переменной gLib жестами,
загруженными из файла gestures папки res/raw/.
Оператор if выполняет проверку загружены ли жесты, если нет, выполняется выход
из приложения.
o Добавим в метод onCreate() еще две строчки:
gestures = (GestureOverlayView) findViewById(R.id.gestureOverlayView1);
gestures.addOnGesturePerformedListener(this);
Для инициализации переменной gesture и подключения к ней слушателя событий
появления жеста.
o И наконец напишем реализацию метода OnGesturePerformed(), который и будет
вызываться при появлении события, соответствующего какому-либо жесту.
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
//Создаѐт ArrayList c загруженными из gestures жестами
ArrayList<Prediction> predictions = gLib.recognize(gesture);
if (predictions.size() > 0) {
//если загружен хотябы один жест из gestures
Prediction prediction = predictions.get(0);
if (prediction.score > 1.0) {
if (prediction.name.equals("one"))
tvOut.setText("1");
else if (prediction.name.equals("stop"))
tvOut.setText("stop");
else if (prediction.name.equals("two"))
tvOut.setText("2");
}else{
tvOut.setText("Жест неизвестен");
}
}
}
В приложении всего лишь распознаются жесты и в информационное поле
выводится информация о том, что за жест был использован. В листинге 1 представлен
возможный код приложения.
Задание
В качестве практического задания предлагаем реализовать жестами ввод чисел в
приложении "Угадайка", разработанном в лабораторной работе второй темы. Создать
жесты "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" для ввода цифр и жест "S" для остановки
ввода числа. В приложение добавить распознавание этих жестов, преобразование их в
число и сравнение полученного числа с загаданным.
Еще варианты для самостоятельной работы:
o разработать простой калькулятор с жестовым вводом чисел и операций;
o разработать блокнотик для заметок с рукописным вводом текста.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
package com.example.lab5_2_gestures;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.Prediction;
import android.view.Menu;
import android.widget.TextView;
public class Gestures extends Activity implements OnGesturePerformedListener{
GestureLibrary gLib;
GestureOverlayView gestures;
TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gestures);
tvOut=(TextView)findViewById(R.id.textView1);
//Загрузка жестов (gestures) из res/raw/gestures
gLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLib.load()) {
//Если жесты не загружены, то выход из приложения
finish();
}
gestures = (GestureOverlayView) findViewById(R.id.gestureOverlayView1);
gestures.addOnGesturePerformedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.gestures, menu);
return true;
}
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
//Создаѐт ArrayList c загруженными из gestures жестами
ArrayList<Prediction> predictions = gLib.recognize(gesture);
if (predictions.size() > 0) {
//если загружен хотя бы один жест из gestures
Prediction prediction = predictions.get(0);
if (prediction.score > 1.0) {
if (prediction.name.equals("one"))
tvOut.setText("1");
else if (prediction.name.equals("stop"))
tvOut.setText("stop");
else if (prediction.name.equals("two"))
tvOut.setText("2");
}else{
tvOut.setText("Жест неизвестен");
}
}
}
}
Листинг 1. Распознавание жестов загруженных в файл res/raw/gestures
Лабораторная работа 7. Многооконное приложение
Цель лабораторной работы: Разработка многооконного приложения, предоставляющего
возможности: воспроизведения аудио и видео файлов, создания и отображения
фотоснимков.
Задачи лабораторной работы:
настроить интерфейс и реализовать логику активности для работы с камерой;
настроить интерфейс и реализовать логику активности для воспроизведения аудио
и видео;
настроить интерфейс и реализовать логику активности для просмотра
изображений;
настроить интерфейс и реализовать логику главной активности приложения.
1 Введение
Для достижения цели, поставленной в лабораторной работе, сформулируем
требования к разрабатываемому приложению, назовем его "Media".
Приложение предоставляет пользователю возможность выбора рода деятельности:
o работа с камерой для создания снимков;
o воспроизведение аудио и видео;
o просмотр изображений.
В приложении предполагается реализовать четыре активности:
o главная активность, предназначена для выбора рода деятельности, содержит три
кнопки, нажатие на каждую кнопку вызывает к жизни соответствующую
активность;
o активность для работы с камерой и создания снимков;
o активность для воспроизведения аудио и видео;
o активность для просмотра изображений.
2 Создание приложения
Создадим новое приложение, активность, полученную при создании проекта,
оставим с именем MainActivity, она будет главной активностью приложения. Добавим в
приложение еще три активности: New->Other...->Android Activity.
В нашем приложении созданные активности имеют следующие имена:
CameraActivity для работы с камерой и создания снимков;
MediaActivity для воспроизведения видео и аудио;
GalleryActivity для просмотра изображений.
Далее продолжим работу с этими активностями, настроим интерфейс и реализуем
логику для каждой из них. Начнем с активностей, отвечающих за тот или иной вид
деятельности, главную активность приведем в порядок в самом конце работы.
3 Настройка интерфейса и реализация логики активности для работы с камерой
Настроим интерфейс активности для работы с камерой. Нам понадобится окно
предварительного просмотра, добавим в окно активности элемент SurfaceView. А так же
нам понадобится кнопка для выполнения снимков, добавим в окно активности элемент
ImageButton. Далее предлагаем настроить интерфейс самостоятельно. В нашем случае
активность выглядит так, как показано на рис. 1.
Рис. 1. Интерфейс активности для работы с камерой
Реализуем логику активности, в данном случае необходимо при нажатии на кнопку
выполнить снимок. Работаем с java файлом, описывающим соответствующий класс
активности, CameraActivity.java.
Объявим следующие поля класса активности:
private Camera camera; //для проведения всех операций с камерой
private SurfaceHolder surfaceHolder; //для задания preview
private SurfaceView preview; //для отображения окна предпросмотра
private View shotBtn; //для выполнения снимка (кнопка)
Для начала работы с камерой необходимо ее инициализировать, сделать это лучше
в методе onResume() класса активности, для инициализации используется следующая
конструкция:
camera = Camera.open();
После завершения работы с камерой, необходимо ее освободить для других
приложений, сделать это лучше в методе onPause() класса активности, для освобождения
камеры используется следующая конструкция:
Camera.release();
Для активности, работающей с камерой, имеет смысл сразу задать расположение
экрана следующим образом
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
в противном случае, приходится, например, в методе surfaceCreated() проверять
расположение экрана и поворачивать окно предварительного просмотра, что не очень
удобно, так как поворот экрана занимает некоторое время.
Выполним настройку окна предварительного просмотра:
preview = (SurfaceView) findViewById(R.id.surfaceCamera);
surfaceHolder = preview.getHolder();
surfaceHolder.addCallback(new MyCallback());
Метод addCallback() используется для отслеживания изменений окна
предпросмотра. Параметром этого метода служит экземпляр класса реализующего
интерфейс SurfaceHolder.Callback, в нашем случае для реализации этого интерфейса
создан внутренний класс активности MyCallback.
В этом классе необходимо реализовать методы:
public void surfaceCreated(SurfaceHolder holder);
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height);
public void surfaceDestroyed(SurfaceHolder holder);
Мы реализуем метод surfaceCreated(), оставшиеся два метода запишем с пустой
реализацией.
В методе surfaceCreated() зададим окно предварительного просмотра:
camera.setPreviewDisplay(holder);
Выполним необходимые настройки окна предпросмотра (см. Листинг 1).
Запустим отображение окна предварительного просмотра:
camera.startPreview();
Пришло время обсудить и реализовать выполнение фотосъемки. Для того, чтобы
сделать снимок необходимо вызвать метод takePicture(). Вызов этого метода можно
выполнить из метода-обработчика события нажатия кнопки, тогда при нажатии на кнопку
сразу будет получена фотография, а можно "растянуть удовольствие" и воспользоваться
предварительной автофокусировкой.
Сначала инициализируем кнопку и добавим слушателя события нажатия в методе
onCreate() активности:
shotBtn = findViewById(R.id.bCameraShot);
shotBtn.setOnClickListener(new MyViewListener());
В данном случае слушателем является экземпляр внутреннего класса
MyViewListener, который реализует интерфейс View.OnClickListener.
class MyViewListener implements View.OnClickListener{
@Override
public void onClick(View v){
if (v == shotBtn){
camera.autoFocus(new MyAutoFocusCallback());
}
}
}
В методе onClick() вызываем обработчик автофокуса, слушателем события
автофокусировки в данном случае является экземпляр внутреннего класса
MyAutoFocusCallback, который реализует интерфейс Camera.AutoFocusCallback.
class MyAutoFocusCallback implements Camera.AutoFocusCallback{
@Override
public void onAutoFocus(boolean paramBoolean, Camera
paramCamera){
if (paramBoolean){
// если удалось сфокусироваться, делаем снимок
paramCamera.takePicture(null, null, null,
new MyPictureCallback());
}
}
}
Метод takePicture() имеет четыре параметра:
Camera.ShutterCallback shutter - вызывается в момент получения изображения с
матрицы;
Camera.PictureCallback raw - программе передаются для обработки raw
данные (если поддерживается аппаратно);
Camera.PictureCallback postview - программе передаются полностью
обработанные данные (если поддерживается аппаратно);
Camera.PictureCallback jpg - программе передается изображение в формате jpg.
Здесь может быть организована запись изображения на карту памяти.
В нашем случае последним параметром является экземпляр класса
MyPictureCallback(), который реализует интерфейс Camera.PictureCallback. В этом классе
реализован единственный метод (см. Листинг 1):
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera){...}
В листинге 1 представлен код активности, реализующей работу с камерой и
позволяющей выполнять снимки.
Чтобы разрешить приложению работать с камерой и сохранять фотографии на
карте памяти, в манифест необходимо добавить следующие разрешения:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
4 Настройка интерфейса и реализация логики активности для воспроизведения
аудио и видео
Рис. 2. Интерфейс активности для воспроизведения аудио и видео
Настроим интерфейс активности для воспроизведения аудио и видео. Нам
понадобится окно предварительного просмотра, добавим в окно активности элемент
SurfaceView. Для работы приложения необходимо поле для задания расположения медиа
контента для проигрывания, добавим элемент EditText, а также потребуются несколько
кнопок, добавим в окно активности следующие кнопки:
b_Start - для запуска воспроизведения контента с начала, зададим свойству
On Click этой кнопки значение onClickStart;
b_Pause - для приостановки воспроизведения, зададим свойству On Click этой
кнопки значение onClick;
b_Resume - для продолжения воспроизведения с места приостановки, зададим
свойству On Click этой кнопки значение onClick;
b_Stop - для полной остановки воспроизведения, зададим свойству On Click
этой кнопки значение onClick.
Для возможности выбора зацикленного воспроизведения медиа контента добавим в
окно активности элемент CheckBox.
Далее предлагаем настроить интерфейс самостоятельно. В нашем случае
активность выглядит так, как показано на рис. 2.
Реализуем логику активности, в данном случае необходимо выполнять следующие
действия:
o при нажатии на кнопку Try to play, запускается воспроизведение с начала контента,
расположенного по адресу, указанному в поле ввода, расположенном слева от
кнопки;
o при нажатии на кнопку Pause, воспроизведение контента приостанавливается;
o при нажатии на кнопку Resume, воспроизведение контента продолжается с места
приостановки;
o при нажатии на кнопку Stop, воспроизведение контента останавливается и может
быть возобновлено только с начала, т. е. необходимо снова нажать Try to play.
Элемент Loop управляет возможностью повтора воспроизведения.
Работать будем с файлом MediaActivity.java, описывающим соответствующий
класс активности.
Объявим следующие поля класса активности:
MediaPlayer mediaPlayer; //управляет воспроизведением
CheckBox chbLoop; //управляет режимом повтора
В методе onCreate() активности настроим чек-бокс так, чтобы он
включал/выключал режим повтора для плеера.
chbLoop = (CheckBox) findViewById(R.id.chb_Loop);
chbLoop.setOnCheckedChangeListener(new
OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (mediaPlayer != null)
mediaPlayer.setLooping(isChecked);
}
});
Метод onClickStart() используется для обработки нажатий на кнопку Try to play. В
этом метода сначала освобождаем ресурсы текущего проигрывателя, используя вызов
метода:
releaseMP();
Этот метод рекомендуется вызывать по окончанию использования плеера, а также
при onPause/onStop, если нет острой необходимости держать объект.
Реализация метода releaseMP():
private void releaseMP() {
if (mediaPlayer != null) {
try {
mediaPlayer.release();
mediaPlayer = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
Продолжим рассмотрение метода onClickStart(). В нем после освобождения
ресурсов, занимаемся подготовкой плеера к воспроизведению.
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(DATA);
mediaPlayer.setDisplay(((SurfaceView)
findViewById(R.id.surfaceView1)).getHolder());
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
Создаем новый объект класса MediaPlayer.
Используем метод setDataSource() для задания источника данных, в качестве
параметра передаем строку из поля ввода, сохраненную в переменной DATA.
Используя метод setDisplay(), задаем экран для воспроизведения, в нашем случае
элемент SurfaceView, добавленный в окно активности на этапе формирования интерфейса.
Метод prepareAsync() выполняет асинхронную подготовку плеера к
воспроизведению и когда подготовка будет завершена сообщает об этом слушателю,
указанному в методе setPreparedListener(). В нашем случае слушателем является сам класс
активности, для этого он объявлен, как класс реализующий интерфейс OnPreparedListener.
В случае готовности плеера вызывается метод onPrepared(MediaPlayer mp), объявленный в
указанном интерфейсе и реализованный в классе активности, в этом методе выполняется
запуск воспроизведения:
mp.start();
Существует еще метод prepare(), он также выполняет подготовку плеера, но в
синхронном режиме. Для прослушивания файлов из интернета, необходимо использовать
асинхронный режим, что мы и сделали.
Последние две строки метода onClickStart():
mediaPlayer.setLooping(chbLoop.isChecked());
mediaPlayer.setOnCompletionListener(this);
В первой из них определяется возможность циклического воспроизведения в
зависимости от значения чек-бокса.
Во второй - задается слушатель для получения сообщения о достижении конца
воспроизводимого контента. В нашем случае этим слушателем будет сам класс
активности для этого он объявлен, как класс реализующий интерфейс
OnCompletionListener. Полную версию метода onClickStart() можно найти в листинге 2.
Метод onClick() вызывается при нажатии на любую кнопку: Pause, Resume, Stop. В
этом методе выполняется проверка какая кнопка была нажата и после этого выполняются
соответствующие действия.
Если нажата кнопка Pause, выполняется следующая конструкция:
if (mediaPlayer.isPlaying()) mediaPlayer.pause();
Если нажата кнопка Release, выполняется следующая конструкция:
if (!mediaPlayer.isPlaying()) mediaPlayer.start();
Если нажата кнопка Stop, выполняется следующая конструкция:
mediaPlayer.stop();
Имеет смысл обратить внимание на метод активности:
protected void onDestroy() {
super.onDestroy();
releaseMP();
}
В этом методе обязательно необходимо освободить ресурсы, что и выполняется
вызовом метода releaseMP().
Полный код класса MediaActivity представлен в листинге 2.
5 Настройка интерфейса и реализация логики активности для просмотра
изображений
Настроим интерфейс активности для просмотра изображений. Нам потребуется
элемент для просмотра изображений, добавим в окно активности элемент ImageView.
Добавим информационное поле, т. е. элемент TextView, для отображения информации об
общем количестве изображений в папке и номере просматриваемого изображения.
Добавим две кнопки, для перемещения от одного изображения к другому вперед и назад.
Предлагаем настроить интерфейс самостоятельно. В нашем случае активность
выглядит так, как показано на рис. 3. Но это, разумеется, не единственно возможный
вариант.
Рис. 3. Интерфейс активности для просмотра изображений
Реализуем логику активности, данная активность ориентирована на просмотр
снимков, сделанных в этом же приложении и сохраненных в папке: /sdcard/TrainingMedia/.
Кнопка Назад выводит в окно просмотра предыдущий снимок, по отношению к уже
отображенному, зададим свойству On Click этой кнопки значение onPrevious. Кнопка
Вперед выводит в окно просмотра следующий снимок, по отношению к уже
отображенному, зададим свойству On Click этой кнопки значение onNext.
Работать будем с файлом GalleryActivity.java, описывающим класс
соответствующей активности.
Объявим поля класса активности:
int currentImage=0;
ArrayList<String> images;
ImageView imageView;
TextView nameView;
Настройку основных элементов для вывода изображений на экран выполним в
методе onResume() активности, этот метод вызывается каждый раз, перед выводом
активности на передний план (см. жизненный цикл активности в "Виды приложений и их
структура" ).
images=new ArrayList<String>();
imageView=((ImageView)findViewById(R.id.image));
try{
File imagesDirectory=new File("/sdcard/TrainingMedia/");
images=searchImage(imagesDirectory);
updatePhoto(Uri.parse(images.get(currentImage)));
}catch(Exception e){
nameView.setText("Ошибка: Папка '/sdcard/TrainingMedia/' не
найдена");
}
Для получения списка изображений в переменную images используется метод
searchImage(), этот метод, используя переданный в него в качестве параметра адрес
директории с изображениями, находит файл с расширением .jpg, .png или .jpeg и
добавляет его к списку изображений. Метод возвращает список доступных файлов с
изображениями. Код метода представлен в листинге 3.
Метод updatePhoto() выполняет обновление счетчика фотографий в
информационном поле и выводит на экран изображение, соответствующее переданному в
метод URI. Код метода представлен в листинге 3.
В методе onPause() активности выполняется очистка списка изображений и
освобождение памяти. Этот метод вызывается каждый раз, как активность теряет фокус
ввода. Код метода представлен в листинге 3.
Осталось рассмотреть еще два метода: onPrevious() и onNext().
Первый метод вызывается, когда нажата кнопка Назад. В нем уменьшается номер
текущего изображения и вызывается метод updatePhoto().
Второй метод вызывается, когда нажата кнопка Вперед. В нем увеличивается
номер, текущего изображения и вызывается метод updatePhoto().
Полный код класса GalleryActivity представлен в листинге 3.
6 Настройка интерфейса и реализация логики главной активности приложения
Настроим интерфейс главной активности приложения. Эта активность содержит
три кнопки (Image Button):
bCamera - для вызова активности, предоставляющей возможности работы с камерой;
bGallery - для вызова активности, предоставляющей возможности просмотра
изображений;
bMusic - для вызова активности, предоставляющей возможности воспроизведения
аудио и видео.
Рис. 4. Интерфейс главной активности приложения
Предлагаем настроить интерфейс самостоятельно. В нашем случае активность
выглядит так, как показано на рис. 4. Но это, разумеется, не единственно возможный
вариант.
Реализуем логику главной активности. В данном случае достаточно настроить
обработку событий нажатия на кнопки, таким образом, чтобы при нажатии на кнопку
запускалась соответствующая активность. Работаем с java файлом, описывающим класс
активности.
Создадим переменную btnClick, как реализацию интерфейса-слушателя
OnClickListener:
OnClickListener btnClick=new OnClickListener() {
@Override
public void onClick(View v) {
Click(v.getId());
}
};
Добавим слушателя события нажатия к каждой кнопке активности:
((ImageButton)findViewById(R.id.bMusic)).setOnClickListener(btnClick);
((ImageButton)findViewById(R.id.bCamera)).setOnClickListener(btnClick);
((ImageButton)findViewById(R.id.bGallery)).setOnClickListener(btnClick);
В методе onClick() слушателя вызываем метод Click(), в котором выполняется
запуск соответствующей активности:
protected void Click(int view){
Intent intent=null;
switch (view){
case R.id.bMusic: intent=new Intent(this,mediaPlayer.class); break;
case R.id.bGallery: intent=new Intent(this,GalleryActivity.class); break;
case R.id.bCamera: intent=new Intent(this,CameraActivity.class); break;
default: break;
}
if(intent!=null){
startActivity(intent);
}
}
В листинге 4 представлен код главной активности.
Задание
1. настроить интерфейс и реализовать логику активности для работы с камерой;
2. настроить интерфейс и реализовать логику активности для воспроизведения аудио
и видео;
3. настроить интерфейс и реализовать логику активности для просмотра
изображений;
4. настроить интерфейс и реализовать логику главной активности приложения.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
package com.example.lab5_4_media;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.hardware.Camera;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.ViewGroup.LayoutParams;
public class CameraActivity extends Activity {
private Camera camera;
private SurfaceHolder surfaceHolder;
private SurfaceView preview;
private View shotBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// если хотим, чтобы приложение постоянно имело портретную ориентацию
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// если хотим, чтобы приложение было полноэкранным
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// и без заголовка
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_camera);
preview = (SurfaceView) findViewById(R.id.surfaceCamera);
surfaceHolder = preview.getHolder();
surfaceHolder.addCallback(new MyCallback(this));
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
shotBtn = findViewById(R.id.bCameraShot);
shotBtn.setOnClickListener(new MyViewListener());
}
@Override
protected void onResume() {
super.onResume();
camera = Camera.open();
}
@Override
protected void onPause(){
super.onPause();
if (camera != null){
camera.setPreviewCallback(null);
camera.stopPreview();
camera.release();
camera = null;
}
}
class MyCallback implements SurfaceHolder.Callback{
Activity host;
MyCallback(Activity act){
host=act;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height){}
@Override
public void surfaceCreated(SurfaceHolder holder){
try {
camera.setPreviewDisplay(holder);
camera.setPreviewCallback(new MyPreviewCallback());
}
catch (IOException e){
Log.d("myLogs","Ошибка камеры");
e.printStackTrace();
}
Size previewSize = camera.getParameters().getPreviewSize();
float aspect = (float) previewSize.width / previewSize.height;
int previewSurfaceWidth = preview.getWidth();
int previewSurfaceHeight = preview.getHeight();
LayoutParams lp = preview.getLayoutParams();
// здесь корректируем размер отображаемого preview, чтобы не было
искажений
if (host.getResources().getConfiguration().orientation !=
Configuration.ORIENTATION_LANDSCAPE){
// портретный вид
camera.setDisplayOrientation(90);
lp.height = previewSurfaceHeight;
lp.width = (int) (previewSurfaceHeight / aspect);
}
else {
// ландшафтный
camera.setDisplayOrientation(0);
lp.width = previewSurfaceWidth;
lp.height = (int) (previewSurfaceWidth / aspect);
}
preview.setLayoutParams(lp);
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder){}
}
class MyViewListener implements View.OnClickListener{
@Override
public void onClick(View v) {
if (v == shotBtn) {
// либо делаем снимок непосредственно здесь
// либо включаем обработчик автофокуса
//camera.takePicture(null, null, null, this);
camera.autoFocus(new MyAutoFocusCallback());
}
}
}
class MyAutoFocusCallback implements Camera.AutoFocusCallback{
@Override
public void onAutoFocus(boolean paramBoolean, Camera paramCamera){
if (paramBoolean){
// если удалось сфокусироваться, делаем снимок
paramCamera.takePicture(null, null, null, new MyPictureCallback());
}
}
}
class MyPictureCallback implements Camera.PictureCallback{
@Override
public void onPictureTaken(byte[] paramArrayOfByte, Camera paramCamera){
// сохраняем полученные jpg в папке /sdcard/CameraExample/
// имя файла - System.currentTimeMillis()
try {
File saveDir = new File("/sdcard/CameraExample/");
if (!saveDir.exists()) {
saveDir.mkdirs();
}
FileOutputStream os = new
FileOutputStream(String.format("/sdcard/CameraExample/%d.jpg",
System.currentTimeMillis()));
os.write(paramArrayOfByte);
os.close();
}
catch (Exception e) {}
// после того, как снимок сделан, показ превью отключается.
// Необходимо включить его
paramCamera.startPreview();
}
}
class MyPreviewCallback implements Camera.PreviewCallback{
@Override
public void onPreviewFrame(byte[] paramArrayOfByte, Camera paramCamera) {
// здесь можно обрабатывать изображение, показываемое в preview
}
}
}
Листинг 1. Класс CameraActivity для работы с камерой
package com.example.lab5_4_media;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.view.Gravity;
import android.view.SurfaceView;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.app.Activity;
public class MediaActivity extends Activity implements OnPreparedListener,
OnCompletionListener{
MediaPlayer mediaPlayer;
CheckBox chbLoop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media);
chbLoop = (CheckBox) findViewById(R.id.chb_Loop);
chbLoop.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (mediaPlayer != null)
mediaPlayer.setLooping(isChecked);
}
});
}
public void onClickStart(View view) {
releaseMP();
String DATA=((EditText)findViewById(R.id.et_MediaPath)).getText().toString();
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(DATA);
mediaPlayer.setDisplay(((SurfaceView)
findViewById(R.id.surfaceView1)).getHolder());
//mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.prepareAsync();
} catch (Exception e) {
showMessage("Ошибка воспроизведения");
}
if (mediaPlayer == null)
return;
mediaPlayer.setLooping(chbLoop.isChecked());
mediaPlayer.setOnCompletionListener(this);
}
private void showMessage(String text){
Toast toast = Toast.makeText(getApplicationContext(), text,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
private void releaseMP() {
if (mediaPlayer != null) {
try {
mediaPlayer.release();
mediaPlayer = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
public void onClick(View view) {
if (mediaPlayer == null)
return;
switch (view.getId()) {
case R.id.b_Pause:
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
break;
case R.id.b_Resume:
if (!mediaPlayer.isPlaying())
mediaPlayer.start();
break;
case R.id.b_Stop:
mediaPlayer.stop();
break;
}
}
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
@Override
public void onCompletion(MediaPlayer mp) {}
@Override
protected void onDestroy() {
super.onDestroy();
releaseMP();
}
}
Листинг 2. Класс MediaActivity
package com.example.lab5_4_media;
import java.io.File;
import java.util.ArrayList;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class GalleryActivity extends Activity {
int currentImage=0;
ArrayList<String> images;
ImageView imageView;
TextView nameView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
}
@Override
public void onResume(){
super.onResume();
currentImage=0;
Log.d("myLogs","onResume cI="+currentImage);
nameView=((TextView)findViewById(R.id.imageName));
images=new ArrayList<String>();
imageView=((ImageView)findViewById(R.id.image));
try{
File imagesDirectory=new File("/sdcard/TrainingMedia/");
images=searchImage(imagesDirectory);
updatePhoto(Uri.parse(images.get(currentImage)));
}catch(Exception e){
nameView.setText("Ошибка: Папка '/sdcard/TrainingMedia/' не найдена");
Log.d("myLogs","Ошибка");
}
}
@Override
protected void onPause()
{
super.onPause();
images.clear();
Log.d("myLogs","onPause cI="+currentImage);
}
private ArrayList<String> searchImage(File dir){
ArrayList<String> imagesFinded=new ArrayList<String>();
for(File f:dir.listFiles()){
if(!f.isDirectory()){
String fileExt=getFileExt(f.getAbsolutePath());
if(fileExt.equals("png") || fileExt.equals("jpg") || fileExt.equals("jpeg")){
Log.d("myLogs","Файл найден "+f.getAbsolutePath());
imagesFinded.add(f.getAbsolutePath());
}
}
}
return imagesFinded;
}
public static String getFileExt(String filename){
return filename.substring(filename.lastIndexOf(".") + 1);
}
public void updatePhoto(Uri uri){
try{
nameView.setText((currentImage+1)+"/"+images.size());
imageView.setImageURI(uri);
}catch(Exception e){
nameView.setText("Ошибка загрузки файла");
}
}
public void onNext(View v){
if(currentImage+1<images.size() && images.size()>0){
currentImage++;
updatePhoto(Uri.parse(images.get(currentImage)));
}
}
public void onPrevious(View v){
if(currentImage>0 && images.size()>0){
currentImage--;
updatePhoto(Uri.parse(images.get(currentImage)));
}
}
}
Листинг 3. Класс GalleryActivity
package com.example.lab5_4_media;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OnClickListener btnClick=new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("myLogs",v.getId()+"");
Click(v.getId());
}
};
((ImageButton)findViewById(R.id.bMusic)).setOnClickListener(btnClick);
((ImageButton)findViewById(R.id.bCamera)).setOnClickListener(btnClick);
((ImageButton)findViewById(R.id.bGallery)).setOnClickListener(btnClick);
}
protected void Click(int view){
Intent intent=null;
Log.d("myLogs",view+"");
switch (view){
case R.id.bMusic: intent=new Intent(this,MediaActivity.class); break;
case R.id.bGallery: intent=new Intent(this,GalleryActivity.class); break;
case R.id.bCamera: intent=new Intent(this,CameraActivity.class); break;
default: break;
}
if(intent!=null){
Log.d("myLogs","Интент = "+intent.toString());
startActivity(intent);
}
}
}
Листинг 4. Класс MainActivity
Лабораторная работа 8. Геолокационные возможности
Цель лабораторной работы: Разработка приложения, демонстрирующего геолокационные
возможности.
Задачи лабораторной работы:
Разработать приложение, получающее координаты устройства и отслеживающее их
изменения.
1 Введение
В данной работе рассмотрим процесс создания приложения.
2 Разработка приложения, получающего координаты устройства и отслеживающего
их изменение
Создадим приложение.
Далее будем править java файл, определяющий класс активности приложения.
Внесем в этот класс следующие дополнения:
o Нам потребуется экземпляр класса LocationManager, поэтому в методе onCreate()
запишем следующую конструкцию:
LocationManager mlocManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
экземпляр класса LocationManager, как и большинство системных сервисов,
создается с помощью вызова метода getSystemService().
o Укажем, что в приложении необходимо получать обновления координат, сделаем
это с помощью вызова метода requestLocationUpdates() класса LocationManager:
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, 0, mlocListener);
Первый параметр метода указывает способ получения координат, для этого
используются константы класса LocationManager:
GPS_PROVIDER - сообщает, что координаты определяются с помощью GPS;
NETWORK_ PROVIDER - сообщает, что координаты определяются с использованием
сигналов сотовых вышек и WiFi.
В случае, когда необходимо получать координаты и с GPS, и от сотовых вышек
необходимо вызвать метод requestLocationUpdates() дважды: один раз первый параметр
должен быть равен GPS_PROVIDER, второй раз - NETWORK_ PROVIDER.
Второй и третий параметры метода управляют частотой обновлений. Второй
определяет минимальное время между извещениями об обновлениях, третий -
минимальное изменение расстояния между извещениями об обновлениях. Если оба эти
параметра имеют нулевое значение, то извещения об обновлениях появляются настолько
часто, насколько это возможно.
Последний параметр указывает на слушателя, который получает вызовы при
обновлениях координат. В нашем случае слушателем является переменная mlocListener -
реализация интерфейса LocationListener.
o Теперь необходимо объявить переменную mlocListener:
LocationListener mlocListener = new
LocationListener(){ public void
onLocationChanged(Location location) { tvLat.append("
"+location.getLatitude()); tvLon.append("
"+location.getLongitude());
}
public void onStatusChanged(String provider, int status,
Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
Переменная mlocListener инициализируется реализацией интерфейса
LocationListener. Этот интерфейс содержит 4 метода, каждый из которых должен быть
определен в реализации интерфейса. Нас интересует метод onLocationChanged(), который
вызывается каждый раз при изменении показаний GPS датчика, в этом методе всего лишь
выполняется вывод полученных координат в информационные поля.
o Чтобы разрешить получать обновления координат с помощью сигналов от сотовых
вышек (NETWORK_PROVIDER) или с GPS датчика (GPS_PROVIDER),
необходимо в файле манифеста добавить строку:
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION" />
(для работы с сигналами сотовых вышек) или
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
/>
(для работы GPS датчиком).
Без этих полномочий приложение "сломается" во время выполнения, когда
попробует запросить обновление координат. Если в приложении в качестве источника
координат используются и NETWORK_PROVIDER, и GPS_PROVIDER, в манифесте
достаточно запросить только полномочия на ACESS_FINE_LOCATION. Тогда как
ACCESS_COARSE_LOCATION позволяет работать только с NETWORK_PROVIDER.
В листинге 1 представлен код приложения, позволяющего получать координаты
устройства и отслеживать их изменения, используя GPS приемник.
После создания приложения, разумеется, необходимо протестировать его работу.
Проще всего это сделать, используя реальное устройство под управлением Android, но
если устройства под рукой нет, можно использовать виртуальное устройство. Однако при
этом необходимо решить вопрос, каким образом имитировать передачу данных о
местоположении на эмулятор. Проще всего воспользоваться для этого DDMS.
В Eclipse откройте компоновку (Perspective) DDMS, в этой компоновке выберите
вкладку Emulator Control. С помощью инструмента DDMS, можно имитировать
обновление данных о местоположении несколькими способами:
o вручную передать значения широты и долготы на виртуальное устройство;
o использовать GPX файл, описывающий маршрут для считывания эмулятором;
o использовать KML файл, описывающий отдельные метки местности для
последовательной передачи на виртуальное устройство.
3 Заключение
В этой части работы рассмотрели вопросы разработки приложений, способных
получать координаты устройства и отслеживать их изменения. Разработанное приложение
реагирует на изменения координат устройства и выдает новые координаты в
соответствующие информационные поля.
Задание
Разработать приложение, получающее координаты устройства и отслеживающее их
изменения.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
package com.example.lab5_4_geolocation;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView tvOut;
TextView tvLon;
TextView tvLat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvOut = (TextView)findViewById(R.id.textView1);
tvLon = (TextView)findViewById(R.id.longitude);
tvLat = (TextView)findViewById(R.id.latitude);
//Получаем сервис
LocationManager mlocManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new LocationListener(){
public void onLocationChanged(Location location) {
//Called when a new location is found by the network location provider.
tvLat.append(" "+location.getLatitude());
tvLon.append(" "+location.getLongitude());
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
//Подписываемся на изменения в показаниях датчика
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,
mlocListener);
//Если gps включен, то ... , иначе вывести "GPS is not turned on..."
if (mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
tvOut.setText("GPS is turned on...");
} else {
tvOut.setText("GPS is not turned on...");
}
}
}
Листинг 1. Получение геолокационных данных
Лабораторная работа 9. Установка и настройка Hyper-V
Целью лабораторной работы является практическое освоение технологий виртуализации
Hyper-V.
Задачи лабораторной работы:
Приобрести навыки установки и настройки Hyper-V
Аппаратура и программные инструменты, необходимые для лабораторной работы:
Компьютер или сервер, поддерживающий виртуализацию, операционная система
Microsoft Windows Server 2008 (R2)
1 Роль Hyper-V на сервере Windows 2008 (или выше).
Включите компьютер, дождитесь загрузки. Войдите в систему, используя учетную
запись администратора. Откройте Пуск – Диспетчер сервера – Роли – Добавить роли. В
открывшемся окне мастера установки выберите роль сервера Hyper-V и следуя
инструкциям мастера произведите установку.
Рис. 1 Установка роли Hyper-V
2. Установка роли Hyper-V
Произведите сетевые настройки.
После успешной установки роли Hyper-V, произведите настройку виртуальной
сети. Откройте Пуск – Диспетчер сервера – Роли – Hyper-V. В панели Действия выберите
Диспетчер виртуальной сети. Создайте Внешнюю и Внутреннюю виртуальные сети.
Рис. 2 Диспетчер виртуальной сети
3. Создание виртуальных машин
Откройте Пуск – Диспетчер сервера – Роли – Hyper-V.
1. Создайте виртуальную машину с фиксированным виртуальным жестким диском.
2. Создайте виртуальную машину с динамически расширяющимся виртуальным
жестким диском.
3. Создайте виртуальную машину для гостевой операционной системы Windows 7.
4. Измените количество оперативной памяти, процессоров, тип сетевого
подключения в конфигурации виртуальной машины.
5. Установите Integration Services для гостевой операционной системы
6. Создайте снимок виртуальной машины.
7. Произведите изменения в гостевой операционной системе.
8. Отмените изменения, используйте возврат к предыдущему снимку.
9. Выполните экспорт виртуальной машины.
10. Измените конфигурацию виртуальной машины, измените размер диска
виртуальной машины.
4. Обзор System Center Virtual Machine Manager
1. Запустите Configuration Analyzer для тестирования системы.
2. Установите SCVMM сервер.
3. Установите консоль администратора SCVMM.
4. Добавьте пользователей в группу IT Admin Support
5. Создайте новую группу узлов в VMM
6. Добавьте необходимые сервера Hyper-V в VMM.
7. Измените конфигурацию виртуальной машины.
8. Создайте шаблон виртуальной машины.
9. Создайте несколько экземпляров виртуальных машины из полученного шаблона.
10. Обзор библиотеки VMM.
11. Произведите конвертирование физического сервера в виртуальное окружение.
Задание
Установить и настроить Hyper-V
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 10. Установка и настройка VMWare Workstation
Цель лабораторной работы: практическое освоение технологий виртуализации VMWare
на примере VMWare Workstation.
Задачи лабораторной работы:
УстановитьVMWare Workstation
Создать виртуальную машину
Установить VMWare Tools
Изменить конфигурацию виртуальной машины
Аппаратура и программные инструменты, необходимые для лабораторной работы
Настольный или портативный компьютер, поддерживающий виртуализацию,
операционная система Microsoft Windows XP, Vista, Windows 7
1. Установите VMWare Workstation
Используя установочный дистрибутив VMWare Workstation, установите продукт на
компьютер. Запустите программу, открыв Пуск – Все программы – VMWare – VMWare
Workstation.
2. Произведите сетевые настройки.
Откройте Пуск – Все программы – VMWare – Virual Network Editor. Произведите
конфигурацию виртуальной сети.
3. Создайте виртуальную машину для гостевой операционной системы Windows 7
В меню File – New –Virtual Machine создайте новую виртуальную машину. Установите
операционную систему Windows 7 в виртуальной машине.
4. Установите VMWare Tools
После установки операционной системы Windows 7, установите инструменты VMWare в
меню VM – Install VMWare Tools
5. Создайте снимок виртуальной машины.
Создайте снимок виртуальной машины в меню VM – Snapshot – Take Snapshot.
6. Произведите изменения в гостевой операционной системе.
Выполните произвольные изменения в виртуальной машине, скопируйте на рабочий стол
несколько ярлыков, создайте несколько папок.
7. Отмените изменения, использовав возврат к предыдущему снимку.
Выполните возврат к предыдущему снимку виртуальной машины в меню VM – Snapshot –
Revert to Snapshot и выберите предыдущий снимок.
8. Измените конфигурацию виртуально машины.
Произведите изменение конфигурации виртуальной машины в меню VM – Settings.
Увеличьте количество оперативной памяти, количество процессоров. Увеличьте размер
жесткого диска. Создайте дополнительный жесткий диск.
Задание
1. УстановитьVMWare Workstation
2. Создать виртуальную машину
3. Установить VMWare Tools
4. Изменить конфигурацию виртуальной машины
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 11. Создание первого Windows Azure приложения
Целью лабораторной работы является практическое освоение создания приложений
Windows Azure.
Задачи лабораторной работы:
Разработать приложение Windows Azure GuestBook.
Аппаратура и программные инструменты, необходимые для лабораторной работы:
Настольный или портативный компьютер, поддерживающий виртуализацию,
операционная система Microsoft Windows XP, Vista, Windows 7.
Доступ к сети Интернет.
Наличие аккаунта Windows Azure.
Создание проекта в Visual Studio
1. Откройте меню Пуск | Все программы| Microsoft Visual Studio 2010 | Microsoft
Visual Studio 2010.
2. В меню File выберите New и затем Project.
3. В диалоговом окне New Project разверните узел Visual C# и в списке Installed
Templates выберите Cloud.
4. В списке Templates выберите Windows AzureCloud Service. Введите Name
"GuestBook", имя solution "Begin". Затем выберите расположение внутри папки
Ex1-BuildingYourFirstWindowsAzureApp. Убедитесь что опция Create directory for
solution выбрана и нажмите OK чтобы создать проект.
Создание нового проектаWindows Azure Cloud Service
5. В диалоге New Cloud Service Project разверните узел Visual C# и выберите
ASP.NET Web Role. Переместите выбранную роль в проект. Выберите роль в
проекте, нажмите на изображение "карандаш" и введите имя GuestBook_WebRole.
Нажмите OK для завершения.
Добавление ролей в проект
6. Обратите внимание на структуру проекта в Solution Explorer.
Структура проекта в Solution Explorer
Создание модели данных для элементов в Table Storage
1. В Solution Explorer нажмите правой кнопкой мыши по Begin, выберите Add | New
Project.
2. В диалоге Add New Project, разверните узел Visual C# в списке Installed Templates,
выберите категорию Windows и выделите Class Library в списке шаблонов.
Убедитесь что выбрат . NET Framework 3.5. Введите имя GuestBook_Data и
нажмите OK.
Создание библиотеки классов
3. Удалите файл класса по умолчанию. Нажмите правой кнопкой по Class1.cs и
выберите Delete. Нажмите OK.
4. Добавьте ссылку на библиотеку .NET для ADO.NET в проект GuestBook_Data. В
Solution Explorer нажмите правой кнопкой по проекту GuestBook_Data, выберите
Add Reference, затем выберите закладку .NET, выделите компонент
System.Data.Service.Client и нажмите OK.
5. Выполните пункт 4, добавив ссылку библиотеку
Microsoft.WindowsAzure.StorageClient
6. Нажмите правой кнопкой мыши по GuestBook_Data в Solution Explorer, выберите
Add, затем Class. В диалоге Add New Item введите имя GuestBookEntry.cs и
нажмите Add.
7. Откройте файл GuestBookEntry.cs, добавьте в начало файла using
Microsoft.WindowsAzure.StorageClient ;
8. Измените объявление класса GuestBookEntry
public class GuestBookEntry :
Microsoft.WindowsAzure.StorageClient.TableServiceEntity
{
}
9. Добавьте конструктор по умолчанию
public GuestBookEntry()
{
PartitionKey = DateTime.UtcNow.ToString("MMddyyyy");
// Row key allows sorting, so we make sure the rows come back in time order.
RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks -
DateTime.Now.Ticks, Guid.NewGuid());
}
10. Добавьте свойства
public string Message { get; set; }
public string GuestName { get; set; }
public string PhotoUrl { get; set; }
public string ThumbnailUrl { get; set; }
11. Сохраните файл GuestBookEntry.cs.
12. Нажмите правой кнопкой мыши по GuestBook_Data в Solution Explorer, выберите
Add, затем Class. В диалоге Add New Item введите имя GuestBookDataContext.cs и
нажмите Add.
13. Откройте файл GuestBookDataContext.cs, добавьте в начало файла
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
14. Измените объявление класса GuestBookDataContext и добавьте конструктор
public class GuestBookDataContext : TableServiceContext
{
public GuestBookDataContext(string baseAddress, StorageCredentials credentials)
: base(baseAddress, credentials)
{}
}
15. Добавьте свойство
public class GuestBookDataContext : TableServiceContext
{
...
public IQueryable<GuestBookEntry> GuestBookEntry
{
get
{
return this.CreateQuery<GuestBookEntry>("GuestBookEntry");
}
}
}
16. Нажмите правой кнопкой мыши по GuestBook_Data в Solution Explorer, выберите
Add, затем Class. В диалоге Add New Item введите имя GuestBookDataContext.cs и
нажмите Add.
17. Откройте файл GuestBookEntryDataSource.cs, добавьте в начало файла
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.StorageClient;
18. Далее измените класс
public class GuestBookEntryDataSource
{
private static CloudStorageAccount storageAccount;
private GuestBookDataContext context;
}
19. Добавьте конструктор
public class GuestBookEntryDataSource
{
private static CloudStorageAccount storageAccount;
private GuestBookDataContext context;
static GuestBookEntryDataSource()
{
storageAccount =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
CloudTableClient.CreateTablesFromModel(
typeof(GuestBookDataContext),
storageAccount.TableEndpoint.AbsoluteUri,
storageAccount.Credentials);
}
}
20. Добавьте конструктор для класса GuestBookDataEntrySource
public GuestBookEntryDataSource()
{
this.context = new
GuestBookDataContext(storageAccount.TableEndpoint.AbsoluteUri,
storageAccount.Credentials);
this.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1));
}
21. Добавьте методы
public IEnumerable<GuestBookEntry> Select()
{
var results = from g in this.context.GuestBookEntry
where g.PartitionKey == DateTime.UtcNow.ToString("MMddyyyy")
select g;
return results;
}
public void UpdateImageThumbnail(string partitionKey, string rowKey, string
thumbUrl)
{
var results = from g in this.context.GuestBookEntry
where g.PartitionKey == partitionKey && g.RowKey == rowKey
select g;
var entry = results.FirstOrDefault<GuestBookEntry>();
entry.ThumbnailUrl = thumbUrl;
this.context.UpdateObject(entry);
this.context.SaveChanges();
}
22. Сохраните файл GuestBookEntryDataSource.cs
Создание Веб роли для отображения гостевой книги
1. В Solution Explorer нажмите правой кнопкой по проекту GuestBook_WebRole,
выберите Add Reference, затем выберите закладку Project, выделите
GuestBook_Data и нажмите OK.
2. Нажмите правой кнопкой по Default.aspx и выберите Delete. Нажмите OK.
3. В Solution Explorer нажмите правой кнопкой по проекту GuestBook_WebRole,
выберите Add, выделите Existing Item.
4. В диалоге Add Existing Item выберите директорию \Source\Ex1-
BuildingYourFirstWindowsAzureApp\CS\Assets, выберите Add.
5. В Solution Explorer нажмите правой кнопкой по Default.aspx, выберите View Code,
объявите следующие пространства имен
using System.IO;
using System.Net;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;
using GuestBook_Data;
6. В классе укажите
private static bool storageInitialized = false;
private static object gate = new Object();
private static CloudBlobClient blobStorage;
7. Найдите событие SignButton_Click и добавьте следующий код
protected void SignButton_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
InitializeStorage();
// upload the image to blob storage
CloudBlobContainer container =
blobStorage.GetContainerReference("guestbookpics");
string uniqueBlobName = string.Format("image_{0}.jpg",
Guid.NewGuid().ToString());
CloudBlockBlob blob = container.GetBlockBlobReference(uniqueBlobName);
blob.Properties.ContentType = FileUpload1.PostedFile.ContentType;
blob.UploadFromStream(FileUpload1.FileContent);
System.Diagnostics.Trace.TraceInformation("Uploaded image '{0}'
to blob storage as '{1}'", FileUpload1.FileName, uniqueBlobName);
// create a new entry in table storage
GuestBookEntry entry = new GuestBookEntry() { GuestName =
NameTextBox.Text,
Message = MessageTextBox.Text, PhotoUrl = blob.Uri.ToString(),
ThumbnailUrl = blob.Uri.ToString() };
GuestBookEntryDataSource ds = new GuestBookEntryDataSource();
ds.AddGuestBookEntry(entry);
System.Diagnostics.Trace.TraceInformation("Added entry {0}-{1} in table
storage for guest
'{2}'", entry.PartitionKey, entry.RowKey, entry.GuestName);
}
NameTextBox.Text = "";
MessageTextBox.Text = "";
DataList1.DataBind();
}
8. Обновите метод Timer1_Tick
protected void Timer1_Tick(object sender, EventArgs e)
{
DataList1.DataBind();
}
9. Обновите событие Page_Load
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Timer1.Enabled = true;
}
}
10. Произведите изменения в методе InitializeStorage
private void InitializeStorage()
{
if (storageInitialized)
{
return;
}
lock (gate)
{
if (storageInitialized)
{
return;
}
try
{
// read account configuration settings
var storageAccount =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
// create blob container for images
blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobStorage.GetContainerReference("guestbookpics");
container.CreateIfNotExist();
// configure container for public access
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
}
catch (WebException)
{
throw new WebException("Storage services initialization failure. "
+ "Check your storage account configuration settings. If running locally, "
+ "ensure that the Development Storage service is running.");
}
storageInitialized = true;
}
}
11. В Solution Explorer разверните узел Roles в проекте GuestBook. Нажмите два раза
по GuestBook_WebRole, откроется свойства данной роли, выберите закладку
Setting. Нажмите Add Setting, наберите "DataConnectionString" в колонке Name,
измените Type на ConnectionString и нажмите Add Setting.
12. В диалоге Storage Connection String выберите Use development storage и нажмите
OK.
13. Сохраните изменения.
14. В проекте GuestBook_WebRole, откройте файл Global.asax.cs
15. Объявите пространства имен
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
16. Вставьте следующий код внутрь метода Application_Start, заменим содержимое по
умолчанию
void Application_Start(object sender, EventArgs e)
{
Microsoft.WindowsAzure.CloudStorageAccount.SetConfigurationSettingPublisher((configName
, configSetter) =>
{
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
});
}
Организация очереди рабочих элементов для обработки в фоне
1. В Solution Explorer нажмите правой кнопкой по Default.aspx, выберите View Code,
объявите элемент клиента очереди
public partial class _Default : System.Web.UI.Page
{
private static bool storageInitialized = false;
private static object gate = new Object();
private static CloudBlobClient blobStorage;
private static CloudQueueClient queueStorage;
...
}
2. Найдите метод InitializeStorage и вставьте следующий код внутрь данного метода
public partial class Default : System.Web.UI.Page
{
...
private void InitializeStorage()
{
...
try
{
...
// configure container for public access
var permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
// create queue to communicate with worker role
queueStorage = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueStorage.GetQueueReference("guestthumbs");
queue.CreateIfNotExist();
}
catch (WebException)
{
...
}
Проверка
1. Нажмите F5 для запуска сервиса. Сервис запустится в development fabric. Для
открытия пользовательского интерфейса необходимо нажать правой кнопкой
мыши на значке в области уведомления панели задач и выбрать Show Development
Fabric UI
2. Переключитесь на Internet Explorer для просмотра приложения GuestBook
3. Добавьте новую запись в гостевой книг
Задание
Создать приложение Windows Azure GuestBook
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 12. Развертывание приложения WindowsAzure
Целью лабораторной работы является практическое освоение процесса развертывания
приложений Windows Azure.
Задачи лабораторной работы:
Создать новый StorageAccount
Развернуть приложение на портале WindowsAzurePlatform
Аппаратура и программные инструменты, необходимые для лабораторной работы
1. Настольный или портативный компьютер, поддерживающий
виртуализацию, операционная система MicrosoftWindows XP, Vista, Windows 7.
2. Доступ к сети Интернет.
3. Наличие аккаунта WindowsAzure.
Создание StorageAccount
1. Откройте в веб браузере адрес http://windows.azure.com и войдите используя
WindowsLive ID, ассоциированный с учетной записью WindowsAzure
2. На панели инструментов WindowsAzure выберите NewStorageAccount.
3. В диалоге Create a NewStorageAccount выберите Вашу подписку из списка.
4. Введите имя для Вашего StorageAccount.
5. Выберите настройку Create or choose an affinity group и затем выберите из списка
Create a new affinity group
6. В диалоге Create a NewAffinityGroup введите AffinityGroupName, выберите
размещение и нажмите OK.
7. Вернитесь в диалог Create a New Storage Account и нажмите Create дляс оздания
нового Storage Account.
8. Нажмите кнопку View. В диалоге ViewStorageAccessKeys нажмите кнопку
CopytoClipboard следующую за PrimaryAccessKey.
9. Нажмите HostedServices на левой панели. Нажмите кнопку NewHostedService на
панели инструментов.
10. Вдиалоге Create a new Hosted Service выберитеподпискуисписка Choose a
subscription.
11. Введитеимясервиса Enter a name for your service ивыберитепрефиксадресав Enter
a URL prefix for your service
12. Выберите настройку Createorchooseanaffinitygroup и затем выберите из списка
guestbook
13. Выберите настройку DonotDeploy.
14. Нажмите OK для создания сервиса и дождитесь завершения процесса
инициализации
Развертывание приложения на портале WindowsAzurePlatform
1. Откройте меню Пуск | Все программы| MicrosoftVisualStudio 2010 и запустите
MicrosoftVisualStudio 2010 от имени администратора.
2. Вменю File выберите Open изатем Project/Solution. Откройтефайл Begin.sln
проекта Ex3-WindowsAzureDeployment
3. Для изменения конфигурации хранилища перед развертыванием сервиса, откройте
файл ServiceConfiguration.cscfg расположенный в сервисе GuestBook. Замените значение
[YOUR_ACCOUNT_NAME] на значение StorageAccountName , которое Вы выбрали когда
настраивали Storageaccount в Задании 1.
4. Далее замените значение [YOUR_ACCOUNT_KEY] на значение PrimaryAccessKey
которое Вы получили раннее, при создании Storageaccount в Задании 1
5. Необходимо создать пакет для развертывания в облаке. Для этого откройте меню
правой кнопкой мыши в проекте GuestBook и выберите Publish. В диалоге
DeployWindowsAzureproject, выберите настройку CreateServicePackageOnly и затем
нажмите OK.
6. Переключитесь обратно в окно браузера, где открыт портал управления
WindowsAzure.
7. На портале выберите сервис, который Вы создали в предыдущем упражнении и
нажмите NewStagingDeployment на панели инструментов.
8. В диалоге Create a newDeployment выберите Packagelocation, нажмите
BrowseLocally, выберите папку где был создан пакет в пункте 4 и затем выберите файл
GuestBook.cspkg.
9. Далее выберите ConfigurationFile, нажмите BrowseLocally и выберите
ServiceConfiguration.cscfg из той же папки (пункт 8).
10. Введите имя Deploymentname и нажмите OK. В диалоге с предупреждением
выберите Yes.
11. Дождитесь завершения процесса развертывания, это можно занять несколько
минут
Задание
1. Создать новый StorageAccount
2. Развернуть приложение на портале WindowsAzurePlatform
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 13. Работа с Blob
Цель лабораторной работы: Практическое освоение процесса работы с Blob в Windows
Azure.
Задачи лабораторной работы:
Выработка навыков работы с Blob данными
o Получение Blob данных из хранилища
o Загрузка Blob данных в хранилище
o Извлечение метаданных для Blob в хранилище
o Удаление Blob из хранилища
o Копирование Blob
o Получение снимков Blob
Аппаратура и программные инструменты, необходимые для лабораторной работы
1. Настольный или портативный компьютер, поддерживающий виртуализацию,
операционная система MicrosoftWindows XP, Vista, Windows 7.
2. Доступ к сети Интернет.
3. Наличие аккаунта WindowsAzure.
Получение Blob данных из хранилища
1. Откройте меню Пуск | Все программы| MicrosoftVisualStudio 2010 |
MicrosoftVisualStudio 2010.
2. В меню File выберите Open и затем Project/Solution. Откройте файл проекта
ExploringWindowsAzureStorageVS2010\Source\Ex02-
WorkingWithBlobs\begin\CS\begin.sln
3. В Solution Explorer, в проекте RDImageGallery нажмите правой кнопкой по узлу
RDImageGallery_WebRole и выберите Properties
4. На закладке Settings создайте ConnectionString с именем DataConnectionStrin.
Выберите Usedevelopmentstorage
5. Создайте String с именем ContainerName и значением gallery
6. В SolutionExplorer нажмите правой кнопкой по Default.aspx в проекте
RDImageGallery_WebRole, выберите ViewCode, объявите следующие пространства
имен
7. Убедитесь что в начале файла объявлены пространства имен
usingMicrosoft.WindowsAzure;
usingMicrosoft.WindowsAzure.StorageClient;
usingMicrosoft.WindowsAzure.ServiceRuntime;
8. В конец класса _Default добавьте метод
privatevoidEnsureContainerExists()
{
varcontainer = GetContainer();
container.CreateIfNotExist();
varpermissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
container.SetPermissions(permissions);
}
9. В конец класса _Default добавьте метод
privateCloudBlobContainerGetContainer()
{
// Get a handle on account, create a blob storage client and get container proxy
var account =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
varclient = account.CreateCloudBlobClient();
return
client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName
"));
}
10. Добавьте следующий код в метод Page_Load
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
this.EnsureContainerExists();
}
this.RefreshGallery();
}
catch (System.Net.WebException we)
{
status.Text = "Network error: " + we.Message;
if (we.Status == System.Net.WebExceptionStatus.ConnectFailure)
{
status.Text += "<br />Please check if the blob storage service is running at " +
ConfigurationManager.AppSettings["storageEndpoint"];
}
}
catch (StorageExceptionse)
{
Console.WriteLine("Storage service error: " + se.Message);
}
}
11. В конец класса _Default добавьте метод
privatevoidRefreshGallery()
{
images.DataSource =
this.GetContainer().ListBlobs(new BlobRequestOptions()
{
UseFlatBlobListing = true,
BlobListingDetails = BlobListingDetails.All
});
images.DataBind();
}
12. Нажмите F5 для запустка приложения. Запустится браузер с приложением.
Загрузка Blob данных в хранилище
1. Откройте Default.aspx.cs
2. Добавьте метод в конец страницы
private void SaveImage(string id, string name, string description,
string tags, string fileName, string contentType, byte[] data)
{
// Create a blob in container and upload image bytes to it
var blob = this.GetContainer().GetBlobReference(name);
blob.Properties.ContentType = contentType;
// Create some metadata for this image
varmetadata = newNameValueCollection();
metadata["Id"] = id;
metadata["Filename"] = fileName;
metadata["ImageName"] = String.IsNullOrEmpty(name) ? "unknown" :name;
metadata["Description"] = String.IsNullOrEmpty(description) ? "unknown"
:description;
metadata["Tags"] = String.IsNullOrEmpty(tags) ? "unknown" :tags;
// Add and commit metadata to blob
blob.Metadata.Add(metadata);
blob.UploadByteArray(data);
}
3. Измените метод upload_Click
protected void upload_Click(object sender, EventArgs e)
{
if (imageFile.HasFile)
{
status.Text = "Inserted [" + imageFile.FileName + "] -
Content Type [" + imageFile.PostedFile.ContentType + "] -
Length [" + imageFile.PostedFile.ContentLength + "]";
this.SaveImage(
Guid.NewGuid().ToString(),
imageName.Text,
imageDescription.Text,
imageTags.Text,
imageFile.FileName,
imageFile.PostedFile.ContentType,
imageFile.FileBytes
);
RefreshGallery();
}
else
status.Text = "No image file";
}
4. Нажмите F5 для запуска приложения
5. Введете метаданные Name, Description и Tags . Для выбора изображения нажмите
Browse
6. Нажмите UploadImage для публикации изображения в веб приложении
Извлечение метаданных для Blob в хранилище
1. Откройте Default.aspx в режиме Design, выберите контрол imagesListView и в окне
свойств нажмите кнопку Events
2. Найдите метод OnBlobDataBound и вставьте следующий код
protected void OnBlobDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var metadataRepeater = e.Item.FindControl("blobMetadata") as Repeater;
var blob = ((ListViewDataItem)(e.Item)).DataItem as CloudBlob;
// If this blob is a snapshot, rename button to "Delete Snapshot"
if (blob != null)
{
if(blob.SnapshotTime.HasValue)
{
var delBtn = e.Item.FindControl("deleteBlob") as LinkButton;
if (delBtn != null) delBtn.Text = "Delete Snapshot";
var snapshotBtn = e.Item.FindControl("SnapshotBlob") as LinkButton;
if (snapshotBtn != null) snapshotBtn.Visible = false;
}
if (metadataRepeater != null)
{
//bindtometadata
metadataRepeater.DataSource = from key in blob.Metadata.AllKeys
selectnew
{
Name = key,
Value = blob.Metadata[key]
};
metadataRepeater.DataBind();
}
}
}
}
3. Нажмите F5 для запуска приложения. Убедитесь что отображаются метаданные для
изображения, загруженного ранее
Удаление Blob из хранилища
1. Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола
asp:ListView. Раскомментируйте код , следующий за контролом blobMetadata
<divclass="item">
<ul style="width:40em;float:left;clear:left" >
<asp:Repeater ID="blobMetadata" runat="server">
<ItemTemplate>
<%# Eval("Name") %><span><%# Eval("Value") %></span>
</ItemTemplate>
</asp:Repeater>
<asp:LinkButton ID="deleteBlob"
OnClientClick="return confirm('Delete image?');"
CommandName="Delete"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Delete" oncommand="OnDeleteImage" />
</ul>
<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/>
</div>
2. Добавьте следующий код в файл Default.aspx.cs
protected void OnDeleteImage(object sender, CommandEventArgs e)
{
try
{
if (e.CommandName == "Delete")
{
var blobUri = (string)e.CommandArgument;
var blob = this.GetContainer().GetBlobReference(blobUri);
blob.DeleteIfExists();
RefreshGallery();
}
}
catch (StorageClientExceptionse)
{
status.Text = "Storage client error: " + se.Message;
}
catch (Exception) { }
}
3. Нажмите F5 для запуска приложения
4. Добавьте еще несколько изображений и нажмите Delete на любом из изображений
Копирование Blob
1. Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола
asp:ListView. Раскомментируйте следующий код
<divclass="item">
<ul style="width:40em;float:left;clear:left" >
<asp:Repeater ID="blobMetadata" runat="server">
<ItemTemplate>
<%# Eval("Name") %><span><%# Eval("Value") %></span>
</ItemTemplate>
</asp:Repeater>
<asp:LinkButton ID="deleteBlob"
OnClientClick="return confirm('Delete image?');"
CommandName="Delete"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Delete" oncommand="OnDeleteImage" />
<asp:LinkButton ID="CopyBlob"
OnClientClick="return confirm('Copy image?');"
CommandName="Copy"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Copy" oncommand="OnCopyImage" />
</ul>
<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/>
</div>
2. Добавьте в файл Default.aspx.cs
protected void OnCopyImage(object sender, CommandEventArgs e)
{
if (e.CommandName == "Copy")
{
// Prepare an Id for the copied blob
varnewId = Guid.NewGuid();
// Getsourceblob
var blobUri = (string)e.CommandArgument;
var srcBlob = this.GetContainer().GetBlobReference(blobUri);
// Createnewblob
var newBlob = this.GetContainer().GetBlobReference(newId.ToString());
// Copycontentfromsourceblob
newBlob.CopyFromBlob(srcBlob);
// Explicitly get metadata for new blob
newBlob.FetchAttributes(new BlobRequestOptions{BlobListingDetails =
BlobListingDetails.Metadata});
// Change metadata on the new blob to reflect this is a copy via UI
newBlob.Metadata["ImageName"] = "Copy of \"" +
newBlob.Metadata["ImageName"] + "\"";
newBlob.Metadata["Id"] = newId.ToString();
newBlob.SetMetadata();
// Renderallblobs
RefreshGallery();
}
}
3. Нажмите F5 для запуска приложения
4. Добавьте еще несколько изображений и нажмите Copy на любом из изображений
Получение снимков Blob
1. Откройте Default.aspx в режиме Source, найдте ItemTemplate для контрола
asp:ListView. Раскомментируйте следующий код
<divclass="item">
<ul style="width:40em;float:left;clear:left" >
<asp:Repeater ID="blobMetadata" runat="server">
<ItemTemplate>
<%# Eval("Name") %><span><%# Eval("Value") %></span>
</ItemTemplate>
</asp:Repeater>
<asp:LinkButton ID="deleteBlob"
OnClientClick="return confirm('Delete image?');"
CommandName="Delete"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Delete" oncommand="OnDeleteImage" />
<asp:LinkButton ID="CopyBlob"
OnClientClick="return confirm('Copy image?');"
CommandName="Copy"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Copy" oncommand="OnCopyImage" />
<asp:LinkButton ID="SnapshotBlob"
OnClientClick="return confirm('Snapshot image?');"
CommandName="Snapshot"
CommandArgument='<%# Eval("Uri")%>'
runat="server" Text="Snapshot" oncommand="OnSnapshotImage" />
</ul>
<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/>
</div>
2. В файл Default.aspx.cs добавьте
protected void OnSnapshotImage(object sender, CommandEventArgs e)
{
if (e.CommandName == "Snapshot")
{
// Getsourceblob
var blobUri = (string) e.CommandArgument;
var srcBlob = this.GetContainer().GetBlobReference(blobUri);
// Create a snapshot
varsnapshot = srcBlob.CreateSnapshot();
status.Text = "A snapshot has been taken for image blob:" + srcBlob.Uri + " at " +
snapshot.SnapshotTime;
RefreshGallery();
}
}
3. Нажмите F5 для запуска приложения
4. Нажмите Snapshot на любом из изображений
Задание
Отработать действия с Blob данными:
1. Получение Blob данных из хранилища
2. Загрузка Blob данных в хранилище
3. Извлечение метаданных для Blob в хранилище
4. Удаление Blob из хранилища
5. Копирование Blob
6. Получение снимков Blob
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 14. Работа с Tables
Цель лабораторной работы: Практическое освоение процесса работы с Tables в Windows
Azure.
Задачи лабораторной работы:
Освоение работы с Tables в Windows Azure.
Разработать приложение, получающее координаты устройства и отслеживающее их
изменения.
Аппаратура и программные инструменты, необходимые для лабораторной работы
1. Настольный или портативный компьютер, поддерживающий виртуализацию,
операционная система MicrosoftWindows XP, Vista, Windows 7.
2. Доступ к сети Интернет.
3. Наличие аккаунта WindowsAzure.
Настройка StorageAccountSettings
1. Откройте меню Пуск | Все программы| MicrosoftVisualStudio 2010 |
MicrosoftVisualStudio 2010.
2. Вменю File выберите Open изатем Project/Solution. Откройтефайлпроекта
ExploringWindowsAzureStorageVS2010\Source\Ex01-
WorkingWithTables\begin\C#\begin.sln
3. Убедитесь что проект RdChat_WebRole запускается по умолчанию.
4. В SolutionExplorer, в проекте RdChat нажмите правой кнопкой по узлу
RdChat_WebRole и выберите Properties
5. Назакладке Settings создайте ConnectionString сименем DataConnectionString.
Выберите Usedevelopmentstorage
6. Сохраните изменения
Создание классов для модели ModeltheTableSchema
1. В SolutionExplorer нажмите правой кнопкой по проекту RdChat_WebRole, выберите
AddReference, затем выберите закладку . NET, выделите компонент
System.Data.Service.Client и нажмите OK.
2. Нажмите правой кнопкой мыши по RdChat_WebRole в SolutionExplorer, выберите
Add, затем Class. В диалоге AddNewItem введите имя Message.cs и нажмите Add.
3. Обновите класс
publicclassMessage :
Microsoft.WindowsAzure.StorageClient.TableServiceEntity
{
}
Добавьте конструктор
publicMessage()
{
PartitionKey = "a";
RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks -
DateTime.Now.Ticks, Guid.NewGuid());
}
4. Добавьте два свойства
public string Name { get; set; }
public string Body { get; set; }
5. Сохраните изменения в Message.cs
6. Нажмите правой кнопкой мыши по RdChat_WebRole в SolutionExplorer, выберите
Add, затем Class. В диалоге AddNewItem введите имя MessageDataServiceContext.cs
и нажмите Add.
7. Добавьте пространства имен в начало файла
usingMicrosoft.WindowsAzure.StorageClient;
usingMicrosoft.WindowsAzure;
8. Замените объявление класса
namespaceRdChat_WebRole
{
publicclassMessageDataServiceContext :TableServiceContext
{
public MessageDataServiceContext(string baseAddress, StorageCredentials
credentials)
: base(baseAddress, credentials)
{
}
}
}
9. Добавьте свойство
publicIQueryable<Message>Messages
{
get
{
return this.CreateQuery<Message>("Messages");
}
}
Добавьте метод
public void AddMessage(string name, string body)
{
this.AddObject("Messages", new Message { Name = name, Body = body });
this.SaveChanges();
}
10. Вменю Build выберите Build Solution.
Создание пользовательского интерфейса Chat
1. В файле Global.asax.cs найдите метод Application_Start и вставьте следующий код.
protectedvoidApplication_Start()
{
...
/// CreatedatatablefromMessageDataServiceContext
/// It is recommended the data tables should be only created once.
Itistypicallydoneas a
/// provisioning step and rarely in application code.
var account =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
// dynamicallycreatethetables
CloudTableClient.CreateTablesFromModel(typeof(MessageDataServiceContext),
account.TableEndpoint.AbsoluteUri, account.Credentials);
}
2. Убедитесь что в файле Global.asax.cs объявлены пространства имен
usingMicrosoft.WindowsAzure;
usingMicrosoft.WindowsAzure.ServiceRuntime;
usingMicrosoft.WindowsAzure.StorageClient;
3. Разверните узел RDChat_WebRole в SolutionExplorer, откройте меню правой
кнопкой мыши на Default.aspx и выберите ViewCode.Убедитесь что следующие
пространства имен есть в файле Default.aspx.cs / Default.aspx.vb
using System.Data.Services.Client;
usingMicrosoft.WindowsAzure;
4. В файле Default.aspx.cs найдите событие SubmitButton_Click и вставьте следующий
код
protected void SubmitButton_Click(object sender, EventArgs e)
{
varstatusMessage = String.Empty;
try
{
var account =
CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
var context = new
MessageDataServiceContext(account.TableEndpoint.ToString(), account.Credentials);
context.AddMessage(this.nameBox.Text, this.messageBox.Text);
this.messageList.DataSource = context.Messages;
this.messageList.DataBind();
}
catch (DataServiceRequestExceptionex)
{
statusMessage = "Unable to connect to the table storage server.
Pleasecheckthattheserviceisrunning.<br>"
+ ex.Message;
}
status.Text = statusMessage;
}
5. Сохраните все изменения. В меню Build выберите BuildSolution.
Проверка:
1. Для запуска приложения нажмите F5. Приложение откроется в веб браузере
2. В области уведомлений панели задач нажмите правой кнопкой по значку и выберите
ShowDevelopmentStorage UI
3. Наберите сообщение и нажмите кнопку Submit. Через несколько секунд страница
обновится и появится сообщение.
Задание
Выполнить выше описанные действия.
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Лабораторная работа 15. Освоение навыков работы с облачными сервисами
Цель лабораторной работы: Получение опыта работы с облачными сервисами
Задачи лабораторной работы:
Освоение работы в Windows Live
Освоение работы в Office Live
1 Работа в Windows Live
1. Откройте в Internet Explorer страницу http://live.com/
2. Пройдите аутентификацию использую Live ID, при необходимости
зарегистрируйтесь
3. В верхнем меню наведите выберите Hotmail
4. Создайте учетную запись Hotmail
5. Подключите имеющийся у Вас почтовый аккаунт
6. В верхнем меню наведите курсор на Hotmail и выберите Calendar
7. Укажите часовой пояс
8. Создайте новый календарь в меню New | Calendar
9. Создайте новое событие в меню New | Event
10. В верхнем меню наведите курсор на Messenger, выберите Contacts
11. Создайте новый контакт в меню New
12. В меню Office создайте документы Word, Excel, PowerPoint
13. Дважды выполните изменения в файле.
14. Откройте историю версий, выполните возврат к предыдущей версии документа.
15. Измените настройки общего доступа к файлу.
16. В меню Photos | Your albums создайте новый альбом, нажав Create album
17. Загрузите несколько фотографий в созданный альбом
18. Откройте общий доступ к альбому в меню Photos | Share photos
19. В меню Windows Live выберите SkyDrive
20. Создайте учетную запись в SkyDrive
21. Создайте новую папку в SkyDrive через меню New
22. Загрузите несколько файлов в созданную папку
23. Откройте общий доступ к папке, выбрав ее и в меню Share выберите Edit
Permissions
24. В меню Profile выберите connect
25. При наличие, подключите имеющиеся учетные записи Facebook, YouTube,
MySpace, LinkedIn
2 Работа в Office Live
1. Откройте в Internet Explorer страницу http://workspace.officelive.com/
2. Нажмите Вход (справа вверху), используйте Live ID для входа.
3. Выберите Новая рабочая область для создания новой рабочей области
4. Перейдите в созданную рабочую область
5. В меню Создать выберите Примечание, заполните необходимую информацию
6. В меню Создать выберите Список задач, заполните необходимую информацию
7. Добавьте новую строку и новый столбец
8. В меню Создать выберите Список контактов, заполните необходимую
информацию
9. Добавьте несколько контактов
10. В меню Создать выберите Список событий, заполните необходимую информацию
11. Добавьте несколько событий
12. Подключите список в Microsoft Outlook, нажав в меню на кнопку Подключение к
Outlook
13. Произведите экспорт в Microsoft Excel нажав в меню на кнопку Экспорт в Excel
14. Измените настройки общего доступа в меню Общий доступ
15. Создайте несколько комментариев.
Задание
1. Выполнить описанные действия в Windows Live
2. Выполнить описанные действия в Office Live
Отчет по лабораторной работе выполняется по стандарту, описанному в
методических указаниях
Семинарское занятие 1. Тренды на рынке мобильных приложений и облачных сервисов
Цель семинарского занятия: Обсудить основные тренды на рынке мобильных
приложений.
План семинарского занятия:
1. Введение
2. Какие мобильные устройства используются?
3. Мобильные устройства и мобильный интернет в Казахстане
4. Для чего люди используют мобильные устройства?
5. Тренды рынка мобильных приложений
6. Тренды на рынке облачных сервисов
Содержание семинарского занятия:
1 Введение
Современные мобильные устройства используют мощные аппаратные компоненты,
которые позволяют запускать на них игры, изначально разработанные для ПК, смотреть
фильмы в HD-качестве, редактировать фотографии и запускать приложения для
выполнения рабочих задач в различных областях.
При этом мобильный телефон очень сильно отличается от других электронных
устройств, используемых человеком повседневно. Вот несколько примеров: мы всегда
носим телефон с собой, телефон - это персональное устройство, которым пользуется
конкретный человек, основное назначение телефона - взаимодействие с другими людьми.
Развитие мобильного интернета увеличило потенциал мобильных устройств как
основного средства коммуникации в разы.
Чтобы понять основные тренды на рынке мобильных приложений, мы начнём с
анализа используемых устройств и использования мобильного интернета.
2 Какие мобильные устройства используются?
Следует иметь вииду, что в настоящий момент далеко не во всём мире поголовно
все пользуются смартфонами. Например, в Испании, население которой насчитывает
примерно 47 млн человек, в использовании находятся 56 млн мобильных телефонов, из
которых смартфонов - всего 18 млн. Соотношение этих двух показателей меняется от
стране к стране, причем с каждым годом число смартфонов растёт.
Число пользователей планшетов тоже постоянно увеличивается, что
подтверждается исследованиями компании Gartner. По данным Gartner, число проданных
в 2013 году планшетов больше аналогичного показателя 2012 года на 68% и составило 195
435 004 шт. В этом можно сразу увидеть тенденцию увеличения числа пользователей
планшетов, а значит и необходимость адаптации создаваемых мобильных приложений
под этот вид мобильных устройств.
Важным фактором при создании мобильного приложения служит платформа, под
которую приложение будет разрабатываться. На лекции мы видели, что лидером среди
платформ является ОС Android.
Конечно, не стоит забывать и о молодых игроках рынка мобильных ОС, к которым
можно отнести Tizen, Sailfish OS, Firefox OS и Ubuntu Mobile. В основе этих систем лежат
открытые платформы, наработки, взятые у таких известных систем, как Bada, MeeGo, Qt и
др. Эти системы только начинают развиваться и не смогут пока серьезно конкурировать с
лидерами, но каждая из этих систем может найти своих поклонников.
Если посмотреть на рынок планшетов, то ситуация на нем примерно такая же.
Лидерство также удерживают устройства на ОС Android (62,3% рынка), второе место
занимают планшеты iPad разных версий (32,7% рынка), устройства под управлением
Windows занимают 4,8% рынка.
Здесь можно выделить три закономерности:
1. лидирующие позиции Android как в сегменте смартфонов, так и планшетов можно
связать с активностью большого количества поставщиков (как правило китайских и
корейских), выпускающих модели начального и среднего уровня в низкой ценовой
категории;
2. Apple конкурирует на рынке всего лишь двумя устройствами - iPhone и iPad, что
ограничивает её возможности в завоевании рынка мобильных платформ;
3. малое количество Windows-устройств связано с небольшим количеством
мобильных приложений для этой платформы.
3 Мобильные устройства и мобильный интернет в Казахстане
В казахстанском сегменте мобильного рынка ситуация несколько иная.
«По итогам первого квартала 2016 года рынок мобильных телефонов в Казахстане,
не смотря на все сложности рынка ИТ, остается одним из самых активных. Онлайн-
продажи растут, покупка мобильных телефонов в кредит — один из драйверов продаж.
Сегмент Telco (продажи мобильных телефонов напрямую операторами мобильной связи)
активно развивается с каждым кварталом, это видно по увеличению ассортимента
моделей мобильных телефонов у операторов сотовой связи. Серый рынок в Казахстане на
данный момент превышает 30%», — говорит Алена Кизуб, аналитик IDC по мобильным
устройствам и планшетам.
По данным ежеквартального отчета IDC Kazakhstan Quarterly Mobile Phones Tracker
в период с января по март 2016 года казахстанский рынок телефонов показал сокращение
объемов как в количественном, так и в денежном выражении по сравнению с
аналогичным периодом прошлого года, однако изменения не критичны. Рынок
смартфонов составил $203 млн, для сравнения в первом квартале 2015 года рынок
составлял $210 млн. Всего за указанный период было поставлено более 800 тыс. единиц
телефонов, падение по сравнению с аналогичным периодом прошлого года составило
11,8%.
«В I кв. 2015 средний курс тенге по отношению к доллару составлял 184,5 тенге, в I
кв. 2016 — 355,1 тенге (курс Нацбанка). Как итог — в первом квартале прошлого года
закупки составили более чем 38 млрд тенге, в этом году — около 72 млрд, то есть более
89% роста. Средняя цена на обычный мобильный телефон составляла $37, теперь — $26,
на смартфон — $277, теперь — $291, в тенговом эквиваленте разница в цене за устройство
составит от 35% до 102%. Некоторые розничные сети уже заявили, что их продажи в
денежном выражении (в тенге) выросли более чем на 50%, этого нельзя опровергнуть,
однако это последствия девальвации тенге, не более», — отмечает Алена Кизуб.
Смартфоны (в том числе фаблеты) заняли около 83% рынка мобильных устройств,
что на 5,7% больше по сравнению с I кв. прошлого года. Самые популярные бренды в
этой категории — Apple, LG и Samsung. Доля данных брендов в денежном выражении
составила 86,7%. Среди обычных мобильных телефонов лидируют Nokia и Samsung, у них
же и самые дорогие телефоны этой категории.
Индийский производитель Micromax занял более 1% рынка и показал хорошие
продажи. Это первый официальный квартал бренда в Казахстане. Китайские бренды
отличились в I кв. 2016 года высокими средними ценами по рынку. Средняя цена на
смартфоны ZTE, Meizu и XiaoMi составила $247. В целом, китайские бренды отвоевали
себе более 3% рынка.
В I кв. 2016 года в розницу ушло почти 100% мобильных телефонов, в средний
бизнес и другие сегменты всего 0,4%. Распределение по каналам сильно изменилось по
сравнению с I кв. 2015 года. 8,6% ушло в электронные продажи, розница потеряла более
6%. Наблюдается сдвиг по операционным системам в сторону Android, что связано с
большим количеством поставок китайских брендов на Android, — 75,5%, Windows —
менее 1%, iOS — 6,6%.
Самые популярные модели среди мобильных телефонов — Nokia 105 Dual SIM и
Samsung B350E. Среди смартфонов — все представители Samsung: Galaxy A7, Galaxy J5
— модели J500F и J500H.
«Пока мы прогнозируем поставку 2,5–3 млн единиц мобильных устройств в 2016
году. Яснее станет в сентябре, поскольку на этот месяц выпадает выход новых моделей.
Также мы прогнозируем, что Samsung и Nokia в скором времени покинут сегмент
мобильных телефонов, сосредоточившись полностью на смартфонах, оставив это место
китайским и индийским брендам. С уверенностью можно сказать, что следующий квартал
будет таким же стабильным, рынок не превысит 850 тыс. единиц. Однако средняя цена по
рынку опустится ориентировочно на 12%. Также к концу 2016 года мы ожидаем
сокращение серых поставок в связи с запуском 4G в крупных городах Казахстана.
Устройства, попавшие на рынок через серый канал, не всегда поддерживают функцию 4G,
поэтому большинство покупателей будут отдавать предпочтение легальным телефонам»,
— считает Алена Кизуб.
Согласно результатам IDC Quarterly Tablet Tracker, в первом квартале 2016 года
казахстанский рынок планшетов сократился на 20,2% в штучном выражении и на 23,3% в
долларах США, в сравнении с аналогичным периодом прошлого года. В Казахстан за I кв.
2016 г. было поставлено около 50 тысяч планшетов.
Аналитики подчеркивают, что потребители все меньше проявляют интерес к
планшетным решениям, отдавая предпочтение мобильным устройствам с поддержкой
LTE/4G (об этом свидетельствуют и показатели рынка мобильных телефонов за I квартал
2016). А в Казахстане, помимо Altel, запустившего сеть 4G еще в конце 2012 года, сейчас
сеть 4G активно разворачивает Beeline и буквально на днях будет запущен 4G от Кселл.
Впрочем, пока для рынка Казахстана это не стало ключевым фактором, — по-прежнему
основной причиной ослабления интереса к планшетным устройствам остается сокращение
доходов населения и универсальность смартфонов.
По итогам I квартала 2016 года лидерами казахстанского рынка планшетов в
абсолютном выражении стали Apple, Asus и Samsung, в денежном Apple, Lenovo и
Samsung (компании указаны в алфавитном порядке).
Самыми популярными стали планшеты с диагональю 7, 8 и 10,1 дюйма.
Распределение по операционным системам в сравнении с аналогичным периодом
прошлого года претерпело изменения: лидерами рынка остаются устройства на платформе
Android — 86,1%, доля iOS составляет 12,3%, рост составил около 66% по сравнению с I
кварталом 2015 года. По сравнению с IV кварталом 2015 года устройства на базе Windows
показали падение более чем на 86% и составили 1,6% рынка. Средняя цена устройства 2-
в-1, совмещающего в себе функционал ноутбука и планшета, составила $644, что на 59,5%
больше по сравнению с аналогичным периодом прошлого года. На традиционные
планшеты цена составила в среднем $198, что на 5% ниже, чем в I квартале 2015 года.
По итогам I квартала поставки устройств 2-в-1 показали рекордное падение на
56,5% в штучном выражении по сравнению с аналогичным периодом прошлого года.
Неоспоримым лидером этого сегмента стала компания Apple (по методологии IDC
модельный ряд IPad Pro попадает под категорию устройств 2-в-1). В сегменте
традиционных планшетов позицию лидера сохраняет Samsung.
«Прогноз IDC по рынку планшетов остается неизменным. На конец 2016 года в
Казахстан будет завезено не более 200 тысяч планшетов. Популярность будут набирать
устройства 2-в-1 для корпоративных целей. Однако следующий квартал покажет падение
до 35 тыс. единиц. Большинство планшетных решений завозится по белому каналу и так
будет ближайшее время», — говорит Алена Кизуб, аналитик IDC по мобильным
устройствам и планшетам.
4 Для чего люди используют мобильные устройства?
Чем люди занимаются на своих мобильных устройствах? Основная ценность,
получаемая посредством смартфона - коммуникация. Одновременно с коммуникацией
происходит и социализация. Люди всё чаще делятся своими эмоциями, переживаниями,
знакомятся, получают одобрение и признание с помощью мобильных устройств.
Согласно исследованию мобильного интернета в России, проведенному совместно
компаниями Mail.Ru Group и Nielsen, пользователи из всех типов приложений наиболее
часто используют приложения, связанные с музыкой, фото, играми и социальными
сетями. Это данные 2012 года.
В 2013 году картина другая, а именно - тройку лидеров составляют приложения для
общения в социальных сетях, приложения для использования электронной почты и игры.
Сейчас эту тройку стремительно догоняют голосовые и текстовые мессенджеры.
5 Тренды рынка мобильных приложений
Самый главный вопрос: какое приложение привлечет больше потребителей и
станет интересным для инвестора? Конечно, не следует забывать, что важнее всего
оригинальная идея и качественное её исполнение, но понимание тенденций рынка
помогает определить как минимум область поиска идеи.
Первые строчки в статистике использования приложений занимают следующие виды:
o Социальные сети.
o Фото.
o Мессенджеры.
o Игры.
Социальные сети. В этом тренде можно выделить два направления: приложения,
взаимодействующие с уже существующими социальными сетями, и создание новых
социальных сетей.
Приложения, взаимодействующие с уже существующими социальными сетями -
это приложения, которые добавляют разные форматы активности в социальных сетях.
Многие люди не довольны стандартными мобильными клиентами от известных сетей, они
хотят использовать другие мессенджеры, отправлять свой контент в сеть самостоятельно,
агрегировать новости и контакты из разных сетей.
С другой стороны, мобильный телефон уже давно стал самостоятельным
устройством и стали появляться мобильные социальные сети, т.е. социальные сети, не
имеющие представительства в обычном Интернете, а использующие только мобильное
приложение на различных мобильных платформах.
Ярким примером такой сети является Instagram, который позволил пользователям
применять к своим фотографиям различные светофильтры и делиться с друзьями новыми
фотографиями. Instagram сначала запустил приложение для iPhone в октябре 2010 года.
Версия для ОС Android появилась только в апреле 2012 года, а полноценную
"настольную" версию сайта компания запустила лишь в феврале 2013 года, когда число
активных пользователей приближалось к 100 млн.
В чем же заключается тренд? Для ответа на этот вопрос проследим закономерности
в развитии социальных сетей. До появления Facebook существовало несколько небольших
по нынешним меркам социальных сетей, потом Facebook стал развиваться, стало
появляться много клонов, но они не выдержали конкуренции и дальнейшее развитие
получил в основном Facebook. Сейчас это уже не сайт для друзей-сокурсников, а
информационный портал с множеством новостей, записей и т.д. Однако системные
закономерности привели к тому, что стали появляться маленькие сети, ориентированные
на небольшие группы людей. Под системными закономерностями понимаются общие
закономерности развития сложных технических и социальных систем, которые имеют
схожие законы эволюции, а это дает основания делать прогнозы развития на основе
имеющихся знаний в другой области. Появление меньших по размеру сетей явилось,
таким образом, закономерным этапом эволюции. Появляться они стали на смартфонах,
так как с появлением мобильного интернета прямой доступ к пользователям дают именно
мобильные платформы.
Примером успешной мобильной сети может служить приложение "Path". Path - это
приватная социальная сеть для общения с самыми близкими людьми. Максимальное
число возможных контактов в ней ограничено так называемым "Числом Данбара". Число
Данбара — ограничение на количество постоянных социальных связей, которые человек
может поддерживать. Число Данбара равно 150. Страница пользователя в Path больше
всего напоминает дневник, также присутствуют все атрибуты социальных сетей -
редактирование и обмен фото, сообщения и смайлики, чек-ины и прочее. Используя
систему передачи прямых сообщений в Twitter и Gmail, Path смогли набрать более 20 млн
пользователей в августе 2013 г. В 2010 г. через месяц после запуска Google хотел купить
Path за 100 миллионов долларов США, но получил отказ. Подняв в январе 2014 года
третий раунд инвестиций в размере 25 млн долларов США от Индонезийской венчурной
компании, Path продолжает развиваться, имея суммарно 65 миллионов долларов
инвестиций.
Примеров таких мобильных социальных сетей немало:
o Pair - социальная сеть для влюблённых;
o EveryMe - социальная сеть, строящаяся на основе ваших телефонных контактов, с
разделением людей на группы "работа", "семья" и т.д.
o Foursquare - социальная сеть на основе геолокации и чек-инов.
Фото. Телефон и фотоаппарат объединились в одном устройстве. Многие люди уже
отказываются от покупки цифровой камеры, т.к. у них есть телефон, который делает
прекрасные снимки, а если учесть то, что многие просматривают фото друзей с телефона
или планшета, то камеры в мобильных устройствах могут вполне успешно конкурировать
с полноценными цифровыми фотоаппаратами.
Самым ярким примером успешного фото-приложения стал Instagram, который был
приобретён компанией Facebook в апреле 2012 года за рекордную на тот момент сумму -
стоимость сделки составила примерно 1 миллиард долларов, причем часть суммы была
передана в виде акций компании Facebook.
К трендам в сфере фото-приложений можно отнести следующее:
o приложения для Selfy - снимков самого себя;
o приложения, использующие и фронтальную и заднюю камеру телефона;
o приложения с разнообразными фильтрами для фотографий.
Мессенджеры. Коммуникационная функция остается самой главной функцией
смартфонов, а распространение Wi-Fi сетей и недорогого мобильного интернета
позволило владельцам смартфонов общаться, пользуясь не только услугами операторов
мобильной связи.
Первопроходцем в этой области стал Skype, пришедший на мобильные платформы
с обычных ПК. Сейчас же существует множество приложений для общения, вот самые
популярные из них:
o Viber;
o WhatsApp;
o Line;
o WeChat;
o CacaoTalk;
o SnapChat.
WhatsApp был приобретён компанией Facebook в феврале этого года за 19
миллиардов долларов, а SnapChat уже получал предложения о покупке от Google за 4
миллиарда долларов.
Обобщая функционал таких приложений, можно выделить следующее:
o позволяют обмениваться текстовыми сообщениями, смайликами, MMS;
o позволяют совершать голосовые и видеовызовы;
o анализируют ваши контакты на телефоне и добавляют автоматически людей, у
которых уже установлено подобное приложение.
Игры. В этой сфере всё просто и сложно одновременно. Для того, чтобы создать
популярную игру, нужен интересный сюжет и нестандартное мышление. Наибольшей
популярностью пользуются аркадные казуальные игры, в которых нет долгих уровней.
Конечно, примером самой популярной игры являются Angry Birds от Rovio. С другой
стороны, постоянно появляются самые разнообразные игры, например, Flappy Bird,
которые входят в топ приложений.
Мобильный банкинг. Люди хотят следить за движением своих денежных средств и
делать это не только через СМС-информирование. Многие банки уже обзавелись
мобильными клиентами. В России самым популярным является мобильный клиент
Альфа-банка. Сложность для стартапов заключается в том, что банки сами разрабатывают
себе приложения или нанимают компании для разработки своих приложений, поэтому для
молодых стартаперов путь остается один: создать интересное приложение в финансовой
сфере (учет бюджета, кредитный калькулятор и т.д.), а когда оно наберёт популярность,
искать партнёра среди банкиров или полностью продавать решение какому-либо банку.
Стоит также помнить, что в этой области высока конкуренция.
Геолокация. Это глобальный тренд и он связан со всеми предыдущими. Раньше
стартаперы стремились создавать отдельные геолокационные приложения и примером
этому служит AlterGeo (2008 г.в.) и Foursquare (2009 г.в.). В настоящее время
геопозиционирование само по себе уже не так интересно, зато оно проникло в другие
категории приложений, а именно, в социальные сети и дейтинговые сервисы.
Интересным примером социального дейтинг-сервиса с использованием геолокации
является сервис Highlight, который позволяет вам пообщаться с друзьями из социальных
сетей, которые находятся неподалёку от вас.
В завершении разговора о мобильных трендах можно выделить ещё несколько
перспективных направлений. Во-первых, Smart TV. Использование смартфонов и
планшетов для просмотра IP TV и для управления телевизорами и другими
мультимедийными устройствами. Во-вторых, офисные приложения. Всё больше людей
используют собственные планшеты и смартфоны на рабочем месте или в рабочих целях
вместо стационарных компьютеров. В-третьих, носимые гаджеты. В 2013 году появилось
несколько "умных" часов, в т.ч. от таких компаний, как Sony и Samsung. Количество
подобных устройств будет только расти, и им тоже потребуются приложения для работы
и коммуникации со смартфоном.
6 Тренды на рынке облачных сервисов
Сама идея облачных вычислений появилась вместе с Интернетом. Суть ее была
проста: каждый человек, имея доступ к сети, должен получать все необходимые ресурсы -
информацию, программы, вычислительные мощности, и пользоваться ими по своему
усмотрению в любом месте и в любое время. Однако технологии, существовавшие в то
время, и малая степень их распространения не позволили этим идеям и концепциям
развиться во что-то большее. В конце ХХ века бурный рост скорости в сетях передачи
данных и быстрое разрастание покрытия сети Интернет привели к тому, что идеи 1970-х
гг. стали воплощаться в реальность.
Сам термин "облачные вычисления" или "вычисления в облаке" был сформирован
от обозначения ИТ-структур на схемах в виде облака, с пониманием необходимого
функционала этого облака, но без точного знания того, что и как внутри этого облака
работает, что представляет собой инфраструктура и какое программное обеспечение
применяется.
Одним из пионеров отрасли, применивших концепцию SaaS (Software-as-a-Service),
основанную на принципе облачного хранения данных, стал ресурс www.salesforce.com,
появившийся в 1999 г. На сегодняшний день его использует огромное количество
организаций, чьи офисы и сотрудники разбросаны по всему миру. Следующим шагом
стало создание в 2006 г. Amason Web Service от одноименной компании, которая
запустила его в коммерческую эксплуатацию для любых, даже самых малых, компаний.
В 2013 году 60% средних и малых компаний использовали облачные сервисы, 66%
компаний планируют продолжать пользоваться облачными сервисами. 72% средних и
малых компаний пользовались технологиями виртуализации, а 80% планируют переход на
виртуальные серверные технологии. Облачные вычисления находятся на подъёме и сами
по себе являются одним из трендов ИТ-отрасли.
Теперь рассмотрим непосредственно тренды внутри облачных вычислений.
В первую очередь следует говорить о распространении гибридных облаков.
Гибридное облако – это сочетание как минимум одного частного облака и одной облачной
инфраструктуры общего пользования, создающее среду, которая обеспечивает доступ к
облаку и может динамически наращиваться для управления неравномерной нагрузкой.
Целью создания гибридных облаков является объединение их двух главных качеств:
безопасности частного облака и мощности публичных облаков
Вторым трендом можно назвать развитие Интернета вещей. Термин "Интернет
вещей" (Internet of Things) был предложен Кевином Эштоном в 1999 году. Интернет вещей
- это сеть, образованная различными устройствами, имеющими доступ в Интернет, и
объединяющая реальные и виртуальные объекты. Сейчас множество приборов вокруг нас
имеют доступ к Интернету: принтеры, телевизоры, холодильники, часы, электрические
розетки. Активно развивается и дополненная реальность - все с нетерпением ждут выхода
на массовый рынок очков Google Glass. Понятно, что все эти приборы будут
взаимодействовать между собой и человеком посредством некоторой облачной
инфраструктуры, имеющий свой набор протоколов.
Развитие облачных хранилищ и веб-сервисов, использующих облака. Сейчас уже
почти у каждого есть свое онлайн хранилище. Наиболее популярными из них являются
iCloud, SkyDrive, Dropbox и Google Drive. С каждым годам хранилища предлагают
пользователям всё больше места для размещения своих данных. В 2013 году был запущен
сервис Mega, который сразу предлагал пользователям 50 Гб места для хранения файлов.
При постоянно растущем количестве облачных хранилищ персональных данных, могут
быть востребованы стартапы, реализующие различные агрегаторы и интеграторы для
облачных сервисов.
Для веб-сервисов использование облачных технологий является ключом к
быстрому и безболезненному масштабированию.
Bring Your Own Device - принеси своё устройство. Мы упоминали этот тренд в
мобильных приложениях, имея в виду то, что следует разрабатывать приложения для
смартфонов и планшетов, которые позволят людям более свободно использовать свои
устройства на рабочих местах. С точки зрения архитектуры такие решения должны
опираться на облачные сервисы, т.к. только они могут обеспечить должную мобильность
и возможности коллаборации. Очевидно, что этот тренд кореллирует с увеличением числа
гибридных облаков, т.к. BYOD-приложения наилучшим образом будут функционировать
на стыке частных и публичных облаков.
Семинарское занятие 2. Бизнес-модели для мобильных приложений.
Цель семинарского занятия: Рынок мобильных приложений показывает хорошую
положительную динамику и привлекает внимание венчурных инвесторов, что делает его
самым привлекательным для запуска собственного стартапа. Многие начинающие
предприниматели, создавая свое приложение, не задумываются о том, как оно будет
зарабатывать или же откладывают принятие решения о выборе бизнес-модели на потом. В
любом случае, если вы решили заниматься предпринимательством, то бизнес-модель вам
понадобится, ведь лучше как можно раньше понять, как и на чем вы сделаете свой первый
миллион.
План семинарского занятия:
1. Бизнес-модели
2. Платные приложения
3. Рекламная модель
4. M-commerce
Содержание семинарского занятия:
1 Бизнес-модели
Бизнес-моделей для мобильных приложений не так уж и много и все они пришли в
эту сферу из технологического предпринимательства, а именно из интернет-стартапов.
Давайте перечислим самые популярные бизнес-модели в сети Интернет:
o платные сервисы, в т.ч. SaaS;
o рекламная модель;
o E-commerce (торговля);
o Freemium / Free-to-play.
Бизнес-модели для мобильных приложений появились путем переноса этих
моделей на мобильные платформы.
2 Платные приложения
Это самый простой и очевидный вариант. Иногда такая модель называется "Pay for
Download". В магазине мобильных приложений вы выставляете цену, которую платит
клиент за скачивание вашего приложения, и всё.
Из плюсов такой модели можно отметить простоту: доход от такого приложения
можно просчитать как произведение количества скачиваний на цену приложения за
вычетом комиссии магазина, если таковая имеется.
При такой модели не следует забывать, что если ваше приложение стоит 1 доллар,
то вам нужно очень много пользователей, чтобы обеспечить хороший денежный поток.
Многие магазины приложений не позволяют размещать trial-версии приложений, а значит,
пользователям придется покупать кота в мешке, а вам - тратить средства на убеждение
пользователей, т.е. на рекламу и продвижение.
Главная проблема при такой модели - создать то, что очень нужно пользователям и
убедиться, что не существует бесплатных аналогов, которые решают такую же проблему
не хуже вашего продукта.
Недавнее исследование компании Flurry показало, что 90% приложений в App Store
являются бесплатными, а, к примеру, в 2011 году 80% приложений были
бесплатными.Бесплатные приложения преобладают и на платформе Android.
3 Рекламная модель
Это более сложный вариант с точки зрения расчета экономической модели. В
рекламной модели есть два не исключающих друг друга варианта действий.
Можно зарабатывать на показе рекламы. Реклама может быть как полноэкранной,
так и занимать лишь часть экрана. Как и в настольном варианте, вы можете получать
деньги за показы рекламы и за конкретные действия, которые совершит пользователь
(например, скачивание другого приложения, регистрация на странице рекламодателя и
т.д.).
Можно зарабатывать на отказе от просмотра рекламы, т.е. ваши пользователи
платят вам деньги, чтобы отключить показ рекламы. Такой вариант может быть
реализован как внутри одного приложения (функция "Отключить рекламу"), так и путём
выпуска двух версий приложения:
бесплатной, но с показом рекламы;
платной, но без показа рекламы.
Отдельно рассмотрим преимущества и недостатки рекламной модели. В
преимуществах рекламной модели можно выделить следующее:
o Пользователи будут скачивать ваше приложение, т.к. оно бесплатное.
o Рекламодатели готовы платить чаще, чем пользователи.
Минусы у этой модели тоже есть:
o Стоимость рекламы в мобильных приложениях на настоящий момент гораздо
ниже, чем в настольных приложениях и обычном Интернете.
o Сложность таргетирования рекламы.
o Маленький экран может привести к тому, что объявление станет нечитабельным.
o Переизбыток рекламы в приложении может испортить впечатление о приложении
и привести к тому, что потребители перестанут им пользоваться и поставят вам
низкие оценки в магазине.
4 M-commerce
Эта модель появилась при переходе электронной торговли E-commerce на
мобильные устройства. С появлением смартфонов M-commerce стала активно развиваться
и по темпу роста перегнала E-commerce, если сравнивать соответствующие периоды
развития обеих моделей
Первым опытом использования M-commerce можно считать отправку платных
SMS-сообщений для получения доступа к чатам, сайтам или любому другому контенту.
Дальнейшим развитием M-commerce стало создание мобильных версий сайтов, но они
имеют ряд недостатков по сравнению с мобильными приложениями:
o статическая навигация;
o необходимость в постоянном подключении к Интернету;
o ограниченный функционал (невозможность в полной мере пользоваться
геолокацией и QR-кодами).
Что можно отнести к M-commerce?
Мобильный банкинг.
Приложения по сравнению цен.
Приложения для бронирования отелей и покупке билетов.
Мобильные карты лояльности.
Мобильные купоны.
Семинарское занятие 3. Freemium
Цель семинарского занятия: Рынок мобильных приложений показывает хорошую
положительную динамику и привлекает внимание венчурных инвесторов, что делает его
самым привлекательным для запуска собственного стартапа. Многие начинающие
предприниматели, создавая свое приложение, не задумываются о том, как оно будет
зарабатывать или же откладывают принятие решения о выборе бизнес-модели на потом. В
любом случае, если вы решили заниматься предпринимательством, то бизнес-модель вам
понадобится, ведь лучше как можно раньше понять, как и на чем вы сделаете свой первый
миллион.
План семинарского занятия:
1. Freemium
2. Варианты реализации Freemium
Содержание семинарского занятия:
Freemium
Мобильный Freemium - это очень разноплановая модель со множеством вариаций.
Основная идея традиционного Freemium сохраняется и на мобильных устройствах -
пользователь устанавливает бесплатное приложение и может получить дополнительные
возможности за небольшую плату.
Модель отлично подходит для игровых приложений, но применяется и в других
областях. Например, приложение Evernote (сервис для создания и хранения заметок в
различных видах) показывает хорошие обороты на Freemium модели.
Из плюсов Freemium модели назовём следующие:
o Приложение скачивается бесплатно.
o Бесплатное приложение можно рассматривать как trial-версию.
o Множество вариантов для генерации платных предложений.
o Переходный вариант от полностью бесплатного приложения к платному.
Важный момент для этой модели - конверсия бесплатных пользователей в
клиентов, которые платят вам деньги. Очень хорошим показателем конверсии является
10:1, т.е. на 10 пользователей, которые скачали приложение, приходится только 1 человек,
который воспользуется платными функциями. Из этого следует два пути развития:
Высокие цены на платные услуги.
Привлечение большого числа пользователей, чтобы увеличить денежный поток.
Варианты реализации Freemium
Существует множество вариантов реализации Freemium - модели. Например, в
играх варианты могут быть следующими:
o покупка игровой валюты;
o покупка опыта в игре;
o покупка виртуальных предметов;
o увеличение скорости игры;
o покупка одежды для персонажа;
o покупка подарков;
o покупка оружия;
o покупка vip аккаунта.
Рассмотрим самые популярные из них универсальные варианты, подходящие для
приложений любого типа.
Подписка внутри приложения
Пользователи платят за доступ к дополнительным возможностям ежемесячно
(ежеквартально, ежегодно и т.д.). Такой вариант хорошо подходит для следующих
областей: эффективность/продуктивность, бизнес, развлечения, СМИ, навигация,
финансы. Подписка требует постоянного улучшения и обновления приложения. Этот
вариант хорошо подходит для приложений, использующих однородный ресурс, например,
дисковое пространство, серверные мощности и т.д. При таком подходе нужно стараться
максимально увеличить жизненный цикл клиента.
Получение премиального полного доступа
Хорошо работает для приложений, в которых не используются повторяющиеся
ресурсы (в отличие от предыдущего варианта). Не требует постоянного обновления и
улучшения. Идеальный пример для такой модели, файловый менеджер или файл-
конвертер.
Покупки внутри приложения
Идеальный вариант для игр. Продавать можно всё: уникальный игровой предмет,
ускоренное прохождение, игровые статусы и пр. Также может использоваться за
пределами игровой индустрии, например, приложение журнала Men's Health продаёт
индивидуальные планы тренировок.
Семинарское занятие 4. FaaB
Цель семинарского занятия: Рынок мобильных приложений показывает хорошую
положительную динамику и привлекает внимание венчурных инвесторов, что делает его
самым привлекательным для запуска собственного стартапа. Многие начинающие
предприниматели, создавая свое приложение, не задумываются о том, как оно будет
зарабатывать или же откладывают принятие решения о выборе бизнес-модели на потом. В
любом случае, если вы решили заниматься предпринимательством, то бизнес-модель вам
понадобится, ведь лучше как можно раньше понять, как и на чем вы сделаете свой первый
миллион.
План семинарского занятия:
1. FaaB
2. Магазины приложений
3. Вопросы для самостоятельной работы:
Содержание семинарского занятия:
1 FaaB
Рассмотрим отдельно бизнес-модель FaaB - Free App as a Business . Бесплатное
приложение как бизнес - это не совсем бизнес-модель. Это вариант стратегии развития
бизнеса.
Рассмотрим вариант, когда вы создали полностью бесплатное приложение. Стоит
отметить, что это может случиться и по той простой причине, что вы не видите
возможных вариантов монетизации и не хотите применять универсальную рекламную
модель. По сути, через этот этап проходят все приложения. Если же вы пребываете на
этом этапе слишком долго, то следует сконцентрироваться на быстром росте и
увеличении пользовательской базы для реализации одного из следующих вариантов:
o Вас заметит крупный игрок рынка, для которого ваше приложение будет
конкурентом или, наоборот, источником дополнительной ценности, и купит ваш
стартап.
o Объем вашей пользовательской базы станет настолько велик, что вы сможете
безболезненно внедрить рекламную модель.
Для того, чтобы оценить эффективность той или иной бизнес-модели давайте
посмотрим на статистику. В 2013 году компания Distimo провела исследования по
доходам от различных мобильных приложений (см. рисунок 1 ).
Как видно из графика, Freemium модель безусловный лидер по доходам. Теперь
рассмотрим распределение моделей по сферам (см. рисунок 2 ). На диаграмме видно, что
Freemium преобладает в большинстве категорий приложений, за исключением
навигационных, образовательных приложений и приложений для повышения
эффективности работы.
Рис. 1. Статистика компании Distimo, 2013.
Рис. 2. Статистика компании Distimo, 2013.
2 Магазины приложений
Все магазины приложений имеют свои особенности и перед началом разработки
следует понимать, для какого именно магазина вы в первую очередь разрабатываете
приложение. В своем обзоре компания Mobiaffiliates насчитала около 70 различных
магазинов приложений. Мы рассмотрим лишь самые популярные магазины.
Пользователи iOS считаются законодателями трендов, поэтому, если вы делаете
что-то новое, то лучше попробовать запуститься в App Store. Те, кто размещают свои
приложения в магазине Apple App Store, обычно наблюдают резкий скачок продаж своих
продуктов – в первый же день выручка вырастает в среднем на 52% на приложения для
iPad, и на 41% — на приложения для iPhone.
Второй самый популярный магазин - Google Play. Важная особенность Google Play
— отсутствие премодерации приложений. В какой-то момент времени это привело к тому,
что в магазине было много низкокачественных приложений, но сейчас ситуация
нормализовалась. Отсутствие премодерации позволяет быстро доставлять приложения и
обновления до пользователей. Позиция приложения в магазине зависит от количества
скачиваний, средней оценки и количества оценок. Поэтому важно внутри приложения
напоминать пользователям, чтобы они оценили приложение и оставили отзыв. Однако, не
стоит делать это навязчиво. Отметим, что по правилам нельзя предлагать бонусы за
оценки. Интерфейс просмотра статистики скачиваний удобнее и предоставляет больше
информации, чем аналоги от других компаний. Еще одна особенность этого магазина —
можно перевести текст описания сразу на все доступные языки, используя сервис Google
Translate. Даже такой перевод зачастую приносит больше скачиваний, чем английский
текст для всех регионов, т.к. люди психологически больше доверяют описанию на родном
языке.
Подробнее о правилах и процессе публикации приложений в соответствующих
магазинах вы можете прочитать по ссылкам:
Windows Store http://msdn.microsoft.com/ru-ru/windows/apps/br230836
App Store https://developer.apple.com/
Play Market http://developer.android.com/distribute/index.html
3 Вопросы для самостоятельной работы:
1. Как связаны бизнес-модели для настольных и мобильных приложений?
2. Какая модель больше подходит для мобильных игр?
3. Какая бизнес-модель для мобильных приложений наиболее популярна на
сегодняшний день?
Семинарское занятие 5. Создание работающих мобильных приложений
Цель семинарского занятия: Обсудить, как жизненный цикл приложений, основанный на
принципе mobile-first (сначала мобильная версия), заставляет переосмыслить подход к
качеству приложения, и что должны предпринять разработчики и компании для
преодоления сложностей разработки мобильных продуктов, включая интеграцию и
автоматизацию тестирования мобильных приложений в облачной среде.
План семинарского занятия:
1. Принцип mobile-first
2. Мобильные приложения заставляют переосмыслить представления о качестве
3. Определение требований по-прежнему важно
4. Уникальные особенности тестирования мобильных приложений
5. Переосмысление стратегии тестирования
6. Баланс между качеством и временем выхода на рынок
7. Ключи к успеху тестирования мобильных приложений
Интеграция тестирования
Автоматизация тестирования
Автоматизация тестирования для стратегии mobile-first
Тестирование в реальных условиях
8. Заключение
Содержание семинарского занятия:
1 Принцип mobile-first
Принцип mobile-first является новым лозунгом больших и малых организаций,
которые считают выпуск мобильных приложений вернейшим способом привлечения
клиентов. Перед разработчиками, архитекторами и стратегами мобильных технологий
стоит непростая задача применения творческих подходов, которые иногда являются очень
рискованными. Они делают все возможное, чтобы предвидеть и использовать тенденции
мобильных технологий. При этом происходит трансформация традиционного жизненного
цикла разработки приложений, а также лежащих в его основе предположений и
приоритетов. Это не всегда комфортно, но очень интересно. К счастью, экосистема
разработки мобильного ПО пополняется новыми инструментами, которые разработчики
могут использовать для удовлетворения спроса на интегрированные, автоматизированные,
совместно используемые мобильные решения.
2 Мобильные приложения заставляют переосмыслить представления о качестве
Мобильные приложения в значительно большей степени, чем настольные и Web-
приложения, оцениваются с позиции пользовательских представлений о качестве. В этой
ситуации высокое качество больше не означает просто отсутствие ошибок. Для оценки
качества мобильного приложения необходимо посмотреть на него с разных сторон.
Нужно учитывать как внешние (удобство использования, производительность и контент),
так и внутренние (эксплуатационное качество и безопасность) аспекты.
Тщательная оценка качества приложения исключительно важна, потому что
приложение, не соответствующее ожиданиям пользователей, может нанести вред всему
бренду. Мобильные магазины приложений и социальные медиа предоставляют клиентам
отличную трибуну для плохих отзывов, а переход на приложения конкурентов является
простым и дешевым.
Разработчикам всегда приходится балансировать между удобством использования
и другими показателями качества, но в мобильных технологиях главным является
удобство использования. Хорошо это или плохо, но сегодня компромиссы в отношении
качества приложения оцениваются иначе, чем в прошлом, что неизбежно меняет
представления разработчиков и бизнес-менеджеров о "высоком качестве".
3 Определение требований по-прежнему важно
Стратегия mobile-first является поворотным пунктом для многих корпоративных
клиентов, которые понимают, что мобильное приложение стало основным способом
взаимодействия клиентов с их организациями. Это уже не просто вещь, которую неплохо
иметь; в некоторых случаях мобильное приложение становится двигателем бизнеса и
лицом компании.
По мере того как мобильные приложения вытесняют Web-приложения,
разработчикам необходимо переосмыслить определение требований и управление
требованиями для мобильной разработки. Обилие аппаратных средств и вариантов
распространения приложений делает мобильную отрасль исключительно конкурентной,
поэтому границы возможностей постоянно расширяются. Разработчикам мобильных
приложений нужно очень быстро реагировать на требования пользователей относительно
новых функций и возможностей. Такая способность к быстрому реагированию становится
нормой.
Короче говоря, в эффективном процессе определения требований к мобильным
приложениям должны участвовать пользователи. Нужно понимать, что вам необходимо
привлечь потенциальных пользователей на свою сторону в условиях чрезвычайно
конкурентного рынка мобильных приложений.
4 Уникальные особенности тестирования мобильных приложений
Фрагментация рынка предоставляет разработчикам и пользователям новые
возможности и широту выбора. Однако при тестировании проявляется обратная сторона
этого выбора. В настоящее время на рынке насчитывается порядка 12 000 одних только
уникальных Android-устройств. Такой уровень фрагментации необходимо учитывать в
матрице тестирования для нового мобильного приложения.
Являясь в большей или меньшей степени облегченными, мобильные приложения
зачастую должны иметь больше возможностей и большую функциональность, чем их
Web-эквиваленты. Web-приложение авиакомпании должно иметь функциональность
регистрации на рейс, а его мобильный эквивалент должен уметь отображать электронный
билет, отслеживать багаж и делать многое другое. Каждая из этих функций требует
дополнительного тестирования.
Одновременно с решением проблем тестирования функционально насыщенных
мобильных приложений на различных платформах мы сталкивается с более низкими (по
сравнению с настольными и Web-приложениями) производственными бюджетами,
выделяемыми для мобильных приложений. Как правило, бюджет разработки и
тестирования мобильного приложения относительно невелик.
Кроме того, мобильная разработка осуществляется в высоком темпе. Сроки
разработки часто не соответствуют тем, к которым привыкли традиционные
разработчики. Мобильная разработка требует более гибкого подхода, особенно в части
тестирования и качества. Для мобильного приложения нельзя выполнить столь же
исчерпывающее тестирование, как для настольного или Web-приложения, потому что
количество направлений тестирования намного больше.
5 Переосмысление стратегии тестирования
Команды разработки мобильных приложений, использующие традиционные
методики для определения требований к тестированию, ожидают трудные времена. Чтобы
добиться успеха, нужно иначе посмотреть на мобильную разработку и полностью
переосмыслить подход. Необходим компромисс между временем выхода на рынок и
меняющимся уровнем требований пользователей к качеству.
Определите ответственного за тестирование мобильных приложений в вашей
организации. Это может быть группа разработки, центр обеспечения качества или их
комбинация. Если используются внутренние и внешние тестировщики, четко определите,
где происходит передача тестирования. Также должна быть детально описана
методология. Принятию решений поможет оценка доступных ресурсов и области
тестирования.
Модель FURPS (функциональность, удобство использования, надежность,
производительность, поддерживаемость) дает удобную классификацию требований к
тестированию мобильных приложений (см. раздел Ресурсы). Добавьте в нее безопасность,
конфиденциальность и контент, поскольку они играют важную роль в пользовательском
восприятии качества. Бизнес-менеджеры должны внимательно изучить целевой рынок,
назначение приложения и уровень риска. Необходима постоянная явная и неявная
обратная связь с разработчиками, тестировщиками и пользователями по вопросам
качества.
Лучшей стратегией тестирования мобильных приложений является соблюдение
баланса между автоматизированными тестами и интерактивным ручным тестированием.
6 Баланс между качеством и временем выхода на рынок
Бизнес-модель таких компаний, как Twitter, Facebook и Google, основывается на
поставке на рынок новых функциональных возможностей. Их маркетинговая стратегия
состоит в поставке бесплатных приложений. Каждая из этих компаний научилась не
обращать внимания на несущественные ошибки, чтобы успеть запустить новое
приложение в момент наибольшего на него спроса. Ошибку, которая не влияет на 100 000
человек, исправлять не обязательно. За последние пять-десять лет эти изменения
трансформировали жизненный цикл разработки программного обеспечения.
Однако приоритет времени выхода на рынок подходит не каждой компании.
Крупные бренды и финансовые компании, зависящие от доверия, не могут позволить себе
функциональные ошибки, которые заставят пользователей сомневаться в сохранности
своих данных. Для этих компаний жизненно важно избежать малейших изъянов в
функциональности и системе безопасности, которые могут привести к ухудшению
взаимодействия с пользователями и утрате доверия.
Таким образом, перед поставщиками финансовых услуг встают следующие задачи:
Привлечение клиентов с помощью мобильных приложений.
Добавление новых функций и возможностей.
Поддержка максимально высокого уровня качества и безопасности мобильных
приложений.
7 Ключи к успеху тестирования мобильных приложений
Для эффективного тестирования мобильных приложений в процессе разработки
запланируйте интеграцию и автоматизацию тестирования, а также тестирование в
реальных сценариях и средах.
Интеграция тестирования
Неизменным требованием остается необходимость раннего тестирования. Однако
для мобильных приложений раннее тестирование может оказаться более сложной задачей,
поскольку приложение может зависеть от многоуровневых распределенных систем,
мэйнфреймов, ERP-систем и комплектных прикладных систем. Как правило, все эти
системы разрабатываются и поддерживаются различными группами, которые имеют
разные графики работы и разные бюджеты.
Интеграция всех платформ, которые поддерживают мобильное приложение и
управляют его работой, не должна препятствовать раннему тестированию. Виртуализация
сервисов с помощью таких решений, как IBM Rational Test Workbench и Rational Test
Virtualization Server, дает жизнеспособный обходной путь для некоторых сценариев
интеграции и тестирования мобильных приложений. Создание в тесте заглушек для
сервисов, от которых зависит мобильное приложение, позволяет разработчикам
выполнять тестирование интеграции в процессе разработки приложения согласно
графику.
Разработчики могут использовать Rational Test Workbench для автоматизации
тестирования пользовательского интерфейса приложения, а также тестирования
производительности и функциональности. IBM Rational Test Workbench служит для
тестирования интеграции, виртуализации серверных сервисов и автоматизации
тестирования пользовательского интерфейса. Виртуализация и автоматизация
тестирования пользовательского интерфейса также используются для тестирования
непредвиденных условий среды.
Автоматизация тестирования
Автоматизация имеет (или будет иметь) большое значение для большинства
клиентов. Даже если группа ручного тестирования сейчас справляется со своей работой,
со временем она окажется перегружена. По мере понимания организациями центральной
роли мобильных приложений, сейчас и в будущем, темпы разработки и реализации будут
расти. Автоматизация тестирования станет обязательной.
Для групп, разрабатывающих стратегию автоматизированного тестирования
мобильных приложений, ключевыми являются три вопроса:
1. Как реализовать эффективную автоматизацию тестирования для множества
устройств?
2. Как реализовать эффективную автоматизацию, требующую минимальных
изменений для конкретной версии?
3. Как реализовать полную автоматизацию тестирования?
Ответы на эти вопросы определяют уровень эффективности тестирования и
полноту покрытия, которой может достичь проект.
Автоматизация тестирования для стратегии mobile-first
Автоматизация тестирования внутренне присуща стратегии mobile-first. Группы
тестирования мобильных приложений обычно используют гибкие методики, такие как
управляемое тестированием проектирование. Поэтому ожидается увеличения числа
компаний, автоматизирующих тестирование для создания качественного продукта с
самого начала. Чем больше групп гибкой разработки подключается к созданию
мобильных приложений, тем сильнее размывается граница между тестировщиком и
разработчиком. Теперь за качество приложения отвечает вся группа, а не один
назначенный тестировщик.
Тестирование в реальных условиях
ITW-тестирование (тестирование в реальных условиях) – это привлечение
профессиональных тестировщиков к тестированию приложения в реальных сценариях и
средах. Такое тестирование выполняется на реальных устройствах, чтобы гарантировать
ожидаемое поведение приложения в различных условиях. ITW-тестирование отличается
от тестирования в идеальных лабораторных условиях. Его выполняют реальные
пользователи, представляющие целевой рынок приложения и пытающиеся определить
соответствие приложения заявленному стандарту качества.
ITW-тестирование дополняет тестирование в лабораторных условиях. Оно
особенно полезно для проверки интерфейса приложения с привлечением локализованных
сервисов и реальных пользователей целевого рынка. В идеале ITW-тесты интегрируются в
процессы управления жизненным циклом приложения и встраиваются в корпоративные
системы мониторинга ошибок.
8 Заключение
Тестирование мобильных приложений и управление качеством представляют и
будут представлять проблему для организаций, которые хотят непрерывно выпускать
высококачественные мобильные приложения. Появились три дополнительных фактора,
влияющих на тестирование мобильных приложений:
1. Внедрение автоматизации тестирования в жизненный цикл DevOps в рамках
конвейера выпуск-поставка.
2. Уменьшение фрагментации путем улучшения стандартизации безопасности,
разработки и других факторов. (Это знакомо фирмам, которые помнят прежние
времена тестирования ПО для Интернета.)
3. Адаптация приложений, созданных для мобильных устройств, к развивающимся
средам Интернета вещей, таким как автомобили, телевизоры и холодильники.
Обеспечение качества и тестирование мобильных приложений находятся на
передовом рубеже ИТ-отрасли и остаются постоянной проблемой в условиях, когда
организации стремятся выпускать мобильные приложения максимально возможного
качества, привлекающие и восхищающие пользователей, оптимизирующие доступ к
серверным системам и обеспечивающие ожидаемый уровень безопасности.
Семинарское занятие 6. Мобильные приложения, разработанные для продажи в App
Store
Цель семинарского занятия: Обсудить вопросы приобретения на рынке мобильных
приложений.
План семинарского занятия:
1. Цена
2. Платформы
3. Жанр
4. Периодическое деление на группы
Содержание семинарского занятия:
Единственным способом приобретения мобильных программ для таких устройств,
как iPhone, iPod или iPad, является их покупка в App Store. Учитывая огромное количество
приложений, целесообразным является их классификация по различным основаниям.
Так, на мой взгляд, можно выделить следующие критерии для их категоризации:
Цена
Платные приложения
Бесплатные приложения
Так, согласно компании App of the Day 67% всех приложений в App store являются
платными, а значит, направлены на получение прибыли как разработчиками, так и самой
компанией. При этом цена половины приложений для iPhone находится в диапазоне 0,99 -
2,99$. И только 1% приложений продается по цене более 24,99$.
Из-за этого можно сделать вывод, что большинство покупателей склоны
приобретать программы по наименьшей цене, поэтому и производители вынуждены
соответствовать их ожиданиям. Однако некоторые производители следуют другой
стратегии. Так, например, в августе 2008 года была выпущена программа «I am rich» (Я
богат) по цене 999,99$. При этом данная программа не предоставляла своим обладателям
каких-либо уникальных функциональных возможностей, кроме как картинки в виде
красного драгоценного камня и песни со словами: «Я богат. Я заслужил это. Я хороший,
здоровый и успешный». Несмотря на то, что данная программа тут же была замечена,
купить ее согласились лишь несколько человек. После чего она была удалена из-за
магазина по просьбе множества покупателей.
Большинство же брендов, выпуская свои приложения, стремятся сделать их
бесплатными или продают по минимальной цене, для того, чтобы охватить больший круг
клиентов.
Платформа
Приложения для iPhone
Приложения для iPad
Универсальные приложения
Компаниям, выпускающим свои приложения, необходимо ориентироваться и на то
устройство, для которого они собираются разрабатывать свою программу. Так как доля
обладателей iPhone сегодня превышает долю владельцев iPad, то и приложений сейчас для
них намного больше (85%). Хотя это во много связано с тем, что планшетный компьютер
iPad был выпущен позже. Кроме того, пользователи плеера iPod используют приложения,
предназначенные также и для iPhone, поэтому не выделяются отдельно.
Различия между данными платформами заключаются не только в их технических
характеристиках, но и в том, что больший экран iPad требует более тщательной
разработки программ, а значит и средняя цена приложений для iPad часто превышают
среднюю цену для iPhone. Кроме того, более высокая цена самого планшетного
компьютера iPad говорит о том, что им обладают более состоятельные люди. А значит,
стоит не забывать об этом факторе при разработке и продвижении приложений.
Жанр
На сегодняшний день в магазине App Store представлены приложения по
следующим жанрам:
1) Книги (Books)
2) Бизнес (Business)
3) Образование (Education)
4) Развлечения (Entertainment)
5) Финансы (Finance)
6) Игры (Games)
7) Здравоохранение и фитнес (Healthcare & Fitness)
8) Стиль жизни (Lifestyle)
9) Медицина (Medical)
10) Музыка (Musiс)
11) Навигация (Navigation)
12) Новости (News)
13) Фотография (Photography)
14) Производительность (Productivity)
15) Словари, справочники (Reference)
16) Социальные сети (Social Networking)
17) Спорт (Sports)
18) Путешествия (Travel)
19) Утилиты (Utilities)
20) Погода (Weather)
Больше всего в онлайн - магазине представлены игры различной направленности, а
также книги. Затем следует сфера развлечений. Популярность данных жанров отражает
тот факт, что большинство пользователей использует свои девайсы именно для
развлечений. В свою очередь и компании стараются обращать внимание именно на эти
сферы при разработке приложений для своих брендов.
Более того, еще одним основанием для классификации приложений выступает то
периодическое деление на группы, которое предлагает сама компания Apple. Так, в App
Store программы объединяются в различные группы на такие темы, как, например:
Лучшие приложения для детей
Приложения, чтобы удивить своих друзей
Приложения, чтобы контролировать ваш мир
Приложения для вашего утра, дня и ночи
Модные приложения
Ретро игры
И многие другие
А также особое место занимает группа Staff Favorites – лучшие приложения, по
мнению сотрудников.
Стоит заметить, что данный критерий не является строгим основанием для
категоризации. Однако примечательным является именно то, что данные группы
выступают в качестве инструмента продвижения приложений в онлайн - магазине. Так как
в самом App Store возможности рекламы ограничены, то попадание в подобный список
значительно увеличивает вероятность приложения по завоеванию большего количества
пользователей. Но, появляется вопрос: как попасть в такую группу?
Очевидно, компания не предоставляет открытых сведений о том, как она отбирает
программы. Но все же можно отметить тот факт что, чтобы попасть в данный список
нужно, чтобы приложение было замечено; а еще лучше, чтобы оно попало в ТОП 25
лучших программ.
Сегодня в магазине App Store можно ознакомиться с тремя списками наиболее
популярных и скачиваемых приложений, которые постоянно обновляются.
1. Топ бесплатных приложений (Top free)
2. Топ платных приложений (Top paid)
3. Топ наиболее развивающихся приложений (Top grossing)
Более того, на основании этих списков, Apple выпускает и рейтинг лучших
приложений для iPhone и iPad за год
Что же означает для приложения попадание в ТОП?
Это значит, что данная программа была куплена и скачена наибольше количество
раз, что она имеет положительный рейтинг и получила одобрение пользователей.
Так, по различным оценкам, чтобы попасть в Топ 25 лучших программ,
необходимо, чтобы программа была скачена пользователями около 10 000 раз за день.
Чтобы попасть в Топ 10 – около 20 000 раз .
Кроме того, каждый владелец мобильной продукции Apple может в любое время
оценить выбранное приложение от 1 до 5 звездочек, а также оставить свой отзыв. При
этом мнение, которое высказывается пользователями, высоко ценится разработчиками
приложений, так как данная обратная связь является наиболее правдивым источником
информации о данной программе. На основании отзывов разработчики определяют свои
ошибки или недочеты и в дальнейшем прилагают усилия по выпуску обновлений для
приложений.
В результате, от обратной связи выигрывают обе стороны. Так, разработчики
узнают о своих промахах и получают представление о том, чего же хотят от них клиенты.
А значит, и обретают возможность завоевать их большее количество. Пользователи же
iPhone, iPod и iPad получают более качественные приложения, отвечающие их
потребностям и вкусам.
При этом, очевидно и то, что сами пользователи ведут себя весьма капризно и
могут вовсе не обратить внимание на программу, не говоря уже о написании о ней отзыва.
Следовательно, появляется актуальный вопрос: что же нужно для успешного приложения?
Семинарское занятие 7. Факторы успеха в продвижении мобильного приложения
Цель семинарского занятия: Обсудить основные факторы успеха в продвижении
мобильного приложения на рынке мобильных приложений примере Angry Birds.
План семинарского занятия:
1. Введение
2. Факторы успеха Angry Birds?
3. Как сделать так, чтобы приложение было успешным и не потерялось среди других?
Содержание семинарского занятия:
1 Введение
Впервые приложение Angry Birds (варианты перевода: Злые Птицы, Сердитые
Пернатые)было разработано и представлено в App Store в конце прошлого года.
Разработчик: Rovio (Финляндия). Дата выхода: Декабрь 2009. Цена: Версия для iPhone –
0,99$, iPad – 4,99$, Lite - версия – бесплатно.За это время игра достигла неимоверного
успеха и попала в ТОП приложений для iPhone и iPad. Впоследствии Angry Birds была
выпущена и для других платформ и сегодня продается в Android Market, Ovi Store и на
других крупнейших площадках. При этом популярность игры с каждым днем только
продолжает набирать обороты. Так, как сообщает телеканал CNBC, игру скачали уже
более 150 миллионов раз, к тому же каждый день пользователи тратят на Angry Birds
более 200 миллионов минут.
Стоит заметить, что сюжет данной игры неимоверно прост и состоит в сражении
птиц со свиньями. Вражда начинается тогда, когда злые поросята пытаются украсть у
птиц их яйца, из-за чего последние вступают в ожесточенную борьбу. Игроку же
предлагается, используя катапульту, выстреливать птицами в направлении защитных
сооружений, построенных вокруг свиней, чтобы их всех уничтожить. При этом
существует 8 типов пернатых – каждая птица со своими особенностями и спецэффектами.
2 Каковы же факторы успеха Angry Birds?
Стоит отметить, что эта игра стала одной из первых, специально разработанных
для тачскринов, и ее успех во многом определялся ростом их популярности во всем мире.
Однако очевидно, что одного этого недостаточно. На мой взгляд, основой успеха стало
удачное сочетание, как самих характеристик игры, так и продуманного использования PR-
технологий.
1) Сюжет и персонажи
Неординарный, как и сами персонажи игры, но в целом простой сюжет,
несомненно, привлекает аудиторию разного возраста и пола.
2) Качественные характеристики
Игра обладает отлично прорисованной графикой, красочностью представления,
веселой музыкой и немного комичным озвучиванием, которое неизменно поднимает
настроение.
3) Доступность
Как заявил специалист службы информации компании Rovio Вилле Хейяри:
«Любой человек может играть в нее и быстро выучить все правила. В игре присутствуют
неординарные персонажи и хорошая механика, которая позволяет получать удовольствие
и от самого игрового процесса» . Сама же игра предполагает использование игроком
определенных навыков и логического мышления.
4) Lite – версия
Сокращенная версия, или как ее еще называют лайт - версия, является отличным
способом продвижения игры. Ее главный смысл состоит в ознакомлении с приложением с
целью дальнейшей возможной покупки полной версии. Так, пользователю предлагается
пройти пару пробных уровней, которые должны его заинтересовать. Затем же
предлагается купить полную версию, ориентируясь на то, что игрок захочет
воспользоваться всеми предлагаемыми функциями приложения. Такая приманка является
эффективным рекламным методом, потому как позволяет привлечь и «затянуть»
потребителя, а также сформировать у него положительное восприятие.
5) Постоянные обновления и новые функции
Разработчики Angry Birds постоянно предлагают обновления для своих
пользователей, что позволяет им поддерживать их интерес. Так, например, в 2010 году
была выпущена новая версия игры в связи с празднованием Хэллоуина – Angry Birds
Halloween Edition. А к наступлению нового 2011 года компания подготовила зимнюю
версию Angry Birds Seasons.
Данные обновления включают в себя не только праздничную музыку и новые наряды
персонажей, а также и свежие функции. Например, с 1 по 25 декабря 2010 года в игре
Angry Birds Seasons предлагалось 25 новых уровней. Причем, открывать каждый из них
можно было лишь в соответствующий день. Так, 1-го декабря при соединении с Интернет
был доступен первый уровень, 2-го – второй, и так далее. В последний же день - 25-го
декабря - когда большинство стран празднует католическое Рождество, предполагался
подарок.
Таким образом, компания предложила своим игрокам провести с любимой игрой 25
рождественских дней, существенно повысив лояльность своих клиентов.
6) Поддержка различных платформ
Как уже было замечено, игра продается в различных онлайн – магазинах
приложений и доступна сегодня для скачивания на многие устройства, среди которых есть
даже Nintendo DS (игровая консоль). При этом в ближайшем будущем планируется, что
Angry Birds появится на таких популярных игровых приставках, как Microsoft Xbox 360,
Sony PlayStation 3 и Nintendo Wii. Таким образом, игра Angry Birds может стать
законодателем новой тенденции, когда игры со смартфонов начнут переноситься на
игровые приставки.
7) Поддержка в социальных сетях
Значительная часть инвестиции компании Rovio сегодня направлена на разработку
приложения для Facebook . Не остается без внимания и другая крупная социальная сеть –
Twitter. Так, в блоге компании (http://twitter.com/roviomobile) публикуются последние
новости, связанные с Angry Birds. Это говорит о том, что компании сегодня не могут
оставить без внимания влияние социальных сетей. Поэтому и разработчик Angry Birds
использует данные площадки для продвижения своей продукции.
8) «Больше, чем просто игра»
Наконец, игра уже давно вышла за рамки традиционного приложения, создав
вокруг себя уникальный мир. Так Вилле Хейяри утверждает: «В мире «Angry Birds» есть
масса возможностей для различных новых сюжетов и впечатлений. Текущее содержание
игры – это лишь малая часть огромного мира, который может открыться позднее».
Популярность игры сегодня настолько велика, что вокруг нее строится целая
индустрия. Так, например, компания разработчик игры Rovio совсем недавно стала
выпускать игрушки, прототипом которых являются главные персонажи Angry Birds. При
этом компания не собирается на этом останавливаться и уже сейчас проводятся
переговоры с представителями различных областей рынка. В рамках возможного
сотрудничества рассматривается и такой гигант по производству игрушек, как фирма
«Lego» .
Более того, в сети Интернет ходит много слухов о том, что компания планирует
сделать полнометражный фильм по мотивам игры и ведет переговоры с несколькими
киностудиями. Данная новость была опубликована даже на сайте такого популярного
мужского журнала, как GQ . А это говорит о том, что игра уже давно вышла за рамки он-
лайн магазина и начинает влиять на образ жизни людей. Подтверждением этого является
заявление многих фанатов Angry Birds о том, что речь идет уже не просто об игре, а о
целом явлении. И этому явлению подвержены как обычные граждане, так и, например,
высокопоставленные политики. Одним из них является премьер – министр
Великобритании Дэвид Кэмерон, который по слухам прошел все уровни игры на своем
планшете iPad . Остается только догадываться, кто из российских чиновников подвержен
влиянию Angry Birds.
В любом случае, слухи являются одной из тех PR – технологий, которые успешно
применяются при продвижении игры Angry Birds.
Еще одним интересным фактом является то, что компании Rovio удалось создать
настолько благоприятную среду для успеха своей организации, что дальнейшим
продвижением занимаются уже сами фанаты приложения. Например, выпускаются
различные иллюстрации и мультфильмы по мотивам игры. Популярность Angry Birds не
осталась не замеченной и на телевидении. Так, израильское комедийное шоу Eretz
Nehederet обыграло Angry Birds в своей передаче. По сюжету в ней птицы и свиньи
встречаются у адвоката, который пробует уговорить их заключить мир, но в итоге
персонажи все равно переходят к своему обычному способу выяснения отношений .
Таким образом, пример Angry Birds показывает, что простое приложение может
выйти за рамки мобильного устройства и создать вокруг себя уникальный мир на основе
эффективных коммуникаций со своими клиентами.
Опыт Angry Birds несомненно должен быть учтен и другими приложениями.
Однако игровая направленность Angry Birds не отражает всех тех факторов, которые
необходимы для успеха любой другой мобильной программы в целом. Поэтому в
дополнение я бы хотел привести те условия, которые, на мой взгляд, также влияют на
популярность приложений и их продвижение.
Как сделать так, чтобы приложение было успешным и не потерялось среди других?
На данный счет многие эксперты приводят различные точки зрения. Я же хочу
привести сочетание тех факторов, которые, на мой взгляд, являются залогом успеха
мобильного приложения.
1) Характеристики самой программы
Внешний вид и привлекательность
Несомненно, как часто бывает в жизни, первое впечатление складывается по
внешнему виду. Так и в приложениях. Например, яркость самой иконки программы может
привлечь или оттолкнуть покупателя. Поэтому разработчикам необходимо ответить на
следующие вопросы:
a. Насколько привлекательным является дизайн приложения?
b. Какие чувства может вызвать программа?
Контент и его актуальность
Очевидно, что содержание программы является именно тем, что она из себя
представляет. Поэтому важно сделать контент наиболее привлекательным и
своевременным для покупателя. Кроме того, приложение должно быть актуальным.
Особенно это важно для мобильных приложений, так как соединение с Интернет
позволяет владельцам смартфонов всегда находиться в центре событий. Поэтому и
приложения должны отвечать их запросам. Необходимо ответить на следующие вопросы:
a. Насколько актуальной является предоставляемая в приложении информация?
b. Как долго данное приложение может быть интересным для покупателя?
c. Как часто возможны обновления программы?
d. Может ли изменяться контент с участием пользователей?
Уникальность и востребованность
Учитывая огромное количество приложений в магазине, программе важно суметь
не потеряться среди них. Необходимо понять, что же действительно хочет покупатель и
как его можно заинтересовать. Потому что в магазине может быть тысяча приложений
про футбол, но именно ваше приложение должно предлагать какие-либо уникальные
возможности.
a. Решает ли приложение какую-либо уникальную проблему?
b. Является ли приложение инновационным или значительно превосходящим другие
программы?
c. Отвечает ли оно конкретным потребительским запросам?
Функциональность
Будучи одной из самых важных характеристик, функциональность приложения
позволяет потребителям быстро и качественно решать различные задачи. Поэтому важно
ответить на такие вопросы как:
a. Какими функциями обладает приложения и насколько они полезны для
пользователей?
b. Предлагает ли приложение такие функции, которыми не обладает другие
устройства?
c. Насколько быстро и просто управлять программой и ориентироваться в ней?
2) Сопутствующие факторы
Отзывы и рейтинг
О том, как необходима обратная связь с покупателями уже было описано выше.
Поэтому компаниям - разработчикам важно не забывать о покупателях своих приложений
и налаживать с ними эффективные коммуникации. Стоит также отметить, что были
случаи, когда некоторые компании, осознавая важность мнения своих покупателей,
прибегали и к нечестным способам. Так, например, PR - компания Reverb Communications,
которая представляет различных производителей мобильных игр, нанимала людей,
которые писали положительные отзывы о заявленных приложениях . Таким образом,
многие велись на то, что о программе хорошо отзываются, и покупали ее. Поэтому
данный метод работал очень эффективно. Однако необходимо понимать, что данная
техника является весьма рискованной, и может существенно навредить репутации, если
откроется такая «накрутка голосов». Ну и в целом, это не соответствует этическим
стандартам, но тут уже «как на войне».
Кроме того, зачастую сами компании просят в своей программе оставить о них
положительный отзыв. Так, на экране смартфона появляется всплывающее окно, нажатие
на которое ведет на страницу данной программы в App Store. В некоторых случаях за это
предлагаются бонусы в виде дополнительных функций.
Качественный релиз
Чтобы покупатели не ориентировались на одни только отзывы необходимо предоставить
описание программы (лучше на нескольких иностранных языках, чтобы завоевать
большую аудиторию), а также добавить интересные скриншоты приложения. При этом
само описание должно быть максимально интересным и лаконичным, чтобы до
пользователя дошел нужный посыл. Еще одним способом, пусть и более дорогим,
является выпуск тематического сайта, посвященного приложению с обязательной ссылкой
на скачивание. Данный метод является весьма эффективным.
Приложение как часть комплексной стратегии
Если программа вовлечена в интегрированную стратегию кампании, то она
обретает намного больше шансов на успешное продвижение. Примером может быть
компания Yahoo!, которая рекламирует свои мобильные приложения при помощи игр.
Так, компании объединила ряд своих приложений в их единую рекламную кампанию. В ее
рамках Yahoo! разработала образцы игровых терминалов с тачскрином, которые появятся
на автобусных остановках в Сан-Франциско . Новая кампания Yahoo Bus Stop Derby будет
рекламировать приложения Yahoo Mail, Messenger, Flickr и новый новостной виджет
Sportacular для мобильных. Среди игр присутствуют элементы функциональности
сервисов Yahoo!: Yahoo! IM рекламируется при помощи тренажера скорости печати
«Chatter Scatter», игра «Snap-Happy» является трехмерным паззлом и рекламирует
фотохостинг Yahoo’s Flickr, Yahoo Mail рекламируется в игре «Incoming!», в которой
необходимо отсортировать почту на скорость. Срок проведения кампании: 22 ноября - 28
января 2011 года. При этом Bus Stop Derby является частью более широкой рекламной
кампании «It’s Y!ou», которая была начата в сентябре 2011 года.
Реклама
Качественная реклама является одним из залогов успешного продвижения
продукции. Однако данный канал коммуникаций имеет свои особенности в сфере
мобильных приложений. Наиболее популярным видом рекламы в рамках магазина App
Store является баннерная. Так, баннеры используются почти в каждой бесплатной
приложении. При этом баннеры могут быть подготовлены сторонними компаниями,
такими как, например, AdMob, которая занимается мобильной рекламой, так и самими
разработчиками приложения.
Удачным примером в данной случае является приложение Tap Tap компании
Tapulous. Кроме того, что уже сегодня в серию Tap Tap входит более 20 игр, компания
постоянно выпускает для них обновления.
При этом, так как большинство приложений компании является платным, Tapulous
активно рекламирует новые версии в своих же играх. Также она заключает контракты с
музыкальными исполнителями, которые в качестве промо предоставляют для игры свои
композиции. Например, к новогодним праздникам группа Train выпустила при поддержке
Coca-Cola свой сингл Shake up Christmas. Пользователям же игры Tap Tap Revenge 4
предлагается проиграть данную композицию бесплатно. На мой взгляд, данная
комплексная реклама является примером успешного продвижения как музыкальной
группы, так компании Coca-Cola и Tapulous.
Еще одной возможностью создания рекламы а рамках App Store является
использование системы iAd, которая была разработана компанией Apple в 2010 году.
Распространение рекламы через данный сервис способствует интеграции рекламы в
приложения, которые продаются через магазин App Store.
Также, часто в целях продвижения приложений, встречается и такая технология,
как product placement, которая сейчас активно используется в различных играх. Например,
в игре iSlots, представляющей собой эмулятор однорукого бандита, находится бегущая
строка, которая ненавязчиво сообщает «Ознакомтесь с остальныи моими приложениями в
App Store». При этом пользователь не сразу воспринимает данное сообщение в качестве
рекламы, что является весьма эффективным способом продвижения.
Итак, рассмотренные выше факторы являются, на мой взгляд, теми необходимыми
условиями, которые будут способствовать эффективному продвижению мобильного
приложения. Успешная идея и реализация самой программы в совокупности с
продуманным применением различных PR-технологий является залогом ее популярности.
А за такое могут и премию дать. Например, Gettie Awards , которая присуждается по 16
номинациям наиболее успешным и инновационным приложениям в мире.
Семинарское занятие 8. Брендированные приложения
Цель семинарского занятия: Обсудить основные тренды на рынке мобильных
приложений.
План семинарского занятия:
1. Введение
2. Промо – приложения
3. Событийные приложения
4. Игры
5. Полезные приложения
6. Инновационные приложения
7. Люксовые приложения
8. Заключение
Содержание семинарского занятия:
1 Введение
Рынок мобильных приложений растет с каждым днем, что так же становится
понятным из рассмотренных выше примеров. И вместе с тем растут доходы, получаемые
от продажи мобильных программ. Так, по мнению редактора Men’s Health рынок
мобильных приложений превратится в «250-миллиардный бизнес к 2020 году». А значит,
и все больше компаний будут вовлечены в данную тенденцию. На сегодняшний же день
многие бренды используют платформы мобильных телефонов в качестве площадки для
продвижения своей продукции. Поэтому можно говорить о таком явлении как
«брендированные приложения».
Все больше и больше известных компаний выпускают брендированные
приложения. Более того, они становится темой для конференций по всему миру. Так, одна
из наиболее значимых, «Apps for Brands», прошла в Нью-Йорке 23 сентября 2009 года, на
которой и был сделан вывод: «Каждому бренду необходимо свое мобильное приложение.
И точка». Ведь приложения позволяют компаниям, как привлекать все больше новых
покупателей, так и повышать лояльность уже существующих. Особым преимуществом
брендированных приложений для компаний является то, что они в большинстве случаев
не рассматриваются пользователями смартфонов как реклама, а скорее как интересные
программы. Поэтому и завлекают владельцев мобильных устройств.
Кроме того, интеграция бренда в существующие мобильные приложения
происходит намного проще, чем запуск собственного приложения с нуля, так как
компания имеет возможность воздействовать на заранее известную аудиторию лояльных
пользователей.
Рассмотримь примеры брендированных приложений, в соответствии с
разработанной классификацией, которая, на мой взгляд, наиболее полно охватывает
данный вид мобильных программ.
2 Промо – приложения
Промо – приложения являются достаточно быстрой и недорогой рекламой для
многих компаний. Так, в большинстве случаев, они не предлагают своим пользователям
множество функций, однако несут в себя простую, но яркую идею, которая и привлекает
владельцев мобильных устройств.
Одним из первых подобное приложение выпустила компания Zippo - Virtual Zippo
Lighter - виртуальная зажигалка, имитирующая поведение настоящей, с возможностью
выбора дизайна зажигалки из коллекции. Более 9 месяцев программа находилась в Топ
лучших приложений в США и получила более 190 тысяч комментариев и обзоров.
Еще один пример - Magic Coke Bottle. Выпущенное компанией Coca-Cola
приложение содержит в себе бутылку, которая знает ответы на все вопросы. Необходимо
только встряхнуть ее вместе с телефоном и узнать свое будущее. Необычайно просто, но
привлекает внимание так, что хочется трясти ее все чаще и чаще.
AXE Muchas Maracas, как заявляет компания, - «первое в России брендированное
промо приложение для iPhone, созданное передать user experience в кампании AXE Hot
Fever» . Используя данное приложение как маракас (то есть опять предлагается потрясти
телефон), можно посмотреть на танцы зажигательных девушек. Данное бесплатное
приложение также попало в Топ.
Стоит еще отметить, что промо - приложения зачастую являются частью более
широкой рекламной кампании и направлены на привлечение к ней внимания. А так как
они не несут в себе много функций и больше направлены на развлечение, то производят
недолговечный эффект.
3 Событийные приложения
Приложение The Times Square Ball, выпущенное компанией Toshiba в преддверии
нового года, позволяет оказаться на Times Square в Нью-Йорке и увидеть традиционно
падающий шар. В программе предлагаются видео трансляции с площади, фотографии, а
также обратный отсчет до нового года. Кроме того, с помощью встроенных
картографических сервисов в мобильное устройство можно определить свое расстояние
до Times Square. Особенностью данной программы является то, что пользователи в
течение определенного времени могут прислать свои фотографии с вечеринок, после чего
лучшие из них, по итогам голосования, будут показаны на большом экране прямо на
знаменитой площади в Нью-Йорке.
Другими примерами событийных приложений могут выступать NBC Olympics
компании AT&T (по случаю Олимпиады в Ванкувере), Africa World Cup 2010 Live от
Hyundai (чемпионат мира по футболу в ЮАР) и многие многие другие. Остается только
ждать, что, несомненно, многие компании не упустят свой шанс.
4 Игры
Один из наиболее распространенных видов брендированных приложений, так как
сами игры занимают наибольшую долю в программах для мобильных устройств. Однако
тут возникают и свои затруднения: так как пользователи уже знакомы с мобильными
играми, то они точно знают, что хотят. Поэтому компаниям, чтобы получить одобрение,
приходится разрабатывать действительно качественные и интересные приложения. В
результате все большую популярность набирают игры, требующие более продвинутой
разработки и инвестиций, когда задействуются тачскрин, акселерометр и другие
возможности телефона.
Особой популярности в данной категории пользуются приложения автомобильных
компаний. Например, Volkswagen Scirocco R24H Challenge – гоночный симулятор.
Но случаются и неудачи. Так, например брендовая игра A4 Driving Challenge от
Audi получила много различных отзывов, самый популярный из которых звучал так: «Я
никогда не куплю Audi из-за этой игры». В результате, компании пришлось выпускать
обновление, но даже оно не смогло исправить ситуацию.
5 Полезные приложения
Полезные приложения также являются одним из наиболее распространенных видов
брендированных приложений и представляют собой долгосрочный инструмент влияния
на лояльность клиентов.
Мобильный интерфейс к сервису
Примеры: приложения для мобильных устройств USA Today, NY Times, CNN, Ebay
и другие. Информация, представленная в данных приложениях, соответствует той, что
присутствует на веб-сайтах.
Не отстают и такие российские медиа, как например, Коммерсант, Ведомости, РИА
Новости, журнал Максим, Championat.ru.
Рекламные каталоги
Данный вид приложений часто используется компаниями – производителями
одежды как, например, Hollister, A&F, Victoria’s Secret.
Интерфейс к невиртуальным сервисам
Программа Starbucks Card Mobile позволяет своим пользователям рассчитываться в
сети кофеен Старбакс с помощью мобильного телефона, а российская сеть ресторанов
Тануки предоставляет возможность онлайн-заказа суши через свое приложение для
iPhone.
Особое внимание среди полезных приложений заслуживает программа iFood
Assistant от Kraft. Данная программа содержит более 7000 рецептов и позволяет создавать
списки продуктов, которые нужно купить. Несмотря на то, что приложение платное и
стоит 0,99$, оно попало в Топ самых популярных программ. Программа настолько
нравилась пользователям, что получалось так, что они сами платили Kraft, чтобы он
прорекламировал им свой бренд.
6 Инновационные приложения
Данный вид предполагает использование инновационных технологий, таких как,
например, дополненная реальность (AR). Данная технология позволяет связать
оффлайновые и онлайновые коммуникации и увеличить уровень взаимодействия
аудитории с брендом.
Так, в данной технологии на товар помещается специальный маркер. А затем AR-
приложения дополняют реальную картину мира, взятую с камеры устройства, различными
данными, полученными с помощью GPS, компаса, интернет - соединения, акселерометра,
микрофона или самого телефона.
Пример приложений: Audi DE Augmented Reality Calendar, Puma Sneakers Attack, Mini
Getaway Stockholm.
7 Люксовые приложения
Мода сегодня тесно связана с высокими современными технологиями. Поэтому,
понимая необходимость идти в ногу со временем, все больше Модных Домов стали
выпускать свои собственные мобильные приложения. На сегодняшний день предлагаются
программы от Dolce&Gabbana, Chanel, Gucci, Louis Vuitton, Fendi, Hermes, Ralph Lauren и
многих других. В приложениях предлагается просматривать коллекции, совершать онлайн
покупки и быть в курсе последних новостей, связанных с брендом. При этом чтобы
выделиться, каждая компания предлагает различные возможности. Так, например,
благодаря приложению Gucci можно создавать музыку, запустив игру от Марка Ронсона.
Chanel предлагает подглядывать за моделями до того, как они выходят на подиум. В
приложении от Ralph Lauren находится интересное документальное видео.
Несмотря на то, что модные приложения занимают большую часть люксовых
приложений, не отстают и другие отрасли. Например, приложения от Porsche, Ferrari и
Mercedes (автомобили), Cartier (украшения), Longines и Pierre DeRouche (часы).
Таким образом, все больше и больше брендов используют мобильные приложения
для продвижения свое продукции. И, несомненно, эта тенденция будет только развиваться
в будущем.
8 Заключение
Сфера мобильных технологий глубоко проникла в нашу жизнь. И уже сложно
представить прожитый день без одного из технологических устройств. При этом
количество проданных девайсов с каждым днем только увеличивается. И многие из них
находят себе применение в самых различных сферах нашей жизни. Так, например,
продукция Apple активно используется в некоторых школах в Японии, а в одном из
ресторанов Сиднея приносят iPad вместо меню, практически заменяя им официантов.
Более того, музыкальная группа Gorillaz только что записала новый альбом, используя
планшетный компьютер корпорации Apple . Это говорит о том, что использование
технологий, находящихся на пике популярности сегодня, несомненно, помогает в
продвижении товаров или услуг.
Но что стоит тот же iPhone или iPad без приложений в нем? Практически ничего.
Именно поэтому, настолько актуальной сегодня является сфера мобильных приложений и
их продвижение. Превращаясь во много миллиардный бизнес, компании не могут не
следовать данной тенденции.
Однако без сомнения остается тот факт, что мобильные приложения сегодня не
могут пробиться и завоевать наибольшую популярность у потребителей на одной лишь
идее. Необходима грамотная реализация, а что еще более важно, продуманная стратегия
продвижения. Только с использованием в совокупности различных PR-технологий
мобильная программа может достичь настоящего успеха, как показал пример Angry Birds.
И даже для брендовых приложений пусть и является простым привлечение покупателей за
счет узнаваемости своего бренда, но удерживать их интерес они могут, только лишь
применяя грамотную стратегию.
Семинарское занятие 9. Наиболее популярные бизнес-модели для облачных сервисов
Цель семинарского занятия: Обсудить основные тренды на рынке мобильных
приложений.
План семинарского занятия:
1. Введение
2. SaaS - Software as a Service
3. DaaS - Desktop as a Service
4. IaaS - Infrastructure as a Service
5. PaaS - Platform as a Service
6. aPaaS - application Platform as a Service
7. DRaaS - Disaster Recovery-as-a-Service
8. Вопросы для самостоятельной работы:
Содержание семинарского занятия:
1 Введение
Начнѐм разбор с ситуации, когда компания производит какой-либо продукт, а
облачные технологии "зашиты" в еѐ технологии и бизнес-процессы изнутри, т.е. компания
является потребителем облачных услуг. Такая модель называется "Cloud-based".
Основные преимущества такой модели:
o Уменьшение операционных рисков. Вам не нужно беспокоиться о серверах,
инфраструктуре и программном обеспечении. За всѐ это отвечает провайдер услуг.
Такой подход хорош для малых и средних компаний, не имеющих своей IT-
инфраструктуры и специалистов.
o Снижение затрат. Вы не тратите деньги на лицензии настольного программного
обеспечения, на покупку серверов и найме обслуживающего персонала.
o Надежность. Уровень надежности современных облачных сервисов постоянно
улучшается. Малые компании не могут обеспечить такой же уровень своими
силами, а ответственность за надежность сервиса всегда прописана в Service Layer
Agreement - соглашении о правилах предоставления услуг.
o Гибкость. Использование облачных технологий позволяет вести бизнес из любой
точки земного шара. Также максимально упрощена процедура внедрения нового
ПО или сервиса, который необходим вашей компании, что даѐт преимущества в
конкурентной борьбе в условиях динамично изменяющегося рынка.
o Инновации. Множество появившихся облачных сервисов позволяют вам креативно
подойти к собственной бизнес-модели и создать что-то совсем новое.
o Безопасность. Работа в облаке позволяет снизить затраты на безопасность, при том
что еѐ уровень будет выше, чем при традиционном варианте развития бизнеса.
o Улучшенное взаимодействие. Работа в облаке позволяет быстрее и проще
обмениваться информацией внутри команды или даже одновременно работать над
одним документом/проектом, даже если члены команды находятся в разных
странах.
Хотя всѐ не настолько просто. Cloud-based имеет и свои недостатки. Как правило,
противники облаков выделяют их из списка, приведенного выше, просто поставив
впереди знак "-". Такая позиция имеет право на жизнь в силу ряда причин:
o Начальная сложность перехода от традиционной инфраструктуры в облака.
o Не всем бизнесам хватает уровня "кастомизации" облачных сервисов (вплоть до
отсутствия одной конкретной функции, которая нужна именно вашему бизнесу).
o С одной стороны, зависимость от организации - провайдера услуг, а с другой -
необходимость в постоянном хорошем интернет-подключении.
o Производительность ПО в облаке отличается от аналогичного настольного ПО, и
не всегда в лучшую сторону.
Облачные технологии являются логичным продолжением развития IT-отрасли, но
переходить на облачные сервисы или нет - решать вам. Вопрос, скорее всего, ставится так
– когда переходить на облачные сервисы. Если вы пока не готовы к полноценному
переходу на облачные сервисы, вы можете попробовать с простых сервисов на основе
облачных технологий, которые уже хорошо себя зарекомендовали:
o Google Docs и MS Office 365 - коллаборации при работе с документами; MS
OneDrive, Google Drive, Box, Dropbox - для хранения и совместного доступа к
данным.
o MS OneDrive, Google Drive, Box, Dropbox - для хранения и совместного доступа к
данным.
o Windows Azure и Amazon Web Service - для разработки и выполнения приложений
в облаке.
Теперь мы рассмотрим бизнес-модели, в которых облачные технологии являются
непосредственно частью продукта.
2 SaaS - Software as a Service
Первая из облачных моделей. Эта модель доставки ПО, в которой приложение
размещается у провайдера или третьей стороны и становится доступным клиентам по
подписке. Клиенты SaaS используют выполняемое в инфраструктуре провайдера ПО на
основе оплаты текущих расходов. Вносить предоплату не требуется, поэтому клиент
может не заключать какие-либо долгосрочные контракты.
В модели SaaS:
o приложение приспособлено для удаленного использования;
o одним приложением пользуется несколько клиентов (приложение коммунально);
o оплата взимается либо в виде ежемесячной абонентской платы, либо на основе
объѐма операций;
o техническая поддержка приложения включена в оплату;
o модернизация и обновление приложения происходит оперативно и прозрачно для
клиентов.
3 DaaS - Desktop as a Service
Модель распространения и эксплуатации программного обеспечения, получившая
известность в начале 2000-х годов и являющаяся логическим продолжением SaaS.
В этой модели потребитель платит за мобильный доступ к рабочему столу с любой
платформы, включая мобильные устройства и планшетные компьютеры, а также через
любой браузер. Ещѐ раз подчеркнѐм, что пользователь получает не конкретное
приложение, а полностью готовое рабочее место с необходимым набором ПО.
4 IaaS - Infrastructure as a Service
IaaS - это предоставление компьютерной инфраструктуры (как правило, в форме
виртуализации) как услуги на основе концепции облачных вычислений. Можно считать
IaaS аналогом традиционного хостинга, где компания использует размещенную среду как
логическое расширение своего информационного центра. Серверы (физические и
виртуальные) арендуются по мере необходимости, а ИТ-специалисты, управляющие
инфраструктурой, имеют полный контроль над конфигурацией ПО. Контроль и
управление основной физической и виртуальной инфраструктурой облака, в том числе
сети, серверов, типов используемых операционных систем, систем хранения
осуществляется облачным провайдером. Некоторые провайдеры позволяют даже гибко
настраивать аппаратную конфигурацию, что приводит к удорожанию подобных сервисов.
5 PaaS - Platform as a Service
В данном случае потребителю предоставляется возможность использования
облачной инфраструктуры для размещения базового программного обеспечения для
последующего размещения на нѐм новых или существующих приложений (собственных,
разработанных на заказ или приобретѐнных тиражируемых приложений). В состав таких
платформ входят инструментальные средства создания, тестирования и выполнения
прикладного программного обеспечения — системы управления базами данных,
связующее программное обеспечение, среды исполнения языков программирования —
предоставляемые облачным провайдером.
Потребность в PaaS возникла из-за того, что многие компании используют не
стандартный софт (устаревший, специализированный, софт собственной разработки и
сделанный под заказ) и им требуются облака, чтобы использовать этот софт внутри
компании как SaaS.
Контроль и управление основной физической и виртуальной инфраструктурой
облака, в том числе сети, серверов, операционных систем, хранения в случае PaaS
осуществляется облачным провайдером, за исключением разработанных или
установленных приложений, а также, по возможности, параметров конфигурации среды
(платформы).
6 aPaaS - application Platform as a Service
Это подвид модели PaaS. В этом варианте потребитель получает доступ к
облачному сервису, который предоставляет разработчикам полноценную среду для
проектирования, создания и развертывания собственных облачных приложений и
сервисов. Очень часто в определении aPaaS подчеркивают, что такие сервисы
используются для развертывания бизнес-приложений. Следует также понимать, что в
большинстве случаев PaaS и aPaaS выступают как эквивалентные понятия.
7 DRaaS - Disaster Recovery-as-a-Service
Аварийное восстановление как услуга. Сбои в работе дата-центров, серверов,
облачных сервисов вполне возможны как по причинам техническим – такие регулярно
выводят из строя серверы Amazon S3, так и природным – цунами в Японии и ураган
"Сэнди". Компании, которые реализуют DRaaS, предлагают своим клиентам облачный
бекап их инфраструктуры. Схема действий при использовании DRaaS такова: клиент
регулярно платит установленную договором страховую премию, а поставщик
предоставляет мощности на временной основе, пока клиент восстанавливает основную
площадку после сбоя.
Многообразие облачных бизнес-моделей позволяет делать абсолютно разные
стартапы, которые сейчас очень популярны. Например, Seeneco — первый на российском
рынке разработчик программного обеспечения, реализовавший инновационную идею
предоставления услуг по подписке или, по модели SaaS, сервисов класса MIS:
стратегического и финансового планирования, а также бюджетирования и формирования
готовых форм управленческой отчѐтности.
Другим примером успешного облачного стартапа можно считать Netskope,
который получил $21 млн. инвестиций на развѐртывание системы, анализирующей
функционирование 2500 популярных облачных услуг, и на базе 30 критериев
предлагающей выбрать наиболее подходящий конкретной организации.
8 Вопросы для самостоятельной работы:
1. Опишите специфику бизнес-модели SaaS
2. Опишите специфику бизнес-модели PaaS
3. Опишите специфику бизнес-модели DaaS
4. Опишите специфику бизнес-модели IaaS?
5. Какие облачные стартапы вы знаете?
6. В чем заключаются плюсы и минусы использования облачных сервисов в бизнес-
процессах малой компании?
Семинарское занятие 10. Продвижение мобильных приложений и облачных сервисов
Цель семинарского занятия: Обсудить продвижение мобильных приложений и облачных
сервисов.
План семинарского занятия:
1. Введение
2. Продвижение мобильных приложений
3. Инструменты и методы продвижения
4. Вопросы для самостоятельной работы
Содержание семинарского занятия:
1 Введение
Говорить о продвижении мы начнем с облачных сервисов, потому что по сути
своей облачные сервисы являются привычными нам всем стартапами и их продвижение
укладывается в стандартную схему Customer Development, а именно:
a. Проверка гипотез о потребителях, проблеме и рынке.
b. Создание MVP. В случае B2B это будет презентация, в случае B2C - лэндинговая
(посадочная) страница (landing page).
c. Сбор статистики по метрикам.
d. Улучшение продукта.
e. Запуск полноценной рекламной компании. Может использоваться контекстная
реклама, SEO, SMM, публикации на специализированных форумах и тематических
ресурсах.
Рассмотрим пример продвижения облачного сервиса на примере Dropbox. Это
сервис, который позволяет вам хранить данные в Интернете, получая доступ к ним с
любого вашего устройства, причем визуально вы работаете с этим хранилищем, как с
обычной папкой в вашей операционной системе. Обратите внимание на лендинговую
страницу – ничего лишнего (см. рисунок 1).
Рис. 1. Лендинговая страница Dropbox
В 2006 году существовало множество компаний, которые предоставляли услуги
хранения данных в "облаках" в Интернете, но никто ими не пользовался, т.к. они были
ненадѐжны, сильно зависели от скорости подключения к Интернету, плохо работали с
большими файлами и имели неудобные интерфейсы. Всѐ это и подтолкнуло авторов
Dropbox к запуску стартапа Заметим, что проблема была очевидной, но только Dropbox
стал тем стартапом, который ее решил и добился успеха.
Между основателями проекта возник спор на тему, когда же стоит показать проект
публике. Основное опасение было связано с тем, что, если на ранней стадии проект не
встретится с потребителями, то есть вероятность сделать что-то, что никому не нужно.
Было решено не затягивать с первым контактом с аудиторией, и в апреле 2007 года на
сайте Hacker News (см. рисунок 2) был размещен трѐхминутный скринкаст проекта. Этот
скринкаст для Dropbox являлся MVP. Благодаря такому шагу проект получил быструю и
качественную обратную связь с потребителями.
Авторы проекта также сделали простую лендинговую страницу, на которой можно
было подписаться на новости развития проекта и получить информацию о запуске бета-
версии продукта. В марте 2008 года было выпущено видео частного бета-запуска
продукта, которое набрало более 12000 голосов на сайте Digg.com (см. рисунок 3). Это, в
свою очередь, увеличило список предварительно записавшихся на тестирование продукта
с 5 000 до 75 000 человек.
Рис. 2. Комментарии с сайта Hacker News по поводу Dropbox
В сентябре 2008 года состоялся запуск проекта. Руководители проекта решили
сделать ставку на контекстную рекламу, но цена привлеченного клиента в итоге оказалась
слишком высокой (233-388$ для продукта, который стоил 99$). Это шло вразрез с
маркетинговым планом компании. Нужно было что-то менять. Не стоит забывать, что все
это время аудитория проекта росла и за семь месяцев Dropbox набрал один миллион
пользователей. Тем не менее эта проблема – стоимость клиента – является типичной для
стартапа на ранней стадии.
Проблема заключалась в том, что использование классической рекламы в
Интернете (особенно это касается контекстной рекламы в поисковиках) очень хорошо
работает для продуктов, на которые уже существует спрос, но не для тех продуктов, спрос
на которые только предстояло создать. Была разработана новая маркетинговая стратегия,
опирающаяся на WoMM- принципы (Word of a Mouth Marketing, вирусный маркетинг,
"сарафанное радио") тем более, что проект уже испытывал WoM-эффект (вспомните
историю с размещением видеоролика и сайт Digg.com).
Рис. 3. 12 000 голосов для Dropbox на Digg.com
WoMM обладает рядом плюсов:
o относительная дешевизна;
o большой охват;
o доверие.
Самое важное в этом списке - это доверие. Оно возникает из-за того, что другу,
посоветовавшему вам что-то купить, нет смысла рекламировать какую-то конкретную
марку или продукт, он не получает за это денег. Таким рекомендациям больше всего
верят, вы знаете это на собственном примере. Другой плюс WoMM кроется в
человеческой психологии. Люди не любят принимать решения самостоятельно и брать на
себя ответственность. В ситуации, когда вам что-то советуют или рекомендуют знакомые,
подсознательно человек переносит ответственность за принятие этого решения на другого
и легко делает выбор.
При разработке WoM-компании следует учитывать пять важных параметров (5Т):
o Кто говорит (talkers)?
o Что говорит (topics)?
o Как говорит (tools)?
o Как мы принимаем участие (taking part)?
o Как отслеживаем эффективность (tracking)?
Итак, вернемся к Dropbox. Внимание! Последующие шаги кажутся очевидными, но
почему так мало начинающих предпринимателей это делает? Уже зарегистрировавшиеся
пользователи стали получать дополнительное пространство для хранения файлов, если
они приглашают друзей, а новые пользователи стали получать бонус в виде 5 $ на их
PayPal-счет. Эти акции позволили увеличить количество регистраций на 60%. За 30 дней в
апреле 2010 года пользователи проекта отправили 2 800 000 приглашений своим друзьям.
Таким образом, за счѐт рассылки приглашений и возможности поделиться файлами через
общие папки (Shared Folders, пользователь даѐт другому пользователю ссылку на свои
файлы в Dropbox) в январе 2010 года проект имел 4 000 000 пользователей. На данный
момент у Dropbox более 200 миллионов пользователей.
2 Продвижение мобильных приложений
Продвижение мобильных приложений отличается от продвижения обычных
программных продуктов, хотя и укладывается в обобщѐнную маркетинговую схему. В
основном различия обусловлены спецификой канала, а именно - спецификой работы
магазинов мобильных приложений.
В общем виде схема продвижения мобильных приложений выглядит так:
1. Подготовка приложения к публикации. У разных магазинов - разные требования.
Если у вас был опыт размещения приложений в AppStore, то это не значит, что в
WIndows Store вы сможете применить тот же алгоритм.
2. Внедрение кода аналитики. Метрики нужны везде и всегда, оценивая их, вы
сможете управлять процессом продвижения.
3. Создание бренда продукта: название, иконка, выбор категории размещения,
скриншоты, подбор ключевых слов, описание. Особенно стоит отметить иконку –
она должна нравиться. Пользователь должен захотеть еѐ нажать в магазине, а
потом и в своем телефоне.
4. Создание качественного промо-сайта или страницы.
5. Выбор внешнего канала продвижения. Об этом речь пойдет ниже.
6. Подготовка обзоров и пресс-релизов для тематических сайтов.
7. Продвижение через социальные сети.
8. Запуск контекстной рекламы.
9. Проведение кампании в сетях мобильной рекламы.
10. Анализ достигнутых результатов.
11. Отслеживание жизненного цикла приложения, мониторинг статистики.
12. Определение наиболее эффективных рекламных каналов и коррекция рекламной
компании.
3 Инструменты и методы продвижения
(по материалам http://smartr.ru/service/mobile/promo/ http://habrahabr.ru/company/
webprofessionals/ blog/131336/ )
Теперь рассмотрим подробнее выбор внешнего канала и методов продвижения.
Обзоры. Это один из самых эффективных методов. Публикация может быть как
платной, так и бесплатной. Существует множество сайтов, публикующих подобные
обзоры: mobigrad.org, iphones.ru, droider.ru, mobile-review.com, speedback.ru.
WoM-маркетинг и социальные сети. Социальные сети сейчас хорошо
интегрированы с мобильными телефонами. Люди любят делиться интересным
материалом с друзьями. Всегда добавляйте иконки "Поделиться" на вашу страничку или
сайт. Это поможет посетителям вашего ресурса делиться информацией с их друзьями или
коллегами с помощью Facebook, MySpace, Digg, Delicious, LinkedIn, TypePad, Blogger,
WordPress и т. д.
Создайте страницу своего приложения на Facebook или VK. Это бесплатно, она
будет доступна всем, будет индексироваться поисковыми системами и предоставлять
возможность ознакомиться с приложением.
Расскажите о приложении друзьям, коллегам, знакомым. Дайте им пачку визиток с
изображенным на них QR-кодом. Разошлите анонс приложения по всей своей адресной
книге. Просите друзей и знакомых сделать репост.
Рекламные сети мобильных приложений. Вспомните про рекламную модель.
Конечно, приложение хорошо рекламировать в другом приложении, т.к. это значит, что
вы обращаетесь к клиенту, который уже пользуется мобильными приложениями. Но не
забывайте, что сейчас очень трудно получить таргетированный трафик через мобильную
рекламу, и, условно говоря, реклама приложения для рыболовов может показываться в
приложении для вышивания крестиком (подумайте, почему?). Однако этот метод годится
для привлечения дополнительного траффика.
Традиционные методы продвижения в интернете. Люди по-прежнему
продолжают пользоваться обычным поиском. Так что свою кампанию по продвижению
подкрепите грамотным SEO, контекстной рекламой и рекламой в социальных сетях.
Взаимодействуйте с аудиторией. Участвуйте в дискуссиях, имеющих отношение
к вашему продукту. На Yahoo Answers, LinkedIn Answers и WikiAnswers общайтесь и
размещайте ссылки на страницы с описанием вашего приложения. В сегменте
российского интернета таким сайтом может выступать 4pda.ru.
Ценовая политика. Изменение ценовой политики может вывести вас в топ и
увеличить число пользователей.
Пример приложения "Peggle!": 11 июня они сбросили цену с 4,99$ до 0,99$ и к 16
июня достигли топа в AppStore. После чего продолжили продавать приложение по 4,99$!
QR код. Размещать их можно где угодно. Как правило, это промо-материалы:
визитки, стикеры, флаеры, футболки и пр. Не забудьте вставить QR-код в обзор.
После выбора каналов всѐ возвращается к стандартной схеме:
1. Формируем гипотезу.
2. Смотрим метрики.
3. Вносим изменения.
Основные метрики для мобильных приложений:
o Конверсия - сколько человек посмотрело рекламу, перешло на страницу в магазине
и сколько скачало? Совет: сейчас можно платить за рекламу в формате CPI - Cost
per Install, т.е. только за пользователей, которые установили ваше приложениеs.
o Оценки и отзывы в AppStore / Google Play / Windows Store и т.д.
o События внутри приложения. Помните: в схеме продвижения была информация о
пользе встраивания кода для аналитики? Этот код позволяет собирать статистику о
поведении пользователя, а именно:
ежедневное количество активных пользователей;
возвращаемость в приложение (retention). Если у вас показатель retention хотя
бы 30% — можете смело показывать этот график инвестору;
перемещение по всем экранам. Проливает свет на то, как вообще используют
ваше приложение;
количество покупок внутри приложения (по дате, по времени и т.д.);
время до первой покупки. Это нужно, чтобы понять, что сдерживает или
подталкивает пользователя к покупке;
Виральность. Сколько пользователей рассказали о вас друзьям.
4 Вопросы для самостоятельной работы:
1. Опишите общую схему продвижения IT-стартапа.
2. Чем отличается продвижение мобильных приложений от продвижений IT-продуктов?
Чем это обусловлено?
3. На какие метрики нужно обращать внимание при продвижении мобильных
приложений?
4. Что такое WoM-маркетинг?
5. Назовите факторы, которые помогли Dropbox добиться успеха.
Семинарское занятие 11. Примеры облачных сервисов Microsoft
Цель семинарского занятия: Ознакомиться с основными решениями "облачных" сервисов.
Понять принципы предоставления и использования "облачных" услуг.
План семинарского занятия:
1. Office Live Workspace
2. Web Apps
3. SkyDrive
4. Краткие итоги
Содержание семинарского занятия:
1 Office Live Workspace
Ресурсы интернета стали так же доступны, как и разделы жесткого диска.
Исключение составляет, пожалуй, лишь скорость обмена данными. В остальном, сегодня
можно смело хранить документы и запускать приложения из интернета. Все упирается не
в доступность, а в более осязаемые качества: удобство, безопасность, функциональность.
Они уже поддаются объективной оценке, чем мы и воспользуемся, на примере Microsoft
Office Live Workspace, представленного широкой публике 10 сентября 2008 года.
Данный сервис предназначается, в первую очередь, для тех пользователей, кто
работает за несколькими компьютерами. Наиболее очевидный способ обмена
документами - это использование какого-то компактного носителя, например, flash-карты.
Так многие и поступают, если есть домашний и рабочий компьютеры, и ноутбук в
придачу. Ситуация усугубляется, если ведется совместная работа над проектом. Два
студента пишут одну курсовую работу, фотограф и дизайнер готовят презентацию,
несколько менеджеров составляют прайс-лист фирмы. Общая папка в локальной сети или
пинг-понг по электронной почте - не самое рациональное решение проблемы. Во всех
описанных случаях, более оптимальный или, как еще можно выразиться, технологичный
вариант - это использование специального сетевого сервиса, который как раз и
предназначен, в первую очередь, для организации совместного доступа к документам.
Главное, иметь выход в интернет.
Перейдем к непосредственному знакомству с ресурсом.
Рис. 1. Стартовая страница Microsoft Office Live Workspace
Первое, с чего стоит начать рассказ о новом сервисе Microsoft, - он бесплатен, его
использование абсолютно свободно. Впрочем, компания, подарившая миру Windows,
разумеется, альтруизмом не страдает, и это нетрудно заметить, если проанализировать
остальные свойства сетевого продукта. Начнем с поддержки браузеров. Чтобы можно
было использовать бета-версию Microsoft Office Live Workspace, компьютер должен
удовлетворять одному из следующих условий:
o Установлен веб-браузер Microsoft Internet Explorer 6, 7 или 8 в операционной
системе Microsoft Windows XP, Windows Server 2003 или Windows Vista. Веб-
браузер Internet Explorer можно загрузить с веб-страницы Internet Explorer.
o Установлен веб-браузер Mozilla Firefox в операционной системе Windows XP,
Windows Server 2003, Windows Vista или Mac OS X 10.2.x (или более поздней
версии). Веб-браузер Firefox можно загрузить с веб-страницы загрузки Firefox.
o Установлен веб-браузер Safari 3 или 4 в операционной системе Mac OS X 10.2.x
(или более поздней версии).
При использовании других конфигураций, выводится сообщение о не
поддерживаемом продукте и рекомендуется загрузить Internet Explorer. И еще одно
требование - запуск сервиса исключительно из Windows XP или более поздних версий
системы. Здесь картина уже более-менее проясняется. Чтобы воспользоваться
преимуществами, даримыми Microsoft Office Live Workspace, надо, как минимум, купить
операционную систему от того же производителя. При использовании других
операционных систем и веб-браузеров, возможны проблемы с отображением и
функциональностью данного сервиса.
Рис. 2. Вход в Live Workspace
После первого старта сервиса открывается окно приглашения с кратким описанием
его возможностей. Перед началом работы можно ознакомиться со списком наиболее часто
задаваемых вопросов. Далее можно приступить к работе. Для этого необходимо нажать на
зеленую кнопку со стрелкой вправо.
Вход в систему осуществляется через Windows Live ID. При создании учетных
данных для идентификатора Windows Live ID можно использовать любой существующий
адрес электронной почты любого поставщика услуг электронной почты. Затем эти
учетные данные можно использовать для входа на любой веб-сайт Windows Live ID.
Дополнительную информацию по Live ID можно получить на сайте
http://www.microsoft.com/rus/liveid.
После того, как регистрация завершена, на электронный ящик должно прийти
письмо с подтверждением о регистрации учетной записи.
Перед началом работы с сервисом предлагается установить дополнение для
Microsoft Office версий XP, 2003 или 2007. Дополнение поставляется в виде исполняемого
модуля, размером около 800КБ. При запуске дополнения, установка проходит
автоматическом режиме. Отказ от использования дополнения для офисного пакета
означает потерю части интеграции с сервисом. После установки дополнения, в главном
меню офисного пакета появятся два новых пункта. Один из них позволяет загружать
документы с сервиса, а другой - напротив, сохранять их туда. Если ранее не была
произведена авторизация, то сначала будет предложено войти в Microsoft Office Live
Workspace. Перейдем к непосредственному знакомству с его главной страницей.
Рис. 3. Главная страница Microsoft Office Live Workspace
Загрузка страницы происходит относительно быстро. В левой боковой панели
отображается список рабочих областей, совместных и удаленных документов. В нижней
части панели всегда находится полезный совет по работе с сервисом. Если навести
указатель мыши на любую строку рабочей области, то через секунду появляется
всплывающее окно с выбором доступных операций.
Рис. 4. Высплывающее меню рабочей области
По каждому проекту выводится имя, владелец, текстовое описание и список
действий, наподобие открытия или переименования.
Основная часть страницы сервиса отводится под список документов текущего
проекта. Вы видите их названия, имя автора, дату последнего изменения, а также размер.
Значок в левой части списка говорит о типе файла.
Первый этап работы с сервисом - создание собственного проекта. Он может
состоять из нескольких документов, которым, в свою очередь, не обязательно быть
однотипными. Новая рабочая область может быть пустой, а также иметь вид некого
тематического шаблона.
Рис. 5. Создание нового проекта в Microsoft Office Live Workspace
Предлагается большое число готовых шаблонов. Здесь разработчики постарались
учесть большинство потребностей потенциальных пользователей и, как минимум,
упростить начало работы над проектами.
После создания новой рабочей области, на главной странице отображается некий
список документов. Авторство пока целиком и полностью принадлежит вам. Вы можете
изменить имя и добавить текстовое описание проекту. Сделать это очень просто. Поля
свободно редактируются, если щелкнуть по ним мышью. Можно создавать новый
документ или загрузить файл с локального диска.
Рис. 6. Диалог создания объектов
Теперь можно перейти к непосредственной работе с документами. Как было
сказано ранее, используя Internet Explorer, вы можете загружать файлы с локального
диска, просматривая их средствами online-сервиса.
Рис. 7. Открытие документа в Microsoft Office Live Workspace
Вы можете свободно просматривать офисные документы, используя Microsoft
Office Live Workspace, однако их редактирование из браузера невозможно.
Редактирование выполняется в приложениях Microsoft Office, установленных на
локальной машине.
Управление общим доступом осуществляется с помощью одноименной кнопки,
расположенной на панели инструментов справа от имени рабочей области и ее описания.
Вы можете добавлять пользователей в качестве наблюдателей и редакторов. В первом
случае открывается доступ только на чтение, во втором - имеется возможность
редактирования проектов.
Рис. 8. Управление общим доступом к документам Microsoft Office Live Workspace
Пользователи выбираются из адресной книги Windows Live. Также, Вы можете
вводить их электронные адреса вручную. Далее вводится текст сообщения, который будет
разослан адресатам. Всем участникам приходит уведомление, в том числе и Вам, как
администратору, приходит копия письма. Не только разрешение, но и запрет доступа
производится очень просто. Достаточно нажать на крестики напротив нежелательных
пользователей или просто воспользоваться кнопкой отмены общего доступа.
Рис. 9. Добавление пользователями заметок к рабочим областям Microsoft Office Live
Workspace
Каждый пользователь может оставлять свои комментарии к рабочим областям.
Комментарии можно создавать на правой боковой панели, либо в развернуто виде (см.
рисунок 9) Напротив каждого комментария отображается имя автора, дата/время создания
и, непосредственно, текст.
Вы можете создавать несколько версий одного документа для обеспечения
возможности быстрого возврата к предыдущим версиям. Версионность особенно
проявляется при многопользовательской работе. Работа с версиями не поддерживается
при работе со списками - специальным типом документов Microsoft Office Live Workspace.
Рис. 10. Управление версиями документа в Microsoft Office Live Workspace
Правая боковая панель может использоваться также для отображения журнала
действий пользователей, работающих над одним проектом в Microsoft Office Live
Workspace. Список можно разворачивать на всю web-страницу. Ссылки на документы
внутри списка обладают интерактивностью. Остальные пункты носят исключительно
информационный смысл. Выполнить откат на какое-либо действие нельзя.
Рис. 11. Список действий пользователей, работающих над одним проектом в Microsoft
Office Live Workspace
Как было сказано ранее, online-сервис тесно интегрирован с пакетом Microsoft
Office. Подразумевается, что пользователь будет работать над документом с помощью
локального приложения. Однако сервис все же имеет некоторые средства создания и
редактирования файлов, не выходя за его пределы, не пользуясь сторонними
инструментами. Предлагается два типа документов, которые можно редактировать прямо
в браузере. Первый их них основывается на списках.
Списки используются как основа для нескольких типов документов. Их в будущем
можно экспортировать в Outlook или в Excel в зависимости от конкретного содержания.
Вы создаете таблицу, для которой добавляются строки и столбцы. Столбцы имеют один из
пяти возможных типов: строка, текст из нескольких строк, число, да/нет и дата. В
зависимости от выбранного варианта, меняется метод ввода информации, а также
внешний вид ячейки. Например, дата указывается с помощью календаря. Если вы
попробуете ввести буквы в числовое поле, будет выведено сообщение об ошибке.
Вычислений между ячейками не предусмотрено. Большинство шаблонов содержат
несколько списков, например, расписание проекта, список участников, важные даты и
многое другое.
Рис. 12. Работа со списками в Microsoft Office Live Workspace
Второй инструмент предназначается для ведения заметок. Редактор поддерживает
сложное форматирование текста. Вы можете менять шрифт, его стиль, размер. Имеется
возможность выделения текста и фона разными цветами. Допускается добавление ссылок
в документы. В заметках можно применять нумерованные и маркированные списки.
Имеется возможность форматирования текста по левому и правому краю, а также по
центру.
Рис. 13. Работа с заметками в Microsoft Office Live Workspace
На этом возможности встроенного в Microsoft Office Live Workspace текстового
редактора заканчиваются. Отсутствует поддержка таблиц, проверки правописания, прочих
сервисных функций.
Microsoft Office Live Workspace стоит воспринимать как дополнение
функциональных возможностей Microsoft Office, связанное с обеспечением совместной
работы над документами.
2 Web Apps
Microsoft Word Web App
Благодаря приложению Microsoft Word Web App функции Microsoft Word теперь
доступны в браузере, что позволяет работать с документами прямо на веб-сайте, на
котором они хранятся. Приложение Word Web App входит в состав набора Office Web
Apps, который доступен через службу Windows Live, а также в организациях, в которых
приложения Office Web Apps настроены на сервере SharePoint 2010.
Предположим, вы создали документ в приложении Word и хотите опубликовать его
на веб-сайте, чтобы другие пользователи могли просматривать его или даже выводить на
печать. Кроме того, после публикации может выясниться, что в тексте есть опечатка,
которую требуется исправить. Было бы здорово, если бы это можно было сделать
непосредственно на веб-сайте. Все эти возможности теперь доступны благодаря
приложению Word Web App .
Чтобы приступить к использованию приложения Word Web App из Microsoft Word
2010, нужно просто сохранить документ в службе Windows Live SkyDrive или в
библиотеке SharePoint. Для этого откройте вкладку Файл и выберите команду Сохранить и
отправить, а затем — Сохранить на веб-сайте или Сохранить в SharePoint.
Рис. 14. Microsoft Word Web App
Теперь документ можно быстро просматривать и выводить на печать,
редактировать в браузере и открывать в приложении Word Приложение Word Web App
позволяет работать с документами, созданными в более ранних версиях Word. Для
достижения наилучшей совместимости загрузите пакет обеспечения совместимости для
форматов файлов Microsoft Office Word, Excel и PowerPoint 2007, а затем сохраните
необходимые файлы в формате Office Open XML. Сохраните или отправьте документ в
библиотеку SharePoint 2010 либо в службу SkyDrive.
Документы, хранящиеся в службе Windows Live или на сервере SharePoint,
открываются приложением Word Web App непосредственно в браузере. Их структура и
формат выглядят так же, как в режиме разметки в версии Word для настольных
компьютеров.
Рис. 15. Microsoft Word Web App
Если на компьютере не установлены компоненты Microsoft Silverlight 2 или более
поздней версии, приложение Word Web App отображает строку со ссылкой, позволяющей
загрузить и установить Silverlight. Наличие компонентов Silverlight не является
обязательным условием, однако если на компьютере установлена последняя версия
платформы Silverlight, документ отображается быстрее, а при увеличении выглядит более
качественно.
В режиме чтения можно просматривать документ постранично и переходить к
нужным страницам. Для этого введите номер страницы или воспользуйтесь кнопками
Предыдущая страница и Следующая страница.
Рис. 16. Microsoft Word Web App в режиме чтения
Чтобы приблизить документ или просмотреть на экране всю страницу,
воспользуйтесь командой Масштаб, которая позволяет увеличить или уменьшить
представление.
Кроме того, с помощью команды Найти можно искать в документах слова и фразы.
Результаты поиска при этом выделяются.
Рис. 17. Поиск в Microsoft Word Web App
Как и при работе с веб-страницей, текст в документе можно выделить, а затем
скопировать и вставить в другое приложение.
Приложение Word Web App выводит документ на печать в том виде, какой он
имеет в режиме чтения. Чтобы напечатать документ, в режиме чтения откройте вкладку
Файл и выберите команду Печать. Для вывода данных на печать из приложения Word Web
App необходимо средство просмотра PDF-файлов. Если оно не установлено, будет
предложено загрузить его.
Чтобы внести в документ изменения, нажмите кнопку Изменить в браузере. В
режиме правки можно добавлять и удалять содержимое, а также форматировать текст.
Режим правки оптимизирован для редактирования содержимого, а не для его просмотра. В
этом режиме разметка упрощена, а элементы, которые нельзя отобразить, показываются в
виде заполнителей. Заполнители помогают избежать случайного удаления содержимого
документа, которое можно отобразить, но нельзя изменять в приложении Word Web App .
Рис. 18. Правка текста в Microsoft Word Web App
В режиме правки текст можно вводить и форматировать обычным образом, в том
числе с помощью команд копирования, вставки, отмены и повтора. Отформатировать
текст можно с помощью стилей и команд форматирования, доступных на вкладке
Главная.
Кроме того, в документ можно добавлять изображения, картинки, таблицы и
гиперссылки. Картинки вставляются из коллекции изображений, доступных на веб-сайте
Office.com. Все эти объекты можно добавить на вкладке Вставка.
Чтобы увидеть, как будут выглядеть внесенные в документ изменения, откройте
вкладку Файл и нажмите кнопку Сохранить, после чего вернитесь в режим чтения (для
этого на вкладке Вид нажмите кнопку Режим чтения ).
Возможности редактирования в Word Web App идеально подходят для внесения
быстрых изменений, например исправления ошибок, добавления изображений и текста.
Чтобы получить доступ ко всем возможностям Word, откройте вкладку Файл и нажмите
кнопку Открыть в Word.
Word Web App откроет документ непосредственно в приложении Word для
настольных компьютеров, в котором доступны дополнительные функции (например,
возможности настроить стили документа, изменить объект SmartArt или добавить
колонтитулы). При нажатии кнопки Сохранить в приложении Word документ будет снова
сохранен на веб-сервере. Чтобы можно было использовать функцию "Открыть в Word"
приложения Word Web App , на компьютере должна быть установлена программа Word
2003 или более поздней версии (при работе с браузером Internet Explorer) либо Word 2010
(при работе с браузером Firefox).
Microsoft Excel Web App
Благодаря приложениям Microsoft Excel Web App функции Microsoft Excel теперь
доступны в браузере, что позволяет работать с книгами на том веб-сайте, на котором они
хранятся. Приложение Excel Web App входит в состав набора Office Web Apps, который
доступен через службу Windows Live, а также в организациях, в которых приложения
Office Web Apps настроены на сервере SharePoint 2010.
Предположим, вы создали книгу в приложении Excel и хотите опубликовать ее на
веб-сайте, чтобы другие пользователи могли поработать с данными в ней или даже внести
в них свои изменения. Возможно, вам потребуется работать с ней совместно с
пользователем, на компьютере которого установлена другая версия Excel. Было бы
неплохо, если бы можно было все сделать непосредственно на веб-сайте. Теперь это
возможно благодаря приложению Excel Web App.
Чтобы приступить к использованию приложения Excel Web App из Microsoft Excel
2010, нужно просто сохранить книгу в службе Windows Live SkyDrive или библиотеке
SharePoint. Для этого откройте вкладку Файл и выберите команду Сохранить и отправить,
а затем — Сохранить на веб-сайте или Сохранить в SharePoint.
Рис. 19. Меню Файл Microsoft Excel Web App
Теперь книгу можно просматривать и редактировать в браузере или открывать в
приложении Excel. Приложение Excel Web App позволяет работать с книгами,
созданными в более ранних версиях Excel. Для достижения наилучшей совместимости
загрузите пакет обеспечения совместимости для форматов файлов Microsoft Office Word,
Excel и PowerPoint 2007, а затем сохраните необходимые файлы в формате Office Open
XML. Сохраните или отправьте книгу в библиотеку SharePoint 2010 либо в службу
SkyDrive.
Книги, хранящиеся в службе Windows Live или на сервере SharePoint, открываются
приложением Excel Web App в браузере, в котором можно просматривать их, сортировать
и фильтровать данные, разворачивать и сворачивать сводные таблицы и даже выполнять
перерасчет значений.
Рис. 20. Microsoft Excel Web App.
Кроме того, с помощью команды Найти можно искать в книгах слова и фразы. Как
и при работе с веб-страницей, содержимое листа можно выделить, а затем скопировать и
вставить в другое приложение.
Чтобы внести в книгу изменения, нажмите кнопку Изменить в браузере. После
этого можно вводить в книгу данные, добавлять и изменять формулы и применять
основные виды форматирования.
Рис. 21. Меню Файл Microsoft Excel Web App
В режиме правки текст можно вводить и форматировать обычным образом, в том
числе с помощью команд вырезания, копирования, вставки, отмены и повтора. Чтобы
добавить формулу, перейдите в соответствующую ячейку и введите знак равенства (=), а
затем — нужную формулу или функцию.
Кроме того, с помощью вкладки Вставка в книгу можно добавлять таблицы и
гиперссылки.
Приложение Excel Web App автоматически сохраняет книгу по мере работы с ней,
поэтому сохранять изменения вручную не требуется. Отменить нежелательные изменения
можно с помощью команды Отменить или клавиш CTRL+Z.
Предоставив к книге доступ для редактирования другим пользователям, над ней
можно будет работать одновременно с друзьями и коллегами. Эта возможность
пригодится для сбора сведений от группы пользователей, например при составлении
списка сведений или разработке группового проекта. Благодаря этому больше не нужно
пересылать книгу друг другу по электронной почте или ждать, пока коллега вернет ее на
сервер.
В режиме редактирования в приложении Excel Web App отображаются сведения о
других пользователях, работающих с этой книгой. Сохраните книгу на веб-сайте,
доступном для других пользователей, например в библиотеке SharePoint или папке в
службе SkyDrive.
В SharePoint скопируйте веб-адрес книги из браузера (выделите его и нажмите
клавиши CTRL+C) и вставьте его в сообщение с помощью клавиш CTRL+V.
В службе Windows Live в приложении Excel Web App откройте вкладку Файл и
выберите пункт Общий доступ. Добавьте пользователей, которым необходимо
предоставить доступ к этой книге, нажмите кнопку Сохранить и создайте сообщение.
Откройте книгу для редактирования в приложении Excel Web App. Сведения о
других пользователях, работающих с ней, появятся в строке состояния.
Рис. 22. Сведения о пользователях Microsoft Excel Web App
Возможности редактирования Excel Web App идеально подходят для быстрого
внесения изменений и совместной работы. Чтобы получить доступ ко всем возможностям
Excel, откройте вкладку Файл и нажмите кнопку Открыть в Excel.
Excel Web App откроет книгу непосредственно в приложении Excel для настольных
компьютеров, в котором доступны дополнительные функции (например, возможность
настроить параметры диаграммы или сводной таблицы). При нажатии кнопки Сохранить в
Excel книга будет снова сохранена на веб-сервере. Чтобы можно было использовать
функцию "Открыть в Excel" приложения Excel Web App, на компьютере должна быть
установлена программа Excel 2003 или более поздней версии (при работе с браузером
Internet Explorer) либо Excel 2010 (при работе с браузером Firefox).
3 SkyDrive
Ежедневно у тысяч интернет-пользователей возникают специфические
потребности, для удовлетворения которых не подойдут ни домашний ПК, ни ноутбук.
Смартфоны и КПК также останутся за бортом, если потребность возникла не в чем-
нибудь, а в онлайн-хранилище данных. Всегда есть файлы, потребность в которых может
проявиться как дома, так и на работе — начиная от документации, статей и исходного
кода вдруг понадобившегося скрипта до материалов по истории городов и
достопримечательностей, а также туристических маршрутов.
Все эти и многие другие данные могут понадобиться как в офисе, так и в местах,
удаленных от дома на достаточно большое расстояние. В первом случае решением
проблемы может послужить синхронизация домашнего и офисного компьютеров, что,
кстати, не гарантирует отсутствие головной боли в будущем. Во втором случае требуется
удаленное хранилище файлов с веб-интерфейсом и прямыми ссылками на скачивание
файлов. Также не лишней будет возможность создавать свою структуру файлов на
удаленном сервере, управлять доступом к своим файлам и защищать их от
несанкционированного доступа. Естественно, все эти услуги должны быть бесплатными.
Одним из подобных интрнет-сервисов является продукт от Microsoft под названием
SkyDrive.
Интернет-сервис SkyDrive был представлен корпорацией Microsoft в августе 2007
года. Основное назначение SkyDrive — хранение на серверах Microsoft, подключенных к
Интернету, различной пользовательской информации (рабочие файлы, графика, видео и
прочие цифровые данные). На сегодняшний день сервис позволяет пользоваться пятью
связанными аккаунтами по 25 Гб дискового пространства на каждом, прямыми ссылками,
гибкой системой привилегий и многим другим.
Чтобы начать использовать сервис SkyDrive, достаточно перейти на веб-узел
Windows Live SkyDrive и зарегистрироваться в системе. Регистрация состоит в получении
идентификатора Windows Live ID — учетная запись для всех сервисов Microsoft. Если
есть учетная запись Hotmail, Messenger или Xbox LIVE, ее можно использовать в качестве
идентификатора Windows Live ID. Если же ее нет — следует приготовиться к длительной
и неизбежной нервотрепке. Первый подводный камень поджидает пользователя именно на
этапе регистрации. В ходе эксперимента, длившегося три дня, делались упорные попытки
зарегистрироваться на SkyDrive. Неизменно появлялось сообщение вида: "Достигнуто
максимальное количество идентификаторов Windows Live ID, которые можно создать за
сутки. Подождите сутки и попытайтесь выполнить регистрацию еще раз или обратитесь в
службу технической поддержки для получения помощи".
После перехода по ссылке, ведущей в теплые объятия техподдержки,
русскоязычный пользователь окажется на странице, где ему вежливо сообщат, что
поддержка данного продукта производится более чем на 10 языках. Русского языка в
списке нет, как нет и украинского и некоторых других — так что с техподдержкой
придется общаться на английском. Наиболее принципиальных пользователей Рунета такое
отношение может оттолкнуть от SkyDrive.
На данный момент сервис предлагает онлайн-хранилище размером 25 Гб
Сервис предлагает онлайн-хранилище достаточно большого объема. Даже по
современным меркам 25 Гб — весомая цифра. Стоит отметить, что во время бета-
тестирования сервиса онлайн-диск имел размер всего 1 Гб. Впоследствии объем хранимой
информации вырос сначала до 5 Гб, а потом еще в пять раз больше — до 25 Гб. Особо
порадовала возможность создавать как приватные и публичные (видят все) папки, так и с
ограниченным доступом для отдельных пользователей Live.
С помощью средств SkyDrive можно создать три различных типа папок, доступ к
которым осуществляется через Интернет (эти папки хранятся на сервере, управляемом
корпорацией Microsoft):
o персональные папки, к которым имеет доступ только их создатель;
o общие папки с ограниченным доступом, назначаемым их создателем для
определенных лиц, которым предоставляются файлы;
o общие папки с неограниченным доступом, которые может открыть через Интернет
любой желающий.
Добавление файлов осуществляется через веб-интрефейс. Необходимо выбрать
папку и нажать кнопку "Добавить файлы". Затем найти файл, который требуется
сохранить в системе SkyDrive, и нажать кнопку "Открыть". Для загрузки более пяти
файлов целесообразно воспользоваться специальным средством загрузки ActiveX. Чтобы
установить элемент управления ActiveX, нужно выбрать команду "Установить средство
загрузки". Это средство позволит перетаскивать файлы непосредственно в систему
SkyDrive. После завершения добавления файлов следует нажать кнопку "Загрузить".
После регистрации предоставляются следующие возможности:
Осуществление доступа к бесплатному хранилищу объемом 25 Гб с любого
компьютера, подключенного к Интернету, или с любого мобильного устройства с
поддержкой веб-доступа. При помощи дополнительной программы можно даже
перетаскивать файлы непосредственно с компьютера в службу SkyDrive. Наличие данного
приложения обеспечивает удобную загрузку и синхронизацию файлов на сервер.
Некоторые не приемлют вездесущий веб-интрефейс и предпочитают пользоваться
привычными win-оболочками.
Бесплатность. На сегодняшний день практически все сервисы подобного типа в той
или иной мере бесплатны, лишь некоторые прибегают к услугам микроплатежей за
расширение функционала. Тем не менее в век капитализма и мирового финансового
кризиса отсутствие какой-либо платы за подобный сервис можно смело отнести к
достоинствам.
Собственная структура папок. Хранение любых типов файлов. Возможность
связывания аккаунтов. Прямые ссылки на папки.
Таким образом хранить можно файлы любого формата. Для фотографий
предусмотрен простейший сервис просмотра с присвоением привилегий различным
категориям пользователей — владелец файлов сам выбирает, что хранить и кому
позволить это смотреть. Загрузка файлов осуществляется с помощью веб-интерфейса или
специальных программ, позволяющих прикреплять онлайновое хранилище в качестве
виртуального диска в файловой системе. Здесь стоит отметить, что подобная опция будет
крайне полезна счастливым обладателям широкого и безлимитного интернет-канала.
MS SkyDrive позволяет иметь до пяти связанных аккаунтов, что в сумме дает 125
Гб
Также MS SkyDrive позволяет объединять до пяти аккаунтов — связанные
аккаунты, переход между которыми осуществляется в несколько нажатий мышью. На
каждом аккаунте по 25 Гб дискового пространства, что в сумме составляет 125 Гб.
Внушительная цифра, которая меркнет перед теми усилиями, через которые придется
пройти для регистрации хотя бы одного аккаунта, не говоря уже о пяти.
И, наконец, ссылки. У каждой папки в службе SkyDrive есть свой веб-адрес,
который можно отправить в сообщении электронной почты, вставить в документ,
добавить в избранное, сохранить как ярлык, что, согласитесь, очень удобно.
Многообразие возможностей, свалившееся на бедного пользователя, немного
ошеломляет. Неясно, как все это следует применять в жизни: на отдыхе, в пути и в
бизнесе. Еще совсем недавно максимум, который был доступен пользователям, — это
хранилища типа Depositfiles и Rapidshare.
MS SkyDrive предоставляет намного более широкие возможности, чем просто
скачать что-либо по прямой ссылке. Например, имеет место использование двух и более
компьютеров (на работе и дома) — это не проблема, после сохранения файлов в личной
папке в SkyDrive доступ к ним будет только у вас.
Возникло желание обменяться нужными файлами с друзьями, коллегами,
одноклассниками — стоит только разместить их в общей папке и открыть доступ нужной
категории пользователей. Причем они смогут не только просматривать, но и добавлять к
ним свои файлы.
Сервис, по словам разработчиков, представляет собой удобный инструмент для
работы с данными в пути. Раньше при необходимости работать с файлами на чужом
компьютере требовалось сохранить эти файлы на какой-либо накопитель: дискета, USB-
накопитель. Если же собственного компьютера не было — данный носитель был
единственным хранилищем копий важных документов, хранилищем, к слову, не самым
надежным. Создание службы Windows Live SkyDrive — большой шаг на пути к решению
этой проблемы. Эта служба — своего рода USB-накопитель в Интернете.
Решение хранить важную информацию в SkyDrive позволяет воспользоваться
такими преимуществами, как:
o данные, хранящиеся в SkyDrive, значительно более устойчивы перед
повреждениями, чем физический носитель, который можно забыть, потерять,
поломать;
o данные, сохраненные в SkyDrive, доступны владельцу в любое время и в любом
месте, где есть доступ в Интернет.
Осуществляется простой доступ к данным и, как следствие, простота работы с
ними как дома, так и на работе, не нося их повсюду. В систему можно войти из интернет-
кафе, библиотеки или компьютера друга и начать работать с файлами. Если требуется
взаимодействовать с конкретным человеком, например партнером по бизнесу, можно
создать специальную папку для двоих, чтобы затем обмениваться файлам. Для получения
доступа к файлам партнеру понадобятся всего лишь права на доступ к ним или
идентификатор Windows Live.
В общем и целом, несмотря на некоторые недостатки, сервис от Microsoft на
сегодняшний день является оптимальным в сфере онлайн-хранилищ данных. Учитывая
размах, с которым Google подходит к реализации своих проектов, следует ожидать
впечатляющих возможностей. Конкуренция же между гигантами пойдет только на пользу
простым пользователям.
Office 365
19 октября 2010 года (Редмонд, США) Microsoft анонсировала Office 365 – пакет
услуг нового поколения, объединяющий самые современные решения для эффективной
работы и взаимодействия в сфере облачных вычислений: Office, SharePoint, Exchange и
Lync. Благодаря Office 365 многие организации во всѐм мире получат удобный и
экономичный доступ к передовым технологиям, автоматически обновляемым по мере
выхода новых продуктов и их версий. Кроме того, с этого дня 1000 компаний в 13 странах
начали бета-тестирование сервиса Office 365
4 Краткие итоги
В ходе семинара мы рассмотрели несколько наиболее ярких примеров облачных
сервисов. Количество данных сервисов увеличивается постоянно. Все больше идей и
стартапов реализуется именно в "облаках". Все это свидетельствует о популярности
данных технологий.
Семинарское занятие 12. Office 365
Цель семинарского занятия: Ознакомиться с основными решениями "облачных" сервисов
Office 365.
План семинарского занятия:
1. Введение.
2. Microsoft Office Professional Plus 2010
3. Microsoft Exchange Server (Exchange Online)
4. Microsoft SharePoint Server (SharePoint Online)
5. Microsoft Lync Server (Lync Online)
6. Публичный веб-сайт предприятия
7. Интеграция с мобильными устройствами
8. Итоги по функциональности
9. Преимущества для бизнес-пользователей
10. Как это работает
11. Управление сервисом
12. Платформа для разработки
13. Заключение
Содержание семинарского занятия:
1 Введение
Microsoft Office 365 — это пакет офисных облачных сервисов, с каждой новой
версией которого появляется всѐ больше инструментов. . В ней доступны электронная
почта, документы, контакты, календарь и Office Web Apps (Word, Excel и
PowerPoint).Сейчас Office 365, помимо перечисленных инструментов, предлагает
функциональность OneNote, Outlook, Publisher, Access, а для бизнес-редакций также
открыты InfoPath и Skype для бизнеса.
Кроме этого, пакет оснащѐн Office Delve. Оно умеет выполнять сквозной поиск и
сортировку информации на почте, в OneDrive для бизнеса, SharePoint и др. Редакции для
бизнеса способны расширить наполнение пакета многочисленными мобильными
приложениями и возможностью установки классического набора на Windows. Все
дополнительные возможности нацелены на улучшение эффективности работы компании.
Преимущества работы с Office 365 для малых предприятий:
Опция совместной работы (от 1 до 10 сотрудников).
Простая служба в целом, а также быстрый запуск и настройка для мгновенного
начала работы.
Доступ к Lync с функцией запуска видео-конференций. Поддержка HD-видео.
Удалѐнный доступ к архиву почты, календарю и контактам, за это отвечает
приложение Outlook.
Органайзер со всеми инструментами планировщика.
Облачное хранилище с довольно большим объѐмом памяти.
Актуальные и регулярные обновления для корпоративного сервиса.
Каждый пользователь может работать с пакетом на пяти устройствах;
Полноценный движок для реализации и поддержки корпоративного ресурса, с
пакетом шаблонов и интеграцией с социальными сервисами.
Совместная работа в режиме реального времени над документами, которые
хранятся в Box, ShareFile, Dropbox и Egnute.
Каждый из элементов пакета уже известен своими навыками: Word создан для
редактирования текстов, Excel — таблиц, Outlook — для работы с почтой, OneNote —
создания и сортировки заметок, PowerPoint — составления презентаций, Publisher —
создания дизайна публикаций и форм для маркетинговых кампаний.
Итак, что же получает сотрудник компании, которая подписалась на сервис Office
365?
2 Microsoft Office Professional Plus 2010
В зависимости от выбранного тарифного плана стоимость подписки может
включать в себя лицензию (право использования) хорошо знакомого многим
пользователям пакета Microsoft Office в редакции, включающей Word, Excel, PowerPoint,
OneNote, Outlook, Publisher, Access, InfoPath, SharePoint Workspace и Lync. Дистрибутив
для установки размером около 640МБ скачивается с портала самообслуживания сервиса.
За умеренную абонентскую плату предприятие получает возможность легально
пользоваться Microsoft Office, причем последней версии и в максимальной редакции. И
делать это гибко: в случае необходимости расширения штата сотрудников количество
подписок увеличивается, сокращения штата — соответственно уменьшается. Необходимо
отметить, что, существующая в настоящее время стандартная политика корпоративного
лицензирования Microsoft не предусматривает аналогичной возможности гибко
обращаться с приобретенными лицензиями. Например, у предприятия нет возможности
«передать» (продать) приобретенную весьма дорогостоящую лицензию другому
юридическому лицу. А в условиях российских реалий такая потребность могла возникать
довольно часто, например, в связи с передачей каких-либо бизнес-функций между
подразделениями холдинга, представляющими собой отдельные юридические лица, и
соответствующим перемещением единиц штатного расписания.
По отношению к облачному сервису Office 365 пакет Microsoft Office Professional
Plus 2010 является набором клиентских приложений. Код этих приложений исполняется
на локальном ПК, и поэтому по отношению к сервису Office 365 их можно назвать
«толстыми» клиентами, или настольными клиентами.
Про знакомую большинству пользователей функциональность приложений,
входящих в пакет, сказано и написано достаточно, повторяться смысла не вижу; далее
будем останавливаться только на той функциональности, которая связана с работой
приложений в качестве клиентов сервиса Office 365.
Рис. 1. Настольный клиент Microsoft Word 2010, в котором открыт файл, расположенный в
библиотеке SharePoint Online (см. ниже) сервиса Office 365
3 Microsoft Exchange Server (Exchange Online)
Благодаря наличию в составе сервиса Office 365 продукта Exchange Online
пользователи получают возможность работы с электронной почтой корпоративного
класса, со «встроенной» защитой от спама и вирусов. Exchange Online — это облачная
версия давно существующего на рынке продукта Microsoft Exchange Server,
функциональность которого отнюдь не ограничивается только электронной почтой:
пользователи получают возможность централизованного хранения своей контактной
информации (адресная книга компании при этом сформируется автоматически), могут
управлять своим графиком посредством календарей и задач.
Настольным клиентом для Exchange Online является Microsoft Outlook.
Рис. 2. Настольный клиент Microsoft Outlook 2010. Работа с корпоративным ящиком
электронной почты, расположенным в инфраструктуре сервиса Office 365. Видны зеленые
индикаторы присутствия и пиктограммы с фотографиями отправителей письма
Рис. 3. Настольный клиент Microsoft Outlook 2010. Одновременно открыты персональный
календарь мероприятий и календарь мероприятий рабочей группы, хранящийся на сайте
SharePoint Online сервиса Office 365
У Exchange Online есть также и онлайновый (тонкий) клиент — Outlook Web App,
доступный из браузера и, соответственно, не требующий установки на ПК. Интерфейс
пользователя Outlook Web App максимально приближен к настольному варианту Outlook,
доступен практически весь функционал, включая щелчки правой кнопкой мышки.
Рис. 4. Outlook Web App в браузере. В правой части – письмо с приглашением на веб-
конференцию Lync
4 Microsoft SharePoint Server (SharePoint Online)
SharePoint Online — облачная версия серверного продукта Microsoft SharePoint
Server, предназначенного для организации совместной работы сотрудников предприятия,
централизованного интеллектуального хранения документов, поддержки их
одновременного редактирования, управления проектами и многих других функций.
Остановимся подробнее на функциональности этого компонента сервиса Office
365, как, на наш взгляд, наименее знакомого потенциальным пользователям сервиса из
секторов малого и персонального бизнеса.
Для хранения документов на сайтах SharePoint служат так называемые библиотеки.
Документ в библиотеку может быть помещен несколькими способами: из специального
меню настольного клиента Word 2010, загружен с жесткого диска нажатием на ссылку
«Add document» сайта или переписыванием файла в Проводнике Windows, поскольку
любая библиотека SharePoint может быть открыта в Проводнике Windows как сетевая
папка.
Рис. 5. Библиотека документов SharePoint сервиса Office 365, открытая в браузере
В чем же преимущество хранения документов в библиотеках SharePoint по
отношению к широко распространенной модели хранения файлов в сетевых папках? Во-
первых — это исключение конфликтных с точки зрения содержимого файлов ситуаций,
когда один документ редактируется двумя пользователями независимо друг от друга. В
случае, если документ «извлечен» пользователем из библиотеки SharePoint для
редактирования, другие пользователи в это время изменить его не смогут. Всегда видно,
кем именно извлечен документ.
Во-вторых — это поддержка версионирования. Библиотека SharePoint может быть
настроена таким образом, чтобы хранить все версии документов от момента их создания.
Причем любую промежуточную версию можно открыть, узнать, кто является автором
изменений и когда они были внесены. Можно даже сравнить две версии документа.
В-третьих — это поддержка возможности одновременного редактирования
документов. В частности, например, возможно одновременное редактирование одного
документа Word двумя или более пользователями. Абзац, над которым работает один
пользователь, закрепляется за ним и другие пользователи изменения в него вносить не
могут. (Блокирование в Excel осуществляется на уровне ячеек.) Во время такого
редактирования пользователи могут поддерживать между собой связь посредством
обмена мгновенными сообщениями, голосом или видео за счет наличия в составе службы
Office 365 компонента Lync Online (см. ниже).
Рис. 6. Настольный клиент Microsoft Word 2010. Виден список пользователей,
одновременно редактирующих один документ, хранящийся в библиотеке сайта SharePoint
Online сервиса Office 365
В-четвертых — это возможность организации полнотекстового поиска по
содержимому документов. Введя в окно поиска сайта SharePoint Online часть слова, в
результатах поиска будут присутствовать все документы, в содержимом которых
встретилось такое сочетание букв. Это позволяет эффективно управлять накопленной в
компании информацией, находящейся в документах Microsoft Office. Каждый новый
документ будет дополнять базу знаний предприятия.
В состав SharePoint Online входит также набор приложений Office Web Apps — это
тонкие клиенты для работы с файлами Word, Excel, PowerPoint и OneNote. Тонкие
клиенты исполняются в браузере, соответственно, не требуют установки на ПК, и
реализуют наиболее востребованные пользователями функции своих настольных
аналогов. В качестве браузеров для Office Web Apps поддерживаются Internet Explorer,
FireFox, Safari и Chrome (подробные технические требования см. ниже).
С помощью Office Web Apps можно как просматривать документы Office, так и
редактировать их прямо в браузере. Нужно отметить, что Office Web Apps хорошо
справляются с довольно сложным форматированием, и только чрезвычайные ухищрения
будут отображаться приближенно. Для открытия файла в Office Web Apps достаточно
щелкнуть мышкой на ссылку на соответствующий файл в библиотеке.
Рис. 7. Документ Microsoft Word, открытый для просмотра в тонком клиенте Word Web
App. Довольно сложное форматирование отображается корректно
С использованием Office 365 можно перестать пересылать файлы как вложения в
письма электронной почты, а высылать только ссылки на документы, находящиеся в
библиотеке SharePoint. Таким образом, достигается сокращение объема информации,
пересылаемой по электронной почте, поддерживается одна актуальная версия документа,
хранящаяся централизованно, а также нет нужды беспокоиться о том, установлена ли у
получателя последняя версия нужного приложения Microsoft Office — Office Web Apps
помогут открыть документ в любом браузере.
Также возможно и оффлайновое редактирование файлов. Приложение Microsoft
SharePoint Workspace, входящее в Microsoft Office Professional Plus, прозрачно для
пользователя управляет локальной копией документов библиотек, синхронизируя
измененные документы, когда появляется подключение к Интернету, и, соответственно, к
сервису Office 365.
Рис. 8. SharePoint Workplace
На сайт SharePoint сервиса Office 365 можно выгрузить базу данных Microsoft
Access, что позволяет иметь доступную через веб-интерфейс единственную актуальную
копию небольшой базы данных, достаточную, например, для ведения складского учета
небольшого предприятия.
Рис. 9. Опубликованная на сайте SharePoint Online база данных Microsoft Access
Опубликованная таким образом база данных автоматически синхронизируется с
локальной копией, хранящейся на ПК пользователя.
Библиотеки сайта SharePoint Online сервиса Office 365 могут быть
сконфигурированы для поддержки механизмов оповещений и бизнес-процессов.
В частности, при помощи механизма оповещений подписавшиеся пользователи
могут по электронной почте получать письма при добавлении или изменении документов
в интересующей их библиотеке, что позволяет всегда оставаться в курсе изменения
документов, по которым в настоящее время ведется активная совместная работа или
наоборот, редко изменяемых, но важных в деятельности компании документов —
различных положений и регламентов. При этом сотрудник, внесший изменения или
опубликовавший новый документ, освобождается от обязанности оповещать
заинтересованных лиц — SharePoint Online сделает эту работу за него.
Механизм бизнес-процессов позволяет автоматизировать типовые процессы
прохождения документов внутри предприятия. Например, в редакции компьютерного
издания после подготовки материалов автором должно состояться утверждение
редактором, а потом постановка материала в очередь на публикацию. В данном случае
бизнес-процесс имеет очевидные шаги, которые могут быть настроены в SharePoint Online
сервиса Office 365. После помещения документа в библиотеку бизнес-процесс
автоматически запустится, и редактор получит по электронной почте уведомление о
новом материале, нуждающемся в его рассмотрении. После просмотра материала в Word
или Word Web App редактор может либо одобрить документ, либо отклонить его с
комментарием. Автор в любом случае получит соответствующее оповещение по
электронной почте. После утверждения материала редактором оповещение получит
ответственный за дальнейшие действия сотрудник и так далее до окончания бизнес-
процесса. На сайте всегда доступна информация о том, на какой стадии находится тот или
иной стартовавший бизнес-процесс, что позволяет держать ситуацию под контролем.
Механизмы бизнес-процессов в Office 365 могут настраиваться достаточно гибко.
В системе уже есть ряд предварительно сконфигурированных бизнес-процессов, и
утверждение документов — один из них. В случае необходимости изменить бизнес-
процесс или построить свой собственный, доступны несколько инструментов: простую
настройку можно выполнить напрямую в SharePoint Online, более сложные операции — в
специализированном ПО SharePoint Designer (распространяется бесплатно) и Microsoft
Visio.
В SharePoint Online доступны функции управления проектами. Например, может
быть создан список, содержащий перечисление задач, выполняющихся участниками
рабочей группы проекта. Такой список визуально может быть отображен в виде
диаграммы Ганта. При назначении задачи ответственному лицу по электронной почте
будет направляться соответствующее уведомление. Также уведомление будет
направляться всем подписавшимся при любом изменении этой задачи: сроки, содержание,
состояние; за счет чего проектная команда всегда находится в курсе выполнения проекта.
На сайте SharePoint Online может быть размещен календарь рабочей группы
проекта, включающий даты совещаний, доступ к которому может быть получен и из
настольного клиента Outlook и из тонкого клиента Outlook Web Access. Сами совещания
могут проводиться в онлайне за счет интеграции с Lync Online.
5 Microsoft Lync Server (Lync Online)
Этот компонент сервиса Office 365 отвечает за коммуникации между
пользователями. Собственно, Lync Online — это облачная реализация сервера
унифицированных коммуникаций Microsoft Lync Server 2010. Как и всякий продукт,
претендующий на реализацию концепции унифицированных коммуникаций, Lync
рассматривает в качестве основного абонентского терминала коммуникаций
персональный компьютер пользователя.
Клиентское приложение Lync Client реализует контактоориентированный
пользовательский интерфейс, в котором сразу видны индикаторы присутствия других
пользователей, и из которого, используя одни и те же простые приемы, можно начать
сеанс обмена мгновенными сообщениями, голосовой звонок, видео- или веб-
конференцию. В процессе общения можно добавлять участников, сменить аналоговое
устройство — например, переключить звонок на bluetooth-гарнитуру.
Рис. 10. Интерфейс Microsoft Lync Client
Lync достаточно полно интегрирован с другими компонентами Office 365, за счет
чего может реализоваться следующий сценарий. В Outlook, определив потенциальных
участников веб-конференции, буквально в один клик можно начать ее планирование.
Outlook получит из Exchange Online информацию о доступности потенциальных
участников и актуальную версию их рабочих календарей, благодаря чему инициатор
конференции может предложить время не наугад, а с учетом занятости коллег, что
значительно повышает шансы попасть в удобное для всех время с первого раза. Всем
потенциальным участникам по электронной почте будет направлено письмо, содержащее
приглашение и ссылку на запланированную конференцию. Принять приглашение, равно
как и начать или присоединиться к конференции, можно непосредственно из Outlook
также в один клик.
Рис. 11. Планирование веб-конференции в Outlook
Рис. 12. Конференция в Lync. Сессия обмена мгновенными сообщениями, видеосвязь с
отображением активного участника, показ слайдов презентации Microsoft PowerPoint с
возможностью навигации для участников — все в едином интерфейсе
Для участия в веб-конференции можно приглашать участников, не являющихся
сотрудниками компании. Такие участники смогут присоединиться, например, используя
Silverlight-версию клиента, то есть для участия в веб-конференции Lync не нужно
устанавливать на свой ПК никакого дополнительного программного обеспечения, и,
соответственно, не нужно обладать правами локального администратора. Этот сценарий
может найти широкое применение при приглашении к участию в вебинарах клиентов и
партнеров компании.
Lync также интегрирован и с SharePoint, благодаря чему, например, во время
совместного редактирования документа Word можно начать обмен мгновенными
сообщениями с другими активными пользователями прямо из интерфейса настольного
клиента Microsoft Word, после чего, в случае необходимости, перейти к общению голосом
или видео.
10 мая 2011 года было объявлено о приобретении компанией Microsoft компании
Skype. На пресс-конференции, посвященной событию, были озвучены планы Microsoft по
интеграции технологий Skype с существующими продуктами: Lync, Messenger, Xbox.
Логично предположить, что, когда эти планы реализуются, пользователям Office 365
будет доступна прямая связь с многомиллионной аудиторией пользователей Skype.
6 Публичный веб-сайт предприятия
Воспользовавшись Office 365, предприятие может создать свой публичный веб-
сайт, доступный пользователям из Интернета по собственному доменному имени
компании.
Можно выбрать тему сайта и стиль оформления из соответствующих обширных
библиотек.
Рис. 13. Темы оформления веб-сайта
7 Интеграция с мобильными устройствами
Для работы с сервисом Office 365 можно использовать практически все
распространенные модели смартфонов, которые поддерживают протокол Exchange
ActiveSync. В том числе смартфоны линеек iPhone, BlackBerry, а также смартфоны с
операционными системами Android и Symbian (последние — с клиентом Nokia Mail for
Exchange).
Рис. 14. Windows Phone. Календарь, библиотека SharePoint, презентация PowerPoint и
параллельно выполняющийся звонок
Поддержка протокола Exchange ActiveSync дает пользователям смартфонов
возможность работы с электронной почтой, календарем и списком контактов,
хранящимися в инфраструктуре Office 365. Синхронизация электронной почты возможна
в так называемом push-режиме, при котором пришедшие письма будут «проталкиваться»
с сервера Exchange Online на мобильный телефон сразу по их получении, что, с одной
стороны, позволяет работать с почтой максимально оперативно, а, с другой стороны,
приводит к сокращению трафика и увеличению времени работы смартфона от батареи.
При помощи браузеров, реализованных в смартфонах, можно работать с сайтами
SharePoint Online. SharePoint умеет генерировать специальные, мобильные представления
соответствующих веб-страниц, с которыми удобно работать на небольших по размерам
экранах смартфонов.
Однако, особенно гладкая и полная интеграция с сервисом Office 365, конечно,
реализована в Windows Phone. В частности, в интерфейсе Windows Phone реализован так
называемый Office Hub, посредством которого пользователь имеет централизованный
доступ к приложениям Word Mobile, Excel Mobile, PowerPoint Mobile, а также
документам. Мобильные версии офисных приложений отлично справляются с
документами соответствующих форматов, позволяют их редактировать. Интеграция с
SharePoint Online позволяет в интерфейсе Windows Phone видеть ссылки на сайты и
отдельные библиотеки, открывать и сохранять документы непосредственно в SharePoint
Online.
Microsoft анонсировал выход мобильного клиента Lync Moblie для Windows Phone
и iPhone в течении текущего 2011 года. В частности, 16 мая 2011 года, в рамках
конференции TechEd, было анонсировано обновление для Windows Phone с кодовым
именем ―Mango‖, в котором будет реализована еще более глубокая интеграция с Office
365, Windows Live SkyDrive, а также мобильный клиент Lync Mobile.
Рис. 15. Windows Phone. Lync Mobile
8 Итоги по функциональности
Несмотря на то, что мы рассматривали компоненты, входящие в Office 365,
отдельно друг от друга, для пользователя весь сервис выглядит монолитно. Это
достигается тесной интеграцией серверных компонентов, настольных, тонких клиентов, а
также единством подхода к построению пользовательских интерфейсов.
Office 365 можно отнести к платформам/ решениям класса UCC (Unified
Communications and Collaboration), то есть продуктам, обеспечивающим
унифицированные коммуникации и совместную работу сотрудников компании.
9 Преимущества для бизнес-пользователей
Итак, можно говорить о том, что Office 365 — это предложение воспользоваться
практически полным спектром программного обеспечения, входящего в группу бизнес-
продуктивности Microsoft, по модели SaaS (Software-as-a-Service).
Сервис может быть интересен и крупным компаниям, и компаниям сегментов
персонального, малого и среднего бизнеса.
В частности, по мнению Павла Кузьменко, руководителя отдела по продвижению
информационных офисных систем Microsoft в России, ценность для крупных компаний
может заключаться в том, чтобы, получая все преимущества от использования
современных информационных технологий, оптимизировать инвестиции и заменить
капитальные затраты на операционные (CAPEX OPEX). Однако, по мнению Андрея
Патоки, вице-президента по развитию корпоративного бизнеса компании «Вымпелком»,
крупные компании, которые примут решение переходить к использованию Office 365,
будут делать это в течении длительного времени, через различные гибридные модели.
Эксперты выразили мнение, что особенный интерес Office 365 представляет
именно для небольших компаний, и для этого есть несколько причин.
Первая — возможность получения доступа к самым современным инструментам
бизнес-продуктивности за небольшую абонентскую плату. Ранее для небольших
компаний затраты на инфраструктуру и лицензирование соответствующего программного
обеспечения по классической модели были заградительными, и предприятие было лишено
возможности эффективно применять современные ИТ. То есть Office 365 — это тот
рывок, который позволяет, например, стартапу встать в технологическом плане на тот же
уровень, который достигается лидерами рынка.
Вторая — возможность гибко управлять количеством лицензий (подписок на
сервис). В случае необходимости количество подписок может быть наращено или
сокращено оперативно, в зависимости от потребности.
Третья — возможность использования enterprise-уровня функциональности
соответствующих продуктов, например, высокой доступности, для чего ранее требовалось
развертывание очень сложной сетевой и серверной инфраструктуры, подготовка
персонала и очень высокие затраты на лицензирование.
Четвертая — отсутствие необходимости наличия специальных знаний.
Развертывание, администрирование платформы сервиса, обновление версий ПО
производится поставщиком сервиса, небольшая компания может сосредоточиться на
своей основной деятельности, на своей компетенции.
Пятая — наличие нескольких сервисных планов, различающихся абонентской
платой. Небольшое предприятие может подписать пользователей на оптимальный по
стоимости сервисный план, соответствующих их потребностям в использовании
компонентов, входящих в Office 365.
10 Как это работает
Безусловно, Office 365 относится к категории облачных продуктов, поскольку
конечному пользователю не нужно иметь никакой собственной инфраструктуры, кроме
ПК и доступа в Интернет — Office 365 придет к нему «из облака» ;)
В частности, серверная инфраструктура, на которой работает сервис Office 365,
размещается исключительно в дата-центрах компании Microsoft, расположенных по всему
миру, дата-центры партнеров не задействуются. Для развертывания сервиса Office 365,
конечно, используется платформа Microsoft. Создание дата-центра в Казахстане пока не
планируется. Предприятие, которое подписывается на сервис Office 365, не будет знать, в
каком именно дата-центре расположено то оборудование, которое обеспечивает для него
работу Office 365.
Для пользователей это означает, что письма электронной почты и мгновенные
сообщения между соседними столами в офисе могут ходить, например, через Сингапур ;)
А это, в свою очередь, накладывает определенные требования на характеристики
канала для доступа в Интернет. Его скорости должно хватить и на передачу объемного
трафика (писем электронной почты, документов Office), и на трафик реального времени
— голосовое общение и видеоконференции. Требуемая емкость канала зависит и от
количества пользователей, и от типичного использования сервисов каждым из них, так
что какие-то конкретные рекомендации дать сложно.
Microsoft декларирует надежность сервиса на уровне 99,9%, и свою финансовую
ответственность в случае недостижения этого параметра. Такой уровень надежности
означает, что в год допускается 8,76 часов простоя (43 минуты в месяц). Однако,
пользователям стоит помнить о том, что доступ к сервису осуществляется через Интернет,
и, соответственно, также необходимо задуматься об обеспечении надежности
соответствующих каналов. Конечно, на надежность магистральных каналов,
соединяющих дата-центр с провайдером в Казахстане конечные пользователи вряд-ли
смогут повлиять, а вот иметь запасной вариант доступа в Интернет, например,
беспроводной, представляется целесообразным.
В этой связи, интересным представляется предложение о получении услуг по
доступу к сервису Office 365 из одних рук совместно с услугой по доступу в Интернет. В
этом случае поставщик будет отвечать за работоспособность всего комплекса. Однако,
ответственность провайдера, как показывает практика, с большой вероятностью будет
находиться в пределах части абонентской платы, пропорциональной времени
неработоспособности сервиса сверх заявленных 0,01%.
Поэтому представляется логичным задуматься о возможности оффлайновой
работы. В частности, можно выбрать сервисный план с возможностью использования
настольной версии Microsoft Office, чтобы можно было продолжать работать и в условиях
отсутствия доступа в Интернет, или докупить лицензию на такой Microsoft Office
отдельно. Также представляется целесообразным иметь резервную копию критичных
данных предприятия где-то на локальных носителях, равно как и иметь минимальную
офисную ИТ-инфрастурктуру, чтобы в случае непредвиденных ситуаций данные и хотя-
бы какая-то возможность их обработки не были утрачены.
11 Управление сервисом
Работу с сервисом Office 365 можно начинать со стартовой страницы пользователя,
с которой возможен быстрый переход к Outlook Web Access, загрузка дистрибутива Lync
2010 Client, быстрый переход на сайт SharePoint и загрузка дистрибутива Microsoft Office
2010 Professional Plus или переход к управлению сервисом.
Рис. 16. Общий вид стартовой страницы пользователя сервиса Office 365
Управление сервисом Office 365 осуществляется при помощи веб-консоли
администратора.
Рис. 17. Консоль администратора. Добавление нового пользователя
Системные требования
Операционные системы:
o Windows 7;
o Windows Vista with Service Pack 2;
o Windows XP with Service Pack 3;
o Windows XP Home Edition (с ограничениями);
o Windows XP Media Center Edition (с ограничениями);
o Mac OS X 10.5 Leopard, 10.6 Snow Leopard.
Системное программное обеспечение:
o Microsoft .NET Framework 3.0 (для Windows XP);
o Java client 1.4.2 (для Macintosh OS X).
Пакеты Microsoft Office:
o Microsoft Office 2010 или Office 2007 Service Pack 2;
o Office 2008 for Mac и Microsoft Entourage 2008 Web Services Edition;
o Office 2011 for Mac и Outlook 2011 for Mac;
o .NET Framework 2.0 или более поздняя версия;
o Microsoft Lync 2010.
Клиентские приложения:
o Services Connector (специальный клиент доступа к сервису Office 365).
Браузеры (для доступа к Microsoft Online Portal):
o Internet Explorer 7 или более поздняя версия;
o Mozilla Firefox 3.x;
o Apple Safari 3.x.
Браузеры — для работы Microsoft Outlook Web App:
o Internet Explorer 7 или более поздняя версия;
o Firefox 3 или более поздняя версия;
o Safari 3 или более поздняя версия под управлением Macintosh OS X 10.5;
o Chrome 3 или более поздняя версия;
o Outlook Web App также имеет облегченную версию, которая поддерживает
уменьшенный набор функциональных возможностей, она работает под
управлением практически любого браузера.
12 Платформа для разработки
Office 365 — это не только готовый к использованию сервис, но еще и платформа
для разработки.
Например, разработчик может реализовать так называемую веб-часть —
программный апплет, который обрабатывает данные, находящиеся на сайте SharePoint
Online и выводит их в определенную область веб-страницы в удобном пользователю виде.
Можно написать код, который будет взаимодействовать с документами Excel и
базами данных Access, расположенными в Office 365.
Возможно создание собственного клиента для Lync, реализующего специфичную
для предприятия функциональность — например, встроить коммуникации в основное
бизнес-приложение предприятия. Благодаря чему, например, в тексте мгновенных
сообщений будут передаваться номера запросов клиентов или накладных на отгрузку
напрямую из соответствующих приложений.
В настоящее время уже существует магазин приложений для Office 365 —
Microsoft Office 365 Marketplace, что открывает соответствующие перспективы для
разработчиков.
Рис. 18. Microsoft Office 365 Marketplace
13 Заключение
Office 365 — это логичное продолжение тренда, сформировавшегося в индустрии.
Программное обеспечение должно приходить на ПК пользователя в виде веб-приложений
и сервисов облачной инфраструктуры — частной, гибридной или публичной. Microsoft
предусмотрел возможность разворачивания в облаке всех основных приложений бизнес-
продуктивности. Построение собственного сервиса, объединяющего в единое целое все
эти продукты, и вывод этого сервиса на рынок были лишь вопросом времени.
Возможность лицензионного использования Microsoft Office, гибкого управления
подпиской, наличие нескольких тарифных планов, возможности использования
функциональности enterprise-уровня за вполне демократичную цену, возможность оплаты
по модели абонентской платы — все это делает Office 365 привлекательным
предложением, особенно для сегментов персонального, малого и среднего бизнеса.