"плоского" текста: слишком разнятся базовая операторика и
ожидаемая эргономика этих двух типов прикладных программ.

Учащийся сталкивается с задачей манипулирования
"плоским" текстом как минимум два раза (при знакомстве с
электронной почтой и при изучении основ программирования),
соответственно, успевает познакомиться, как правило, с двумя разными
текстовыми редакторами (встроенными в почтовую программу и среду
программирования, соответственно). Как минимум два раза он
сталкивается и с задачей манипулирования размеченным текстом: один
раз его знакомят с word-процессором (как правило, в России под руку
подворачивается "пиратский" Microsoft Word, либо
бесплатно распространяемый StarOffice 5, либо дешевый "Лексикон",
исключения единичны), а затем ему преподносят основы HTML.


Знакомство с манипулированием текстом, таким
образом, оказывается бессистемным и фрагментарным, и, в лучшем
случае, автор учебника или учитель сумеют рассказать о том, что сфера
это, в общем-то единая, а показать это оказывается весьма
затруднительно.


Значительным шагом к систематизации опыта,
вырабатываемого школьным курсом, на наш взгляд, является
использование инструментария, позволяющего демонстрировать
возможность работы с размеченным текстом разными средствами. Это
значит, что к очевидным требованиям, предъявляемым к "учебному"
word-процессору (достаточность функций, локализованность,
мультиплатформенность, ценовая доступность), добавляется серьезное
пожелание: стандартность формата разметки.


Это сильно облегчает выбор. На самом деле, на
сегодня всем перечисленным требованиям удовлетворяет, по сути, лишь
одна программа. Но сначала -- немного о стандартах.


1.2 Стандарты разметки текста


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


Первый из них, это семейство, называемое
*ML-языками: на эти две буквы заканчиваются аббревиатуры их названий
-- GML, SGML, HTML, XML, -- а сами по себе эти буквы
означают просто "markup language" -- "язык
разметки".


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


За пределами этих типов -- огромное множество
нестандартных (и даже неопубликованных) форматов, зачастую
использующих не текстовую, а двоичную форму представления данных
(например, файлы Microsoft Word, "Лексикона" и т.п.). Это
исключает возможность использования для работы с такими данными
обычных текстовых редакторов и обработку их стандартными текстовыми
утилитами, а также сильно затрудняет обратную разработку формата с
целью обеспечения импорта и экспорта из независимо написанных
программ2.


Наверное, TeX имеет потенциал к использованию в
качестве примера языка разметки (или, точнее, языка генерации
разметки), однако вряд ли в средней школе -- отчасти потому, что
ориентирован на печатную форму в качестве окончательной формы
представления содержания, что представляет на сегодня если не
экзотический, то, во всяком случае, достаточно специальную область
применения компьютеров, в отличие от *ML-языков, в равной степени
ориентированных и на "экран", и на "бумагу".


1.3 Судьба *ML-языков


SGML достаточно давно (с 1986 г.) является
стандартом на разметку документов, принятым Международной
организацией стандартизации (серия ISO 8879). Парадокс заключается в
том, что до недавнего времени даже частичные реализации SGML были
сравнительно немногочисленными, и его использование ограничивалось
рамками государственных организаций (в массе своей оборонных и
научных) и крупных корпораций. Гораздо более широкое распространение
получили "похожие на SGML" языки, а именно, HTML
различных версий, являющийся одним из технологических столпов WWW.


HTML был сознательно создан как "игрушечный
SGML": он не обладал всей гибкостью и мощью последнего, но был
очень компактен и легок в реализации и изучении. Одна из сторон
"игрушечности" HTML заключается в том, что он
подталкивает пользователя к использованию физической, а не логической
разметки, и именно поэтому, на наш взгляд, его не стоит изучать в
школе.


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


Параллельное развитие двух близких по назначению
языков было очевидно нецелесообразным, поэтому дальнейшее развитие
WWW предполагает переход на XML -- "расширяемый язык
разметки", который превосходит по мощности, гибкости и
согласованности HTML и является полноценным SGML-приложением. Уже
сегодня наиболее развитые WWW-серверы генерируют HTML именно из XML;
непосредственно "понимать" последний постепенно учатся и
браузеры.


1.4 "Молодое поколение выбирает *ML!"


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



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


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


  • упростить за счет стандартизации задачу
    выбора (разработки) учебных программ и пакетов.



Задача доступного изложения основ XML и приемов
работы с ним сама по себе непроста, как дидактически, так и
технически (в частности, нужны определения типов документов (DTD) для
учебных задач, достаточно развитые для демонстрации возможностей
языка, но в то же время достаточно простые для понимания
XML-документов "с листа" и низкоуровневого
редактирования).


Однако одно из основных препятствий на пути
использования XML в школе -- неразвитость визуализирующих
редакторов -- уже отпало с появлением офисного пакета
OpenOffice.org (далее -- OO.o). Он сочетает привычные
пользователям ПК пользовательские интерфейсы с поддержкой стандартных
XML-приложений, таких, как "текстовый документ"
(программа OpenWriter), "электронная таблица" (OpenCalc),
"презентация" (OpenImpess), "формула"
(OpenMath), "гипертекст" (OpenWeb) и, что уже совсем не
характерно для "офисного" софта, "векторный
рисунок" (OpenDraw), их взаимного внедрения и связывания.


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


1.5 OpenWriter


OpenWriter (далее -- OW) -- это
неофициальное, но уже закрепляющееся название word-процессора из
комплекта свободных офисных прикладных программ ОО.о (официальным
названием, видимо, следует считать Ooowriter)3.




















Простой документ в окне
OpenWriter



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



  • физическое и логическое (через механизм
    стилей) форматирование документа в целом, отдельных страниц,
    разделов, абзацев и символов;


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


  • лингвистическую поддержку (корректные
    переносы, проверку орфографии и грамматики, тезаурус (русского
    грамматического и тезаурус-модулей пока нет));


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


  • импорт/экспорт унаследованных нестандартных
    форматов (в базовую поставку входит модуль только для Microsoft
    Office), а также плоско-текстовых и гипертекстовых форматов;


  • встроенный макроязык;


  • автоматическую нумерацию элементов,
    оглавления и указатели;


  • ... (назовите сами).



За подробностями отсылаю к [6-9].


Интересное, однако, начинается, когда мы посмотрим
на OW "с изнанки". Файлы с расширением имени ".sfx",
создаваемые им -- это PKZIP-архивы, содержащие (в простейшем
случае) набор XML-файлов, соответствующих (в терминах XML) манифесту,
содержанию документов, определению стилей и значениям текущих
настроек.


Заглянем в файл с содержанием (content.xml). Даже
не зная XML, и лишь ориентируясь в синтаксисе языка разметки, можно
понять, что файл содержит сначала определения стилей, использованных
в документе (даже "жесткое" форматирование имитируется в
OW путем создания неявных стилей), а затем размеченного указаниями на
эти стили текста. Смотрите, заголовок статьи размечен так:


<text:p text:style-name="P2">
<text:span text:style-name="T1">
Лекция 0.
</text:span>
<text:span text:style-name="T2">
OpenWriter --
</text:span>
<text:span text:style-name="T3">
свободный
</text:span>
<text:span text:style-name="T2">
word-
</text:span>
<text:span text:style-name="T3">
процессор
</text:span>
</text:p>


Понятно, что для форматирования использован один стиль абзаца "P2"
и три стиля символов "T1", "T2" и "T3".
Выше, в определениях стилей можно найти, что, допустим, "T2"
-- это


<style:style style:name="T2" style:family="text">
<style:properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
</style:style>


То есть "текстовый" (символьный) стиль, предполагающий
набор и отображение полужирным шрифтом.


Теперь content.xml может обрабатываться любым
XML-инструментом уже без использования OO.o. Его можно преобразовать
в HTML или проиндексировать, вывести на печать, просмотреть
браузером, поддерживающим XML. Произвольные определения документов
напрямую пока браузерами не поддерживаются, однако текст
(неформатированный) можно уже сегодня просмотреть, просто открыв
content.xml в Mozilla или другом браузере, поддерживающем XML.





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


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


2) он изначально платформенно-независим, и
пользование им не диктует практически никаких ограничений на выбор
операционной системы и операционной среды. Более того, навыки работы
с ним также в большой степени переносимы. Фактически, OO.o выглядит и
управляется одинаково под любой стандартной ОС (разработчики говорят
о поддержке Linux и Solaris; известно об устойчивой работе пакета под
FreeBSD), а также под Microsoft Windows 9x/Me и Microsoft Windows
NT/00/XP, есть экспериментальный порт (перенос) на "Макинтоши",
под MacOS X (по некоторой информации, в команду уже вошли
представители Apple Computers);


3) он использует в качестве языка разметки XML (не
только для размеченного текста, но также и для математических формул,
т.е. по сути, все его форматы суть приложения международного
стандарта разметки текста SGML). В качестве кодировки используется
Unicode, что позволяет забыть про третью (после классических "дураков
и дорог") российскую проблему с разнобоем в кодовых таблицах,
используемых для представления кириллицы в разных системах,


4) в команде разработчиков есть российские
программисты и фирмы, которым небезразличны перспективы его
применения в школе.


1.6 Ресурсы


Пакет OO.o входит во все "большие"
(многодисковые универсальные) дистрибутивы ОС Linux и во многие
"маленькие" (одно-, двух- и трехдисковые, исключая
ориентированные исключительно на серверное применение).


Мы рекомендуем обратить внимание на российскую
сборку OO.o, поставляемую с ALT Linux ("большой"
дистрибутив Master 2.0 и "маленький" Junior 2.0;
www.altlinux.ru) и ASPLinux 7.3 (в различных вариантах,
www.asplinux.ru). В ней раньше, чем в основной ветке, появляются
новые возможности, ориентированные на русскоязычного пользователя, в
то же время, задержка сборок новых версий (по отношению к основной
ветви разработок) минимальна.


Многоплатформенная (Linux и Microsoft Windows)
российская сборка доступна в составе сборника OpenOffice.ru, его
можно взять на сайте www.openoffice.ru или приобрести (список
реселлеров доступен на том же сайте) однодисковую коробку. О
российских сборках OOO под "Макинтош", Solaris и другие
ОС нам ничего не известно, и их пользователям можно порекомендовать
следовать по ссылкам с www.openoffice.org.


Основной русскоязычный ресурс, посвященный
OpenOffice, -- это тот же сайт www.openoffice.ru и его сателлиты
(включая http://docs.openoffice.ru).


Основной международный ресурс -- это базовый
сайт разработки (www.openoffice.org).


OO.o вообще и OW в частности пока освещены лишь в
сравнительно небольшом количестве публикаций. Внимания заслуживают
[6-9].


Лекция 2. Свободный инструментарий работы с
текстом


Обработка "плоских" (неразмеченных)
текстов -- одна из первых (после вычислительных задач и
управления приборами) и исключительно проработанная область
приложений компьютера.


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


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


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


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


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


2.1 Размеченный и "плоский"


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


Word-процессор определенным образом интерпретирует
разметку, визуализуя указанные атрибуты.


Текстовый редактор отображает текст "как
есть", хотя он вполне может быть "в курсе"
синтаксиса языка разметки (если текст размечен, например, XML, HTML
или TeX) или даже самого текста (например, синтаксиса языка
программирования) и каким-то образом на него реагировать (например,
расцвечивать теги разметки HTML или зарезервированные слова Pascal).
В принципе, он может быть "в курсе" синтаксиса,
грамматики и лексики даже естественного языка, хотя для работы с
естественными языками "плоский", неразмеченный текст
используется все реже, или, по крайней мере, неразмеченный текст все
реже используется как первичная форма представления текста на
естественном языке.


Отказаться вовсе от работы с "плоским"
текстом затруднительно по давно известной эргономистам причине:
использование визуализации "позволяет демонстрировать лишь
результат форматирования, по нему невозможно определить задачи
форматирования, поставленные пользователем системе. Например, если
пользователь замечает, что система не делает переносов ... невозможно
определить ... является ли это простым совпадением или же при
форматировании данной главы перенос запрещен" [10].


2.2 Редакторы


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


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


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


2.3 Vi и Emacs


Интересно, что два, по-видимому, первых экранных
редактора, созданных в начале семидесятых, и явились родоначальниками
"семейств" таких программ, до сих пор наиболее популярных
в профессиональной среде. Это vi Билла Джоя (тогда аспиранта
Университета Калифорнии в Беркли, а затем основателя Sun
Microsystems) и Emacs Ричарда Столлмена (тогда сотрудника Лаборатории
искусственного интеллекта Массачуссетского технологического
института, а ныне -- президента Фонда свободного программного
обеспечения и лидера проекта GNU). Оба они, по сути, происходят от
экранных режимов работы популярных тогда редакторов ed и TECO,
соответственно.















Милая Лена!
Ты не откажешься поужинать со мной в ночь с пятницы на воскресенье?
- Максим
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT -- 3,1 All



Редактор vi



Первый ныне стандартизован и, в той или иной
реализации (наиболее популярна, видимо, vim Брама Мооленаара)
доступен в составе любой стандартной операционной системы (в том
числе, свободных). Второй под названием GNU Emacs поддерживается
Фондом свободного ПО (www.fsf.org) и выдержал с тех пор более
двадцати изданий (релизов).


Исходная идеология и эргономическая модель этих
двух выдающихся разработок серьезно различается, что служит поводом
для шутливой "священной войны" между их приверженцами.
Vi(m) относится к так называемым "многорежимным"
редакторам. В режиме редактирования оператор вводит и исправляет
текст. Перемещение по тексту, контекстный поиск и замена, более
сложные операции выполняются в командном режиме. Между этими режимами
(а также, унаследованным от ed и редко применяющимся режимом
построчного редактирования) нужно явное переключение нажатием
клавиатурной комбинации. Зато большинство команд привязаны к нажатиям
одной клавиши, и даже перемещаться по тексту в командном режиме
можно, не сбрасывая кисть на дополнительную клавиатуру со стрелками,
а нажимая алфавитные клавиши в центре клавиатуры. Адепты vi --
программисты и системные администраторы -- очень серьезно
относятся к экономии времени и энергии за счет минимизации движения
пальцев.


Emacs -- пример "безрежимного"
или, если угодно, "однорежимного" редактора: пользователь
всегда находится в режиме непосредственного редактирования текста в
точке курсора, а команды издает, нажимая сложные сочетания клавиш и,
при необходимости, вводя параметры команд в отдельном окне. Из-за
стремления обеспечить прямую клавиатурную привязку как можно большему
количеству команд и следующей из нее сложности используемых
клавиатурных сочетаний был даже пущен слух о том, что Emacs
расшифровывается как "Esc-Meta-Alt-Ctrl-Shift" (хотя на
деле, конечно, клавиатурные аккорды все же не так сложны, а Emacs --
это просто Editing MACroS, т.е. "макрокоманды редактирования").


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


2.4 Дидактика редакторов


Реальное очень значимое отличие заключается в том,
что по своей архитектуре vi -- более или менее монолитная
программа (с вытекающей отсюда компактностью), а Emacs -- на
самом деле, расширяемая (программируемая) коллекция макрокоманд
редактирования, написанных на Emasc Lisp (диалекте известного языка
функционального программирования). Лишь небольшое количество часто
выполняемых и требовательных к ресурсам команд встроены в саму
программу и написаны на компилируемом C, большинство же команд
написаны на Lisp и могут изменяться или дополняться пользователями
(или профессиональными программистами по заказу пользователей).


За четверть века существования Emacs, благодаря
свободной модели лицензирования и открытой модели разработки, "оброс"
невероятным количеством макрокоманд, "затачивающих" его
под синтакcические особенности различных формальных языков (включая,
но не ограничиваясь языками программирования и языками разметки), а
также реализующих приложения, традиционно слабо ассоциируемые с
"просто редакторами". Например, не выходя из Emacs, можно
работать с электронной почтой и службами новостей USENET (а также с
гипертекстом со страничек WWW).


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


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