Управление сценариями просмотра Web-страниц

         

Ariadna - пример отечественной программы


В отличие от "китов" компьютерного бизнеса типа Microsoft или Netscape, отечественная компания AMSD пока не изобретает принципиально новых подходов - идет реализация существующих стандартов языка и его расширений. Как показывает практика, таким программам уготована судьба вечных аутсайдеров, если только нет крупной информационной сети, которая предоставляет эту программу в виде стандартного средства доступа к Web. Но будем надеяться, что AMSD найдет интересные, новые решения и сможет создать нечто неповторимое. Тестовая версия программы Ariadna может быть получена по адресу .



Бегущая строка


Другой часто встречающийся пример - бегущая строка. Строка может бежать
либо в поле статуса (низ экрана), либо внутри поля формы. Рассмотрим .
Здесь приведен фрагмент страницы компании "Демос", разработанный
Дмитрием Алтуховым ().
Как видно из этого примера, прокрутка осуществляется за счет изменения
содержания отображаемой переменной msg1. Запускается бегущая строка
в момент загрузки страницы по событию onLoad. Из комментария к примеру
следует, что автор не несет ответственности за проблемы, которые может
данный скрипт породить при его отображении браузером на компьютере пользователя.
Собственно проблема вызвана применением функции setTimeout. Изначально
предполагалось, что браузер, который поддерживает JavaScript, будет исполняться
в среде многопоточных операционных систем. В этом случае к моменту порождения
нового потока старый уже завершится, и setTimeout будет, таким образом,
порождать последовательно исполняемые потоки. Однако при реализации JavaScript
в Netscape Navigator 2.0 не все было выполнено аккуратно, и setTimeout
стала просто "пожирать" ресурсы компьютера. Системы Windows 3.x
вообще не являются многопоточными, и в них просто происходит переполнение


стека при выполнении данного скрипта. Весь вопрос заключается только в
том, как быстро "упадет" система, а это зависит от объема исполняемой
по setTimeout функции. Самое лучшее, что можно посоветовать, если вдруг
на экране появляется прокрутка, - поскорее покинуть такую страницу. Справедливости
ради, следует отметить, что прокрутку можно организовать и другими способами,
поэтому ее появление не обязательно должно вызывать крах системы или браузера.
Прокручивать можно и вертикальные фрагменты. Достигается это за счет
использования полей типа TEXTAREA ().
Собственно все организовано так же, как и в предыдущем примере, только
прокрутка осуществляется в поле формы; для этого поля введен параметр переноса
текста на новую строку, ширина поля подобрана под размер выводимых строк.
Прокрутка осуществляется как по событию onLoad, так и при нажатии на кнопку
Start/Stop. В этом случае не надо немедленно покидать страницу с прокруткой
- достаточно просто ее остановить.



Что дальше?


Следуя логике авторов JavaScript и направлениям развития World Wide Web, следует ожидать появления новых типов объектов и изменения свойств существующих. Кроме того, видимо, появятся глобальные переменные и функции. Порождение абстрактных типов тоже не за горами, хотя не совсем понятно, кто выиграет от такой новации. Постепенно совершенствуется и поддержка встроенных функций на разных платформах, так, например, функция random() реализована в настоящее время везде, что не исключает использования и своих собственных датчиков случайных чисел.
И еще, скорее всего, следует ожидать компилятора JavaScript для клиента. Будет ли данная возможность встроена в Navigator или это будет отдельный модуль, пока не ясно, но появление библиотек функций - движение в этом направлении, которое хорошо согласуется с принципами кэширования гипертекстовых страниц.
Павел Храмцов - рук. группы РНЦ "Курчатовский Институт". С ним можно связаться по тел.: 196-91-24 или электронной почте:

#48/96



ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ


Большинство компаний, производящих серверы баз данных и средств проектирования и разработки информационных приложений, в настоящее время озабочены проблемой обеспечения доступа к базам данных в среде Web. Мы приводим краткий список компаний с адресами их серверов Web, на которых можно получить более развернутую информацию.
Borland:
Computer Associates:и Fujitsu:
Informix Software:
JYACC:
Oracle Corporation:

#2/96



Доступ к базам данных с использованием технологии WWW


С.Д. Кузнецов
Всемирная Паутина недаром так быстро завоевала широкую популярность среди пользователей Internet, в мире бизнеса, науки, политики и т. д. Основные достижения Web - это простота опубликования информации в сети, удобство и сравнительная унифицированность доступа к документам, наличие на сегодняшний день достаточно развитых средств поиска. Однако в целом способы представления, хранения и поиска информации в WWW относятся к категории информационно-поисковых систем (ИПС). Хотя хранилища данных в узлах Web иногда называют базами данных, этот термин в данном случае можно использовать только в самом широком смысле. Исторически ИПС применялись для хранения слабоструктурированной и редко изменяемой информации. Базы данных в узком смысле - это хранилища структурированной, изменяемой информации, причем информация в базе данных должна всегда находиться в согласованном состоянии.
Замечание: везде далее мы предполагаем знакомство читателя с терминами Internet и их смыслом в объеме цикла статей Павла Храмцова. Почти все они опубликованы в различных изданиях "Открытых систем",а также в виде отдельной книжки (скоро выйдет вторая; рекомендую).
На наш взгляд, Web - это популистское развитие идей ИПС, базирующееся на развитых возможностях Internet. С равным успехом можно хвалить и ругать Web. Можно хвалить Всемирную Паутину за то, что, не выходя из дома, вы можете побывать в любой точке земного шара и посмотреть, что же там происходит. Можно ругать Web за то, что трудно найти действительно актуальную информацию(обычно она устаревшая), за то, что хранилища информации содержат очень много "мусора", опубликованного непонятно из каких соображений.(Недавно мне пришло в голову просмотреть "Желтые Страницы Internet". Впечатление отталкивающее. Такое чувство, что ребята просто развлекаются. "Дзен-буддизм и Internet", плохие картинки на телеконференции, множество вариантов кваканья - конечно же, лягушек - для отображения на платформах SPARC и т. д.) Но в любом случае интерфейс действительно удобен.




Ситуация с базами данных кардинально отличается. Именно базы данных содержат основные знания человечества. В конце двадцатого века с появлением технологии баз данных мы накопили больше информации, чем за всю предыдущую историю. Вся беда в том, что доступ к базам данных (даже к тем, которые содержат полностью открытую информацию) ограничен. Чтобы получить интересующую его информацию, пользователь должен иметь физический доступ к соответствующей СУБД, быть в курсе модели данных, знать схему базы данных и, наконец, уметь пользоваться соответствующим языком запросов. Что касается языка запросов, то проблему частично решает протокол ODBC, позволяющий направлять ограниченный набор операторов SQL (с промежуточной обработкой соответствующим драйвером ODBC) к произвольному серверу баз данных. Но это только частичное решение, поскольку оно никак не помогает пользователю понять схему базы данных (даже в терминах SQL) и, конечно, не способствует созданию унифицированного интерфейса конечного пользователя (нельзя же заставить всех работать в строчном режиме на языке SQL).
Итак, что же мы имеем. Мы имеем удобные средства разработки распределенных в Internet гипермедийных документов, простые, удобные, развитые и унифицированные интерфейсы для доступа к информации WWW. Кроме того, мы имеем большое количество ценных баз данных, управляемых разнородными СУБД, а также желание сделать эти базы доступными всем людям (в случае публичных баз данных) или членам территориально-распределенной корпорации (в случае корпоративных баз данных).Возникает естественное желание скрестить эти две технологии и обеспечить доступ к базам данных в интерфейсе Web. Еще два года назад существовали только идеи такого скрещивания и не очень тщательно разработанные подходы к реализации. На сегодняшний день имеется несколько работающих механизмов, и далее мы их обсудим. В целом механизмы делятся на два класса: обеспечивающие доступ к базе данных (по запросу клиента) на стороне Web-сервера и работающие непосредственно на стороне клиента.

Доступ к базе данных на стороне клиента


Видимо, наиболее мощные средства обеспечения доступа к базам данных на стороне Web-клиента обеспечивает язык Java. Java - это объектно-ориентированный язык программирования, являющийся, по сути дела, "безопасным" подмножеством языка Си++. В частности, Java не содержит средств адресной арифметики, не поддерживает механизм множественного наследования и т. д. Поэтому утверждается, что корректность Java-программы можно проверить до ее реального выполнения (это абсолютно недоказанное утверждение). Различают:
язык Java, как таковой, для которого существуют компиляторы в так называемый "мобильный код" (машинно-независимый код, который может интерпретироваться или из которого могут генерироваться машинные коды на разных платформах);язык JavaScript, который обычно используется для расширения возможностей языка HTML за счет добавления процедурной составляющей;и программный продукт HotJava, являющийся, по сути, интерпретатором мобильных кодов Java.
Для обеспечения доступа к базам данных на стороне Web-клиента наиболее существенно наличие языка Java. Технология разработки HTML-документа позволяет написать произвольное количество дополнительных Java-программ, откомпилировать их в мобильные коды и поставить ссылки на соответствующие коды в теле HTML-документа.Такие дополнительные Java-программы называются апплетами (Java-applets).Получив доступ к документу, содержащему ссылки на апплеты, клиентская программа просмотра запрашивает у Web-сервера все мобильные коды. Коды могут начать выполняться сразу после размещения в компьютере клиента или быть активизированы с помощью специальных команд.
Поскольку апплет представляет собой произвольную Java-программу, то, в частности, он может быть специализирован для работы с внешними базами данных. Более того, система программирования Java включает развитый набор классов, предназначенных для поддержки графического пользовательского интерфейса. Опираясь на использование этих классов, апплет может получить от пользователя информацию, характеризующую его запрос к базе данных, в том же виде, как если бы использовался стандартный механизм форм языка HTML, а может применять какой-либо другой интерфейс.




Для взаимодействия Java-апплета с внешним сервером баз данных разработан специализированный протокол JDBC, который, фактически, сочетает функции шлюзования между интерпретатором мобильных Java-кодов и ODBC, а также включает ODBC.
В заключение сравним достоинства и недостатки двух рассмотренных подходов. Использование CGI-скриптов на стороне Web-сервера позволяет иметь на стороне клиента только сравнительно простые программы просмотра. Вся хитроумная логика работы с базами данных (возможно, с обработкой полученных данных)переходит на сторону Web-сервера. Это легкий способ построения трехзвенной архитектуры приложения. (В последнее время разгрузку клиента от логики приложения называют решением проблемы "толстого" клиента. В данном случае мы можем иметь предельно тонкого клиента при утолщении сервера.)Отрицательным моментом является то, что при необходимости подключения нового CGI-скрипта, вообще говоря, требуется (относительная) модификация кода сервера.
Использование Java-апплетов, вообще говоря, обеспечивает более гибкое решение. Апплет - это часть HTML-документа. Для включения нового апплета нужно всего-навсего перекомпоновать документ. Web-cервер трогать не нужно. С другой стороны, клиент должен быть толще. Что бы там не говорили, клиент должен быть достаточно "толстым", чтобы в приемлемое время справиться с интерпретацией всех апплетов. Но, конечно же, сервер по-прежнему должен быть "толще" клиента.
На самом деле и при применении первого подхода, и при использовании второго остается нерешенной одна организационно-производственная проблема: кто должен проектировать, писать, отлаживать и сопровождать процедурный код? Web-мастера, производящие HTML-документы, обычно считают себя, скорее, дизайнерами нежели программистами. А здесь требуется чисто программистская работа. Иметь же двух мастеров на одном Web-site - это недопустимая роскошь. Придется растить людей, обладающих достаточными эстетическими способностями и являющимися в то же время квалифицированными и ответственными программистами. Я всегда говорил, говорю и говорить буду, что для этого нужно хорошо платить. Это единственное экономически оправданное решение.
А вообще-то, если хорошо разобраться, во всей Web-технологии нет ничего нового. Дал бы Бог придумать что-то, сочетающее черты гипертекста, так любимого пользователями, и баз данных, предназначенных для хранения не мусорной, а действительно ценной информации. Я лично попробую, хотя и ничего не обещаю. Возможно, нужно зацепиться за сравнительно новый, но уже весьма популярный термин "универсального сервера баз данных". Даешь новый, удобный и развитый интерфейс интегрированных информационных систем!

#5-6/96

Доступ к базе данных на стороне сервера


Механизм реализуется за счет наличия двух более или менее стандартизованных средств: возможности включения форм в документ, составленный с использованием языка гипермедийной разметки HTML, и возможности использования внешних по отношению к серверу Web программ, взаимодействие которых происходит через специфицированный протокол CGI (Common Gateway Interface) или внедренный позже API (Application Program Interface). (Хотя CGI называется "общим интерфейсом шлюзования", по сути дела, это одновременно некоторое подмножество протокола HTTP, и способ его соблюдения при взаимодействии сервера с внешней программой.)
При реализации на основе CGI общая схема реализации доступа к базе данных на стороне Web-сервера выглядит следующим образом:
при просмотре документа клиент встречает ссылку на страницу, содержащую одну или несколько форм, предназначенных для запроса данных из базы данных;клиент запрашивает эту страницу; помимо незаполненных форм страница может содержать общую информацию о базе данных и о назначении предлагаемых форм;если клиента действительно интересует информация из базы данных, которую можно получить на основе предложенных форм, то он заполняет одну из форм и отправляет заполненную форму на сервер;получив заполненную форму, сервер запускает соответствующую внешнюю программу, передавая ей параметры и получая результаты на основе протокола CGI;внешняя программа преобразует запрос, выраженный с помощью заполненной формы, в запрос на языке, понятном серверу баз данных (обычно это язык SQL).
Замечание: говоря формально, внешняя программа осуществляет компиляцию языка форм в базовый язык сервера баз данных; это может быть очень простая компиляция с использованием заготовок SQL-операторов, но тем не менее компиляция. Между прочим, многие люди недооценивают сложность этой проблемы. Компилятор - он и в Африке компилятор. Язык форм ничем не проще любого другого языка. Толмач - это наиболее ценный элемент нашего разрозненного общества. Как мне смешно, когда некоторые мои знакомые считают, что перевести запрос, заданный на языке форм, в представление на языке SQL проще, чем откомпилировать программу на языке Фортран в машинные коды;




внешняя программа взаимодействует с сервером баз данных; взаимодействие может быть прямым, если внешняя программа жестко привязана к конкретному SQL-серверу, или с использованием, например, протокола и соответствующего драйвера ODBC, если жесткая привязка отсутствует;после получения результатов запроса внешняя программа формирует соответствующую виртуальную или реальную HTML-страницу, передает ее серверу и завершает свое выполнение;сервер передает сформированную HTML-страницу клиенту, и на этом процедура доступа к базе данных завершается (как обычно, сервер разрывает транспортное соединение с клиентом).
На сленге Web-мастеров любая внешняя программа, запускаемая Web-серверомв соответствии со спецификациями CGI, называется CGI-скриптом. CGI-скриптможет быть написан на языке программирования (Си, Си++, Паскаль и т. д.)или на командном языке (языки семейства shell, perl и т. д.). CGI-скрипт,выполняющий роль посредника между Web-сервером и другими видами серверов(например сервером баз данных), называется шлюзом (видимо, более правильно было бы использовать термин CGI-шлюз). Наличие CGI-скриптов на стороне Web-сервера позволяет, в частности, перенести часть логики приложения из клиента в сервер. CGI-шлюзы представляют собой средство для организации трехзвенной (в общем случае, многозвенной) архитектуры клиент-сервер.
В спецификациях CGI предусмотрены четыре способа взаимодействия Web-сервераи CGI-скрипта (по крайней мере в среде ОС Unix). Первый способ состоит в использовании создаваемых сервером переменных окружения, через которые передается как общая информация, независящая от функциональных особенностей CGI-скрипта (например имя и версия Web-сервера), так и специфические данные, определяющие поведение CGI-скрипта (скажем набор значений, введенных в форму на стороне клиента). Второй способ заключается в формировании параметров argc и argv, которые передаются функции main CGI-скрипта (как если бы CGI-скриптвызывался командной строкой в интерактивном режиме). Этот способ применяется для реализации ограниченного класса запросов ISINDEX. Наконец, входные параметры могут передаваться CGI-скрипту через файл стандартного ввода, а CGI-скрипт может передавать Web-серверу результирующие данные через файл стандартного вывода.


Как видно, при использовании CGI вся интерпретация пользовательского запроса производится CGI-скриптом. Скрипт может быть предельно жестким, ориентированным на выполнение запроса к фиксированной таблице фиксированной базы данных, или относительно гибким, способным выполнить произвольный запрос к одной или нескольким таблицам базы данных, идентифицируемой в параметрах клиента.
Что касается API, то для людей, знающих одновременно Unix и операционные системы вообще, ситуация предельно ясна. Запуск независимого "тяжеловесного" процесса стоит немало. Загрузка и выполнение еще одной программы в уже существующем адресном пространстве по сравнению с предыдущем вариантом гораздо дешевле. Нет никаких новых идей. API - это, фактически, дешевый способ (хотя и небезопасный: понятно, почему?) выполнить в адресном пространстве сервера WWW программу, которая соответствует спецификациям на языке HTML(объясняю, почему; никто не захочет впустить в свою квартиру на предмет хотя бы временного жительства незнакомого человека; внешние программы незнакомы серверу). Такая программа должна быть заранее подготовлена и включена в библиотеку, из которой сервер может производить динамическую загрузку (например, такая библиотека может быть разделяемой - shared library). Т. е. смысл не меняется, меняется только реализация.

Единство в многообразии


Следует отметить, что JavaScript - это не единственный язык управления
сценариями просмотра документов. Microsoft подготовила свою версию аналогичного
языка - VBScript на основе Visual Basic. Кроме того, управлять сценарием
просмотра можно и из Java-апплетов, что, конечно, сложнее, но зато более
надежно и безопасно. При этом программист получает все преимущества наследования
и прочие атрибуты объектно-ориентированного программирования. В конце концов,
для создания фреймов и окон можно использовать атрибуты соответствующих
контейнеров HTML, которые позволяют делить рабочую область экрана на фрагменты,
перекрывать объекты и восстанавливать первоначальный вид страницы. Таким
образом, к настоящему времени существует по меньшей мере три способа управления
сценариями просмотра гипертекстовых баз данных Web, каждый из которых по-своему
хорош. Какой из них выбрать - это дело автора Website.
Павел Храмцов - руководитель группы РНЦ "Курчатовский
Институт". С ним можно связаться по электронной почте:



Еще два интерфейса


Непосредственно к www и lynx примыкают интерфейсы SlipKnot и I-COM. Не будем останавливаться на разнице между ними, а постараемся объяснить для чего они нужны. SlipKnot и I-Com предназначены для доступа к Web по коммутируемой линии. Изюминка этих программ в том, что пользователю не надо получать IP-адрес для своего удаленного компьютера: ему требуется только вход на машину в режиме удаленного терминала. В телеконференции comp.infosystems.www.windows.browsers недавно велась достаточно бурная дискуссия о том, нужны ли SlipKnot и I-Com и если да, то для чего? Ответна этот вопрос дает внимательное рассмотрение маршрутизации в сетях IP. Функции маршрутизатора в сетях IP выполняют шлюзы - это либо компьютер TCP/IP, стек которого сконфигурирован для работы в качестве шлюза, либо устройство-маршрутизатор. Удаленные машины, подключаемые по телефонной линии к локальной сети, как правило имеют соединение по протоколу SLIP или PPP. Но это значит, что им надо раздавать адреса, отличные от машин локальной сети.
Некоторые системы разрешают использовать адреса локальной сети и для удаленных машин, но в этом случае такая настройка может быть выполнена только на машине-шлюзе. А что делать тем пользователям, которые не являются администраторами сетей и не имеют привилегированного доступа на машинах-шлюзах, но имеют возможность настроить свой компьютер для работы с модемом и обеспечивать доступ в режиме удаленного терминала по телефонному каналу? Именно для этого случая и разработаны SlipKnot и I-Com. Каждая из этих программ дозванивается до компьютера, подключенного в Internet, вводит идентификатор пользователя и его пароль и, после успешного входа в систему, запускает либо www, либо lynx, которые и передают информацию на машину пользователя. При этом никаких протоколов семейства TCP/IP на конечном этапе (www-SlipKnot) не применяется- вся коррекция ошибок возложена на протоколы модема. Обе программы реализованы для среды Windows и позволяют реализовать форматирование текста в соответствии со стандартом HTML 2.0. Программы позволяют работать и с графикой, но эти возможности сильно ограничены.



Фреймы и окна


При работе с фреймами и окнами в предыдущих версиях JavaScript постоянно приходилось отслеживать последовательность открытия окон и фреймов для того, чтобы аккуратно их потом закрывать. На некоторых неточностях работы с окнами были основаны так называемые mail-bombs. Суть этих "подарков" заключалась в том, что если пользователь по почте принимает документ, который состоит только из одной команды - window.close(), то система, не спрашивая пользователя, закрывала текущее окно, а в этот момент таким окном является окно электронной почты. Теперь перед тем, как что-либо закрыть, система будет спрашивать разрешения. Правда, опять-таки не всегда. Если в момент получения команды на закрытие окна на экране только одно окно Navigator, то система его закроет без каких-либо комментариев.
Однако изменения в работе с окнами и фреймами этим не исчерпываются. Во-первых, в систему введено новое свойство opener, которое определено для текущего окна или фрейма, а также методы blur и focus распространены на работу с окнами.
Свойство opener определяет окно документа, который вызвал открытие окна текущего документа. Свойство определено для любого окна и фрейма. Если необходимо выполнить некоторые функции по отношению к окну, открывшему данное окно, то можно использовать выражение типа: window.opener.[method].Например, если требуется закрыть окно-предшественник, то можно просто выполнить метод close - window.opener.close().
Точно таким же способом можно изменить содержание этого окна при помощи методов write или writeln. Можно менять и другие свойства объектов в окне-предшественнике. Следующий пример взят из дополнений к спецификации JavaScript компании Netscape Communications:
window.opener.document.bgColor="cyan"
В данном случае для окна-предшественника определен светло-голубой цвет фона.
Но самое замечательное, что предшественника можно менять. Таким образом, автор получает возможность открывать и закрывать окна не в строго иерархической последовательности, а произвольно. Управление многооконным интерфейсом в этом случае становится более гибким:

window.opener= new_window window.opener = null
Первый пример переназначает для текущего окна окно-предшественник, в то время как второй вообще защищает предшественника от каких-либо действий. Все, что было сказано об окнах, распространяется и на фреймы, которые являются просто частным случаем окна.
Часто при работе с фреймами один фрейм может быть порожден путем разбиения другого на части. Если при этом потребуется обратиться к окну-предшественнику фрейма-предшественника, то свойство opener здесь незаменимо. В предыдущей статье было рассмотрено закрытие окна с фреймами путем загрузки в окно parent страницы терминатора. С появлением свойства opener необходимость в такого рода фокусах отпала.
Как видно из этого примера, разработчики языка следуют за пожеланиями авторов Web-узлов и практикой применения JavaScript.
Кроме обращения к различным свойствам окон и фреймов разработчики расширили действие методов blur и focus с фреймов до окон. Теперь не только фрейм, но и окно может быть сделано текущим при помощи метода focus или, наоборот, переведено в фон при помощи метода blur. В ряде случаев, например при порождении нескольких страниц, обращение к этим функциям бывает довольно полезным.

Графика


До Navigator 3.0 в JavaScript были только встроенные объекты типа Image. В новой версии языка появился конструктор для этого типа объектов:
new_image = new Image()
new_image = new Image(width, height)
Часто для создания мультипликации формируют массив графических объектов, которые потом прокручивают один за другим:
img_array = new Array()
img_array[0] = new Image(50,100)
img_array[1] =new Image(50,100)
...
img_array[99] = new Image(50,100)
У объекта Image существует 10 свойств, из которых, на мой взгляд, самым важным является src. Так, для присваивания конкретных картинок элементам массива img_array следует воспользоваться следующей последовательностью команд:
img_array[0].src = "image1.gif"
img_array[1].src = "image2.gif"
...
img_array[99].src = "image100.gif"
В данном случае можно было воспользоваться и циклом для присвоения имен, так как они могут быть составлены из констант и значения индексной переменной.
В новой версии языка объект типа Image может быть поименован в HTML-теге IMG. После этого можно обращаться к нему по имени. Здесь следует учитывать, что если Image применяется внутри формы, то он является свойством этой формы. В одном случае для следующего графического объекта должны быть использованы разные составные имена:
<img name=car src=car.gif>
<form name=kuku>
<img name=car src=car.gif>
</form>
document.kuku.car.src = "car1.gif"
В первом случае задан поименованный объект типа IMG, а во втором объект этого же типа, но внутри формы.
Однако наиболее часто в примерах использования скриптов можно встретить обращение к Image по индексу в массиве всех графических объектов данной страницы. Если наш объект, например, второй Image на странице, то будь он внутри формы или за ее пределами, к нему всегда можно обратиться по индексу: document.images[1].src = "car1.gif". Расширяя пример с массивом Image, построим теперь документ, в котором будет встроена мультипликация, определенная нашим массивом:

<HTML> <HEAD> <SCRIPT>
function multi_pulti() {
img_array = new Array()
img_array[0] = new Image(50,100)
...
img_array[99] = new Image(50,100)
img_array[0].src = "image1.gif"
...
img_array[99].src = "image100.gif"
n=0
while(n==0){
document.images[0].src = img_array[0].src
...
}</SCRIPT>
</HEAD>
<BODY onLoad="multi_pulti()"> <img src=image1.gif> </BODY>
</HTML>
Довольно часто используют не мультипликацию, а выбор картинки через OPTION, другой новый объект JavaScript. При этом можно через поле формы SELECT менять не только саму картинку, но и гипертекстовую ссылку, которая может быть связана с ней. На гипертекстовую ссылку также можно выходить по индексу:
document.links[index].href = kuku.html
Данный прием оправдан и с точки зрения интерфейса навигатора. При применении такого рода массивов ссылок не требуется перечислять их, а также листать страницы в рабочей области навигатора - можно просто выбрать ссылку из "выпадающего" меню. Другой способ для сокращения числа нажатий на клавиши - использование событий. В том же объекте OPTION можно применять событие onChange, что делает необязательным нажатие кнопок типа submit. В этом случае достаточно будет просто выбрать альтернативу и перейти к новой странице сразу после выбора.

Hewlett-Packard объединяется с Microsoft и Netscape для печати документов HTML


Microsoft - не единственный монополист, стремящийся запустить свои щупальца в Internet. Ведущий производитель принтеров, компания Hewlett-Packard, тоже намерена расширить свое присутствие в World Wide Web.
HP заключила два практически одинаковых соглашения с Microsoft и Netscape Communications с тем, чтобы встроить в принтеры поддержку языка гипертекстовой разметки документов HTML (HyperText Markup Language), который является стандартным средством представления данных в Internet.
Сегодня из-за недостатка стандартов, относительно низкого разрешения графических файлов в Internet и отсутствия правил форматирования документов, единых для Internet и принтеров, которое влечет за собой потерю данных, осложняется распечатка информации непосредственно из Internet.
Хотя HP собирается работать с Microsoft и Netscape по отдельности, компания официально заявила, что считает себя своего рода связующим звеном, призванным обеспечить согласование различных стандартов.
"Пока не решено, как и когда будет реализована поддержка HTML в принтерах и насколько изменится их архитектура", - говорит менеджер по маркетингу отделения лазерных принтеров Джим Лионс.
"Мы могли бы расширить PCL (графический язык, поддерживаемый принтерами HP) для поддержки HTML, но другие варианты тоже возможны", - считает Лионс.
Несмотря на расплывчатость обещаний и отсутствие каких-либо сроков, аналитики высоко оценивают новое начинание HP и пророчат ему успех.
"К сожалению, Microsoft и Netscape используют различные методы поддержки печати HTML. Авторитет HP позволяет ей просто-напросто диктовать свои стандарты другим производителям", - говорит Билл Флинн, менеджер консультационной службы Lyra Research.
"Соглашения с Microsoft и Netscape позволяют с уверенностью утверждать, что на чем бы HP не остановила выбор, это станет частью базового множества HTML", - считает Флинн.



HP собирается улучшить качество печати документов Internet


Расширения HTML позволят печатать только выбранные части документовВстроенная поддержка HTML обеспечит увеличение скорости распечатки документовБудет увеличена разрешающая способность и точность форматированияРасширения HTML позволят печатать через Internet документы в режиме WYSIWYG - Том Квинлан

#8/96



Идущие часы


Другой, часто встречающийся пример на странице со скриптами JavaScript
- идущие часы ().
В этом примере реализовано сразу три приема использования JavaScript:
часы, бегущая строка и предупреждение.
Часы реализованы в строках, которые следуют за комментарием "//Clock".
В них также применяется функция setTimeout и объект DATE.
Прежде чем отобразить время, программа получает текущее значение времени
через объект DATE. Считается, что после выполнения программы все объекты
будут удалены из памяти, что реально не всегда происходит. Для отображения
времени используются методы, которые определены для объекта DATE. Значения
часов минут и секунд объединяются в строку при помощи операции конкатенации
"+", и результат отображается в поле формы.
О бегущей строке мы уже говорили достаточно подробно, поэтому теперь
предлагаю обратить внимание на функцию alert в форме kuku.
Это встроенная в JavaScript функция, которая предупреждает пользователя
о том, что он запускает на сервере программу.



Internet в бизнесе и бизнес в Internet


Сергей Кузнецов
Парадоксально, что хотя сеть Internet возникла по инициативе и
при финансовой поддержке американских военных (начало истории
сети связано с выполненной по заказу Министерства обороны США в
университете г. Беркли разработкой стека сетевых протоколов
TCP/IP), в течение многих лет основными пользователями (и
разработчиками технических средств) Internet являлись ученые
(физики, химики, математики, программисты). Сегодня ситуация
изменилась. Выросшие инфраструктура и технические возможности
Internet дают привлекательную возможность использовать Internet в
ведении бизнеса. Соединенные Штаты и Западная Европа бурлят от
избытка энтузиазма. По нашему мнению, пришло время и для
бизнесменов России (наиболее дальновидные из них уже давно
обратили на это внимание).
Что же изменилось в Internet в последние годы? Как кажется, имеет
смысл рассматривать три аспекта: технические возможности и
потенциально доступные услуги; обеспечение доступа к Internet;
имеющиеся к настоящему времени примеры использования сети
Internet в традиционном бизнесе и развития нового рода бизнеса,
целиком ориентированного на Internet.
Технические возможности
В недавнем прошлом основным режимом использования Internet
являлся режим электронной почты (в России это так и сегодня).
Электронная почта - это абсолютно необходимое средство (и как мы
без нее жили еще пять лет тому назад?), однако в ряде важных
случаев (например, при необходимости оперативного поиска
информации на серверах, подключенных к сети) оно не является
достаточным: обмен информацией происходит слишком долго. В таких
случаях требуется подключение в Internet в режиме on-line. До
некоторого времени такое подключение обходилось пользователям
существенно дороже, чем подключение в режиме электронной почты
(расходуется больше телекоммуникационных ресурсов). Сейчас в
мировом масштабе (особенно, в Северной Америке и Западной Европе,
но частично это относится и к России) происходит скачкообразный
переход на новые технологии телекоммуникаций, сопровождающийся




резким увеличением пропускной способности каналов и таким же
резким снижением стоимости их использования. Это уже привело к
тому, что в США режим on-line сегодня является основным режимом
использования Internet. Естественно, это привлекает бизнесменов
(оперативный доступ к информации является очевидным требованием
бизнеса).
При использовании Internet в режиме on-line потенциально доступны
многие программные сервисные средства, обеспечивающие
подключение к серверу в режиме удаленного терминала (telnet),
перекачку файлов (ftp), произвести поиск необходимых
информационных ресурсов (Archie) и т.д. Однако подлинную
революцию в истории сервисных служб Internet вызвало появление
службы Всемирной Паутины (World Wide Web - WWW). Опора WWW на
технологию распределенной гипертекстовой организации информации
дает пользователям возможность комфортной работы с информацией в
сети без необходимости явного знания места ее расположения
(достаточно знать сетевой адрес сервера WWW, на котором находится
стартовая "домашняя" страница соответствующего гипертекстового
документа). Особо важно то, что потенциально любой пользователь,
подключенный к Internet в режиме on-line (обладающий так
называемым IP-адресом), может создать свой собственный
WWW-сервер, наполнив его актуальной информацией. Конечно, это
открывает широкие возможности для бизнеса (реклама, каталоги и
прайс-листы товаров и услуг, возможность дистанционных заказов и
т.д.).
Многие коммерческие ранее в Internet пугало полное отсутствие
безопасности информации при ее передаче по сети. По этой причине
многие крупные компании, отделения которых располагаются в разных
точках земного шара, до сих пор поддерживают собственные
корпоративные глобальные сети с гарантированной безопасностью.
Конечно, такие сети обходятся гораздо дороже, чем если бы
использовался Internet. Теперь начали появляться средства,
обеспечивающие безопасность информации при использовании
Internet. Например, компания Sun Microsystems объявила о выпуске
продукта SunScreen, основанного на использовании методов


криптографии на уровне передачи фрагментов сообщения. На основе
применения SunScreen компания может создать виртуальную
защищенную корпоративную подсеть внутри Internet. Основной
проблемой являются юридические ограничения использования методов
криптографии, устанавливаемые национальными правительствами.
Однако кажется, что открывающиеся для бизнеса перспективы
настолько заманчивы, что правительства международного сообщества
будут вынуждены принять согласованное положительное решение.
Доступ
Здесь мы в большей степени сосредоточимся на возможностях,
доступных сегодня в России (не претендуя на полноту, а лишь
представляя общую картину). История Internet в России началась в
1990 г., когда в результате совместной активности группы сетевых
программистов Курчатовского института и созданной к этому времени
Советской ассоциации пользователей ОС UNIX была создана сеть
Relcom, вошедшая в состав европейской сети EUnet, которая, в свою
очередь, была подключена к Internet. Первой коммерческой
компанией, обеспечивающей подключение пользователей к Internet и
их обслуживание, был кооператив Демос, состоявший в то время
почти целиком из сотрудников Курчатовского института и ИПК
Минавтопром (в то время это место было прибежищем наиболее
активных приверженцев ОС UNIX).
В 1992 г. в результате внутренних разногласий внутри Демос
произошел раскол, и было образовано акционерное общество Релком,
новая компания, специализирующаяся на развитии инфраструктуры
Internet в России и предоставляющая услуги конечным
пользователям. При этом право на использование выхода на Запад
через сеть EUnet осталось за АО Релком, а Демос договорился об
использовании американской сети UUnet. Важно заметить, что при
этом (после ряда согласовательных переговоров) удалось сохранить
связность Российской части сети Internet. На сегодняшний день
Релком и Демос остаются в России наиболее крупными коммерческими
компаниями, обеспечивающими для конечных пользователей доступ к
Internet и предоставление дополнительных услуг. По всей видимости


сеть Relcom и в будущем останется основной составляющей Internet
в России.
Однако это не означает, что для конечного пользователя выбор
обслуживающей компании ограничен кандидатурами Релком и Демос. В
последние годы в России появилось несколько новых компаний, также
обеспечивающих подключение пользователей к сети Internet и
оказывающих услуги. Как правило, это либо Российские отделения
соответствующих иностранных компаний, либо отечественные компании
со смешанным капиталом (кроме того, имеются некоторые компании,
финансируемые государством и пользующиеся особыми льготами при
использовании телекоммуникационных каналов, но не имеющие права
вести коммерческую деятельность). В ряде случаев стоимость услуг,
предоставляемых вновь образованными компаниями, ниже той, которая
требуется при использовании компаний Релком и Демос. В целом,
следует отметить, что появление в России конкурирующих компаний,
обеспечивающих услуги в связи с доступом к Internet,
исключительно полезно для российского бизнеса: появляется
возможность выбора на основе "money for value".
Бизнес
Имеется две принципиальных категории использования Internet в
целях бизнеса: Internet для бизнеса и бизнес в Internet.
Первая категория очевидна и традиционна. Сегодня Internet
обеспечивает надежный и дешевый обмен информацией между узлами
сети. Любой коммерческой компании требуются коммуникации либо с
другими компаниями, либо с отделениями между отделениями этой же
компании. Любой бизнесмен знает, что расходы на коммуникации
составляют немалую часть общего бюджета. В настоящее время
Internet позволяет добиться более высокого качества коммуникаций
при меньших расходах, включая возможности обмена мультимедиа
информацией в реальном масштабе времени (в частности, звуковой и
видео информацией). Будущие перспективы, хотя и не полностью
предсказуемы, выглядят очень заманчивыми.
Вторая категория более оригинальна и интересна. Internet
представляет собой некий виртуальный мир, который полностью
доступен пользователям сети. Любой полноценный клиент Internet


может автоматически стать частью этого виртуального мира, создав
и предоставив другим пользователям новую частицу информации.
Интерактивный характер взаимодействий в Internet позволяет
производить виртуальные (но в то же время вполне реально
доступные) сетевые библиотеки, видеотеки, магазины и т.д. Это
открывает новые пути для рекламы, маркетинга, продаж. Домашняя
хозяйка в Малаховке, не выходя из дома, сможет заказать и
оплатить мясорубку, имеющуюся на (виртуальном) складе в магазине
в Нижнем Вартовске. Очень существенны перспективы использования
Internet в банковском деле. Не Internet для банковской
активности, а банковская активность в Internet! Для этого,
конечно, особенно важны средства повышения безопасности
информации в сети, упоминавшиеся выше.
Похоже, что развитие Всемирной сети сетей приведет к полному
преобразованию бизнеса в этом мире. Конечно, люди всегда
останутся людьми, а бизнес - бизнесом, но новый бизнес станет
более выгодным и более удобным для людей.

Использование окон для построения HELP


В заключение вернемся к первому примеру. В нем был описан вызов, который
приводит к открытию окна контекстного help и загрузки в него HTML-страницы.
На этой странице есть форма с кнопкой close, при нажатии на которую
текущее окно закрывается. Так как в этом случае текущим является окно с
help, то закрывается именно оно. Все это замечательно, если не используются
фреймы в help. При применении фреймов текущим окном будет не главное окно,
а окно фрейма. Если help состоит из нескольких фреймов, то простое выполнение
функции window.close() не приведет к ожидаемому результату - закрытию
всего окна. Корректнее всего будет загрузить в окно-предшественник (имя
по умолчанию - _parent) пустую страницу, сделать ее текущей и после
этого удалить. Вся страница, удаляющая окно _parent, состоит из контейнера
SCRIPT ().
Вообще говоря, использовать такие страницы-терминаторы следует аккуратно.
Ведь загрузка этой страницы может привести к завершению работы браузера,
если других открытых страниц в данный момент нет.
Написание данных скриптов заставляет сожалеть о том, что в JavaScript
нет наследования. Дело в том, что, даже если некоторое окно порождено из
другого окна, функции, определенные в окне-родителе, в новое окно не передаются.
Это означает, что автору придется их дублировать в каждом документе или
прибегать к помощи включаемых файлов, что разрывает технологический процесс
разработки страниц.



История создания SNMP.



Иваненко С.

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

После многих заседаний IAB (Internet Architecture Board) опубликовал
в апреле 1988 года эпохальный
, в котором
призвал к скорейшему созданию элементов Простого Сетевого Управления
(Simple Network Management).

Работа по созданию SNMP закипела. Многие идеи, лежащие сегодня в основе
SNMP, были заимствованы из предыдущих исследований по мониторингу Internet-
маршрутизаторов (исторически называемых шлюзами - gateways), явивших на свет
Simple Gateway Monitoring Protocol (SMGP). И уже в августе 1988 появились
три основополагающих документа:





Впоследствии эти документы были переизданы и дополнены до определения
следующего поколения SNMP: RFC 1155, 1156 и 1157, которые в свою очередь,
также подверглись переработкам.

В конце концов, в мае 1991 года была закончена работа по созданию
первой версии протокола SNMP, которая нашла свое отражение в своде
следующих документов:




- Определяет структуру управляющей информации в виде глобального дерева.


- Представляет синтаксис определения имен переменных управления.



- Дополняет RFC 1155 в части синтаксиса определения имен переменных.



- Содержит список более ста наиболее необходимых переменных, отвечающих
за конфигурацию, статус и статистику систем, входящих в TCP/IP сеть.



- Определяет сообщения, которыми обмениваются управляющая станция и
об'ект управления для получения и обновления значения переменных.


- Определяет trap(alarm)-сообщения, посылаемые системой при значительных
изменениях в ее конфигурации.

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

всего спектра сетевого оборудования - мостов, маршрутизаторов, модемов...
широкого круга интерфейсов - Point-to-Point, DS1, DS3, X.25, Frame Relay,
Ethernet, Token Ring, FDDI, и др.





Java-байт код


Гораздо более интересным является разработка мобильных Java байт-кодов,
которые в терминах Java-технологии называются applets. Концепция
applets была специально разработана для использования в World Wide
Web. Задача applet-ов "оживить" Web. Типичным примером такого
применения applet-ов является приветствующий пользователя симпатичный
человечек из документации по программе HotJava. Для использования
applet-ов в язык гипертекстовой разметки HTML был введен специальный
тег APP, в котором указывается имя applet-а и параметры его вызова. При
этом обработка HTML-документа программой-интерфейсом происходит также
как и при встроенной в документ графике. Сначала запрашивается
документ, анализируется его содержание, и, если есть теги APP,
подгружаются applet-ы. После того как все applet-ы получены они могут
быть выполнены. Из этой схемы ясно, что программа интерфейс является
одновременно и интерпретатором байт-кода Java. Используя библиотеку
классов Java можно разработать довольно эффектные мультимедийные
страницы с движущейся графикой и звуком. Кроме этого применение
байт-кода позволяет организовать распределенные процедуры вычислений с
использованием различных серверов, с которыми можно взаимодействовать по
разным протоколам. Собственно возможность подключения новых протоколов
обмена также декларируется как одно из достоинств нового подхода. Но
даже у неискушенного пользователя сразу возникает закономерный вопрос о
безопасности машины, на которой запускается приложение. Как быть с
традиционным девизом "доверяй, но проверяй" при копировании
неизвестного программного обеспечения? Не надо быть семи пядей во лбу,
чтобы понять, что при использовании HotJava или Navigator пользователь
вольно или невольно запускает на своей машине чужие программы, которые
могут не только "оживить" HTML-страницы, но и несколько "встряхнуть"
владельца компьютера, на котором эти страницы "оживают". Ведь, в принципе
, applet-ы могут выполняться и незаметно для пользователя в фоновом

режиме. Ответ на этот вопрос прост: при разработке applet-ов
используется компилятор байт-кода, который имеет встроенную систему
безопасности, а сама программа просмотра, также анализирует получаемый
байт-код на наличие в нем запрещенных операций. Однако, если отбросить
детали механизмов защиты HotJava и Navigator, все сводится к запретам
записи информации на диск и по адресам оперативной памяти с
использованием адресной арифметики. Совершенно очевидно, что этого явно
недостаточно для построения надежно защищенной системы. Существует
масса способов внедрения в систему и без указанных выше действий,
не говоря просто о непроизводительном использовании ресурсов компьютера.
Первая ласточка уже появилась на свет в виде сообщения CERT о
возможности разработки applet-а, который использует брешь в системе DNS,
и подменяет IP адреса. Правда эта "дырочка" обнаружена в Navigator, а
не HotJava, но и популярность первой программы не идет ни в какое
сравнение популярностью продукта Sun. Netscape уже об'явила о том, что
в систему защиты будут внесены изменения и программа будет проверять
IP-адреса, с которыми работает applet на идентичность с IP-адресом
HTTP-сервера, с которого applet получен. Но естественно встает вопрос о
том как же быть в этом случае с распределенными вычислениями, которые
должны произвести революцию на Internet? В принципе существует пока два
способа защиты: запрет выполнения Java байт-кода программой интерфейсом
и использование проверенных страниц. Запретить выполнение можно,
включив специальный режим настройки программ HotJava и Navigator.
Вообще же говоря, в телеконференции comp.lang.java энтузиасты
новой технологии на проблему безопасности реагируют примерно так - мы
же честные люди, которые не собираются писать всякие пакости. Для
реальной же защиты в программу-интерфейс придется вставить полноценный
firewall с возможностями конфигурирования TCP/UDP портов и анализа
содержания пакетов, и то, как показывает практика, это не приводит к
стопроцентной безопасности.

Java, JavaScript и включаемые модули


В новой версии языка есть возможность организовать взаимодействие между Java-апплетами и скриптами JavaScript. Достигается это за счет применения атрибута MAYSCRIPT в контейнере APPLET. Собственно, в JavaScript определен объект типа APPLET, к которому можно обращаться либо по имени, либо по индексу в массиве апплетов. У этого объекта есть только одно свойство - имя. Никакие другие свойства или методы для данного типа объектов не определены. Сами детали взаимодействия апплетов и скриптов лучше всего обсуждать в рамках программирования Java-апплетов, поэтому в данной статье мы эти особенности опустим.
Кроме апплетов JavaScript позволяет работать и с включаемыми модулями. Последние представляют собой массив соответствующего типа, для которого определен ряд свойств. Используя эти свойства, можно определить установленные включаемые модули и их соответствия MIME-типам. Назначать включаемые модули или манипулировать ими нельзя.



Java-приложения


Система программирования на Java позволяет компилировать программы для
компьютерной платформы, на которой она стоит в том же ключе как и
любая другая, например, С или С++. В этом случае главными отличиями
Java-программ, которые называются Java-applications, является
использование библиотеки Java-классов, которые обеспечивают разработку
безопасных, распределенных систем. При этом утверждается, что язык
позволяет делать гораздо меньше ошибок при разработке программ. Главным
при этом является тот факт, что в Java напрочь отсутствует адресная
арифметика. Анализировать возможности "проколов" в компиляторе Java
пока представляется крайне затруднительно, т.к. он широко не
применяется и craker-ы еще не начали его пристальное изучение, в
отличии от других компонентов Java-технологии, где "дырочки"
обнаружились незамедлительно. А вот по поводу отсутствия адресной
арифметики можно сказать, что у дедушки языков программирования -
Fortran, ее тоже не было, но за тем она появилась и являлась
чрезвычайно мощным средством повышения эффективности
программных кодов. Понятно, что ни о какой мобильности
откомпилированного приложения говорить не приходится. Для его переноса
нужен соответствующий компилятор и библиотеки. По сравнению с
механизмом RPC Java - это большой шаг вперед, но многие ли разработчики
страниц Web воспользуются этой возможностью?



Java-технология


Словосочетание "Java-технология" уже несколько раз употреблялось в этой
статье. Пора сказать о том, что я под ним понимаю. Java технология
состоит из по крайней мере трех основных компонентов: , и
. Первые два компонента предложены
Sun, а JavaScript - это творение Netscape. Рассмотрим сначала общие
свойства каждого компонента этой триады, а за тем посмотрим на их место
в сложившейся технологии World Wide Web.




JavaScript


Третьей составляющей Java-технологии является язык сценариев управления
просмотром гипертекстовых страниц JavaScript. В девичестве LiveWare,
этот язык разрабатывался компанией Netscape Communication еще до
анонсирования Java. Для специалистов в области теории и практики
гипертекстовых систем появление этого языка было давно ожидаемым
событием. Практически любая локальная система имеет средство описания
сценариев просмотра своих информационных страниц, появление такого
механизма в World Wide Web было делом времени. При этом и теория и
практика реализации такого языка были достаточно хорошо изучены,
начиная от демонстраций Дуга Энжельбарда, и кончая системами типа Hyper
Card, Hyper Note, KMS и т.п.. Кроме того появление фреймов,
многооконность, динамическая загрузка страниц и ряд других расширений от
Netscape явно указывали направление развития Navigator. Надо сказать,
что технология LiveWare по своей архитектуре очень напоминала Java.
Та же возможность разработки приложений для сервера HTTP, мобильный
код, исполняемый Navigator. Но, кроме этого, в HTML страницы можно
встраивать еще и исходные тексты программ. Последняя возможность
превращает Navigator в самодостаточную среду программирования,
которую можно использовать не только при путешествиях по Internet, но и
в локальных системах. Используя JavaScript, можно организовать очень
гибки много оконный интерфейс с локальным контекстной справочной
системой и встроенной графикой при этом многие вопросы проверки
вводимых пользователем данных можно возложить на функции JavaScript. По
своим функциональным возможностям JavaScript довольно сильно уступает
Java, по крайней мере пока. Можно организовать открытие нового окна,
прокрутку текста, запрограммировать калькулятор, которых на сети уже
около двух десятков, проверку ввода, но не более того.



заставляет продолжить обзор возможностей


Павел Храмцов
Появление Netscape Navigator 3.0 и новой версии JavaScript 1. 1 заставляет продолжить обзор возможностей управления сценариями просмотра Website, который был опубликован в предыдущем выпуске "Открытых Систем сегодня"(). В новой версии языка были введены: возможность взаимодействия JavaScript и Java, определение установленных модулей расширений (plug-in), новые типы объектов(Area, Function, Image) и ряд других особенностей, которые, по мнению разработчиков, должны повысить мощь программирования на JavaScript. По своей природе JavaScript- это объектно-ориентированный язык программирования. В отличие от других языков данного типа, JavaScript не оперирует абстрактными объектами. Все его конструкции определены для объектов Navigator. Именно с этих позиций и следует рассматривать развитие языка.
Объект навигатора - это либо конструкция HTML, чаще всего контейнер, либо рабочая область программы Netscape Navigator. Если брать конструкции HTML, то каждый контейнер имеет атрибуты, которые в JavaScript рассматриваются в качестве свойств объекта.
Над объектами могут быть выполнены некоторые функции, которые в терминах JavaScript называются методами. Помимо методов существуют и просто функции, которые могут быть определены программистом.
Свойства объектов могут быть переопределены в процессе выполнения программ, что позволяет построить гибкие сценарии просмотра гипертекстовых страниц Website или "оживить" страницы. Однако не все свойства переопределяются. Некоторые свойства могут быть только прочитаны скриптом, но не изменены в процессе его выполнения.
Развитие языка идет в направлении расширения типов объектов Navigator, с которыми может манипулировать программист, а также изменения свойств объектов, точнее, расширения возможностей их переопределения.

JavaScript - средство создания "оживших" страниц Web


JavaScript, собственно говоря, - это объектно-ориентированный язык программирования, привязанный к Navigator, отдельные компоненты которого являются объектами этого языка. Часто пишут, что Java и JavaScript - близнецы-братья. Может быть, они и братья, но отнюдь не близнецы. Во-первых, для JavaScript не требуется специального компилятора, и сценарий размещается прямо в теле документа - его интерпретирует непосредственно Navigator. Конечно, возможности программирования анимации в JavaScript очень ограничены: можно организовать бегущую строку, идущие часы, меняющиеся картинки, но не более. Главным достоинством JavaScript является организация всего этого без использования сервера. Navigator с JavaScript позволяет организовать многооконную локальную гипертекстовую систему с контекстной справочной системой, что раньше требовало достаточно больших усилий программистов.
Все эти богатые возможности не даются просто так - за все приходится платить. Проводя опыты со сценариями на Windows 3.x, я очень скоро убедился, что "ожившие" страницы требуют очень много ресурсов, а иногда могут даже привести к "зависанию" системы. Разъяснения, полученные из comp.lang.javascript, ,а также аналогичного списка Netscape, выглядели примерно так: "Не валяй дурака и ходи как все по камешкам - ставь многопотоковые Windows95, а лучше NT, и не морочь занятым людям голову". А если серьезно, то Navigator для Windows 3.1х является лишь калькой 32-разрядных версий этой программы, и так как в 16-разрядной ОС нет реальной вытесняющей многозадачности, то при использовании отложенных вызовов функций в цикле по setTimeout происходит просто "отъедание" ресурсов, которые далеко не безграничны.



Эпилог


Завершая обзор новых технологий World Wide Web, напомним еще раз основные тенденции: повышение качества отображения страниц Web, программирование страниц Web, добавление новых измерений к страницам, возможность построения многооконных интерфейсов, "оживление" интерфейса, повышение интерактивности на линии "интерфейс-сервер". Использование Web в бизнес-целях заставляет задуматься и о шифрование трафика, что уже реализовано во многих коммерческих версиях интерфейсов. Мы являемся свидетелями рождения новой отрасли, которая в данный момент определяет свои стандарты. Наиболее смелые из отечественных программистских команд на равных могут принять и принимают участие в этом соревновании.
Павел Храмцов - руководитель группы РНЦ "КурчатовскийИнститут". С ним можно связаться по тел. (095) 196-9124 или по электронной почте: .



Коротко о главном


Начало 1996 года ознаменовано появлением нового языка программирования Java.
Если быть более точным, то широкая публика могла "пощупать" это новое
произведение от Sun Microsystems еще весной 1995 года, когда впервые на
компьютерах этой фирмы появилась новая программа просмотра страниц
World Wide Web - HotJava. На домашней странице WWW Consortium Java была
внесена в список так называемых Мобильных Кодов - одного из
перспективных направлений развития технологии World Wide Web. И вот в
конце 1996 года на Западе начался бум Java, который к моменту
проведения выставки Unix-Expo`96 докатился и до нашей страны.
На выставке Sun устроила настоящее промывание мозгов компьютерной
общественности под названием "Java - революция на Internet", посвятив
этому целый выставочный день. Не менее впечатляющая компания по
пропаганде Java развернута и в печати. При этом популяризацией
возможностей этого языка занимаются не только специализированные
компьютерные издания, но и, подражая The Economist и The New York
Times, статьи на эту тему разместили Коммерсант Дейли и Известия. И это
при всем при том, что реально ничего действительно существенного кроме
того, что новую технологию залицензировали с десяток крупных
компьютерных фирм, включая Microsoft, еще не произошло. При этом речь
теперь ведется не просто об языке Java, а об технологии Java, которая
призвана осуществить прорыв в реализации распределенной обработки
данных в сети Internet. Не впадая в эйфорию от возможностей новой
технологии, но и не отметая этих возможностей, попробуем разобраться в
том, что такое Java-технология в чем ее сила, проблемы и будет ли она
столь же популярной как и World Wide Web.



Массивы


Первым типом новых объектов, которые мы рассмотрим, являются массивы. Тип Array введен в JavaScript 1.1 для возможности манипулирования самыми разными объектами, которые может отображать Navigator. Это - список всех гипертекстовых ссылок данной страницы Website, список всех картинок на данной странице, список всех апплетов данной страницы, список всех элементов формы и т.п. Пользователь может создать и свой собственный массив, используя конструктор Array(). Делается это следующим образом:
new_array = new Array()
new_array5 = new Array(5)
colors = new Array("red", "white", "blue")
Размерность массива может изменяться. Можно сначала определить массив, а потом присвоить одному из его элементов значение. Как только это произойдет, изменится и размерность массива: colors = new Array() colors[5] = "red". В данном случае массив будет состоять из 6 элементов, так как первым элементом массива считается элемент с индексом 0.
Для массивов определены три метода: join, reverse, sort. Join объединяет элементы массива в строку символов, в качестве аргумента в этом методе задается разделитель:
colors = new Array("red", "white", "blue")
string = acolors.join(" + ")
В результате выполнения присваивания значения строке символов string мы получим следующую строку: string = "red + white + blue". Другой метод, reverse, изменяет порядок элементов массива на обратный, а метод sort отсортировывает их в лексикографическом порядке.
У массивов есть два свойства: length и prototype. Length определяет число элементов массива. Если нужно выполнить некоторую рутинную операцию над всеми элементами массива, то можно воспользоваться циклом типа:
color = new Array("red", "white", "blue")
n = 0 while(n != colors.length)
{... операторы тела цикла ...}
Свойство prototype позволяет добавить свойства к объектам массива. Однако чаще всего в программах на JavaScript используются встроенные массивы, в основном графические образы (Images) и гипертекстовые ссылки (Links).



Минимизация-максимизация окна и его удаление


Выполнение вычислений и работа с таблицами весьма популярны, но не столь
значимы, как управление окнами браузера. Рассмотрим пример такого управления.
Идея состоит в том, чтобы средствами JavaScript реализовать "свертывание"
и "развертывание" окна браузера. Примеры
и демонстрируют связанные друг с другом HTML-страницы.
сворачивает окно. Для этой цели сначала
создается маленькое окно с иконкой, а потом текущее окно удаляется. На
самом деле в данном случае надежность работы этого скрипта будет зависеть
от алгоритма интерпретации и назначения текущего окна программой интерпретации.
В Netscape Navigator 2.0 текущим оставалось окно, в котором исполняется
скрипт, поэтому наша программа будет работать правильно. Маленькое окно
становится текущим только после удаления большого окна.
Максимизация окна показана на . Данный
фрагмент по алгоритму точно совпадает с предыдущим, но выполняет прямо противоположную
функцию - разворачивает (восстанавливает) свернутое окно. При этом маленькое
окно также удаляется. Собственно, первая страница - это файл iconize.htm,
а вторая - test_icon.htm.



Модели объектов


Отдельной интересной темой является об'ектно-ориентированный характер
JavaScript. Если с Java более менее все понятно: есть декларация
об'ектов, наследование свойств об'ектов и т.п., то с JavaScript все
несколько иначе. Весь язык ориентирован на встроенные об'екты Netscape
Navigator: окна, формы, поля форм, элементы рабочих областей Navigator
и т.п. Это сильно облегчает обучение языку и позволяет сразу писать
интересные и полезные программы. Но вот с наследованием свойств
об'ектов и обменом данными между различными объектами, например двумя
окнами Navigator, дела обстоят из рук вон плохо. Эти возможности вообще
никак не реализованы. Правда есть намеки на то, что в будущем что-то
появится, типа подкласса parent класса window, но пока JavaScript
сейчас - это просто язык сценариев просмотра HTML страниц.
Правда надо сказать, из-за него Navigator стал довольно тяжелой
программой для персональных компьютеров. При организации HTML страниц
со встроенной графикой и JavaScript функциями открытия/закрытия окон и
проверкой ввода ресурсов 486 компьютера с 8Mb памяти и Windows 3.x
хватает едва-едва. Аналогичная ситуация происходит и при использовании
Windows NT c 16Mb оперативной памяти. Вообще говоря, пользоваться
JavaScript следует аккуратно, думая о потенциальных пользователях. Так
например размещение "бегущей" строки в status bar при переходе к другой
странице довольно сильно мешает пользователям, которые используют
медленные линии для подключения к сети, т.к. именно в этом поле
отображается статистика переданных байтов с сервера клиенту. К тому же
бегущая строка для пользователей Windows 3.x хороша только в том случае
если на ней не задерживаться. функция setTimeout, которая выполняет
отложенный вызов прокрутки текста, приводит к от'еданию ресурсов
системы, что может привести к зависанию машины, если оставить страницу
с бегущей рекламой на некоторое время. Из раз'яснений, полученных в
телеконференции comp.lang.javascript списка javascropt@oberon.org,
следовало, что отложенное выполнение порождает новый поток, если речь




идет о много потоковых операционных системах, а так как Windows 3.x
таковой не является, то функция реализуется путем рекурсии, что
приводит к "поеданию" ресурсов. Наиболее логичным выходом в этой
ситуации рекомендуется считать установку 32-разрядной ОС Windows`95 или
NT. Надо сказать, что переход на NT этой проблемы не снимает, т.к. сама
ОС требует гораздо больше ресурсов. Кроме того довольно часто и при
использовании HotJava, и при использовании Navigator под NT появляется
сообщение "protection violation", что приводит к аварийному завершению
программы (речь идет не о моих программах а о тех, которые я загружал
из Сети).
Сконцентрируем теперь внимание на том каково место Java-технологии в
рамках технологии World Wide Web, где, собственно, и прочат прорыв к
новым технологическим высотам. Рассмотрим схему взаимодействия программ
в рамках Web.

Как видно из этой схемы, при использовании обычных программ-интерфейсов
могут быть использованы только в качестве API-модулей сервера или CGI-скриптов, что не выделяет их из общего набора других программ этого типа.

Область применения Java расширяется только в случае применения Netscape Navigator или HotJava. Здесь уже возможно создать набор , которые будут выполняться при помощи этих программ на компьютере пользователя.

При использовании HotJava и Java Development Kit можно расширить возможности программы-интерфейса за счет разработки новых модулей.

Наследование кода скриптов различными страницами


Отсутствие какого-либо наследования между различными страницами Web-узла заставляло разработчиков перетаскивать из одной страницы в другую довольно большое количество часто используемых функций и переменных. Разговоры о том, что было бы неплохо получить доступ к глобальным ресурсам или возможность определять такие глобальные ресурсы, ведутся с самого момента появления JavaScript. К сожалению, стройного логичного механизма передачи параметров, функций и переменных от одного окна или фрейма к другому нет и в JavaScript1.1. Однако некоторые шаги в этом направлении сделаны.
У контейнера SCRIPT появился атрибут SRC. Это дает возможность авторам строить своеобразную библиотеку функций, к которым можно обращаться из любой страницы, где будет ссылка на такую библиотеку. При этом вовсе необязательно размещать саму библиотеку на том же сервере, где находятся и гипертекстовые страницы узла. Можно использовать и чужие функции, написанные кем-либо из ветеранов программирования на JavaScript в любой точке земного шара. В атрибуте SRC применяется обычный URL.
Внутри файла скриптов не используются теги SCRIPT. Это обычный файл с использованием определений функций и переменных. Естественно, что применение чужих скриптов может обернуться не только полезными приобретениями, но и непредсказуемыми проблемами.
Для обычных пользователей страниц узла подкачка большого количества скриптов может стать просто дополнительным источником затрат. Скорее всего, понадобится пара функций из библиотеки на одной странице, а качать придется всю библиотеку.
Другой новой возможностью работы с функциями стало введение объекта Function. Объект Function порождается конструктором Function:
new_Function = new Function(arg1,arg2,...,argn, function_body)
Главное отличие от обычного декларирования функции заключается в том, что в данном случае порождена переменная new_Function, с которой можно работать, как с любым другим объектом. При обычном переопределении функции такой переменной не порождается.
Как любой объект, Function имеет свои свойства, но не имеет методов. В качестве свойств функции выступают аргументы и возможность назначения новых свойств через prototype.
В заключение разговора о функциях и наследовании хочется еще раз обратить внимание на свойство opener окон и фреймов. Его можно использовать при обращении к объектам страницы-родителя, что позволяет компенсировать отсутствие наследования и глобальных переменных в JavaScript.



Немного истории


Название статьи спровоцировала история появления Java, которую автор
прочитал в материалах, любезно подготовленных Sun для выставки
Unix-Expo`96. Согласно этой истории технология Java(Кофе) родилась из
проекта Oak (Дуб), основной целью которого была разработка
об'ектно-ориентированных средств описания и коммуникации различного
рода электронных устройств. Из-за неудачи этого проекта 1994 году опыт,
накопленный в рамках его реализации, было решено применить к продуктам
ориентированным на применение в Internet. В апреле 1995 года по сети
свободно распространяется HotJava - интерфейс просмотра страниц
World Wide Web для платформ Sun. Буквально через месяц Netscape
Communication - законодатель моды в разработке программ-интерфейсов
Internet, покупает лицензию на Java. В настоящее время HotJava
реализована не только для SunOS и Solaris, но и для многих других
Unix-платформ и Windows NT. Кроме HotJava мобильный код Java может
интерпретироваться и второй версией программы Netscape Navigator для
всех систем кроме Windows 3.x. Вот коротко история Java-технологии,
если опустить список фирм, купивших лицензию на Java, и даты
приобретения этих лицензий. Теперь рассмотрим на фоне каких событий
разворачивается внедрение новой технологии.

Главным событием 1995 года стал бурный рост применения глобальной сети
Internet для бизнеса в самых различных его проявлениях. Этот бум вызван
во-первых, наличием хороших сетевых интерфейсных программ, первое место
среди которых занимает Netscape Navigator, и, во-вторых наличием хорошо
развитой системы телекоммуникаций, главным образом в США, которая
обеспечивает доступ в Internet большого количества потенциальных
потребителей информации и услуг. Но Internet имеет несколько слабых
мест, которые тормозят его применение в серьезных коммерческих
приложениях. Во-первых, это безопасность. Сама технология TCP/IP не
имеет встроенных механизмов обеспечения безопасности, и следовательно
для организации виртуальных защищенных сетей на основе Internet
необходимо применять дополнительный программные средства. Во-вторых,
это целый букет проблем связанных с технологией World Wide Web, которые
характеризуются отсутствием возможности организации виртуального канала
связи, что характерно при работе с базами данных, для удаленных и
распределенных вычислений, отсутствием поддержки мультимедиа, что
необходимо для рекламной деятельности в Сети и ряда других приложений,
большой нагрузкой на сеть при реализации интерактивных приложений при
доступе к ресурсу по принципу "каждый с каждым". Именно на решение
некоторых из этих задач и ориентирована Java-технология.



О взаимоотношениях WWW и СУБД


Сергей Кузнецов
Появление Всемирной Сети Сетей Internet открыло новую эпоху в истории человечества. Сегодня никто в этом мире не должен чувствовать себя одиноким. Каждый человек соединен со всеми остальными, каждый с каждым и каждый со всеми. Каждый человек имеет доступ (по крайней мере, потенциальный) ко всей открытой информации. Только ленивые (или совсем бедные) люди могут жаловаться на недостаток информации. Большинство людей страдает от ее избытка.
Однако в мире существует масса информационных источников, владельцы которых готовы предоставить их в пользование человечества, но не могут этого сделать по причинам недостатков технологии Internet (а иногда просто потому, что незнакомы с имеющимися технологиями). Прежде всего это относится к научным базам данных.
На сегодняшний день основным способом распространения научных баз данных является их тиражирование на магнитных или оптических (CD-ROM) носителях. Конечно, это вполне разумный подход, но он ограничивает возможности быстрого доступа заинтересованных специалистов к изменениям в информации. (Говоря другими словами, это режим "off-line".)
Имеется множество баз данных, подключенных к Internet в режиме свободного доступа. Конечно, этими базами данных можно пользоваться. Но основная проблема состоит в том, что интерфейсы доступа к разным базам данных абсолютно различаются, так же, как и способы подключения баз данных к Internet. Имеются трудности как у тех, кто хочет пользоваться базами данных, так и у тех, кто хотел бы передать свою информацию в использование в режиме "on-line".
Наиболее популярным средством доступа к информации в Internet сегодня является служба "Всемирной Паутины" (World Wide Web). Как известно, в ее основе лежит идея распределенной гипермедийной информации. Явная навигация в Web позволяет добраться до самых разнообразных информационных серверов, содержащих специально подготовленную информацию (с использованием языка HTML). Конечно, хотелось бы, чтобы путешествуя в WWW, человек имел бы возможность добраться и до баз данных.




Однако общепринятая технология доступа к базам данных через Web отсутствует. Более того, часто кажется, что эта проблема не слишком заботит производителей программного обеспечения СУБД и Internet. Их больше занимает задача распространения в Internet мультимедийной информации (что действительно важно), чем обеспечение через службу Web доступа к обычным базам данных (а иногда и не очень обычным; приведем в качестве примера химические базы данных с графическими изображениями структурных формул).
Так что же мы имеем? Желание потребителей информации получить к ней доступ, стремление поставщиков информации обеспечить ее и отсутствие стимула в Internet для предоставления соответствующих возможностей. Но это не совсем так.
В Web имеется одна возможность, которую, в принципе, можно использовать для доступа к базам данных. Это формы. При навигации по страницам Web можно наткнуться на пометки, при остановке на которых вы получаете не готовую информацию, а некоторую форму, необходимую заполнить. Форма, заполненная в клиентской части системы, поступает на обработку соответствующей программе-переходнику(программному сценарию), связанной с данной форме в серверном узле Web.
С другой стороны, именно формы являются наиболее близким пользователям интерфейсом для непосредственного доступа к базам данных. Если посмотреть на излюбленные виды интерфейсов конечных пользователей баз данных, то можно увидеть, что сегодня 90% таких интерфейсов основывается на использовании форм. Формы разрабатываются на специализированных языках описания форм или с использованием интегрированных языков четвертого поколения. Применяются и средства автоматизированного построения (простых) форм на основе соответствующей схемы базы данных (например, для каждой таблицы реляционной базы данных может быть создана форма, заголовок которой совпадает с заголовком таблицы, а ширина полей определяется типами данных столбцов).
Этот простой подход, который не требует привлечения современных технологий Internet, ориентированных на обеспечение доступа к мультимедийной информации, может оказаться вполне достаточным для решения удобного доступа к традиционным реляционным научным базам данных. Если ограничиться SQL-ориентированнымибазами данных, то вполне можно представить себе несложный инструментальный пакет, который облегчает создание программ-переходников, связанных, с одной стороны, с формами, управляемыми сервером Web, а с другой стороны, обеспечивающих стыковку с СУБД. Возможно, такие средства не удовлетворят потребности бизнеса, но будут явно полезны в мире науки.
Сергей Кузнецов . главный редактор журнала "Открытые Системы".С ним можно связаться через Internet по адресу: .

Основы подхода к программированию на JavaScript


Идея JavaScript очень проста. Все операции, которые можно исполнять
в программе на JavaScript, описывают действия над хорошо известными и понятными
объектами, которыми являются элементы рабочей области программы Netscape
Navigator и контейнеры языка HTML. Собственно объектная ориентированность
JavaScript на этом и кончается. Никаких классов объектов, а тем более,
наследования в JavaScript нет. Есть только объекты с набором свойств и
набор функций над объектами, которые называются методами. Кроме методов
существуют и другие функции, больше похожие на функции из традиционных
языков программирования, которые позволяют работать со стандартными математическими
типами или управлять процессом выполнения программы. Еще в JavaScript есть
события - аналог программных прерываний. Эти события также ориентированы
на работу в World Wide Web, например загрузка страницы в рабочую область
Navigator или выбор гипертекстовой ссылки. Используя события, автор гипертекстовой
страницы и программы, ее отображающей, может организовать просмотр динамических
объектов, например бегущей строки, или управление многооконным интерфейсом.
Для встраивания скриптов в тело HTML-документа используется контейнер
SCRIPT. Не все браузеры способны распознавать и исполнять скрипты, поэтому
само тело скрипта помещается в контейнер комментария. Рассмотрим .
В этом примере в заголовок документа (контейнер HEAD) включен
контейнер SCRIPT. До недавнего времени атрибут LANGUAGE в
этом контейнере не являлся обязательным. Но с момента выхода VBSCRIPT появился
смысл в указании типа языка - Navigator не понимает скриптов на других
языках. Отсутствие атрибута может привести к ошибкам при отображении гипертекстовых
страниц.
Далее, в тексте страницы определен комментарий, в который включен текст
скрипта. Начинается комментарий со строки:
<!- The JavaScript Function Definition
И кончается строкой:
// The end of JavaScript Functions Definition ->
Внутри контейнера SCRIPT определены две функции пользователя: help_win()

и main_menu(). Смысл этих функций достаточно прозрачен. Help_win()
предназначена для организации контекстно зависимого help, а main_menu()
осуществляет допуск пользователя к главному меню Website. Обе функции используют
один и тот же метод open (встроенную в JavaScript функцию, которая
определена над объектом window) для того, чтобы открыть новое окно Netscape
Navigator и загрузить в него гипертекстовые документы. При этом функция
main_menu порождает стандартное окно (с кнопочками, иконками и т.п.), а
функция help_win() - окно без стандартных атрибутов. У этого окна имеются
только линейки прокрутки (scroll bars).
Вызов функций осуществляется после нажатия на соответствующие кнопки,
которые определены в HTML-форме help_call. Таким образом, функции
будут выполняться только в том случае, если произойдет событие, описанное
атрибутом onClick в контейнере INPUT соответствующего поля
формы.
Если быть более точным, то приведенный пример - это фрагмент, реализующий
регистрацию пользователя. К моменту его выполнения окно главного меню уже
открыто, поэтому при выборе кнопки NEXT окно не создается, а текст загружается
в уже открытое окно.

Передача данных


Когда связь установлена, с помощью различных функций может начаться
процесс передачи данных. При наличии связи, пользователь может посылать и
получать сообщения с помощью функций read и write:

write(s, buf, sizeof(buf));
read(s, buf, sizeof(buf));

Вызовы send и recv практически идентичны read и write, за исключением
того, что добавляется аргумент флагов.

send(s, buf, sizeof(buf), flags);
recv(s, buf, sizeof(buf), flags);

Могут быть указаны один или более флагов с помощью ненулевых значений,
таких, как следующие:

MSG_OOB - Посылать/получать данные, характерные для сокетов типа stream.
MSG_PEEK - Просматривать данные без чтения. когда указывается в recv,
любые присутствующие данные возвращаются пользователю, но сами данные
остаются как "непрочитанные". Следующий read или recv вызванный на
данном сокете вернет прочитанные в прошлый раз данные.
MSG_DONTROUTE - посылать данные без маршрутизации пакетов.
(Используется только процессами, управляющими таблицами маршрутизации.)





The JavaScript Functions Definition function


<HTML>
<!-
Author: Pavel Khramtsov
Date: March 5, 1996
->
<HEAD>
<TITLE>Registration</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!- The JavaScript Functions Definition function help_win()
{Help = window.open("reg_help.htm","Help","scrollbars=yes,resizable=yes")
}
function main_menu()
{Main_menu = window.open("main_m.htm","Main_menu")
}
// The end of JavaScript Functions
//Definition ->
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<TABLE>
<TR><TH><IMG SRC="radleg3.gif"></TH>
<TH><H2>ISTC. Project RADLEG(#245)</H2>
RRC "Kurchatov Institute"<BR>
<I>Dec, 25, 1995</I>
</TH></TR>
</TABLE>
</CENTER>
<HR>
<CENTER>
<h2>Registration Form</h2> <hr>
......
Текст страницы
.....
<hr>
<FORM NAME=help_call>
<table>
<TR>
<TD><INPUT NAME=next TYPE=button
VALUE=Next onClick="main_menu()">
</TD> <TD><INPUT NAME=help TYPE=button VALUE=Help onClick="help_win()"></TD>
</TR>
</TABLE>
</FORM>
<hr>
</CENTER>
</BODY>
</HTML>

the initial values of IX,


<HTML>
<!- Author: Pavel Khramtsov
Date: February 23, 1996
URL: http://144.206.192.100/radleg/ mo_input.htm
->
<HEAD>
<TITLE>Проверка устного
счета.</TITLE>
<SCRIPT LANGUGE="JavaScript">
<!-
var max_value = 0; var operand1 = 0
var operand2 = 0; var result = 0
var flag = 0; var sign = "+"
var input = ""; var v_date = new Date()
var number = v_date.getTime()
function init(factor){
var today = new Date()
return (factor*today.getTime()
/1000)%30000
}
//Инициализировать датчик
//случайных чисел
IX = init(2); IY = init(3); IZ = init(4)
//2, 3, and 4 below were arbitrarily cho-
//sen. They put some distance between
// the initial values of IX, IY, and IZ
//Датчик случайных чисел.
function random(){
IX = Math.floor(171 * IX % 30269)
IY = Math.floor(172 * IY % 30307)
IZ = Math.floor(170 * IZ % 30323)
return ( IX/30269.0 + IY/30307.0
+ IZ/30323.0 ) % 1.0 }
//Выбрать сложение или вычитание
function set_sign(x){
if( x == "+"){
flag = 0; sign = "+"
}
if( x == "-"){
flag = 1; sign = "-"
}
return true
}
// Определить первый операнд
function f_operand(){
operand1 = random()*max_value
return parseInt(operand1)
}
// Определить второй операнд
function s_operand(){
if(flag == 0){
operand2 = random()*
(max_value-operand1)
}
else {
operand2 = random()*
operand1
}
return parseInt(operand2)
}
// Проверить введенные данные
function input_sign(x){
if(x == 10){
if(flag == 0){
if(operand1+operand2 ==
parseInt(input)){
window.document.test. r0.value = "Молодец!"
}
else {
window.document.test.r0.value = "Думай!?"
window.document.test.input = ""; input = ""
}
}
if(flag == 1){
if(operand1-operand2 ==
parseInt(input)){
window.document.test.r0.value ="Lі-іі-ір!"
}
else{
window.document.test.r0.value = "Думай!?" window.document.test.input = ""; input = ""
}
}
return true
}
input += x
window.document.test.result.value = input


return true
}
// Генерация варианта
function main_calc(){
operand1 = f_operand()
window.document.test.op1.value = operand1
operand2 = s_operand()
window.document.test.op2.value = operand2
window.document.test.s_sign.value = sign
input = ""; window.document.test.input = ""
window.document.test.r0.value = " ???"
return true
}
// ->
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
<H1>Математический тест</H1>
<HR>
<FORM NAME=test>
<table>
<TR>
<TD><INPUT NAME=i10 TYPE=button VALUE="0-10" onClick="max_value=10"></TD>
<TD><INPUT NAME=i20 TYPE=button VALUE="0-20" onClick="max_value=20"></TD>
<TD><INPUT NAME=i100 TYPE=button VALUE="0-100" onClick="max_value=100"></TD>
<TD><INPUT NAME=i+ TYPE=button VALUE="+" onClick="set_sign("+")"></TD>
<TD><INPUT NAME=i- TYPE=button VALUE="-" onClick="set_sign("-")"></TD>
</TR>
</TABLE>
<HR>
<table>
<TR>
<TD><INPUT NAME=op1 SIZE=2 MAXLENGTH=2></TD>
<TD><INPUT NAME=s_sign SIZE=1 MAXLENGTH=1></TD>
<TD><INPUT NAME=op2 SIZE=2 MAXLENGTH=2></TD>
<TD>=</TD>
<TD><INPUT NAME=result SIZE=3 MAXLENGTH=3></TD>
<TD><INPUT NAME=award TYPE=button VALUE="?" onClick="main_calc()">
<TD><INPUT NAME=r0 VALUE="???">
</TR>
</TABLE>
<HR>
<TABLE BORDER=2>
<TR>
<TD><INPUT NAME=b1 TYPE=button VALUE="1" onClick="input_sign("1")"></TD>
<TD><INPUT NAME=b2 TYPE=button VALUE="2" onClick="input_sign("2")"></TD>
<TD><INPUT NAME=b3 TYPE=button VALUE="3" onClick="input_sign("3")"></TD>


</TR>
<TR>
<TD><INPUT NAME=b4 TYPE=button VALUE="4" onClick="input_sign("4")"></TD>
<TD><INPUT NAME=b5 TYPE=button VALUE="5" onClick="input_sign("5")"></TD>
<TD><INPUT NAME=b6 TYPE=button VALUE="6" onClick="input_sign("6")"></TD>
</TR>
<TR>
<TD><INPUT NAME=b7 TYPE=button VALUE="7" onClick="nput_sign("7")"></TD>
<TD><INPUT NAME=b8 TYPE=button VALUE="8" onClick="input_sign("8")"></TD>
<TD><INPUT NAME=b9 TYPE=button VALUE="9" onClick="input_sign("9")"></TD>
</TR>
<TR>
<TD><INPUT NAME=b0 TYPE=button VALUE="0" onClick="input_sign("0")"></TD>
<TD COLSPAN=2><INPUT NAME=bs TYPE=button VALUE="OK" onClick="input_sign("10")"></TD>
</TR>
</TABLE>
</FORM>
</CENTER>
<HR>
</BODY>
</HTML>

Use this code for whatever


<HTML>
<!- ady@demos.su, Saturday, January 20, 1996 7:23:31 PM->
<!- Demos WWW cover page ->
<HEAD>
<TITLE>Welcome to Demos Company - Moscow, Russia</TITLE>
<!- yet another scroller.
(C) 1996 Dmitry Altukhov, ady@demos.su ->
<!-
Use this code for whatever purposes... provided that you retain the copyright notice.
I accept no responsibility for any disasters caused by this monster.
Cannot guess any other cool places for scrollers. And MSIE marquee emulation in JS?!
Er... Mozilla clears windows too slow in JS...
->
<SCRIPT LANGUAGE="JavaScript">
<!- roll it
var rate, pos=0;
function roll(){
var loop, top, msg1;
var msg="Hello World";
for(var i=0; i<10; i++){
msg = msg + (" Hello World");
}
//move on, make a scrolly... and who said that
//scrollers suck?! ;-)
top=(130/msg.length)+1;
for(loop=0; loop<top; loop++) msg+=""+msg;
msg1=msg.substring (pos, pos+130);
window.defaultStatus=msg1;
if (pos++ == 130) pos=0;
//come on, the poor thing can"t roll any faster... buy a Ferrari. ;-)
rate=setTimeout("roll()",30);
}
// that"s all folks ;-)
// end ->
</SCRIPT>
</HEAD>
<BODY BACKGROUND="back.gif" BGCOLOR="#FFFFFF" TEXT="#000040" LINK="#000080"
VLINK="#400080" ALINK="#FF0000" onLoad="roll()">
.....
</BODY>
</HTML>


<HTML>
<!- Author: Pavel Khramtsov
Date: February 25, 1996 ->
<HEAD>
<TITLE>Text Block Scrolling</TITLE>
<SCRIPT LANGUAGE="JavaScript">
var line_beak = "\n"; var screen = ""
//123456789012345678901234567890
screen+= "Будем прокручивать"
screen += "Данный фрагмент текста"
screen += "В поле типа"
screen += "TEXTAREA"
screen += "Формы term"
for(i=0;i<6;i++) screen += " "
var i=0; var j=40; flag = 0
function scroll(){
if( flag== 0){
display_str = ""
for(k=0;k<11;k++){
display_str += screen.substring(i,j)
i+=40; j=i+40; if(i>400) i = 0
}
window.document.term.work_field.value = display_str; i += 40; if(i>400) i =0
}
id = setTimeout("scroll()",1000); return true
}
function change_button(){
if(flag==0){
flag = 1; return true
}
if(flag == 1){
flag = 0; return false
}
}
</SCRIPT>
</HEAD>
<BODY onLoad="scroll()">
<CENTER>
<H1>Text Block Scrolling.</H1>
<HR>
<FORM NAME=term>
<TEXTAREA NAME=work_field COLS=40 ROWS=10 WRAP=ON></TEXTAREA>
<P>
<INPUT NAME=alarm VALUE="Start/Stop" TYPE=button onClick="change_button()">
</FORM>
</CENTER>
<HR>
</BODY>
</HTML>

This is the start


<HTML>
<HEAD>
<TITLE> type_Document_Title_here </TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!-
var i=0; adv_message = " "
advert = "Russian Research Center \"Kurchatov Institute\""
adv_message += advert; adv_message += " "
adv_length = advert.length
function move_clock(){
// Clock
day = new Date()
clock_screen = day.getHours()+":"
+day.getMinutes()+":"+day.getSeconds()
document.kuku.f_clock.value = clock_screen
// Rolling Field
document.kuku.adv_string.value =
adv_message.substring(i,i+45)
document.kuku.i_field.value = i; i++
if( i == adv_length + 44 ) i = 0
id = setTimeout("move_clock()",100)
}
// end ->
</SCRIPT>
</HEAD>
<BODY onLoad="move_clock()">
This is the start point:<BR>
<a href="#next"> This the document start point.</a>
kukuku
<a name=next>
<FORM NAME=kuku onSubmit="alert("You submit data to server")" METHOD="GET">
<INPUT TYPE=SUBMIT NAME=SABMIT VALUE=SUBMIT> Make a clock here:
<INPUT NAME=f_clock maxlength=8 size=8>
<P>
<INPUT NAME=adv_string maxlength=45 size=45>
<INPUT NAME=i_field size=10> </FORM> </BODY>
</HTML>

May 16,


<HTML>
<!- Author: HTMLed User
Date: May 16, 1996
->
<HEAD>
<title>Iconize</title>
<script language="JavaScript">
function make_icon(){
window.open("test_icon.htm","test_icon",
"resizable=yes,scrollbars=no,width=50,
height=70"); window.close()
}
</script>
</HEAD>
<BODY>
<h1>minimize page</h1>
<form name=icon>
<input name=icon_button type=button value=icon onClick="make_icon()">
</fomr>
</BODY>
</HTML>


<HTML>
<!-
Author: Pavel Khramtsov
Date: May 16, 1996
->
<HEAD>
<script>
function max_window(){
window.open("iconize.htm","new",
"toolbar=yes,scrollbars=yes,directories=yes, status=yes,menubar=yes,resizable=yes,
location=yes,width=700,height=500")
window.close()
}
</script>
</HEAD>
<BODY>
<center>
<a href="" onClick="max_window()">
<imgsrc=back.jpg></a>
</center>
</BODY>
</HTML>

Пример page terminator


<HTML>
<HEAD>
<TITLE>page terminator</TITLE>
</HEAD>
<BODY>
<SCRIPT>
window.close()
</SCRIPT>
</BODY>
</HTML>

#46/96

функции, для установления WWW коннекции


/*
-----------------------------------------------------------
MakeConnection
Function allocates a socket and estabishes a connection
with remote host. Default port number 80.
Input : WWW server name (with port number, if it is not 80)
Output : file descriptor on success
-1 on error
-----------------------------------------------------------
*/
int MakeConnection(unsigned char* ServerName){
int s;
struct sockaddr_in ssin;
struct hostent* hp;
int PortNum;
unsigned char strHlp[STRNGLEN], *pch;
/* use default port number - 80 or specific number from the
server name */
strcpy(strHlp,ServerName);
pch = strchr(strHlp,':');
if(pch==NULL){
PortNum = 80;
}else{
pch[0] = '\0';
pch++;
PortNum = atoi(pch);
if(PortNum==0){
PortNum = 80;
}
}
/* get host by name - resolve host name into IP address */
if( (hp=gethostbyname(strHlp)) == NULL )
{
return -1;
}
bzero(&ssin, sizeof(ssin));
bcopy(hp->h_addr, &ssin.sin_addr, hp->h_length);
ssin.sin_family = hp->h_addrtype;
ssin.sin_port = htons(PortNum);
/* allocate a socket */
if((s=socket(AF_INET, SOCK_STREAM, 0))==-1)
{
return -1;
}
/* make a connection */
if(connect(s, &ssin, sizeof(ssin), 0)==-1){
return -1;
}
return s; /* socket descriptor */
}

Привязка к локальным именам


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

В Internet домене связывание сокета и имени может быть весьма сложным, но,
к счастью, обычно нет необходимости специально привязывать адрес и номер
порта к сокету, так как функции connect и send автоматически свяжут данный
сокет с подходящим адресом, если это не было сделано до их вызова.

Для связывания сокета с адресом и номером порта используют системный
вызов bind:

bind(s, name, namelen);

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




Программа lynx


Эта программа предоставляет собой уже гораздо более развитый интерфейс, поскольку поддерживает все возможности HTML 2.0, кроме графики. Если говорить более точно, то lynx позволяет поддерживать управление отображением текста в том виде, в каком это вообще доступно на алфавитно-цифровых устройствах: выделение цветом, мерцание, инверсия и т.п. В местах вставки графики lynx либо показывает текст, заданный атрибутом ALT, либо сообщает, что на этом месте расположен IMAGE. Главным достоинством lynx, на мой взгляд, является возможность работы с формами. Это позволяет разрабатывать интерактивные интерфейсы и осуществлять поиск и изменение данных. Lynx - это свободно-распространяемая программа, доступная в исходных кодах и работающая в большинстве операционных систем. Единственным узким местом является ориентация lynx на библиотеку curses, которая обеспечивает полноэкранный алфавитно-цифровой интерфейс. Но если этот подводный камень удается преодолеть, то в распоряжение пользователя поступает полноценный алфавитно-цифровой интерфейс.



Программа www


Это самый первый из заявленных на Internet интерфейсов доступа к World Wide Web. С самого начала программа www предназначалась для организации анонимного доступа к ресурсам World Wide Web через telnet. В этом смысле www до сих пор остается наиболее универсальным интерфейсом, не зависящим от типа используемого терминала. Однако есть и огромный минус - отсутствие поддержки ряда очень нужных возможностей HTML. Сегодня в HTML можно выделить несколько основных изобразительных и управляющих средств языка. К первым относятся: разбивка текста на параграфы; организация списков; выделение заголовков; отображение встроенной графики; отображение таблиц и математических формул; возможность построения многооконных интерфейсов; управление шрифтом текста, его цветом и стилем; управление фоном; организация просмотра файлов специальных форматов. К управлению относятся: организация сложных экранных интерактивных форм, организация текстовых и графических гипертекстовых ссылок, управление процессом отображения информации в многооконных интерфейсах, программирование гипертекстовых страниц, мультипликация. Из этого списка программа www поддерживает только разбиение на параграфы, текстовые ссылки и, если сервер допускает эту возможность, поиск по ключевым словам в индексе информационных ресурсов сервера. Такие широкие ограничения вызваны тем, что www - это алфавитно-цифровой интерфейс, ориентированный на работу с простейшими терминалами, способными только на ввод информации в командной строке и последовательный просмотр полученных страниц Web. Однако эта программа обеспечивает доступ к Web с любого рабочего места. Если у пользователя имеются компьютер, модем и регистрация на компьютере, включенном в Сеть, то в режиме удаленного терминала программа www может обеспечить приемлемый доступ к Web. У www имеется еще одно предназначение - эта программа служит для иллюстрации использования библиотеки общих кодов W3, используемых для разработки программ в технологии WWW. Программа www размещается по адресуW3C ().



Программирование сокетов


А. Танаев

Для обеспечения сетевых коммуникаций используются сокеты. Сокет это
конечная точка сетевых коммуникаций. Каждый использующийся сокет имеет
тип и ассоциированный с ним процесс. Сокеты существуют внутри
коммуникационных доменов. Домены это абстракции, которые подразумевают
конкретную структуру адресации и множество протоколов, которое определяет
различные типы сокетов внутри домена. Примерами коммуникационных доменов
могут быть: UNIX домен, Internet домен, и т.д.

В Internet домене сокет - это комбинация IP адреса и номера порта, которая
однозначно определяет отдельный сетевой процесс во всей глобальной сети
Internet. Два сокета, один для хоста-получателя, другой для хоста-отправителя,
определяют соединение для протоколов, ориентированных на установление связи,
таких, как TCP.













в заключении, опираясь на изложенные


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

"Java - это современный язык для разработки приложений, созданный
компанией Sun Microsystems Inc., специально для распределенных сред.
Архитектура языка снимает бремя вычислений с настольных станций,
перекладывая его на серверы, которые собственно и доставляют приложения
пользователям."

В этом высказывании следует обратить внимание на второе предложение.
Если речь идет о сервер-приложениях, то здесь ничего нового относительно
обычной Web-технологии, которая представлена на рисунке 1, нет.
Приложения Java, как и как и любое другое выполняется сервером, как
API-приложение или CGI-скрипт. А вот в случае Java байт-кода
приведенное высказывание просто ошибочно, т.к. байт-код выполняется
именно на рабочей станции пользователя, а не на компьютере сервера.

"Истинная значительность Java заключается в том, что это первый язык,
который позволяет разрабатывать программное обеспечение для Internet,
независящее от аппаратной платформы."

Здесь все правильно, с одной только оговоркой - для любой аппаратной
платформы должен существовать интерпретатор Java, как существует,
например, интерпретатор Basic или Tcl/Tk для X-window, скрипты
которого можно также передавать по сети, если использовать Tk интерфейс
для World Wide Web, разработанный гораздо раньше Java.

"Язык Java может быть использован для создания двух различных типов
программного обеспечения: автономного, которое может выполняться на
машине без операционной системы и работает непосредственно на Вашей
настольной станции, а также для миниатюрных приложений (апплетов),
которые запускаются с помощью написанного на Java Web-броузера,
например Netscape Navigator 2.0."

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


записи на диск. О бездисковых Internet-терминалах вообще не хочется
говорить. Иметь компьютер который полностью зависит от линий связи в
нашей действительности просто непозволительная роскошь. Во-вторых,
чтобы Netscape Navigator 2.0 был написан на Java, кроме как в рекламе
Sun, нигде больше не написано. Кроме того, любой кто запускал HotJava и
Navigator может воочию убедится, что программа, написанная обычным
способом работает гораздо быстрее, чем HotJava, да и вообще это очень
сильно смахивает на японские компьютеры пятого поколения, аппаратно
реализующие Prolog:-).

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

Системы Arena, Netscape и Internet Explorer


Прежде чем перейти к изложению концепции, используемой в данных программах, необходимо остановиться на основных направлениях развития технологии WWW в области развития языковых возможностей. На сегодняшний день существует два законченных стандарта языка HTML - версии 1.0 и 2.0. Для дальнейшего развития этого языка было предложено несколько путей: первый из них - HTML+- является базой для следующей версии HTML 3.0. Именно в этом варианте языка были определены таблицы, стили и математические формулы. Концептуальный интерфейс для HTML 3.0 - это программа Arena, главное назначение которой- продемонстрировать возможности HTML 3.0.
Другим направлением развития HTML стали так называемые расширения Netscape Extensions. Первоначально эта спецификация развивала синтаксис HTML 2.0в сторону более выразительных средств представления документов: возможность смены фона, выравнивание текста, обтекание графики текстом и т.п. Расширения Netscape Extensions были предложены компанией Netscape Communication и реализованы в программе Netscape Navigator версии 1.1 и старше. Фактически, если HTML+ был направлен на расширение HTML в сторону реализации публикаций научно-технического характера, то Netscape Extensions развивали HTML в сторону рекламно-издательской деятельности. Этого направления компания Netscape Communication придерживалась и в следующей версии Navigator, куда были добавлены две принципиально новые возможности разработки Web-страниц:фреймы и JavaScript. Заявлена также и поддержка Java, но об этом языке как о концептуальном развитии технологии лучше говорить в контексте другой программы - HotJava компании Sun Microsystems. На поприще развития стандартов Web не отстает от других, и компания Microsoft, предлагающая свободно распространяемые сервер и интерфейс Internet Explorer. Важным представляется тот факт, что Microsoft не просто пытается поддерживать чужие разработки, но и сама предлагает новые расширения языка, которые касаются главным образом возможностей разработки мультимедийных страниц и являются в некотором смысле альтернативой предложениям Java и JavaScript.

Таким образом, можно выделить следующие направления развития технологии Web: HTML 3.0 (HTML+), HTML 2.0 Netscape Extensions, JavaScript, Java, Microsoft Extensions. Чуть в стороне находится еще одна ветвь исследований- создание трехмерных страниц, ярким представителем которой является язык моделирования виртуальной реальности VRML, предложенный компанией Silicon Graphics.
Программа Arena реализована для ОС Unix и требует для своей сборки библиотеки Motif, а интерфейс базируется на библиотеке общих кодов W3C и поддерживает фон, таблицы, обтекание графики текстом, встроенные imagemap и математические выражения. Последние, кстати, не поддерживаются ни одним другим интерфейсом. Кроме этого, Arena умеет работать со стилями документов и в скором времени, вероятно, сделает возможным программирование управляющих меню самой программы через заголовок HTML-документа. Следует отметить, что это довольно медленная программа, которая потребляет к тому же большое количество ресурсов. Но ее разработчики и не претендовали на создание промышленного продукта -их цель состояла в демонстрации новых возможностей языка разметки. Описание интерфейса и программа его реализации хранятся по адресу W3C ().
Netscape Navigator - это интерфейс номер один в Internet. Главным его достоинством является наиболее гибкое представление Web-страниц за счет использования Netscape Extensions. Именно в этой программе впервые появились возможности центрирования элементов страницы относительно границ рабочей области окна программы, создания вложенных таблиц, управления размером и цветом шрифта, мерцания текста, обтекания графики текстом и многое другое. Среди основных достижений необходимо упомянуть фреймы и дополнительные окна, динамическое обновление документов и работа с JavaScript.
Фреймы - долгожданная многооконность, которая позволяет решить сразу множество проблем, связанных с разработкой документов. В первую очередь, обеспечивается возможность одновременной работы с текстом, меню и графикой. Фрейм позволяет использовать часто встречающиеся фрагменты текста, например постоянную заставку в качестве отдельного фрейма. Многие пользователи Internet наверняка встречались с этим механизмом при обращении к поисковой службе InfoSeek ().Если раньше нужно было постоянно вставлять в текст готовые части страницы, которые появляются в начале и конце каждого документа или использовать включаемые серверы, то теперь это можно делать при помощи фреймов. При этом фреймы остаются очень органичным решением - документ с фреймами является просто суперпозицией простых HTML-документов.


Дополнительные окна - это тесно связанный с фреймами механизм. Но если страница с фреймами делит рабочую область Navigator на несколько частей, не выходя за пределы окна программы, то в случае дополнительного окна разработчик страницы Web имеет возможность открыть новое окно Navigator и тем самым придать просмотру как бы новое измерение. Такое направление интерфейса лежит в русле разработки многооконных интерфейсов гипертекстовых систем, о которых в академических кругах говорят уже лет десять, но к единой модели оных так до сих пор и не пришли. Очевидно одно - это позволяет оставлять видимые закладки при проходе по гипертекстовой сети по инициативе разработчика страниц, что является в некоторых случаях достаточно полезным решением, расширяющим привычную двухуровневую схему просмотра, когда в отдельное окно помещали либо графику, либо файл специального формата.
Динамическое обновление документов - это возможность построения самопросматривающихся страниц и, если позволяет скорость линии связи, средство реализации примитивной мультипликации. Если разработчики программы Arena только обещают включить использование заголовка HTML-документа для управления просмотром последнего, то в Netscape это уже делается. В данном случае используется тэг META с атрибутом HTTP-EQUIV, в котором указывается порядок обращения Navigator к серверу за обновленным документом.
Кроме языковых возможностей в Navigator имеется еще ряд особенностей, которые заставляют говорить об этой программе все компьютерные издания мира, а пользователей - копировать ее на свои компьютеры. Navigator имеет встроенные возможности работы со списками новостей и свою собственную программу приема и отправления электронной почты. Таким образом, пользователь в одной упаковке получает весь необходимый набор средств для работы в Internet, и ему, по большому счету, больше ничего не нужно. Для разработчиков Web-страницв версию Navigator Gold 2.0 включен еще и редактор гипертекстовых страниц. Все это организовано в виде дополнительных окон специального типа, что очень органично вписывается в архитектуру технологии WWW.


В сети существует много мест, откуда можно списать программу Netscape Navigator. Лучше всего это сделать с норвежских или шведских зеркал, в частности с ftp.luth.se или ftp.sunet.se. Можно также поискать navigator и через archie.funet.fi или archie.luth.se.
HotJava - продукт компании Sun, который специально предназначен для демонстрации возможностей апплетов Java, встроенных при помощи тэга APPLET в тело HTML-документа. Следует сразу отметить, что такого бурного использования Java в страницах Web, как это происходит сегодня с JavaScript, не наблюдается. На мой взгляд, это объясняется двумя причинами. Во-первых, Java - это язык программирования, который требует профессиональных навыков работы и понимания объектно-ориентированного подхода при создании приложений. Большинство разработчиков Web-страниц такими навыками не обладают. Во-вторых, HotJava не так популярен, как Netscape, и до недавнего времени был реализован только для ограниченного набора систем. Конечно, Java обладает гораздо более мощными средствами построения мультимедийных страниц, но какой в этом прок, если большинство пользователей все равно это не ощутят. Для того, чтобы можно было разрабатывать страницы с апплетами Java, необходимо скопировать Java Development Kit, который представляет из себя компилятор кода Java. В отличие от JavaScript для получения апплетов программа-интерфейс должна делать дополнительные запросы к серверу, точно так же, как и в случае встроенной графики. Чем больше апплетов на странице, тем больше обращений к серверу. Однако фирма-производитель уверена в успехе своего нового детища, Java. Сегодня существуют реализации HotJava и JDK для ОС Solaris, Win32 и MacOS. Получить их можно либо с домашних страниц Sunsoft, либо из архивов, которые были указаны для JavaScript.
Internet Explorer - это ответ Microsoft на все расширяющиеся запросы WWW. Вообще говоря, в этой программе нет ничего необычного по сравнению с другими программами-интерфейсами World Wide Web. Explorer - типичный пример маркетинговой политики проникновения в существующую отрасль разработки ПО. Эта программа прекрасно приспособлена к особенностям Win32 и реализует ряд новых языковых возможностей, которые могут стать стандартом в новой версии HTML. Главным образом это касается фонового звука (атрибут SOUNDу тэга BODY) и форм. Совершенно очевидно, что компания Microsoft, во-первых ориентируется на огромную армию пользователей своих ОС и свои же программные продукты, реализованные как средства расширения возможностей демонстрации HTML-страниц. Такой подход до сих пор неоднократно приводил к успеху, а критическая масса пользователей MS-DOS и Windows играла решающую роль в конкурентной борьбе. Но ситуация с Netscape несколько иная. Во-первых, Navigator - изначально многоплатформенная система, что позволяет создать единую среду разработки и просмотра страниц World Wide Web. Во-вторых, Navigator - это рабочее место в Internet, до чего Microsoft еще явно далеко. Для этого компания должна разработать новую операционную систему и реализовать в ней интерфейс Web со всеми возможностями Navigator плюс еще что-нибудь, чтобы уйти в технологический отрыв. Кроме того, в этой борьбе Netscape опирается на поддержку Silicon Graphics, Sun и ряда других известных компаний, что делает борьбу еще более захватывающей. Explorer и свободно распространяемый сервер для Win32 можно получить с домашних страниц Microsoft (или ).

Создание сокета


Для создания сокета используется системный вызов socket.

s = socket(domain, type, protocol);

Этот вызов основывается на информации о коммуникационном домене и типе
сокета. Для использования особенностей Internet, значения параметров должны
быть следующими:
communication domain -
AF_INET (Internet протоколы).
type of the socket -
SOCK_STREAM; Этот тип обеспечивает
последовательный, надежный, ориентированный на установление
двусторонней связи поток байтов.
Выше был упомянут сокет с типом stream. Краткое описание других типов
сокетов приведено ниже:
Datagram socket -
поддерживает двусторонний поток данных. Не
гарантируется, что этот поток будет последовательным, надежным,
и что данные не будут дублироваться. Важной характеристикой
данного сокета является то, что границы записи данных
предопределены.
Raw socket -
обеспечивает возможность пользовательского доступа к
низлежащим коммуникационным протоколам, поддерживающим
сокет-абстракции. Такие сокеты обычно являются датаграм-
ориентированными.
Функция socket создает конечную точку для коммуникаций и возвращает
файловый дескриптор, ссылающийся на сокет, или -1 в случае ошибки. Данный
дескриптор используется в дальнейшем для установления связи.

Для создания сокета типа stream с протоколом TCP, обеспечивающим
коммуникационную поддержку, вызов функции socket должен быть следующим:

s = socket(AF_INET, SOCK_STREAM, 0);





Средства просмотра WWW-страниц


Павел Храмцов
Основным средством работы с ресурсами Internet сегодня стали программы, позволяющие читать страницы Web. Как их называть? Самая популярная программа доступа к ресурсам Internet, Netscape Navigator, позволяет обращаться не только к WWW, но и к FTP-архивам, базам данных Gopher и WAIS, и новостям Usenet. Термин "browser" ограничивает восприятие возможностей только просмотром информации, но многие программы позволяют не просто просматривать страницы WWW, но и заказывать файлы, отправлять почту, участвовать в дискуссиях Usenet, а HotJava и Navigator могут интерпретировать программный код. Слово "client" также вводит в заблуждение. Кроме интерфейсных функций Web-клиент выполняет поисковые операции, индексирование ресурсов, тестирование серверов и целый ряд других специализированных действий. Слово "viewer" тем более некорректно использовать - оно закреплено за классом программ для просмотра файлов специальных форматов: GIF, JPEG или MPEG.
Скорее всего, программы, при помощи которых пользователь получает непосредственный доступ к ресурсам Internet, следует обозначать термином "интерфейс пользователя Internet" или просто "интерфейс". В общем случае так называются программы, которые обеспечивают доступ ко всем или большинству информационных ресурсов Сети: электронная почта, телеконференции Usenet,FTP-архивы, WAIS, Gopher, Internet Relay Chat, World Wide Web, базы данных, доступные по telnet, и ряд других информационных источников. Остановимся, прежде всего, на тех интерфейсах, которые основаны на языке гипертекстовой разметки HTML. Это могут быть как реально существующие, так и виртуальные файлы, генерируемые программно и передаваемые интерфейсу по сети. Таких программ великое множество. Если просмотреть файл регистрации визитов на любом HTTP-сервере, то можно обнаружить около сотни такого сорта программ. Практически в любом компьютерном журнале можно найти информацию о рейтингах этих программ, составленных на основе анализа функциональных возможностей, дизайна и доброго десятка других черт, которые авторам рейтингов показались достаточно важными. Мы же рассмотрим интерфейсы с точки зрения типовой реализации особенностей технологии World Wide Web и тенденций ее развития. Будут представлены программы www, lynx, Arena, Internet Explorer, Netscape Navigator, SlipKnot и, как пример отечественной разработки, Ariadna. Интерфейс Mosaic не попал в этот список потому, что с точки зрения современных тенденций не является чем-то уникальным: исторически он был только предтечей Netscape Navigator, аккумулировавшего все лучшее, что было заложено в Mosaic.



Стеки гипертекстовых ссылок


Не обошли своим вниманием авторы JavaScript и стеки гипертекстовых ссылок. В язык теперь введен новый тип объектов типа Area. Area - это элемент контейнера MAP, который определяет client-site imagemap. Собственно, главное достоинство такого объекта состоит в том, что гипертекстовые ссылки, которые определены в Area, стали доступны для переопределения. Они появляются в массиве обычных ссылок страницы, и можно как получить значение URL, так и переопределить его. К объекту Area нельзя обратиться по имени. Можно использовать только индекс массива гипертекстовых ссылок документа.
В контексте стека гипертекстовых ссылок интересно рассмотреть еще одну возможность JavaScript, связанную с переходом по гипертекстовой ссылке вообще. В обычном случае параметр HREF контейнера A должен иметь какое-нибудь значение. Если, например, по событию onClick необходимо открыть новое окно и в старом сохранить отображенный документ, то его URL следует указывать в качестве значения HREF. В противном случае, в старое окно будет загружена пустая страница, если HREF=" ". В новой версии JavaScript введена функция void. Точнее, тип void, который означает отсутствие какого-либо значения.
Если нам необходимо выполнить некоторые действия при выборе гипертекстовой ссылки, не перегружая при этом текущие страницы, то в параметре HREF можно указать конструкцию:
<A HREF=""javascript:void(0)"">kuku</A>
Таким приемом часто пользуются при программировании событий, связанных с проходом манипулятора (мыши) через поле гипертекстовой ссылки.



Управление сценариями просмотра Web-страниц


Павел Храмцов

ПРИМЕРЫ СКРИПТОВ









Современные гипертекстовые информационные системы условно можно представить
в виде совокупности нескольких компонентов: систем хранения гипертекстовых
объектов, систем отображения гипертекстовых объектов, систем подготовки
гипертекстовых объектов и систем программирования просмотра совокупности
гипертекстовых объектов. С этой точки зрения, технология World Wide Web
только к 1996 году получила законченный, функционально полный вид. Первыми
были разработаны системы хранения и просмотра (1989-1991), которые продолжают
развиваться и в настоящее время. После 1990 года стали появляться первые
системы подготовки документов. Наконец, в 1995 году были предложены первые
языки управления сценариями просмотра. В данной статье речь пойдет как
раз об одном из них - JavaScript.
Программирование процедуры просмотра гипертекстовой базы данных не является
изобретением Netscape, Microsoft или Sun. Практически все локальные гипертекстовые
системы в той или иной степени имеют программные средства манипулирования
гипертекстовыми объектами.
В ряде случаев вся гипертекстовая база данных может быть представлена
как одна большая программа, в которой гипертекстовые узлы - это программные
модули, а связи между ними - это передача управления от одного модуля другому.
Преимущества такого подхода перед традиционной статической разметкой
очевидны: гибкость построения гипертекстовой сети, возможность создания
программ прокрутки фрагментов базы данных, генерация составных гипертекстовых
объектов из существующих элементарных компонентов. Динамические объекты
могут быть легко получены из статических, так как в случае существования
браузера система может быть переведена из интерактивного режима просмотра
гипертекстовой базы данных в пакетный, когда действия оператора будут заменяться
командами программы.
Браузеры гипертекстовых страниц традиционно называют скриптами (scripts),
по аналогии с исполняемыми файлами, написанными для командных интерпретаторов
типа sh. Собственно, как это было и раньше в локальных системах, в программировании
просмотра гипертекстовых документов World Wide Web существуют два подхода:
создание интерпретируемых браузером скриптов или компиляция байт-кода.
Первый подход не выходит за рамки традиции World Wide Web, согласно которой
для разработки гипертекстовой страницы нужен только обычный текстовый редактор,
и сам гипертекстовый документ должен легко читаться человеком-оператором.
Второй подход позволяет повысить эффективность исполнения программы и защищенность
кода от несанкционированных модификаций. Как первый, так и второй способы
опираются на объектно-ориентированный подход к программированию. По поводу
байт-кодов, или, как их еще называют, мобильных кодов, написано в контексте
технологии программирования Java достаточно много, поэтому сосредоточим
свое внимание на скриптах, а точнее, на скриптах, написанных на языке JavaScript.



Установление связи


Со стороны клиента связь устанавливается с помощью стандартной функции
connect:

error = connect(s, serveraddr, serveraddrlen);

которая инициирует установление связи на сокете, используя дескриптор сокета s
и информацию из структуры serveraddr, имеющей тип sockaddr_in, которая
содержит адрес сервера и номер порта на который надо установить связь. Если
сокет не был связан с адресом, connect автоматически вызовет системную функцию
bind.

Connect возвращает 0, если вызов прошел успешно. Возвращенная величина -1
указывает на то, что в процессе установления связи произошла некая ошибка. В
случае успешного вызова функции процесс может работать с дескриптором сокета,
используя функции read и write, и закрывать канал используя функцию close.

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

error = listen(s, qlength);

где s это дескриптор сокета, а qlength это максимальное количество запросов на
установление связи, которые могут стоять в очереди, ожидая обработки сервером;
это количество может быть ограничено особенностями системы.

Когда сервер получает запрос от клиента и принимает решение об
установлении связи, он создает новый сокет и связывает его с ассоциацией,
эквивалентной 'слушающему сокету'. Для Internet домена это означает тот же
самый номер порта. Для этой цели используется системный вызов accept:

newsock = accept(s, clientaddr, clientaddrlen);

Сокет, ассоциированный клиентом, и сокет, который был возвращен
функцией accept, используются для установления связи между сервером и
клиентом.

Процесс установления связи показан на рисунке 1.



Рис. 1: Взаимодействие клиента и сервера





Введение в SNMP.



Иваненко С.

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

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

Подобным языком стал SNMP - Simple Network Management Protocol.
Разработанный для систем, ориентированных под операционную систему UNIX, он
стал фактически общепринятым стандартом сетевых систем управления и
поддерживается подавляющим большинством производителей сетевого
оборудования в своих продуктах.

В силу своего названия - Простой Протокол Сетевого Управления - основной
задачей при его разработке было добиться максимальной простоты его реализации.

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

Основной концепцией протокола является то, что вся необходимая для управления
устройством информация хранится на самом устройстве - будь то сервер, модем
или маршрутизатор - в так называемой Административной Базе Данных ( MIB -
Management Information Base ).

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

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

административной информации - все они будут переменными в MIB.

Поэтому SNMP как непосредственно сетевой протокол предоставляет только
набор команд для работы с переменными MIB. Этот набор включает следующие
операции:

get-request Используется для запроса одного или более параметров MIB get-next-requestИспользуется для последовательного чтения значений. Обычно используется для чтения значений из таблиц.
После запроса первой строки при помощи get-request
get-next-request используют для чтения оставшихся
строк таблицы set-requestИспользуется для установки значения одной или более переменных MIB get-responseВозвращает ответ на запрос get-request, get-next-request или set-request trapУведомительное сообщение о событиях типа cold или warm restart или "падении" некоторого link'а.
Для того, чтобы проконтролировать работу некоторого устройства сети,
необходимо просто получить доступ к его MIB, которая постоянно обновляется
самим устройством, и проанализировать значения некоторых переменных.

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

Таким образом удается сохранить простоту протокола, но вместе с этим сделать
его довольно мощным средством, дающим возможность стандартным образом
задавать наборы команд управления сетевыми устройствами. Задача обеспечения
выполнения команд состоит, таким образом, в регистрации специальных
переменных MIB и реакции устройства на их изменения.

Как происходит адресация в MIB к некоторой ее переменной?

По своей структуре MIB представляет из себя дерево, изображенное на
рисунке 1.

Каждому элементу соответствует численный и символьный идентификатор. В имя
переменной включается полный путь до нее от корневого элемента root.



Например, время работы устройства с момента перезагрузки хранится в
переменной, находящейся в разделе system под номером 3 и называется
sysUpTime. Соответственно, имя переменной будет включать весь путь:
iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysUpTime(3); или на
языке чисел: 1.3.6.1.2.1.1.3. Следует заметить, что при этом узлы дерева
разделяются точками.

Существует стандартная ветвь MIB, относящаяся к разделу управления mgmt,
которую обычно поддерживают все сетевые устройства.

Наряду с этим каждый производитель или организация может разработать свой
собственный набор переменных и "подвесить" их к дереву MIB. Однако, это
делается только в строго определенном ее месте. Если организация разрабатывает
свою базу MIB, то на стадии экспериментов переменные могут помещаться в
раздел experimental. Однако для официальной регистрации структуры данных
некоторой организации ей необходимо получить собственный номер в разделе
private-enterprises. Все переменные, адресуемые вниз по ветви данной организации,
относятся к продуктам только данного производителя.

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

Для обработки запросов управляющей станции, приходящих в виде SNMP
пакетов, служит специальный модуль, называемый Агентом Управления. Агент
принимает SNMP пакеты и выполняет соответствующие им действия, т.е.
посылает значение запрашиваемой переменной, устанавливает значение
переменных, выполняет периодическое обновление информации MIB, выполняет в
ответ на установку соответствующих переменных некоторые операции.

В роли Управляющей Станции может выступать рабочая станция администратора
сети, если на ней запустить какой-либо пакет управления, поддерживающий
протокол SNMP. Он позволяет администратору получать конкретную информацию


о какой либо стороне функционирования элементов сети, например на уровне
карты Ethernet, либо протокола EGP.

Примерами таких программ можно назвать Sun NetManager фирмы Sun
Microsystems, ориентированный на операционную систему Solaris, и пакет SNMPc
фирмы Castle Rock Computing, разработанный для системы Windows.

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

Так, например, чтобы управлять маршрутизатором cisco, можно войти на него
(сделать login пользователем root) и получить on-line доступ к его командам
управления. А можно сконфигурировать на данном маршрутизаторе SNMP агента
и выполнять все те же команды и получать те же результаты путем работы с
переменными его MIB.

Как пример такой операции можно просто перегрузить маршрутизатор путем
изменения одной переменной его MIB. При этом существуют отдельные команды
для загрузки системы из flash-памяти, NVRAM, или TFTP файла.

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

Так, например, для раздела, относящегося к интерфейсам Ethernet, определен тест
TDR (Time-domain reflectometry), позволяющий определять приблизительное
расстояние до повреждения в коаксиальном кабеле. Для того, чтобы запустить
TDR тест необходимо установить значение переменной ifExtnsTestTypе
(1.3.6.1.2.1.12.2.1.4), содержащей тип выполняемого теста, так, чтобы она
содержала идентификатор теста TDR в MIB: 1.3.6.1.2.1.10.7.6.1.

Результатом теста будет, во-первых, значение переменной ifExtnsTestResult
(1.3.6.1.2.1.12.2.1.5), характеризующей исход теста:

    отсутствие результата
    успех
    выполняется
    не поддерживается


    невозможно запустить
    прекращен
    неудачное завершение

    И во-вторых, значение переменной ifExtnsTestCode (1.3.6.1.2.1.12.2.1.6) будет
    содержать идентификатор переменной MIB, содержащей результат теста.
    Результат теста определен как временной интервал в 100-наносекундных единицах
    между началом передачи тестового пакета и обнаружением коллизий в несущей. В
    принципе, на основании данного значения можно определить требуемое
    расстояние.

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

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

    Закрывание сокетов


    Когда взаимодействующие модули решают прекратить передачу данных и
    закрыть сеанс связи, они обмениваются трехсторонним рукопожатием с
    сегментами, содержащими установленный бит "От отправителя больше нет
    данных" (этот бит еще называется FIN бит).

    Если сокет больше не используется, процесс может закрыть его с помощью
    функции close, вызвав ее с соответствующим дескриптором сокета:

    close(s);

    Если данные были ассоциированы с сокетом, обещающим доставку (сокет
    типа stream), система будет пытаться осуществить передачу этих данных. Тем не
    менее, по истечении довольно таки длительного промежутка времени, если данные
    все еще не доставлены, они будут отброшены. Если пользовательский процесс
    желает прекратить любую передачу данных, он может сделать это с помощью
    вызова shutdown на данном сокете для его закрытия. Вызов shutdown вызывает
    "моментальное" отбрасывание всех стоящих в очереди данных. Формат вызова
    следующий:

    shutdown(s, how);

    где how имеет одно из следующих значений:

    0 - если пользователь больше не желает читать данные
    1 - если данные больше не будут посылаться
    2 - если данные не будут ни посылаться ни получаться