пользователей.

Все это (доступность, расширяемость,
интегрируемость) делает его серьезным претендентом на организацию
"учебного" рабочего пространства программиста .


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


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


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


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


2.5 Редактирование "без редакторов"


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


Рассмотрим очень формальную задачу. Допустим, в
файле note сохранен текст записки:


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


Если жизнь пошла по диагонали, и планы резко изменились (и мы отдаем
себе отчет, как именно), можно открыть файл с этим текстом в
текстовом редакторе, например, vi, и издать команду:


:s/Лена/Ира/g


Текст (предсказуемо) приобретет вид:


Милая Ира!
Ты не откажешься поужинать со мной в ночь с пятницы на воскресенье?
- Максим


Однако, то же самое действие можно выполнить и "без редактора",
а точнее, без интерактивного редактора, с помощью редактора
потокового. Стандартный потоковый редактор называется sed, и синтакис
его команд схож с синтаксисом командного режима стандартного
интерактивного редактора vi, команда при этом издается
непосредственно из командной строки:


$sed -n 's/Лена/Таня/g' note


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


$sed -n 's/Лена/Вера/g' note.*


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


2.6 Автоматизированная обработка текстов


UNIX был во многом "рожден для обработки
текстов" (прежде всего, это была система для программистов, а
программы -- с чего мы начали сегодняшнюю лекцию -- это
тексты). Набор служебных программ (утилит) современных стандартных ОС
продолжает эту традицию, и в их составе можно найти десятки программ,
ориентированных на работу с текстом. Многие из них (но не все)
являются построчно-ориентированными, то есть текст понимается как
последовательность строк. Подробное обсуждение этих возможностей см.
в "лекции" 6 "Строка длиною в жизнь".


2.7 Ресурсы


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


Для Microsoft Windows рекомендуется установка
пакета Cygwin, содержащего утилиты GNU (включая предназначенные для
работы с текстом) и некоторые другие программы (включая редактор
vim), позволяющие организовать стандартную рабочую среду. Следует
учесть, что при работе в версиях MS Windows, основанных на MS-DOS (MS
Windows 95/98/Me), у многих программ возникают сложности из-за
отсутствия контроля за правами доступа к файлам и каталогам (версии,
основанные на NT -- MS Windows NT/00/XP, лишены этого
недостатка), а также то, что локализованная для русской среды сборка
Cygwin в настоящее время не поставляется. Для поддержки кириллических
символов необходимо в каталоге пользователя создать файл с именем
".inputrc", содержащий строки:


set meta-flag on
set convert-meta off
set output-meta on


Альтернативой Cygwin (по ряду причин менее предпочтительной) является
использование системы Interix UNIX Tools for Windows, также
содержащей утилиты GNU (ее можно приобрести через Microsoft на диске
либо скачать с их сайта).


GNU Emacs для MS Windows можно скачать с сайта GNU
(www.gnu.org).


Хорошее описание стандартных утилит (в том числе,
для работы с текстом) содержится в недавно переведенной книге [11],
да и почти в любом толстом учебнике, руководстве или справочнике по
Unix или Linux. Серьезных отличий при их использовании в контексте
других ОС нет.
То же относится и к интерактивным редакторам.
Кроме того, в 1999 г. издан русский перевод шестисотстраничного
Руководства по GNU Emacs [12], его текст можно найти и на сайте GNU
(www.gnu.org); как и сам Emacs, эта книга свободна.


Лекция 3. OpenDraw -- свободный редактор
векторной графики



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


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


Элементарная обработка (создание и редактирование)
изображений (как векторных, так и растровых) входят в число
приложений, перечисленных в "Обязательном минимуме содержания
образования по информатике" [1] в качестве обязательных к
освоению в курсе средней школы.


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


3.1 Векторное и растровое кодирование изображений


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


Например, растровое изображение окружности может
быть таким: "заполняем квадрат 5х5: белая точка (Б), черная
точка (Ч), Ч, Ч, Б, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Б,
Ч, Ч, Ч, Б". (Более умные "форматы со сжатием",
возможно, позволят сократить запись до чего-нибудь, подобного:
"заполняем квадрат 5х5: Б, 3Ч, Б, 3(Ч, 3Б, Ч), Б, 3Ч, Б",
а то и еще более компактно, но суть не в этом).


Векторное ее изображение совсем другое: "черная
окружность с центром в (3,3), радиусом 2 и толщиной линии 1".


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


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


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


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


Векторное изображение может без ущерба
масштабироваться (увеличиваться или уменьшаться), причем эта операция
обратима. В приведенном примере мы можем без труда увеличить
векторную окружность в пять раз: "черная окружность с центром в
(15,15), радиусом 10 и толщиной линии 5", и она останется
окружностью.


А вот, растровое изображение при увеличении
обнаружит лишь свой растр в увеличенном виде (и на окружность наш
пример похож уже будет мало). Более того, операция уменьшения (или
увеличения в нецелое число раз) растрового изображения уже не
является обратимой: информация при осуществлении такой операции
безвозвратно теряется.


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


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


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


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


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


3.3 Свободные программы для работы с векторной
графикой


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



  • очень простой векторный редактор Xfig для
    оконной системы XFree86,


  • sodipodi (обычно поставляется со всеми
    операционными системами, включающими среду GNOME),


  • Kontour (компонент популярного "офисного"
    пакета KOffice)



и, наконец,



  • OpenDraw (входящая в пакет OpenOffice.org,
    знакомый нам уже по Лекции 1).



Рекомендуется при возможности хотя бы вкратце
ознакомиться с каждой из них, чтобы понять, какая лучше подходит для
конкретного учебного курса. В этой лекции далее будет обсуждаться
OpenDraw, исходя из преимуществ, уже описанных в "Лекции"
1, посвященной другому компоненту того же пакета --
word-процессору OpenWriter, но это не в коей мере не означает
непригодность для учебных целей прочего из перечисленного.


3.4 Общие характеристики OpenDraw


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


Этот пакет доступен для популярных стандарных
(Linux, Solaris) и нестандартных (Microsoft Windows, MacOS)
операционных систем и прилично (хотя и не идеально) локализован.


Самым же существенным недостатком OpenDraw
являются относительно высокие требования к аппаратным ресурсам,
поэтому его использование затруднительно на старых или маломощных
компьютерах (для комфортной работы над несложными учебными
упражнениями должно быть достаточно Intel P-II, Celeron или K6-2 с
частотой от 500 МГц или G3 с частотой от 350 МГц при памяти от 64
MБ). Если нужна демонстрация векторно-графических возможностей на
таких компьютерах, мы рекомендуем sodipodi или еще более "легкую"
XFig.


Сохранение в "чужих" векторных
форматах (экспорт) на сегодня реализовано только для ранних версий
предшественника OpenOffice.org пакета StarOffice (и StarDraw как
отдельной программы). Зато импорт (чтение "чужих"
форматов) возможен не только из универсальных векторных форматов, но
и из DXF, используемого в популярных системах автоматизированного
проектирования (САПР).


OpenDraw также позволяет экспортировать рисунок во
многие растровые форматы или в гипертекстовую страницу.


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


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


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


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


3.5 Основные возможности OpenDraw


Функциональность OpenDraw сопоставима с
большинством других редакторов векторной графики и включает:



  • cоздание, форматирование и преобразование
    объектов-графических примитивов: отрезков и стрелок; квадратов и
    прямоугольников; окружностей, эллипсов, дуг, сегментов и секторов;
    кривых Безье, "свободных" кривых, ломаных и
    многоугольников;


  • cоздание, форматирование и редактирование
    объектов-текстовых надписей (при вводе или редактировании текстов
    доступна большая часть функциональности word-процессора OpenWord
    (описанного в "Лекции" 1)). На самом деле, текст может
    содержаться в любом замкнутом контуре. В состав OpenDraw также
    входит декоративная функция FontWork, позволяющая расположить текст
    "фигурно" (вдоль дуги или окружности);


  • импорт растрово-графических объектов (в том
    числе, и в качестве текстур заливки векторно-графических
    примитивов).



Преобразование объектов включает:



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


  • перемещение, изменение размеров и поворот;


  • группирование (превращение нескольких в один)
    и разгруппирование объектов; комбинирование и раскомбинирование
    объектов (разница между группированием и комбинированием слишком
    тонка для нашего обзора);


  • вращение и зеркальное отображение;


  • преобразование примитивов -- линий и
    контуров -- в произвольные кривые или ломаные;


  • выравнивание и равномерное распределение (по
    вертикали или горизонтали, относительно края или центра);


  • специальные операции, некоторые из которых
    описаны ниже.



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


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


3.6 Механизм стилей


Важной особенностью OpenDraw является
использования механизма стилей для форматирования графических
элементов. Использование стилей в векторной графике вполне
сопоставимо с использованием того же механизма при оформлении
размеченного текста (см. "Лекцию" 1) и имеет те же
преимущества перед "жестким" форматированием/оформлением.


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


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


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


3.7 "Логические операции" над
объектами, "3D" и морфинг


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


Еще одной интересной особенностью программы
является встроенная в нее базовая функциональность имитации
трехмерной графики (3D-функции). Она ограничена 1) конструированием
тел вращения, 2) преобразованием в тела вращения произвольных
двумерных фигур, а также 3) экструзией (приданием последним
"глубины"). Трудно понять необходимость рутинного
конструирования тел вращения в "офисной" графике, однако
для школы возможность такой демонстрации возможностей компьютерной
графики может быть весьма полезна.


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


3.8 Векторизация растровых изображений



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


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


Ничего мистического в этой функции нет: программа
ищет связные области, залитые одним или близкими цветами, и описывает
их контур как многоугольник. Затем она группирует полученные фигуры
одного цвета и переходит к следующему цвету или группе цветов.
Результирующий векторный объект представляет собой группу, в свою
очередь состоящую из цветовых групп.


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


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


3.9 Ресурсы


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


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


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


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


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


Лекция 4. GIMP -- свободный редактор
растровой графики


В предыдущей "лекции", посвященной