355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Автор Неизвестен » Платформа J2Me » Текст книги (страница 21)
Платформа J2Me
  • Текст добавлен: 8 октября 2016, 11:48

Текст книги "Платформа J2Me"


Автор книги: Автор Неизвестен



сообщить о нарушении

Текущая страница: 21 (всего у книги 21 страниц)

Системные качества влияют на приложения MIDP различными способами. Во-первых, приложения MIDP – те, что находятся на мобильных устройствах, – должны быть рассмотрены с точки зрения того, насколько хорошо они работают с системными качествами.

Во-вторых, клиенты MIDP могут работать совместно с серверной службой, которая находится где-нибудь в беспроводном Интернете. Один и тот же разработчик может проектировать и клиентские, и серверные компоненты. Разработчики должны применять всеобъемлющие принципы построения архитектуры при разработке серверных компонентов. Среда платформы беспроводного Интернета является наиважнейшей средой для построения архитектуры из-за ее требований к массовой расширяемости, производительности, безопасности и так далее.

Наконец, клиенты MIDP должны знать системные качества любой службы, которую они используют. Даже если атрибуты этих служб лежат за границами контроля разработчика MIDP, важно понимать их ограничения и то, как они влияют на функциональные и системные качества приложения MID.P.


Apxитeктypныe решения беспроводного Интернета

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

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

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

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

Например, распределенные приложения MIDP формируют запросы для отправки и получения данных по беспроводным соединениям. Хотя многие уровни набора протоколов беспроводного Интернета и структура общих соединений MIDP извлекают архитектурные подробности беспроводной сети из вашего приложения, характеристики производительности сети влияют на разработку вашего приложения.

Двумя основными категориями беспроводных сетей являются сети с коммутацией каналов и сети с коммутацией пакетов. Сети с коммутацией каналов тратят больше времени на установление соединения, чем сети с коммутацией пакетов. Более длительное время установления соединения вызывает задержку начала обмена данными, что влияет на время ожидания и пропускную способность. Теоретически приложения MIDP должны, вероятно, проектироваться с учетом запроса большего объема данных на каждое соединение и ограничения количества соединений, устанавливаемых с удаленными серверами, особенно в сетях с коммутацией каналов. Действительные же измерения производительности, доступные на время написания этой книги, однако, показывали, что относительно новые сети, основанные на коммутации пакетов, еще пока недостаточно хорошо налажены, чтобы снизить время ожидания и увеличить пропускную способность настолько, насколько ожидалось первоначально. Поэтому неплохим решением может стать ограничение общего количества запросов соединения.

Повышение производительности может быть также достигнуто посредством использования дейтаграмм для определенных сетевых коммуникаций. Если приложения могут быть к нему приспособлены, использование UDP вместо HTTP или сокетов (то есть, даже если реализация MIDP поддерживает сокеты) может привести к резкому повышению сетевой производительности, поскольку реализации UDP не создают соединений на транспортном уровне.

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

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

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

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

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

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

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

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

Это некоторые из причин, почему беспроводные сети имеют более ограниченную среду сетевой передачи данных, чем среды проводных сетевых комплексов. Разработчики MIDP должны учитывать ограничения сети при разработке приложений. С принятием IPv6 будет достаточно адресов для того, чтобы присвоить каждой телефонной трубке статический IP-адрес. Тем не менее, безопасность, производительность и расширяемость останутся важными вопросами.


Выводы по главе

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

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

Основанная на Java технология платформы J2ME значительно увеличивает способ ность мобильных устройств использовать преимущества интернет-приложений. Он помогает скрывать от приложений различия в технологии и службах беспроводной CCTI и Интернета.

Однако в реальном мире ограничения и сдерживающие факторы технологической плана требуют, чтобы предназначенное для Интернета основанное на Web программно! обеспечение специально приспосабливалось к беспроводному Интернету, то есть обра щалось к технологиям, используемым для доступа радиоустройств. Но с развитием тех нологии беспроводной Интернет начнет поддерживать абстракции, которые устраня' необходимость наличия специального, основанного на Web программного обеспечения которое поддерживает мобильные устройства отлично от постоянно подсоединенны: устройств, таких, как персональные компьютеры.

Архитектура – это набор понятий и действий, которые поддерживают проектирова ние и описание системы. Методология построения архитектуры – это порядок примене ния архитектурных понятий и действий. Методология построения архитектуры SunTom – это дополнение к процессу Rational Unified Process.

Методологию построения архитектуры дополняет сбор требований. Разработчи! должен согласовать архитектуру с объявленными требованиями системы. Методологи: построения архитектуры SunTone подчеркивает важность определения нефункциональ ных или системных качеств системы и использования их для установления соответстви: системы объявленным требованиям.

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

Приложение

Словарь

– # -

2G – второе поколение технологии беспроводных сетей. Сети 2G используют технологию коммутации каналов.

2.5G – поколение технологии беспроводных сетей, которое последовало за 2G. Сети 2.5G не замещают сети 2G, а вместо этого предоставляют службы пакетов данных, дополняющие сети 2G.

3G – третье поколение технологии беспроводных сетей. Сети 3G используют только технологию коммутации пакетов.

Common Object Request Broker Architecture (CORBA) – промышленный стандарт для межплатформенного, межъязыкового построения распределенных объектных приложений. Группа по развитию стандартов объектного программирования (Object Management Group – OMG) осуществляет наблюдение за его последующим определением и развитием.

IS08859-1 – международный стандарт символьных кодировок для кодирования западноевропейских языков, используя один байт на символ.

Java 2 Micro Edition (J2MEJ) – одна из трех платформ, определяемых Sun Microsystems, поддерживает портативные компьютерные устройства.

МID-лет (MIDIet) – приложение MIDP, а именно: приложение, которое требует платформы MIDP для выполнения.

Rational unified process (RUP) – методология разработки программного обеспечения, разработанная Rational Software.

UTF-8 – международный стандарт символьной кодировки изменяющейся ширины, которая часто используется при кодировании текстовых данных для передачи между приложениями.

– А —

Абстрактный оконный инструментарий (Abstract Window Toolkit (AWT) – определяет инструменты программирования графического интерфейса пользователя (GUI) для программ Java.

Архитектура приложения (application architecture) – описание интерфейсов, взаимосвязей и состава структурных элементов системы программного обеспечения.

Архитектурная структура (architectural framework) – теоретическая структура, которая поддерживает определение архитектурной модели.

Атрибут (attribute) – информация, определяющая характеристику MID-лета. Атрибуты состоят из пар имя-значение. Имя обозначает ключ атрибута, а значение содержит информацию.

– Б -

Беспроводной Web (wireless Web) – комбинация инфраструктуры беспроводной сети и Интернета, предоставляющая мобильным устройствам доступ к World Wide Web.

Беспроводной Интернет (wireless Internet) – комбинация инфраструктуры беспроводной сети и ее связи с Интернетом, создающая среду, которая дает мобильным устройствам доступ к ресурсам Интернета.

Блок прослушивания (listener) – смотри блок прослушивания событий.

Блок прослушивания событий (event listener) – класс Java, определяемый приложениями MIDP, чьи экземпляры прослушивают программные события. Реализация MIDP вызывает метод в объекте блока прослушивания для подтверждения возникновения события.

– В -

Виртуальная машина Kilobyte Virtual Machine (KVM) – виртуальная машина Java, созданная для использования в CLDC. Она поддерживает подмножество свойств стандартной виртуальной машины Java.

Виртуальный беспроводной портал (virtual wireless portal) – портал, который предоставляет услуги беспроводным пользователям, но физически не относится к сети беспроводного транспортировщика (то есть не является частью сети intranet транспортировщика).

Высокоуровневый программный интерфейс приложения (high-level API) – программный интерфейс приложения пользовательского интерфейса MIDP, который извлекает из приложения подробную информацию об обработке события инструментарием.

– Г -

Глобальная система определения местонахождения (global positioning system (GPS)) – система геостационарных спутников, которые передают информацию о географическом местоположении принимающей стороне.

– Д -

Двойная буферизация (double buffering) – техника программирования графики, в которой для рисования изображений используются два графических буфера. Программа сначала записывает данные во внеэкранный графический объект, а затем переносит содержимое внеэкранных объектов графики в экранный графический объект.

Дейтаграмма (datagram) – часть данных протокола приложений, которая пересылается посредством протокола UDP в среде Интернета.

Диспетчер приложений Java (Java application manager) – AMS, поддерживающая управление приложениями Java на портативных устройствах.

– И -

Идентификациенный номер мобильной станции и определения службы (mobile station identification and service definition number (MSISDN)) – как и MSN, телефонный номер мобильного телефона.

Инициализация приложения (application provisioning] – в контексте J2ME – обнару-; – "чие, посредничество и доставка приложений на портативные устройства.

Инструментарий Swing – дополнение графического пользовательского интерфейса, встраиваемого в AWT.

Интегрированная система обработки сообщений (unified messaging) – интеграция различных служб обработки сообщений, которые скрывают детали доступа любой из схем.

Интернационализация (internationalization) – задачи, связанные с реализацией в компьютерной программе возможности работы на нескольких языках, в различных географических и культурных контекстах.

Интернет-протокол (Internet protocol (IP)) – стандартный протокол Интернета сетевого уровня.

Интерфейс вызова удаленных методов (Remote Method Invocation (RMIJ) – API Java, который поддерживает организацию распределенных объектно-ориентированных вычислений в Java.

– К -

Команда (command) – представление действия пользователя. MIDP определяет класс, экземпляры объектов которого представляют собой взаимодействия пользователя с приложением.

Компактная виртуальная машина (Compact virtual machine (CVM)) – виртуальная машина Java, которая поддерживает те же свойства, что и виртуальная машина J2SE, но создана для портативных устройств и приставок.

Компаратор записей (record comparator) – класс Java, определяемый приложениями MIDP для реализации функции сравнения двух записей из хранилища записей RMS MIDP.

Конфигурация (configuration) – определение минимальной платформы Java, которая состоит из общего набора свойств виртуальной машины Java, свойств языка Java и программных интерфейсов приложений (API) для семейства устройств.

Конфигурация Connected Device Configuration (CDC) – конфигурация J2ME, которая поддерживает постоянно подсоединенные портативные устройства.

Конфигурация Connected, Limited Device Configuration (CLDC) – конфигурация, которая поддерживает персональные нестационарные портативные устройства.

– Л -

Локализация (localization) – задача подготовки ресурсов, которые позволяют интернационализированной программе работать в определенном языковом, географическом и культурном контексте.

– М -

Мгновенный обмен сообщениями (instant messaging (IM)) – доставка сообщений с наибольшей возможной скоростью. Эта схема отличается от схемы передачи с промежуточным запоминанием (store-and-forward), используемой системами электронной почты.

Международная организация по стандартизации (International Standards Organization (ISO)) – европейская организация, которая контролирует создание и принятие международных стандартов.

Многоязыковая (multilingual) – в контексте интернационализированного программного обеспечения – программа, которая может работать в нескольких локальных контекстах одновременно.

– Н -

Набор MID-летов (MIDIet suite) – группа MID-летов, совместно использующая ресурсы приложения. Все MID-леты в наборе должны быть упакованы вместе для доставки на устройство MIDP.

Низкоуровневый программный интерфейс приложения (low-level API) – API пользовательского интерфейса приложения MIDP, который дает приложениям возможность управления низкоуровневыми событиями, такими, как события нажатия клавиш.

Номер мобильной станции (mobile station number (MSN)) – телефонный номер мобильного телефона.

Облегченный протокол службы каталогов (Lightweight Directory Access Protocol (LDAP)) – промышленный стандарт для привязки пользователей к атрибутам в форме каталога.

– О -

Обнаружение (discovery) – процесс поиска приложений во время инициализации приложения.

Обнаруженное приложение (discovery application) – приложение, расположенное на мобильном устройстве и поддерживающее инициализацию на устройстве. Это приложение не является системой AMS, которая дает возможность установки программного обеспечения при его появлении на устройстве.

Образец разработки (design pattern) – в контексте компьютерного программного обеспечения решение разработки хорошо известной или часто возникающей проблемы.

– П -

«По воздуху» (over-the-air) – термин, относящийся к использованию беспроводной сети. Этот термин используется для представления инициализации приложения на мобильные устройства с помощью беспроводного соединения.

Подтверждение совместимости (compatibility verification) – процесс определения совместимости программного обеспечения приложения и среды портативного устройства.

Портал беспроводного Интернета (wireless Internet portal) – интернет-портал, который связан с доставкой служб и содержимого на мобильные устройства, но в других отношениях не отличается от порталов проводного Интернета.

Посредничество (brokering) – категория инициализации приложений, которая состоит из предоставления информации о приложении, согласования лицензии и подтверждения покупки.

Почтовый протокол (Post Office Protocol (POP)) – стандартный протокол приложений между почтовыми клиентами и серверами.

Приложение XML (XML application) – реализация XML, представляющая собой экземпляр расширяемого языка разметки XML.

Протокол беспроводных приложений (Wireless Application Protocol (WAP)) – протокол, использующийся в системах беспроводного Интернета первого поколения.

Протокол интерактивного доступа к электронной почте (Internet mail application protocol (IMAP)) – стандартный протокол уровня приложений для доступа к почте между почтовыми клиентами и серверами.

Протокол передачи гипертекстовых файлов (Hypertext transfer protocol (HTTP)) – протокол сеансового уровня, являющийся стандартным протоколом World Wide Web.

Протокол управления передачей (Transmission Control Protocol (TCP)) – стандартный интернет-протокол транспортного уровня.

Профиль (profile) – определение интерфейса уровня приложений для определенного класса устройств. Профиль реализует конфигурацию J2ME.

Профиль foundation – профиль, предназначенный для реализации CDC.

Профиль Mobile Independent Device Profile (MIDP) – профиль J2ME, который реализует CLDC.

Профиль personal – профиль J2ME, предназначенный для реализации CDC.

Профиль Personal Digital Assistant Profile (PDAP) – профиль J2ME, предназначенный для реализации CLDC.

– Р -

Региональная настройка (locale) – определение набора одного или нескольких языковых, географических и культурных контекстов.

– С -

Сверка (collation) – лексикографическая сортировка в контексте правил, представляющих контекст определенной региональной настройки.

Свойство (property) – атрибут, описывающий некоторую характеристику среды исполнения Java на мобильных устройствах.

Серверная страница Java (Java Server Page (JSP)) – разновидность сервлета Java. Технология Java Server Pages определяет API, который отделяет представление пользовательского интерфейса сервлета от функциональной логической схемы сервлета.

Символьная кодировка (character encoding set) – соответствие между символами письменного языка и битовыми комбинациями, иногда сокращенно обозначается как набор символов (charset).

Система управления записями (Record Management System (RMS)) – простой механизм постоянного хранения данных приложения. Она поддерживает несколько хранилищ данных, каждое из которых может содержать множество записей.

Система управления приложениями (application management system (AMS) – программное обеспечение для портативных устройств, контролирующее выполнение приложений на мобильном устройстве.

Системные качества (systemic qualities) – характеристики системы, имеющие отношение к ее нефункциональному поведению, такие, как производительность, расширяемость, безопасность, доступность, управляемость и так далее.

Служба Short message service (SMS) – служба беспроводных сетей, которая поддерживает передачу текстовых сообщений длиной не более 128 байтов с и на мобильные устройства.

Службы определения местоположения (location-based services) – использование приложениями информации о местоположении для предоставления информации, соответствующей географическому положению клиента.

Службы персонализации (personalization) – службы, поддерживающие установку предпочитаемых пользователем настроек для служб, конфигурации и представления приложения, информации об учетной записи и так далее.

Случай использования (use case) – инструмент, который поддерживает описание и документирование требований приложения.

Собственный интерфейс Java (Java Native Interface (JNI)) – API Java, который поддерживает вызовы собственных функций за пределами виртуальной машины Java.

Сокет (socket) – традиционный механизм организации сетей операционной системы Unix, который реализует сетевые соединения TCP/IP между клиентами.

Структура общих соединений (generic connection framework) – набор интерфейсов MIDP и один класс, который поддерживает организацию сетей для приложений MIDP. Он извлекает подробную информацию об установлении любого определенного вида сетевого соединения.

– Т -

Точка кодирования (code point) – присвоение элементу настоящего письменного языка определенной битовой комбинации.

Трансляция сетевого адреса (network address translation (NAT)) – схема, по которой IP-адреса преобразуются в другие IP-адреса для того, чтобы скрыть адрес происхождения от внешних систем. NAT связана с вопросами безопасности и адресного пространства.

– У -

Универсальный протокол передачи дейтаграмм (Universal Datagram Protocol (UDP)) – стандартный сетевой интернет-протокол, который поддерживает передачу дейтаграмм без установления соединения транспортного уровня.

Уникод (Unicode) – международная стандартная символьная кодировка, использующая классический 16-битный формат для кодирования каждого элемента языка всех письменных языков мира.

– Ф —

Фильтр записей (record filter) – класс Java, определяемый приложениями MIDP для осуществления фильтрации записей, находящихся в хранилище записей RMS MIDP, в соответствии с каким-либо критерием. Фильтр выдает только те записи, которые соответствуют заданному критерию.

– Ш -

Шлюз беспроводного Интернета (wireless Internet gateway (WIG)) – объединенная система аппаратного и программного обеспечения, связывающая среды беспроводной и j проводной сетей.

Штучка (widget) – термин компьютерного сленга, который относится к какому-либо компоненту программного обеспечения, часто (но не всегда) к компоненту пользовательского интерфейса.

– Я -

Язык гипертекстовой разметки (Hypertext markup language (HTML)) – стандартное представление языка разметки, использующегося в World Wide Web.

Язык гипертекстовой разметки extensible (extensible Hypertext Markup Language (XHTML)) – язык разметки, который со временем заменяет HTML и переформатирует HTML 4.0 в соответствующее приложение XML.

Язык разметки extensible (extensible Markup Language (XML)) – стандартный язык разметки метаинформации, использующийся в World Wide,Web.

Язык разметки для беспроводных систем (Wireless Markup Language (WML)) – язык разметки, использующийся в системах беспроводного Интернета первого поколения при форматировании Web-страниц для мобильных устройств.


    Ваша оценка произведения:

Популярные книги за неделю