|
||||||||||||||||||||||||||||
В начале работы над проектом автор обнаружил в Интернете любопытный материал [8]. В нем описывалась реализация Лиспа для целей обучения и планировалось ее использование как в виде настольного приложения, так и в виде ActiveX-компонента, выполняемого на WEB-странице. Тогда у автора возникла мысль о том, чтобы попытаться запустить HomeLisp как серверное WEB-приложение. Запускать HomeLisp как клиентское приложение браузера представляется автору, мягко говоря, не очень плодотворным... А вот используя HomeLisp как серверное WEB-приложение, можно построить учебный класс, в котором на клиентских рабочих местах используются маломощные компьютеры, а все вычисления происходят на сервере. На нем же и инсталлируется HomeLisp в виде WEB-компоненты. |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Первоначально разработчик полагал, что наиболее простым решением будет создание библиотеки ActiveX-Dll, включающей
всю необходимую функциональность HomeLisp. Из этой
библиотеки предполагалось создавать объект в серверном скрипте (с использованием функции CreateObject)
и вызывать из скрипта свойства и методы этого объекта.
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Для функционирования WEB-компоненты нужно обеспечить наличие на компьютере-сервере WEB-сервера IIS или PWS (персональный WEB-сервер). Здесь не будет описываться в подробностях, как инсталлировать это программное обеспечение, поскольку на эту тему имеется достаточно материалов в Интернете. В системе Win-9x инсталлятор персонального WEB-сервера находится на инсталляционном диске в папке \Add-On. Нужно запустить инсталлятор и отвечать на его вопросы. В системах Win-2k/XP для установки IIS необходимо пройти по цепочке:
выбрать "Установка IIS" и отвечать на естественные вопросы (потребуется установочный диск Windows).
За подробностями автор отправляет читателя к специальным руководствам.
Необходимо щелкнуть правой клавишей мыши по иконке "Default Web Cite", выбрать в появившемся контекстном меню пункт "Cоздать" и далее - "Виртуальный каталог": После щелчка мыши по надписи "Виртуальный каталог" запустится мастер создания виртуальных каталогов: Следует нажать кнопку Далее. Пользователю будет предложено задать виртуальное имя (псевдоним) каталога. Именно это имя должны будут вводить в адресной строке браузера пользователи Web-компоненты. Виртуальное имя может быть любым (на приводимом ниже рисунке задано lisp): Задав виртуальное имя, следует нажать кнопку "Далее" - будет предложено ввести реальное имя директории. Его можно ввести в поле ввода, либо восопользоваться стандартным диалогом выбора папки, нажав кнопку "Обзор": На приведенном выше рисунке виртуальное имя Lisp приcваивается реальной директории e:\HLWeb. После нажатия кнопки "Далее", потребуется установить Web-права на создаваемую директорию: Галочки "Чтение" и "Запуск сценариев" должны быть включены. После нажатия кнопки "Далее" мастер создания виртуальных директорий завершает работу: Если все описанное выше, проделано верно, то при вводе в адресной строке браузера адреса http://bob/lisp (Здесь bob - имя сервера автора; пользователь, естественно, должен задать имя своего сервера) отобразится показанная ниже картинка: |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Интерфейс пользователя Web-компоненты HomeLisp очень прост - он включает в себя следующие
элементы:
Если пользователь щелкнет мышью по желтой молнии, то будет отображен результат:
Как можно убедиться, ответ состоит из нескольких областей - полос. В первой полосе продублирована введенная
команда. Вторая полоса содержит результат вычисления введенного S-выражения. Третья полоса
содержит статистические сведения: время вычисления (в сек.), количество занятых списочных ячеек, количество
атомов (после слэша указано количество переменных) и ориентировочный объем использованной памяти.
В этом случае под полосой статистики расположена гиперссылка для просмотра снимка списка объектов на момент выполнения команды. Если щелкнуть мышью по этой гиперсылке, то можно увидеть снимок списка объектов:
Атомы в списке объектов упорядочены в лексикографическом порядке. В заголовке снимка фиксируется дата
и время его создания. Снимок сохраняется в отдельном html-файле на диске; этот файл можно многократно
просматривать. После завершения сеанса пользователя файлы снимков удаляются.
Сам ассоциативный список выглядит так:
Атомы в ассоциативном списке не упорядочиваются по именам, а показываются в порядке их создания.
Если пользователь включил режим статистики (нажав 8-ю иконку панели инструментов или явно введя команду (STAT)), то статистические данные о количестве вызовов функций будут также представлятся отдельной полосой: Если пользователь включил режим дампирования (нажав 10-ю иконку панели инструментов или явно введя команду (DUMP*)), то в отдельной полосе приводится сылка на снимок дампа: Сам дамп вычислений можно просмотреть в отдельном окне, щелкнув по ссылке "Просмотр дампа": Все описанные выше возможности, доступны любому пользователю Web-компоненты. В дополнение к этому, пользователь может пройти авторизацию на сайте. Для этого администратор сайта должен присвоить пользователю логин и пароль. Авторизованному пользователю выделяется отдельное место на жестком диске сервера. Это позволяет пользователю сохранять состояние своей Лисп-машины, а также загружать на сервер и скачивать из своей папки файлы. |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Чтобы пользователь мог авторизоваться на сайте, администратор должен присвоить пользователю логин и пароль. Для выполнения авторизации пользователь должен щелкнуть мышью по двенадцатой иконке панели инструментов (с изображением ключа), - появится экран ввода пароля: На приведенном выше рисунке приведена форма авторизации с введенными логином и паролем. Если пароль верен, то при нажатии Enter будет снова отображена главная форма Web-компоненты. Для авторизованного пользователя она имеет вид: Можно убедиться, что вместо иконки с изображением ключа, появились две дополнительные иконки. Их назначение приводится в следующей таблице:
При щелчке по иконке с изображением дискеты (сохранение состояния), пользователю будет показана следующая экранная форма: Пользователь должен в поле ввода, озаглавленном "Описание файла" ввести краткое описание создаваемого файла, а в поле "Имя файла" задать имя файла с расширением lsp. Имя файла не может содержать буквы диска и имен директорий. При щелчке по надписи "Сохранить состояние" в рабочей папке пользователя будет создан файл, содержащий S-выражения, составляющие текущее состояния Лисп-машины пользователя. Другой способ сохранения состояния заключается в прямом вводе команды WRS:
(WRS "имя_файла" "Описание_файла")
Сохраненное состояние можно затем восстановить из файлового менеджера. Для вызова файлового менеджера пользователь должен щелкнуть мышью по предпоследней иконке панели инструментов (на ней изображено дерево файлов и папок). Главная форма файлового менеджера имеет вид: Опишем органы управления файлового менеджера. Как видно из этого рисунка, файловый менеджер, имеет панель инструментов, а запись о каждом файле в рабочем пространстве кроме текста содержит три управляющие иконки. Информация обо всех иконках сведена в следующую таблицу:
При щелчке по иконке "Cоздать новый файл" открывается окно простого web-редактора, имеющего вид: Пользователь должен задать имя создаваемого файла (по умолчанию - noname), описание создаваемого файла и ввести содержимое файла: Теперь следует щелкнуть по иконке с изображением дискеты. Произойдет сохранение файла в рабочей папке пользователя: Как видно из рисунка, имя файла зафиксировалось. Файл можно редактировать и сохранять многократно. Если теперь вернуться в файловый менеджер (щелкнув по иконке со стрелкой), то можно увидеть, что файл добавился в оглавление: Теперь, чтобы передать созданный файл ядру Лиспа, нужно просто щелкнуть мышью по названию файла. Будет выдано предупреждение: После подтверждения загрузки файл будет обработан ядром Лиспа. Можно убедиться, что заданная функция работает предсказуемо: попытка деления на нуль возвращает атом infinite (бесконечность): Для загрузки файла с внешнего носителя в рабочую папку авторизованного пользователя следует, находясь на главной форме файлового менеджера, нажать кнопу "Обзор" и выбрать нужный файл: После выбора нужного файла, следует задать его описание, как это показано на приводимом ниже рисунке: Теперь следует щелкнуть по 3-ей иконке панели инструментов. При успешной загрузке будет выдано сообщение и файл с комментарием добавится в хранилище:
Теперь этот файл можно корректировать и передавать ядру Лиспа для исполнения.
При щелчке по этой ссылке появится знакомый пользователям Интернета диалог сохранения:
Нажатие кнопки "Сохранить" позволяет сохранить файл на клиентском компьютере (на локальном
или сетевом диске, а также на сменном носителе).
|
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Закрыть сеанс можно, разумеется, просто закрыв окно браузера "крестом". Однако более коррекным способом закрытия сеанса будет щелчок мыши по последней иконке панели инструментов. При этом автоматически гасится процесс ядра Лиспа пользователя, а в браузере отображается вот такая картинка: Красным выделяется чистое время центрального процессора, которое было потрачено в сеансе пользователя. |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Для администрирования WEB-компоненты необходимо в адресной строке браузера браузере ввести адрес:
http://Имя_Сервера/Имя_виртуальной_директории/admin.asp
У автора этого руководства приведенный выше адрес имеет вид:
http://Bob/lisp/admin.asp
Совершенно естественно, что любое администрирование начинается с запроса пароля: Пусть читатель обратит внимание на то, что имя пользователя (admin) вообще не вводится. При первом запуске следует задать пароль password (строчными буквами). Впоследствии пароль администратора можно изменить (и это рекомендуется сделать!) После ввода пароля следует нажать Enter. Если пароль верен, то будет отображена WEB-страница администрирования:
Красным цветом выделено количество активных пользователей (точнее, число еще не истекших сессий ASP).
Ниже каждый из административных режимов будет описан подробнее.
Следует задать/изменить нужные параметры, после
чего щелкнуть мышью по надписи Сохранить. При этом старый файл HomeLisp.ini
будет сохранен под именем HomeLisp.bak и создан новый файл HomeLisp.ini,
содержащий введенне администратором значения параметров.
При щелчке по надписи "Попробовать еще раз" - делается попытка запустить экземпляр Web-компоненты.
Если количество уже запущенных Web-компонент позволяет запустить еще одну, то она будет запущена.
В противном случае пользователю вновь будет показана приведенная выше картинка.
После заполнения всех полей следует нажать Enter. Если пароль не совпадает с контрольным
вводом (содержимое второго поля ввода отлчается от содержимого третьего), то выдается соответствующее
предупреждение, а пользователь не создается. Если делается попытка создать уже существующего пользователя,
то также выдается сообщение об ошибке. Естественно, что нельзя создать пользователя admin.
Если же контроль прошел успешно, новый пользователь будет создан и ему будет выделено рабочее пространство
на диске.
Чтобы удалить пользователя, следует щелкнуть мышью по его имени и затем подтвердить удаление.
При удалении пользователя автоматически удаляется и его рабочее пространство (вместе со всеми файлами).
Администратор должен щелчком мыши выбрать нужного пользователя и ввести для него новый пароль и подтверждение нового пароля: Если все введено верно, пароль у пользователя будет заменен. Режим позволяет заменить пароль и у администратора. Но при замене пароля администратора в целях повышения безопасности нужно будет кроме нового пароля предъявить и старый пароль: В заключение осталось сказать, что логины и пароли хранятся в файле \Pwd\usertab.txt в зашифрованном виде. Трогать этот файл "руками" не рекомендуется категорически. После переназначения пароля администратора и назначения паролей пользователям желательно сделать копию этого файла в надежном месте. |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Рабочее пространство пользователя представляет собой папку с именем usr_Логин. Так, для пользователя Bob имя папки будет usr_Bob. Внутри этой папки располагается следующая информация: Папка Tmp, в которой хранятся протоколы работы пользователя; Текстовый файл descript.ion, котором каждая строчка содержит информацию об одном файле, загруженном в рабочее пространство; Списка файлов вида "_nnnn.lsp", где nnnn - порядковый номер загруженного файла. Файлы, загружаемые в рабочее пространство пользователя, переименовываются, а их исходные имена (а также длины, даты создания и описания, заданные пользователем) - хранятся в файле descript.ion. Ниже приводится фрагмент файла descript.ion:
Можно видеть, что файл _0022.lsp первоначально назывался test1.lsp, имеет длину 233 байта и был загружен 10.10.2009. При загрузке пользователь снабдил этот файл комментарием: "Тест FACT и TRY". |
||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
Ошибки, которые могут возникать при работе Web-компоненты, можно разделить на две группы:
Автор выражает надежду, что подобные ошибки будут возникать чрезвычайно редко (или вообще не будут возникать)... |
||||||||||||||||||||||||||||