Общение

А для чего, собственно?

К blog-ам в первую очередь хотелось бы привлечь внимание тех, кто задумывается над созданием персональной веб-страницы или сайта. Как показывает опыт, после бурного творческого порыва, вызванного прочтением книжки о FrontPage, большинство новоявленных веб-зодчих угасает, так и не внеся в Сеть что-либо действительно новое и интересное. Опубликовав фотографию своей кошки и пару любимых анекдотов, владелец сайта упирается в стену творческого кризиса. Публиковать ссылки на интересные сайты? Yahoo.com и Yandex.ru все равно не переплюнешь. Публиковать анекдоты? anekdot.ru их публикует по сотне в день. Так, сайт быстро "стареет", на него не ходят даже собственные друзья владельца, потому как читать там совершенно нечего.
А между тем blog идеальным образом подходит для домашних страниц. Руководствуясь принципом "что вижу, то пою", вы - как владелец сайта - никогда не испытаете "страха чистого листа". Никогда не будете грызть ногти в раздумьях "что же мне там на сайте опубликовать-то"? Ведь писать можно все, что угодно. Лучший материал - это то, что вы написали сами, лично, а не скопировали с anekdot.ru или с omen.ru. Blog-и в сети напоминают площадь в день митинга, где у каждого в руках мегафон и каждый кричит в него всё, что ему взбредет в голову. Благодарные слушатели ходят от оратора к оратору, пробегают мимо зануд и матерщинников и толпятся у трибун с интересными личностями.
На первый взгляд этот хаос и поток слов (перемежающийся с запором мыслей) кажется ужасным, но поверьте, читать ежедневные blog-и намного интереснее, чем любоваться домашней страницей двухлетней давности с подборкой засаленных рефератов и ссылкой на www.design.ru.
Благодаря blog-у, ваша персональная страница приобретает личностный оттенок, несет особую индивидуальность, и тем самым выделяется на фоне скучных аляповатых домашних страниц. По самой природе blog-а, у вас руки сами будут тянуться написать туда что-нибудь. И вы еще будете извиняться перед своими посетителями за то, что целых два дня не написали ни строчки - как будто до этого есть кому-то дело.

Что говорит наука?

Как общественный сетевой феномен, blog-и стали предметом исследования психологов. Причины популярности blog-ов кроются в природе человека. Вот некоторые из этих причин:
  • Самоудовлетворение. Некоторым людям просто необходимо быть в центре внимания. Они чувствуют себя лучше, если они могут сказать всему миру о каких-то вещах или мыслях, которые им кажутся важными.
  • Самоутверждение. Когда людям кажется, что они превращаются в мелкий незначащий винтик общества, они стараются найти отдушину, чтобы утвердить свою особенность и индивидуальность. Ведя свой blog, человек показывает, что он чем-то отличается от других.
  • Средство от тоски. Каждодневная жизнь, особенно в городе, наполнена обыденностью и скукой. Blog-и дают людям возможность поведать о своей тоске всему миру. Читая blog-и вы часто будете сталкиваться с какими-то жалобами на жизнь, окружающую среду, соседей, птиц, погоду и т.д. Только не подумайте, что все blogger-ы - плаксы и нытики.
  • Общественная потребность поделиться чем-то. Любому писателю, который получает деньги за то, что он пишет, трудно смириться с мыслью, что есть множество людей, которые делятся своими мыслями и открытиями даром.
  • Проба пера. Очень многие хотят стать писателями. Благодаря blog-ам, люди получают возможность опробовать свое перо на аудитории читателей, не прибегая к помощи издателей и литературных агентов. Не все пишут хорошо, но это мало кого волнует. Некоторые пишут просто замечательно. Неплохо было бы, если бы на занятиях литературных кружков учили писать в blog-и.


  • Что такое blog?

    Что такое blog? Это web-страница, содержащая личные заметки, дневник, или ленту новостей со ссылками. Название blog произошло от английского слова "weblog ", означающего дословно "web-лента записей". И вправду, любой blog представляет собой список записей-заметок, расположенных в хронологическом порядке, - этакий личный сетевой дневник.
    Самым-самым первым blog-ом можно считать страницу Тима Бернерса-Ли (Tim Berners-Lee), где он начиная с 1992 года публиковал новости о развитии WWW и появлении новых web-сайтов.
    Первые blog-и появились в 1996 году, а к 2003 году популярность их стала настолько высока, что они объявлены даже отдельным жанром сетевой литературы и журналистики.
    Ярким примером сетевых дневников является , , , . Как вариант дневниками коллективного пользования можно считать . И чем, кстати, не дневник - Тёмино ru/kovodstvo, Miu Mau или http://www.kottke.org/ - фундаментальный blog дизайнера Jason Kottke?

    End of Print

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

    Ну что, о-blog-имся?

    Прежде чем завести свой blog, необходимо решить, хотите ли вы вести его на своем сайте, или воспользоваться услугами другого сайта. В первом случае вам придется устанавливать и настраивать blog-программу самому, но зато вы будете полным хозяином своего blog-а, его внешнего вида, его размеров и прочее. Во втором случае вы получаете все уже готовенькое (часто даже и бесплатно - http://www.blogger.com/about.pyra), только ваши манипуляции с blog-ом будут несколько ограничены (изменение внешнего вида, настройки кодировки) или будет раздражать отсутствие какой-либо нужной вам функции.
    Самый простой blog-ом можно сделать вручную. Всякий раз, когда вы хотите что-то написать, вы открываете страницу сайта в Блокноте или в FrontPage и добавляете в начало страницы новую запись. Затем закачиваете страницу на сервер по FTP... и так каждый день.
    Но можно и автоматизировать этот процесс. Blog-программа или blog-скрипт по сути ничем не отличается от скриптов, используемых для гостевых книг и форумов. Они бывают платными и бесплатными (менее функциональны). Записи-заметки хранятся либо в текстовых файлах, либо в базе данных. Существует множество blog-программ, написанных на php, asp, jsp, perl и т.д. Любой поисковый сервер поможет вам найти скрипт, подходящий для вашего случая. Самые простые blog-и позволяют только публиковать заметки. Более продвинутые позволяют читателям оставлять свои комментарии к заметкам, разбивать заметки по категориям (http://xplane.com/xblog/).
    Обычно blog обновляется через веб-интерфейс. Но есть blog-программы, которые имеют клиентскую часть, из которой вы можете сделать запись в blog-е, не утомляясь набором URL-а в броузере. Эта клиентская программа сидит тихонечко себе в system tray, и вам достаточно одного щелчка мышки, чтобы, не задерживаясь, написать только что пришедшее в голову тысяча семьсот восемьдесят пятое доказательство теоремы Ферма или очередную тайну мадридского двора.
    В своем blog-е вы можете давать ссылки и на другие "дружественные" blog-и, чтобы посетитель, почитав ваши опусы, мог перейти на опусы ваших друзей.
    А от них, на опусы их друзей. И так далее, пока круг не замкнется, и посетитель не вернется опять на вашу страницу с blog-а какого-нибудь вашего друга. Некоторые blog-программы (livejournal.com) позволяют генерировать объединенный blog с записями всех ваших друзей. Зайдя на такую страницу посетитель сможет увидеть все, что написали в ближайшее время все ваши друзья. Подбирая себе в коллекцию "друзей", вы как бы формируете собственную web-газету по своему вкусу. И то, какими друзьями вы "угощаете" своих посетителей, тоже говорит о многом. Воистину, "скажи мне, кто твой друг, и я скажу - кто ты".

    Если вы новичок в html, воспользуйтесь blog-программой. Тогда ваш blog будет выглядеть более изящно, стильно, так как часто записи публикуются в XHTML с помощью логических тегов
    и , а само оформление осуществляется с помощью стилей CSS. Поупражняться с CSS еще никому не мешало, зато каждый день вы можете менять внешний вид blog-а как душе угодно, редактируя только один css-файл. Именно с работая с blog-ами, вы почувствуете принцип "разделения содержания и оформления", о котором столько говорят веб-дизайнеры ().

    Одна из примечательных функций многих blog-программ это способность генерировать rss-документ или xml-представление blog-а. В этом случае записи blog-а пересекают границы сайтов, на которых они расположены, и могут быть включены в любой веб-сайт, умеющий работать с XML-документами. Например, мой дневник , а rss представление его - вот так. Вытянув этот документ и пропустив его через парсер и xsl-преобразование, вы можете вставить список моих новостей в свой сайт. Или например (правда этот blog уже закрыт), Дениса Карницкого или blog тусовки российских дизайнеров

    Рунет: второе дыхание?

    - сотрудник РНЦ "Курчатовский Институт" (Москва)
    Журнал "Открытые системы" #08/2004
    В последние два года популярным стал подсчет числа пользователей Internet в России и калькуляция их процента от общей численности населения страны, что связано с ожиданием достижения «магического» рубежа — 10%. Говорится об этом «волшебном» числе много, но первоисточник, который бы коротко, ясно и просто объяснял, почему именно 10% является таким важным рубежом, упоминается редко. А все, на самом деле, просто. Из пороговых моделей теории «внедрения достижений науки и техники в народное хозяйство» (Diffusion of innovation) следует, что когда число реальных пользователей инновации подходит к 16% от общего числа потенциальных пользователей инновации, то последующий рост числа реальных пользователей приобретает «взрывной» характер. Это означает, что с данного момента можно уже не заботиться о рекламе инновации, а просто «стричь купоны».
    Модели эти в свое время были разработаны для анализа практики внедрения удобрений в сельском хозяйстве «медвежьих» углов США, но позже хорошо себя зарекомендовали для анализа внедрения любых других инноваций, в том числе и в сфере информационных технологий. Любопытно, что сам автор метода, Эверет Роджерс, оценивая Сеть, пришел к выводу [1], что «критическая» масса пользователей Internet в США, достигнутая в 1990 году, оценивалась тогда в 5 млн человек, что, понятно, не равнялось 10% населения Северо-Американских Штатов. Пока Фонд «Общественное мнение» [2] и другие исследователи, занимающиеся мониторингом числа пользователей, констатируют линейный рост числа пользователей в России, отметка в 10% (более 12 млн жителей) по их же данным уже достигнута.
    В конечном счете, социологический мониторинг критической массы связан с ожиданиями коммерческого успеха Internet-начинаний, который ассоциируется с такими понятиями как «спрос» и «предложение». Число пользователей — это оценка спроса, а число зарегистрированных в национальной зоне доменов можно, видимо, считать оценкой предложения.
    В конце концов, пользователи Internet «ходят» в Сеть за информацией, а она размещена, главным образом на сайтах, которые, в свою очередь, имеют доменные имена. Если верна формула «спрос рождает предложение», то кроме числа пользователей должно увеличиваться и число зарегистрированных доменов. Домен COM дает тому наглядное подтверждение (рис. 1). «Критическая» масса в зоне COM была достигнута в 1994 году, и линейный рост сменился экспоненциальным. При этом следует отметить, что основной «двигатель» коммерческого успеха Internet-технологий — World Wide Web — фактически появился позже, чем была достигнута критическая масса пользователей.

    Рунет: второе дыхание?


    Рис.1. Рост числа регистраций в 90-е годы в зоне COM по данным zooknic.com

    Интересно сравнить тенденции регистрации доменов, наблюдаемые в США с отечественными. Данные РосНИИРОС ( www.ripn.net ) и Ru-center ( www.nic.ru ) свидетельствуют о том, что намечавшийся в 1998 году показательный рост числа регистраций доменов в национальной зоне RU постепенно, после 2000 года, сменился линейным ростом (рис. 2).

    Рунет: второе дыхание?


    Рис.2. Рост числа регистраций в зоне RU (1998-2003) по данным РосНИИРОС и RU-Center

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

    Существует твердое убеждение, что чем дешевле стоимость регистрации, тем больше будет новых доменов. Косвенным подтверждением этому служит ситуация с введением института независимых регистраторов, с которым связывают падение стоимости регистрации в домене COM с 35 долл. до 15 долл. и менее, а также «драматический» рост числа регистраций, начиная с первого квартала 2000 года и до «схлопывания Internet-пузыря» 2002 года. Осмелюсь предположить, что это не совсем так.

    Заметим, что снижение цены регистрации происходило и при монополии NSI. Кроме того, в 2000-м и 2001 году любой американский «стартап» имел такие подъемные, что затраты на регистрацию домена в них можно было разглядеть только под электронным микроскопом.


    А падение общего числа зарегистрированных доменов с 23 до 21 млн штук произошло уже при наличии «соревновательной» системы независимых регистраторов, которая смогла вернуться к цифрам начала 2001 года только летом 2003. Введение института независимых регистраторов в зонах ORG, NET, COM — это просто реакция на бурный рост регистраций, вызванный коммерческой привлекательностью Сети. Институт независимых регистраторов разрушил монополию NSI, позволил заработать независимым регистраторам, уменьшив, соответственно, доходы NSI, и за счет конкуренции снизил цену регистрации домена, не повлияв существенным образом на динамику роста числа регистраций.

    В российском национальном домене RU мы наблюдаем аналогичную картину. Показательный рост числа регистраций начался задолго до того, как РосНИИРОС снизил цены на регистрацию под напором «Internet-общественности», однако к изменению существующей на тот момент тенденции это не привело — число зарегистрированных доменов было бы точно таким же и без снижения цены регистрации. Второе понижение цены на регистрацию, вообще никак не повлияло на темпы регистрации доменов.

    В домене RU введен институт независимых регистраторов и сегодня их уже семь. Так же, как и в других доменах, существенного влияния на общее число регистраций это нововведение не оказывает. Главным отличием домена RU образца 2004 года от домена COM образца 2000 года является то, что последние два года рост регистраций носил линейный характер. Это означает, что с коммерческой привлекательностью Рунета не все так очевидно, как было в Соединенных Штатах во времена президента Клинтона. Либо у нас все еще впереди (на что очень хочется надеяться), либо, учитывая период с 1998 по 2000 год, все уже позади.

    Еще одним отличием RU от COM является размер доли традиционного регистратора среди общего объема регистраций. В зоне COM сразу после введения института независимых регистраторов доля NSI в общем объеме регистраций сразу упала ниже 50%. За первый квартал 2000 года на NSI пришлось 1,5 млн регистраций, а на всех остальных регистраторов около 5 млн.


    В домене RU доля компании RU-Сenter (наследник РосНИИРОС) составляет около 60% всех регистраций и продолжает расти. Видимо, мнение, что «старый конь борозды не портит» доминирует среди владельцев российских доменов.

    Рунет: второе дыхание?


    Рис.3 Рост числа регистраций в 2004 году по сравнению с тем же периодом 2003 года (по данным проекта stat.nic.ru)

    Однако кое-какие положительные изменения все же происходят. Мониторинг динамики регистраций (рис. 3) показывает, что темпы регистрации доменов в 2004 году выше, чем в 2003. Характер динамики роста не изменился и остался линейным, но эта линия идет заметно круче. Период майских праздников и летних отпусков выбран не случайно. Обычно в это время темпы регистраций существенно падают, но в нашем случае эти сезонные колебания тенденции не меняют. Линейный характер роста числа зарегистрированных доменов, видимо, связан с экстенсивным расширением Рунет, т.е. по мере физического подключения новых пользователей к Сети появляются и новые домены. У большинства этих пользователей еще не наступило озарение, что кроме банального «Вася и Петя уже здесь» можно «учудить» что-нибудь более полезное. Одним словом, не все так плохо и хочется надеяться, что у Рунета все еще впереди.

    Документация

    Опыт доказывает: недокументированная возможность равнозначна ее отсутствию - поэтому от документации зависит очень многое. Документация к NQL может служить примером "как это нужно делать". Есть два основных текста: обзоры по всем темам - NQL Language Manual, и отдельно - NQL Statement Reference Guide. Единственный недостаток последнего - модальное окно. То есть во время чтения справки вы не можете править программу. Кроме названных двух help'ов, во время набора текста вы получаете внизу экрана справку по введенной команде и ее параметрам - очень удобно.
    Сбоку экрана (изначально справа) располагается Toolbar. В отличие от современных пиктографических палитр инструментов (вероятно, рассчитанных на неграмотных), в этом Toolbar'e перечисляются команды по функциональным группам, предоставляя тем самым способ быстрого построения кода.

    NQL: твои агенты в Сети

    Арсений Чеботарев,

    Сеть разбухает с каждым днем, и наш усталый мозг давно уже не в состоянии обрабатывать входящий трафик. Но лень на то и добродетель программиста, чтобы побудить его к автоматизации собственной жизни… Интернет, скажем, автоматизировать можно по-всякому - к примеру, так...
    Идея автоматизации работы в Сети не нова. Если условно считать сеть состоящей из серверов и клиентов, то код, работающий на стороне сервера, изначально создавался для работы в автоматическом режиме. В последнее время, например, большинство контента веб-страниц генерируется динамически. Так что для того, чтобы действительно "вкалывали" роботы, а не человек, осталось автоматизировать клиентскую часть. Идея проста: пускай компьютеры общаются друг с другом - а человеку останется обналичивать кэш. (Программы, работающие на стороне и/или от имени клиента, будем называть сетевыми агентами, роботами или ботами.)
    Исторически сложилось два подхода к программированию сетевых агентов. Первый заключается в реализации сетевых протоколов, таких как http и ftp. Обычно это уже не нужно делать вручную, поскольку современные языки, как правило, содержат необходимые библиотеки. К наиболее известным можно отнести сетевые библиотеки perl, Delphi, Java, а теперь еще и этот новомодный.NET.
    Другой подход, специфичный для нескольких протоколов, связан с автоматизацией Internet Explorer'a и реализуется обычно на Бейсике. Хотя многие программисты могут посмеяться над этой техникой, но на самом деле использовать чужой код всегда выгодно. Internet Explorer реализует массу высокоуровневых вещей, которые тот же perl не сделает никогда - или, по крайней мере, это будет лишняя и ненужная работа. К таким вещам относится поддержка куков вообще и сессий в частности, выполнение скриптов, динамическая генерация контента, обработка встроенных объектов и так далее. То есть проблема сводится к одному: некоторый контент генерируется автоматически, и не всегда легко вычислить, что там в конце концов получится.
    Расскажу вам о языке программирования NQL, сочетающем в себе лучшее из обоих миров,- это значит, что он может как работать на уровне GET-POST, так и автоматизировать IE. И дело не столько в том, что NQL может это делать (при определенной сноровке такие вещи можно проделать на любом языке) - суть в том, что для NQL это основное занятие: синтаксис доступа к Сети крайне прост, встроен в язык, хорошо документирован и доступен для понимания на уровне продвинутого пользователя (бывалый кодировщик может при случае вспомнить dbase2).

    Особенности NQL-синтаксиса

    Что общего у синтаксиса C и Basic? Этим общим знаменателем как раз и является синтаксис NQL. Некоторые элементы позаимствованы у Basic (например, разделение команд в одной строке двоеточиями). С другой стороны - фигурные скобки и комментарии явно указывают на родство с C. Обработка ошибок поддерживается в двух формах - можно обрабатывать прерывания по ошибке в духе On Error, а можно анализировать значения возвращаемой функции.
    В язык встроены две уникальные по своему удобству возможности, в других языках не встречающиеся. Первая - это встроенное состояние, оставляемое после последней команды. Это состояние сигнализирует о том, успешно ли была выполнена команда (или был ли получен положительный результат), и принимает значения true или false. Впоследствии это значение может быть предметом исследования - так, как бы вы выполнили if:
    get URL then { ... }
    Такая манера выполнения может оказаться более удобной, чем постоянный опрос функций. Второй уникальной конструкцией является стек. Собственно в самом стеке ничего уникального нет. А вот то, что он встроен на уровне языка, это, конечно, сильно. Со стеком по умолчанию работают многие функции и команды, так что код становится "интуитивным". Например:
    get URL: show
    показывает в окне содержимое только что получtнного htpp-документа (или что уж там было получено). Стек адресуется встроенными переменными. (точка) и.. (две точки) - для указания на первый и второй сверху элементы. Встроенные функции push и pop позволяют, соответственно, получить и вставить в стек элемент - так что стеком можно управлять как явно, так и неявно, в процессе выполнения команд.

    использование http

    Часто нужно посмотреть, как сделана та или иная страничка - то есть не просто HTML-содержание, а, например, тип возвращаемого контента (некоторые мастера любят периодически толкать html, а то и exe с расширением jpeg). Кроме того, часто бывает полезным "выцепить сессию" - то есть отследить, какие куки устанавливаются в момент авторизации, чтобы потом передвигаться по сайту под своей сессией. Получить хедер ресурса не просто, а очень просто:
    head 'http://easypic.com/main.html?bypass' show httpHeader
    После каждой HTTP-операции четыре переменные: httpAction, httpHeader, httpURL и httpData - устанавливаются в последнее полученное значение. Если нет уверенности в том, что ресурс существует, можно сделать отображение условным:
    head 'http://yahoo.com' then { show httpHeader }
    Отобразить собственно содержимое страницы еще проще, поскольку после загрузки по get контент находится в стеке:
    get 'aaa.com' show
    Если требуется передать данные по POST, то нужные параметры следует затолкать в стек и после этого вызвать команду post:
    push 'Login=melkosoft&Password=guess&level=1&Domain=ukr.net' post 'http://www2.ukr.net/cgi-bin/auth' show
    Последний пример может оказаться полезным для пересылки почты с ukr.net на какой-то POP3-аккаунт, поскольку POP3 на ukr.net может как работать, так и не работать. Более сложная программа может делать анонсы полученной почты за последнюю неделю, выбирать только интересные сообщения и посылать сообщение об этом на другой аккаунт. Если последний еще и связан с пейджером, то можно создать систему фильтрации входящих сообщений от спама с параллельным уведомлением на SMS. Другое применение - брутальные форсеры для онлайн-почты.
    При входе в систему с паролем вам придется отслеживать сессии, записываемые в куки - возможно, вы предпочтете автоматизировать браузер в случаях, подобных показанных в следующем примере.

    автоматизация IE, match, upload по ftp

    Следующий пример показывает автоматизацию браузера. Происходящее можно назвать "похищением контента": из Сети закачивается веб-страничка, содержание анализируется на предмет наличия полезных линков, после чего формируется новая страничка, содержащая только интересующую нас информацию. Опционально полученная страничка "поднимается" по ftp на наш сайт.
    Хочу подчеркнуть, что это только демонстрация работающей технологии, а не дискуссия по правовым и/или моральным вопросам, таким как порно в Сети, использование "Ad Killers" и чужого контента.
    // следующий фрагмент - калька с get 'http://easypic.com/main.html?bypass' // здесь get не работает - из-за перегрузки сервера страница часто // не успевает загрузиться и сеанс обрывается. for j=1,10 { openbrowser 'http://easypic.com/main.html?bypass', '', '', '', '', true every 10 // с периодичностью 10 сек { i=1 getbrowserdata if (contains (., 'EasyPicTM')) // первый параметр - вершина стека { break 4 } else { pop i=i+1 if (i>60) // если за 10 мин. не закачалось - начинаем сначала { closebrowser break 3 } } } } closebrowser
    // прошу прощения у всех Василиев Пупкиных за использование их несгибаемого трейдмарка create 'C:\index.htm' write 'Too Easy Pics
    ' write '

    Vasiliy Pupkin presents: great EasyPic now easier than ever!

    ' write '
    To see original EasyPic with counters, banners, links to links, popups ' write 'and other useless stuff click herom

    ' match ('
    Webcams
    ') while (match ('size=4>{Title}
    ')) { write '

    {Title}

    ' write ''
    // смысл следующих строк - сделать копию контента (остатка), отрезать спереди один раздел, копию // выбросить а сам раздел положить в стек, не факт что все оптимально, главное, что работает push. match '{once} size=4>' pop push once
    while (match ('')) { if (!contains (Link,'traffic.cgi')&&!contains (Link,'cout.cgi')&&!contains (Link,'spotbrokers')) { write "XXX " } } pop write '


    ' if (Title=='Shemale') { break 2 } } write '' close
    end // закомментируйте, если хотите выложить результат в Сеть,- только не пишите, что это ваше:\
    ftpidentity 'tooeasy','guess' ftpopen 'ftp.narod.ru' ftpput 'C:\index.htm' ftpclose

    закачка контента в БД

    Это самый типичный случай для делового приложения - закачка контента в БД. Ситуация может быть самая разбанальная - вы ищете варианты квартир или еще что-то в газетах типа "Авизо". Можно сканировать саму газету, можно листать сайт бесконечным образом, но все-таки более экономичный вариант - выкачать контент в базу данных и после программно обеспечить условия для поиска, печати или анализа информации.
    NQL может получать доступ к БД тремя способами, или, как говорят, "методами": ODBC, ADO и OLEDB. По умолчанию стоит ODBC, и поскольку это работает нормально, нет никаких причин изменять это умолчание. Для Java-версии, соответственно, предусмотрено несколько методов с участием JDBC.
    Для операций можно использовать SQL-конструкции и дополнительно - nextrecord для выбора следующей записи. Поля результирующего набора при выборе по SELECT отображаются в переменные автоматически. Nextrecod тоже автоматически, в духе NQL, устанавливает код ошибки, так что код, выполняющий запрос и обрабатывающий результат, выглядит тривиально:
    opendb "phonebook" select "SELECT Contacts WHERE State='NY'"; while { show Name, Street, City, State, Zip, Phone nextrecord }
    Рассмотрим практический пример - пусть наша программа получает данные из газеты объявлений и складывает их в таблицу БД. Как всегда, можно "пойти другим путем" - выкачать весь раздел или даже газету и потом в комфортной обстановке разбирать ее на молекулы. Либо же прямо в момент выкачки анализировать и выбирать нужные строки. Мы продемонстрируем второй вариант - то есть выкачаем один раздел с фильтрацией строк. Допустим, мы ищем б/у Hi-Fi технику.
    Наша программа может выглядеть так:
    record #avizorec=issue, rubric, rubname, pline
    get 'http://www.aviso.com.ua/aviso/browse.asp' match "ads/kiv/{codename}.asp" pop
    push codename match '{prefix}/' pop
    get "http://www.aviso.com.ua/aviso/ads/kiv/" &codename&".asp" match "HRef=\"{pagename}.asp\">Rubric #620" pop push pagename match "{dbsec}/" pop

    openbrowser "http://www.aviso.com.ua/aviso/ads/kiv/" &prefix&"/"&pagename&".asp",'','','','',True getbrowserdata
    opendb 'avizo' table 'ads'
    while true { match "Aviso newspaper {issue}. Rubric {rubric}.{rubname}" match "

    " push. match "{lines}


    " pop push lines while (match ("{pline}

    ")) { if contains (pline,'б/у')&&contains (pline,'удио') { addrecord #avizorec } } pop
    match "- NEXT -
    " else { break 2 } browse "http://www.aviso.com.ua/aviso/ads/kiv/" &prefix&"/"&dbsec&"/"&lnextp&".asp" getbrowserdata } closedb closebrowser
    Как видно, здесь применяется комбинированный подход - сначала осуществляется поиск нужной страницы с помощью get (URL имеет прихотливый и непредсказуемый вид, так что приходится исследовать ссылки), а после, во избежание работы к куками, закачивается собственно информация - можете переделать этот фрагмент с использованием get и посмотреть, что получится. Результат в данном случае сохраняется в базе данных - предполагается, что вы предварительно создали ODBC-источник с именем avizo и что эта БД содержит таблицу adv. В дальнейшем нам ничего не мешает снова использовать NQL для работы с этими данными.
    Пример реализации этой технологии: периодическое выкачивание предложений работы по заданному критерию (допустим, с такого мегапортала, как dice.com) и массовая рассылка резюме по найденным адресам (это вовсе не спам - там оставляют свои адреса как раз затем, чтобы им присылали резюме; да и как же иначе должен рассылать программист, если не автоматически?). Поскольку данные изменяются сравнительно медленно (скажем, раз в сутки-двое), а рассылки (гипотетически) производятся по несколько раз в день, то окажется выгодным закачивать данные один раз и хранить их в БД для последующего использования.
    * * *
    Всё, о чем тут шла речь, это только верхушка айсберга. Каждый из вас придумает (если уже не придумал) десятки применений своим агентам - от закачки бизнес-котировок до системы управления контентом, поиска квартирных вариантов или активной раскрутки веб-проектов. Только имейте в виду: вы в ответе за сетевых агентов, которых приручили,- и потом не говорите, что я вас не предупреждал!

    Способы запуска программ

    NQL не является универсальным языком программирования, на нем нельзя написать полноценную программу с графическим интерфейсом пользователя. Поэтому фрагменты NQL-кода часто должны выполняться в каком-то другом приложении. Поговорим о том, как выполняются NQL-программы, то есть, как вы используете готовые скрипты на SQL - как из OS, так и из других программ.
    Выполнение всегда происходит по одному и тому же сценарию: ваша программа в текстовом виде находится в файле или в переменной в памяти. Дополнительно есть две области для входных и выходных данных и, возможно, еще несколько параметров. Иными словами, вы имеете текст программы и передаете его интерпретатору. Такой "полностью динамический" механизм позволяет не только загружать файлы во время выполнения, но и конструировать программы прямо во время выполнения - точно так же, как это делается с командами SQL. Обратная сторона, быстродействие, в сети вряд ли будет критическим местом - запросы к сети, как правило, будут раз в 100-1000 медленнее интерпретации.
    Первый способ выполнения - в среде разработки IDE. Фактически вы можете выполнять программу в трех режимах: выделенном (не рекомендую - подвешивает систему), фоновом и отладочном. В последнем случае код выполняется по одной строке, и вы по ходу дела имеете доступ к переменным, стеку данных и прочим подробностям рантайма. Как вариант - с помощью IDE создать файл бота с расширением .BOT. Это бинарная форма программы после синтаксического разбора, созданная для поставки ваших программ в "нечитабельном" виде.
    Способ номер два - создать независимой приложение, выбрав в IDE Create EXE. Само приложение располагается на рабочем столе (несколько нетипичное поведение, обычно на стол выкладывается ярлык). У независимых модулей есть дополнительные возможности - выводить данные о текущем состоянии программы в специальных областях нотификации. При выполнении таких программ вы можете прикрепить к своей программе скин - bmp-образ, и таким образом сделать вашего бота ни на что не похожим.
    К сожалению, эта возможность еще требует доработки.

    Способ № 3 - выполнять программы NLQ из командных файлов или из командной строки с помощью программы nqlexec. Этот метод имеет ограничение - ваша программа не сможет получать или выдавать входной и выходной потоки данных.

    Способ № 4 - выполнять скрипт в заданное время с помощью программы NQL Agent. Это оконная программа, доступная через меню Пуск.

    Остальные способы - программные, то есть вы вызываете интерпретатор NQL из другого языка программирования, такого как C или Basic.

    Для вызова из таких языков, как Basic, проще всего использовать ActiveX-компонент. Расскажу об этом подробнее, поскольку такое применение является самым вероятным, например в VBA. В вашем распоряжении только три метода: Run, RunScript и RunScriptFile - что, в общем-то, одно и то же, за исключением того, где лежит текст вашей программы. Из событий в наличии тоже три наименования: End, Notify, Show - соответствующие активным действиям вашего приложения. Несколько больше полей данных - в частности, для входных и выходных потоков, флаги обработки ошибок и нотификации.

    Метод № 6, облегченный ActiveX - ATL-класс для встраивания в "легкие" контейнеры. Обычно для создания экземпляров класса в ASP-приложениях с помощью CreateObject.

    Метод номер следующий - вызов скриптов через классы Java и C++, для чего нужно подключить к вашему приложению соответствующие файлы class, java, h - и так далее.

    И, наконец, если вам не подходит ни один из перечисленных способов (что само по себе странно), то вы можете вызывать интерпретатор непосредственно из DLL через соответствующий API. Для этого, опять-таки, понадобится nql.h, и придется продумать еще пару трюков - то есть это не то, к чему вы должны стремиться, поскольку для интерпретатора не существует разницы между ATL/DLL.

    Если вы заинтересованы в подробностях - читайте раздел Working with NQL в NQL language manual.

    Теперь приведу несколько примеров в подтверждение своих слов. Скажу сразу - не всё из перечисленного будет работать :-).В частности, ftp-сервер narod.ru больше не отвечает на запросы. Так что, хотя сайт tooeasy.narod.ru и существует, реально обновить его не удастся - и, уж конечно, не с приведенным паролем. Естественно, что в реальных приложениях все окна автоматизированного браузера можно скрыть - здесь они отображаются только в целях наглядности.

    Встроенные возможности языка

    Минималистический стиль этого описания я позаимствую из инструкции к трояну Donald Dick. Итак, в язык встроено всё: сокеты, http, ftp, почта (писать, получать, разбирать), работа с локальными файлами, базами данных через ADO/OLEDB/ODBC SQL, автоматизация браузера (полнейшая), базовая обработка графики (включая управление TWAIN-устройствами), OLE-автоматизация, разбор XML, работа под CGI, управление мобильными устройствами, финансовые и e-commerce функции (OFX), Fuzzy logic, нейронные сети, функции принятия решения, приложения теории вероятностей, воспроизведение голосовых сообщений, масса функций и возможности расширения языка.
    Хотя этот перечень и выглядит как набор "все на свете", но реализация сделана очень прямолинейно и поэтому изящно, в духе языков "эпохи до ООП". Поскольку NQL не предназначен для создания масштабных и, тем более, универсальных приложений, то здесь не применяются классы и объекты. Это можно рассматривать и как недостаток, и как достоинство - поскольку объекты и классы часто применяются в тех случаях, где без них было бы лучше.

    Говорит и показывает Интернет

    Евгений Патий


    Увеличение пропускной способности каналов связи мотивируется по-разному. Одна из основных целей производителей аппаратуры и программного обеспечения - сделать так, чтобы пользователи могли в полной мере ощутить возможности транспортировки мультимедиаинформации, в которой доминирует видео.
    Увеличение пропускной способности каналов связи мотивируется по-разному. Одна из основных целей производителей аппаратуры и программного обеспечения - сделать так, чтобы пользователи могли в полной мере ощутить возможности транспортировки мультимедиаинформации, в которой доминирует видео.
    Передача мультимедиаданных по IP-сетям сегодня является настоящим двигателем индустрии, ее стимулом к развитию. Судите сами: видео и аудио автоматически подразумевают генерирование больших объемов трафика, а значит, требуется "разогнать" каналы, обзавестись разнообразнейшим мощным сетевым оборудованием, которому по силам справиться с лавиной информации, разработать и создать методы защиты этих данных и т. д.
    Конечно, такое положение вещей только на руку производителям - ведь все вышеперечисленные обстоятельства подразумевают увеличение выпуска оборудования и продаж, поэтому идея мультимедиатрансляций старательно культивируется и оберегается от посягательств скептиков.
    Идея комплексных услуг (когда одна розетка обеспечивает доступ в Интернет, к телефонии, телетрансляции и т. д.) уже не нова, по крайней мере, на мировом уровне. В России же этот подход внедряется достаточно вяло: причины очевидны - оказание комплексных услуг требует ощутимых инвестиций. Еще одно препятствие - нежелание застройщиков или владельцев зданий сотрудничать с операторами.
    Видеотрансляция посредством IP-сети сегодня уже достаточно хорошо отработана и даже может быть разбита на несколько подвидов:
  • собственно IP-телевидение (Live TV) - вещание в реальном времени с использованием режима IP multicast. Есть обычное понятие ТВ-канала и, соответственно, оплаты за его просмотр;
  • видео по запросу (Video on Demand, VoD) - предоставление видео по персональному запросу подписчика через IP в режиме unicast.
    Продается обычно фильм или его часть;
  • NVoD (Near Video on Demand) - вещание c VoD-сервера в соответствии с сеткой вещания по IP multicast. По сути, комбинация двух предыдущих технологий;
  • видеоконференции.

    Говорит и показывает Интернет


    Сформированный поток ТВ-каналов представляет собой поток IP-пакетов, передаваемых в сети по отдельному групповому адресу

    В идеальном случае провайдеру необходимо предоставлять клиенту все три типа сервиса (и довольно много дополнительных, типа network based Personal Video Recorder, nPVR). А для этого требуется генерировать контент, инкапсулировать в IP и далее транслировать его клиенту. И все это - в реальном времени и на десятки или сотни каналов.

    Одним из пионеров российского рынка TV-over-IP выступила компания CTI. В конце прошлого года CTI провела пресс-конференцию по данному вопросу, на которой менеджер проектов по направлению Video-over-IP Павел Ребров сказал: "Продавать услуги выгоднее, чем мегабайты, поэтому все больше компаний уделяет внимание технологии Video-over-IP. Ведь легче продать 1 Гбайт кино, чем просто 1 Гбайт. Следовательно, операторам надо думать о разнообразии предоставляемых сервисов. Кроме того, например, в США по данным Minerva Networks, на связь и развлечения абонент тратит в среднем $150 в месяц, в России же этот показатель можно довести до $120".

    Еще один участник рынка подобных услуг, компания "КОМКОР", предоставляет комплекс услуг телевизионного видеовещания - ТВ через IP (TVoIP). Проект реализуется на базе технологии IP Multicast - передача видеотрафика по протоколу IP. На первом этапе проекта организуется многоадресная рассылка пакетов - multicast - видеовещание телевизионных каналов. В настоящее время "КОМКОР" предоставляет 30 российских и 35 развлекательных, музыкальных и познавательных зарубежных телеканалов (Discovery, CNN, BBC World, Eurosport, Hallmark, VH-1 и др.). Данной услугой могут воспользоваться все операторы и организации, имеющие интерфейс 100BaseT/1000BaseLX с сетью "КОМКОР".


    Сформированный поток телевизионных каналов представляет собой поток IP-пакетов, передаваемых в сети по отдельному групповому адресу, соответствующему данному телеканалу. Таким образом, вещание нескольких каналов представляет собой формирование нескольких потоков multicast-трафика, когда каждый из каналов однозначно определяется уникальным адресом групповой рассылки. Каждый ТВ-канал занимает от 4 до 6 Мбит/с, на сеть оператора он загружается только в том случае, если абонент подписан на этот канал. Для просмотра канала клиент использует компьютер или абонентское устройство STB, которое с одной стороны подключено к сети оператора (среде вещания), а с другой - имеет соединение с телевизором. Для подключения к сети или выхода из группы рассылки используется стандартный протокол IGMP (Internet Group Membership Protocol).

    Говорит и показывает Интернет


    IP-сети позволяют доставлять видеосигнал произвольного качества, в том числе HDTV со звуком Dolby Surround

    На втором этапе внедрения видеовещания по IP-сети "КОМКОР" планирует организацию дополнительных сервисов на базе технологии TV-over-IP, к их числу относятся: видео по запросу (Video on Demand, VoD), NVoD (Near Video on Demand), персональный видеомагнитофон (Personal Video Recorder, PVR), сдвинутое во времени вещание (Time Shifted TV), сервис по заказу (Services-on-Demand, SoD).

    Почему в качестве транспорта используется протокол IP, который, как мы знаем, изначально был разработан совершенно для других целей? Дело в том, что сегодня IP-технологии обладают достаточной зрелостью для решения задач передачи видеоинформации. Из основных свойств протокола отметим Multicast - использование многоадресной рассылки, что позволяет значительно сократить расходы на доставку информации до конечного подписчика. Не менее важным является качество обслуживания (Quality of Service - QoS). Сквозной QoS обеспечивает корректную приоретизацию различных видов IP-трафика и, несмотря на значительную нагрузку на IP-сеть, создаваемую интернет-пользователями, видеоинформация, равно как и VoIP, будет доставляться без задержек.


    Кроме того, огромная роль отводится технологиям широкополосного доступа - ведь со старинным дозвоном с помощью модема можно забыть о трафике, создаваемом передачей видеоинформации. Но уже сейчас ADSL2 позволяет предоставить подписчику два одновременно проигрываемых ТВ-потока, несколько одновременных телефонных разговоров и высокоскоростной доступ в Интернет по телефонных проводам. Дальнейшее расширение Ethernet-сетей масштаба города (MAN) позволит увеличить возможности предоставления услуг для подписчиков.

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

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

    Для операторов становится очевидным, что в современном мире объектом продажи становится не трафик как таковой, а услуги поверх этого трафика. Как, например, для оператора более выгодной является продажа конечному абоненту 1 минуты телефонного разговора, чем 200 кбайт исходящего IP-трафика, так и видеоуслуги станут дополнительным источником дохода для оператора. Каковы сегодня наиболее применимые услуги, связанные с Video-over-IP?

  • Видео по запросу. Video over IP позволяет реализовать услуги "Видео по запросу" без использования каких-либо дополнительных шлюзов и сложных схем взаимодействия. Прямо с экрана телевизора подписчик сможет заказать просмотр фильма и тут же начать его смотреть.
  • Телевизионный сервис. Традиционная услуга получает "второе дыхание" за счет возможностей создания интерактивных каналов, интеграции с интерактивной программой телепередач EPG (Electronic Program Guide).


    Кроме того, IP- сети позволяют уже сейчас доставлять видеосигнал произвольного качества. Изображение HDTV со звуком Dolby Surround можно транслировать и сегодня.
  • "Отложенный просмотр". Можно начать запись текущего ТВ-канала и, вернувшись, продолжить просмотр с того места, где пользователь вынужден был отвлечься.
  • Личный видеомагнитофон. С помощью календаря подписчик сможет прямо на экране телевизора назначить время начала и окончания записи ТВ-канала или прямо из EPG заказать запись телепрограммы для того, чтобы просмотреть запись в удобное время. При этом никакого дополнительного оборудования не требуется.
  • Net-surf on TV. Посредством все того же IP-подключения пользователю предоставляется доступ в Интернет с телевизора.
  • Интерактивные сервисы. Голосования, рейтинги и обсуждения фильмов и телепередач.
  • Электронная коммерция - "магазин на диване", для которого достаточно телевизора.

    Функционально решение задачи передачи телевизионных каналов по IP-сети состоит из трех компонентов. Ключевым является IP Headend - традиционный для телевизионных операторов комплекс, обеспечивающий прием, раскодирование и демультиплексирование сигналов со спутника, прием и MPEG-кодирование материалов из аналогового источника и мультиплексирование каналов в IP Multicast-потоки. Именно этот мультиплексор или, иначе говоря, стример (streamer), становится уникальным компонентом headend для Video-over-IP. Он обеспечивает IP-вещание телевизионных каналов таким образом, что каждый канал имеет собственный уникальный адрес и порт IP Multicast. Кроме того, требуется система обеспечения условного доступа (CAS), гарантирующая защиту контента, то есть шифрующая телеканалы для того, чтобы смотреть их могли лишь авторизованные пользователи. CAS может обеспечивать авторизацию как собственными методами, так и средствами автоматизированной системы расчетов, сторонних систем или middleware ("прослойка"). В качестве средства авторизации могут использоваться смарт-карты, программные ключи (когда пользователю достаточно пароля).


    Декодирование телеканалов осуществляется непосредственно на абонентском устройстве IP Set Top Box или персональном компьютере. Абонентское устройство внешне напоминает спутниковый ресивер, за тем исключением, что в качестве входного интерфейса у него используется не разъем для подключения спутниковой антенны, а стандартный сетевой интерфейс Ethernet. По сути, это небольшой компьютер со своей операционной системой, MPEG-декодером и веб-браузером - именно наличие веб-браузера и IP-канала позволяет реализовать интерактивные сервисы.

    Видео по запросу можно условно разделить на два вида: "настоящий" (True VoD) и "условный" (Near VoD). Если True VoD представляет собой комплекс, обеспечивающий unicast-поток для каждого пользователя в любое время, то Near VoD - это способ экономии полосы пропускания за счет применения MultiCast. В последнем случае несколько экземпляров каждого из фильмов запускается на воспроизведение "по кругу" со смещением начала произведения во времени, и подписчик получает доступ к каналу, на котором воспроизводится конкретный фильм. Естественно, только True VoD предоставляет подписчику услуги персонального видеоплейера: "перемотка" в любые стороны, воспроизведение с произвольной позиции, постановка на "паузу" и просмотр фильма в любое удобное время.

    Говорит и показывает Интернет


    Ключевой компонент системы TV-over-IP является IP Headend — комплекс, обеспечивающий прием, раскодирование и демультиплексирование сигналов

    Для обоих видов услуги видео по запросу являются обязательными такие компоненты, как сервер VoD, Middleware и абонентское устройство. Сервер VoD - это видеосервер с дисковым массивом большой емкости для хранения видеоматериалов и специализированным программным обеспечением, обеспечивающим multicast-трансляцию видеоматериалов в режиме Near VoD или доступ к видеоматериалам по протоколу RTSP для True VoD. Обычно видеосервер может также осуществлять перехват и запись multicast-потоков, что используется для реализации услуг PVR (видеозапись).Middleware представляет собой специализированный программный комплекс, который обеспечивает управление услугами VoD, IP TV и всеми сопутствующими, такими как интерактивные сервисы, Personal Video Recorder ,и многими другими. Middleware также обеспечивает авторизацию, ведение статистики и предоставляет визуальные интерфейсы пользователям и администраторам. В качестве абонентского устройства в данном случае выступает тот же самый Set Top Box, что используется подписчиком для услуг IP TV.

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

    Архитектура Zope

    После поступления HTTP-запроса на HTTP-сервер запрос передается публикатору Zope (Zope Publisher), который, в свою очередь, передает его брокеру объектных запросов Zope (ZORB — Zope Object Request Broker). ZORB-брокер анализирует запрос и на основании полученной информации узнает, какой именно объект нужно опубликовать (это может быть объект, непосредственно указанный в URL, или объект, приобретенный от верхнего уровня иерархии). После этого ZORB-брокер вызывает объект, который выполняет предусмотренные в нем действия и в качестве результата возвращает код DTML, который называется образцом. Образец может содержать нераскрытые переменные и невыполненные вызовы других объектов. ZORB-брокер возвращает результаты вызова объекта публикатору Zope, который обрабатывает образец, передавая ZORB-брокеру требования выполнить подстановку переменных или вызвать другие объекты. Выполнив до конца всю эту работу, публикатор Zope выдает результат на браузер пользователя в виде простого HTML-кода.
    Публикуемые объекты располагаются в иерархической объектной базе данных Zope. Хотя она и напоминает по структуре обычную файловую систему, веб-сервер не может обращаться к ней непосредственно, поскольку он работает с URL, а по компонентам URL необходимо вначале перейти к объекту. Одна из задач, выполняемых ZORB-брокером, состоит в прямом и обратном переходе по иерархии объектов и преобразовании ступеней этой иерархии в компоненты URL.
    ZORB-брокер выполняет также обработку данных формы, «пряников» (cookie) и параметров запроса, проводит опознавание пользователя и проверку прав доступа, автоматизирует обработку исключительных ситуаций (исключений), подготавливает заголовки HTML и обрабатывает пакеты протокола HTTP с информацией запроса и ответа.
    ZORB-брокер выполняет все действия, связанные с выполнением запроса, автоматически, поэтому от прикладного программиста скрыты все технические вопросы реализации протокола веб.
    Для создания динамического информационного наполнения применяется серверный интерпретируемый язык DTML на основе тегов.
    Он обеспечивает доступ объекта только к атрибутам, приобретенным этим объектом. Например, если в текущей или вышележащей папке установлен метод отправки почты, объект может его приобрести и выполнять отправку почты. Но выход за пределы объектной модели сайта для объекта исключен. Это позволяет, с одной стороны, создавать исключительно надежные и безопасные сайты, а с другой стороны, если речь идет о провайдере или, точнее, хостере, — передавать управление сайтом назначенному для этого администратору без опасений нарушить защиту всего хоста.

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

    Объектная база данных

    Для хранения кода и информационного наполнения веб-сайта Zope применяется объектная база данных Zope или сокращенно ZODB (Zope Object Database). Эта база данных построена так, что для конечного пользователя она выглядит как файловая система, но в действительности сама занимает один большой файл в файловой системе хоста. В ZODB хранится каждый созданный объект, каждый файл, каждый фрагмент информационного наполнения сайта. Это позволяет моделировать иерархию объектов, обеспечивать приобретение атрибутов в иерархии включения, проверять права доступа к объектам, определять контекст объекта. Формат представления данных в ZODB оптимизирован с учетом типичной модели доступа к информации в веб (большого объема вывода и малого объема ввода) и позволяет хранить всевозможную информацию, необходимую для создания динамических веб-приложений: файлы HTML, прикладной код, графику и т. д.
    ZODB — очень сложная по структуре, но прозрачная для пользователя база данных, которая обладает такими развитыми возможностями, как поддержка версионирования, транзакционная обработка и отмена ошибочно внесенных изменений. Версионирование позволяет создавать версии сайта или фрагмента сайта, отлаживать их в реальной обстановке незаметно для пользователей, а затем моментально вносить. Транзакционная обработка предусматривает автоматическое оформление в виде транзакций любых действий, которые влекут за собой изменение состояния объектной базы данных, выполнение этих действий и откат в случае их неудачного завершения. Выполненные транзакции регистрируются в объектной базе данных и могут быть отменены, если предусмотренные ими изменения были внесены ошибочно.
    Объекты Zope, которые могут быть представлены в ZODB, выполняют три основных функции:
  • хранение информационного наполнения. Такие объекты Zope, как документы, изображения и файлы, могут хранить текстовые и двоичные данные различных форматов;
  • представление деловой логики. Zope позволяет представлять логику обработки деловой информации в виде сценариев на языках Python, Perl и SQL;
  • презентация. Для управления отображением информации применяется интерпретируемый язык на основе тегов — DTML (Document Template Markup Language).

  • Разработка в среде Zope в основном состоит в проектировании иерархии объектов (в этой среде в процессе разработки иерархической структуры сайта одновременно происходит построение его информационной модели) и отображении объектной модели прикладной задачи на объекты Zope.

    Объектный характер веб и публикация объектов

    Веб, фактически, имеет объектную структуру, поэтому URL к веб-ресурсу — это просто путь к объекту в иерархии включения (домен -> компьютер -> объект), а протокол HTTP — лишь один из возможных способов отправки сообщений объекту и получения от него ответов. В настоящее время для создания объектов с динамически обновляемым информационным наполнением (вместо обычных веб-страниц) чаще всего применяются средства автоматической генерации кода HTML на основе содержимого базы данных.
    Это требует взаимного согласования следующих трех информационных моделей:
  • модель данных (как правило, данные представлены в реляционной базе данных, то есть в виде таблиц);
  • прикладная модель (структура прикладных объектов — товаров, заказов, счетов и т. д.);
  • презентационная модель (способ представления данных на веб-странице, организация внешнего интерфейса, ввода/вывода).

  • Обычно эти модели реализуются в виде так называемой трехуровневой структуры распределенной обработки данных, которая включает в себя сервер базы данных, сервер приложений и веб-сервер.
    Однако в среде публикации объектов Zope применяется иной подход, в основе которого лежит метод непосредственного предоставления доступа к объектам, которые хранятся в объектной базе данных, иными словами, публикация объектов.
    Публикация объектов — это применение объектно-ориентированных программных компонентов для создания динамического информационного наполнения (то есть HTML-страниц). В среде публикации объектов Zope (Z Object Publishing Environment) применяется широкий перечень таких программных компонентов, которые в основном подразделяются на два типа: лист-объекты и контейнерные объекты. Как правило, происходит публикация лист-объектов (в частности, DTML-документов или DTML-методов), но контейнерные объекты (например, папки) также могут иметь публикуемые атрибуты (свойства), такие как имя и идентификатор. Контейнерные объекты могут содержать в себе и лист-объекты, и другие контейнеры. Объекты объединены в иерархию включения (подобно каталогам файловой системы) и позволяют разработчику создавать сложные, разветвленные древовидные структуры.

    Таким образом, переход к объекту в среде публикации объектов Zope происходит в направлении сверху вниз, а приобретение атрибутов — в направлении снизу вверх. Таковы же и две основные составляющие защиты Zope: при обращении пользователя к опубликованному объекту происходит проверка прав доступа пользователя на каждом уровне, и объекты, обращаться к которым пользователь не имеет права, являются для него невидимыми, а обращение объекта к своему атрибуту является невидимым, инкапсулированным внутреннее устройство атрибута.

    Сайт, построенный на платформе Zope, является полиморфным, многоликим. На него может прийти и анонимный пользователь, и зарегистрированный пользователь с именем и паролем, обладающий определенными правами. Но для разных категорий пользователей он выглядит по-разному. Это значит, что он может выполнять и разные функции, в зависимости от категории пользователя. Например, для обычного пользователя «с улицы» он может показать, какие на предприятии есть товары и цены (актуальную информацию, которую не нужно постоянно обновлять вручную), для руководителя, находящегося в командировке,— товары, цены, количество и общие экономические показатели; для склада — одно, для магазина — другое...

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

    Отказавшись от такой «защиты», можно выиграть гораздо больше: сделать сосредоточением всех своих деловых операций единый, полиморфный, защищенный веб-сайт на платформе Zope. На него могут выходить и рядовые потребители, и территориально разобщенные структурные подразделения, и деловые партнеры, и заказчики, и надомные работники, и командированные сотрудники.По этому принципу работают многие деловые предприятия. Он вполне себя оправдывает. Для такого назначения и была разработана платформа Zope.

    Организационная поддержка

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

    Основные способы разработки в среде Zope

    В среде Zope может применяться несколько способов разработки разной категории сложности:

  • Подготовка сценариев DTML, которые позволяют манипулировать с объектами Zope с помощью тегов в документах DTML. Это простейший способ программирования в среде Zope. Язык DTML не позволяет выйти за пределы объектной модели сайта, поэтому программирование на этом уровне не позволяет никоим образом нарушить защиту сайта. Это уровень массового программирования, на котором работают рядовые программисты и веб-дизайнеры.
  • Разработка методов, позволяющих расширить объектную модель сайта, например, методов доступа к базе данных (SQL Methods) и внешних методов (External Methods). На этом уровне работают ответственные разработчики и администраторы.
  • Высокоприоритетная разработка на основе API-интерфейса Product. Эта технология разработки дает возможность создавать объекты Zope, к которым можно обращаться через веб так же, как к обычным документам и папкам Zope. Разработка на основе этого API-интерфейса значительно сложнее по сравнению со сценариями DTML и внешними методами, но позволяет применять методы объектно-ориентированного проектирования.
  • Для настройки среды Zope на конкретную прикладную область может применяться технология Z-классов (ZClass). Эта технология предоставляет в основном такие же функциональные возможности, как и традиционный способ разработки на основе API-интерфейса Product, но намного менее трудоемка.


  • Основные средства сопровождения

    При использовании в качестве веб-сервера программного продукта Medusa (который входит в стандартную поставку и также является бесплатным продуктом) прикладная платформа Zope обеспечивает доступ ко всей иерархии объектов с FTP-клиента (с учетом прав доступа). Это позволяет быстро выгружать на сайт с удаленного компьютера прикладной код и информационное наполнение, создавать и удалять каталоги и т. д.
    Для управления средой Zope предусмотрен защищенный административный интерфейс, который позволяет администратору регистрироваться и работать с удаленного компьютера. Через этот интерфейс можно создавать и удалять пользователей, определять права доступа, настраивать параметры объектной базы данных, останавливать и запускать сервер Zope и т. д.
    Предусмотрены средства экспорта/импорта любых фрагментов объектной базы данных (например, папок со всеми подпапками). Экспортированные объекты можно импортировать в эту или другую объектную базу данных, а также сохранить в качестве резервной копии.

    Сервер приложений

    Как программный продукт, Zope может успешно применяться в качестве платформы для веб-приложений. К числу программных продуктов этой категории относятся также Cold Fusion, Silverstream, Netscape Application Server, Active Server Pages (Microsoft) и многие другие. Программные платформы такого типа позволяют значительно упростить разработку и сопровождение веб-сайтов за счет применения программных средств динамического обновления информационного наполнения. Программы, написанные на интерпретируемых языках (Java, JavaScript, VBScript, PHP, Perl, PL/SQL и т. д.), хранятся и выполняются на сервере приложений, а доступ к данным обеспечивает сервер базы данных.
    В трехуровневой среде (веб-сервер <--> сервер приложений <--> сервер базы данных) сервер приложений выполняет в основном такие функции:
  • сопровождает пул устойчивых соединений с базой данных;
  • обеспечивает создание и поддержку непрерывных соединений по протоколу HTTP (этот протокол не предусматривает хранение информации о состоянии и не способен сам поддерживать непрерывные соединения);
  • позволяет отделить прикладную логику от логики презентации;
  • хранит и выполняет программный код.

  • Zope, как платформа для размещения веб-приложений, отличается от других платформ тем, что в ней применяется не отдельная, реляционная база данных, а встроенная, объектная база данных. Наряду с этим, она позволяет использовать в качестве информационного ресурса и реляционные базы данных, предоставляя механизмы для интеграции внешних баз данных в ее объектную структуру. Для этой цели в составе программного обеспечения Zope предусмотрено несколько модулей: Oracle, Sybase, MySQL и ODBC. Коллекция этих модулей постоянно пополняется.

    Zope — платформа для веб-хостинга

    ,
    Новые технологии веб-хостинга позволяют коренным образом изменить организацию работы предприятия. Zope - бесплатный программный продукт с открытым исходным кодом, который может служить в качестве программной платформы для разработки и размещения веб-сайтов с динамически обновляемым информационным наполнением.
    Разработка Zope выполнена на языках:
    Python и C(http://www.zope.org).
    Как таковой, Zope перешел в категорию бесплатных программных продуктов с открытым исходным кодом с ноября 1998 года. Все предыдущие версии этого продукта были коммерческими. Zope разработан консультационной компанией Digital Creations на основе трех программных продуктов: «Bobo», «Principia» и «Aquaduct». Передавая Zope во всеобщее пользование, компания Digital Creations стремилась сделать этот продукт стандартом в области разработок для веб и увеличить свои доходы за счет предоставления консультационной поддержки.
    Zope — мультиплатформенный программный продукт. Он может применяться на многих платформах, включая Linux/Intel, Solaris (SPARC и Intel), Digital Unix, BSDI и Windows NT (а также SGI/Irix, HP-UX, Windows 95/98, Mac OS и Windows CE, хотя официальная поддержка этих платформ в настоящее время не предусмотрена). Zope может работать на таких веб-серверах, как Apache, Netscape Server и Microsoft IIS, а также на мощном веб-сервере Medusa с открытым исходным кодом, который предоставляет доступ к программной платформе Zope на основе протоколов HTTP, вебDAV и FTP.

    Типы доступа "ftp" и "tftp"

    Тип доступа по FTP или TFTP означает, что тело сообщения доступно как внешний файл по протоколу FTP [RFC-959] или TFTP [RFC-783] соответственно. Для этих типов доступа обязательны следующие дополнительные параметры:
    NAME -- Имя файла, содержащего данные тела письма.
    SITE -- Полный доменный адрес или псевдоним компьютера, с которого файл может быть получен по указанному протоколу.
    Перед тем, как начнется считывание данных по FTP, пользователь обычно должен быть спрошен на предмет логина и пароля для машины, указанной в параметре 'site'. По причинам безопасности логин и пароль не указываются как параметры Content-Type и должны быть получены от получателя письма.
    Дополнительно определены следующие необязательные параметры:
    DIRECTORY -- каталог, содержащий тело письма на удаленной машине.
    MODE -- Нечувствительное к регистру букв строка, указывающая режим передачи данных. Допустимые эначения для типа доступа TFTP:
    NETASCII, OCTET и MAIL. Для типа доступа FTP: ASCII, EBCDIC, IMAGE и LOCALn, где n - десятичное целое число, обычно 8. Эти значения соответствуют типам представления A, E, I и Ln, определенным FTP-протоколом. Заметьте, что "BINARY" и "TENEX" не являются допустимыми значениями для параметра MODE. Вместо них должны использоваться "OCTET", "IMAGE" или "LOCAL8". Если параметр MODE отсутствует, значением по умолчанию является "NETASCII" для TFTP и "ASCII" для FTP.

    Способ досупа "anon-ftp"

    Этот способ доступа идентичен "ftp", за исключением того, что пользователю не требуется указывать свой логин и пароль для удаленной машины. FTP-протокол будет использоваться с логином "anonymous" и email-адресом получателя вместо пароля.

    Способы доступа "local-file" и "afs"

    Способ доступа "local-file" означает, что тело письма доступно как файл на локальной машине. "afs" означает, что тело доступно как файл через общую файловую систему AFS. В обоих случаях требуется единственный обязательный параметр:
    NAME -- Имя файла, содержащего данные тела письма.
    Следующий необязательный параметр может быть использован для локализации ссылки на файл и содержит адрес сайта или сайтов, на которых данный файл виден:
    SITE -- Доменный адрес машины или машин, на которых возможен доступ к файлу данных. Допускаются маски с использованием звездочки вместо части доменного имени, например, "*.bellcore.com", для обозначения набора машин, на которых файл виден напрямую. Единственная звездочка вместо всего доменного имени может означать, что файл, где би он ни был, виден через глобальную файловую систему.

    Способ доступа "mail-server"

    Применяется, когда тело письма доступно через почтовый сервер. Обязательный параметр для этого способа доступа:
    SERVER -- email-адрес mail-сервера, с которого могут быть запрошены данные тела письма.
    Так как почтовые серверы предполагают множество различных синтаксисов, некоторые из них могут быть многострочными, полная команда, которую нужно послать на mail-сервер, не включается как параметр в однострочное поле 'content-type'. Вместо этого она помещается в мнимое тело, когда значением поля 'content-type' является 'message/external-body', и параметр 'access-tyoe' имеет значение 'mail-server'.
    Необязательный параметр для этого способа доступа:
    SUBJECT -- Subject, который будет использован в заголовке письма-запроса, которое почторый клиент получателя пошлет на указанный почтовый сервер для получения данных тела письма. Заметьте, что помещение адреса сервера в subject не рекомендуется, однако, известны mail-серверы, требующие этого.
    MIME-стандарт не определяет синтаксиса обращения к почтовому серверу. Поэтому он допускает включение полной команды для mail-сервера в мнимое тело.
    В отличие от других способов доступа, доступ через mail-сервер не синхронен, и данные могут быть получены в непредсказуемый момент в будущем. По этой причине важно иметь механизм, обеспечивающий вставку полученных от mail-сервера данных в исходное письмо. Mail-сервер при отправке запрошенных данных должен использовать то же самое значение поля Content-ID в заголовке письма с возвращаемыми данными, какое было в первоначальном "бестелесном" письме, чтобы облегчить работу этого механизма.

    Примеры и дополнительные пояснения

    С появлением возможности очень широких (протяженных) файловых систем стало непредсказуемым, на каком наборе машин файловой системы данный файл будет доступен напрямую, а на каком - нет. Поэтому, имеет смысл указывать как имя файла, так и сетевой адрес (адреса) машин, на которых файл доступен.
    Если внешнее тела письма доступно посредством нескольких различных механизмов, отправитель может включить несколько частей типа message/external-body в письмо типа multipart/alternative.
    Однако, механизм external-body не должен быть ограничен получением удаленных файлов. Например, можно представить использование видеосервера с внешними ссылками на видеофрагменты.
    Если письмо / часть письма имеет тип "message/external-body", то оно / она будет содержать поля заголовка вложенного письма. Тело само по себе неходится где-либо во вне. Это значит, что если тело типа "message/external-body" содержит два последовательных конца строки (CRLF), то все, что идет далее, не является чстью сообщения и просто должно игнорироваться. Однако, этот "хвост" - удобное место для каких-либо дополнительных данных, которые не могут быть помещены в поле заголовка Content-Type. В частности, если значение "access-type" есть "mail-server", то "хвост" может содержать команды, посылаемые затем mail-серверу по адресу, на который указывает параметр SERVER.
    Поля заголовка вложенного письма, которые на самом деле являются телом общего письма типа "message/external-body", должны нести информацию о типе содержимого внешнего (удаленного) тела, если оно не является простым ASCII-текстом (что подразумевается по умолчанию), поскольку эти внешние данные сами по себе не имеют заголовка, опрпеделяющего их тип. Также, необходимо указывать Content-transfer-encoding, если он имеет значение, отличное от "7-bit". Так, полное письмо типа message/external-body, ссылающееся на документ в формате PostScript, может выглядеть следующим образом:

    From: Whomever To: Someone Subject: whatever MIME-Version: 1.0 Message-ID:
    Content-Type: multipart/alternative; boundary=42 Content-ID:
    --42 Content-Type: message/external-body; name="BodyFormats.ps"; site="thumper.bellcore.com"; access-type=ANON-FTP; directory="pub"; mode="image"; expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript Content-ID:
    --42 Content-Type: message/external-body; name="/u/nsb/writing/rfcs/RFC-MIME.ps"; site="thumper.bellcore.com"; access-type=AFS expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript Content-ID:
    --42 Content-Type: message/external-body; access-type=mail-server server="listserv@bogus.bitnet"; expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript Content-ID:
    get RFC-MIME.DOC --42--
    В приведенных примерах значение Content-transfer-encoding для внешних данных в формате postscript полагается по умолчанию как "7bit".
    Заголовки общего и вложенного(их) писем (имеющих внешнее тело) должны удовлетворять тем же правилам, что и для типа message/partial во избежание путаницы.
    Поскольку внешнее тело не пересылается в виде почты, то оно не обязано удовлетворять требованиям длины строк и иметь 7-битную форму, оно может быть просто бинарным файлом. Поэтому поле Content-Transfer-Encoding не является необходимым, хотя его наличие допускается.
    Тело письма типа "message/external-body" обрабатывается в сответствии с основным синтаксисом стандарта RFC 822, в частности, все, что идет до первой последовательной пары концов строки (CRLF), является заголовком письма, а все, что идет после, является "мнимым" телом письма, которое игнорируется для большинства типов доступа.


    Формальный синтаксис поля заголовка 'content-type' для данных типа 'message' - следующий:
    message_тип := "message" "/" message_подтип message_подтип := "rfc822" / "partial" 2-3 partial_параметра / "external-body" 1 external_параметр / расширение (не предопределенный подтип) partial_параметр := (";" "id" "=" значение) / (";" "number" "=" 1*ЦИФРА) / (";" "total" "=" 1*ЦИФРА) ; id и number требуются всегда; total требуется для последнего фрагмен- ; та послания. external_параметр := (";" "access-type" "=" тип_доступа) / (";" "expiration" "=" дата-время) ; Дата-время должны быть экранированы кавычками / (";" "size" "=" 1*Цифра) / (";" "permission" "=" ("read" / "read-write")) ; Значение permission нечувствительно к регистру букв / (";" "name" "=" значение) / (";" "site" "=" значение) / (";" "dir" "=" значение) / (";" "mode" "=" значение) / (";" "server" "=" значение) / (";" "subject" "=" значение) ; access-type требуется всегда; все остальное - в зависимости от значе- ; ния access-type тип_доступа := "ftp" / "anon-ftp" / "tftp" / "local-file" / "afs" / "mail-server" / / расширение (непредопределенный параметр) ; Нечувствителен к регистру букв

    Асинхронный вызов

    Можно вызывать удаленные методы асинхронно - клиентский скрипт продолжает работать пока серверный метод исполняется и следовательно страница остается доступной для пользователя.
    Вызов серверного метода асинхронно схож с синхронным вызовом, за исключением появления дополнительных параметров при вызове:
  • Ссылка на callback функцию в клиентском скрипте, которая вызывается при успешном завершении работы серверного метода.
  • Ссылка на error callback функцию, которая вызывается при возникновении ошибки
  • Необязательные контекстные параметры. Эти данные просто вернутся обратно по окончании работы серверного метода.
    Как и при синхронном вызове, асинхронный вызов создает объект call, содержащий результат работы серверного метода и дополнительную статусную информацию.
  • При асинхронном вызове объект call передается в callback функцию в качестве параметра. Следовательно, вы можете проверить статус вызова и получить результат работы метода.
    Так как при асинхронном вызове необходимо передать ссылку на callback функцию, то используется только JavaScript.
    Для вызова серверного метода асинхронно:
  • Если вы создали page объект, то используется следующая форма вызова.
    callObject = ASPObject.methodName(p1, p2[,...], callbackFunction, errorCallbackFunction, context);
  • В противном случае используется RSExecute() функция:
    callobject = RSExecute(url, methodName, p1, p2[,...], callbackFunction, errorCallbackFunction, context)
    Где:
  • callobject - имя call объекта;
  • ASPObject - объект ссылающийся на ASP страницу;
  • url - URL ASP страницы содержащей описание серверных методов. Эта страница должна находится на том же сервере, что и страница осуществляющая вызов;
  • methodName - имя метода, который вы хотите исполнить;
  • p1, p2 - параметры необходимые для вызова methodName метода. Параметра передаются по значению. В качестве параметров могут быть переданы значения простых типов.
  • callbackFunction - ссылка на JavaScript функцию в клиентском скрипте, которая будет вызвана, когда удаленный метод окончит работу.
    Т. к. вы передаете ссылку, не включайте имя функции в кавычки.
  • errorCallbackFunction - ссылка на необязательную JavaScript функцию в клиентском скрипте, которая будет вызвана, если при работе удаленного метода произойдет ошибка. Т. к. вы передаете ссылку, не включайте имя функции в кавычки.
  • context - необязательные параметры вызова, эти данные вернутся обратно.

    Например, в следующем скрипте асинхронно вызывается серверный метод square. После работы метода вызывается функция showResults(). Имя операции передается как context-параметр.



    Аналогичный пример с использованием RSExecute метода:



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



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

    Вы можете проверить состояние работы удаленного метода. При асинхронном вызове, можно проверить состояние работы серверного метода. Для этого используется свойства status объекта call Возможные значения свойства status:

  • -1 - произошла ошибка
  • 0 - работа завершена
  • 1 - в процессе (только для асинхронного вызова)

    Асинхронный вызов можно прервать, для этого используется cancel() метод объекта call.

    Безопасность

    Скриплет также безопасен, как HTML и скрипт. К тому же, в скриплете есть возможность распознать в каком контейнере он находится и если это контейнер с повышенными требованиями безопасности (IE), то скриплет работает согласно политике безопасности этого контейнера.
    В общем случае для корректного функционирования необходимо чтобы скриплет был загружен с того же Web сервера, что и использующая его HTML страница (как и JAVA апплеты).

    BitNet

    Адрес похож на Internet'овский: пользователь@хост.
    Преобразуется добавлением ".bitnet" в конце: пользователь@хост.bitnet.
    Не все майл-серверы понимают домен .bitnet, им надо указывать шлюз,
    например, пользователь%хост.bitnet@cunyvm.cuny.edu.

    Что такое RS?

    Remote Scripting (RS) - это механизм, обеспечивающий вызов серверных процедур из клиентского скрипта. С помощью RS, процедуры и функции, описанные на сервере, могут вызываться из скрипта HTML страницы, исполняющегося в браузере пользователя. Вызываемые процедуры и функции будем также называть серверными методами, далее вы поймете почему. Серверные методы описываются в ASP странице и для их реализации подходит любой язык сценариев (JavaScript, VBScript). При удаленном вызове процедуры и функции исполняются на сервере с полным доступом к системным ресурсам, а результат работы возвращается в клиентский скрипт.
    Теперь разработчики могут создавать интерактивные Web приложения, в которых появляется возможность исполнять серверный скрипт без обновления страницы.
    C использованием RS Web приложении может проверить корректность вводимых пользователем данных в процессе заполнения формы, избегая перезагрузки.
    С появлением RS, Web приложение может использовать как клиентский, так и серверный скрипт. Клиентский скрипт часто используется для управления пользовательским интерфейсом, например, динамическое изменение содержимого Web страницы или обработка действий пользователя. Клиентский скрипт выполняется локально в браузере и обеспечивает интерактивный интерфейс.
    Возможности применения серверного скрипта ограничиваются только вашей фантазией. Серверный скрипт может использоваться для доступа к базе данных или выполнения звена бизнес логики в многослойных приложения. При этом серверный скрипт исполняется на сервере с полным доступом к ресурсам сервера, а из клиентского скрипта его вызов почти ничем не отличается от вызова локальных процедур и методов.
    Так как при вызове серверного скрипта текущая страница не покидается, то ее состояния сохраняется, а вместе с ней и состояние переключателей и глобальных переменных.

    Что такое скриплет?

    Скриплет является COM компонентой реализованной на XML (eXtensible Markup Language) и языке сценариев. XML используется для построения структуры скриплета (определения типа COM компоненты, ее методов, свойств, инициируемых событий, и т. д.), а код на языке сценариев обеспечивает функциональность.
    Что касается скриплетов, то это полноценные COM компоненты и могут использоваться для решения широкого класса задач, как то:
  • доступ к базам данных;
  • реализация бизнес-логики в многослойных архитектурах;
  • транзакционные процессы;
  • интерактивные эффекты в Web страницах, с использованием DHTML behavior.

    CompuServe

    Адрес в CompuServe - два числа, разделенные запятыми,
    например, 1234,56789. В нотации Internet это выглядит
    1234.56789@compuserve.com (точка вместо запятой).
    Обратно письмо можно отправить по адресу
    >INTERNET:пользователь@хост.домен

    Дополнительные возможности

    Рассмотрим пример, когда у скриплета есть свойство "цвет" и при изменении значения этого свойства хотелось бы, чтобы цвет компоненты тоже менялся. Безусловно, логичнее было бы реализовать метод при вызове которого цвет изменялся, но в общем случае предположим что компоненте необходимо реагировать немедленно при изменении каких-либо свойств.
    В скриплете есть возможность описать некоторые функции, так что они выдают себя за свойства, и при изменении свойства выполняется код реализованный в этих функциях. Таких функций всего две: put и get. При изменении значения свойства вызывается функция put, а при получении значения - get.

    В этом примере в переменных property1GetCount и property1PutCount хранят количество обращений к свойству property1 и его изменений. В функции public_put_property1 после того как новое значение установлено, компонента обновляет значения. В контейнере вы можете ссылаться на property1, как если бы это было обычное свойство.
    Scriplet1.property1 = 'Another'; a = Scriplet1.property1;
    С помощью put_ и get_ функций можно реализовать read-only и write-only свойства. Для создания read-only свойства описывается только функция get_, т. к. функции put_ нет, то значение изменено быть не может, аналогично с write-only.
    Если вы пишите на JavaScript, то имеется альтернативная возможность описания интерфейса DHTML скриплета. При определении объекта public_description в скриплете, свойства и методы этого объекта являются свойствами и методами скриплета. При таком описании интерфейса префикс public_ не используется. Удобнее описать весь интерфейс скриплета в одном месте, как это предлагается с использованием объекта public_desription, чем рассеивать описание по всему коду скрипта. В дальнейшем предполагается реализовать подобный механизм и на VBScript.
    В качетстве демонстрации можно присовокупить стандартные Microsoft примеры DHTML скриплетов. Я кинул пару самых простых и наглядных, можно также посмотреть у Microsoft на www.microsoft.com/scripting/.

    Другие подтипы типа Application

    Ожидается, что многие подтипы типа 'Application' будут введены в будущем. MIME-совместимые почтовые программы должны интерпретировать любой незнакомый им подтип как эквивалент 'application/octet-stream'.
    Формальный синтаксис дла поля 'content-type' для данных типа 'application' дается следующим образом.
    application_тип := "application" "/" application_подтип application_подтип := ("octet-stream" *stream_параметр) / "postscript" / расширение (непредопределенный под- тип) stream_параметр := (";" "type" "=" значение) / (";" "padding" "=" число_дополняющих_битов) число_дополняющих_битов := "0" / "1" / "2" / "3" / "4" / "5" / "6" / / "7"

    Другие подтипы типа "multipart"

    В будущем ожидается введение новых подтипов. Программистам рекомендуется интерпретировать незнакомые подтипы типа 'multipart' аналогично "multipart/mixed".
    Формальный синтаксис поля Content-Type для данных типа "multipart":
    multipart-тип := "multipart" "/" multipart-подтип ";" "boundary" "=" метка_границы multipart-подтип := "mixed" / "parallel" / "digest" / "alternative" / подтип-расширение

    Файл active

    Этот файл содержит список групп новостей, которые принимает локальный сервер. Содержимое файла считывается демоном innd при запуске, либо при получении этим демоном соответствующего указания от программы ctlinnd. Все статьи, опубликованные в группы новостей, которые не указаны в файле active отвергаются локальным сервером новостей. Строки в этом файле имеют следующий формат:
    name himark lomark flags
    Ниже описывается значение параметров:
  • name - имя группы новостей;

  • himark - номер самой новой статьи в данной группе новостей на локальном сервере. Это число увеличивается при получении новых статей;

  • lomark - номер самой старой статьи в данной группе новостей на локальном сервере. Это число изменяется в результате удаления старых статей на диске;

  • flags - это поле определяет один из шести возможных флагов:
  • y - для данной группы новостей разрешена локальная публикация;

  • n - для данной группы новостей не разрешена локальная публикация;

  • m - данная группа с ведущим (модератором) и все публикации должны быть одобрены ведущим;

  • j - статьи из данной группы новостей не храняться на локальном сервере (на самом деле они помещаются в группу junk, которая обязательно должна быть указана в файле active), а только передаются через него;

  • x - статьи не могут посылаться в данную группу новостей;

  • =news.group - статьи для данной группы новостей помещаются локально в группу news.group.

  • Основные операции, которые должен время от времени выполнять администратор включают в себя добавление новых групп, удаление ненужных групп, изменение флагов текущих групп новостей. Все эти операции должны отображать свои действия в файле active. Существует два основных подхода к выполнению указанных выше операций с группами новостей:
  • Первый подход - использование соответствующих подкоманд команды ctlinnd: "newgroup", "rmgroup" и "changegroup". Например, команда
    ctlinnd newgroup relcom.humor y
    добавляет группу новостей "relcom.humor" с флагом "y" (см.
    выше), помещая соответствующие строки в файлах active и active.times. Файл active.times

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

  • Второй подход - непосредственное редактирование файла active, удобен для операций с большим количеством групп новостей (попробуйте удалить несколько десятков групп с помощью первого способа :-)), но имеет один недостаток: он не вносит автоматических изменений в файл active.times. Общая последовательность действий такова:

  • Приостановить работу демона innd (входящие соединения при этом не принимаются):

    ctlinnd pause "edit active"

  • Отредактировать файл active. Например, при добавлении группы "relcom.humor", Вы должны добавить следующую строку в этот файл (флаг может быть и другим):

    relcom.humor 0000000000 0000000001 y

  • Проверить корректность изменений в файле active, дав команду:

    inncheck active

  • Считать в память новую копию файла active:

    ctlinnd reload active "edit active"

  • Восстановить работу сервера innd:

    ctlinnd go "edit active"

    Файл expire.ctl

    Этот файл считывается программой expire при запуске и определяет правила очистки дерева статей на локальном сервере (сроки хранения тел статей и их идентификаторов). В начале этого файла обязательно должна находится строка (причем, только одна), определяющая как долго хранить записи об идентификаторах статей в файле history, после того, как тело статьи удалено. Это позволяет отклонить эту статью, если поставщик новостей вновь предложит ее в определенный промежуток времени. Эта строка имеет следующий формат:
    /remember/:время
    где время - срок хранения в днях (можно указывать и дробную часть дня, наприме, /remember/:7.5
    - семь с половиной дней), по истечении которого из системы удаляются идентификаторы старых статей. Последующие командные строки определяют когда нужно удалять из системы тела статей. Они имеют следующий формат:
    pattern:modflag:keep:default:purge
    Ниже описывается значение параметров:
  • pattern - образец для групп новостей в wildmat-формате, для которых применяется остаток данной строки;

  • modflag - флаг, используемый для дальнейшего ограничения списка групп новостей, для которых использовать данную строку. Если это поле:
  • М - то применять остаток данной строки только для групп с ведущим (moderated groups) из тех, которые соответствуют образцу pattern первого поля;

  • U - то применять остаток данной строки только для групп без ведущего (unmoderated groups) из тех, которые соответствуют образцу pattern первого поля;

  • A - то применять остаток данной строки для всех групп новостей, соответствущих образцу pattern
    первого поля.

  • Следующие 3 поля определяют какое количество дней хранить тела статей на локальном сервере новостей:
  • keep - определяет минимальное число дней хранения тел статей на системе для определяемых групп новостей. Любая статья из этих групп не может хранится меньше указанного этим полем срока (если Expires-заголовок статьи имеет меньший срок, то будет использовано значение keep).

  • default - определяет число дней хранения для тех статей из определяемых групп, у которых отсутствует заголовок Expires.


  • purge - определяет максимальное число дней хранения тел статей на системе для определяемых групп новостей. Любая статья из этих групп не может хранится больше указанного этим полем срока (если Expires-заголовок статьи имеет больший срок, то будет использовано значение purge).


  • Помимо строки /remember/ Вы должны указать строку с pattern

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

    Например, мы хотим после удаления тела статьи хранить ее идентификатор в базе данных в течение 5-ти дней. Тела статей будут храниться на системе от 3-ех до 5-ти дней, за исключением локальных конференций, которые мы хотим хранить подольше (в течение 10-ти дней). Тогда наш файл будет выглядеть так:

    /remember/:5 *:A:3:4:5 local*:A:10:10:10

    Файл inn.conf

    Файл inn.conf содержит различные глобальные параметры сервера новостей (имя сервера, имя домена) и параметры, используемые при формировании заголовков статей (начавших свой путешествие по Usenet с этого сервера). Все изменения, сделанные в этом файле считываются демоном innd только после перезагрузки сервера новостей. Строки в этом файле имеют следующий формат:
    имя: [возможны пробелы] значение
    Здесь имя - имя параметра, значение
    - его значение. Некоторые параметры могут быть изменены определением переменных окружения системы. Ниже описываются имена параметров и их значения:
  • fromhost - этот параметр используется при формировании заголовка From:, если того нет. Переменная окружения FROMHOST затирает это значение. По умолчанию, это полное доменное имя локальной машины.

  • moderatormailer - имя машины, содержащей псевдонимы для всех управляемых (moderated) групп. Этот параметр используется только если нужную информацию нельзя почерпнуть из файла moderators.

  • organization - определяет содержимое заголовка Organization:, если он пуст. Если определена переменная окружения ORGANIZATION, то она изменяет это значение.

  • pathhost - определяет, какое имя локального узла помещается в заголовок Path:. По умолчанию, это полное доменное имя

    FidoNet

    Адрес в FidoNet бывает двух типов: "поинт" и "нода".
    Адрес "поинт" выглядит примерно так: 2:5020/12.345, где
  • 2 - зона (в данном случае - Россия);
  • 5020 - сеть (в Москве);
  • 12 - машина;
  • 345 - поинт;
    Адрес "нода" имеет на один пункт меньше: 1:350/12
    (Северная Америка).
    Послать письмо можно по адресу
    Imya_Familia@p345.f12.n5020.z2.gate.phantom.msk.su
    (через московский шлюз) или соответственно
    Fname_Lname@f12.n350.z1.fidonet.org (через шлюз в США).

    Общение

    Аналогично, но через другой шлюз:
    Mirza_Kurbanov@p45.f123.n5020.z314.goldnet.squeen.msk.su.

    Инсталляция пакета INN

    Процесс инсталляции пакета INN идентичен для Unix-основанных систем, но каждая платформа имеет свои особенности инсталляции. Описанная ниже последовательность действий ориентирована на FreeBSD (пакет inn-1.7.2 ставился на FreeBSD-2.2.5).
    Во-первых, Вам необходимо заполучить свеженький дистрибутив INN. Обратитесь на сервер ftp.isc.org и перейдите в каталог isc/inn. Выберите необходимый архив (например, ), перекачайте, декомпрессируйте и разархивируйте его, поместив результат в выбранный Вами каталог (в дальнейшем он упоминается как $inn).
    Сменив текущий каталог на $inn, Вы обнаружите два файла формата nroff, использующие макрос -ms: Install.ms.1
    и Install.ms.2. Это две части оффициального руководства по инсталляции InterNetNews.

    Дайте команду
    make Install.ms
    При этом два файла объединяются в один - Install.ms
    с правами доступа 444. Приведите этот файл в более читабельный вид (в частности, для просмотра с помощью more) командой:
    nroff -ms Install.ms > Install
    При возникновении проблем в инсталляции пакета необходимо обращаться за помощью к этому файлу.
    Следующий этап процедуры инсталляции - редактирование главного файла конфигурации сonfig.data.

    В каталоге $inn/sample-configs содержатся шаблоны файла config.data для различных платформ. Вам необходимо выбрать наиболее подходящий для Вас файл и скопировать его в $inn/config/config.data, например, для FreeBSD выполните следующие команды:
    cd $inn cp sample-configs/config.data-FreeBSD-2.0 config/config.data
    Теперь настала пора отредактировать сам файл config.data. INN получает из этого файла информацию о своей среде (т.е. где лежат компоненты, используемые INN).; Для пользователей FreeBSD надо подкорректировать опции для LIBS:
    LIBS -lutil -lcrypt
    Пакет поставляется с некоторыми perl-сценариями, требующими пакет языка perl версии не ниже, чем 5.001, так что Вам, возможно, придется установить новый пакет языка perl и прописать корректный путь к команде perl:
    _PATH_PERL /usr/local/bin/perl
    Подробное описание содержимого файла config.data

    смотрите в файле Install.

    Скомпилируйте все исходники:

    cd $inn make all

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

    mkdir /usr/news /var/news /var/news/spool

    Теперь можно инсталлировать компоненты пакета INN. Если Вы ставите пакет в первый раз на эту систему, то просто дайте команду:

    make install

    Если же Вы заменяете уже существующую систему INN, то рекомендуется инсталлировать отдельно программы и отдельно конфигурационные файлы и сценарии. Это позволит не затирать конфигурационные файлы текущей INN системы. Итак, сначала запустите сценарий:

    makedirs.sh

    Он создаст все остальные каталоги (ниже созданных командой mkdir на предыдущем этапе). Заметим, что команда make install вызывает этот сценарий сама. Теперь инсталлируйте программы и руководства (man'ы):

    make update

    При этом сценарии и конфигурационные файлы будут скопированы из каталога $inn/samples в каталог $inn/site. Если Вы хотите сохранить настройки предыдущей версии INN, затрите файлы из каталога $inn/site такими же файлами из старого программного обеспечения, после чего:

    cd $inn/site make install

    Запуск сценария:

    $inn/BUILD

    позволит создать файлы и history. После запуска сценария, он спросит, использовать ли с-версию subst (если она существует):

    -- do you want to use it [y or n]? y

    Далее он спросит построили ли Вы бинарники:

    Have you already built the executables [y or n]? y

    Затем он спросит существуют ли каталоги spool, etc

    и т.д.:

    Do the spool, etc., directories exist [y or n]? y

    Следующим вопросом будет: желаете ли Вы продолжить инсталляцию:

    Do you want to continue with the installation [y or n]? y

    И, наконец, последний ворос: запускать ли subshell для редактирования конфигурационных файлов:

    Start a subshell to edit the config files [y or n]? n

    После завершения работы сценария проверьте, что владельцем файла active является пользователь news, группа news, права доступа на него 644, а если это не так (а практика показывает что в сценарии действительно что-то не так :-)), то исправьте это, дав команды


    chmod 644 active chown news:news active

    Сделайте почтовый псевдоним для пользователя news

    в файле /etc/mail/aliases:

    usenet: news

    Дайте знать об этом sendmail, перестроив после редактирования файла базу псевдонимов:

    /usr/bin/newaliases

    INN оповещает о своей работе, используя систему syslog. Проверьте конфигурационный файл демона syslogd /etc/syslog.conf. Раскомментируйте в этом файле строки, содержащие news.crit, news.err, news.notice. После этого не забудьте создать соответствующие файлы в каталоге /var/log/news

    (владелец - news, группа -news, права доступа - 664).

    Заметим, что, если Ваш файл newsfeeds

    не содержит строк с указанием "питающихся" у Вас сторон, кроме строки ME, то демон innd при запуске выдаст ошибку: "SERVER bad_newsfeeds no feeding sites". Для того, чтобы успокоить сервер, на начальной стадии Вы можете прописать холостой поток:

    dummy-feed:!*::

    Добавьте в .profileпользователя root пути поиска в новых каталогах:

    PATH=$PATH:/usr/news/bin:/var/news

    Для чтения руководств с помощью команды man, добавьте строку в файле /etc/manpath.config:

    MANDATORY_MANPATH /usr/news/man

    Поместите запуск демона innd в сценарий rc.local:

    /usr/news/bin/rc.news > /dev/console

    Проверьте наличие строки

    DOINNWATCH=true

    в файле rc.news. Это позволит использовать утилиту innwatch.ctl, которая "гасит" сервер новостей, когда Ваш диск переполнился и предотвращает крушение системы.

    Перезагрузите машину и проверьте, работает ли демон innd. Во-первых, должен быть соответствующий процесс, запущенный пользователем news:

    ps -U news | grep inn

    Во-вторых, дав команду

    telnet localhost nntp

    Вы должны увидеть примерно следующее:

    Trying 127.0.0.1 Connected to localhost.your.domain. Escape character is '^]'. 200 news.your.domain InterNetNews server INN 1.7.2 ready

    Чтобы увидеть, какие команды понимает этот news-сервер, дайте команду help. Для возврата из сеанса telnet обратно в shell, дайте команду quit.

    InterNet

    Вы думаете, что если у Вас Internet-почта, то послать письмо
    на другую машину с Internet-почтой всегда будет просто? Ну-ну!
  • Прямая нотация: юзер@хост.домен.
  • Обратная (bang'овая) нотация:
    хост1.домен1!хост2.домен2!...!хостN.доменN!юзер.
    Письмо сначала зайдет на хост1, потом на хост2 и так далее,
    пока не попадет юзеру на последнем хосте. Если хост указывается
    без домена, то это, как правило, означает передачу по UUCP.
  • Аналогично юзер%хост1.домен1%хост2.домен2%...@хостN.доменN
    заставит письмо придти на хостN,... и наконец попадет юзеру
    на хосте1.
    Это необходимо в случае, когда письма по какой-либо причине напрямую
    не доходят; а в обратной нотации ведентся запись пути следования письма.
    Не советую смешивать прямую и обратную нотацию - протоколы не определяют
    приоритет операций.
    Еще в адресе используют знаки "^", ":" и некоторые другие; когда я точно выясню, что они значат, сообщу "городу и миру". :-)

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

    Для использования скриплета в HTML странице применяется таг :

  • ID - имя компоненты, через которое можно доступаться до свойств и методов скриплета. В описанном выше примере это Scriplet1.

  • DATA - имя HTML файла содержащего описание скриплета, если файл расположен в другой директории, то указывается относительный путь.

  • TYPE - MIME тип объекта, в данном случае скриплет.

  • Обратите внимание, что в таге не указан CLSID - Internet Explorer сам регистрирует компоненту, когда встречает скриплет, хотя при желании скриплет можно зарегистрировать в системе и указать его CLSID явным образом. Internet Explorer распознает скриплет по MIME типу "text/x-scriplet".
    Функциональность скриплета может быть реализована на любых языках сценариев поддерживающих Microsoft ActiveX Scripting интерфейс. При описании скриплета могут использоваться несколько языков сценариев, в этом случае создается несколько блоков
    При вызове свойств и методов префикс public_ не включается. И обращение из контейнера будет выглядеть следующим образом:
    Scriplet1.property1 = 'Another'; Scriplet1.method1(param);

    Компоненты необходимые для Remote Scripting

    Для использования RS необходимы следующие файлы в дополнении к вашим клиентским (*.htm) и серверным (*.asp) файлам:
  • RS.htm - Содержит методы которые вызываются из клиентского скрипта для инициализации RS, исполнения удаленных процедур, проверки состояние вызова и получение результатов работы.
  • RS.asp - Содержит методы инициализации RS на сервере и вызова необходимых функций.
  • Rsproxy.class - Содержит Java класс для апплета, который обеспечивает взаимодействие клиентской и серверной страницы.
    Эти файлы работают как библиотеки, вы просто включаете необходимые файлы (Rs.htm или Rs.asp) в вашу клиентскую или серверную страницу, и вызываете необходимые серверные методы.
    Все необходимые файлы должны быть доступны на сервере, по умолчанию предполагается, что эти файлы находятся в папке _ScriptLibrary.
    RS и безопасность
    RS обеспечивает такой же уровень безопасности как Java апплеты и IFrames. По требованиям безопасности, серверные методы не могут принимать в качестве параметров структурированные данные (объекты или массивы). К тому же, удаленные процедуры должны выполняться на том же сервере, откуда была загружена страница.
    Обеспечение RS с клиентской стороны
    Для обеспечения RS с клиентской стороны необходимо:
  • включать файла Rs.htm в вашу клиентскую страницу;
  • вызвать метод, который запускает Rsproxy апплет.
    Необходимо создать пустой JavaScript блок, который ссылается на файл Rs.htm, как показано ниже:


    После создания функций и процедур необходимо объявить их серверными методами. Для этого создается объект public_description содержащий описание нужных функций и процедур. В следующем примере в качестве конструктора объекта public_description вызывается функция MyServerMethod():

    < script runat = server language ="VBScript"> Function addNumbers(num1, num2) addNumbers = CInt(num1) + CInt(num2) End Function

    Краткое описание работы системы INN

    Во время загрузки системы в качестве пользователя root запускается сценарий rc.news
    (хорошее место для запуска - файл /etc/rc.local). В результате чего выполняется демон innd
    (посмотрите процесс командой ps -U news | grep inn). Эта программа прослушивает порт NNTP (TCP-port 119) на наличие входящих соединений. Если соединяются локальные клиенты для чтения новостей, то innd
    передает дальнейшее управление демону nnrpd, вызывая его. Этот демон просматривает файл nnrp.access для определения прав доступа к локальной базе статей. Если соединяются поставщики новостей (они должны быть прописаны в файле hosts.nntp), то innd принимает статьи (просматривая файлы hosts.nntp и ) и размещает их на Вашем диске (по умолчанию в каталоге /var/news/spool/articles).
    В функции innd не входит отсылка новостей с локальной машины, для этого предназначены другие программы. Как только статья получена от поставщиков, она распространяется на все NNTP-машины, которые подписаны на конкретную телеконференцию у данной машины. Конкретно, куда и каким образом статьи будут отправляться с локального сервера определяется в файле newsfeeds. Программа, отвечающая за отправку статей (например, nntpsend, nntplink, send-nntp
    - программы транспортировки по NNTP, или sendbatch - программа транспортировки по UUCP) читает файл newsfeeds
    и передает статьи в заданном направлении.
    Если Вы используете nntpsend, то Вы должны отредактировать файл nntpsend.ctl (хотя все можно прописать в файле newsfeeds). Список статей на отправку записывается в файл, который обычно хранится в каталоге /var/news/spool/out.going. Имя этого файла, как правило, совпадает с именем NNTP-соседа, указанного в файле newsfeeds. Для того, чтобы в один "прекрасный" момент диск не переполнился, старые статьи надо удалять. Это делается с помощью сценария news.daily. Он вызывает программу expire, которая просматривает файл (в нем указывается срок хранения статей) для обнаружения и удаления статей с устекшим сроком хранения. Этот же сценарий предназначен для каждодневного отчета о работе INN.

    Logging системы INN.

    Итак, конфигурационные файлы отредактированы, система INN не обнаружила в них синтаксических ошибок, из cron'а вызываются периодические процессы системы INN, демон innd запущен. Естественное желание - убедиться, что все работает корректно. К счастью, система INN достаточно дружественная и извещает нас о своей работе (либо об ошибках, в результате которых она работать не может), используя стандартную в Unix-систему регистрации syslog. Кроме того, система INN поставляется с рядом сценариев, обобщающих информацию в log-файлах (и не только в них) и выводящих их в приятном для чтения виде. Наконец, обобщенная статистика может ежедневно отправляться по e-mail администратору сервера новостей. Об этом здесь и пойдет речь.
    Посмотрев конфигурациооный файл /etc/syslog.confдемона syslogd, мы увидим куда идут данные регистрации ситемы INN. Напомню, что во время инсталляции INN мы раскомментировали в этом файле строки:
    news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice /var/log/news/news.notice
    Затем создали соответствующие файлы (их владелец - news, группа - news) и перезапустили демон syslogd.
    Наиболее разрастающийся из них - news.notice. Cюда пишет innd о соединении с ним удаленных NNTP-хостов, демон nnrpd записывает сюда информацию об активности клиентов, в этом же файле информируют о своей работе программы ctlinnd, innxmit, rnews и др.
    Файл news.crit содержит сообщения о критических ошибках, требующих внимания от администратора сервера новостей. (Например, сервер INN не может открыть файл из-за неверных прав доступа; или здесь появится сообщение о гашении сервера с помощью ctlinnd и т.д.).
    Файл news.err содержит сообщения о фатальных ошибках сервера. Вообще говоря трудно провести четкую границу между информацией об ошибках, записываемых в news.crit и news.err. (Syslogd зачастую записывает одинаковую информацию в оба файла).
    Система INN имеет помимо log-файлов, поддерживаемых системой syslog, встроенные log-файлы - errlog и news (по-умолчанию они расположены в каталоге /var/log/news).

    Файл errlog содержит стандартный вывод и стандартные ошибки любых программ, порождаемых демоном innd. В частности, при перезагрузке операционной системы в этом файле появится следующая строка:

    INND exiting because of signal

    Файл newsрегистрирует все статьи, поступающие к innd для обработки. Строки в этом файле имеют следующий формат:

    mon dd hh:mm:ss.mmm flag feed Message-ID [reason] size site ...

    Первые три поля определяют дату поступления (с точностью до миллисекунд) статьи к демону innd. Следующее поле - флаг, определяющий действие, выполненное innd с данной статьей. Возможны 4 флага:

  • "+" - статья успешно принята.


  • "-" - статья отвергнута по причине [reason]

    (поле reason фигурирует только если статья отклонена).


  • "j" - статья успешно принята, но поскольку она из групп новостей, имеющих в файле active

    флаг "j", она будет помещена в группу junk.


  • "c" - в этом случае прежде чем поступит сама статья будет принято cancel-сообщение.


  • Поле feed определяет от кого статья была получена демоном innd для дальнейшей обработки. Если это поле представляет IP-адресс 0.0.0.0, то статья получена локально (nnrpd принял ее от клиента).

    Поле Message-ID определяет идентификатор данной статьи.

    Если статья была отвергнута, то поле [reason]

    определяет причину, по которой это было сделано. Причем, это поле будет последним в данной строке (поля size site ... отсутствуют).

    Поле size определяет размер статьи в байтах.

    Последнее поле site ... определяет список сторон, которым данная статья будет распространена (основываясь на файле newsfeeds).

    Рассмотрим для примера фрагмент файла news:

    Mar 28 06:06:20.340 + ace.domain.ru <6fgqr8$qun$1@simtel.ru> 27127 netlab Mar 28 06:06:21.278 - ace.domain.ru 437 Unwanted newsgroup "relcom.rec.puzzles" ...... Mar 31 11:31:43.818 + 0.0.0.0 <35209BDE.D94E6A66@kari.ru> 2140 ace netlab Mar 31 14:07:57.876 + 0.0.0.0 <01bd5c8c$e11b9520$8832e9c1@bsd.kari.ru> 479 ace


    первая строка говорит, что от ace.domain.ru была принята статья (опубликованная на машине домена simtel.ru) размером 27127 байт и копия статьи поставлена в очередь на отправку стороне netlab. Вторая строка говорит, что машина ace.domain.ru послала нам статью из группы новостей relcom.rec.puzzles, на которую мы не подписывались, поэтому innd отверг ее с указанием причины: 437 Unwanted newsgroup "relcom.rec.puzzles". В последних двух строках статьи размером 2140 и 479 байт были опубликованы клиентами нашего сервера с локальной машины и с хоста bsd.kari.ru, используя nnrpd, и распространены на стороны ace, netlab и ace соответственно.

    Помимо перечисленных выше файлов регистрации, ряд программ системы INN ведут собственные файлы регистрации (expire.log, send-uucp.log, nntpsend.log и др.).

    Програама expire оповещает о проделанной ею работе через файл expire.log. Ниже приведен пример этого файла:

    expire begin Sat Mar 28 04:06:34 MSK 1998: (-v1) Article lines processed 14581 Articles retained 12437 Entries expired 2144 Files unlinked 2854 Old entries dropped 408 Old entries retained 2967 expire end Sat Mar 28 04:09:21 MSK 1998

    Первая и последняя строки обозначает временные границы работы программы expire -v1. Следующие строки означают, что программа expire прочитала в history-файле 14581 строк, из них оставлено 12437 строк (читай статей), т.е. удалено 2144 строки (на самом деле строка не удаляется, а "сокращается" до трех полей - message-id, дата прибытия статьи и значение заголовка Expire (либо ~, если заголовок отсутствует), поэтому в действительности - 2144 есть число удаленных тел статей). Значение Files unlinked (2854) определяет число удаленных файлов на диске; дело в том, что одна статья (одно тело) может быть опубликована в несколько групп (при этом для каждой группы создается свой файл), поэтому это значение может быть больше, нежели Entries expired. Последние два цифровых значения относятся к неполным строкам (из 3 полей), т.е. к message-id статей, тела которых уже удалены из системы.


    Old enties dropped (408) - число удаленных строк для статей, тела которых уже были удалены. Old entries retained (2967) - число оставленных строк для статей, тела которых уже удалены (неполных строк).

    Если Вы пользуетесь программой nntpsend для отправки статей к NNTP-соседям, то Вы обнаружите файл nntpsend.log, в который эта программа записывает информацию о своей работе. Например при сеансе отправки потока новостей к NNTP-соседу netlab при помощи nntpsend , файл nntpsend.log

    пополнится примерно следующим:

    nntpsend: [3560] start nntpsend: [3560] stop nntpsend: [3560:3611] begin netlab Wed Apr 1 11:43:37 MSD 1998 nntpsend: [3560:3611] innxmit -a netlab ... nntpsend: [3560:3611] end netlab Wed Apr 1 11:43:39 MSD 1998

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

    Сценарий innstat выдает "фотоснимок" системы INN. Он показывает режим работы сервера, использование дискового пространства, статус всех log- и lock- файлов.

    Perl-сценарий innlog.pl выдает статистику активности демонов innd и nnrpd , обобщая информацию в регистрационных файлах системы syslog. Обычно этот сценарий вызывается другим сценарием - scanlogs.

    Сценарий scanlogs обобщает информацию, записываемую в log-файлы INN. По умолчанию, он также производит ротацию и очистку ряда регистрационных файлов. В каталоге /var/log/news/OLD содержатся компрессованные файлы, полученные в результате ротации (цикл ротации - 3). Обычно scanlogs

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

    По большому счету, Вам нет необходимости запускать перечисленные выше сценарии по отдельности. Запуская из cron'а ежедневно сценарий news.daily, администратор сервера новостей news (псевдоним usenet) будет ежедневно по почте получать полную статистику работы INN сервера, как суммарный итог работы этих сценариев.


    Прежде чем разбираться, что же нам послал в письме news.daily, разберемся по шагам, что в действительности делает этот сценарий:

  • Сначала он формирует Subject для будущего письма по адресу usenet@this.news.server в следующем виде: this.news.server daily usenet report for [current data]


  • Вызывает сценарий innstat, который показывает статус innd (вывод команды ctlinnd mode), использование дискового пространства, размеры batch-, log- и lock-файлов в блоках по 512 байт (округление идет до следующего целого значения), а текущие соединения с сервером.


  • news.daily вызывает программу expire, которая сканирует файл history и основываясь на сроках хранения статей (прописанных в файле expire.ctl) удаляет старые статьи.


  • news.daily передает работу сценарию scanlogs, который выполняет следующее:

  • показывает критические ошибки от syslog (содержимое файла news.crit).


  • показывает фатальные ошибки от syslog (содержимое файла news.err).


  • показывает содержимое файла expire.log (о проделанной командой expire работе).


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

  • 20 сторон, отправлявших нам чаще всего (количество в первом столбце) статьи с ошибками;


  • 20 сторон, посылавших нам чаще всего статьи из групп, на которые мы не подписывались;


  • 20 наиболее частых из нежелательных распространений;


  • 20 наиболее часто приходящих групп новостей, на которые мы не подписаны;


  • 20 сторон из тех, которые наиболее часто пытались установить соединение по NNTP с нами, но не имели на то прав;


  • 20 наиболее часто встречающихся основных проблем;


  • 20 сторон посылавших нам чаще всего статьи с ошибочными заголовками.


  • scanlogs вызывает perl-сценарий innlog.pl, который обобщает syslog-информацию о работе innd и nnrpd

    и выводит следующую статистику:

  • неизвестные для сценария вхождения в файле news;


  • команды, полученные демоном innd от ctlinnd;



  • группы новостей, созданные через ctlinnd;


  • группы новостей, удаленные через ctlinnd;


  • статистика о получении демоном innd статей (по системам и итоговая информация);


  • далее выводится различная innd статистика (об ошибочных ID статей, об ошибочных ihave- и sendme- сообщениях, об ошибочных командах, об отвергнутых из-за размера статей, и др.);


  • статистика об отправлении статей командой innfeed (если используется);


  • nntpd-статистика;


  • статистика об отправлении статей командой innxmit (по системам и итого);


  • попытки ( в том числе ошибочные) установления соединений для передачи статей другим системам (по системам и итого);


  • nntplink-статистика (если для отправки используется эта программа);


  • batcher-статистика;


  • rnews-статистика;


  • nnrp-статистика (статистика работы nnrp-клиентов по хостам и доменам, запросы на аутентификацию по пользователям, счетчики запросов статей по категориям и группам, ошибки при работе gethostbyaddr и др.);


  • mthreads-статистика (если используется).


  • после завершения работы сценария innlog.pl, scanlogsкомпрессует нужные файлы и производит их ротацию с циклом 3 (если у команды нет опции norotate), после чего возвращает управление работой сценарию news.daily;


  • news.daily снова вызывает сценарий innstat, который показывает статус innd после очистки. произведенной программой expire;


  • перенумерует файл active;


  • из временных файлов формирует окончательное почтовое сообщение для usenet;


  • и, наконец, завершает свою работу, формируя в каталоге /var/news/etc файл news.daily, в котором сообщает время завершения своей работы.


  • Copyright (C) by Yuri V. Savin, 1998.

    MCIMail

    Адрес в MCIMail - число, например, 123456.
    В нотации Internet это выглядит 123456@mcimail.com.

    Этот алгоритм разработан для представления

    Этот алгоритм разработан для представления произвольных последовательностей байтов в форму, читаемую для человека. Кодирующий и декодирующий алгоритмы очень просты, но закодированные данные примерно на 33% больше, чем некодированные. этот метод идентичен тому, который используется в приложениях PEM (Privacy Enhanced Mail), описанной в RFC 1421 с одним отличием: base64 не приемлит встроенного "чистого" текста.

    Base64 использует 65-символьный поднабор из US-ASCII, выделяя 6 бит на каждый печатный символ. (65-й символ "=" используется для обозначения функции спец. обработки).

    ПРИМЕЧАНИЕ: этот поднабор имеет важное свойство: он идентичен всем версиям языковой кодировки ISO 646, включая US ASCII, а также всем версиям EBCDIC. Другие популярные механизмы кодирования (uuencode, base85 - часть уровня 2 PostScript) не разделяют этих свойств и поэтому не удовлетворяют требованиям переносимости для двоичных данных электронной почты.

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

    Каждая 6-битная группа используется как индекс для массива 64-х печатных символов. Символ, на который указывает значение индекса, помещается в выходную строку. Эти символы выбраны так, чтобы быть универсально представимыми и исключают символы, имеющие специальное значение для SMTP-транспорта (".", CR, LF) и для синтаксиса вложенных тел MIME ("-").

    Таблица 1: Алфавит Base64 Значение Код Значение Код Значение Код Значение Код 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w = (заполнитель) 15 P 32 g 49 x 16 Q 33 h 50 y


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

    Если в хвосте потока кодируемых данных осталось меньше, чем 24 бита, справа добавляются нулевые биты до образования целого числа 6-битных групп. А до конца 24-битной группы остается от 0 до 3-х недостающих 6-битных групп, вместо каждой из которых ставится символ-заполнитель '='. Поскольку весь входной поток представляет собой целое число 8-битных групп (т.е., просто байтных значений), то возможны лишь следующие случаи: (1) входной поток как раз оканчивается 24-битной группой. В таком случае, выходной поток будет оканчиваться четырьмя символами Base64 без символа '='; (2) хвост входного потока имеет длину 8 бит. Тогда в конце выходного кода быдут два символа Base64, с добавлением двух символов '='; (3) хвост входного потока имеет длину 16 бит. Тогда в конце выходного будут стоять три символа Base64 и один символ '='.

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

    Любые бессмысленные последовательности в коде Base64 вроде "=====" должны быть игнорированы.

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

    Нет нужды экранировать вложенные тела внутри многочастного тела (multipart) при кодировании его в Base64, так как в коде Base64 отсутствует символ '-'.

    Механизм конвертации "Quoted-Printable"

    Этот механизм предназначен для представления данных, в основном состоящих из байтов, соответствующих символам, имеющим изображение в символьном наборе ASCII. В результате данного кодирования все байты будут иметь такие значения, гарантированные от дальнейшей модификации почтовым транспортом. Если конвертируемые данные в основном представляют собой ASCII-текст, то конечная их форма остается узнаваемой и читаемой для человека. Тело, полностью состоящее из ASCII-символов, также может быть конвертироавано в Quoted-Printable, что гарантирует его содержимому целостность при прохождении через всякие шлюзы, в которых происходит языковая перекодировка символов или преобразование концов строк и т.д.
    В Quoted-Printable байты должны быть рпедставлены в соответствии со следующими правилами:
    ПРАВИЛО #1: (обычное 8-битное представление). Каждый байт, кроме тех, которые используются для обозначения конца строки, может быть представлен с помощью двух шестнадцатиричных цифр, предворяемых знаком "=". При написании шестнадцатиричных цифр с A по F должны использоваться заглавные буквы. Кроме тех случаев, когда нижеследующие правила позволяют альтернативное кодирование, данное правило является обязательным.
    ПРАВИЛО #2: (Буквенное представление). Байты с десятичным значением с 33 по 60 и с 62 по 126 МОГУТ быть представлены ASCII-символами, соответствующими этим значениям (с '!' по '' по '~').
    ПРАВИЛО #3: (Пробелы): Байты со значениями 9 и 32 МОГУТ быть
    представлены как ASCII-символы "Табуляция" и "Пробел", но НЕ ДОЛЖНЫ быть представлены так в конце строки. Везде, где они представлены соответствующими ASCII-символами, за ними должен следовать символ, имеющий графическое изображение (печатный символ). В конце же строки символы табуляции и пробела должны быть представлены в соответствии с правилом #1, так как некоторые почтовые транспорты могут убирать пробелы в конце строки.
    ПРАВИЛО #4: (Конец строки): Конец строки в тексте письма должен быть представлен (в соответствии с RFC 822) последовательностью CRLF.
    Так как в каноническом представлении текста не требуется визуального отображения символов конца строки, в Quoted-Printable не используется видимых символов для обозначения конца строки. Для представления бинарных данных более предпочтительной является кодировка base64.

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

    ПРАВИЛО #5: (Мягкий конец строки): В соответствии с Quoted-Printable длина строки не должна превышать 76 символов. В противном случае используется 'мягкий' перевод строки, представимый знаком равенства. Например, если исходная строка имела вид:

    Now's the time for all folk to come to the aid of their country.

    то в Quoted-Printable encoding он может быть представлена следующим образом:

    Now's the time = for all folk to come= to the aid of their country.

    Это обеспечивает механизм восстановления исходной длины строки пользовательским почтовыи агентом.

    Поскольку символ дефиса ("-") представляется в Quoted-Printable в обычном виде, особую осторожность нужно соблюдать при заключении тела в Quoted-Printable в многочастное письмо, чтобы удостовериться, что граница этого включения не проявляется нигде внутри этого включения (лучше всего выбрать обозначение границы в виде последовательности символов "=_", которая никогда не появляется в теле, закодированном в Quoted-Printable. См. определение многочастного письма далее.)

    ЗАМЕЧАНИЕ: Quoted-Printable представляет собой нечто вроде компромисса между читабельностью и сохранностью при пересылке. Тела в Quoted-Printable будут надежно защищены при прохождении многих почтовых шлюзов, но могут быть не очень хорошо переданы через некоторые шлюзы, использующие трансляцию в EBCDIC. (Теоретически, EBCDIC-шлюз должен кодировать тело из quoted-printable в base64 и затем декодировать обратно, но таких шлюзов пока не существует).


    Единственный способ добится действительно надежной транспортировки через EBCDIC-шлюз - экранировать ASCII-символы

    !"#$@[\]^`{|}~

    в соответствии с правилом #1.

    Так как данные в quoted-printable являются строчно-ориентированными, можно ожидать, что представление концов строки в Quoted-Printable будет изменено почтовым транспортом таким же образом, как и обычный текст может измениться при пересылке по Internet-почте между системами с разными соглашениями по представлению концов строки. Если подобные изменения могут нарушить целостность данных, то имеет смысл пользоваться кодировкой base64, а не Quoted-Printable.

    Вниманию создателей ПО: Если двоичные данные пересылаются в Quoted-Printable, то надо соблюдать осторожность при кодировании символов CR и LF. В частности, последовательность CRLF должна быть представлена как "=0D=0A", в противном случае, если CRLF означает конец строки, то она может быть неверно интерпретирована в платформах с другими соглашениями по концу строки.

    Синтаксис данных в quoted-printable описывается следующим образом:

    quoted-printable := ([*(простой текст / ПРОБЕЛ / ТАБУЛЯЦИЯ) простой текст] ["="] CRLF) ; Максимальная длина строки - 76 символов, включая CRLF простой текст := байт /<любой ASCII-символ "=", ПРОБЕЛ или ТАБУЛЯЦИЯ>

    ; символы, не перечисленные в приложении B к RFC 1521 как безопас- ; ные для почты, также не рекомендуются к использованию байт := "=" 2(ФИФРА / "A" / "B" / "C" / "D" / "E" / "F") ; байт используется для символов > 127, =, ПРОБЕЛ, или ТАБУЛЯЦИЯ, ; и рекомендуется для представления любых символов, не перечислен- ; ных в приложении B к RFC 1521 как безопасные для почты

    Multipart: общий синтаксис

    Поле Content-Type многочастного письма требует одного параметра, "boundary", который определяет границы вложения. Границей является строка, состоящая из двух символов "-" (десятичный код 45) и значения параметра 'boundary' из поля заголовка Content-Type.
    ЗАМЕЧАНИЕ: Два символа "-" используются для совместимости с более ранним методом вложения писем, описанным в RFC 934 и для облегчения поиска границ. Однако, многочастные письма MIME не полностью совместимы с RFC 934; в частности, они не подчиняются соглашению RFC 934 по экранированию строк символом "-", так как с каждым новым уровнем экранирования длина строк увеличивается. А поскольку SMTP-транспорты часто обрезают длинные строки, этот механизм становится неприменимым в случае многоуровневой структуры письма типа 'multipart'.
    ВНИМАНИЮ ПРОИЗВОДИТЕЛЕЙ ПО: синтаксис параметров поля Content-Type таков, что зачастую необходимо значения границ в параметре 'boundary' заключать в кавычки. Это не всегда требуется, но никогда не повредит. Программистам следует изучить синтаксис внимательно, чтобы не допустить ошибок в поле Content-Type. Типичное поле Content-Type для типа 'multipart' может выглядеть следующим образом:
    Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p
    Но в следующем примере содержится ошибка:
    Content-Type: multipart/mixed; boundary=gc0p4Jq0M:2Yt08jU534c0p
    (из-за двоеточия), которая может быть исправлена следующим образом:
    Content-Type: multipart/mixed; boundary="gc0p4Jq0M:2Yt08jU534c0p"
    Это означает, что тело письма состоит из нескольких частей, каждая из которых соответствует синтаксису письма RFC 822, за исключением того. что область заголовка может быть абсолютно пустой и начальная граница каждой части отмечена последовательностью:
    --gc0p4Jq0M:2Yt08jU534c0p
    Нужно обратить внимание, что метка границы части письма должна располагаться в начале строки, то есть, сразу же после признака конца строки CRLF. Причем, последовательность CRLF полагается элементом метки границы, а не последним элементом тела предыдущей части (так как тело предыдущей части может неоканчиваться концом строки, что принципиально важно в случае бинарных данных.
    Если же тело предыдущей части оканчивается концом строки, то метке границы соответственно должны предшествовать два конца строки). Сразу за меткой границы должен следовать конец строки (CRLF), или при отсутствии заголовка следующей части письма, два конца строки.

    Метка границы не должна иметь длину более 70 символов, не считая два начальных дефиса.

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

    --gc0p4Jq0M2Yt08jU534c0p--

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

    ЗАМЕЧАНИЕ: Эти области приамбулы и эпилога обычно не используются из-за отсутствия точной семантики для обработки этих областей почтовыми шлюзами, однако, многие программные MIME-продукты считают удобным помещать туда пояснительную информацию для получателей, которые пользуются до-MIME'овским ПО. По этой причине, MIME-совместимые программы должны игнорировать эти области.

    ЗАМЕЧАНИЕ: Поскольку метки границы не должны появляться внутри тел частей письма, почтовая программа, создающая письмо, должна иметь алгоритм, позволяющий автоматически подобрать уникальную последовательность, не встречающуюся в теле ни одной из частей, либо имеющую минимальную вероятность появления, если данные предварительно не сканируются на наличие таковой.

    В качестве простого примера предлагается двухчастное письмо, вторая часть которого оканчивается признаком конца строки, а первая нет:

    From: Nathaniel Borenstein

    To: Ned Freed

    Subject: Sample message MIME-Version: 1.0 Content-type: multipart/mixed; boundary="simple boundary" Это приамбула. Должна быть игнорирована --simple boundary Это простой ASCII-текст. Он НЕ оканчивается признаком конца строки. --simple boundary Content-type: text/plain; charset=us-ascii Это простой ASCII-текст.


    Он оканчивается признаком конца строки. --simple boundary-- Это эпилог. Тоже должен игнорироваться MIME-программами.

    Часть письма, в свою очередь, также может иметь тип 'multipart', то есть. быть многочастным телом, но при этом метки границ, использующиеся во внешнем и во внутреннем multipart-телах, должны отличаться друг от друга.

    Использование типа 'multipart' в одночастном письме может быть полезно в некоторых контекстах и не запрещено.

    Единственным обязательным параметром для типа 'multipart' является параметр 'boundary', состоящий из 1-70 символов без хвостовых пробелов (которые могут быть удалены в процессе пересылки, и тогда почтовая программа получателя не сможет разделить вложенные части).

    граница := 0*69<символов границы> символ_границы_кроме_пробела символ границы := символ_границы_кроме_пробела / " " символ_границы_кроме_пробела := ЦИФРА / БУКВА ЛАТИНСКОГО АЛФАВИТА / "'" / "(" / ")" / "+" /"_" / "," / "-" / "." / "/" / ":" / "=" / "?"

    Общий вид многочастного тела - следующий:

    многочастное тело := приамбула вложения признак_конца эпилог вложение := разделитель часть_тела CRLF разделитель := "--" метка_границы CRLF ; метка границы должна браться из поля Content-Type. ; Не должно быть пробелов между "--" и меткой границы. признак конца := "--" метка_границы "--" CRLF ; Опять, без пробела перед "--", приамбула := игнорируемый текст эпилог := игнорируемый текст игнорируемый текст := *(*текст CRLF) часть_тела := <письмо RFC 822, со всеми необязательными полями заголовка>

    ЗАМЕЧАННИЕ: В некоторых транспортах такие ограничения RFC 822, как использование тольеко печатных символов в теле, могут не действовать. Ослабления таких ограничений должны быть истолкованы как локальные расширения определения тела письма настолько, насколько они поддерживаются почтовым транспортом и адекватно документированы в поле заголовка Content-Transfer-Encoding.Однако, ни при каких обстоятельствах в заголовках как письма, так и его частей, не должно содержаться каких-либо символов, кроме US-ASCII.

    Настройка системы INN

    Итак, мы инсталлировали систему INN и запустили демон innd. Более того, мы не получили сообщений об ошибках и процесс innd выполняется на системе. Настала пора возложить на innd
    реальные функции. Для этого нужно внести в конфигурационные файлы изменения, отражающие наши потребности. Для начала погасим демон innd
    с помощью команды:
    ctlinnd shutdown configure
    Теперь мы смело можем править конфигурационные файлы пакета INN (главное, не пугаться их количества :-)). По умолчанию они находятся в каталоге /var/news/etc. Естественно, прежде чем редактировать файлы надо иметь представление о том, как функционирует пакет INN (Вы ведь прочитали ).
    Попробуем выяснить, что нам может предложить провайдер (или любые хосты, которые согласны снабжать нас новостями). Для этого получим список новостей, на которые он подписан. Один из способов получения списка следующий. Воспользуемся командой пакета INN:
    getlist -h newsserver.our.pro > active.provider
    Созданный вышестоящей командой файл active.provider
    содержит список групп новостей, на которые подписан наш провайдер. Выберем из этого списка те группы, на которые мы действительно хотим подписаться и пропишем их в нашем файле . Например, если Вы хотите подписаться на конференцию relcom.humor, добавьте в этот файл примерно следующее:
    relcom.humor 0000000000 0000000001 y
    Если Вы хотите принимать все (или почти все) группы новостей, на которые подписан Ваш провайдер, то файл active можно получить из active.provider, "прогнав" того через следующий сценарий (он обнуляет два средних поля каждой строки):
    #!/bin/sh sed < active.provider > active \ -e 's/^\([^ ]*\) [0-9]* [0-9]* \([^ ]*\)$/\1 0000000000 0000000000 \2/'
    Наш файл active готов (он содержит строки для всех групп, которые поддерживает наш сервер), но надо сообщить и провайдеру о нашем выборе (чтобы он знал какие группы новостей ему нужно пересылать на наш хост).
    Даже если провайдер пропишет нас в своей конфигурации сервера новостей, он не сможет скидывать нам новости по NNTP.
    Мы должны дать ему разрешение на это. Для этого добавим строчку в файл hosts.nntp:

    newsserver.our.provider:

    Здесь надо заметить, что мы полагаемся на провайдера: мы знаем, что он будет снабжать нас только теми конференциями, о которых мы его попросили. Если же Вы не доверяете своим NNTP-соседям, то можно указать конкретно шаблон конференций, которые Вы принимаете на локальный диск от конкретного NNTP-соседа. Например, мы хотим принимать от newsserver.our.badprovider только relcom'овские группы новостей:

    newsserver.our.badprovider::relcom.*

    Отредактируем файл newsfeeds, указав всех NNTP-соседей, которых мы хотим снабжать статьями. Не забудем указать в этом файле своего провайдера. Ниже приведены два примера этого файла. В первом случае мы планируем снабжать статьями хост newsserver.our.provider по NNTP (используя программу nntpsend, о том как ее вызывать будет сказано ):

    ME:*, !junk, !control*, !local*/!local:: newsserver.our.provider:*, !junk, !control*, !local*:Tf, Wnm:newsserver.our.provider

    Во втором случае мы хотим снабжать этот же хост по UUCP (имя этой uucp-системы provider), используя программу sendbatch (опять же о том, как ее вызывать, будет сказано ):

    ME:*, !junk, !control*, !local*/!local:: provider/newsserver.our.provider:*, !junk, !control*, !local*:Tf, Wnb:

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

    Определимся теперь с клиентами нашего сервера новостей (хосты, которые через программу чтения новостей общаются с нашим сервером). Например, мы хотим ограничить пространство пользования ресурсами нашего сервера новостей нашей Интранет-сетью (192.168.111.0/255.255.255.0) и нашей внешней сетью (домен our.domain), причем пользователям этих сетей мы разрешаем и читать новости, и публиковать их на наш сервер. Ах, да, мы чуть не забыли о наших хороших партнерах из домена partner.domain (правда, им нечего делать в наших локальных конференциях).


    Ну, а для остальных поместим первым правило, запрещающее все и вся. Для этого добавим строки в файл nnrp.access:

    *:: -no- : -no- :!* 192.168.111.*:Read Post:::* *.our.domain:Read Post:::* *.partner.domain:Read Post:::*, !local*

    Как только мы начнем получать статьи на локальный диск, надо будет следить за сроком их хранения на диске и удалять старые (диск же не резиновый :-)). К счастью, за нас это будет делать программа expire, а от нас требуется только дать ей соответствующие указания в файле (ну, и, конечно, запускать механизм очистки - об этом ). Мы должны указать в этом файле, во-первых - срок хранения идентификаторов статей в файле history (это делается для того, чтобы не принимать заново удаленные статьи), во-вторых - срок хранения самих тел статей. Пример ниже говорит о том, что запись об идентификаторе статей хранится в файле history 14 дней после удаления тела этих статей, тела статей из локальных телеконференций хранятся на системе от 5 до 7 дней (по умолчанию 6), а для всех остальных телеконференций тела хранятся от 3 до 5 дней (по умолчанию - 4 дня):

    /remember/:14 *:A:3:4:5 local*:A:5:6:7

    Заметим, что значение по умолчанию (образец '*') должно фигурировать раньше, чем строки для отдельных групп, поскольку применяется последнее соответствие образцу в первом поле.

    Важным шагом после редактирования конфигурационных файлов является проверка корректности сделанных нами изменений. Система INN имеет ряд средств, помогающих нам в решении этой задачи. Вот некоторые из них:

  • Для поиска ошибок в файле newsfeeds можно дать следующую команду

    innd -s

    Например, если Вы получили в ответ следующее:

    Found 1 errors --see syslog

    то это значит, что командой обнаружена одна ошибка, о которой сообщается через syslog в файлах news.err и news.notice.

  • Для проверки файла на наличие неверных строк, можно дать следующую команду:

    expire -n -x -t

    Например, если Вы получили в ответ следующее:

    /var/news/etc/active: line 5 wrong number of fields

    то это значит, что Вы ошиблись с количеством полей в 5-той строке этого файла (их должно быть 4).


    Однако, это не лучший способ проверки этого файла. В частности, expire не замечает отсутствие флага для группы новостей (в отличие от inncheck).

  • Итак, inncheck - perl-сценарий, предназначенный для проверки всех рассматриваемых нами конфигурационных файлов. Помимо проверки файлов на наличие синтаксических ошибок, он может осуществлять проверку прав доступа к файлам и их владельцев. Возвращаясь к примеру выше (отсутствие флага в конце строки файла active), inncheck

    сообщит Вам об этой ошибке:

    /var/news/etc/active:5: ends with whitespace

    Запущенный без параметров, inncheck проверит синтаксис всех файлов (которые может проверить), с выводом на экран сообщений об ошибках. Если мы укажем опцию -v (verbose режим), то inncheck расскажет нам о том, что он просматривает. Мы можем ограничить работу inncheck проверкой синтаксиса конкретного файла, дав команду inncheck {файл}. Для того, чтобы проверить корректность прав доступа к файлам и корректность владельцев и групп файлов можно дать команду inncheck -perm. Ту же информацию, да еще и с указанием того, какие команды надо выполнить, чтобы устранить ошибки, дает команда

    inncheck -f -perm

    Последний шаг настройки - периодически запускать программу отправки статей с нашей машины, программу чистки каталога статей и обобщения log-файлов. Для этого отредактируем таблицу заданий пользователя news для демона cron:

    crontab -u news -e

    Ваш любимый редактор (определенный переменной окружения EDITOR) откроет файл /var/cron/tabs/news. Ежедневно в 4 часа утра мы будем запускать сценарий news.daily, в функции которого входит обобщение и ротация файлов регистрации, прогон программы expire и др. Далее, в 1 минуту и 28 минут каждого часа мы будем запускать программу nntpsend

    для отправки потоков статей по NNTP нашим соседям.

    0 4 * * * /usr/news/bin/news.daily > /dev/null 2>&1 & 1, 28 * * * * /usr/news/bin/nntpsend > /dev/null 2>&1 &

    Наконец, если мы планируем отправлять потоки новостей по UUCP на UUCP-систему provider, то в 37 минут каждого часа из cron'a будем вызывать программу sendbatch:

    37 * * * * /usr/news/bin/sendbatch -c provider > /dev/null 2>&1 &

    Ну что ж, теперь можно запустить демон innd (rc.news

    поможет нам в этом) и насладиться его работой!

    Необязательное поле Content-Description

    Возможность ассоциировать некоторую описательную информацию с данными часто очень желательна. например, может быть полезным описать тело, содержащее графическое изображение, как "a picture of the Space Shuttle Endeavor." Этот текст и может быть помещен в поле заголовка Content-Description.
    описание := "Content-Description" ":" *текст
    Описание должно иметь языковую кодировку US-ASCII, хотя механизм, определенный в RFC-1522 может быть использован для не-US-ASCII значений.

    Необязательное поле Content-ID

    При создании почтового агента верхнего уровня может быть желательно позволить одному телу иметь ссылку на другое. Для этого поля могут быть помечены с помощью поля заголовка "Content-ID", синтаксически идентичного полю "Message-ID":
    идентификатор := "Content-ID" ":" идентификатор письма
    Как и значения поля Message-ID, значения поля Content-ID должны быть абсолютно уникальными (для всего мира).
    Такой идентификатор может быть использован для идентификации тела письма (части письма) в нескольких контекстах, в часности, для кэширования данных, указываемых с помощью механизма message/external-body. Хотя поле Content-ID является необязательным в общем случае, его использование необходимо в реализациях, генерирующих данные, имеющие дополнительный тип "message/external-body" (поле Content-type). Каждое тело такого типа должно обязательно иметь в своем заголовке поле Content-ID для обеспечения ссылки на такие данные.
    Значение поля Content-ID имеет специальную семантику в случае типа multipart/alternative. (См. соотв. пункт).

    Обработка ошибок

    При вызове удаленных серверных методов могут происходить разного рода ошибки: синтаксические ошибки, ошибки времени исполнения, ошибки при вызове методов. RS имеет механизмы оповещения о происходящих ошибках.
    Реакция на ошибки немного различается при синхронном и асинхронном вызове. Если при синхронном вызове произошла ошибка, механизм обработки ошибок выбрасывает сообщение об ошибке в окно браузера. Текстом сообщения является message свойство call объекта. Если ошибка происходит при асинхронном вызове, то вы можете ее перехватить, определяя error callback функцию.
    При асинхронном вызове передаете ссылку на error callback функцию в качестве параметра. Т. к. передается указатель на функцию, то при таком вызове можно использовать только JavaScript. Примеры с использованием объекта ссылающегося на серверную страницу и без:
    callObject = ASPObject.methodName(p1, p2[,...], callbackFunction, errorCallbackFunction, context)
    callobject = RSExecute(url, methodName, p1, p2[,...], callbackFunction, errorCallbackFunction, context)
    При синхронном и асинхронном вызове вы можете получать информацию о происходящих ошибках через свойства call объекта. Если вы определяете error callback функцию, то call объект передается в качестве параметра как и в случае callback функции. Полезные свойства call объекта при обработке ошибочных ситуаций:
  • status содержит -1 если при удаленном вызове произошла ошибка.
  • data содержит необработанное сообщение переданное сервером в XML формате. Это лучший источник информации при отладке, т. к. он содержит полную информацию об ошибке.
  • message содержит сообщение об ошибке созданное прокси процессом. Сообщение об ошибке в message не обязательно совпадает с содержанием свойства data. Например, если ASP страница содержит ошибку, детальная информация об ошибке содержится в data, а message только содержит сообщение о том, что при выполнение произошла ошибка.
    Следующий пример демонстрирует работу error callback функции в клиентском скрипте.


    Общая схема настройки сервера новостей

  • Выделить место на диске для хранения дерева статей Usenet (в INN /var/news/spool).

  • Инсталлировать один из пакетов программ телеконференций (например, INN).

  • Найти поставщика новостей и выяснить имя сервера поставщика.

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

  • Внести всю необходимую информацию в конфигурационные файлы.

  • Запустить демон новостей и ждать, когда структура новостей начнет заполняться статьями.

  • Это еще не все. Структуру надо иногда очищать. Для этого из демона cron необходимо запускать сценарии сопровождения и очистки новостей.


  • Основной подтип 'Application/Octet-Stream'

    Используется для обозначения того, что тело содержит бинарные данные. Набор возможных параметров включает следующие (но не ограничивается ими):
    TYPE -- обобщенный тип или категория двоичных данных, эта информация больше предназначена для получателя, чем для автоматической обработки.
    PADDING -- число заполняющих битов, добавленных к битовому потоку, содержащему данные, для формирования байтно-ориентированных данных. Полезно при заключении в тело битового потока, когда общее число битов не кратно восьми, то есть, размеру байта.
    Дополнительный параметр, "conversions", определенный в [RFC-1341], был исключен в последствии.
    В RFC 1341 также определен параметр "NAME", указывающего имя файла, которое должно быть использовано при сохранении данных на диск. Но он опять же был отменен в ожидании введения отдельного поля заголовка Content-Disposition, которое будет определено в ближайшем будущем.
    Рекомендуемое действие для почтовой программы, получившей почту типа application/octet-stream, - просто предложить записать данные в файл без какого-либо преобразования, или. возможно, произвести его в соответствии с указанием пользователя.
    Для уменьшения опасности передачи вирусных и других намеренно разрушающих систему программ по почте, строго рекомендуется, чтобы почтовая программа получателя не производила запуск программы, заданной в параметре поля "Content-Type" (например, в параметре "interpreter="), использующей в качестве входных данных тело письма.

    Основной подтип 'message/rfc822'

    Этот подтип указывает, что тело письма содержит вложенное письмо в стандарте RFC 822, однако, в отличие от заголовка RFC 822 верхнего уровня, для каждой части, являющейся письмом RFC 822, не требуется наличия полей "From", "Subject" и, по крайней мере, одного поля "To".
    Не смотря на использование числа "822", тело, имеющее подтип 'message/rfc822', может включать дополнительную информацию в соответствии со стандартом MIME. Другими словами, письмо 'message/rfc822' может быть MIME-письмом.

    Основной подтип "multipart/mixed"

    Это основной подтип для типа 'multipart', он предназначен для случая, когда части письма взаимонезависимы. Любые новые подтипы, неизвестные почтовой программе, должны быть истолкованы аналогично подтипу 'mixed'.

    Pagers

    Идентефикатором пейджера является его НОМЕР.
    РадиоПейдж
    rpg@demos.su, Subject: НОМЕР.
    VessoLink
    pager@vessolink.su, v1#НОМЕР в первой строке письма.
    Национальная Пейджинговая Система "Континенталь"
    pНОМЕР@conpage.msk.ru.
    АльфаКом
    pager@cea.su, Subject: НОМЕР.a.

    Пакет NCSA Telnet. Глава 1 Запуск и завершение NCSA Telnet




  • 1.1 Обзор
    Данная глава содержит введение и описание основных действий при использовании NCSA Telnet на IBM PC:

  • запуск программы
  • установка типа терминала
  • открытие и закрытие telnet-соединения
    Эта глава написана в предположении, что Ваш сетевой администратор установил NCSA Telnet на Вашей системе, назначил IP адрес Вашей IBM PC, назначил Вам регистрационное имя и пароль в том компьютере, с которым Вы хотите связаться.
    Если Вам нужна дополнительная информация, касающаяся IBM интерфейса или структуры командной строки, обратитесь к описанию для пользователя IBM PC.
    1.2 Запуск программы
    Чтобы из командной строки запустить NCSA Telnet, введите C:\>telnet имя_компьютера
    Эта команда инициирует соединение с другим компьютером, чье имя дано в качестве параметра "имя_компьютера". Обычно этот компьютер (хост) сразу запрашивает у Вас регистрационное имя и пароль для создания новой сессии.
    NCSA Telnet эмулирует терминал VT100. Когда Вы связываетесь с хостом, операционная система последнего не знает, какой тип терминала Вы используете. Посмотрите в описании операционной системы, как выставить тип терминала в VT100 или VT102. Для систем, которые не поддерживают VT102 (это некоторые UNIX системы), используйте тип VT100, который совместим с эмуляцией VT102. Приведенные здесь примеры показывают, как выставить тип терминала для двух популярных операционных систем: UNIX (с помощью C оболочки) и VAX/VMS.

    newton% set term=vt100;tset для UNIX хостов
    B$ SET TERM/INQ для VAX/VMS хостов

    1.3 Использование экрана подсказки
    Чтобы получить список команд, нажмите ATL-H. При этом на экране появится список командных ключей, показанный на рисунке 1.1. Эту подсказку можно использовать для получения оперативной консультации по командным ключам.
    Рисунок 1.1 NSCA Telnet подсказка
    Keyboard usage for NCSA telnet:

    Alt-A add a session Alt-Y Interrupt Process
    Alt-N next session Alt-B Previous Session
    Alt-D Dump Screen to Capture file Alt-O Abort Output
    Alt-Z message screen Alt-Q Are you there?
    Alt-E escape to DOS shell Alt-U Erase line
    Alt-G graphic menu Alt-K Erase Character
    Alt-C toggle capture on/off Alt-V Paste Capture to Session
    Alt-R reset VT100 screen HOME exit graphic mode
    Alt-H the help screen Ctrl-HOME clear/enter graphic mode
    <
    ScrLock pause/restart screen (DO NOT use Ctrl-NumLock)
    ScrLock enter/exit scrool-back mode
    Alt-F start file transfer as if typed: ftp [internet address]
    Alt-I send my internet address to host as if typed
    Alt-S skip scrolling, jump ahead
    Alt-P change a parameter, one of: color, capture file name, backspace, session name, screen mode
    Alt-X close connection
    CTRL-Shift-F3 abort programm completely.
    STRONGLY discouraged
    Press ESC for information page, space bar to return to session:

    Замечание: информацию о других утилитах сети, таких как finger, ftp, lpq, lpr, lprm, rexec и установка часов.

    1.4 Завершение NCSA Telnet

    Чтобы закончить работу с NCSA Telnet, закройте сеанс связи с другой машиной с помощью соответствующей процедуры выхода. Если Вы имели сразу несколько сессий с одной или несколькими машинами, Вы должны завершить работу на каждой из этих машин. Когда NCSA Telnet завершит работу, появится приглашение DOS.

    Если на одном из хостов произошел сбой, либо сессию невозможно завершить, нажмите ALT-X. NCSA Telnet сперва попросит Вас подтвердить эту команду, а затем попытается закрыть эту сессию, оставляя остальные сессии нетронутыми.

    Если произошел полный сбой и оказалось, что все соединения блокированы, для остановки программы нажмите CTRL-Shift-F3. Используйте CTRL-Shift-F3 только как последнее средство.

    Если Вы нажмете CTRL-C или CTRL-BREAK, то на хост будет послан сигнал CTRL-C. Вы не можете использовать эти команды ни для прерывания работы NCSA Telnet, ни для закрытия Вашей сессии.

    []

    []

    Пакет NCSA Telnet. Глава 2 Введение в механизм управления сессиями

    2.1 Обзор
    Данная глава содержит вводные замечания по манипулированию множественными соединениями с одним или несколькими хостами в пакете NCSA Telnet. Эта глава описывает стандартную эмуляцию ключей VT100, ключи для наиболее общих операций редактирования, и операции над файлом перехватов.
    2.2 Использование клавиатуры
    При запуске NCSA Telnet Ваш персональный компьютер представляется хосту в качестве VT100 терминала. Для тех клавиш, которые оказываются одинаковыми как для PC, так и для VT100, программа NCSA Telnet осуществляет перенос информации без каких-либо изменений. Однако некоторые клавиши PC не имеют аналогов на клавиатуре VT100, а потому обрабатываются иначе. Кроме того, многие клавиши VT100 приобретают специальное значение при переносе на хост. Чтобы обеспечить полный набор функций VT100, разработчики telnet заставили некоторые клавиши персонального компьютера эмулировать определенные
    клавиши на терминале VT100.
    Таблица 2.1 Список клавиш PC, используемых для эмуляции терминала VT100
    Для посылки VT100 кода нажмите соответствующие клавиши

    VT100: персональный компьютер:
    RETURN ENTER
    DELETE* BACKSPACE*
    BACKSPACE* CTRL-BACKSPACE*
    LINE FEED CTRL-ENTER
    Keypad ENTER Keypad ENTER (отличается от RETURN)
    Keypad . (десятичная точка) Keypad .
    Keypad - (дефис) Keypad -
    Keypad , (запятая) Keypad +
    Keypad 0 - 9 Keypad 0 - 9
    Up, Down, Right, Left CTRL-Keypad Up, Down, Right, Left
    PF1 - PF4 F1 - F4

    Замечание: "Keypad" ссылается на номера и символы в правой части Вашей клавиатуры.
    Для расширенной клавиатуры дополнительно задаются соответствия: Up, Down, Right, Left Grey Up, Down, Right, Left
    2.3 Множественные сессии
    Когда Вы только запускаете NCSA Telnet, Вы можете одной командой открыть сразу несколько сессий:

    C:\>telnet имя_машины [имя_машины ...]

    где "имя_машины" - это имя того компьютера, с которым Вы хотите связаться. Например, если Вы хотите установить telnet-связь с компьютером yoyodyne, Вы должны указать это имя: "telnet yoyodyne".

    Чтобы начать сразу несколько сессий, введите в этой же строке имена других машин. Если же вы не хотите сразу при запуске NCSA Telnet иметь несколько сессий, Вы можете добавить их позднее.

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

    Поскольку для эмуляции терминала VT100 требуется всего лишь 24 строки, то строка 25 на экране Вашего персонального компьютера используется для указания состояния соединений в Ваших сессиях. Для каждого хоста, с которым Вы установили соединение, выделенными символами записывается в нижнем левом углу экрана. Все, что не относится к имени, является собственно полем состояния и указывает на различные атрибуты сессии:

    серый Соединение установлено, состояние ожидания.
    маленький ящик Активное соединение, появляется всегда в левом нижнем углу.
    * Соединение незакончено, делается попытка связаться с хостом.
    / или \ Записан текст в невидимую в настоящий момент сессию.
    Если Вы находитесь в режиме обратной прокрутки экрана, либо открыли файл для его перехвата, то в нижнем правом углу экрана появляются соответствующие флаги. В правом нижнем углу также появляется состояние FTP, если Вы передаете по сети файлы. И наконец, в этом углу появляется значение времени, если Вы дали согласие на работу часов.

    2.5 Открытие дополнительных сессий

    Если Вы первоначально открыли сессию только на одном хосте, то Вы можете открыть сессию на этом же хосте, или на каком-либо другом, нажав клавиши ALT-A. В ответ на это NCSA Telnet запросит у Вас имя компьютера, с которым следует попытаться установить соединение.

    2.6 Указание хоста

    NCSA Telnet может общаться только с теми компьютерами, которые имеют IP адреса. Вы сами, либо программа NCSA Telnet можете определять IP адреса несколькими способами.

  • Использовать любое имя из файла конфигурации. (Ваш системный администратор может сообщить Вам имена для этого файла).

  • Ваш системный администратор может сконфигурировать NCSA Telnet так, чтобы для поиска имен Ваш персональный компьютер пользовался услугами nameserver-а сети.


    С помощью последнего могут быть определены IP адреса любых компьютеров в сети Internet.

  • Использовать полный IP номер искомой машины в десятичной записи через точку. Например, 192.17.22.20.

  • Если интересующий Вас хост находится в той же Ethernet сети, что и Ваш персональный компьютер, введите символ #, а затем укажите номер хоста в локальной сети. Номер хоста определяется классом адреса и маской подсети (которые для Вас должен определить системный администратор). Например, если Ваш компьютер имеет адрес 192.17.22.20, а Вы хотите получить доступ к хосту 192.17.22.30, то введите #30 .

    Пакет NCSA Telnet позволяет Вам также указать, с каким номером порта (на хосте) Вы желаете связаться. Для этого после того, как Вы указали номер хоста (IP номер), введите символ #, а затем номер интересующего Вас порта. Например, если Вы введете 141.142.221.17#2000, то эта команда свяжет Вас с машиной 141.142.221.17, а на ней - с портом 2000.

    2.7 Примерное время ответа хоста

    Пакет NCSA Telnet пытается установить соединение с указанным хостом. Обычно это соединение устанавливается мгновенно и хост немедленно запрашивает у Вас регистрационное имя. Однако в некоторых случаях попытка установить соединение может длиться несколько секунд. Для перегруженных хостов даже после того, как NCSA Telnet установит соединение, может потребоваться еще время (до двух минут), прежде чем Вам придет запрос на ввод регистрационного имени.

    После того, как соединение установлено, символ звездочки (*) в командной строке исчезнет, либо сменится на символ маленького ящичка. Если NCSA Telnet установил соединение, но другой хост так и не предложил Вам зарегистрироваться, Вы может закрыть это соединение, нажав ALT-X.

    2.8 Использование режима обратной прокрутки

    Клавиша SCROLL LOCK в программе NCSA Telnet выполняет две функции. Она блокирует прокрутку экрана при получении нового текста, а также включает режим обратной прокрутки. В режиме обратной прокрутки клавиши "вверх" и "вниз", а также PgUp и PgDn перемещают текст


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

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

    Замечание. Пока Вы работаете в режиме обратной прокрутки, никакие другие команды работать не будут.

    2.9 Использование функций вырезания и вставки

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

  • Установите режим обратной прокрутки, нажав клавишу Scrl_Lock или правую клавишу мыши.

  • Переведите курсор на начало текста, который Вы желаете скопировать; нажмите клавишу пробела.

  • Переведите курсор на конец текста; нажмите клавишу пробела снова. Эти две операции осуществляют выделение текста для копирования.

  • Все еще находясь в режиме обратной прокрутки нажмите ALT-C. При этом выделенный текст будет скопирован в буфер. Выйдите из режима обратной прокрутки, нажав Scrl-Lock повторно. В случае необходимости перейдите на другую сессию, нажав ALT-N или ALT-B.

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

    Вы можете использовать функции вырезания и вставки, не прикасаясь к клавиатуре, если у Вас есть мышь, совместимая со стандартом Microsoft, а также ее драйвер.

  • Нажмите правую клавишу мыши для перехода в режим обратной прокрутки. Перейдите в начало текста, который Вы желаете скопировать, нажмите левую клавишу мыши. Переместите курсор на конец этого текста, нажмите клавишу мыши повторно.


  • Нажмите и не отпускайте левую клавишу мыши, нажмите правую клавишу мыши, затем освободите обе клавиши. При этом текст будет скопирован в буфер.

  • Выйдите из режима обратной прокрутки экрана, нажав правую клавишу мыши.

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

    2.10 Переключение между сессиями (ALT-N)

    Строка состояния в нижней части экрана показывает активные telnet сессии. Для того, чтобы перейти на следующую сессию, нажмите ALT-N (переход на следующую сессию). Эта команда делает следующую сессии активной и помещает ее имя в нижнюю левую часть экрана. Именно в эту новую сессию будут теперь посылаться все символы, набираемые Вами на клавиатуре.

    Чтобы вернуться к предыдущей сессии, нажмите ALT-B (переход на предыдущую сессию).

    2.11 Просмотр сообщений консоли (ALT-Z)

    При обслуживании соединения и обмене информацией с другими компьютерами по протоколу TCP/IP программа NCSA Telnet выдает на экран консоли определенную информацию (сообщения). Чтобы увидеть этот экран, нажмите ALT-Z. При этом Ваша текущая сессия останется активной, но Вы не будете ее видеть. Посмотрев сообщения, Вы можете вернуться в этой сессии, нажав любую клавишу. Сообщения на экране консоли могут говорить Вам об ошибках, предупреждениях, попытках установить FTP-соединение с Вашим компьютером, состоянии сети.

    2.12 Закрытие текущего соединения (ALT-X)

    Чтобы закрыть текущее соединение, нажмите ALT-X. При этом на экране возникнет запрос на подтверждение этой операции. После получения подтверждения соединение ликвидируется. Полное закрытие соединения может длиться несколько секунд.

    Замечание. Вы можете нажать ALT-X для того, чтобы прекратить работу с хостом, и закрыть данную сессию. Однако данная команда игнорирует требования по работе с сетью, что может вызвать проблемы в работе покидаемого Вами хоста. Правильно было бы закрывать соединение с хостом посредством обычной процедуры выхода (команда exit для Unix систем).


    2.13 Функции файла перехватов

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

    2.14 Указание файла перехватов

    С помощью меню Parameter Вы можете указать иной файл для перехватов. Это меню появляется по нажатию ALT-P (Большинство опций меню Parameter описываются в главе 3 "Дополнение к управлению сессиями"). Используя клавиши курсора выберите в меню запись для файла перехватов. Нажмите Enter, чтобы очистить это поле, и введите новое имя для этого файла. После того, как Вы сменили имя для файла перехватов, все последующие команды ALT-C будут использовать уже этот новый файл. Вы также можете "навсегда" сменить имя файла перехватов, указав его в файле конфигурации.

    2.15 Использование PRN

    Если Вы хотите послать весь перехваченный текст на свой принтер, то Вам нужно проделать приведенные выше операции и изменить имя для файла перехватов. Однако при этом в качестве такого имени укажите prn. В программе NCSA Telnet это имя по умолчанию означает вывод текста на печать. Операционная система PC-DOS резервирует это имя для принтера.

    Часто случается, что вывод перехваченного текста на принтер приводит к сбою программы NCSA Telnet. Если перехват начался, а принтер выключен или в нем отсутствует бумага, то на экране появится сообщение

    Error, A(bort) R(etry) or I(gnore)?

    При этом Вам следует выключить и включить принтер, нажать клавишу R. Не следует нажимать клавишу A, поскольку при этом произойдет сбой программы NCSA Telnet, а все Ваши сетевые соединения будут разорваны.

    2.16 Использование за раз лишь одного перехвата

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

    Если Вы нажмете ALT-D, программа NCSA Telnet перенесет в файл перехвата все содержимое экрана текущей сессии. Если же файл перехвата уже задействован, ничего не произойдет.

    Замечание. Если Вы нажали ALT-D, NCSA Telnet перепишет в файл перехвата лишь содержимое экрана текущей сессии. Однако если Вы нажали ALT-C, NCSA Telnet перепишет в файл перехвата все содержимое текущей сессии, даже если оно займет несколько экранов.

    []

    []

    []

    Пакет NCSA Telnet. Глава 3 Дополнение к управлению сессиями


    /////

    3.1 Обзор
    Данная глава продолжает обсуждение множественных сессий и содержит описание дополнительных возможностей пакета NCSA Telnet. Данная глава объясняет как перезагружать VT100 экран, как прерывать работу NCSA Telnet, как воспользоваться возможностями оболочки DOS и опциями меню Parameters.
    3.2 Команды клавиатуры
    Команда пропуска (ALT-S)
    Команда пропуска заставляет экран компьютера пропускать текст, идущий сплошным потоком. Хотя этот текст и будет помещаться в буфер перехвата, на экране появится лишь последняя часть текста, извлеченная из буфера принимаемой информации (вместо того, чтобы аккуратно печатать на экране каждую принимаемую по сети строку).
    Эту возможность хорошо применять для тех команд, которые имеют своим результатом бесконечный поток текста. Чтобы воспользоваться этой командой, нажмите ALT-S. При этом после некоторой паузы на экран будет выведена последняя часть текста из буфера. Хотя команда ALT-S не решает проблем с буферизацией сети в интерактивном режиме, она все же может быть полезна. Команда пропуска не оказывает влияния на команды перехвата текста на диск и об ратной прокрутки.
    Команда перезагрузки экрана VT100 (ALT-R)
    Команда ALT-R стирает и переустанавливает все режимы, относящиеся к текущему виртуальному экрану VT100. Некоторые программы на хосте могут случайно установить графический режим работы или оказаться не в состоянии вернуться из графического режима.
    После нажатия ALT-R программа NCSA Telnet отменит все установки: отменит режим упаковки, переустановит графический режим, установит режим клавиатуры по умолчанию, установит табуляторы на каждую восьмую позицию. После команды ALT-R Вы можете повторно установить тип Вашего терминала и позволить хосту устанавливать
    те параметры VT100, в которых он нуждается.
    Прерывание программы (CTRL-SHIFT-F3)
    Если в силу некоторых причин ни одно из текущих соединений не действует, не включен SCROLL LOCK, а ALT-R и ALT-X не имеют никакого эффекта, то остается только общая команда выхода CTRL-SHIFT-F3, по которой завершается выполнение программы NCSA Telnet и управление передается DOS.
    Если Вы прервали работу про граммы NCSA Telnet посредством команды CTRL-SHIFT-F3, то NCSA Telnet не имеет возможности оповестить хост (хосты) о завершении вашей сессии (сессий). При этом Ваши сессии фактически остаются в неопределенном состоянии. Эта ситуация может иметь следствием разнообразные проблемы на хосте, поскольку он не может тут же определить, что данная сессия закрыта. Например, хост

    может продолжать выполнение определенных программ даже если Вы и прекратили работу программы NCSA Telnet с помощью команды CTRL-SHIFT-F3.

    Выход в командную оболочку DOS (ALT-E)

    Если Вы нажмете ALT-E и выйдете в командную оболочку DOS, то пока Вы с ней будете работать, Ваши сессии будут сохранены. Вы можете использовать команды и программы DOS, такие как просмотр каталогов, редактирование исходных файлов или даже компиляцию программ. Чтобы вернуться обратно в программу NCSA Telnet, Вы должны ввести команду exit в ответ на приглашение DOS.

    Во время выхода в командную оболочку DOS NCSA Telnet каждые полсекунды контролирует приход пакетов по сети Ethernet. Если Вы запускаете другие программы, которые оказывают влияние на используемые NCSA Telnet карту Ethernet или таймер, то могут быть потеряны Ваши соединения или, что еще хуже, Ваш компьютер может дать сбой. Ниже в качестве примера приведен список программ, которые блокируют работу с сетью программы NCSA Telnet, приводя к потере соединений или сбою DOS:

  • SideKick (отключает все процессы таймера, приводя тем самым к потере соединений)

  • Все сетевые программы (они переустанавливают карту Ethernet)

  • NCSA Telnet (это сетевая программа)

  • FTP пользователя (это тоже сетевая программа)

  • format, команда DOS форматирования гибких дисков

  • FileCommand II

    Замечание. Следите за использованием памяти, чтобы не допустить сбоя программы. Помните также о выходе из DOS по завершении работы.

    3.3 Меню параметров

    Для просмотра опций меню Parameters нажмите ALT-P. После этого на экране появится заставка, показанная на рисунке 3.1. Эти опции управляют выбором цвета, эхо-режимом, клавишей стирания символов, именем сессии, типом терминала, именем файла перехватов, режимом экрана и режимом пересылки файлов.


    Вы можете установить в указанных полях различные значения.

    Рисунок 3.1 меню Parameter

    ALT-P Parameter menu

    < Select parameters, F1 to accept, F10 to leave unchanged >

    --------------- Color setup and session parameters -----------------

    Text: normal reverse underline

    Normal Foreground (nfcolor) - green

    Normal Background (nbcolor) - black

    Reverse Foreground (rfcolor) - black

    Reverse Background (rbcolor) - white

    Underline Foreground (ufcolor) - blue

    Underline Background (ubcolor) - black

    Use remote echo or local echo - Remote echo

    Backspace key sends - Delete

    Session name *> ahostname

    Terminal type - VT102 and Tek4014

    Line Wrapping - Wrapping On

    Output Mapping - Mapping Off

    -------------- Parameters which apply to all sessions --------------

    Capture file name *> capfile

    Screen mode (for BIOS compatibility) Direct to screen

    File transfer is - Enabled

    Remote Copying is - Enabled

    Clock is Enabled

    Use arrow keys to select, Enter clears changeable field (*>)

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

    Влево или Вправо до тех пор, пока не появится необходимое значение.

    Изменив все необходимые опции, нажмите клавишу F1, чтобы вернуться в Вашу сессию, сохранив все произведенные изменения. Если Вы сделали ошибку, или решили, что сделанные изменения не нужны, то нажмите ESC, чтобы вернуться в Вашу сессию, не внося в нее никаких изменений.

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


    Пока Вы не нажали F1, прежнее значение этого поля еще остается в памяти компьютера и Вы можете вернуть его, воспользовавшись клавишами Влево или Вправо.

    Далее приводится описание параметров, которые Вы можете установить.

    3.4 Цвет текста на экране

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

    Обычно NCSA Telnet предлагает Вам выбрать основной и фоновый цвет для обычных, инвертированных и подчеркнутых символов, т.е. всего предлагается выбрать шесть параметров. Для цветного дисплея PC можно выбрать черный, синий, зеленый, голубой, красный, бирюзовый, желтый и белый цвет. Команда выбора основного цвета позволяет ввести повышенную яркость для этих цветов, тогда как команда указания фонового цвета позволяет устанавливать мерцание. Воспользуйтесь меню Parameters и выберите основной и фоновый цвета для обычных, инвертированных и подчеркнутых символов. Во время выбора цвета на четвертой строке экрана Вам будут предоставлены образцы, показывающие как будет выглядеть текст при эмуляции VT100.

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

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

    Изображение жирных и мерцающих символов на терминале VT100 и эмулирующем его персональном компьютере выглядит одинаково.

    3.5 Использование чужого или собственного
    подтверждения

    введенных символов


    Если время ответа в сети слишком большое (такое как при передаче через спутник), то Вы можете помещать введенный текст в буфер и передавать его на хост только при нажатии клавиши RETURN.


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

    В режиме местного подтверждения программа NCSA Telnet помещает в буфер большинство введенных с клавиатуры символов и ждет нажатия клавиши RETURN, по которой эти символы будут посланы на хост в едином пакете. Из этого правила есть некоторые исключения:

  • CTRL-U стирает содержимое этого буфера

  • По нажатии клавиши Backspace (CTRL-H) будет удален последний символ, добавленный к этому буферу.

  • Нажатие клавиши Tab (CTRL-I) приводит к немедленной посылке в сеть содержимого буфера (вместе с самим символом Tab).

  • Любой другой символ управления получает подтверждение с приставкой ^ (например, ^A) и заставляет программу NCSA Telnet посылать в сеть содержимое буфера вместе с введенным символом управления.

  • Клавиши курсора и все непечатаемые ASCII символы, например Escape, заставляют программу NCSA Telnet посылать в сеть содержимое буфера вместе с введенным символом.

  • Вы не имеете возможности послать на хост CTRL-U или Backspace в построчном режиме.

  • Режим построчного подтверждения не оказывает влияния на

    ALT-ключи и ключи других команд программы NCSA Telnet.

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

    3.6 Использование клавиши Backspace

    Во время нажатия на клавишу BACKSPACE программа NCSA Telnet преобразует ее код в код клавиши DELETE. Это необходимо для совместимости с теми системами, которые предпочитают работу с последней (DELETE). Если же Вы обнаруживаете, что клавиша BACKSPACE на Вашем компьютере не работает, то это означает, что хост, с которым Вы связались, все же предпочитает работу с клавишей BACKSPACE и предыдущую перекодировку нужно отменить.


    Чтобы сделать это, воспользуйтесь меню Parameters и измените установку по умолчанию так, чтобы клавиша BACKSPACE действовала именно как BACKSPACE. Если в результате клавиша BACKSPACE начинает действовать, то хост действительно предпочитает работу с клавишей BACKSPACE. Если Вам слишком часто приходится переопределять клавишу BACKSPACE, то Вам или администратору Вашей сети следует переопределить коды клавиши BACKSPACE в файле конфигурации программы NCSA Telnet.

    3.7 Смена имени сессии

    В строке состояния в правом нижнем углу для каждой открытой сессии появляется 13-символьное имя. У успешных соединений в качестве имени по умолчанию выбирается имя компьютера, которое Вы набирали при инициализации. Однако меню Parameters дает Вам возможность изменить имя текущей сессии, показываемое в строке состояния. В меню перейдите на соответствующий пункт, нажмите клавишу RETURN (при этом текущее значение будет стерто) и введите новое имя. Используются только первые 13 введенных символов.

    3.8 Смена типа терминала

    В общем случае по умолчанию выбирается эмуляция терминала VT100, но можно выбрать и эмуляцию Tektronix 4014. Но существуют ситуации, когда Вам следует наложить некоторые ограничения на работу терминала, а следовательно ограничить некоторые возможности эмуляции. При этом Вам предоставляется выбор среди трех возможностей:

  • VT100 терминал с графикой Tektronix 4014

  • Игнорирование графических команд и работа только с командами VT100.

  • Работа в качестве "тупого" терминала с игнорированием кодов VT100 и Tektronix 4014

    3.9 Перенос строки

    Если Вы разрешили автоматический перенос строки (line wrapping), то по достижении крайней правой позиции далее вывод текста автоматически будет продолжен на следующей строке. В противном случае символы будут сваливаться в кучу до тех пор, пока не будет получен

    символ конца строки.

    3.10 Выбор кодировки для вывода текста на экран дисплея

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


    Эта операция подобна перекодировке клавиатуры, но противоположна ей по результатам.

    3.11 Смена имени файла для перехватов

    Вы имеете возможность сменить имя файла, применяемого для перехватов, воспользовавшись меню Parameters. Перейдите в этом меню на соответствующий пункт, нажмите клавишу RETURN (чтобы стереть текущее имя) и введите новое имя файла. После того, как Вы изменили имя файла перехватов, все команды ALT-C будут использовать этот новый файл. Вы можете также изменить имя файла перехватов "навсегда", указав его в файле конфигурации. См. также главу 2 "Введение в механизм управления сессиями", где описывается работа с файлом пере

    хватов.

    3.12 Режим работы экрана

    (Совместимость BIOS с оконными пакетами)

    В обычном быстром режиме скоростной вывод текста осуществляется посредством прямой его записи в буфер экрана. Однако, этот режим оказывается несовместим в такими оконными пакетами как Topview или Microsoft Windows и может вызвать появление дефектов на некоторых изображениях. Чтобы избежать таких мелких неприятностей, разработчики создали в программе NCSA Telnet режим адаптации, когда для доступа к экрану используется BIOS компьютера.

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

    3.13 Режим переноса файла

    В пакете NCSA Telnet режим переноса файлов указывается для двух операций: FTP (File Transfer Protocol) и rcp. С помощью меню Parameters Вы можете разрешать или запрещать перенос (Enabled или Disabled). Если Вы выбрали в этом меню режим Disabled, то нельзя использовать ни функцию FTP ни функцию rcp. Если же Вы выбрали Enabled, то FTP и rcp разблокируются.дополнительную информацию о методах переноса файлов в программе NCSA Telnet. Вы или Ваш сетевой администратор можете установить в конфигурационном файле режим пересылки, устанавливаемый по умолчанию.

    3.14 Использование часов

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

    []

    []

    []

    Пакет NCSA Telnet. Глава 4 Утилиты


    /////
    /////
    /////

    4.1 Обзор
    Данная глава в деталях описывает некоторые полезные программы из пакета NCSA Telnet. Почти вся информация по каждой из команд взята из исходной версии, написанной в Sun Microsystems Inc.
    4.2 finger
    Название

    Команда finger предоставляет Вам справочную информацию о пользователях системы.
    Синтаксис

    finger [опции] [имя]@имя_хоста
    Описание

    По умолчанию команда finger просматривает информацию о зарегистрировавшихся пользователях, включая регистрационное имя, полное имя, название терминала (после *, если терминал блокирован по записи), время регистрации, присвоенный идентификатор, местоположение (поле комментария в таблице /etc/tty для местных пользователей, имя хоста для пользователей с других мест), если, конечно, вся эта информация доступна.
    Если время после регистрации исчисляется минутами, то оно записывается в виде целого числа. Если на экран выводятся часы и минуты, то между ними ставится двоеточие ':'. Если присутствует символ 'd', то записываются уже часы и минуты, а между ними тоже ставится ':'.
    Если команде finger дан один или несколько аргументов name, то предоставляется более полная информация о каждом указанном имени вне зависимости от того, зарегистрирован в данный момент этот пользователь или нет. Может быть указано имя, фамилия или регистрационное имя. Информация предоставляется в нескольких строках, и содержит более расширенную, чем ранее информацию:

  • исходный каталог пользователя и командная оболочка, запускаемая после регистрации
  • время регистрации, если пользователь зарегистрирован. В противном случае указывается время последней регистрации.
  • терминал или хост, где последний раз регистрировался данный человек
  • поле комментария из таблицы /etc/tty для этого терминала
  • время получения последней почты
  • время последнего чтения почты
  • какой-либо план, содержащийся в файле .plan в основном каталоге этого пользователя
  • какой-либо проект, над которым данный человек работает и который описан в файле .project (в том же каталоге).

    Если имя, являющееся аргументом команды, содержит символ '@', то делается попытка связаться с машиной, чье имя указано после этого символа. Затем вызывается на этой машине демон finger.

    Данные, получаемые от этого демона, печатаются на экране. Если требуется получение расширенного формата, то чужому демону finger посылается опция /W.

    Опции
    -l использовать расширенный формат отчета
    -w использовать расширенный формат отчета
    -t изменить контрольное время ожидания ответа от запрошенного

    компьютера, по умолчанию оно составляет 300 единиц
    -h сменить имя файла конфигурации (по умолчанию это файл

    config.tel)
    4.3 ftp

    Название

    Программа пересылки файлов по сети

    Синтаксис

    ftp [-dfghimnprsv?] [имя_хоста]

    Описание

    Программа ftp предназначена для того, чтобы предоставить пользователю доступ к протоколу переноса файлов (FTP) в стандарте ARPANET. Программа ftp извлекает файлы из сети Internet или помещает их туда.

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

    Опции

    Вы можете указать эти опции в командной строке или при работе с командным интерпретатором.
    -d [level]

    Запуск режима отладки
    -f <имя_файла>

    Запуск программы без взаимодействия с пользователем. Программа ftp выполняет команды, перечисленные в указанном файле.
    -g

    Блокировать автоматическое расширение имени файла
    -h <имя_файла>

    Указывает файл конфигурации (обычно config.tel)
    -i

    Блокировать появление приглашений, даваемых пользователю при

    групповых переносах файлов
    -m

    Использовать встроенную программу more
    -n

    Не пытаться автоматически зарегистрироваться при установлении первоначального соединения. Если этой опции нет, то программа ftp даст приглашение на ввод регистрационного имени, необходимого для доступа, а также, если это необходимо, запросит па роль.
    -p <имя_файла>

    Указывает имя файла с командами, которые будут автоматически

    выполнены после регистрации.
    -r

    Отключить переадресацию вывода
    -s

    Отключить переключение слеша (/\)
    -v

    Показывать все сообщения от другого сервера, а также сообщения

    по статистике переноса файлов. Этот режим включается автоматически, если программа ftp запускается в интерактивном режиме,

    а ввод осуществляется с терминала пользователя.
    <


    Команды

    ![команда]

    Выполнить указанную команду на Вашем компьютере под управлением command.com. Если команда не указана, то выйти в интерактивный режим работы с этой командной оболочкой.

    account [пароль]

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

    ascii

    Установить тип ASCII для передачи данных по сети. Этот тип используется по умолчанию.

    bell

    Давать звонок всякий раз по завершении переноса данных.

    bget

    Получить файл в бинарном режиме. Аналогична функции get.

    binary

    Установить тип передачи данных, характерный для графических отпечатков (бинарный режим).

    bput

    Отправить файл в бинарном режиме. Аналогична функции put.

    bye

    Закрыть сеанс FTP связи с другим сервером и закончить выполнение ftp программы.

    cd чужой_каталог

    Сменить на чужой машине рабочий каталог на указанный.

    close

    Завершить сеанс связи FTP с другим сервером и вернуться к командному интерпретатору. Стираются любые заданные макросы.

    delete чужой_файл

    Стереть указанный файл на другой машине

    debug [режим_отладки]

    Включить режим отладки. Если указано необязательное значение

    "режим_отладки", то оно используется для установки уровня отладки. Когда режим отладки включен, программа ftp печатает каждую команду, посланную на другую машину, ставя перед ней символы "->".

    dir [чужой_каталог][свой_файл]

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

    get чужой_файл [свой_файл]

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


    При переносе файла используется текущие тип представления, файловая структура и режим передачи.

    glob

    Включает расширение имени файла, или "глобализацию" (glob-

    bing), для команд mdelete, mget и mput. Если глобализация отключена, то имена файлов берутся как были набраны, без каких-либо изменений.

    Глобализация имен файлов для команды mput осуществляется по стандартным правилам расширения для символов * и &. Для команд mdelete и mget каждое указанное имя расшифровывается отдельно и получающиеся при этом списки уже не объединяются в один общий отсортированный список.

    Расширение имени каталога радикально отличается от расширения имени обычного файла: конкретный результат зависит от операционной системы на чужой машине, от FTP сервера, но может быть предварительно проверен командой mls чужие_файлы -

    Команды mget и mput не осуществляют непосредственного переноса целых ветвей файловой структуры, как в новейших версиях Norton Commander. Но Вы можете сделать это, передав по сети архив конкретной ветви (и установив для этого режим передачи отпечатков с помощью команды binary).

    hash

    Включает режим печати символов (#) при передаче каждого блока

    данных. Размер блока данных составляет 1024 байт.

    help [команда]

    Печатает информацию об указанной команде. Если help дана без

    аргументов, то программа ftp печатает на экране список известных ей команд.

    interactive

    Включить режим выдачи сообщений во время работы множественных

    команд (таких как mget, mput).

    lcd [каталог]

    Сменить рабочий каталог на Вашем персональном компьютере.

    Если каталог не указан, то перейти в основной каталог.

    lls [каталог]

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

    ls [чужой_каталог][свой_файл]

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


    mdelete [чужие_файлы]

    Ищет на чужой машине файлы, соответствующие записи "чужие_

    файлы" и стирает их. См. в glob команде детали подбора имен

    файлов.

    mdir чужие_файлы свой_файл

    Эта команда подобна команде dir, за исключением того, что может быть указано несколько чужих файлов. Если включен режим интерактивных приглашений, то программа ftp будет просить пользователя проверить, действительно ли последний указанный файл является файлом на Вашем персональном компьютере, куда следует поместить информацию, получаемую от mdir.

    mget чужие_файлы

    Эта команда расшифровывает на чужой машине запись "чужие_файлы", и с каждым таким найденным именем файла запускает команду get. Детали по расширению имени файла смотрите в команде glob.

    Эти файлы переносятся в рабочий каталог Вашего персонального

    компьютера, который в свою очередь можно сменить командой 'lcd

    каталог'. Можно создать и новый каталог под эти файлы командой

    '!mkdir каталог'.

    mkdir имя_каталога

    Создать каталог на чужой машине

    mls чужие_файлы свой_файл

    Эта команда подобна команде ls, за исключением того, что ей

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

    файлов файлом на Вашем персональном компьютере, предназначенным для записи получаемой от mls информации.

    mode [имя_режима]

    Установить режим переноса в указанное положение. Единственно

    возможным режимом для NCSA Telnet является stream и он выставляется по умолчанию.

    more

    Включает режим more. Если этот режим включен, то вывод содержимого больших каталогов разбивается на отдельные страницы, а

    между ними делается пауза и пользователю дается сообщение.

    mput файлы

    Эта команда расшифровывает запись "файлы" на Вашей машине, и с каждым найденным именем файла запускает команду put. Детали по расшифровке имен файлов смотрите в команде glob. Эти файлы переносятся в рабочий каталог чужого компьютера.


    noninteractive

    Отключить режим выдачи сообщений по время работы множественных команд (таких как mget, mput).

    open хост [порт]

    Установить соединение с указанным FTP сервером. Может быть заказано использование порта по умолчанию. В этом случае программа ftp будет пытаться с FTP сервером по этому порту. Если опция авторегистрации включена (по умолчанию), то ftp будет пытаться автоматически зарегистрировать пользователя на этом FTP сервере (см. ниже).

    prompt

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

    По умолчанию режим включен. Если он отключен, то любая команда mget или mput будет передавать все файлы не консультируясь с пользователем, а команда mdelete - стирать все указанные ей файлы.

    put свой_файл [чужой_файл]

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

    pwd

    Печатает имя текущего рабочего каталога на чужой машине.

    quit

    Эта команда выполняет ту же функцию, что и bye.

    quote arg1 arg2 ...

    Эта команда дословно передает указанные аргументы на FTP сервер. Предполагается, что после этого должен быть получен лишь код ответа.

    recv чужой_файл [свой_файл]

    Осуществляет ту же функцию, что и get

    remotehelp [имя_команды]

    Запрашивает консультацию у чужого FTP сервера. Если указано

    имя команды, то оно тоже передается серверу.

    rename старое_имя новое_имя

    Переименовать указанный файл на чужой машине

    rm чужой_файл

    Аналогична команде delete

    rmdir имя_каталога

    Стереть каталог на чужой машине

    send свой_файл [чужой_файл]

    Эта команда осуществляет ту же функцию, что и команда put.

    sendport

    Включает режим использования команд PORT. По умолчанию про грамма ftp пытается использовать команду PORT при установлении соединения во время каждой пересылки данных по сети.


    Использование команд PORT может предотвратить задержки при пересылке множественных файлов. Если команда PORT дала сбой, то программа ftp использует порт данных по умолчанию. Если применение команд PORT не разрешено, то попытки их использовать при переносе данных предприниматься не будут. Этот режим бывает полезен в случае связи с определенными реализациями протокола FTP, которые игнорируют команды PORT, но сигнализируют

    об успешном приеме.

    slashflip

    Меняет режим смены слеша

    status

    Показать текущее состояние программы ftp

    struct [имя_структуры]

    Установить структуру файла соответственно указанному имени. Единственно правильным именем структуры является file, что соответствует установке по умолчанию.

    type [имя_типа]

    Устанавливает указанный тип представления. Допустимые типы ascii для текстов, binary или image для графических изображений. Если тип не указан, то на экране высвечивается текущий тип представления данных. По умолчанию при запуске NCSA Telnet выставляется тип ASCII.

    user имя_пользователя [пароль][доступ]

    Самоидентификация на чужом FTP сервере. Если пароль не указан, но сервер его запрашивает, то программа ftp даст запрос пользователю на его ввод (после блокировки локального подтверждения символов). Если поле доступа отсутствует, но FTP сервер его запрашивает, то пользователь получит соответствующий запрос на ввод. Если поле доступа указано, то команда доступа (account) будет использована по завершении регистрации, если сервер не потребует ее еще раньше. Если программа ftp не запущена с блокировкой автоматической регистрации, то этот процесс осуществляется автоматически во время первоначального соединения с FTP сервером.

    verbose

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


    ? [команда]

    Эта команда выполняет ту же функцию, что и help.

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

    Если какой-либо обязательный аргумент команды не указан, программа ftp запросит его значение.

    Прерывание процесса переноса файлов

    Чтобы прервать процесс переноса файла, используйте клавиши прерывания для терминала (обычно это CTRL-C). Процесс отправления файлов прекратится немедленно. Процесс получения файлов будет прерван посылкой на чужой сервер команды протокола ABOR и

    уничтожением всех получаемых в дальнейшем данных. Быстрота, с которой это осуществляется, зависит от того, поддерживает ли чужой сервер команду ABOR. Если он не поддерживает, то приглашения ftp> не появится до тех пор, пока чужой сервер не закончит посылку запрошенного файла.

    Клавиши прерывания с терминала будут игнорироваться, если программа ftp завершила всю обработку на Вашей машине и ждет ответа от чужого сервера. Длительная задержка в таком режиме может возникнуть из-за обработки описанной выше команды ABOR или из-за некорректной работы чужого сервера, включая нарушения ftp протокола. Если эта задержка возникла из-за некорректной работы чужого сервера, то выполнение программы ftp на Вашей машине следует прервать вручную.

    Имена файлов

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

  • Если разрешена операция расширения, то имена файлов на Вашей машине расширяются согласно обычным правилам для символов * и ? (см. команду glob). Если программа ftp ожидает получения одного файла (например, в команде put), то будет использован лишь первый файл, полученный в результате расширения.

  • Для команд mget и get, если не указаны имена файлов на Вашей машине, то новое имя файла будет совпадать с именем исходного файла, за исключением того, что составляющие его символы могут быть переведены из заглавных в прописные и т.д.

  • Для команд mput и put, если не указаны имена для файлов на

    чужой машины, то берутся имена исходных файлов.


    Параметры переноса файлов

    В спецификации программы ftp описывается множество параметров, которые оказывают влияние на процесс переноса файлов:

    Тип представления может быть ascii или image.

    Структура файла может быть file, record или page. Программа ftp поддерживает только тип по умолчанию - file.
    Режим пересылки файлов может быть stream, block или compressed.

    ftp поддерживает только значение по умолчанию - stream.

    4.4 setclock

    Название

    Программа setclock корректирует таймер Вашего персонального

    компьютера.

    setclock [-h имя_файла] имя_хоста



    Эта утилита, setclock, устанавливает часы на Вашем персональном

    компьютере в соответствии с сигналами точного времени, циркулирующими по сети Internet.


    -h имя_файла

    Дает местоположение и имя файла конфигурации. По умолчанию

    берется config.tel в текущем каталоге.
    имя_хоста Дает имя хоста, контролирующего сигналы точного времени в

    Вашей локальной сети.
    Команды lpq, llpr и lprm используются в пакете NCSA Telnet для управления сетевым принтером. Однако в настоящее время большинство организаций не могут позволить себе иметь принтеры для общего доступа через сеть.

    []

    []

    []

    Пакет NCSA Telnet. Глава 5 Передача файлов


    /////
    /////

    5.1 Обзор
    Данная глава описывает процедуры переноса файлов между Вашим персональным компьютером и каким-либо хостом в сети, включая две встроенные функции программы NCSA Telnet: FTP и rcp. Также предоставляется описание и справочная информация, касающиеся требований к имени файлов, спецификации пути и переноса файлов в фоновом режиме.
    5.2 Терминология
    В данной главе используются следующие понятия:

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

    Клиентом называется система, которая требует обслуживания, тогда как сервер - это система, сама предоставляющая "сервис" другим. Вопреки очевидному, клиентом будет не всегда Ваш
    персональный компьютер. Если Вы используете NCSA Telnet для связи с хостом, то Ваш компьютер является telnet клиентом. Если Вы запросили передачу файлов с Вашего персонального компьютера, то эта передача фактически инициируется на хосте, превращая его
    в FTP клиент, а Ваш компьютер - в FTP сервер. Таким образом, персональный компьютер становится telnet клиентом и FTP сервером одновременно.
    передача файла

    При передаче файла по сети переписывается его содержимое, и получающаяся копия помещается на диск другого компьютера.
    5.3 Указания по переносу файлов
    Спецификация полного пути: соглашения по ведущим слешам
    Если Вы не указали полного пути в FTP или rcp, то программа NCSA Telnet будет осуществлять пересылку файлов в каталоге, используемом по умолчанию. Если Вы хотите указать какой-либо иной каталог, наберите его полное имя согласно документации по DOS.
    Полное имя может содержать имя драйвера с двоеточием.
    Например,

    D:\myfiles\graphics\image.dat

    или

    D:/myfiles/graphics/image.dat

    Вместо обратных слешей (\) Вы можете использовать прямые (/), поскольку программа NCSA Telnet автоматически преобразует все прямые слеши в пути для UNIX в обратные слеши, чтобы обеспечить совместимость с PC-DOS. Поскольку обратные слеши в оболочке UNIX играют особую роль и для их ввода приходится пользоваться специальным форматом, то здесь удобнее будет использовать прямые слеши.

    Замечание. rcp является специальной функцией системы Berkeley UNIX.

    Одновременная активность

    Как для FTP, так и для rcp передача файлов может осуществляться одновременно с работой telnet-сессий. Поэтому во время переноса файла Вы можете пользоваться другими услугами программы NCSA Telnet, такими как работа с telnet-сессией, переход от сессии к сессии, создание новых сессий и смена их параметров. Однако когда осуществляется процесс передачи файлов, не следует заводить еще один такой же. В то время как один FTP запрос будет обрабатываться, другой FTP запрос будет игнорироваться. Более того, если Вы пытаетесь запустить процесс пересылки rcp в то время как другой такой же процесс уже исполняется, оба процесса могут дать сбой.

    Замечание. Не выходите из программы NCSA Telnet, пока осуществляется передача файлов, поскольку это может привести к сбоям на хосте.

    Правила, касающиеся имен файлов, посылаемых на персональный компьютер:

    Если Вы используете FTP или rcp для передачи файлов с Вашего персонального компьютера или на него, придерживайтесь следующих правил, касающихся имен файлов:

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

  • В имени файла, передаваемого с персонального компьютера, все символы преобразуются в строчные

  • Если в имени файла более восьми символов, оно урезается до нужного размера

  • Если в имени файла присутствует точка, то следующие за ней три символа рассматриваются как расширение, а все следующие за ними урезаются


  • Имя файла не должно содержать специальных символов. Если все же это произойдет, то файл может быть потерян или станет нечитаемым. Примеры таких специальных символов: *, $, #, -, а также управляющие символы.

    Сообщения о переносе файлов

    FTP сервер создает специальную информацию, чтобы позволить Вам отслеживать доступ к жесткому диску персонального компьютера. Вы можете увидеть ее, нажав клавиши ALT-Z (показать сообщения консоли), описанные в главе 2 "Введение в механизм управления сессиями". В нижеприведенном списке приводится информация, предоставляемая FTP сервером.

  • сообщения, создаваемые при инициализации соединения, указывающие IP адрес или имя чужой машины, инициирующей соединение

  • имя регистрирующегося пользователя, если Вы используете команду USER

  • имена файлов, передаваемых с или на диск персонального компьютера

  • сообщения о закрытии соединения

    5.4 Перенос файлов с помощью FTP

    FTP сервер в программе NCSA Telnet соответствует минимальным требованиям к стандартному FTP серверу, подобному 4.2 BSD UNIX. NCSA FTP имеет следующие свойства:

  • посылка потока данных в текстовом (ASCII) или бинарном формате (IMAGE)

  • смена, создание или удаление каталога

  • распечатка текущего каталога

  • просмотр файлов в текущем каталоге (с привлечением символов *, &)

  • посылка и получение нескольких файлов одной командой (с символами *, &)

  • удаление файла

    Инсталляция FTP

    Хост должен поддерживать FTP режим переноса файлов. Если Вы не знаете, может ли он это делать, свяжитесь с администратором системы.

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

    Использование FTP на главном компьютере

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


    Чтобы получить полную документацию по FTP и его командам, Вам придется обратиться к документации для этого компьютера. Работая с UNIX системами, Вы также можете обратиться к интерактивной справочной информации, воспользовавшись командой 'man ftp'.

    В большинстве систем команда FTP вводится в ответ на приглашение и с указанием имени или IP адреса интересующей машины. Например, если Ваш персональный компьютер называется mymachine и Ваш IP адрес 192.17.20.22, то Вы можете ввести

    % ftp mymachine

    или

    % ftp 192.17.20.22

    При этом Вы получите ответ, подобный следующему:

    Connected to 192.17.20.22.

    220 PC Resident FTP server, ready

    Name (192.17.20.22:timk):

    В настоящее время большинство FTP клиентов предлагает Вам ввести Ваше регистрационное имя и пароль. Это потребуется, если Ваша программа NCSA Telnet сконфигурирована для паролей. В противном случае Вам нужно всего лишь нажать RETURN, чтобы получить приглашение к работе. Если же Вы так и не получили запроса на ввод регистрационного имени и пароля, то предполагается, что Вы зарегистрированы автоматически и сразу можете начинать работу с FTP.

    Использование FTP с помощью альтернативных методов

    Наиболее часто процедура FTP запускается сокращенной командой ALT-F. Если Вы нажимаете ALT-F, то программа NCSA Telnet автоматически посылает команду ftp, описанную выше, добавляя к ней IP адрес Вашего персонального компьютера. Предполагается, что именно этим способом Вы чаще всего будете пользоваться при переносе файлов. Для простоты Вы можете полагать, что ALT-F является макросом для клавиатуры, для которого заранее определена ftp команда и Ваш IP адрес.

    Другим доступным Вам макросом является ALT-I, которая посылает хосту Ваш IP адрес. Так при наборе какой-либо сетевой команды, к примеру той же FTP, Вы можете мгновенно ввести и свой сетевой IP адрес, нажав ATL-I. Приведенная ниже последовательность операций имеет тот же результат, что и нажатие ALT-F

    ftp

    (пробел)

    (ALT-I)

    (RETURN)

    Из двух приведенных методов (ALT-F и ALT-I) используйте тот, который Вам более всего подходит.


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

    Использование команд FTP

    В большинстве программ FTP по завершении регистрации и про верки пароля Вам дается приглашение на ввод конкретных команд. Эти команды описаны в документации к хост-компьютеру. Однако большинство реализаций FTP придерживаются общего набора команд, поскольку они воспроизводят FTP версии Berkeley UNIX. В таблице 5.1 приведен список команд, общих для большинства реализаций.

    Таблица 5.1 Общие команды FTP

    Команда Описание
    ascii установить режим переноса файлов ASCII

    (используется по умолчанию)
    binary установить режим переноса файлов binary (image)
    cd путь установить новый каталог, используемый по умолчанию на Вашем персональном компьютере
    dir показать имена файлов из каталога, используемого по

    умолчанию на Вашем персональном компьютере
    get имя_файла взять указанный файл с Вашего персонального

    компьютера и поместить его на хост
    help показать список команд для FTP
    put имя_файла переслать указанный файл с хоста на Ваш

    персональный компьютер
    pwd показать имя каталога, используемого на Вашем

    персональном компьютере по умолчанию
    quit завершить выполнение FTP
    remotehelp показать список команд, обслуживаемых FTP сервером
    ascii, binary

    По умолчанию FTP передает файлы в формате ASCII. Если Вы передаете графические файлы или файлы с бинарными данными, то перед тем как дать команду put или get, следует установить режим binary. Делается это подачей команды binary. Чтобы после пересылки бинарного файла вновь установить режим ASCII, введите команду ascii. Наприведен пример сообщений FTP во время передачи ASCII файла. На показывает сообщения при передаче binary файла.

    каталог по умолчанию

    Если Вы не указали в команде полное имя файла, то NCSA Telnet передаст этот файл в каталог по умолчанию.


    Как показано в

    Вы можете воспользоваться командами FTP для

    определения текущего каталога (pwd) или его смены (cd).

    Команда смены каталога, набираемая как cd, позволит Вам сменить не только сам каталог, используемый по умолчанию, но и диск, на котором он расположен. При этом следуйте в точности обозначениям, принятым для DOS, а также заменяйте обратные слеши на прямые, например

    ftp>cd D:/files

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

    D:\FILES

    передача файлов на Ваш персональный компьютер

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

    Формат этой команды выглядит как

    put filename.txt

    На рисунке 5.1 показан пример использования команды put для пересылки реального файла, имеющего имя temp2.

    Рисунок 5.1 Перенос на персональный компьютер ASCII файла

    newton_45% ftp -n 192.17.20.124
    Connected to 192.17.20.124.
    220 PC Resident FTP server, ready
    ftp> put temp2
    200 This space intentionally left banl < >
    150 Opening connection
    226 Transfer complete
    262145 bytes sent in 32.61 seconds (7.8 Kbytes/s)
    ftp> quit
    221 Goodbye
    newton_46%
    передача файлов на хост

    Запрос на посылку файл
    а с Вашего персонального компьютера на хост называется get.

    get filename.txt

    На рисунке 5.2 показан пример использования команды get и бинарным файлом, называемым bridge.pic. Заметим, что этот файл находится в каталоге с именем ibmg, так что следует воспользоваться командой cd. Если по завершении этой операции Вам понадобится передать текстовый файл, воспользуйтесь FTP командой ascii.

    Рисунок 5.2 Получение бинарного файла с персонального

    компьютера

    newton_41% ftp -n 192.17.20.124
    Connected to 192.17.20.124.
    220 PC Resident FTP server, ready
    ftp> bin
    200 Type set to I, binary mode
    ftp> cd /ibmg
    250 Chdir okay
    ftp> get bridge.pic
    200 This space intentionally left blank < >
    150 Opening connection
    226 Transfer complete
    262144 bytes received in 9.22 seconds (28 Kbytes/s)
    ftp>
    ftp> quit
    221 Goodbye
    newton_42%
    <


    Индикатор состояния FTP

    После того, как Вы ввели команду put или get, в нижнем правом углу экрана Вы увидите имя файла и указатель числа переданных байтов (в случае команды put), либо числа пока еще

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

    mput, mget

    На многих хостах Вы можете с помощью одной такой команды передавать друг за другом по несколько файлов, указав их с помощью специальных символов (на персональном компьютере в указываемом имени символ ? означает подстановку одиночного сим вола, * - подстановку нескольких символов). Например, чтобы передать файлы teln.2 и teln.3, Вы можете ввести mget teln.*

    (или mput teln.*).

    Перенос файлов с помощью rcp

    Крайне нежелательно устанавливать в файле конфигурации config.tel параметр rcp=yes и пользоваться UNIX командой rcp, поскольку эта функция не имеет защиты от несанкционированного доступа на Ваш персональный компьютер со стороны других пользователей сети Internet.

    []

    []

    Пакет NCSA Telnet

    Радик Усманов

    Март, 1995 г.
    Реферат:
    Описание программного пакета NCSA Telnet,
    ориентированное на рядового пользователя сети Internet.
    Пакет предназначен для работы в режиме удаленного терминала на компьютерах,
    подключенных к сети.

    Пакет PC Gopher III

    Радик Усманов

    Апрель, 1995 г.
    Реферат:
    Описание программного пакета PC Gopher III (MS-DOS)
    для работы с информационными серверами в сети Internet. Руководство содержит рекомендации
    по настройке пакета, описание его основных функций и пользовательского
    интерфейса.

    Параметр 'charset'

    В отличие от других значений, значения этого параметра не являются чувствительными к регистру букв.
    Спецификации любых новых подтипов типа 'text' должны определять, будет ли этот новый подтип использовать параметр "charset" либо наоборот, будет запрещать его использование. Любое тело, не содержащее внутри себя других, должно целиеом быть в одной языковой кодировке. В частности, создатели новых подтипов должны уделить внимание многбайтным символьным наборам.
    Дополнительно к предопределенным новые языковые кодировки могут быть зарегистрированы через IANA, хотя стандартизация их использования требует опробирования IESG (см. RFC-1340). Если используется 8-битная языковая кодировка (например, koi8 или cp866), то необходимо наличие поля заголовка Content-Transfer-Encoding для обеспечения передачи через ряд протоколов, в частности, SMTP.
    Необходимо заметить, что управляющие символы (0-31, 127), включая DEL, не имеют определенного значения за исключением последовательности CRLF (13,10), означающей конец строки. Два символа де-факто широко употребляются: FormFeed (12), означающий, что следующий за ним текст должен начинаться на новой странице; и TAB (9), часто, но не всегда означающий "перевести курсор на следующий ближайший столбец после данной позиции, где номер столбца кратен воьсми". Любое другое использование управляющих символов или DEL в теле должно быть в рамках частного соглашения между отправителем и получателем. Но такие соглашения крайне не рекомендуются и по возможности должны быть заменены другими возможностями MIME.
    Существует огромное количество языковых кодировок, что не является положительным фактом. В дальнейшем предполагается ввести универсальную многобитную языковую кодировку, поддерживающую все языки мира. К сожалению, существующая практика говорит о том, что возможно, еще долгое время электронной почте придется иметь дело с многими кодировками. По этой причине предопределены имена для наиболее распространенных языковых кодировок:
  • US-ASCII
  • ISO-8859-X -- где "X" - цифра от 1 до 9 включительно, означающая номер версии кодировки ISO-8859
    Параметр "charset" был определен в основном для текстовых данных, но возможно, для бинарных данных тоже может потребоваться указать языковую кодировку, в этом случае должен использоваться тот же синтаксис те же значения.
    Почтовое программное обеспечение должно руководствоваться принципом наименьшего набора символов, то есть, если письмо пишется как-бы в восьмибитной ISO-8859-1, но в письме используются символы лишь некоторого поднабора, например, семибитного US-ASCII, то почтовая программа должна автоматически определить имя символьной кодировки как US-ASCII. В этом случае уменьшится нагрузка в сети и увеличаися шансы, что получатель прочтет письмо без искажений.

    PC Gopher III

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

    /////
    /////
    /////
    /////
    /////
    /////
    /////
    /////

    Введение
    Данный документ описывает программу PC Gopher III, именуемую
    далее как Gopher. Программа работает на компьютерах фирмы IBM и
    совместимых с ними под управлением операционной системы MS-DOS. PC
    Gopher III является той программой, которая позволит Вам осуществлять поиск и извлекать информацию, содержащуюся на компьютерах,
    называемых "gopher серверами".
    Требования
    Gopher выполняется под управлением DOS 3.3 и более поздних версий и требует 640k доступной памяти. Gopher будет работать с большим парком компьютеров IBM PC и совместимых с ними, включая более
    ранние PC, содержащие монохромный адаптер и не имеющие графической
    поддержки.
    Использование мыши фирмы Microsoft окажется полезным подспорьем,
    но не обязательно. При этом Вы должны будете перед запуском Gopher
    устанавливать драйвер мыши. Если Ваша мышь содержит более одной
    клавиши, то для работы с Gopher Вам нужна будет только левая клавиша.
    Вам также потребуется установить пакетный драйвер, небольшую
    программу, которая позволит Gopher взаимодействовать с картой
    Ethernet на Вашем компьютере или с модемом.

    Как уже сказано, Gopher поддерживает только пакетный драйвер,

    работающий с картой Ethernet или модемом, а также драйверы программы FTP PC-TCP. Она не будет работать с LAN Workplace for DOS, PC-NFS или с Banyan Vines.

    Как приобрести программу Gopher

    Пакет Gopher состоит из одного файла GOPHER.EXE. Имеются также

    два служебных файла, которые Gopher сама создаст в случае необходимости: GOPHER.INI, содержащий параметры конфигурации, и GOPHER.BMK,

    содержащий "закладки" которые Вы можете использовать для быстрого

    доступа к заинтересовавшим Вас местам в океане информации gopher.

    Вы можете получить данный программный пакет через сеть Internet,

    обратившись с помощью anonymious FTP на компьютер

    boombox.micro.umn.edu

    Проверьте каталог

    /pub/gopher/PC_client

    Вы можете также найти в каталоге

    /pub/gopher/PC_client/packet_drivers

    набор пакетных драйверов

    Инсталляция

    Соединение с сетью Internet


    Чтобы можно было запустить Gopher, Ваш персональный компьютер

    должен быть связан с локальной компьютерной сетью (LAN). Обычно, в

    свою очередь, LAN будет связано с глобальной сетью Internet, что

    даст Вам возможность получить информацию, находящуюся на

    компьютерах далеко за пределами Вашей локальной сети.

    Работа с локальной сетью

    Если Вы хотите, чтобы Ваш персональный компьютер работал с LAN,

    Вы должны установить на него карту сетевого адаптера. Кроме того,

    прежде чем запустить Gopher, Вы должны установить пакетный драйвер

    поддерживающий данный сетевой адаптер.

    Установка пакетного драйвера

    Чтобы запустить программу Gopher, прежде всего следует загрузить

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

    автоматически при запуске компьютера.

    Каждый такой пакетный драйвер является специализированной программой предназначенной для "общения" с картой сетевого адаптера

    определенного типа. Поскольку все пакетные драйверы придерживаются

    одного и того же внешнего интерфейса, это дает возможность одной и

    той же программе Gopher работать с большим набором сетевых адаптеров.


    Указанный ранее набор пакетных драйверов содержит документацию, которая поможет Вам выбрать именно тот драйвер, который нужен

    для работы с Вашим конкретным сетевым адаптером.

    Чтобы загрузить пакетный драйвер, введите его название, сопроводив некими параметрами, описанными в соответствующей документации.

    Допустим, к примеру, что на Вашем персональном компьютере установлена сетевая плата 3c523 фирмы 3Com. Чтобы загрузить соответствующий пакетный драйвер, Вы должны ввести

    3C523 0x60 0x3 0x300

    и нажать клавишу Enter. (Заметим, что различные пакетные драйверы

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

    пакетного драйвера.) И до тех пор, пока Вы не отключите питание у

    Вашего персонального компьютера, Вы будете иметь возможность запускать программу Gopher, завершать ее, использовать другие программы

    и вновь запускать программу Gopher, уже не утруждаясь повторной

    установкой пакетного драйвера. Кроме этого, если Вы уже загрузили

    пакетный драйвер с помощью таких программ, как FTP, Telnet или

    tn3270, то Вам нет нужды специально загружать пакетный драйвер перед запуском Gopher.

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

    команду, указывающую пакетный драйвер и его параметры в файл

    AUTOEXEC.BAT. Большинство людей предпочитают поступать именно таким

    образом, чтобы более не вспоминать о загрузке пакетного драйвера и

    выборе его параметров.

    Конфигурация программы Gopher

    Если Вы используете Gopher первый раз, то, возможно, Вам придется указать некоторые параметры конфигурации, свойственные только

    Вашему персональному компьютеру. В частности, программе Gopher эти

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

    Программа Gopher автоматически создаст это файл, если вдруг он не


    будет ею найден.

    Первым делом запустите программу Gopher, введя слово

    GOPHER

    в ответ на приглашение DOS. После того, как программа Gopher запустится, перейдите в меню Configure и выберите пункт

    "Application...". При этом появится диалоговая панель выбора конфигурации приложений. (Чтобы открыть меню, установите мышь на ее заголовок и нажмите левую клавишу. Или же удерживая ALT, нажмите клавишу, соответствующую первой букве в заголовке меню. Вы можете так

    же воспользоваться клавишами курсора, чтобы указать интересующий

    Вас пункт меню, а затем нажать клавишу Enter. И наконец, если Вы

    хотите закрыть меню, не воспользовавшись ни одним из его пунктов,

    нажмите клавишу Esc.)

    Чтобы ввести или отредактировать какой-либо из параметров на

    панелях диалога, первым делом выделите соответствующее поле, воспользовавшись клавишей Tab (или клавишами курсора "Вверх" или

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

    текст), то с помощью клавиши пробела включите или выключите соответствующий переключатель. Для перехода между контрольными ящичками

    используйте клавиши курсора.

    Конфигурация приложений

    Желательно, чтобы первоначально конфигурацию программы выставил

    администратор сети. Вам же будет достаточно просто иметь представление, из чего она состоит.

    Основной Gopher сервер (Home Gopher Server)

    Это может быть имя любого gopher сервера. Ваша организация может

    иметь свой собственный gopher сервер. Если же такого нет, то мы

    приглашаем Вас воспользоваться нашим сервером, имеющим имя

    gopher.tc.umn.edu. Когда Вы дадите команду "New Gopher", Gopher

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

    Номер порта

    Это номер порта, который Gopher будет пытаться использовать для


    связи с упомянутым выше gopher сервером. В настоящее время gopher

    серверы используют для связи порт 70.

    Альтернативный gopher сервер и номер порта

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

    gopher2.tc.umn.edu с портом 70. Данный сервер дублирует информацию

    на gopher.tc.umn.edu.

    Работа в качестве терминала

    Некоторые виды услуг, предоставляемые в среде gopher, требуют

    использования интерфейса стандартного терминала, отличающегося от

    стандартной для Gopher процедуры "укажи и нажми". Чтобы воспользоваться этими услугами, Вам понадобится программа, называемая эмулятор терминала. Два наиболее популярные типа терминала, используемые

    для этой цели - это терминалы DEC VT100 и IBM 3270. Соответственно,

    Gopher позволяет Вам указать в конфигурации две программы эмулирования терминала, по одной для каждого типа сеанса. (Вам нет нужды

    беспокоиться о том, какую программу использовать для какого типа

    услуг. Gopher автоматически задействует нужный.)

    В строке для ввода с заголовком "Telnet Session Command Line"

    введите путь и имя файла для Вашего VT100 эмулятора, а также те параметры, которые Вы хотите передать этой программе. Gopher сам знает как интерпретировать определенные символы в командной строке,

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

    символ значение
    %a Адрес машины-адресата
    %n Имя машины-адресата
    %p номер порта для услуг на машине-адресате
    Например, если используемый Вами эмулятор VT100 находится в том же

    каталоге, что и gopher (C:\GOPHER), и называется VT100.EXE, то Вам

    следует набрать следующую командную строку:

    C:\GOPHER\VT100.EXE %a %p

    Если Ваша программа VT100 нуждается в символе '#' перед номером

    порта, то введите командную строку:

    C:\GOPHER\VT100.EXE %a #%p


    Далее указывается количество памяти, необходимое для запуска программы эмулятора. Если Вы оставите его равным нулю, то Gopher будет

    всегда пытаться выполнить эту программу. Если же Вы укажите для

    него значение, отличное от нуля, то Gopher даст Вам предупреждение,

    если памяти для запуска программу окажется слишком мало, и предложит Вам либо отказаться от эмуляции, либо продолжить работу не

    смотря ни на что.

    По умолчанию Gopher будет пытаться записать себя на диск перед

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

    Строка с заголовком "TN3270 Session Command Line" аналогична

    строке "Telnet Session Command Line". Программа, которую Вы указываете в ней, будет использоваться для связи с серверами, предоставляющими услуги на базе терминала IBM3270.

    Опции: Автоматическая связь с новым gopher-сервером при запуске программы Gopher

    Если контрольная позиция New Gopher помечена, то программа при

    каждом запуске автоматически будет пытаться связаться с gopher-сервером, указанным в строке "Home GopherServer". Если эта позиция

    не помечена, то Вы должны будете сами выбрать пункт New Gopher в

    меню File, либо на панели статуса с тем, чтобы начать сеанс связи.

    Опции: Режим одного окна

    Обычно Gopher будет создавать новое окно всякий раз, когда Вы

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

    позицию Single Window Mode, то Gopher вместо этого будет повторно

    использовать прежнее окно, добавив в самом низу клавишу "Go Back",

    позволяющую Вам вернуться к тем каталогам, которые Вы видели в нем

    ранее.

    Конфигурация сети

    Чтобы открыть окно конфигурации сети для программы Gopher, Вам

    следует в меню "Configure" выбрать пункт "Network...".


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

    Gopher и флаги командной строки

    Данный раздел также носит справочный характер, поскольку, как

    правило, администратор сети сам ставит вызов Gopher в меню Norton

    Commander или оформляет его в виде иконки для Windows.

    Чтобы запустить программу PC Gopher III, в ответ на приглашение

    DOS введите команду gopher

    C:\>gopher

    Программа Gopher распознает некоторые флаги в командной строке,

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

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

    Флаги командной строки имеют вид

    /SWITCH=VALUE,

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

    /SWITCH

    Если Вам необходимо занести команду gopher с этими флагами в

    некий пакетный драйвер, то следует заменить все символы "=" на символы "-", поскольку DOS сам убирает все встретившиеся ему символы

    равенства.

    Флаг /I

    По умолчанию, Gopher ждет получения сведений о конфигурации из

    файла с именем GOPHER.INT, находящегося в том же каталоге, что и он

    сам. Однако при запуске программы Gopher Вы можете заказать конфигурацию для нее из другого каталога и/или файла. Для этого Вам следует ввести команду в следующем формате:

    GOPHER /I=D:\PATH\FILE.EXT

    В данном случае вместо текущего каталога при поиске будет использоваться каталог D:\PATH\, и файл конфигурации будет иметь имя

    FILE.EXT. Администраторы сетей могут использовать этот флаг для

    создания индивидуальных файлов конфигурации для каждого клиента

    сети.

    Флаг /B

    Этот флаг работает подобно флагу /I, однако он дает сведения не

    о файле конфигурации, а о файле с закладками. По умолчанию, Gopher

    будет помещать все создаваемые Вами закладки в файле GOPHER.BMK в


    том же каталоге, где находится сама программа. Если же Вы хотите

    использовать иной файл с закладками, запустите программу Gopher,

    воспользовавшись командой с новым флагом:

    GOPHER /B=D:\PATH\FILE.EXT

    В этой строке указывается, что при поиске файла нужно просматривать

    не текущий каталог, а D:\PATH\. Сам же файл с закладками будет

    иметь теперь имя FILE.EXT.

    Флаги /T и /X

    Эти флаги можно использовать, если Вы хотите сообщить программе

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

    GOPHER /T=D:\PATH /X=D:\PATH

    Здесь указывается, что для сохранения получаемых файлов следует

    использовать не текущий каталог, а D:\PATH. Тем не менее, всякий

    раз, при получении какого-либо файла Вы получите сообщение и должны

    будете вновь указать место для нового файла среди каталогов на диске. Флаги /T и /X всего лишь определяют тот каталог для размещения

    файла, который будет Вам предложен в первую очередь.

    Флаги, используемые для указания IP адреса

    Есть четыре флага, которые Вы можете использовать для указания

    адресов. При этом программа будет игнорировать конфигурацию сети,

    используемую по умолчанию. Это следующие флаги:
    /MYIP IP адрес для Вашего персонального компьютера
    /MYMASK маска локальной сети для Вашего персонального компьютера
    /MYGW адрес шлюза для локальной сети, куда включен Ваш компьютер
    /MYDNS адрес name-сервера для Вашего персонального компьютера
    Все эти флаги работают по единому образцу. Например, чтобы работать от имени IP адреса 127.0.0.1, запустите программу Gopher с

    помощью командной строки


    GOPHER /MYIP=127.0.0.1

    Другие флаги

    Имеются еще три флага, которые не подпадают ни под какую конкретную категорию.

    Флаг /NOSWAP запретит программе Gopher записывать себя на диск

    перед запуском командного интерпретатора DOS или внешнюю программу.


    Заметим, что если Вы используете этот флаг, то может оказаться, что

    в компьютере слишком мало свободной памяти для сеанса терминальной

    связи! Этот флаг может понадобиться, например, если Ваш персональный компьютер дает сбой, когда программа Gopher пытается записать

    себя на диск. Это может происходить при несовместимости некоторых

    резидентных программ и аппаратуры компьютера.

    Флаг /NOSHELLS блокирует работу пункта "DOS Shell" в меню системы. Заметим однако, что это не мешает выходу в командный интерпретатор DOS для запуска сеансов терминальной связи! Заметим также,

    что большинство терминальных эмуляторов сами имеют функцию выхода в

    командный интерпретатор DOS.

    И наконец, флаг /? предоставляет Вам на экране список всех предыдущих флагов.

    Интерфейс пользователя в программе Gopher

    Программа Gopher использует стандартный набор символов IBM для

    эмуляции графического интерфейса пользователя (GUI). По этой причине данная программа способна работать с большим парком персональных

    компьютеров IBM PC и совместимых с ними, включая даже самые первые

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

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

    Microsoft Windows или OS/2.

    При использовании GUI Вы работаете программой, используя графические символы, появляющиеся на экране компьютера, вместо того,

    чтобы записывать свои указания с командной строке (как это имеет

    место в операционной системе MS-DOS). Благодаря данному графическому интерфейсу программа Gopher является легко понимаемой. Если Вы

    знакомы с GUI в системе Microsoft Windows или в операционной системе Apple Machintosh, то, несомненно, Вы сможете быстро освоить программу Gopher. Если это действительно так, то Вы можете пропустить

    данную главу, посвященную работе с Gopher, и вернуться к ней позже.

    Интерфейс пользователя в программе Gopher состоит из нескольких


    элементов:

    Списки

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

    прокрутки дает Вам возможность увидеть те пункты списка, которые

    сперва не поместились на экране. Чтобы "прокрутить" список, нажмите, воспользовавшись мышью, на стрелки в вершине или основании этой

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

    стрелками курсора.

    В списке всегда существует пункт, являющийся на настоящий момент

    "активным". Если вы нажмете на него, воспользовавшись мышью, или же

    просто нажмете клавишу Enter, то будет выполнено некое действие,

    соответствующее этому пункту. Текущий активный пункт списка всегда

    выделяется. Основной цвет и цвет фона этого пункта будет иным, чем

    у его соседей. В случае монохромного монитора для активного пункта

    основной цвет просто меняется на фоновый, и наоборот.

    Кнопки (клавиши)

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

    будут выполнять некую работу в ответ на нажатие, осуществленное с

    помощью мыши.

    В названии некоторых кнопок одна из букв окажется выделенной.

    Это означает, что Вы можете также активировать эту кнопку альтернативным способом - удерживая Alt, Вы нажимаете ту клавишу, которая

    соответствует выделенной букве. В названии других кнопок все буквы

    окажутся выделенными. Это означает, что она используется по умолчанию и может быть активирована простым нажатием клавиши Enter.

    Окна для диалога

    Окна для диалога позволяют программе Gopher запрашивать у Вас ту

    или иную информацию. Например, если Вы в неком списке выбрали пункт

    поиска, то на экране при этом возникнет окно диалога, позволяющее

    Вам указать образец для поиска.

    Окна диалога используются также для извещения пользователя об

    ошибках, возникающих в ходе работы программы Gopher. Если на экране

    выскочило одно из таких окон с сообщением об ошибке, Вам следует

    нажать на клавишу OK в окне диалога (либо Enter на клавиатуре).

    Лишь после этого Вы сможете пользоваться программой далее.


    Окно диалога может состоять из множества элементов: кнопок, полей для ввода текста, списков и т.д. Если Вы пользуетесь клавиатурой, а не мышью, то Вам понадобится клавиша табуляции Tab чтобы

    выбрать среди различных элементов окна тот, который Вас интересует.

    Окна

    Программа Gopher для предоставления информации использует окна.

    Окна в Gopher бывают двух типов. Во-первых, это окна просмотра,

    предоставляющие некие списки, в которых Вы можете выбрать тот или

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

    Окна и того и другого типа можно переместить в любое место на

    экране с помощью мыши или клавиатуры. Чтобы переместить окно с помощью мыши, поставьте курсор на его заголовок (горизонтальную черту

    на верхней кромке окна). После этого Вы можете, нажав клавишу мыши,

    перемещать окно по экрану вслед за курсором. Если же Вы хотите переместить окно, пользуясь клавиатурой, нажмите Ctrl-F5 и перемещайте окно по экрану компьютера, пользуясь клавишами курсора. После

    того, как окно заняло нужную позицию, нажмите клавишу Enter.

    В верхнем левом углу каждого окна имеется маленький квадратик,

    стоящий между квадратными скобками. Это ящик закрытия окна. Если с

    помощью мыши Вы нажмете на этот ящичек, то соответствующее окно

    будет закрыто. Если же Вам нужно закрыть самое верхнее окно с помощью клавиатуры, нажмите Alt-F3.

    Можно также изменить размеры некоторых из окон. Чтобы изменить

    размер такого окна с помощью мыши, переведите курсор на его нижний

    правый угол и нажмите клавишу на мыши. Затем, удерживая ее, перемещайте мышь в нужном направлении. Чтобы изменить размер окна, пользуясь клавиатурой, нажмите Ctrl-F5. Затем удерживая клавишу Shift,

    меняйте размер окна с помощью клавиш курсора. После того, как нужный размер окна достигнут, зафиксируйте его, нажав клавишу Enter.

    Поле меню

    Самую верхнюю строку на экране компьютера занимает поле меню

    программы Gopher, состоящее из трех пунктов. Данное поле выглядит


    следующим образом:

    # File Window Configure
    Поле меню является основным средством управления программой Gopher.

    Оно имеет выпадающие подменю. Иными словами, если Вы выберите здесь

    какой-либо пункт, то под ним тут же возникнет еще одно меню.

    Если после какой-либо команды в выпадающем меню стоит многоточие, то при ее выборе на экране появится окно диалога, требующее

    ввода дополнительной информации. Если же команда в выпадающем меню

    не имеет многоточия, то после того, как Вы выберете эту команду и

    отпустите клавишу мыши (или же нажмете клавишу Enter), программа

    Gopher выполнит операцию, соответствующую этой команде.

    Для выбора команд в меню Вы можете использовать либо мышь, либо

    клавиатуру. Если Вы используете мышь, то щелкните ее клавишей над

    нужным пунктом меню (если у Вашей мыши несколько клавиш, пользуйтесь лишь левой). На экране возникнет подменю этого пункта. Второй

    раз Вам предстоит щелкнуть уже под какой-либо командой в этом подменю. Либо Вы можете нажать клавишу мыши над пунктом основного меню, а затем, удерживая ее, перевести курсор на нужную команду. Если же Вы решили не активировать команды, не отпуская клавиши, выведите курсор за пределы выпадающего меню.

    Чтобы выбрать какую-либо команду, пользуясь лишь клавиатурой,

    первым делом активируйте основное меню программы Gopher, для чего

    нажмите клавишу F10. При этом один из пунктов в поле меню будет

    выделен цветом. Если интересующий Вас пункт меню оказался не выделен, сделайте это, пользуясь клавишами курсора "влево" и "вправо".

    Затем нажмите клавишу Enter, что приведет к возникновению на экране

    выпадающего подменю. Теперь Вы можете, воспользовавшись клавишами

    "вверх" и "вниз", выделить интересующую Вас команду. И наконец,

    сделав это, нажмите клавишу Enter. Если Вы хотите покинуть меню, не

    запуская ни одной из команд, нажмите клавишу Esc.

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


    клавишу, соответствующую первой букве в названии интересующего Вас

    пункта основного меню. Так, нажав Alt-F, Вы вызовите на экран

    выпадающее подменю File (для вызова подменю # используйте комбинацию горячих клавиш Atl-пробел).

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

    Кроме указанных четырех пунктов в правой части поля основного

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

    доступной программе, второй указывает текущее время.

    Структура меню

    Все пункты выпадающего меню спроектированы по единой схеме. Так,

    выделенные символы в названии команды используются для создания

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

    будет описываться ниже.

    Заметим, что первый символ команды не всегда будет именно тем

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

    комбинации клавиш или какой-либо функциональной клавиши (иными словами, дается возможность вызвать эти команды, не прибегая к услугам

    основного и выпадающих меню). Описание таких клавиш и комбинаций

    также дается ниже.

    Пункт Preferences имеет свое собственное подменю, предоставляющее

    список некоторых настраиваемых характеристик программы. Это подменю

    работает точно также, как и остальные выпадающие меню.

    В заключении мы даем описание всех меню программы Gopher. Для

    наглядности мы заменили в названии команд все выделенные символы на

    заглавные.

    Название меню Выполняемые действия Вызов с клавиатуры
    #. Alt-пробел
    About pc gopher iii предоставить регистрационный

    лист программы
    .
    Calendar выпадающий калькулятор.
    caLendar "вечный" календарь.
    Puzzle головоломка.
    Dos shell временный выход в DOS.
    File . Alt-F
    new Gopher открыть окно просмотра на основном сервере Alt-G
    Save file ... записать содержание верхнего

    окна в некий файл
    Alt-S
    attribute Info получить справочную информацию

    о выбранном Gopher сервере
    Alt-I
    alternate Views просмотр рабочего каталога на

    персональном компьютере
    Alt-V
    Open bookmark file открыть окно диалога для

    работы с "закладками"
    F9
    eXit завершить работу с программой

    PC Gopher III
    Alt-X
    Window . Alt-W
    Next перенести наверх нижнее окно F6
    Size/move изменить размер окна или

    переместить его на другое место
    Ctrl-F5
    Zoom развернуть окно на весь экран или

    произвести обратное действие
    F5
    close закрыть окно, лежащее сверху Alt-F3
    Configure . Alt-C
    Application ... дать окно диалога для выбора

    рабочей конфигурации программы

    Gopher
    .
    Network ... дать окно диалога для выбора

    конфигурации сети
    .
    Preferences предоставить следующее меню: .
    Mouse ... предоставить окно диалога для выбора

    режима работы с мышью
    .
    Video mode сменить режим работы с экраном .
    <


    Панель статуса

    Панель статуса расположена на нижней строке экрана. Она выглядит

    следующим образом:

    F1 Help F10 Menus Alt-X Exit Alt-G New Gopher Alt-Z Cancel query

    Панель статуса содержит "горячие клавиши". Последние расположены

    под соответствующими им надписями. Например, строка "Alt-G New

    Gopher" записана поверх одной большой клавиши. Между двумя рядом

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

    выполнит соответствующую ей операцию. Например, если Вы нажали на

    строку "Alt-G New Gopher", то после этого будет открыто новое окно

    просмотра на основном gopher-сервере, а нажатие строки "Alt-X Exit"

    приведет к тому, что программа Gopher завершит свою работу и Вы

    получите приглашение DOS. Если Вы хотите активировать здесь какую

    либо клавишу, не пользуясь мышью, то, удерживая Alt, нажмите клавишу, соответствующую символу, выделенному в заинтересовавшей Вас

    надписи.

    Поиск информации с помощью программы Gopher

    Чтобы начать работу в среде Gopher, активируйте пункт "New

    Gopher" в меню File, либо щелкните клавишей мыши над словами "Alt-G

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

    окне диалога Preferences. Если соединение будет успешным, то по его

    окончании Gopher получит некий список, имеющийся на данном сервере.

    Этот список будет выглядеть примерно следующим образом:
    About Internet Gopher
    GIF picture of Joey Remone
    Really Interesting Administrative Information
    U of MN Phone Book
    Search Pyrotechnics Recipes
    Card Catalog via Telnet
    В этом списке можно выбрать для дальнейшей работы любой пункт, переместив на него с помощью клавиш курсора полосу выделения, а затем

    нажав клавишу Enter. Вы можете также дважды щелкнуть клавишей мыши

    над интересующим Вас пунктом меню.


    Типы пунктов в меню Gopher

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

    Gopher
    ошибка никаких действий не производится
    Текстовые файлы

    В предыдущем списке, полученном от Gopher-сервера, первый пункт

    ссылается на некий файл под названием "About Internet Gopher". Чтобы увидеть на экране текст этого файла, выберите в списке данный

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

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

    экране возникнет окно диалога с просьбой указать имена для файла и

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

    его содержимое с помощью своего любимого текстового редактора.

    Вы также можете самостоятельно решение о сохранении полученной

    информации на диске в виде некого файла (даже если это будет настолько короткий текст, что целиком поместится на одном окне). Для

    этого Вам нужно всего лишь выбрать пункт "Save File..." в выпадающем меню File, а затем указать имена файла и каталога, куда будет

    записана полученная информация.

    Бинарные файлы

    Вторым пунктом в приведенном выше списке является бинарный файл,

    изображение в формате GIF одной из наших любимых рок-звезд. После


    того, как Вы выберете данный пункт, на экране появится окно диалога, запрашивающее у Вас имя файла для размещения принимаемого из

    сети изображения. Набрав это имя, нажмите клавишу "OK". После всего

    этого программа Gopher перейдет в режим получения заказанного файла. Если в случае текстовых файлов получаемая информация тут же

    выдавалась на экран компьютера, то при получении бинарного файла

    программа Gopher будет всего лишь отчитываться перед Вами о выполнении пересылки. Так, Вы можете определить, сколь успешно идет процесс пересылки и определить момент, когда данный файл будет получен

    полностью.

    Чтобы увидеть полученное по сети изображение, Вам следует покинуть программу Gopher и запустить какую-либо программу,

    показывающую изображение в GIF формате на экране компьютера.

    Каталоги

    Третьим пунктом в списке, приведенном для примера в начале этого

    раздела, является каталог. Каталоги в среде Gopher напоминают папки

    или ящики, полные новых записей. Если программа Gopher только что

    установила соединение с gopher-сервером, то список, появляющийся

    при этом на экране, является изображением главного или "корневого"

    каталога на данном сервере.

    Чтобы просмотреть содержание какого-либо каталога, активируйте

    его в текущем списке, воспользовавшись мышью, либо клавиатурой.

    После чего программа Gopher отправит в сеть запрос на получение

    информации из выбранного Вами каталога, а впоследствии предоставит

    ее Вам в специально созданном для этой цели окне просмотра.

    Если Вы планируете в будущем вернуться к информации, имеющейся в

    этом каталоге на данном сервера, запишите в Bookmark List (список

    закладок) адрес того места в среде Gopher, где Вы сейчас находитесь. Итак, чтобы создать такую закладку, первым делом доберитесь

    до того сервера и того каталога, которые Вас интересуют, а затем в

    меню File активируйте пункт Open Bookmark. После того, как на экране возникнет окно с перечнем уже имеющихся закладок, щелкните клавишей мыши в этом окне над клавишей Add.


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

    вновь вернуться к заинтересовавшей Вас информации, следует так же

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

    Телефонная книга

    Четвертым пунктом в нашем списке значится телефонная книга. В

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

    офисов, где они работают, адреса электронной почты и т.д. Базы данных такого типа носят название CSO или PH серверов. После того, как

    Вы выбрали в списке пункт телефонной книги, на экране появится окно

    диалога, и программа Gopher пошлет серверу запрос на получение

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

    на поиск сведений о каком-либо человеке, указав в окне диалога его

    имя и нажав клавишу "Lookup". Все найденные по Вашему запросу сведения будут помещены в новое окно и их можно будет сохранить на

    диске, воспользовавшись командой Save File в выпадающем меню File.

    Если же Вы хотите ввести дополнительную информацию о человеке с

    тем, чтобы ускорить поиск, можете нажать в окне клавишу "More

    Choices...". При этом Вам будет предоставлено расширенное окно диалога, содержащее список тех полей, которые Вы можете использовать

    при составлении запроса на поиск. Вы создаете запрос, выбирая пункты этого списка и вводя образец для поиска после названия поля в

    телефонной книге, возникающем на экране компьютера. При составлении

    запроса Вы можете задействовать из телефонной книги не более пяти

    полей. Если Вы хотите отказаться от предыдущего и составить новый

    запрос, то прежде всего, воспользовавшись в окне клавишей Clear,

    сотрите всю информацию, полученную Вами ранее из телефонной книги.

    Затем составьте новый запрос и нажмите клавишу Lookup. При этом на

    сервер будет послан запрос на получение новой информации.

    Поиск файлов

    Следующим пунктом в списке Gopher-сервера был пункт, связанный с


    поиском с среде Gopher интересующих Вас сведений. Поиск для Вас

    осуществляет специальный компьютер, способный найти в различных

    Gopher-серверах те файлы, которые содержат указанные Вами слова.

    Так, если Вы выбрали в списке пункт, связанный с поиском, то на

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

    клавишей Search, либо просто нажмите клавишу Enter.

    Завершившаяся процедура поиска должна будет предоставить Вам

    некий список файлов, которые обязательно должны содержать ВЕСЬ

    текст, указанный Вами при составлении запроса. Так, если Вы ввели

    слово "salmon", то результатом поиска будет список фалов, содержащих данное слово. Если же Вы ввели "salmon spinach", то результатом

    поиска будет список файлов, содержащих как слово "salmon" так и

    слово "spinach". В этом списке НЕ будет файлов, содержащих лишь

    одно из указанных слов.

    Поиск и логические операторы

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

    воспользоваться логическими операторами "and", "or" и "not". Вы

    можете записывать эти операторы в образец для того, чтобы сузить

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

    Образцы для поиска в среде Gopher бывают трех типов. Первый тип

    подразумевает, что между словами, указанными в образке для поиска,

    неявно присутствует логический оператор "and" (и). Предполагается,

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

    логические операторы. Второй тип подразумевает наличие между слова

    ми неявного логического оператора "or" (или). Здесь точно так же

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

    операторы. И наконец, третий тип предполагает неявное наличие оператора "or". Но, в отличие от предыдущих, он игнорирует какие бы то

    ни было логические операторы, присутствующие в образце.


    К сожалению, если это не оговорено особо, выяснить, с каким типом поиска Вы

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

    Например, допустим, что Вы нашли в списке Gopher-а некий пункт

    поиска, который, как Вы полагаете, неявно ставит между словами оператор "and", а также распознает логические операторы. Предположим

    также, что Вы желаете найти файлы, которые содержат либо слово

    "salmon", либо слово "spinach", но никак не оба сразу. Вы можете

    сделать это, дав для поиска строку "salmon or spinach". Вы можете

    при составлении запроса использовать слово "and", явным образом

    указывающее, что искомые файлы должны содержать оба эти слова.

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

    так что поиск по шаблону "spinach and salmon or broccoli" возвратит

    список файлов, содержащих и слово spinach и слово salmon. В этот

    список также будут входить файлы, содержащие только слово broccoli.

    Чтобы исключить из образца некоторые слова, используйте оператор

    "not". Так, поиск по образцу "Minnesota not snow" даст список файлов, содержащих хотя бы одно слово "Minnesota", но не содержащие ни

    одного слова "snow".

    Сеанс терминальной связи

    Последним пунктом в приведенном ранее списке Gopher-сервера стоит сеанс терминальной связи. Такая связь предоставляет Вам доступ к

    информационным услугам, ориентированным на использование терминала,

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

    ему имя, адрес и/или номер порта, необходимые для получения тех

    информационных услуг, которые ориентированы на применение терминалов. Подбор эмулятора для Вашей программы Gopher должен выполнять

    администратор сети.

    Несколько одновременных запросов


    Программа Gopher может одновременно обслуживать до трех запросов. Это позволит Вам одновременно с получением большого бинарного

    файла пользоваться другими услугами среды Gopher, и, в том числе,

    делать заказы на пересылку других файлов.

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

    Как окно просмотра списков, так и окно просмотра текста имеют в

    верхнем левом углу рамки индикаторы выполнения запросов. Такой индикатор показывает Вам текущее состояние данного соединения. Обычно

    это либо "receiving", означающее получение ответа на сделанный Вами

    запрос, либо "waiting", указывающее, что Gopher ждет, когда сервер

    продолжит передачу информации.

    Индикатор выполнения запроса может быть полезен для диагностики

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

    сетями, или вызванных неисправностями самой программы PC Gopher.

    Отказ от запроса

    В любой момент можно отказаться от любого из запросов. Если Вы

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

    текст или список из некого каталога, то Вам следует всего лишь закрыть окно, соответствующее этому запросу. Если же Вы хотите отказаться от сделанного запроса, не закрывая при этом открывшегося

    окна, воспользуйтесь комбинацией клавиш Alt-Z или же нажмите с помощью мыши клавишу "Alt-Z Cancel Query", расположенную на панели

    статуса.

    Послесловие

    Люди быстро привыкают к хорошим вещам. Однако я до сих пор поражаюсь, когда на экране компьютера "Mazovia" рядом выстраиваются

    окна, "прибежавшие" из Германии, США и Австралии. Так и хочется

    вслед за Петром Великим открыть еще одно окно в Европу!

    Почтовый стандарт MIME (RFC1521)

    Документ предсталяет собой неполный русский перевод спецификации RFC 1521 "MIME - Multipurpose Internet Mail Extensions. Part one. Mechanismes for Specifying and Describing the Format of Internet Message Bodies". Автор перевода:
    MIME означает "Multipurpose Internet Mail Extensions" (Многоцелевые расширения почтового стандарта Internet). Этот стандарт описывает как пересылать по электронной почте исполняемые, графические, мультимедийные, смешаные данные. Типичные применения MIME - пересылка графических изображений, аудио, документов Word, программ и даже просто текстовых файлов, то есть, когда важно, чтобы входе пересылки не производилось никаких преобразований над данными. MIME также позволяет размечать письмо на части различных типов так, чтобы получатель (почтовая программа) мог определить, что делать с каждой из частей письма.
    Как читать письма в стандарте MIME? Т.к. MIME используется всего несколько лет, еще существуют старые почтовые программы, которые не понимают MIME. Однако, растет число почтовых программ, имеющих встроенную поддержку MIME (одна из самых популярных - "Pine", разработанная в Вашингтонском университете и реализованная для платформ UNIX, VMS, DOS, Windows). К тому же в некоторых почтовых системах имеются специальные шлюзы, обеспечивающие MIME-трансляцию. Но даже если у вас нет возможности использовать MIME-совместимую почтовую программу и нет доступа к подобному шлюзу, то можно также воспользоваться рядом программ, способных интерпретировать письма в MIME, сохраненные рпочтовой программой в файле. Например, програма "munpack", созданная в университете Carnegie Mellon. Существуют ее версии для Unix, PC, Macintosh, Amiga.
    Долгое время для кодирования бинарных файлов в 7-битный формат (чтобы обеспечить их пересылку по почтовой системе Internet) использовалась кодировка UUENCODE, имеющая ряд технических ограничений. Стандарт MIME предполагает использовние более устойчивой кодировки "Base64", которая специально разработана для обеспечения сохранности данных, пересылаемых по email, при различных преобразованиях, имиеющих место в ходе прохождения почтовых шлюзов.

    Стандарт MIME полностью описан в RFC-1521

  • Введение

  • Замечания, соглашения и обобщения

  • Поле заголовка 'MIME-Version'

  • Поле заголовка 'Content-Type'

  • Поле заголовка 'Content-Transfer-Encoding'

  • Механизм конвертации "Quoted-Printable"
  • Механизм конвертации Base64
  • Дополнительные поля 'Content-'

  • Необязательное поле заголовка 'Content-ID'
  • Необязательное поле заголовка 'Content-Description'
  • Предопределенные значения поля 'Content-Type'

  • Тип 'Text'
  • Параметр 'charset'
  • Подтип 'Text/plain'
  • Тип 'Multipart'
  • Тип Multipart: общий синтаксис
  • Подтип 'Multipart/mixed' (основной)
  • Подтип 'Multipart/alternative'
  • Подтип 'Multipart/digest'
  • Подтип 'Multipart/parallel'
  • Друтие подтипы типа 'Multipart'
  • Тип 'Message'
  • Подтип 'Message/rfc822' (основной)
  • Подтип 'Message/Partial'
  • Подтип 'Message/External-Body'
  • Способы доступа "ftp" и "tftp"
  • Способ доступа "anon-ftp"
  • Способы доступа "local-file" и "afs"
  • Способ доступа "mail-server"
  • Примеры и дополнительные пояснения
  • Тип 'Application'
  • Подтип 'Application/Octet-Stream' (основной)
  • Подтип 'Application/PostScript'
  • Другие подтипы типа 'Application'
  • Тип 'Image'
  • Тип 'Audio'
  • Тип 'Video'
  • Экспериментальные значения поля 'Content-Type'

    Подтип 'Application/PostScript'

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

    Подтип 'Message/External-Body'

    Этот подтип указывает на то, что тело не содержится в самом письме, а на него есть ссылка. Параметры подтипа описывают способ доступа к данным тела письма.
    Письмо (часть письма) этого подтипа состоит из заголовка, двух последовательных концов строки и заголовка вложенного письма. Если встречается другая пара концов строки, она означает конец заголовка вложенного письма. Однако, поскольку тело вложенного письма является внешним, оно не следует за концом заголовка. Например,
    Content-type: message/external-body; access- type=local-file; name="/u/nsb/Me.gif" Content-type: image/gif Content-ID:
    Content-Transfer-Encoding: binary ТЕЛА НЕТ!
    Область в конце, которую можно назвать "призрачным телом", игнорируется для большинства писем подтипа 'external-body'. Однако, в нее можно помещать дополнительную информацию, как например, в случае, когда параметр 'access-type' равен "mail-server". Во всех остальных случаях призрачное тело игнорируется.
    Единственный всегда обязательный параметр для 'message/external-body' - "access-type". Остальные параметры могут быть или не быть обязательными в зависимости от значения параметра "access-type".
    Значение этого параметра - слово, нечувствительное к регистру букв, означающее механизм доступа, с помощью которого файл или данные могут быть
    получены. Значения могут быть следующими (но не ограничиваются этим рядом): "FTP", "ANON-FTP", "TFTP", "AFS", "LOCAL-FILE" и "MAIL-SERVER". Будущие возможные значения, кроме экспериментальных, начинающихся с "X-", должны быть зарегистрированы в IANA.
    Дополнительно, следующие три параметра являются необязательными для всех способов доступа:
    EXPIRATION -- Дата (RFC 822 "date-time" синтаксис допускает 4 цифры в этом поле), после которой существование внешних данных не гарантируется.
    SIZE -- размер (в байтах) данных. Позволяет получателю решить, расходовать ли ресурсы на считывание внешних данных.
    Размер указывается для канонической формы данных (то есть, до применения каких-либо преобразований).

    PERMISSION -- нечувствительное к регистру букв поле, говорящее о том, ожидается или нет, что клиент может перезаписывать данные. По умолчанию или когда этот параметр имеет значение "read", полагается, что клиент не имеет на это права, и что если данные однажды считаны, то больше они не понадобятся. Если PERMISSION имеет значение "read-write", любая локальная копия может рассматриваться не более как кэш. "read" и "write" - единственные предопределенные значения для PERMISSION.

    Вложенные заголовки во ВСЕХ телах типа message/external-body ДОЛЖНЫ включать поле заголовка Content-ID для задания уникального идентификатора, указывающего на внешние данные.

    Обозначения, описывающие данные типа external-body, такие как имена файлов или команды mail-сервера, должны быть в символьном наборе US-ASCII.

    Как и для типа message/partial, тело типа message/external-body должно иметь значение content-transfer-encoding "7-bit" (по умолчанию). В частности, даже в системах, поддержиавющих 8-битный транспорт, применение content-transfer-encoding "8-bit" и "binary" запрещено для данных типа message/external-body.

    Подтип 'message/partial'

    Этот подтип определен с целью обеспечения возможности пересылки очень больших объектов в виде нескольких раздельных частей, автоматичски "склеиваемых" почтовой программой получателя. Этот механизм может пригодиться, когда промежуточные почтовые шлюзы ограничивают индивидуальный размер пересылаемых писем. Т.о., этот подтип говорит о том, что письмо содержит лишь часть большого послания.
    Для этого подтипа необходимо указание трех параметров:
  • "id" - уникальный идентификатор, позволяющий обнаружить остальные части послания.
  • "number" - целое число, означающее номер части послания.
  • "total" - целое число, означающее общее количество частей. Требуется лишь в последней части и не обязателен (хотя рекомендуется) для предыдущих частей. Эти параметры могут следовать в произвольном порядке.
    Пример: часть 2 3-х частного послания имеет следующие варианты заголовка:
    Content-Type: Message/Partial; number=2; total=3; id="oc=jpbe0M2Yt4s@thumper.bellcore.com" Content-Type: Message/Partial; id="oc=jpbe0M2Yt4s@thumper.bellcore.com"; number=2
    Но часть 3 обязательно должна содержать параметр "total":
    Content-Type: Message/Partial; number=3; total=3; id="oc=jpbe0M2Yt4s@thumper.bellcore.com"
    Необходимо заметить, что нумирация частей начинается с 1, а не с 0.
    Когда подобным образом разбитые части собираются вместе, они образуют полное MIME-письмо, содержимое которого может иметь любой другой тип и, соответственно, свое поле заголовка Content-Type, описывающее этот тип.
    Семантика partial-письма должна быть та же, как в обычном письме с содержимым данного типа, а не как в письме, содержащем "внутреннее" письмо. Это позволяет, например, переслать большой аудио-файл ввиде нескольких более мелких, остающихся, тем не менее, видимыми получателю как обычные аудио-письма, а не как вложенные аудио-письма.
    При "сборке" таких посланий в пункте назначения должны учитываться следующие правила:

    (1) Все поля заголовка части 1, кроме начинающихся с "Content-" и специальных "Message-ID", "Encrypted" и "MIME-Version" должны быть скопированы в заголовок нового (общего) письма.

    (2) Только поля заголовка ВЛОЖЕННОГО письма, начинающиеся с "Content-", а также поля "Message-ID", "Encrypted" и "MIME-Version", должны быть добавлены к заголовку нового общего письма, все остальные поля должны игнорироваться.

    (3) Заголовки второй и последующих частей целиком игнорируются.

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

    X-Weird-Header-1: Foo From: Bill@host.com To: joe@otherhost.com Subject: Audio mail Message-ID:

    MIME-Version: 1.0 Content-type: message/partial; id="ABC@host.com"; number=1; total=2 X-Weird-Header-1: Bar X-Weird-Header-2: Hello Message-ID:

    MIME-Version: 1.0 Content-type: audio/basic Content-transfer-encoding: base64 ... здесь имеет место быть первая часть закодированных аудио-данных ...

    А вторая может выглядеть так:

    From: Bill@host.com To: joe@otherhost.com Subject: Audio mail MIME-Version: 1.0 Message-ID:

    Content-type: message/partial; id="ABC@host.com"; number=2; total=2 ... здесь имеет место быть вторая часть закодированных аудио-данных ...

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

    X-Weird-Header-1: Foo From: Bill@host.com To: joe@otherhost.com Subject: Audio mail Message-ID:

    MIME-Version: 1.0 Content-type: audio/basic Content-transfer-encoding: base64 ... первая часть закодированных аудио-данных ... ... вторая часть закодированных аудио-данных ...

    Замечание по кодированию тела MIME-письма, заключенного внутри тела message/partial: так как данные типа "message" никогда не могут быть кодированы в Base64 или Quoted-Printable, следующая проблема может возникнуть в случае, если тела писем типа message/partial созданы в системе, поддерживающей 8-битный транспорт.


    Двоичные данные будут разбиты на несколько message/partial-объектов, каждому из которых требуется транспортировка в двоичном виде. Если бы таким объектам пришлось пройти через шлюз в 7-битную транспортную среду, их невозможно было бы перекодировать в сеимбитную форму без ожидания прибытия всех частей послания, собирания их воедино и затем кодирования целого послания в 7-битную кодировку (base64 или quoted-printable). Поскльку существует вероятность, что разные части пойдут разными путями (через различные шлюзы), то подобное решение не приемлимо. Поэтому MIME определяет, что письма типа message/partial должны иметь 7-битную кодировку и соответствующее ей значение поля content-transfer-encoding. Даже для систем с транспортом, поддерживающим "8-бит" и "binary", запрещается их использование для данных message/partial.

    Многие почтовые агенты могут автоматически фрагментировать большие письма.

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

    Поле заголовка "Encrypted" вышло из употребления, но вышеприведенные правила обеспечивают корректную его интерпретацию, если оно встречается при обработке фрагментов типа message/partial.

    Подтип "multipart/alternative"

    Этот подтип синтаксически идентичен предыдущему, но имеет несколько другую семантику.
    Почтовые системы должны распознавать, что данные из разных частей взаимозаменяемы. Системы должны выбрать наиболее подходящий вариант для локальной платформы и других условий, в некоторых случаях, с согласия пользователя. Как и в предыдущем случае, порядок частей в письме существенен. В этом случае альтернативы располагаются в порядке уменьшения отличия от оригинала. Обычно, выбирается последняя часть (альтернатива) из тех, которые имеют тип, поддерживаемый локальной системой получателя.
    Multipart/alternative может быть использована, к примеру, для пересылки текста в некотором гипотетическом формате:
    From: Nathaniel Borenstein
    To: Ned Freed
    Subject: Formatted text mail MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=boundary42 --boundary42 Content-Type: text/plain; charset=us-ascii ... Здесь содержится версия простым текстом .... --boundary42 Content-Type: text/richtext .... Здесь содержится версия с разметкой RFC 1341 ... --boundary42 Content-Type: text/x-whatever .... Здесь содержится версия в гипотетическом формате ... --boundary42--
    В этом примере пользователь, чья система понимает этот гипотетический формат, увидят именно эту версию, в то время как остальные будут видеть размеченный либо простой текст в зависимости от возможностей их системы.
    Обычно пользовательский агент, создающий письмо в multipart/alternative, должны располагать альтернативные части в порядке увеличения предпочтительности формата, то есть, предполагая, что наш гипотетический формат является самым удобным для конкретных данных (иначе зачем было бы его изобретать?), пользовательский агент должен располагать альтернативу в простейшем формате первой, а самую размеченную последней. Агент получателя должен отобразить последнюю из понимаемых им альтернатив. В случае, если одна из альтернатив сама имеет тип 'multipart' и содержит подчасти неизвестных типов, пользовательский агент может выбрать, показывать ли эту альтернативу, предыдущую или обе.

    ЗАМЕЧАНИЕ: С точки зрения программиста, может показаться более удобным располагать альтернативы в обратном порядке, но данный порядок позволяет устаревшим не-MIME'овским почтовым программам отобразить в первую очередь наиболее понятный вариант.

    ЗАМЕЧАНИЕ ПО СЕМАНТИКЕ ПОЛЯ 'CONTENT-ID' В ПИСЬМЕ MULTIPART/ALTERNATIVE: Рекомендуется, чтобы каждая часть имела уникальное значение поля Content-ID в случае, если содержимое этих частей не является идентичным. Однако, там, где содержащаяся информация идентична (например, если несколько частей типа "application/external- body" определяют альтернативные пути доступа к одним и тем же внешним по отношению к письму данным), должно использоваться одно и то же значение Content-ID, чтобы оптимизировать работу кэширующего механизма на системе получателя. Однако, не рекомендуется, чтобы значения Content-ID, использующиеся для частей, отличались от значения Content-ID, использующегося в заголовке верхнего уровня, если такое поле в нем присутствует.

    Подтип "multipart/digest"

    Этот подтип идентичен подтипу 'multipart/mixed', но имеет другую семантику. Например, для 'digest' значением по умолчанию является не "text/plane", а "message/rfc822".
    В соответствии с этим подтипом, письмо-дайджест может выглядеть следующим образом:
    From: Moderator-Address To: Recipient-List MIME-Version: 1.0 Subject: Internet Digest, volume 42 Content-Type: multipart/digest; boundary="---- next message ----" ------ next message ---- From: someone-else Subject: my opinion ... тело вложенного письма ... ------ next message ---- From: someone-else-again Subject: my different opinion ... тело другого вложенного письма ... ------ next message ------

    Подтип "multipart/parallel"

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

    Подтип 'Text/plain'

    Это основной подтип, соответствующий простому (неформатированному) тексту. Значение поля Content-Type для почты Internet по умолчанию - "text/plain; charset=us-ascii". Это тип данных, соответствующий RFC 822.
    Других предопределенных подтипов для типа 'text' нет.
    Формальный синтаксис для типа 'text':
    тип := "text" "/" подтип [";" "charset" "=" имя языковой кодировки] подтип := "plain" / расширение (не предопределенный подтип) имя языковой кодировки:= "us-ascii"/ "iso-8859-1"/ "iso-8859-2" / "iso-8859-3" / "iso-8859-4"/ "iso-8859-5"/ "iso-8859-6" / "iso-8859-7" / "iso-8859-8" / "iso-8859-9" / расширение (не предопределенная кодировка)

    Поле заголовка Content-Transfer-Encoding

    Многие типы данных, пересылаемых через email требуют "натурального" представления, то есть, 8-битный набор символов либо двоичный код (что для машины - одно и то же, только представимо для пользователя по-разному). В таком виде данные не могут быть пересланы по 7-битным почтовым протоколам, например, RFC 821, который, к тому же, ограничивает длину строки 1000 символами.
    Стандартные механизмы конвертирования почты в 7-битный короткострочный формат, приемлимый для почтового транспорта, описывает поле заголовка Content-Transfer-Encoding.
    В отличие от типов содержимого, увеличение множества значений Content-Transfer-Encoding не является необходимым и даже нежелательно. Но установление единого механизма конвертирования не представляется возможным. Существует противоречие между желанием эффективно "ужать" бинарные данные и желанием трансформировать данные, которые, хотя бы частично являются 7-битным текстом, так, чтобы их все-таки можно было читать. По этой причине необходимы по крайней мере 2 механизма конвертации: "читабельный" и "плотно ужимающий".
    Данное поле не было определено в предыдущих стандартах. Его значение должно быть строкой без пробелов, определяющей тип конвертации, как показано ниже:
    конвертация := "Content-Transfer-Encoding" ":" механизм механизм := "7bit" ; / "quoted-printable" / "base64" / "8bit" / "binary" / x-token
    Значения не чувствительны к регистру букв, то есть, Base64, BASE64 и bAsE64 - одно и то же. Значение "7BIT" означает, что тело письма уже имеет 7-битный формат и не тренбует дополнительной обработки для пересылки по почте. Это значение полагается по умолчанию, если поле заголовка Content-Transfer-Encoding отсутствует.
    Значения "8bit", "7bit" и "binary" означают, что никакой трансформации содержимого не производится. Однако, они сделаны различными для индикации того, что из себя представляет содержимое письма, и, соответственно, способа обработки, который может потребоваться для данной транспортной системы.
    В частности:

    "7bit" означает, что данные являются текстом, имеют короткие строки и языковую кодировку US-ASCII.

    "8bit" означает короткие строки, но в них могут содержаться не-ASCII символы (128-255).

    "Binary" означает, что тело письма может содержать не-ASCII символы, но строки могут быть произвольной длины, т.е. слишком длинными для SMTP-транспорта, и может несоблюдаться соглашение по признаку конца строки (CRLF), принятое в SMTP-транспорте.

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

    Спецификация на почтовый транспорт для пересылки некодированных 8-битных данных дана в RFC-1426. Однако, нет стандартизованных транспортов рочты Internet, для которых является приемлимым включение в тело письма некодированных двоичных данных. Таким образом, значение "binary" фактически не является легальным в Internet. Но в соответствии с MIME, при использовании почтовой системой транспорта, умеющего работать с двоичными данными, в случае, когда необходимо послать двоичные данные по e-mail, необходимо указать это в заголовке в поле Content-Transfer-Encoding.

    Пять значений, определенных для поля Content-Transfer-Encoding, ничего не говорят о типе содержимого кроме указания алгоритма кодирования либо требований к почтовому транспорту в случае некодированных данных.

    Производители почтового ПО, если необходимо, могут определить новые значения поля Content-Transfer-Encoding, но эти значения должны иметь префикс "X-" ("x-"), чтобы подчеркнуть их нестандартный характер. Однако, в отличие от типов и подтипов поля Content-Type, введение новых значений Content-Transfer-Encoding настоятельно не рекомендуется, так как может оказаться помехой для взаимосовместимости почтовых систем.


    Использование X- значений позволяется только как результат взаимосоглашения между взаимодействующими системами.

    Если поле Content-Transfer-Encoding появляеися в заголовке тела какой-то части письма, оно применяется только к содержимому этой части. Если письмо (часть письма) имеет тип "multipart" или "message", то поле Content-Transfer-Encoding может иметь в качестве своего значения только длину символа ("7bit", "8bit" и т.д.) или "binary".

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

    Все кодирующие механизмы, определенные в спецификации MIME, кодируют любые данные в символьную форму. Так, к примеру, полагая, что тело письма (части письма) имеет поля заголовка вроде:

    Content-Type: text/plain; charset=ISO-8859-1 Content-transfer-encoding: base64

    то это означает, что тело письма представляет собой ASCII-код base64 текстовых данных, которые в нормальном виде имеют языковую кодировку ISO-8859-1, и будут в этой языковой кодировке после декодирования.

    Все множество определенных значений поля content-transfer-encoding кроме начинающихся с префикса "X-", зарезервировано в IANA для будущего использования. Частные соглашения по значениям content-transfer-encoding также настоятельно не рекомендуются.

    Некоторые значения Content-transfer-encoding могут использоваться только с определенными типами (поле Content-Type). В частности, запрещено использовать любые значения кроме "7bit", "8bit", или "binary" с любым типом, рекурсивно включающим заголовки с полем Content-Type (как правило, это типы "multipart" и "message").Все кодирования, необходимые для содержимого тел многочастного письма должны быть произведены на более низком уровне.

    Поле заголовка "Content-Type"

    Назначение этого поля - наиболее полное описание данных, содержащихся в теле, с тем, чтобы почтовый агент (программа) получателя могла выбрать соответствующий механизм для их обаботки. Впервые это поле было определено в RFC 1049, но имело более простой синтаксис.
    Данное поле включает в себя идентификаторы типа и подтипа, а также может содержать некоторую вспомогательную информацию, которая может потребоваться для конкретного типа данных. После идентификаторов типа и подтипа оставшаяся часть поля - просто набор парамеров, заданных в порядке "атрибут/значение". Набор параметров зависит от типа данных. (В частности, не может быть глобально-значимых параметров, справедливых сразу для всех типов содержимого ьела письма. Глобальные механизмы в MIME-модели реализованы с помощью введения дополнительных полей "Content-*"). Очередность параметров значения не имеет. В числе определенных параметров - "charset", декларирующий символьный набор (кодировку, кодовую страницу - это все синонимы) тела письма. Комментарии допускаются.
    Вообще, поле Content-Type самого верхнего уровня используется для объявления общего типа данных, в то время как подтип определяет специальный формат для данных этого типа. Так, значение "image/xyz" поля Content-Type сообщает пользовательской программе, что данные являются графическим изображением (image), даже если эта почтовая программа не имеет понятия о специальном формате "xyz" этой картинки. Но эта информация может быть использована программой, например, чтобы решить, показывать ли пользователю строкоые данные неизвестного подтипа -- показ таких данных может быть оправдан для незнакомых подтипов текста, но не для незнакомых подтипов графики, аудио или видео. По этой причине, данные зарегистрированного подтипа аудио, графики, текста или видео не должны содержать внутри себя части другого подтипа - для содержания в письме данных одного типа, но разных подтипов следует использовать тип "multipart" или "application".

    Хотя многие параметры ( модификаторы подтипов) имеют смысл лишь для конкретного типа, некоторые все же являются глобальными в том смысле. что они применимы ко всем типам (например, параметр "boundary" применим только с типом "multipart", а параметр "charset" может использоваться с несколькими типами).

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

    Правильное заполнение поля Content-Type:

    содержимое := "Content-Type" ":" тип "/" подтип *(";" параметр) ; нечувствительное к регистру букв задание типа и подтипа тип := "application" / "audio" / "image" / "message" / "multipart" / "text" / "video" / признак нестандартного типа ; Все значения нечувствительны к регистру букв признак нестандартного типа := x- / iana- iana- := <общепринятый признак расширения, зарегистрированный соответ- ственно приложению "E" RFC 1521>

    x- := <Два последовательных символа "X-" или "x-", без пробела или другого символа между ними>

    подтип := слово ; регистр безразличен параметр := атрибут "=" значение атрибут := слово ; регистр безразличен значение := слово / строка в кавычках слово := любые ASCII-символы кроме пробелов, Ctrl-последова- тельностей и специальных символов Специальные символы:= "(" / ")" / "<" / ">" / "@" / "," / ";" / ":" / "\" / <">


    / "/" / "[" / "]" / "?" / "=" ; Эти символы используются в строке значений параметров

    Здесь набор специальных символов отличается от набора, определенного в RFC 822 только наличием символов "/", "?", "=" и отсутствием символа ".".

    Указание подтипа в данном поле является обязательным, т.к. нет подтипов по умолчанию. В отличие от имен типов, подтипов и параметров, значения параметров в общем случае являются чувствительными к регистру букв, но могут быть и нечувствительными - в зависимости от параметра. Например, значения границ multipart-письма являются чувствительными, а значение "access-type" для message/External-body не является.

    Существует два приемлимых механизма для введения новых подтипов для поля Content-Type:

  • Нестандартные значения (начинающиеся с "X-") могут быть опредлены по договоренности для двух или более общающихся друг с другом почтовых агентов (программ) без какой-либо внешней регистрации и стандартизации.

  • Новые стандартные значения подтипов должны быть документированы, зарегистрированы и опробованы в IANA, как описано в приложении "E" RFC 1521. Если новй подтип предлагается для широкого использования, формат, описываемый им, должен быть описан в опубликованной спецификации и, возможно, предложен к стандартизации.

    Семь предопределенных типов верхнего уровня, более детально, представляют собой следующее:

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


    multipart -- содержимое письма состоит из некоторого множества частей, содержащих данные различных взаимонезависимых типов. Изначально определено четыре подтипа:

  • "mixed" - основной;
  • "alternative" - для представления одних и тех же данных в разных форматах;
  • "parallel" - если разные части документа должны просматриваться одновременно;
  • "digest" - если каждая из частей тела письма имеет тип "message".

    message -- письмо в письме. Тело, содержащее данные типа "message", само является письмом или частью письма, полностью отформатированного в соответствии со стандартом RFC 822, которое, в свою очередь, может содержать свое собственное поле заголовка "Content-Type".

    Подтипы:

  • "rfc822" - основной;
  • "partial" - определен для частично-цитируемых писем для предотвращения фрагментирования тел содержащихся писем в случае слишком большой их общей длины для возможностей почтового транспорта;
  • "External-body" - используется, чтобы указать, что тело письма очень большое и находится вне письма.

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

    audio -- звуковая информация. Требует звуковое устройство (динамик или наушники) для вывода информации. Основной подтип - "basic".

    video -- видео. Требует специальных аппаратных и программных возможностей для отображения видео-информации. Единстванный изначально определенный подтип - "mpeg".

    application -- как правило, неинтерпретируемый двоичный код либо информация, предназначенная для обработки почтовой программой.
    Подтипы:
  • "octet-stream" - основной подтип; предназначен для неинтерпретируемых двоичных данных, для которых рекомендуемым действием является предложение пользователю сохранить в файл на диске.
  • "PostScript" - дополнительный подтип; применяется при пересылке PostScript-документов в теле письма.


    По умолчанию, письма, как и в стандарте RFC 822 пишутся простым (неразмеченным) текстом в языковой кодировке US-ASCII, что по спецификации MIME может быть описано как "Content-type: text/plain; charset=us-ascii". Это значение полагается, если поле Content-type не определено. Поэтому почтовая программа получателя может неверно истолковать содержимое письма, если при отправке не было указано поле Content-type, но на самом деле текст письма имеет другую кодировку или даже тип.

    При отсутствии поля Content-type или поля MIME-Version в заголовке MIME-письма нельзя быть точно уверенным, что письмо имеет языковую кодировку именно US-ASCII, поскольку могут еще встречаться почтовые программы, не использующие соглашения MIME. Но хотя возможно, что письмо, не содержащее в заголовке полей MIME-Version и Content-Type, может содержать все, что угодно, например, юниксовский tar-архив, сжатый gzip'ом и обработаный uuencode, все же, создателям почтовых программ рекомендуется оставлять этот факт без внимания и ориентироваться на значение по умолчанию, т.е. "text/plain; charset=us-ascii".

    Необходимо учесть, что в будущем ожидается заметное увеличение числа регистрированных типов и особенно подтипов содержимого писем. Если почтовая программа встретит неизвестное ей значение поля Content-type, она должна интерпретировать содержимое этого письма как "application/octet-stream" (см.выше).

    Поле заголовка "MIME-Version"

    Поскольку старый стандарт RFC 822 все еще используется, а MIME возможно, изменится и дополнится в будущем, почтовой программе необходимо знать, применен ли новый стандарт в конкретном письме или нет. Поэтому в заголовок ввелено новое поле "MIME-Version", объявляющее версию стандарта, в соответствии с которым написано данное письмо.
    Все почтовые сообщения, составленные в соответствии с MIME-стандартом, должны иметь это поле в своем заголовке, напрмер:
    MIME-Version: 1.0
    Так как возможно, в будущем формат заголовка письма может расшириться, формально содержание поля "MIME-version" дается следующим образом:
    версия := "MIME-Version" ":" 1*DIGIT "." 1*DIGIT
    Т.о., будущие значения версии формата, коорые могут заменить "1.0", должны быть целыми числами, разделенными точкой. Если письмо получено со значением версии MIME, отличным от "1.0", оно не будет рассматриваться почтовой программой, как соответствующее данной спецификации.
    Важно, что поле заголовка "MIME-Version", должно располагаться в самам начале письма. Это не обязательно для каждой из частей тела письма в случае многочастевого письма, но обязательно для заголовков частей типа "message", если и только если эта часть сама по себе декларирована как соответствующая спецификации MIME.
    Не возможно полностью определить как почтовая программа, поддерживающая MIME, должна интерпретировать письмо, имеющее значение MIME-version, отличное от "1.0". Но, как минимум, почтовая программа должна предупредить пользователя о том, что письмо написано в незнакомом ей формате.
    Все поля заголовка, включая MIME-Version, Content-type, и т.д., должны соответствовать общим синтаксическим правилам, определенным в RFC 822. В частности, допускается включение комментариев (т.е., следующие 2 примера эквивалентны):
    MIME-Version: 1.0 MIME-Version: 1.0 (Generated by GBD-killer 3.7)

    Полный пример Multipart-письма

    Данный пример иллюстрирует письмо из пяти частей: две - простой текст, одна - вложенное multipart-письмо, одна - размеченный текст и одна - вложенное письмо, содержащее текст в не-US-ASCII языковой кодировке. Третья часть (вложенное multipart-письмо) состоит из двух частей, требующих параллельного представления пользователю, - графическое изображение и звуковой фрагмент.
    MIME-Version: 1.0 From: Nathaniel Borenstein
    To: Ned Freed
    Subject: A multipart example Content-Type: multipart/mixed; boundary=unique-boundary-1 Это область преамбулы multipart-письма. Почтовые программы, понимающие формат multipart, должны игнорировать все, что в ней находится. Если же вы при получении подобного письма видите этот текст на экране, вам следует сменить почтовую программу. --unique-boundary-1 ...Здесь находится некоторый текст... [Обратите внимание, что предшествующая пустая строка означает, что поля заголовка не были заданы, и это - простой текст в языковой кодировке US ASCII.] --unique-boundary-1 Content-type: text/plain; charset=US-ASCII Это часть предыдущей части, но иллюстрирующая ясную, а не подразумеваемую типизацию содержимого. --unique-boundary-1 Content-Type: multipart/parallel; boundary=unique-boundary-2 --unique-boundary-2 Content-Type: audio/basic Content-Transfer-Encoding: base64 ... кодированный в base64 одноканальный звуковой фрагмент для час- тоты 8000 Hz в формате mu-law.... --unique-boundary-2 Content-Type: image/gif Content-Transfer-Encoding: base64 ... здесь находится кодированное в base64 графическое изображение.... --unique-boundary-2-- --unique-boundary-1 Content-type: text/richtext Это текст с разметкой
    в соответствии с определением RFC 1341
    Неправда ли, он крут?
    --unique-boundary-1 Content-Type: message/rfc822 From: (имя отправителя в US-ASCII) To: (адрес в US-ASCII) Subject: (subject в US-ASCII) Content-Type: Text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: Quoted-printable ... Некоторый текст в ISO-8859-1 ... --unique-boundary-1--

    А: Свойства и методы call объекта

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

    Свойство
    Описание
    Метод
    Описание
    Id Уникальный идентификатор call объекта, создается при первом вызове.
    Return_value return-значение вызываемого метода.
    Data Необработанные статусные данные в XML формате.
    Status Текущее состояние вызова, возможные значения:
  • -1 - ошибка
  • 0 - метод завершил работу
  • 1 - метод не завершил работу
  • Message Текстовая информация о вызове. Если вызов успешный, то message содержит "Complete". Если произошла ошибка, message содержит сообщение об ошибке.
    Callback Имя callback функции для данного вызова.
    error_callback Имя error callback функции для данного вызова.
    Context Контекстный параметр, передается при вызове и без изменений возвращается с call объектом.
    Wait Останавливает работу клиентского скрипта до завершения работы асинхронно вызванного серверного метода.
    Cancel Останавливает работу асинхронно вызванного метода.


    Пример скриплета

    В качестве примера создадим скриплет "Employee", хранящий ID сотрудника, его заработную плату, имеющий метод повышения зарплаты и реализующим одно событие. Определим read-only поле "Salary", read-write поле "EmpID", метод "RaiseSalary" повышающий зарплату и событие "Enough", когда зарплата превышает какой-то порог :). В нашем случае скриплет является COM Automation компонентой. Так как в свойстве "Salary" реализован только метод get_, то свойство доступно только для чтения.




    Синхронный вызов

    После настройки RS вы можете вызывать серверные методы из клиентского скрипта. По умолчанию вызов серверного метода осуществляется синхронно - клиентский скрипт останавливается до окончания работы вызываемого метода и возвращения результата работы.
    В качестве результата работы в клиентский скрипт возвращается объект call, который содержит результат работы и дополнительную статусную информацию. Свойство return_value объекта call содержит результат работы удаленного метода. Другие свойства объекта call позволяют получить информацию о статусе вызова удаленной процедуры.
    Если вы создали page объект, то можно использовать стандартный object.method() синтаксис для вызова процедуры. Но кроме этого есть возможность вызова серверных методов без page объекта.
    Для вызова серверного метода синхронно:
  • Если вы создали page объект, то вызов выглядит следующим образом:
    JavaScript: callObject = ASPObject.methodName(p1, p2[,...]) VBScript: set callObject = ASPObject.methodName(p1, p2[,...])
  • Если page объект создан не был, используется RSExecute() функция и вызов выглядит так:
    JavaScript: callobject = RSExecute(url, methodName, p1, p2[,...]) VBScript: set callobject = RSExecute(url, methodName, p1, p2[,...])
    Где:
  • сallObject - имя call объекта;
  • ASPObject - объект ссылающийся на ASP страницу.
  • url - URL ASP страницы содержащей описание серверных методов. Эта страница должна находится на том же сервере, что и страница осуществляющая вызов.
  • methodName - имя метода, который вы хотите исполнить.
  • p1, p2 - параметры необходимые для вызова methodName метода. Параметра передаются по значению. В качестве параметров могут быть переданы значения простых типов.
    В качестве примера рассмотрим скрипт в котором при нажатии на кнопку btnAdd вызывается серверный метод Add. В качестве параметров передается содержимое полей ввода txt1 и txt2, а результат выводится в текстовом поле txt3:

    Аналогичный вызов, но без использования page объекта:

    Как видно из второго примера для удаленного вызова используется функция RSExecute(). В качестве параметров передается URL ASP страницы, имя серверного метода и параметры.

    с двумя типами событий: onscripletevent

    DHTML скриплет может работать с двумя типами событий: onscripletevent событие и стандартные оконные события. Первое может быть инициировано в любое время из скриплета. Стандартные оконные события, такие как onclick, onkeypress, не могут быть инициированы самим скриплетом, но скриплет имеет механизм, оповещающий о событии контейнер. Скриплет реагирует на следующие стандартные оконные события:
  • onClick

  • onDblClick

  • onMouseDown

  • onMouseUp

  • onMouseMove

  • onKeyPress

  • onKeyUp

  • onKeyDown

  • Для работы со стандартными оконными событиями из контейнера необходимо написать обработчики событий в двух местах: один в скриплете для передачи уведомления о событии контейнеру, для этого вызывается метод bubbleEvent(), а другой в приложении, использующем скриплет для, непосредственной обработки события. Детальная информация о событии может быть получена через стандартный объект event. Рассмотрим простой пример передачи уведомления контейнеру о событии onKeyUp для поля ввода text1:

    Есть одна тонкость: при передаче сообщения сначала необходимо убедиться в том, что свойство скриплета frozen имеет значение false, для уверенности, что контейнер способен обработать событие.

    Note: Свойство frozen - read-only булево свойство скриплета; значение true означает, что на данный момент событие в контейнере обработано не будет.
    Если скриплет не содержит обработчика данного события или внутри обработчика не вызывается метод bubbleEvent, то уведомление о событии передано не будет.
    Скриплет взаимодействует со своим контейнером посредством события onscripletevent, содержащим два параметра: строку и произвольно выбранный объект. Обработчик события может выбирать, как реагировать на событие в зависимости от содержимого строчного параметра, а передаваемый объект содержит дополнительную информацию.


    По умолчанию скриплет не вызывает событий, которые могут быть обработаны в контейнере. Однако, реализуя Event interface handler можно добавлять события в скриплет. После этого появляется возможность инициировать события из скриплета в любое время. Для того чтобы добавить событие необходимо:
  • В элементе объявить об использовании Event interface handler, обеспечивающий механизм генерации событий.
  • Объявить о каждом событии, которое вы хотите иметь возможность вызывать.
  • Создать библиотеку типов для скриплета, чтобы контейнер имел возможность получить список возможных событий.
    В COM программировании уведомление о событиях происходит через dispatch идентификатор (dispid) - целое число, определяющее событие инициируемое компонентой. Dispid компилируется в библиотеку типов и затем используется приложением для связи с событием. В процессе создания библиотеки типов dispid создается автоматически, но вы можете определить его сами:
    .
    После определения события можно его вызывать с помощью метода fireEvent(), например:
    scriplet1.fireEvent("event2");

    Создание скриплета

    Файл описывающий скриплет(*.sct) - это XML файл, очень похожий на HTML, но содержащий специфические таги определяющие скриплет и его поведение. Остановимся поподробнее на создании скриплета. Скриплет содержит следующие элементы:
  • - таг ограничивающий определение скриплета.
  • - элемент содержащий информацию необходимую для регистрации скриплета как COM компоненты. Этот элемент может быть необязательным, если использующее скриплет приложение, например Internet Explorer, не использует напрямую реестр Windows при создании экземпляра скриплета.
  • - содержит объявление об используемых interface handlers для данного скриплета, определяющее к какому типу COM компонент будет принадлежать скриплет или какие дополнительные возможности предполагается использовать, например Event interface handler. В зависимости от COM типа в определяются свойственные ему методы, реализация которых ложится на вас. Предположим, вы объявляете об использовании Automation handler, определяющим ваш скриплет как COM Automation компоненту и тогда внутри , кроме объявления типа: определяются те методы и свойства, которые вы хотите сделать доступными.


  • Иногда необходимо чтобы скриплет был зарегистрирован. Для регистрации скриплета можно воспользоваться программой Regsvr32.exe или выбрав пункт Register по правому нажатию кнопки мыши на файле *.sct.

    Для того чтобы облегчить приложению, использующему скриплеты возможность узнать интерфейс скриплета, имеется возможность создать библиотеку типов. Библиотека типов содержит информацию о методах, свойствах и инициируемых событиях скриплета, а также количестве параметров необходимых для вызова методов. Для создания библиотеки типов необходимо выбрать пункт Generate Type Library в меню по правому нажатию кнопки мыши. Библиотека типов (*.tlb) создается в той же папке с именем скриплета и регистрируется в реестре Windows.

    По умолчанию при выполнении скриплета не выдается никаких сообщений об ошибках. Но можно включить режим, при котором отслеживаются синтаксические ошибки, проверяется корректность использования XML и появляется возможность отладки скриплета средствами script debugger. Для этого в элементе - предусмотрены следующие опции:

  • validate - при присвоении true, выполняется проверка XML элементов на корректность использования и синтаксические ошибки.
  • error - при присвоении true, позволяет получать сообщения об ошибках времени исполнения.
  • debug - при присвоении true, позволяет отлаживать скриплет с помощью script debugger.

    Если элемент не включен в файл, то все опции устанавливаются в false.

    Sprint

    Адрес в почте Спринт формируется по принципу X.400
    X.400:(C:страна,A:административный_домен,O:организация,UN:имя).
    В формате Internet адрес будет
    /UN=имя/O=организация/A=хост/C=страна/@sprint.com. Если
    A=SOVMAIL, то /UN=имя/O=организация/@sovmail.sprint.com.
    Если имя составное и пишется через точку (имя.отчество.фамилия),
    используется система записи через иницалы:
    первое слово G: (generic name), последнее S: (surname), среднее, если есть,
    I: (middle initial). Это преобразуется в G=имя/S=фамилия/ или
    G=имя/I=отчество/S=фамилия/. Задать имя как UN=имя.фамилия
    еще не пробовали. Обратно можно послать по адресу
    (SITE:INTERNET, "RFC-822":).
    Обратите внимание, что символ @ в Internet-адресе заменяется на
    (a), поскольку X.400 не допускает использования служебных символов
    в адресе. Все описанное выше относится к американскому шлюзу Спринт между
    X.400 и Internet. Этот шлюз является семибитным и русский текст не пропустит.
    Можно использовать специально созданный в системе SOVMAIL шлюз с "русским"
    Internet, пропускающий восьмибитную кодировку и осуществляющий преобразование
    между KOI-8 и русской кодировкой, принятой в SOVMAIL (она там не совпадает
    ни с одной стандартной). Чтобы отправить через этот шлюз письмо пользователю
    A.PETROV/CUSTOMERS надо задать адрес
    /G=A/S=PETROV/@customers.x400.rosprint.ru (работает не со всеми
    организациями) или /G=A/S=PETROV/O=CUSTOMERS/@x400.rosprint.ru
    Чтобы воспользоваться этим шлюзом для отправки писем из Спринт
    в Internet, используется следующий адрес (C:USSR, ADMD:SOVMAIL,
    PRMD:INTERNET, "RFC-822":)

    Выражаю благодарность
    ,
    ,
    Денису Гудыму (CompUnity,5/1997) и
    .
    Составитель .

    Сравнение двух подходов доступа к удалённому почтовому ящику: IMAP против POP

    Перевод с добавлениями , Сервер компании
    Оригинал статьи ""
    Director, Networks & Distributed Computing
    (С) 1996, University of Washington
    В настоящее время существует несколько различных подходов для построения распределённой почтовой инфраструктуры. Среди них: стратегия разделяемой файловой системы, частные LAN-ориентированные протоколы, X.400 P7 протокол и Internet протоколы для доступа к сообщениям. Цель данной статьи - кратко рассмотреть Internet протоколы: POP (Post Office Protocol), DMSP (Distributed Mail System Protocol) и IMAP (Internet Message Access Protocol). Из трёх вышеперечисленных, POP наиболее старый и поэтому самый известный. DMSP сильно ограничен в использовании, так как реализован только в одной программе PCMAIL и в первую очередь известен своей блестящей поддержкой отсоединённых (disconnected) операций. IMAP (на данный момент IMAP4 revision 1) предоставляет надмножество возможностей POP и DMSP, и предлагает хорошую поддержку всех трёх моделей доступа к удалённому почтовому ящику: offline, online и отсоединённый (disconnected). (См. определения в RFC-1733.)
    POP был разработан для поддержки offline обработки почты. Согласно offline парадигме почта доставляется на (обычно разделяемый) сервер, а пользователь ПК периодически запускает почтового клиента, который соединяется с сервером и выкачивает всю новую почту на ПК. Вся обработка почты, например её фильтрация, происходит на локальной машине.
    Об offline доступе можно думать как о сервисе "хранения и пересылки" (store-and-forward service), предназначенном для пересылки почты (по требованию) с почтового сервера на единственную конечную машину, обычно ПК или Mac. Однажды доставленные на конечную машину, сообщения удаляются с почтового сервера. Хотя ограничения offline доступа могут быть скомпенсированы использованием POP в online режиме, POP просто-напросто не имеет некоторой функциональности, требуемой для высококачественного online (или отсоединённого) доступа. В действительности, псевдо-онлайн режим доступа, поддерживаемый POP3, который заключается в том, что пользователь оставляет почту на сервере, часто требует наличие широко распространенного файлово-ориентированного протокола (remote file system protocol), для того, чтобы почтовый клиент сумел обновить почтовый ящик или установить флаги сообщения.

    IMAP также может применяться для offline доступа, но его мощь проявляется в первую очередь при online и disconnected доступе. В случае online доступа, почта также доставляется на разделяемый сервер, но клиент уже не осуществляет копирование всей почты зараз с последующим ее удалением с сервера. Online подход более клиент-серверный. В случае online доступа клиент может запросить у сервера заголовок сообщения или запросить поиск сообщения по некоторому критерию. Письма в хранилище сообщений могут быть помечены различными флагами статуса (например, письмо помечено для удаления или на него был послан ответ) и эти отметки сохраняются до тех пор пока не будут явно удалены пользователем (что может не произойти до следующей сессии). Если сказать вкратце, то IMAP позволяет манипулировать удаленными почтовыми ящиками, как будто они являются локальными. В зависимости от реализации IMAP клиента и почтовой архитектуры, которую пожелал иметь управляющий почтовой системой, пользователь может сохранять сообщения только на клиентской машине, только на сервере или иметь выбор сделать и то и другое.

    Как offline, так и online почтовые программы позволяют получить доступ к новым поступающим сообщениям на почтовом сервере с различных клиентских платформ. Однако на этом их сходство заканчивается. Эти две парадигмы отражают различные требования и стили использования, и они не очень хорошо комбинируются друг с другом. Offline доступ лучше подходит для людей, которые всегда используют единственную клиентскую машину. Он не очень хорошо подходит для таких задач как доступ к чьему-либо ящику входящих писем или ящикам с сохраненной корреспонденцией с различных машин в различное время. Все это можно объяснить тем, что при использовании offline ("скачал и удалил") доступа к почте с различных компьютеров, Ваша почта рассеивается по различным машинам, если только они не объединены общей файловой системой (в последнем случае Вы на самом деле имеете доступ в большей мере online, чем offline).


    С другой стороны, хорошим качеством offline доступа является то, что он минимизирует использование серверных ресурсов и время соединения, если используется удаленный доступ по модему. Суммируя всё вышесказанное, можно привести различия между online и offline парадигмами:

    Offline и online парадигмы отражают два различных способа использования почтового сервера:


  • Offline = скачивание почты по требованию на единственную клиентскую машину.
  • Online = интерактивный доступ к множеству почтовых ящиков со стороны многих клиентов.

    Преимущества offline парадигмы:


  • Минимальное время соединения с сервером.
  • Минимальное использование серверных ресурсов.

    Преимущества online парадигмы:


  • Способность использовать разные компьютеры в разное время.
  • Способность использовать "облегчённые" ("data-less") клиентские машины.
  • Платформо-независимый доступ к нескольким почтовым ящикам.
  • Возможность одновременного доступа к разделяемым почтовым ящикам.

    Основное преимущество online парадигмы состоит в том, что почтовые ящики с входящей и архивной почтой хранятся на сервере и к ним можно единообразно получить доступ с различных компьютеров в различное время. И всё это можно осуществлять без использования протоколов общего доступа к файлам (эти протоколы существуют далеко не на каждой платформе, могут уступать в производительности и вызывать проблемы блокировки файлов (file locking). Всё это не нужно для тех пользователей, которые всегда использует один и тот же компьютер для доступа к почте, но становится очень важным для тех, кто использует несколько компьютеров.

    Приведём теперь краткое сравнение протоколов POP3 и IMAP4

    Характеристики, общие для обоих протоколов


  • Оба поддерживают offline доступ
  • Почта доставляется на общий, всегда работающий почтовый сервер
  • Новая почта доступна с большего числа клиентских платформ и из любого места в сети
  • Протоколы открыты и стандартизованы (в Интернет есть соответствующие RFC)
  • Существуют и доступны всевозможные реализации, как клиентов, так и серверов (даже в исходниках)
  • Существуют клиенты для PC, Mac и Unix
  • Существуют коммерческие реализации
  • Ориентированы на Интернет, не требуют почтовых шлюзов SMTP
  • Оба протокола ориентированны только на считывание почты, для отсылки оба используют SMTP
  • Оба протокола поддерживают постоянные ID сообщений (POP3 - не все сервера), которые используются для disconnected доступа


    Преимущества POP3


  • Легче реализовать
  • Больше клиентов существует на данный момент

    Преимущества IMAP4


  • Может манипулировать постоянными флагами сообщений (Seen, Draft, Deleted,...) .
  • Может, как хранить сообщения, так и скачивать их. Есть возможность добавления сообщений в почтовый ящик.
  • Может работать с множеством почтовых ящиков (возможно даже иерархических).
  • Может поддерживать параллельный доступ к почтовым ящикам и параллельное их обновление.
  • Подходит для доступа к не почтовым данным, например к Usenet новостям или документам.
  • Может использовать offline доступ, для уменьшения времени соединения и используемого дискового пространства.
  • Позволяет осуществлять поиск писем на сервере.
  • Есть возможность скачать часть письма, причём можно скачать фрагмент начиная с любого места и любой длины.
  • Разработан специально для повышения производительности online доступа, особенно для медленных соединенией.
  • IMAP4 rev 1 поддерживает стандарт Unicode (почтовые ящики с Unicode именами, поиск сообщений)

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

  • Существуют "протоколы-компаньоны" (IMSP и его приемник ACAP) для хранения и манипулирования настройками пользователей.

    А теперь подробнее:

    IMAP может манипулировать постоянными флагами статуса сообщения, включающих "Seen", "Deleted", "Answered", а так же определенные пользователем флаги. IMAP позволяет хранить сообщения, а так же получать их с сервера. Пользователь может добавить сообщение из ящика входящих сообщений в архивный ящик (или наоборот) С помощью IMAP клиент может иметь доступ и управлять несколькими почтовыми ящиками. Это включает в себя как возможность именовать и получать доступ к различным архивным ящикам и ящикам для входящей почты, так и способность получать их список, создавать, удалять и переименовывать их. Эти почтовые ящики могут находиться как на одном, так и на разных почтовых серверах.


    IMAP клиент может позволить видеть их все одновременно и перемещать сообщения из одного ящика в другой.

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

    IMAP можно использовать для доступа к не почтовым данным, например к News-группам. Это удобно с точки зрения унификации метода доступа к различным классам информации. IMAP также поддерживает offline парадигму, которая позволяет экономить время соединения с сервером и серверные ресурсы. Offline доступ удобно использовать в ситуациях, когда доступ к серверу происходит только по дорогому коммутируемому соединению и многоплатформенный доступ к какому-либо почтовому ящику не требуется. Также выгодно использовать такой доступ, в случае если клиентская машина богата ресурсами, а сервер беден.

    Не все IMAP клиенты предлагают поддержку offline режима, но протокол это позволяет в полной мере. Для IMAP существует протокол-компаньон, предназначенный для управления настройками пользователей, который называется IMSP, Internet Message Support Protocol. IMSP позволяет независимый от расположения (многоплатформенный) доступ к персональным настройкам пользователя, например к адресной книге. [Его потомок ACAP позволяет хранить также настройки для серверов, групп пользователей. ACAP специально оптимизирован для уменьшения количества пересылаемых по сети данных, имеет богатые возможности по поиску на стороне сервера, позволяет управлять правами доступа к данным.]

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


    Очень полезным бывает отложить пересылку до подходящего момента некоторых сообщений или их частей [с сервера на клиентскую машину], если сообщения не представляют непосредственного интереса. Особенно это удобно в случае, когда соединение с сервером происходит по низкоскоростному каналу связи. В случае если сообщение содержит прикрепленные документы или мультимедиа данные, передача только части сообщения может оказаться большим преимуществом. Это можно достаточно наглядно ощутить, например, если Вы находитесь в гостинице и Вам присылают короткое сообщения с присоединенным 10Mb видео клипом.

    Эффективная обработка MIME сообщений является значимым преимуществом IMAP над POP. (MIME - это Multipurpose Internet Mail Extensions. Это Internet стандарт для кодирования сообщений, содержащих произвольные присоединенные файлы. После кодирования сообщений MIME их можно посылать с помощью SMTP.)

    Подытожив, можно сказать, что IMAP выигрывает у POP в трех областях:

    более богатая функциональность для манипулирования почтовым ящиком


  • возможность управлять несколькими почтовыми ящиками, а не одним

    примитивы для оптимизации производительности online доступа, особенно если дело касается больших MIME сообщений.

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

    Описание POP3 можно найти в RFC-1939. IMAP4 описан в RFC-2060.

    Список IMAP программного обеспечения можно найти по адресу , а список документов, имеющих отношение к IMAP можно найти .

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

    Также потенциальный интерес могут представлять: (подборка IMAP документов) и (данный документ является более полным описанием изложенных в статье идей, кроме того в нем детально описана терминология и предоставлена информация о протоколах POP и IMAP в контексте online доступа).

    * - добавления переводчика

    Тип 'Application'

    Этот тип используется для данных, неподпадающих под остальные категории, в частности, для данных, обрабатываемых прикладными почтовыми программами. Это информация, которая должна быть обработана соответствующим приложением для того, чтобы принять наглядную либо исполняемую для получателя форму. Предполагаемое использование для этого типа включает в себя пересылку файлов по почте, таблицы, данные для почтовых систем расписания, языки лдя "активной" (вычислительной) почты. (Последняя, в частности, может поднять проблемы безопасности, которые должны быть поняты разработчиками ПО и рассмотрены ниже в параграфе "Application/PostScript").
    Например, тот, кто занимается расписанием встреч, может определить стандартное представление информации о датах запланированных встреч. "Умный" пользовательский почтовый агент может использовать эту информацию для проведения диалога с пользователем, и может затем посылать в дальнейшем почту, основанную на том диалоге. Вообще, существует несколько "активных" почтовых языков, разработанных для специализированных программ, которые посылаются по почте и автоматчески запускаются в системе получателя.
    Подобные приложения могут быть определены как подтипы для типа "application". Изначально предопределено два подтипа: "octet-stream" и "PostScript".
    В общем, подтип для 'application' зачастую может быть именем приложения, для которого предназначены пересылаемые данные. Однако, это не означает, что любое имя прикладной программы может свободно использоваться как подтип для 'application'. Такие употребления (кроме подтипов, начинающихся с "x-") должны быть зарегестрированы в IANA.

    Тип 'Audio'

    Этот подтип означает, что тело содержит аудио-данные. Хотя пока еще нет консенсуса по "идеальному" аудио-формату для компьютеров, сейчас имеется сильная потребность в универсальном формате.
    Предопределенный подтип - "basic" введен в ответ на это требование, обеспечивая минимальный примитивный аудио-формат. Ожидается определение в дальнейшем более "богатых" форматов, обеспечивающих более высокое качество воспроизведения.
    Содержимое тела, имеющего подтип "audio/basic", - аудио-данные в 8-битной форме, кодированные с использованием ISDN mu-law. Формат, соответствующий этому подтипу, предполагает максимальную частоту звучания 8000 Hz и единственный канал.
    Формальный синтаксис лдя поля 'Content-Type':
    audio_тип := "audio" "/" ("basic" / подтип-расширение)

    Тип 'Image'

    Этот тип означает, что тело письма содержит графический объект. Его подтипы соответствуют конкретным графическим форматам. Их значения нечувствительны к регистру букв. Два предопределенных подтипа - "jpeg" для формата JPEG с кодированием JFIF, и "gif" - для формата GIF.
    Формальный синтаксис поля 'Content-Type':
    image_тип := "image" "/" ("gif" / "jpeg" / подтип-расширение)

    Тип 'message'

    При пересылке почты часто возникает необходимость включить внутрь письма другое письмо. Для этого и используется тип 'message'.
    Основной подтип - "rfc822" - не требует параметров в поле Content-Type. Дополнительные подтипы - "partial" и "External-body" - предполагают наличие параметров.
    ЗАМЕЧАНИЕ: Для перенаправляемой и возвращаемой почты можно было бы определить отдельные подтипы, однако, такая почта может пересылаться как multipart-письмо, в котором первая часть содержит некоторую пояснительную текстовую информацию, а другая, имеющая тип 'message/rfc822', содержит перенаправляемое/возвращаемое письмо. Подобный способ перенаправления/возвращения почты сохраняет информацию о типе оригинального письма и позволяет ему быть корректно представленным получателю, и поэтому настоятельно рекомендуется.

    Тип 'multipart'

    Этот тип используется, если один или более различных наборов данных заключены в одном письме. Каждая часть тела должна иметь синтакс письма RFC 822 (то есть, иметь заголовок,ь пустую строку и тело), но должна иметь открывающую и закрывающую границы.
    Часть письма не должна интерпретироваться как настоящее письмо RFC 822. Вообще, для части письма наличие заголовка не обязательно, так что она может начинаться и с пустой строки, но при этом, все признаки, описываемые в заголовке, имеют значение по умолчанию. Для частей письма имеют смысл только поля, описывающие содержимое, то есть. начтинающиеся с "Content-". Все остальные поля, необходимые в заголовке верхнего уровня, обычно игнорируются в частях письма при обработке почты, более того, в некоторых почтовых шлюзах они могут быть просто удалены. Для экспериментальных и частных целей могут использоваться "X-" поля, но информация, в них заложенная, может быть потеряна при прохождении некоторых почтовых шлюзов.
    ЗАМЕЧАНИЕ: Различие между письмом RFC 822 и частью письма MIME является маленькой, но важной. Шлюз между почтой Internet и X.400, например, должен иметь возможность отличить часть письма, содержащую графическое изображение, от части письма, содежащей вложенное письмо, телом которого является графическое изображение. Для представления последнего соответствующая часть письма должна иметь "Content-Type: message" и ее тело после пустой строки должно являться вложенным письмом со своим собственным полем заголовка "Content-Type: image". Схожесть синтаксиса обеспечивает легкость конверсии от письма к части письма, но различие между ними должно быть усвоено производителями ПО.
    Граница части письма не должна появляться внутри самой части письма.
    Все существующие и будущие подтипы типа "multipart" должны иметь идентичный синтаксис. Они могут различаться своей семантикой. Это требование гарантирует, что совместимые пользовательские агенты смогут по крайней мере распознать и разделить части многочастного письма, даже имеющего неизвестный им подтип.
    Как упомянуто в определении поля Content-Transfer-Encoding, использование других значений кроме "7bit", "8bit" или "binary" запрещено для типа "multipart". Почтовые шлюзы и другие почтовые агенты часто вносят изменения в заголовки верхнего уровня. В частности, они могут добавлять, убирать, переупорядочивать определенные поля. Такие изменения запрещены для заголовков частей письма, находяшихся внутри тела типа "multipart".

    Тип 'Text'

    Тип 'text' предназначен для пересылки текстовых материалов. Это значение поля - по умолчанию. Для обозначения языковой кодировки текста используется параметр "charset" для некоторых подтипов, включая основной подтип, "text/plain", соответствующий простому (неформатированному) тексту. В Internet'овской почте значением Content-Type по умолчанию является следующее: "text/plain; charset=us-ascii". Если текст является размеченным и нет соответствующего ПО для корректного визуального представления этого текста пользователю, имеет смысл сообщить ему подтип этих текстовых данных.

    Тип 'Video'

    Этот тип означает, что в теле письма содержится анимационное изображение, возможно, со звуком и цветом. Термин "video" используется безотносительно к технологии получения подвижного во времени изображения. Подтип "mpeg" указывает на видео, кодированное в соответствии со стандартом MPEG.
    Хотя MIME-стандарт запрещает смешение разнородных мультимедийных данных в одном теле (письма или части письма), многие так называемые "video"-форматы включают синхронизированный звук, что допускается для подтипов типа "video".
    Формальный синтаксис лдя поля 'Content-Type':
    video-type := "video" "/" ("mpeg" / подтип-расширение)

    Все определенные на сегодняшний день типы и подтипы


    ТИППОДТИП
    textplain
    richtext
    enriched
    tab-separated-values
    multipartmixed
    alternative
    digest
    parallel
    appledouble
    header-set
    messagerfc822
    partial
    external-body
    news
    applicationoctet-stream
    postscript
    oda
    atomicmail
    andrew-inset
    slate
    wita
    dec-dx
    dca-rft
    activemessage
    rtf
    applefile
    mac-binhex40
    news-message-id
    news-transmission
    wordperfect5.1
    pdf
    zip
    macwriteii
    msword
    remote-printing
    imagejpeg
    gif
    ief
    tiff
    audiobasic
    videompeg
    quicktime

    Значения полей Content-Type и subtype, а также другие параметры заголовка являются чувствительными к регистру букв, если только не оговорены исключения для конкретного значения параметра.

    Всплывающее меню

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

    При щелчке правой кнопкой мыши в области отображения скриплета всплывает меню, содержащее два пункта: "Add Hello" и "Add Goodbye", при выборе первого вызывается функция Hello(), при выборе второго функция Goodbye().

    Microsoft представила новую технологию создания

    В 1997 году, с появлением Internet Explorer 4.0, Microsoft представила новую технологию создания COM компонент получившую название скриплет-технология. Эта технология позволяет создавать COM компоненты средствами простых в использовании языков сценариев. Такие COM компоненты именуются скриплетами. Изначально скриплеты были ориентирован на создание компонент пользовательского интерфейса для Web страниц. Если вы знаете HTML и JavaScript, то вы легко освоите эту технологию.
    При описании скриплета используются DHTML (расширение HTML) и любой язык сценариев поддерживающий ActiveX Scripting interface. Т. к. скриплет базируется на DHTML и используется в HTML документах, то он получил название DHTML скриплет. DHTML скриплеты поддерживаются браузерами Internet Explorer начиная с 4.0 на любых платформах (Win, Mac, Unix), т. к. в открытой архитектуре скриплета нет ничего ограничивающего его в пределах Win32.
    Скриплет-технология получила развитие и позднее появился серверный скриплет, но в этой статье мы остановимся на рассмотрении DHTML скриплета и для экономии места будем его называть просто скриплетом.


    Пакет INN, автором которого является Рич Солц (Rich Salz), представляет полнофункциональный пакет программ для построения сервера новостей. Для взаимодействия с другими машинами используется стандартный протокол NNTP. Как и любой сервер новостей, система INN предполагает наличие по крайней мере одного поставщика новостей, а также наличие хостов, которым новости отсылаются (NNTP соседей называют newsfeeders). Кроме того, у сервера имеются клиенты, которые через "читалку новостей" обращаются к серверу для чтения и/или публикации новостей.
    Статьи (articles) в Usenet классифицируются по телеконференциям, которые подобно каталогам файловой системы имеют иерархическую структуру. Новости хранятся на сервере в дереве каталогов, имена которых формируются путем замены точек слэшами ("/"). Например, статьи из группы relcom.fido.ru.unix хранятся в каталоге /var/news/spool/articles/relcom/fido/ru/unix.


    Начнем с простого примера: вы заполняет форму в HTML странице. Если некоторые поля заполнены неверно, то после отправки формы, сервер, скорее всего, предложит исправить неверные значения. После исправления вы повторно отправляете форму и так до тех пор, пока все данные не будут заполнены правильно.
    Или предположим, что при перезагрузке страницы необходимо сохранить состояние переключателей в HTML странице или значения глобальных переменных в скрипте. Для этого приходится идти на манипуляции с HTML (например, hidden поля в форме для передачи дополнительных данных) или создавать сложный скрипт взаимодействия.
    В общем случае, верным будет следующее утверждение: для обеспечения интерактивного взаимодействия с сервером необходимо часто перегружать страницу.
    Как нетрудно догадаться Remote Scripting решает описанные выше проблемы. Так что же такое Remote Scripting.


    Со времени опубликования в 1982 г., стандарт RFC 822 определил и полностью или частично внедрил формат текстовых писем в почтовой системе Internet. Но с расширением его использования, обнаружился ряд ограничений, заметно ограничивающих удовлетворение пользовательских потребностей. В частности, возможность пересылки нетекстовых данных, например, аудио и графики, посто не была упомянута в RFC822, описывавшем лишь формат текстовых сообщеий. И даже в случае текста, RFC 822 обошел вниманием нужды пользователей, использующих расширенный набор символов, что характерно для азиатских и большинства европейских языков. Итак, требовалась дополнительная спецификация. Основное ограничение RFC822 - относительно короткие строки и 7-битная символьная таблица. Пользователям дляотправки нетекстовых данных приходилось конвертировать тело своего письма в 7-битную форму с помощью UUENCODE, BINHEX и др.
    Более очевидными стали ограничения RFC 822 при разработке почтовых шлюзов между хостами, использующими стандарт RFC822 и хостами, использующими стандарт X.400. X.400 имеет механизмы для включения нетекстовых данных в тело письма. В настоящее время стандарты для перевода почтовых сообщений из X.400 в RFC822 предполагают, что нетекстовые части тела письма должны быть сконвертированы (но не закодированы) в ASCII формат, либо должны быть "выброшены" из письма с уведомлением об этом получателя. А потеря информации крайне не желательна для пользователя.
    MIME разработан как расширяемый механизм с расчетом на то, что набор пар content-type/subtype будет расти со временем. Некоторые другие поля заголовка MIMЕ, включая имена наборов символов, также , вероятно, получат большее число возможных значений. С этой целью MIME определяет процесс регистрации через Internet Assigned Numbers Authority (IANA), как центр регистрации этих значений. Описание процесса регистрации можно найти в приложении E RFC 1521.


    Скриплет - это новая технология позволяющая создавать COM компоненты средствами простых в использования языков сценариев, для этого подходит любой язык сценариев поддерживающий MS ActiveX Scripting интерфейс. Скриплет появился в 1997 году с выходом в свет Internet Explorer 4.0 и изначально был ориентирован на создание UI (user-interface) компонент многократного использования для Web страниц. Все что необходимо было знать для создания скриплета - это DHTML и какой-нибудь язык сценариев (JScript, VBScript). Т. к. этот скриплет базировался на DHTML и использовался в HTML документах, то он получил название DHTML скриплет. DHTML скриплет обладает богатыми возможностями для создания компонент пользовательского интерфейса, но не обеспечивает многоцелевого назначения компонентной архитектуры вне браузера. Для снятия этого ограничения был разработан серверный скриплет, далее именуемый просто скриплетом.
    В результате мы имеем два варианта:
  • DHTML скриплет, базирующийся на DHTML и используемый для создания UI компонент.
  • Скриплет основанный на XML и языке сценариев, являющийся полноценной COM компонентой, о котором и пойдет речь в данном обзоре.

    Вызов серверных методов

    RS позволяет создать объект, который ссылается на ASP страницу, содержащую описание серверных методов. Это позволяет использовать стандартный object.method() синтаксис для вызова удаленных методов. Далее этот объект будем для простоты называть page объектом.
    Чтобы сослаться на ASP страницу как на объект необходимо в клиентском скрипте вызвать метод RSGetASPObject(), передавая URL и имя ASP страницы в качестве параметра.
    ASPobj = RSGetASPObject(url)

    Замечания по ограничениям конвертации:

    Необходимо предотвращать случаи вложенного кодирования, когда данные проходят через алгоритм конвертации несколько раз и должны столько же раз быть декодированы, чтобы быть читаемыми. Вложенное кодирование добавляет сложностей пользовательским почтовым программам: кроме очевидных проблем с множественной конвертацией, они могут скрыть основную структуру письма. В частности, они могут привести к тому, что несколько операций по декодированию могут потребоваться только для того, чтобы определить, объекты каких типов находятся в письме. Запрещение вложенного кодирования может осложнить работу некоторых почтовых шлюзов, но это будет меньшей проблемой по сравнению с трудностями для пользовательских почтовых программ.
    ЗАМЕЧАНИЕ ПО ПЕРЕВОДУ КОДОВ: Конверторы quoted-printable и base64 разработаны так, что данные после их применения легко взаимоконвертируемы. Единственный нюанс, возникающий в подобной ретрансляции - признак конца строки. При конвертации из quoted-printable в base64 перевод строки должен быть заменен последовательностью CRLF. Соответственно и наоборот, но ТОЛЬКО при конвертации текстовых данных.

    Замечания, соглашения и обобщения

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

    

        Общение: Бизнес - Переговоры