Введение в WAP, WML и WMLScript
Эмуляторы и средства разработки
Телефоны, поддерживающие протокол WAP
Все, кто в какой-то мере интересуется тенденциями развития Internet и соответствующими технологиями, наверняка слышали про WAP (Wireless Access Protocol) и, возможно, даже могли опробовать его в действии, посетив пока немногочисленные российские WAP-сайты. В нашем журнале мы рассказывали об устройствах, поддерживающих этот протокол (см. «Сотовые телефоны с поддержкой Интернет-протокола WAP» КомпьютерПресс 5’2000). Целью данной статьи является ознакомить Web-мастеров и разработчиков с протоколом WAP, c лежащими в его основе технологиями, показать основные возможности языка WML, используемого для реализации содержимого WAP-сайтов, скриптового языка WMLScript, а также представить имеющиеся средства разработки, браузеры и эмуляторы.
Протокол WAP изнутри
WAP (Wireless Application Protocol) — это новый набор стандартов, разработанных для расширения сервисов Internet и делающих возможным доступ к этим сервисам с мобильных телефонов, пейджеров и карманных компьютеров. Разработка протокола WAP координируется WAP Forum (http://www.wapforum.org) — независимой организацией, членами которой являются все ведущие производители мобильной телефонии, аппаратного обеспечения, сетевые операторы, поставщики сервисов, а также многие производители программного обеспечения.
История WAP
В 1995 году фирма Ericsson начала работу над протоколом ITTP (Intelligent Terminal Transfer Protocol), целью которого было расширение сервисов, предоставляемых мобильными телефонами. В течение 1996-1997 годов Nokia приступила к работе над концепцией Smart Messaging, а фирма Unwired Planet (в настоящее время — Phone.com) разработала спецификацию языка Handheld Device Markup Language (HDML) — языка разметки документов, схожего с HTML, но оптимизированного для устройств с экранами небольшого размера: мобильных телефонов и карманных компьютеров.
К концу 1997 года разработчики поняли, что конкурирующие протоколы только расколют и, возможно, даже погубят потенциальный рынок. Поэтому в декабре фирмы Ericsson, Motorola, Nokia и Unwired Planet объединили свои усилия и сформировали WAP Forum. После выпуска весной 1998 года спецификации WAP 1.0 организация стала принимать новых членов, и к концу следующего года в ее состав входило более 90 компаний.
Основные участники WAP Forum
America Online, Inc. | IBM Corporation | Sony International |
AT&T Wireless | Intel Corporation | Sun Microsystems |
Charles Schwab & Co, Inc. | MasterCard International | Toshiba Corporation |
Compaq Computer Corp | Microsoft Corporation | Unisys Corporation |
Ericsson Mobile Com | Nokia | Visa International |
Hewlett-Packard | Phone.com | Xircom, Inc. |
Hitachi Ltd | Samsung Electronics | Yamaha Corporation |
Протокол WAP
К основным преимуществам протокола WAP можно отнести:
- программную модель, базирующуюся на Internet;
- язык разметки WML — Wireless Markup Language;
- протокольный стек, оптимизированный для беспроводных коммуникаций;
- поддержку более чем 90% производителей всех мобильных устройств.
Протокол WAP создавался для решения трех основных проблем, возникающих при обмене данными по беспроводным сетям, а именно: низкая скорость передачи (9600 бит/с для GSM), задержки и нестабильность соединения. Кроме того, протокол WAP учитывает размер мобильных устройств — большинство из них имеет экран небольшого размера и небольшую, но многофункциональную клавиатуру.
Сетевой компонент реализует как транспортный, так и прикладной уровень протокола. WAP-данные доставляются в виде байткода, что позволяет максимально эффективно использовать невысокую скорость передачи. В языке WML используется метафора «колода карт» (card/deck). Этот набор, полностью обеспечивающий тот или иной сервис, загружается целиком, и, следовательно, отпадает необходимость в поддержании постоянного сетевого соединения.
Непосредственное управление устройствами происходит на уровне WML. Карта обычно описывает одну операцию, и, как правило, ее содержимое может быть отображено на небольшом экране мобильного устройства. В зависимости от приложения несколько карт могут быть объединены вместе для обеспечения более комплексного сервиса.
WAP базируется на таких Internet-протоколах и спецификациях, как HTTP, UDP, URL, HTML и JavaScript. Таким образом, основные программные концепции должны быть знакомы Internet-разработчикам. WML-файлы могут быть загружены с обычного Web-сервера (например, Microsoft Internet Information Server) при соответствующей конфигурации MIME-типов.
Транспортная модель WAP схожа с моделью Internet — единственным отличием является наличие специального шлюза, располагающегося между беспроводной сетью и клиентом. Этот шлюз выполняет роль proхy между Internet и беспроводной сетью и также кодирует WAP-данные в байткод для сокращения времени передачи данных по беспроводной сети. Эти различия показаны на рис. 1 и рис. 2.
Стек протокола WAP состоит из пяти основных уровней:
- Wireless Application Environment (WAE);
- Wireless Session Protocol (WSP);
- Wireless Transaction Protocol (WTP);
- Wireless Transport Layer Security (WTLS);
- Wireless Datagram Protocol (WDP),
а также из вспомогательного, зависящего от типа мобильной сети (CSD, SMS, CDMA и т.п.).
На рис. 3 показано сравнение стека Web и WAP.
Читатели, желающие более детально изучить вопросы реализации протокола WAP и его отдельных уровней, могут обратиться к подготовленным WAP Forum документам, которые можно найти на нашем CD-ROM.
В этом обзоре мы рассмотрим лишь верхний, прикладной уровень — WAE и более подробно остановимся на его компонентах — WML и WMLScript.
Прикладной уровень
Прикладной уровень (Wireless Application Environment, WAE) состоит из четырех частей:
- модели адресации (The Addressing Model);
- языка Wireless Markup Language (WML);
- языка WMLScript;
- приложения Wireless Telephony Application (WTA).
Модель адресации, используемая в WAP, аналогична Internet-модели и базируется на URL и URI. Язык Wireless Markup Language представляет собой эквивалент языка HTML и основывается на языке XML. Язык WMLScript базируется на спецификации ECMAScript, которая, в свою очередь, является стандартом языка JavaScript. WMLScript позволяет добавлять в WML-страницы процедурную логику. И наконец, WTA позволяет создавать сервисы на базе WAP.
Создание страниц. Язык WML
После того как мы кратко ознакомились с протоколом WAP и его основными компонентами, перейдем к рассмотрению языка WML, который используется для создания страниц, доступных через WAP-устройства.
Наборы и карты
Как мы уже знаем, в языке WML используется метафора «колода карт». В отличие от языка HTML, где каждому HTML-файлу соответствует одна страница на экране браузера, WML-файл содержит одну или более страниц, называемых картами (card). Таким образом, карты, находящиеся в одном WML-файле, загружаемом целиком при обращении к серверу, попадают в кэш-память мобильного устройства, где затем могут быть отображены. Такая коллекция карт называется колодой. Каждая колода также содержит шаблон (можете считать это джокером), описывающий общие характеристики каждой карты в колоде (рис. 4).
Например, WAP-сайт может содержать главную страницу, страницу с краткой справкой и страницу с контактной информацией. Остальные страницы могут описывать предлагаемые товары и услуги.
Обратите внимание на то, что все содержимое нашего узла располагается в двух файлах — Main.wml и Service.wml, но отображается шестью экранными страницами. Концепция колоды схожа с использованием HTML-элемента # для задания секций внутри большого HTML-документа. Единственным отличием является то, что в каждый момент на WAP-устройстве видна только одна секция.
Пишем WML-код
Давайте реализуем колоду, показанную на рис. 5. Она состоит из трех карт — первого экрана, краткой справки и контактной информации. Ниже показан WML-код, реализующий эту колоду.
<?xml version=”1.0"?> <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml”> <wml> <!—Это — аблон —> <template> </template> <!—Это – первая карта в колоде —> <card id=”card1" title=”Welcome”> <p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </p> </card> <!—Это – вторая карта в колоде —> <card id=”card2" title=”Help”> <p align=”center”> <big><strong>Справочная информация</strong></big><br> Используйте кнопки для навигации </p> <do type=”accept” label=”Main”> <go href=”#card1"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </card> <!—Это – третья карта в колоде —> <card id=”card3" title=”Contact”> <p align=”center”> <big><strong>Контактная информация</strong></big><br> тел. 234-6581<br> e-mail : editors@cpress.ru </p> <do type=”accept” label=”Main”> <go href=”#card1"/> </do> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> </card> </wml>
Как мы отмечали выше, язык WML базируется на языке XML, и поэтому наш WML-файл начинается с заголовка
<?xml version=”1.0"?> <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml”>
и указания на местоположение DTD-файла (Document Type Definition), описывающего язык WML. Более подробно о языке XML можно узнать на Web-сайте по адресу: http://www.xml.com. Далее идет открывающий элемент <wml>, указывающий на то, что здесь начинается WML-документ. Документ завершается закрывающим элементом </wml>.
Как видно из приведенного выше рисунка, наша колода состоит из шаблона и трех карт. В показанном WML-коде шаблон не реализован и не содержит ничего, кроме открывающего и закрывающего элемента:
<template> </template>
Далее идет описание первой (главной) карты, которая будет отображаться при обращении к нашему WAP-узлу.
<card id=”card1" title=”Welcome”> <p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </p> </card>
Каждая карта начинается с открывающего элемента <card> и завершается закрывающим элементом </card>. Элемент <card> задает идентификатор карты (атрибут id) и ее заголовок, отображаемый на экране (атрибут title). Между открывающим и закрывающим элементами <card>...</card> располагается содержимое карты. В данном случае это выделенный жирным шрифтом текст, расположенный в центре параграфа, и две кнопки, обеспечивающие доступ к справочной и контактной информации.
После описания первой карты следует описание второй и третьей карт. Порядок следования описаний не существенен — главное, чтобы карта, которая отображается первой, была описана в самом начале, до других карт.
Отметим, что в отличие от языка HTML, язык WML требует, чтобы все элементы и атрибуты были написаны со строчной буквы.
Содержимое карты
Создавая карту, следует помнить, что она будет отображаться на небольшом экране мобильного устройства. Поэтому она не должна содержать большого объема информации, хотя устройства и поддерживают функции скроллинга.
Карта может содержать небольшой текст, графическое изображение, меню или форму. Лучше не пытаться объединять все эти типы информации вместе, за исключением текста и графики.
Текст располагается в параграфах. WML требует, чтобы параграфы начинались с элемента <p> и завершались элементом </p>. Вложенные параграфы не допускаются. Пример параграфа:
<p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> </p>
Графические изображения хранятся в формате Wireless BMP (WBMP) и должны быть преобразованы с помощью известных онлайновых средств или утилит, входящих в состав средств разработки и эмуляторов. Изображения подключаются с помощью элемента <img>:
<img src=’cplogo.wbmp’ alt=’CPLOGO’/>
Отметим, что небольшой размер экрана (например, в Nokia 7110 он равен 96 x 65 пикселов, в Ericsson R320 — 101 x 52, а в Ericsson R380 — 360 x 120) не позволяет размещать графические изображения большого размера. Более того, некоторые устройства вообще не поддерживают графику.
Меню можно создавать, например, с помощью элемента <select>. Ниже показано, как реализовать меню, состоящее из трех элементов.
<p> <select name=”name”> <option value=”CP”>КомпьютерПресс</option> <option value=”CAD”>САПР </option> <option value=”ART”>КомпьюАрт </option> </select> </p>
Чтобы определить, какой из элементов меню выбран, используем следующий WML-код:
<card id=”card1" title=”Menu”> <do type=”accept” label=”Select”> <go href=”#card2"/> </do> <p> <select name=”name”> <option value=”CP”>КомпьютерПресс</option> <option value=”CAD”>САПР </option> <option value=”ART”>КомпьюАрт </option> </select> </p> </card> <card id=”card2" title=”Answer”> <p> Ваш выбор: $(name) </p> </card>
В приведенном примере показан простой механизм обработки событий на базе элемента <go>, а также способ передачи значений локальных переменных между картами (переменная name, хранящая значение выбранного элемента меню).
Использование ссылок
Как и в языке HTML, в WML для задания ссылок используется элемент <a>. Атрибут href указывает адрес WML-документа, на который осуществляется переход. Этот переход осуществляется к первой карте, описанной в указанном файле. Если же необходимо выбрать какую-то определенную карту, в адресе указывается символ # и имя карты. Для перехода к определенной карте внутри колоды в атрибуте href указывается символ # и имя карты. Ниже даны примеры использования элемента <a>.
<!—Переход по относительному адресу —> <a href=’products.wml’> <!—Переход по абсолютному адресу —> <a href=’http://wap.cpress.ru/products.wml’> <!—Переход к определенной карте —> <a href=’http://wap.cpress.ru/products.wml#cad’> <!—Переход к определенной карте внутри колоды—> <a href=’#cad’>
Шаблоны
Завершая наш мини-обзор языка WML, следует сказать несколько слов о шаблонах. Элемент <template> позволяет задать общие характеристики всех карт в колоде. Например, у всех карт может быть кнопка Back, которая реализуется следующим WML-кодом:
<do type=’prev’ label=’Back’> <prev/> </do>
Достаточно поместить этот код в элемент <template>, и у всех карт в колоде появится кнопка Back:
<template> <do type=’prev’ label=’Back’> <prev/> </do> </template>
Элементы языка WML представлены во врезке «Элементы языка WML», а их полное описание, а также описание поддерживаемых ими атрибутов можно найти в спецификации языка WML Reference на нашем CD-ROM.
Язык WMLScript
Как мы уже отметили, язык WMLScript вносит процедурную логику в клиентские WML-страницы. Этот язык базируется на спецификации ECMAScript, которая, в свою очередь, является стандартом языка JavaScript. Язык WMLScript модифицирован таким образом, чтобы обеспечить поддержку низкой скорости передачи данных и «тонких» клиентов. Использование скриптового языка и включение его в спецификацию позволяют отказаться от реализации многих функций на сервере и, следовательно, сократить число обращений к серверу. Перечислим основные сферы применения языка WMLScript в составе WML-страниц:
- проверка введенных пользователем данных;
- доступ к функциональности устройства — обеспечение программного выполнения таких функций, как набор номера, отсылка сообщений, добавление номеров в телефонную книгу и т.п.;
- локальная генерация сообщений и диалоговых панелей;
- расширение функциональности программного обеспечения устройства и его настройка.
Язык WMLScript поддерживает основные типы данных (Boolean, Integer, Floating-point, String и Invalid), стандартные объявления переменных (ключевое слово var), функции (ключевое слово function) и другие общие структуры типа выражений if-then-else, циклов for/while и выражений break и continue. Среди других характеристик языка отметим возможность использования внутренних откомпилированных модулей (через прагму use url), контроль доступа (через прагму access), а также набор стандартных библиотек, описанных в спецификации языка. К этим библиотекам относятся библиотеки Lang, Float, String, URL, WMLBrowser и Dialogs (см. врезку «Стандартные библиотеки WMLScript»). Спецификация языка также определяет интерпретатор байткода, так как код на WMLScript компилируется в бинарную форму (WAP-шлюзом) перед отсылкой его клиенту.
После того как мы ознакомились с протоколом WAP, языками WML и WMLScript, следует посвятить некоторое время обзору средств разработки и эмуляторов мобильных устройств, позволяющих тестировать создаваемые WAP-узлы.
Эмуляторы и средства разработки
Вполне естественно, что ведущие разработчики мобильных телефонов предоставляют и эмуляторы своих устройств, а, к примеру, фирмы Ericsson, Motorola и Nokia делают это бесплатно.
Новейшие версии таких эмуляторов можно найти (после регистрации) по следующим адресам:
Ericsson http://www.ericsson.com/developerszone/;
Motorola http://www.motorola.com/MIMS/MSPG/spin/mix/mix.html;
Nokia http://www.forum.nokia.com/waplogin/.
Текущие версии эмуляторов и средств разработки фирм Ericsson и Nokia представлены на нашем CD-ROM.
Кроме эмуляторов фирмы предоставляют и средства для разработки WAP-узлов. Так, набор средств фирмы Nokia называется Nokia WAP Toolkit, фирмы Motorola — Motorola Application Development Kit, а Ericsson — WAP IDE Service Development Kit. Существует и набор средств разработки фирмы Phone.com — UP.SDK. Ниже мы кратко остановимся на основных возможностях каждого из этих средств.
Ericsson WapIDE 4.0
Ericsson WapIDE SDK представляет собой набор продуктов, поддерживающих дизайн и тестирование WAP-приложений, а также предоставляющих возможность разработки нового WAP-устройства для тестирования его функциональности.
В настоящее время Ericsson WapIDE Software Development Kit доступен только для платформ Windows NT 4.0 и Windows 95/98. В состав среды разработчика входят продукты для тестирования серверных приложений. К ним относятся: Perl 5.0, Tcl/Tk и Xitami Web Server. Установка WapIDE требует установки IDE, SDK и Xitami Web Server в указанной последовательности. Главный экран WapIDE обеспечивает доступ к браузеру (используется для тестирования приложений), дизайнеру приложений и серверным утилитам — компилятору WML/WMLScript и анализатору синтаксиса.
Браузер поддерживает различные устройства (эмулятор R320s используется по умолчанию) и позволяет тестировать как входящие в состав продукта примеры, так и собственные WAP-страницы и узлы. В состав WapIDE входят примеры приложений для банковских операций, проверки ценных бумаг и создания расписаний.
Дизайнер приложений (AppDesigner) интегрирует редактор WML-кода и браузер, позволяя выполнять кодирование и тестирование в рамках одного приложения.
Среди других WAP-продуктов фирмы Ericsson отметим WAP Application Server — сервер приложений, бaзирующийся на языке Java для платформы Solaris, поддерживающий до 50 тыс. пользователей, и WAP Gateway — шлюз на платформе Intel, выполняющий роль сервера для GSM-сетей с такими протоколами, как SMS and USSD.
Nokia WAP Toolkit 1.2
WAP Toolkit 1.2 фирмы Nokia во многом схож с Ericsson WapIDE. Оба продукта предоставляют в распоряжение разработчиков интегрированную среду, браузеры и компиляторы WML/WMLScript. WAP Toolkit в текущей версии работает только на платформе Windows и требует наличия Java 2 Runtime: вы можете загрузить либо Java 2 SDK, либо Java 2 Runtime Environment (JRE) с Web-узла фирмы Sun (http://java.sun.com).
После установки WAP Toolkit вам становятся доступными интегрированная среда разработчика (IDE) и набор документации по WAP, WML и WMLScript.
Среда разработчика позволяет работать как с локальными файлами, так и с WAP-файлами, загруженными по протоколу HTTP или через WAP-шлюз. Nokia также распространяет WAP Server на базе Java-сервлетов. Этот сервер включает сервер приложений и WAP-шлюз.
Phone.com UP.SDK 4.0
UP.SDK фирмы Phone.com (для платформ Windows 95/98/NT и Solaris) отличается от продуктов фирм Nokia и Ericsson в первую очередь отсутствием графической среды разработчика.
Вместо того чтобы создавать интегрированную среду для редактирования и тестирования WML/WMLScript-кода, UP.SDK предоставляет в распоряжение разработчика набор библиотек, которые можно использовать из таких языков, как WML, Perl, C, C++ и Visual Basic. Поскольку фирма Phone.com является ведущим разработчиком WAP-микробраузера, в состав UP.SDK входит WAP-браузер UP.Simulator. Этот эмулятор работает только под управлением Windows.
Для работы с эмулятором требуется подключение к Internet, так как он динамически соединяется с Web-сайтом Phone.com для загрузки примеров и доступа к WAP-приложениям.
В состав UP.SDK входят библиотеки функций на языках Perl и C, позволяющие генерировать WML-код, обрабатывать HTTP-запросы, а также объекты C++ (для платформы Solaris) и COM-объекты (для платформы Windows) для выполнения многочисленных операций, включая обработку нотификаций и факсов.
Помимо обеспечения базовой WAP-функциональности Phone.com поддерживает такие функции, как нотификации и передача факсов. Сервер UP.LINK содержит компонент Fax Manager для отсылки факсов непосредственно из WAP-браузера. Поддерживаются документы в формате Postscript, ASCII, Microsoft Word, RTF и Adobe Acrobat. Асинхронные нотификации могут быть направлены клиентам через интерфейс Notification API.
Дополнительная информация доступна на Web-узле (http://www.phone.com/products/upsdk.html), документация по продукту находится на нашем CD-ROM.
Motorola ADK
Motorola Application Development Kit (ADK) — это средство для создания WAP-приложений, включающее среду разработчика и набор эмуляторов, среди которых по умолчанию используется эмулятор Motorola 7389 (Timeport). Отметим, что, в отличие от Nokia WAP Toolkit, Motorola ADK использует виртуальную Java-машину фирмы Microsoft (Microsoft JVM), поэтому для работы с этим средством вам потребуется установить как минимум Microsoft Internet Explorer 5.0 или 5.5.
Помимо рассмотренных выше средств разработки существует ряд редакторов WML-кода. Среди них отметим:
- EasyPad WAPtor (http://www.waptop.net/) — простой, но мощный WML-редактор, облегчающий создание WAP-страниц;
- WAPPage (http://www.wapmine.com) — мощное средство для дизайна WAP-узлов. Поддерживает редактирование и компиляцию WML-страниц;
- DotWAP (http://www.inetis.com/english/solutions_dotwap.htm) — визуальное средство для создания WAP-страниц;
- WinWAP (http://www.slobtrot.com) — небольшой WAP-браузер, работающий под управлением Microsoft Windows;
- Wireless Companion (http://www.yourwap.com) — базовый эмулятор WAP-телефонов, позволяющий тестировать создаваемые WAP-страницы и узлы. Поддерживает протоколы HTTP и WAP;
- CardOne (http://www.peso.de/wap/index.htm) — средство для быстрого создания WAP-страниц, не требующее знания синтаксиса языка WML;
- Klondike WML Browser — базовый WAP-браузер, имеющий интерфейс, похожий на Microsoft Internet Explorer;
- WAPSody (http://alphaworks.ibm.com/aw.nsf/techmain/wapsody) — набор Java-классов, реализующих все основные компоненты протокола WAP. Эти классы могут использоваться в средствах разработки WAP-приложений;
- Pic2WBMP (http://wap.gingco.de) — набор Java-классов для преобразования графических изображений в формат WBMP;
- M3Gate (http://www.m3gate.com) — расширение для Web-браузеров Microsoft Internet Explorer и Netscape Communicator, позволяющее просматривать WML-страницы на компьютере.
Заключение
В этом обзоре мы ознакомились с протоколом WAP и рассмотрели его устройство, обсудили язык WML и скриптовый язык WMLScript, а также имеющиеся в распоряжении разработчиков средства разработки и эмуляторы ведущих производителей мобильных телефонов, а кроме того, средства, выпускаемые иными фирмами.
В заключение отметим, что по данным WAP Forum число пользователей мобильных телефонов в мире к 2003 году достигнет 500 млн. человек, причем 75% всех мобильных телефонов (375 млн.) будут способны обращаться к Internet. В корпоративном секторе количество пользователей, регулярно обращающихся к различным Internet-данным через мобильные телефоны, к 2001 году составит 24 млн. человек.
Приведенные данные означают, что рынок приложений для мобильной телефонии и других устройств будет неуклонно расти и, естественно, будет расти спрос на различные услуги. Если сегодня подавляющее большинство WAP-сайтов предлагают новости, прогноз погоды, результаты спортивных состязаний или локальную информацию, то вскоре появится новый класс корпоративных приложений — приложения для сбора данных, распространения продуктов и сервисов, доступа к корпоративной информации из любой точки мира, доступа к электронной почте, серверам Lotus Notes и т.п. И следовательно, резко возрастет спрос на разработчиков, владеющих языками WML и WMLScript, знающих основы протокола WAP и умеющих применить эти навыки на практике. Так что не откладывая в долгий ящик, обратитесь к нашему CD-ROM и начните изучение WAP, WML и WMLScript. Успехов вам!
КомпьютерПресс 9'2000