Windows своими руками: XP Embedded

Автор: Aport Вторник, Ноябрь 4th, 2014 Нет комментариев

Рубрика: Windows XP

Странно устроен человек — некоторые факты не доходят до его сознания, даже если они очевидны, но не вписываются в систему стереотипов. В числе таких очевидных фактов — совершенно другое качество настольных ОС семейства Windows. Я имею в виду XP, которая уже давно не «виндоза»

Windows XP — совсем не та невзрачная «винда» 3.11 и даже вовсе не Вынь95, 98 или Me, с непонятно какой структурой взаимодействия драйверов, сетевых протоколов и старых приложений.

Windows XP — это крутейшая из энтишек, которая вобрала все лучшее от некогда «серверной» NT 4, многое взяла от W2K и, к тому же, добавила уйму нового. Причем как с точки зрения серверных технологий, так и в том, что касается новейших мультимедийных и геймерских возможностей. Вобрала, взяла, добавила… — но не остановилась на этом. Эволюция XP продолжается — и идет она огромными шагами, о чем можно судить хотя бы по скорости внесения обновлений, патчей и багфиксов. Прогресс таков, что я бы не удивился, назови Microsoft эту ОС не Windows, а как-то иначе.

Одно из наиболее значительных отличий, с точки зрения базовых для ОС возможностей, заключается в наличии самого настоящего многопользовательского режима — наконец-то процессы и другие объекты стали использовать давно заложенные в NT дескрипторы ACL и таким образом защищать не только процессы и потоки друг от друга, но и на более высоком уровне разграничивать адресные пространства пользователей. Фактически давно существующий API наконец-то получил свою реализацию. В результате стала возможной система, поддерживающая независимые десктопы для каждого пользователя (в том числе и для удаленных терминалов), защищенные пользовательские каталоги и персональные адресные пространства. Когда я впервые увидел надпись «извините, но Вы не можете рыться в чужих документах, да и просто просматривать чужие каталоги» — я понял, что ситуация изменилась в корне.

Другие мощные возможности из мира профессиональных версий NT — например, расширения файловой системы NTFS, такие как горячее монтирование, динамические тома, квоты и т.д.,- тоже доступны. Так же как и возможность установки серверных платформ, например IIS или MS SQL.

С точки зрения мультимедиа и игр все достаточно ясно, все более или менее на виду. Новый DirectX № 9, в основном полагающийся на современные графические процессоры (в быту называемые «видеокарточками»), характеризует последние тенденции для среднего ПК, в общем и целом звучащие как «3D больше не стоит денег» и «звук есть у всех». При этом мощная 2D-графика, скины, сглаживание шрифтов и сцен, а также просто необозримая база данных драйверов делает XP реальным конкурентом в области графики и дизайна даже среди таких «ярких» ОС, как, например, Mac.

В целях получения приемлемой производительности все это сочетается с оптимизированным «хинтингом». То есть система анализирует действия пользователя, например переключение пользователей или переход в режим игры, и аккуратно выгружает потенциально ненужные в новом режиме потоки на диск, освобождая ресурсы для потенциально активных приложений. Это отлично работает — по крайней мере, производительность игр в такой сложной среде ничем не уступает таковой на весьма примитивной однопользовательской Windows 98.

От общего к частному


Короче — Windows XP оказалась на редкость удачным продуктом, но чтобы еще более полно использовать ее потенциал, разработчики решили учитывать тенденции сегодняшнего дня, а именно — наблюдаемые и предсказуемые диверсификацию и конвергенцию. Если говорить более простым языком, то это значит, что вычислительная техника все больше превращается из инструмента бизнеса в бытовой прибор. Потенциально каждое бытовое электронное устройство в ближайшем будущем будет управляться цифровым процессором, будет подключено к интернету, и притом — очень вероятно — беспроводным способом. Раньше такие устройства традиционно оснащались заказными контроллерами со своим специфическим программным обеспечением. Недостаток такого подхода — сложность разработки таких программ, дефицит специалистов по данному кристаллу, недостаток средств быстрой разработки приложений (RAD) для специфических сред.

Особый интерес на сегодня представляют PDA и смартфоны. Эти маленькие устройства в виде небольших коробочек Palm Pilot от 3COM, буквально взорвали IT-рынок. Со временем появилась масса клонов, некоторые из которых по своей мощности стали приближаться к настольным системам. На сегодня оптимальным для них выбором остается Palm OS, построенная специально для данного типа устройств и жестоко оптимизированная для минимальных ресурсов,- однако в будущем ситуация может измениться.

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

Третья категория устройств, еще не получившая должного распространения, но долгое время находящаяся в разряде «многообещающих», это так называемые бытовые тонкие клиенты — TV top-set boxes, то есть «устанавливаемые на телевизоре». Это устройство, по идее, должно выполнять простейшие операции с интернетом (отправка почты и просмотр веб-страниц), а также выполнять бизнес-функции организатора, текстового редактора — и все это в сочетании с игровой и мультимедийной нагрузкой, например с просмотром цифровых снимков с фотоаппарата, воспроизведением MP3- и DVD-дисков и так далее. Предполагается также, что снабженная считывателем цифровых карт, такая приставка сможет стать катализатором цифровой торговли — как товарами (например, доставка книг и дисков по почте), так и новыми мультимедийными услугами (видео по заказу).

Ко времени появления Windows XP у «Майкрософт» был определенный опыт работы с «системами ограниченных ресурсов» в виде собственной усеченной версии Windows 95 — Windows CE, устанавливаемой на некоторые электронные записные книжки и организаторы, игровые консоли, а также на ПК класса subnote. Небольшая по размеру и ограниченная в возможностях, Windows CE, тем не менее, работала неплохо — не очень быстро, но, по мере сил, «честно» выполняя возложенные на нее функции. Кстати, эта система получила свое развитие в новом поколении Windows CE .NET путем встраивания соответствующего runtime, но это все-таки можно назвать всего лишь полумерой.

В новых условиях, когда «Майкрософт» полностью «снимает с потока» и постепенно уводит с рынка все старые продукты в пользу новой платформы, условно обозначаемой NT5 .NET,- в этих условиях использованные усеченные возможности CE выглядят не самыми привлекательными для рынка, особенно в плане портирования «взрослых» программ из мира деловых приложений. Кроме того, это невыгодно и с точки зрения разработки: приходится реализовать одни и те же функции на нескольких платформах параллельно. Идея единого бинарного ядра NT5, а также единой, сетевой по своей сути, среды выполнения .NET привела к неизбежному стратегическому решению — на всех устройствах должна работать NET-совместимая операционная система на основе ядра NT5, клиентская версия которого известна как Windows XP. Таково будущее «Майкрософт», и таково будущее Windows — и, как следствие, миллионов пользователей, доверяющих свой ПК этой операционной среде.

Общая архитектура


В результате такая портативная и совместимая с NT версия операционной системы, нацеленная на устройства с ограниченными ресурсами, такие как PDA, планшетные ПК или смартфоны нового поколения, получила название XP Embedded — то есть «встроенная», хотя на самом деле ее применение выходит далеко за рамки «безмолвных» систем реального времени.

Основное свойство XP Embedded — это четкое разграничение компонент системы, с тем чтобы разработчики встроенного набора функций при создании релиза могли включать только нужные файлы и таким образом максимально сократить размер кода. Сами компоненты на бинарном уровне представляют собой части Windows XP Professional. Для разработчика работа с Windows XP Embedded представляет выбор компонент и драйверов, включаемых в дистрибутив,- процесс, по сути, напоминает компиляцию монолитного ядра Linux, за тем, однако, отличием, что в нашем случае ни о каком монолитном ядре речь не идет.

Компоненты Windows XP Embedded представлены сервисами, приложениями, библиотеками и драйверами — разработчику нужно сконфигурировать необходимый набор функций и собрать из компонент необходимую конфигурацию в так называемый runtime image, то есть образ среды исполнения. Все опции конфигурации собраны воедино в базу данных компонент — и вы, как разработчик, имеете к ней доступ, в частности можете редактировать ее с помощью специального средства Component Database Manager.

Для каждого компонента в процессе создания определяется ряд параметров:

  • платформа, то есть среда, в которой будет выполняться данный компонент — определяет порядок компиляции и сборки;
  • описание и схема подключения компонента;
  • список ассоциированных ресурсов, таких как файлы и ключи реестра;
  • зависимости компонента от других (например, от DirectX или NET runtime);
  • указатель на репозитарий с файлами (чаще всего это просто локальный
  • каталог, но может быть и сетевым ресурсом);
  • принадлежность к группе для упрощения обращения сразу к нескольким компонентам как к целому.Сама база данных представляет собой БД в терминах MS SQL и может быть расположена как локально, на компьютере разработчика, так и на сервере — предполагается, что некоторые члены команды отвечают за реализацию новых компонент, тогда как другие занимаются сборкой рабочих образов. Я обращаю ваше внимание на этот момент, поскольку решение о том, какой компьютер будет выступать в качестве сервера для компонент, нужно принять еще до инсталляции, при планировании рабочего окружения. Мы рассмотрим самый простой случай, когда на вашем компьютере установлены как клиентские, так и серверные компоненты разработчика.

    Небольшое замечание по закачке инсталляции


    Получить ознакомительную версию Windows XP Embedded можно на сайте «Майкрософт». Единственное отличие этой системы от полной версии — заложенная в нее «временная бомба», то есть построенные с ее помощью образы будут иметь лимитированный (90 или 120 дней, в зависимости от версии) срок действия.

    В духе времени инсталлятор представляет собой небольшую оболочку, которая закачивает остальные части из сети (предполагается, что таким образом пользователь может выбрать подмножество закачиваемых модулей — хотя на самом деле вам все равно понадобится все). Сам процесс закачки не совершенен: загрузка файла может оборваться даже при хорошем соединении: визуально это проявляется наличием надписи «Done» против имени файла — несмотря на то, что реально закачано меньше 100%. Это ошибочная ситуация — вы должны загрузить CAB-файл на 100% для нормальной инсталляции. Чтобы исправить ситуацию:

    а) инсталлируйте те компоненты, которые закачались нормально;
    б) удалите частично загруженные файлы;
    в) запустите закачку снова — инсталлированные компоненты будут автоматически исключены из списка закачки.

    К сожалению, если вы закачиваете через прокси, то кэшированные данные могут сделать плохую услугу — и вы будете получать обрезанные файлы все время. В таком случае придется проявить смекалку и закачать те же файлы, но уже с помощью более надежных инструментов. В этом вам поможет, например, джентльменский набор из FAR, NetvorkActiv и FlashGet.

    Инсталляция


    Первое, что можно (и нужно) установить, если у вас старый релиз Windows 2000,- это MS Installer, поскольку все компоненты поставляются именно в этом формате. Следующее — движок базы данных, используемой для хранения депозитария объектов. Это, так сказать, единственный серьезный pre-request всей системы, не считая достаточной мощности компьютера и установленной версии Windows семейства NT5. Для установки на одном компьютере и клиентской, и серверной части вам нужно установить, как минимум, Microsoft SQL Server 2000 Desktop Engine («MSDE»). Если вы собираетесь использовать клиент-серверную технологию, вам нужно установить на сервере MS SQL Server 2000. Дистрибутив MSDE находится на диске с инсталляцией WXPE, так что минимальный набор функций для одного разработчика у вас будет в любом случае. Детали установки этих компонент выходит за рамки данной статьи — по крайней мере, MSDE инсталлируется без единого вопроса, так что проблем возникнуть не должно. Убедиться в правильности установки MSDE можно, проверив наличие запущенного сервиса MSSQLSERVER (Панель управления > Администрирование > Службы) и иконки SQL Server Agent в трейбаре.

    Теперь можно инсталлировать клиентскую часть, называемую Embedded Tools. Это как раз те средства, с помощью которых вы выбираете опции сборки будущей встроенной системы.

    И последнее по порядку — но первое по значению — это собственно база данных компонент, включающая все модули, которые вы потенциально можете встроить в будущий дистрибутив. Это звучит фантастически, но этих компонент почти 10 тысяч! Среди новых и востребованных компонент высокого уровня можно выделить поддержку современных мультимедийных возможностей, встроенный DirectX 8, огромный набор кодеков для воспроизведения видео и звука, самые последние возможности при просмотре web (такие, например, как Flash-анимация). Не остались в стороне и современные средства коммуникации, в том числе всевозможные беспроводные технологии и протоколы верхнего уровня, как HTTP или FTP.

    Драйверы устройств включают все распространенные комплектующие на стандартных интерфейсах, вроде USB и AGP, и даже некоторые редко встречающиеся устройства. Как вы увидите позже, добавление нового устройства также не составит особого труда.

    Отдельный разговор об опциях загрузки полученного кода: поддерживаются загрузка с жесткого диска, по сети, с read-only-устройств (таких как лазерные диски или просто защищенные от записи носители), с различных flash-дисков (как эмулирующих ATA/IDE, так и подключаемых через USB). И, наконец, группа компонент позволяет встроить поддержку библиотеки классов .NET Common Runtime — и, как следствие, сделать доступными для вашей платформы создание и загрузку мобильных сетевых приложений, создание и доступ к веб-сервисам или просто предоставить высокоуровневое программное окружение.

    Все это как раз и содержится в компонентной базе данных, так что эта база отвечает за все многообразие функций вашего конечного аппаратно-программного продукта. Как уже было сказано, ничто не мешает пополнить эту базу своими объектами, например драйверами специфических устройств, собственными приложениями или протоколами. Вы создаете компоненты с помощью Component Designer, определяя их характеристики и необходимые файлы, после чего все члены вашей команды могут использовать новые компоненты.

    Конфигурация, сборка и построение загрузочного образа


    Итак, будем считать, что вы успешно установили все необходимое для работы — теперь попробуем создать самый простой загрузочный образ. Для начала ограничимся встроенными компонентами. Процесс сборки дистрибутива называется компиляцией — но не в том смысле, в котором его используют программисты, то есть это не трансляция исходных кодов, а просто сборка (собственно, компиляция и есть синоним слова сборка) нужных бинарных файлов в нужное дерево каталогов в специально зарезервированной для этого директории. При этом каждый компонент перед сборкой проходит стадию настройки. Сама сборка (копирование нужных файлов в нужные каталоги), сопровождаемая записью соответствующих значений в реестр, называется построением образа (image building). Готовый образ просто копируется на целевую платформу для загрузки.

    Конфигурации сборки хранятся в файлах *.slx, описания компонент — в файлах *.sld. Вы можете свободно обмениваться этими файлами и, например, реконструировать на удаленной системе абсолютно идентичную сборку. Для использования *.sld-файлы должны быть импортированы в базу данных с помощью Component Database Manager — обычно записи в репозитарии объектов никогда не удаляются, за исключением случая, когда новый компонент заменяет старый. В компонентной базе данных поддерживается понятие версий компонента, и если имеют смысл обе версии компонента, то всегда рекомендуется оставить обе версии.

    Итак, перед нами почти 10000 компонент, и, конечно, просто взять да и начать выбирать из них необходимые будет нелегко или, по крайней мере, слишком долго. Для упрощения этой задачи существует способ включать одни компоненты в другие, что называется зависимостью больших собирательных контейнеров от более мелких компонент. Чтобы продемонстрировать, как это работает, пройдем по пути первого «гайда» и создадим один компонент, который будет содержать все устройства нашего компьютера. Вообще, если вы разрабатываете встроенный образ для полноценного компьютера, на котором вы можете запустить exe-файл, то это может сэкономить много времени.

    Автоматический анализ текущей конфигурации производится с помощью небольшой (и совсем неочевидной) утилиты tap.exe, что обозначает Target Analyzer Probe. Эта программа по умолчанию находится в каталоге C:Program FilesWindows Embeddedutilities. Похожий файл — ta.exe — предназначен для работы под ДОС. Результатом работы этой программы будет файл devices.pmq, который нужно импортировать в Component Designer. В результате вы получите один большой контейнер, единственным свойством которого будет зависимость от всех компонент, соответствующих драйверам вашей конфигурации.

    При импортировании pmq-файла обратите внимание на другую опцию — там же вы можете выбрать inf-файл для импорта. Эта возможность позволяет создавать компоненты прямо из поставляемых производителем драйверов, так что, если вы имеете драйвер, то за пару минут можете добавить соответствующий компонент. Просто и изящно.

    После того как вы «создали» новый компонент и сохранили его под определенным именем в удобном для вас месте, непосредственно использовать его вы еще не можете. Специальный инструмент, Component Database Manager, предназначен для импорта отдельных компонент в централизованную базу данных. Запустите этот инструмент, на первой же закладке найдите соответствующий пункт Импорт — и выберите сохраненный компонент. Теперь он станет виден вам и вашей команде в Target Designer. Два предупреждения: поскольку менеджер БД работает в эксклюзивном режиме, то на время работы с ним вы должный покинуть другие инструменты. Кроме того, во время добавления новых компонент вы можете наблюдать состояние компьютера, похожее на «зависание». Это связано с довольно сложными операциями в терминах SQL, производимыми менеджером — просто немного подождите, и все образуется.

    Теперь заключительная фаза (или же первая и единственная — если коллеги проделали предыдущее за вас), то есть сборка и релиз. Запускаем Target Designer и создаем новый проект, настраиваем его параметры, такие как авторство, загрузочный диск и так далее, и добавляем только что созданный «мегакомпонент» со всеми нашими драйверами.

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

    После того как вы добавили в новую сборку свои драйверы — как в виде списка, так и по отдельности — вы также должны добавить несколько других, исключительно важных компонент, поскольку драйвера — это многое, но не все. Первое и главное — добавьте из шаблонов Design Templates, например Windows Based Terminal, если вы создаете «тонкого» клиента.

    Также очень вероятно, что вы захотите добавить какие-то средства для получения оболочки, наподобие командной строки или Explorer. Находится все это в Software > System. Там же вы можете позаимствовать массу утилит — если что-то пропустите, не очень переживайте, добавите потом и назовете это «великим ребилдом».

    Последнее, что нужно в любом случае, это какие-то настройки часового пояса, клавиатуры и так далее. В туторе эти настройки нарочно «по недосмотру» опускаются, что вызывает ошибку, что, в свою очередь, создает Task To Do. Щелчок по заданию переносит вас в мастер решения проблемы — надеюсь, вам удастся не только допустить эту ошибку, но и исправить ее.

    Как работают бездисковые станции под Windows XP Embedded?


    С точки зрения пользователя понятия бездисковой станции, сетевой загрузки или загрузки с CD-ROM не представляют никакой проблемы. Другое дело если вы представляете работу операционной системы или даже являетесь ее архитектором: одна мысль о том, что ОС совершенно не имеет никакого записываемого дискового хранилища данных, в том числе файла подкачки и места для временных файлов, может повергнуть в сомнения относительно смысла бытия. Тем не менее, все как-то да работает — так что рассмотрим, как эти вопросы решаются в Windows XP Embedded.

    Первое — это проникнуться тем фактом, что понятия «файл подкачки» и «виртуальная память» связаны друг с другом, однако вовсе не являются одним и тем же. Виртуальная память — это дополнительная операция трансляции адресов сегмента программ или данных согласно таблицам GDT и LDT. Затем, после трансляции, физические страницы размером 4Кб могут быть выгружены в дисковый файл. «Могут быть» — но вовсе не обязательно будут туда выгружены. Фактически вы можете отключить файл подкачки, если абсолютно уверены, что вам достаточно RAM для самого худшего сценария выполнения приложений. В конце концов, система останется на плаву даже и в случае, если она не сможет запустить приложение из-за недостатка памяти. Единственное, что такой вариант вряд ли устроит пользователя, но если некая ситуация встречается у 1% пользователей, то она, что называется, под контролем — для таких пользователей, в конце концов, можно добавить немного памяти (за отдельные деньги).

    Вывод — если вы не будете запускать (а вы не должны этого даже хотеть) на бездисковой рабочей станции сложных приложений, таких как SQL-сервер или что-то в этом духе, то вам вполне достаточно 256 Мб, а возможно, и 192 Мб оперативной памяти — при этом можно достаточно спокойно выключать файл подкачки. Фактически, он и так изначально выключен в конфигурации по умолчанию. Если вы, напротив, хотите его включить или просто любопытства ради хотите узнать, где это делается — то вас должен интересовать компонент, владеющий уровнем HAL. Он обычно называется Advanced Configuration and Power Interface (ACPI) PC или Standard PC. Выберите Settings — и справа в окне свойств можете включить или выключить поддержку swap file, а также задать его минимальный и максимальный размер.

    Второе — это временные файлы. К сожалению, почти все современные программы написаны так «роскошно», что создают временные файлы даже при наличии достаточного количества оперативной памяти. Одна из причин: так называемые «журналы отката» — то есть приложения должны хранить устойчивые «трассы» для возврата к предыдущему состоянию, например по . Так вот, для таких временных файлов и вообще для всякого случая, когда система должна записать что-то на загрузочный диск, но диск не поддерживает записи, существует так называемая система EWF, Enhanced Write Filter (или фильтр расширенной записи). Идея проста — для каждого сектора на загрузочном диске, например на CD, поддерживается его «живая» копия, то есть двойник в оперативной памяти или на диске, на который разрешена запись. Пока сектор только читается, система просто возвращает данные с носителя обычным образом. Если же сектор записывается — EWF перехватывает эту операцию, создает образ сектора на перезаписываемом носителе (эта область называется оверлеем), и сектор помечается как «живой». Дальнейшие операции чтения приведут к обращениям к этой копии, не к данным на диске. Можно сказать, что этот подход представляет собой «файл подкачки наоборот», то есть, если файл подкачки эмулирует оперативную память, то в данном случае память эмулирует дисковый накопитель.

    Существует два принципиально различных метода EWF: с оверлеем на диске или в оперативной памяти — и у каждого из них есть свои преимущества и свои ограничения. Естественно, что на бездисковой станции или при загрузке по El Torito (загрузка с CD, когда первая сессия на диске трактуется BIOS как диск или дискета) будет работать только RAM EWF. При этом вам понадобится столько дополнительной памяти, чтобы «накрыть» все запросы на запись. Кроме прочего, в памяти нельзя установить более одного уровня оверлея, и такой оверлей — это понятно — не будет сохранять состояние после перезагрузки.

    Если же вы делаете загрузку, например, по сети — то можете устроить локальный EWF-оверлей на винчестере, причем оверлей может иметь до девяти уровней вложения. Каждый уровень будет обеспечивать свою «точку отката», то есть при возврате на более низкий уровень система «забудет» изменения на более высоком уровне оверлея.

    Можно также загружаться с винчестера, но защищать загрузочный образ от изменений. Выгода от «эмуляции жесткого диска жестким диском» не так очевидна, но в плане централизованного менеджмента, отката и защиты оригинального загрузочного образа это имеет смысл.

    Практика


    В качестве целевого местоположения новой системы я использовал отдельный раздел диска и после настройки перенес образ на устройство El Torito CD (не самый простой вариант загрузки), после чего удалось загрузиться без жесткого диска, используя EWF. Система работает без каких-либо проблем. Процесс, однако, не так прямолинеен — если вы захотите реализовать загрузку с лазерного диска, вам придется как следует проштудировать раздел Designing a Run-Time Image, в частности пункт El Torito CD. Я бы посоветовал не повторять моих ошибок и, прежде чем браться за сложные варианты, как минимум, построить несколько обычных дистрибутивов и поработать с ними — вы обнаружите, что вещи, казавшиеся очевидными, не всегда таковыми являются.

    Полностью работоспособная конфигурация без дополнительных приложений заняла 113 Мб на диске — вполне достаточно, чтобы загружаться с диска USB Flash объемом 128 Мб (и это еще учитывая, что моя инсталляция не была как следует оптимизирована и «очищена» от лишних компонент, найденных и «подхваченных» утилитой tap.exe). В смысле размера и функциональности — результат отличный, комментарии излишни.

    Итог


    Несмотря на отдельные «сложные» моменты, которые, однако, относятся к разряду вторичных функций, система Windows XP Embedded имеет хорошую «родословную» и получила достойную путевку в жизнь. С учетом растущих мощностей процессоров и по мере появления новых Wintel-совместимых и работающих по принципу «всегда в сети» устройств, заложенные в эту ОС возможности обещают стать широко востребованными в самом ближайшем будущем. В конце концов, это удобно для пользователя — иметь привычный, согласованный и удобный интерфейс на всех устройствах, начиная с настольного компьютера, PDA, мобильного терминала и заканчивая «умными» бытовыми приборами. А для менеджеров, программистов и разработчиков — это новый рынок товаров и услуг, еще не освоенные возможности и очень хорошая перспектива для бизнеса. Так что желаю вам воспользоваться этими возможностями для роста и процветания.

 

Источник: winzone.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты