УДК 372.800.2
ББК 74.263.2
О80
Использован текст лекций, публиковавшихся автором в приложении к газете "Первое сентября" "Информатика" (http://inf.1september.ru) в 2002-3 г., а также фрагменты статей, ранее публиковавшихся в журналах "Компьютерра" и "Домашний компьютер".
Материалы, представленные в этой книге, также доступны в Интернет на странице www.otstavnov.com/fsft на условиях Свободной лицензии ГНУ на документацию (GNU FDL). Все прочие права сохраняются за автором.
Максим Отставнов
О80 Прикладные свободные программы в школе. -- М.: Издательство "Медиа Технолоджи сервис", 200". -- 96 с.: ил.
ISBN 5-94842-003-5
Курс лекций, включенных в брошюру, знакомит читателя с популярными свободными прикладными программами, полезными при преподавании информатики в средней школе. В обзор вошли пакет "офисных" программ OpenOffice.org, коммуникационный пакет Mozilla, графический редактор GIMP, современные графические среды GNOME и KDE и другие программы.
Для преподавателей информатики, методистов и студентов и аспирантов соответствующих специальностей.
ВЉ 2002-3, Максим Отставнов.
ВЉ 2002, Андрей Добровольский (раздел 10.4).
Оглавление
Зачем программам быть свободными?
Лекция 1. OpenWriter -- свободный word-процессор
Лекция 2. Свободный инструментарий работы с текстом
Лекция 3. OpenDraw -- свободный редактор векторной графики
Лекция 4. GIMP -- свободный редактор растровой графики
Лекция 5. OpenCalc -- свободный редактор электронных таблиц
Лекция 6. Строка длиною в жизнь
Лекция 7. Графический интерфейс пользователя
Лекция 8. ГИП II: "Легкие" графические среды
Лекция 9. ГИП III: Интегрированные графические среды
Лекция 10. Свободные коммуникации
Литература
Об авторе
На сегодня в школе, как и в некоторых других сегментах рынка, доминируют "альтернативные", нестандарные операционные системы и платформы (такие, как MS-DOS, Microsoft Windows, Microsoft Windows NT, MacOS версий до X). Пользование ими описывается в учебниках, на них ориентируются авторы отечественных учебных программ.
В течение долгого времени "цена вопроса" просто не становилась поводом для сколько-либо серьезного анализа -- ни для кого не секрет, что доля контрафактного ПО в российских школах очень высока, а общественное мнение, увы, пока склонно считать "легальность" программного обеспечения вопросом более отвлеченно-академическим, нежели насущно-практическим, а уж там, где дело касается зарубежных правообладателей, -- относиться к нему не как к "пиратскому", а как к "трофейному" (что, впрочем, также имеет свои основания).
Имеются очень, на наш взгляд, веские причины, чтобы постепенно отказаться от этой недоброй традиции и вернуться в русло, более соответствующее магистральным линиям развития информационных и коммуникационных технологий:
нестандартные системы ненадежны и небезопасны. С распространением в школах компьютеров и особенно сетей (включая доступ к региональным и глобальным сетям) ущерб от вирусов, несанкционированного доступа к информации и т.п. станет заметной статьей издержек информатизации;
нестандартные системы дороги. Практически для всех стандартных технологий имеются свободные реализации (или, по крайней мере, конкурентный рынок реализаций), в то время, как ожидать появления свободной реализации, допустим, той же MS Windows API в обозримом будущем не приходится, и цены будут оставаться монопольно завышенными. Мы не сторонники "экономии на детях", но, право же, выделяемые на информатизацию школы деньги можно расходовать гораздо более разумно -- от их вложения в перспективные разработки до повышения окладов учителей и обслуживающего персонала;
нестандартные системы ограничивают выбор оборудования и зачастую предъявляют завышенные требования к его параметрам;
поставщик и партнеры нестандартных систем получают неосновательное преимущество в других сегментах рынка. Если целенаправленно подменять обучение в школе общим принципам и стандартным технологиям изучением конкретных программ, через некоторое время специфические навыки пользования ими распространятся в обществе настолько, что поставщикам конкурирующих технологий и решений пробиться на рынок будет совсем нелегко;
использование несвободного ПО отрезает учащихся (и их наставников!) от самых прогрессивных технологических решений.
Могут ли сегодня свободные реализации стандартных технологий качественно обеспечить учебный процесс в школе? Вопрос неоднозначный, и мы видим ответ на него двояким:
с технической точки зрения -- безусловно. Имеющийся пул СПО с избытком перекрывает потребности любого разумного учебного курса по информатике, причем большинство программ способно работать на массовом и недорогом оборудовании, распространенном в школах (ПК архитектур IBM PC и Apple Macintosh, терминальные классы от SUN на UltraSPARC и т.п.), включая весьма "пожилые" модели. Некоторые програмы требуют определенных усилий по локализации (переводу элементов интерфейса и документации), однако эти затраты на порядок меньше, чем стоимость "легализации" несвободных альтернатив;
с организационной -- все зависит от того, как поставить дело. Мы не беремся предсказывать масштабы и темп освоения свободного ПО российской школой, но заметим, что любые попытки волевого "насаждения" тех или иных решений или конкретных систем "сверху", на наш взгляд, к успеху не приведут.
Гораздо разумнее со вниманием отнестись к тому интересу, который уже проявляется учителями к свободному ПО (и наоборот, авторов и поставщиков свободных программ -- к учебному процессу) и поддержать процесс его освоения в том темпе, который окажется "естественным".
В начале текущего (2002-3) учебного года к автору обратилась группа методистов с предложением описать десяток наиболее применимых в школьной учебной практике программ. Полагая, что такой рассказ интересен и более широкой аудитории, автор договорился с редакцией "Информатики", приложения к газете "Первое сентября", о "цикле лекций" на страницах этого издания. В эту брошюру вошли материалы первых десяти "лекций", посвященных прикладным свободным программам.
Поскольку существует изрядная путаница с терминологией, имеет смысл привести определения далее используемых терминов. Это особенно уместно, когда мы говорим о программах в школе, ведь свободное ПО пока очень слабо проникло в эту важнейшую сферу применения компьютеров.
Свободными называются программы, автор (или иной обладатель имущественных авторских прав) которых опубликовал (обнародовал) их в сопровождении так называемой "свободной лицензии", или, если следовать терминологии отечественного законодательства, публичного авторского договора, передающего приобретателю права: 0) пользоваться программой для любых целей (в рамках российского законодательства это тавтология, так как у правообладателя нет правомочия ограничивать цели, в которых собственник экземпляра программы может ее применять) и на неограниченном количестве компьютеров или мест в сети; 1) беспрепятственно получать доступ к ее исходным кодам; 2) изготовлять (производить) неограниченное количество дополнительных ее экземпляров, как для собственного пользования, так и для распространения или сдачи в прокат/аренду на тех же условиях, возмездно или безвозмездно (по своему выбору); 3) модифицировать ее как для собственного пользования, так и для распространения на тех же условиях.
Конкретная "лицензия" (условия конкретного договора) могут предоставлять приобретателю дополнительные правомочия, безусловно или на определенных условиях, и это не делает программу несвободной. Несвободной является программа, распространяемая на условиях, ограничивающих вышеперечисленные права приобретателя.
Свободные программы (free software) не следует, как это часто делают, путать со "свободно распространяемыми" (shareware, иногда почему-то называемыми у нас "условно-бесплатными") или "бесплатными" (freeware).
Также следует иметь в виду, что, хотя термин "программы с открытыми исходниками" (open source software) часто используется как синоним "свободных программ", им иногда злоупотребляют.
Свободное ПО не следует путать и с "открытым" (open software): "открытость" относится к соблюдению стандартов на интерфейсы, и только, а свобода -- к условиям лицензирования и модели разработки.
И наконец, не следует путать "коммерческое" с несвободным, а "некоммерческое" -- со свободным. Хотя роль программистов, в порядке активизма или хобби пишущих и развивающих свободные программы, очень велика, значительная часть (вероятно, большая) свободного кода разрабатывается в коммерческих рамках. В то же время, существует большое количество некоммерческого несвободного кода (freeware).
Узел терминологических тонкостей и концептуальных сложностей можно разрубить, введя альтернативное определение: свободные программы -- это программы, все услуги по разработке, модификации, сопровождению и поддержки которых продаются на свободном рынке. Если вы видите, что, например, свободный дистрибутив какой-либо версии GNU/Linux, включающий, помимо операционной системы и нескольких операционных сред, большое количество прикладных программ, стоит от нескольких десятков до нескольких тысяч рублей, в то время, как "набрать" даже небольшую часть этой функциональности программами несвободными может обойтись и в десять, и в сто раз дороже1, причина этому не в "бесплатности" чего-либо, а в конкурентности рынка.
Мы избавим читателя от обсуждения анатомии рынка (как формируются цены, кто, за что и каким образом вознаграждается), отослав интересующихся к соответствующей литературе [2, 3]. Важно то, что соответствующий рынок успешно развивается уже в течении четверти века, есть примеры исполнения им задач, немыслимых для отдельных корпораций (самый яркий из них -- разворачивание в девяностых на основе свободных программ и систем всемирного сообщества сетей Интернет), и, наконец, то, что после многочисленных колебаний, лидеры компьютерной отрасли сегодня практически однозначно высказазываются в поддержку свободного ПО.
Информатика, будучи относительно молодым предметом в школьной практике (особенно в сравнении с учебными предметами, чей "возраст" превышает две тысячи лет), с неизбежностью вызывает споры среди теоретиков педагогики и практикующих учителей касательно своего содержания. Спорят и о том, прагматическая (знакомство с миром компьютерных технологий) или теоретическая (основы компьютерных наук) ориентация должна превалировать в школе, и о том, стоит ли программирование делать частью общего школьного образования, и даже о том, должна ли информатика развиваться в виде отдельного предмета. Периодически этот спор выплескивается за рамки профессионального педагогического сообщества на страницы печати, что также вполне понятно.
Мы попытаемся в данном случае уклониться от участия в этом споре и не заявлять свою позицию. Возможно, это не вполне соответствует традициям русского интеллигентского общества, в котором не принято, не решив ряда "последних вопросов" (в том числе, кто виноват, что делать и, главное, чему и как учить), предпринимать какие-либо действия. Но рамки у этого цикла лекций вполне прагматические, и можно только надеяться, что данные в таких рамках ответы окажутся в достаточной степени инвариантными для ответов на вопросы более глубокие (и, охотно согласимся, в конечном итоге более важные), и что-то полезное для себя в изложенном материале найдут партизаны самых разных точек зрения по этим глубоким и важным вопросам.
Упомянутые прагматические рамки заключаются в следующем. Точно так же, как кажется вполне осмысленным предположением, что для освоения грамотности и счета школьнику неплохо бы овладеть ручкой и карандашом и понять, чем одна от другого отличается (вне зависимости от того, выделяется ли чистописание в отдельный учебный предмет, как это было принято ранее, или же, как сейчас, освоение инструментов письма идет на тех же уроках, где ученик знакомится с буквами и их чтением), наличие в "Обязательном минимуме содержания образования по информатике" [1] списка приложений компьютера ("информационных технологий"), с которыми стоит познакомить школьников, протестов у нас не вызывает.
Среди них:
создание и редактирование текстов (в широком смысле),
создание и редактирование растровой графики,
создание и редактирование векторной графики,
работа с электронными таблицами,
работа с базами данных,
работа с электронной почтой и новостными конференциями,
обмен файлами в сетях,
работа с мультимедиа (только уровень Б),
работа с распределенными гипермедиа (WWW) в сетях.
Кроме того, другие пункты "Минимума" (не отнесенные авторами к "информационным технологиям") также с неизбежностью подразумевают знакомство с определенными приложениями компьютера (если, конечно, автор конкретного курса не предпочел чисто теоретический режим знакомства с материалом, соответствующим тому или иному пункту).
Например, для того, чтобы предметно показать учащимся разницу в различных способах представления (кодирования) информации (п. 2 "Обязательного минимума..."), неплохо иметь под рукой соответствующую программу просмотра. Знакомство с языками программирования (п. 5) предполагает и знакомство с интерпретатором или компилятором и другими компонентами инструментальной среды и т.д. и т.п. Ну и, разумеется, чтобы учащийся мог работать со всеми этими программами, ему необходимы базовые навыки обращения с операционной системой/средой (вне зависимости от того, присутствует ли такая тема отдельной строкой в учебном плане).
Поскольку, как упоминалось выше, СПО развивалось в направлении от инструментальных программ к системным и, далее, к прикладным, сегодняшнее положение дел, при котором все из перечисленных приложений имеют свободную реализацию, сложилось не сразу. Однако уже в течение нескольких лет основная масса свободных прикладных программ находится на уровне, достаточном для их применения в школьном учебном процессе, и в педагогическом сообществе постепенно накапливается опыт их использования.
В России, насколько нам известно, наиболее последователен в этом плане опыт Центра компьютерных технологий Московского государственного индустриального университета, сеть которого используется, в том числе, и для практических занятий учащихся московских школ.
В ноябре 2001 года, во время рабочей встречи "Свободное программное обеспечение", проведенной Высшей школой экономики и издательским домом "Компьютерра" в рамках разворачивания федеральной целевой программы "Электронная Россия" [2], было достигнуто принципиальное соглашение о том, чтобы учебные материалы, разработанные в ЦКТ МГИУ и касающиеся применения СПО в учебном процессе, были опубликованы также под свободной лицензией, и коллеги из МГИУ выполнили свое обещание, благодаря чему на их сайте можно найти учебник "Практическая информатика" [4] (также опубликован и выпущен в продажу в виде традиционного двухтомного издания).
Логика и последовательность изложения материала в этом курсе существенно отличается от логики, в которой написано большинство книг, посвященных СПО.
Чаще всего авторы исходят из того, что последовательность внедрения программ и пакетов, относящихся к различным категориям, будет соответствовать последовательности построения информационной системы (например, школьной сети). Это вполне оправдано в случае разработки и реализации такой системы "с нуля", однако может вызвать существенные сложности в ситуациях, когда система уже существует, развернута на базе несвободного (и, как следствие, почти всегда нестандартного) ПО, нужна поддержка ее роста и развития, и администрация учебного заведения обращается к СПО именно как к средству обеспечения такого развития.
"Сплошная миграция", при которой администрации необходимо внедрять (а всем пользователям, включая учителей и учащихся, осваивать) и системное, и прикладное (а в случаях, если проводятся какие-то свои разработки, и инструментальное) ПО одновременно, -- объективно очень сложный и болезненный процесс. Если говорить об учебном заведении, то он сложен вдвойне, поскольку очень разнится уровень пользователей различных категорий. Если говорить о школах, где единственный преподаватель информатики -- сам себе и учитель, и методист, и системный администратор, и лаборант (а не большинство ли наших школ таковы?), миграция по этому сценарию требует, без преувеличения, героических усилий, ожидать которых в массовом порядке не вполне разумно.
Однако поскольку значительная часть свободного прикладного программного обеспечения портирована (перенесена), в том числе, и в несвободное окружение (включая получившие широкое распространение в наших школах операционные среды Microsoft Windows и MacOS), миграцию можно облегчить, проведя ее в два этапа (которым в учебном заведении могут соответствовать два академических года): сначала прикладная часть, а затем -- системная.
В настоящей брошюре мы ограничились лишь прикладными программами, пакетами и платформами.
Изначально наша первая "лекция" задумывалась как простая презентация ряда свободных word-процессоров (AbiWord, Kword, OpenWriter) и программ, могущих использоваться в качестве таковых (издательская оболочка LyX и т.п.). Однако уже первые шаги по определению структуры таблицы, представляющей их характеристики, и ее наполнения, заставили задуматься: а что вы с этим потом будете делать?
И "Обязательный минимум...", и большинство конкретных учебных планов предусматривает знакомство лишь с базовой функциональностью программ манипуляции текстами, и любой из перечисленных процессоров гарантированно и с избытком перекроет требования (так же, как и масса присутствующих на рынке несвободных программ, таких, как Microsoft Word, "Лексикон", StarOffice или WordPerfect). Поскольку большинство из них так или иначе развивают основные интерфейсные подходы WordPerfect, существенного (и могущего быть выявленным в пределах тех немногих часов, что учитель в состоянии уделить этой теме) эргономического различия между ними нет.
Значит основания для рационального выбора программы нужно искать не внутри темы манипулирования тестами, а в ее связи с другими учебными темами. У программистов есть такой эмпирический принцип: когда начинаешь путаться в программах, отложи их в сторону и попытайся разобраться со структурами данных -- сам удивишься, насколько очевидными и простыми окажутся после этого решения, касающиеся программ. Возможно, этот принцип разумно применять и пользователям.
Давайте попробуем отложить в сторону программный инструментарий и разобраться с тем, какого рода данные мы им обрабатываем.
Водораздел между текстовыми редакторами (заслуживающими отдельной лекции) и word-процессорами проходит по критерию способа отображения размеченного (имеющего некоторые атрибуты, такие, как цвет, начертание и кегль (размер) символов, выключка (выравнивание) и расположение абзацев, оформление страницы и т.п.) текста. Текстовый редактор отображает его как есть, например:
<курсив>Предложение, набранное курсивом.</курсив>
а word-процессор визуализирует эти атрибуты, например:
Предложение, набранное курсивом.
Визуализацию иногда путают с так называемым WYSIWYG-принципом (сокращение от "What you see is what you get" -- "Что видишь, то и получишь").
Однако в общем случае это неверно: WYSIWYG-идеология унаследована от эпохи персональных компьютеров, когда в ходе "малой компьютеризации" отдельные офисы и рабочие места становились "островами" безбумажных технологий в море бумажной коммуникации, и компьютерное представление мыслилось лишь промежуточной или предварительной формой существования текста или документа.
Сегодня большинство документов никогда не попадает на принтер, и нет нужды подстраиваться под архаичный бумажный документооборот. Вполне возможно, что автору или редактору удобнее выделение не курсивом, а подчеркиванием:
Предложение, набранное курсивом.
Более того, современные технологии (например, HTML или XML-оформление текстов) изначально предполагают, что читатель документа может устанавливать собственные предпочтения в визуализации, зависящие от особенностей используемого им оборудования (размеров и разрешающей способности монитора и т.п.) или от своих биологических особенностей (слабого зрения, дальтонизма и т.п.), и в общем случае они могут не совпадать с предпочтениями автора или редактора.
Таким образом, один и тот же документ может быть отображен с разметкой, с визуализацией, а иногда -- и с разметкой и с визуализацией.
|
|
|
Один и тот же гипертекстовый документ, отображенный браузером Mozilla с разметкой, с визуализацией и с использованием обоих способов визуализации
Хотя на рисунке нам удалось показать три типа отображения одного и того же документа, не выходя из одного прикладного пакета, это не такой частый случай. На самом деле текстовые редакторы, как правило, не имеют способности непосредственной визуализации вообще или обладают ею лишь в зачатке (как, например, Emacs, способный визуализировать формат Enriched text, но Emacs это не просто редактор, а целая операционная среда), а word-процессоры, в свою очередь, крайне неудобны для редактирования "плоского" текста: слишком разнятся базовая операторика и ожидаемая эргономика этих двух типов прикладных программ.
Учащийся сталкивается с задачей манипулирования "плоским" текстом как минимум два раза (при знакомстве с электронной почтой и при изучении основ программирования), соответственно, успевает познакомиться, как правило, с двумя разными текстовыми редакторами (встроенными в почтовую программу и среду программирования, соответственно). Как минимум два раза он сталкивается и с задачей манипулирования размеченным текстом: один раз его знакомят с word-процессором (как правило, в России под руку подворачивается "пиратский" Microsoft Word, либо бесплатно распространяемый StarOffice 5, либо дешевый "Лексикон", исключения единичны), а затем ему преподносят основы HTML.
Знакомство с манипулированием текстом, таким образом, оказывается бессистемным и фрагментарным, и, в лучшем случае, автор учебника или учитель сумеют рассказать о том, что сфера это, в общем-то единая, а показать это оказывается весьма затруднительно.
Значительным шагом к систематизации опыта, вырабатываемого школьным курсом, на наш взгляд, является использование инструментария, позволяющего демонстрировать возможность работы с размеченным текстом разными средствами. Это значит, что к очевидным требованиям, предъявляемым к "учебному" word-процессору (достаточность функций, локализованность, мультиплатформенность, ценовая доступность), добавляется серьезное пожелание: стандартность формата разметки.
Это сильно облегчает выбор. На самом деле, на сегодня всем перечисленным требованиям удовлетворяет, по сути, лишь одна программа. Но сначала -- немного о стандартах.
Существует и доказали свою устойчивость два основных типа языков разметки.
Первый из них, это семейство, называемое *ML-языками: на эти две буквы заканчиваются аббревиатуры их названий -- GML, SGML, HTML, XML, -- а сами по себе эти буквы означают просто "markup language" -- "язык разметки".
Второй -- разработанный выдающимся американским теоретиком и практиком программирования Дональдом Кнутом язык программирования верстки TeX (это греческий корень, он читается как русское "тех", а не как "текс") и его расширения (например, LaTeX). Не будучи официальным стандартом, ТеХ постепенно вытесняет и замещает прочие языки разметки, предназначенные для набора и верстки текстов (TeX и системы на его основе плохо приспособлены для верстки т.н. "иллюстрированных изданий" с характерным для них богатым насыщением текста графикой, сложными обводами и наложениями текста на графику и пр., и этот сегмент рынка остается пока не стандартизованным).
За пределами этих типов -- огромное множество нестандартных (и даже неопубликованных) форматов, зачастую использующих не текстовую, а двоичную форму представления данных (например, файлы Microsoft Word, "Лексикона" и т.п.). Это исключает возможность использования для работы с такими данными обычных текстовых редакторов и обработку их стандартными текстовыми утилитами, а также сильно затрудняет обратную разработку формата с целью обеспечения импорта и экспорта из независимо написанных программ2.
Наверное, TeX имеет потенциал к использованию в качестве примера языка разметки (или, точнее, языка генерации разметки), однако вряд ли в средней школе -- отчасти потому, что ориентирован на печатную форму в качестве окончательной формы представления содержания, что представляет на сегодня если не экзотический, то, во всяком случае, достаточно специальную область применения компьютеров, в отличие от *ML-языков, в равной степени ориентированных и на "экран", и на "бумагу".
SGML достаточно давно (с 1986 г.) является стандартом на разметку документов, принятым Международной организацией стандартизации (серия ISO 8879). Парадокс заключается в том, что до недавнего времени даже частичные реализации SGML были сравнительно немногочисленными, и его использование ограничивалось рамками государственных организаций (в массе своей оборонных и научных) и крупных корпораций. Гораздо более широкое распространение получили "похожие на SGML" языки, а именно, HTML различных версий, являющийся одним из технологических столпов WWW.
HTML был сознательно создан как "игрушечный SGML": он не обладал всей гибкостью и мощью последнего, но был очень компактен и легок в реализации и изучении. Одна из сторон "игрушечности" HTML заключается в том, что он подталкивает пользователя к использованию физической, а не логической разметки, и именно поэтому, на наш взгляд, его не стоит изучать в школе.
Однако добавление все новых и новых возможностей и конструкций в HTML в ходе его развития привело к тому, что сложность его существенно выросла и приблизилась к сложности SGML-приложений, при сохраняющейся несовместимости с SGML.
Параллельное развитие двух близких по назначению языков было очевидно нецелесообразным, поэтому дальнейшее развитие WWW предполагает переход на XML -- "расширяемый язык разметки", который превосходит по мощности, гибкости и согласованности HTML и является полноценным SGML-приложением. Уже сегодня наиболее развитые WWW-серверы генерируют HTML именно из XML; непосредственно "понимать" последний постепенно учатся и браузеры.
На наш взгляд, принципы расширяемой разметки, реализованные в XML, могут и должны стать одной из базовых составляющих компьютерной грамотности и обязательно должны найти свой путь в школьные учебные планы. Это позволит:
подвести единую основу и логически связать такие темы, как манипуляция размеченным текстом, гипертекстом и гипермедиа, векторной графикой, электронными таблицами и т.п.,
приблизить школьную информатику к реальным тенденциям развития информатики и информационной отрасли вообще, вывести ее из закутка "персонального компьютинга",
упростить за счет стандартизации задачу выбора (разработки) учебных программ и пакетов.
Задача доступного изложения основ XML и приемов работы с ним сама по себе непроста, как дидактически, так и технически (в частности, нужны определения типов документов (DTD) для учебных задач, достаточно развитые для демонстрации возможностей языка, но в то же время достаточно простые для понимания XML-документов "с листа" и низкоуровневого редактирования).
Однако одно из основных препятствий на пути использования XML в школе -- неразвитость визуализирующих редакторов -- уже отпало с появлением офисного пакета OpenOffice.org (далее -- OO.o). Он сочетает привычные пользователям ПК пользовательские интерфейсы с поддержкой стандартных XML-приложений, таких, как "текстовый документ" (программа OpenWriter), "электронная таблица" (OpenCalc), "презентация" (OpenImpess), "формула" (OpenMath), "гипертекст" (OpenWeb) и, что уже совсем не характерно для "офисного" софта, "векторный рисунок" (OpenDraw), их взаимного внедрения и связывания.
По сути дела, OO.o -- это "троянский конь", заброшенный в мир "малой компьютеризации": "снаружи" он похож на "офис", а "изнутри" (или "с изнанки") представляет собой набор XML-инструментов. "Офисной" стороной он обращен к опыту пользователей персональных компьютеров, инструментальной -- к современным, постперсональным вычислительно-коммуникационным системам (включая локальные сети и сети Интернет с возможностями безбумажного документооборота и совместной работы над документами).
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) в команде разработчиков есть российские программисты и фирмы, которым небезразличны перспективы его применения в школе.
Пакет 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].
Обработка "плоских" (неразмеченных) текстов -- одна из первых (после вычислительных задач и управления приборами) и исключительно проработанная область приложений компьютера.
Работа с текстами критична для многих пользовательских приложений. Электронная почта -- это текст. Форматы разметки, посредством которых представлены форматированный текст, векторная графика, ноты и т.п. (практически все данные, за исключением растровой графики и волнового представления звука) -- в основе своей также текст.
Даже картинки и звуковые файлы, размещенные в WWW, передаются незаметно для пользователя между машинами в закодированной текстом форме, хотя в данном случае текст и не является "собственной" формой представления данных.
Команды, с помощью которых пользователь "общается" с системой -- это текст. Сколько бы не популяризовали и не навязывали графические интерфейсы, для серьезной и продуктивной работы, как правило, не обойтись без полноценного тестового диалога, так же как при серьезном и предметном разговоре сложно обойтись жестами и ответной мимикой.
Более того, работа с текстом критична и для развития самих вычислительных и коммуникационных систем, поскольку сами программы в исходной своей форме -- тексты. Для программ на интерпретируемых языках тексты являются и исполняемой формой, так что такие программы -- тексты вдвойне (а типичная стандартизованная ОС почти наполовину состоит из "сценариев", т.е. программ, написанных на интерпретируемых языках).
Эффективные методы и приемы работы с текстом -- неотъемлемая часть компьютерной грамотности, но в подавляющем большинстве случаев они оказываются не освоенными вовремя. Зачастую в курсе средней школы знакомство с обработкой "плоских" текстов ограничивается встроенными редакторами в среде программирования и электронно-почтовой программе, а навыки -- простейшими приемами набора и исправления. Более абстрактные и всеобщие операции изучаются как часть word-процессинга, и хотя иногда при этом и демонстрируются возможности встроенных в word-процессоры языков программирования, область обработки текстов остается "вещью в себе" и никак не интегрируется с другими областями, осваиваемыми в курсе информатики.
Водораздел между текстовыми редакторами и word-процессорами, как это обсуждалось в предыдущей лекции, проходит по способу отображения размеченного (имеющего некоторые атрибуты, такие, как цвет, начертание и кегль (размер) символов, выключка (выравнивание) и расположение абзацев, оформление страницы и т.п.) текста.
Word-процессор определенным образом интерпретирует разметку, визуализуя указанные атрибуты.
Текстовый редактор отображает текст "как есть", хотя он вполне может быть "в курсе" синтаксиса языка разметки (если текст размечен, например, XML, HTML или TeX) или даже самого текста (например, синтаксиса языка программирования) и каким-то образом на него реагировать (например, расцвечивать теги разметки HTML или зарезервированные слова Pascal). В принципе, он может быть "в курсе" синтаксиса, грамматики и лексики даже естественного языка, хотя для работы с естественными языками "плоский", неразмеченный текст используется все реже, или, по крайней мере, неразмеченный текст все реже используется как первичная форма представления текста на естественном языке.
Отказаться вовсе от работы с "плоским" текстом затруднительно по давно известной эргономистам причине: использование визуализации "позволяет демонстрировать лишь результат форматирования, по нему невозможно определить задачи форматирования, поставленные пользователем системе. Например, если пользователь замечает, что система не делает переносов ... невозможно определить ... является ли это простым совпадением или же при форматировании данной главы перенос запрещен" [10].
Когда компьютеры были большими и дорогими, речь об их использовании для автоматизации процесса редактирования программ или других текстов идти не могла: эта задача решалась гораздо более простыми устройствами.
С удешевлением компьютерной техники и разработкой многопользовательских систем появилась возможность посадить оператора за подключенный к машине телетайп. Для удобства операторов (часто ими оказывались сами программисты) разрабатывались программы редактирования текстов (или, попросту, текстовые редакторы), как правило, выводившие текст построчно и ожидавшие клавиатурной команды (зачастую на особом изощренном языке), сообщающей, следует ли оставить строку неизменной, либо внести в нее какие-то изменения.
Следующий шаг был сделан, когда телетайп в качестве терминального устройства сменил дисплей с ЭЛТ. Это превратило текст перед глазами оператора в динамический и позволило совершить революцию, внедрив нак называемые "полноэкранные" (или просто "экранные") редакторы, взаимодействуя с которыми, оператор получил возможность, хотя и манипулируя клавиатурой, применять технику, скорее похожую на приемы работы с листом бумаги писателя, возвращающегося к ранее написанному, стирающего и исправляющего текст нелинейно (представители некоторых школ в информатике до сих пор считают, что это негативно повлияло на стиль программирования).
Интересно, что два, по-видимому, первых экранных редактора, созданных в начале семидесятых, и явились родоначальниками "семейств" таких программ, до сих пор наиболее популярных в профессиональной среде. Это vi Билла Джоя (тогда аспиранта Университета Калифорнии в Беркли, а затем основателя Sun Microsystems) и Emacs Ричарда Столлмена (тогда сотрудника Лаборатории искусственного интеллекта Массачуссетского технологического института, а ныне -- президента Фонда свободного программного обеспечения и лидера проекта GNU). Оба они, по сути, происходят от экранных режимов работы популярных тогда редакторов ed и TECO, соответственно.
Милая Лена! |
Редактор vi |
Первый ныне стандартизован и, в той или иной реализации (наиболее популярна, видимо, vim Брама Мооленаара) доступен в составе любой стандартной операционной системы (в том числе, свободных). Второй под названием GNU Emacs поддерживается Фондом свободного ПО (www.fsf.org) и выдержал с тех пор более двадцати изданий (релизов).
Исходная идеология и эргономическая модель этих двух выдающихся разработок серьезно различается, что служит поводом для шутливой "священной войны" между их приверженцами. Vi(m) относится к так называемым "многорежимным" редакторам. В режиме редактирования оператор вводит и исправляет текст. Перемещение по тексту, контекстный поиск и замена, более сложные операции выполняются в командном режиме. Между этими режимами (а также, унаследованным от ed и редко применяющимся режимом построчного редактирования) нужно явное переключение нажатием клавиатурной комбинации. Зато большинство команд привязаны к нажатиям одной клавиши, и даже перемещаться по тексту в командном режиме можно, не сбрасывая кисть на дополнительную клавиатуру со стрелками, а нажимая алфавитные клавиши в центре клавиатуры. Адепты vi -- программисты и системные администраторы -- очень серьезно относятся к экономии времени и энергии за счет минимизации движения пальцев.
Emacs -- пример "безрежимного" или, если угодно, "однорежимного" редактора: пользователь всегда находится в режиме непосредственного редактирования текста в точке курсора, а команды издает, нажимая сложные сочетания клавиш и, при необходимости, вводя параметры команд в отдельном окне. Из-за стремления обеспечить прямую клавиатурную привязку как можно большему количеству команд и следующей из нее сложности используемых клавиатурных сочетаний был даже пущен слух о том, что Emacs расшифровывается как "Esc-Meta-Alt-Ctrl-Shift" (хотя на деле, конечно, клавиатурные аккорды все же не так сложны, а Emacs -- это просто Editing MACroS, т.е. "макрокоманды редактирования").
В действительности различие это скорее идеологическое, чем прагматическое: в современных версиях vi в большинстве случаев также можно осуществить привязку часто употребляемых команд к клавиатурным комбинациям и выполнять их из режима редактирования, а в Emacs можно достаточно точно (если кому-то это потребуется) сымитировать командный режим, характерный для многорежимных редакторов.
Реальное очень значимое отличие заключается в том, что по своей архитектуре vi -- более или менее монолитная программа (с вытекающей отсюда компактностью), а Emacs -- на самом деле, расширяемая (программируемая) коллекция макрокоманд редактирования, написанных на Emasc Lisp (диалекте известного языка функционального программирования). Лишь небольшое количество часто выполняемых и требовательных к ресурсам команд встроены в саму программу и написаны на компилируемом C, большинство же команд написаны на Lisp и могут изменяться или дополняться пользователями (или профессиональными программистами по заказу пользователей).
За четверть века существования Emacs, благодаря свободной модели лицензирования и открытой модели разработки, "оброс" невероятным количеством макрокоманд, "затачивающих" его под синтакcические особенности различных формальных языков (включая, но не ограничиваясь языками программирования и языками разметки), а также реализующих приложения, традиционно слабо ассоциируемые с "просто редакторами". Например, не выходя из Emacs, можно работать с электронной почтой и службами новостей USENET (а также с гипертекстом со страничек WWW).
Или -- что не менее интересно -- не выходя из Emacs, можно прогнать текст программы через компилятор и подсветить синтаксические ошибки или предупреждения, воспользоваться символьным отладчиком или профилировщиком (реально, Emacs образует оболочку интегрированной среды разработки программ, и в этом качестве является вдохновителем и предшественником столь любимых школьным народом интегрированных сред, например, от Borland). И это лишь пара примеров.
Фактически, регулярно используемый Emacs позволяет реализовать (чисто в текстовом режиме) метафору "рабочего стола", более известную по позднейшим графическим пакетам. Он реализует множественность окон (неперекрывающихся) на одном экране ("фрейме"), а в графической среде способен работать со многими "фреймами" (окнами в терминах менеджера окон). Пакет Emacspeak добавляет к функциональности Emacs речевой вывод, предоставляя мощную поддержку для незрячих и слабовидящих пользователей.
Все это (доступность, расширяемость, интегрируемость) делает его серьезным претендентом на организацию "учебного" рабочего пространства программиста .
Нам неизвестны такие (ориентированные на среду на основе Emacs) курсы для школ вообще. А что касается России (и русскоязычного сообщества), то нам неизвестны примеры школьных курсов, вводящих на достаточно раннем этапе идеи функционального программирования (если они все же есть, нам было бы крайне интересно услышать о них). А без последнего -- увы -- расширяемость Emacs остается чисто теоретической.
Однако в качестве интегрированной среды именно для программирования (в том числе, на обычно изучаемых в школе директивных (сентенциональных) языках, например, Pascal) Emacs использовать, безусловно, можно. Следует только учесть, что пресловутая "кривая обучения" для него гораздо более вогнутая, чем для более простых (но и менее мощных) средств редактирования, обычно используемых в подобного рода средах. Грубо говоря, может потребоваться пара занятий до того, как учащийся будет чувствовать себя уверенно при наборе и редактировании программ, зато потом эти задачи будут решаться гораздо эффективнее4.
Почему в обычных учебных курсах vi изучается раньше Emacs? Дело в том, что vi, во-первых, стандартизован (и доступен во всех без исключения открытых системах), а во-вторых, компактен. Администратор системы может оказаться в среде, где ему из экранных редакторов доступен только vi. Поэтому для сисадминов базовые навыки работы с ним обязательны (вне зависимости от личных предпочтений).
В учебной обстановке, не ориентированной на профессиональную подготовку, такого императива, полагаем, нет, поэтому методисты и преподаватели вольны выбрать наиболее адекватный инструмент для демонстрации возможностей текстовых редакторов, если задача состоит только в знакомстве учащегося с таковыми.
Далеко не всегда открывать файл и редактировать его вручную является оптимальным способом работы с содержащимся в нем текстом. Чем более формализован текст, и чем более типовым является редактирование, которое необходимо выполнить, тем больше шансов, что существует способ "малой кровью" оптимизировать этот процесс.
Рассмотрим очень формальную задачу. Допустим, в файле note сохранен текст записки:
Милая Лена!
Ты не откажешься поужинать со мной в ночь с пятницы на воскресенье?
- Максим
Если жизнь пошла по диагонали, и планы резко изменились (и мы отдаем себе отчет, как именно), можно открыть файл с этим текстом в текстовом редакторе, например, vi, и издать команду:
:s/Лена/Ира/g
Текст (предсказуемо) приобретет вид:
Милая Ира!
Ты не откажешься поужинать со мной в ночь с пятницы на воскресенье?
- Максим
Однако, то же самое действие можно выполнить и "без редактора", а точнее, без интерактивного редактора, с помощью редактора потокового. Стандартный потоковый редактор называется sed, и синтакис его команд схож с синтаксисом командного режима стандартного интерактивного редактора vi, команда при этом издается непосредственно из командной строки:
$sed -n 's/Лена/Таня/g' note
Если у нас подготовлен не один файл, а множество (например, note.1, note.2, note.3), и нужно внести в них единообразные замены (и ничего не пропустить, и нигде не ошибиться), мы обойдемся также всего одной командой.
$sed -n 's/Лена/Вера/g' note.*
Если файлов будет тысяча, а требуемые изменения будут посложнее, нам, скорее всего, понадобится опять-таки всего одна команда (хотя, возможно, и потребуется серьезное изучение синтаксиса). Это называется потоковым редактированием, и оно интенсивно применяется, например, для наложения "заплаток" на исходные тексты программ (однако, как было продемонстрировано, может использоваться и для обработки текста на естественном языке).
UNIX был во многом "рожден для обработки текстов" (прежде всего, это была система для программистов, а программы -- с чего мы начали сегодняшнюю лекцию -- это тексты). Набор служебных программ (утилит) современных стандартных ОС продолжает эту традицию, и в их составе можно найти десятки программ, ориентированных на работу с текстом. Многие из них (но не все) являются построчно-ориентированными, то есть текст понимается как последовательность строк. Подробное обсуждение этих возможностей см. в "лекции" 6 "Строка длиною в жизнь".
Дистрибутив любой современной стандартной ОС (включая свободные) содержит все упомянутые программы. Многие из них портированы (перенесены) и в альтернативные ОС.
Для 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, эта книга свободна.
Компьютерная
графика, чуть более десяти лет назад бывшая если не экзотическим, то
довольно специальным приложением компьютера, сегодня повсеместна.
Всякий, впервые сталкивающийся с компьютером, уже в самом начале обучения (если курс специально не построен так, чтобы ограничиться на первых порах программами с текстовым или псевдографическим интерфейсом), скорее всего, встретится с графическим терминалом, отображающим различные графические элементы (включая и текстовую информацию, также отображающуюся в графическом режиме средствами компьютерной графики).
Элементарная обработка (создание и редактирование) изображений (как векторных, так и растровых) входят в число приложений, перечисленных в "Обязательном минимуме содержания образования по информатике" [1] в качестве обязательных к освоению в курсе средней школы.
Предметность обучения предполагает, что учащийся "узнает" в создаваемых или редактируемых им картинках при изучении обработки изображений подобие уже знакомых ему элементов графических интерфейсов. Чтобы это счастливое узнавание произошло, представляется целесообразным включить некоторые первоначальные сведения о компьютерной графики уже во введение в предмет, которым начинается его изучение. К сожалению, не все учебники это реализуют, поэтому преподавателю могут потребоваться некоторые дополнительные усилия, но, на самом деле, небольшие, поскольку наглядный материал "под рукой" в любом компьютерном классе.
Способы кодирования графических данных делятся на две категории: растровый (точки равномерно размеченного прямоугольника) и векторный (описания линий и фигур, составляющих изображение).
Например, растровое изображение окружности может быть таким: "заполняем квадрат 5х5: белая точка (Б), черная точка (Ч), Ч, Ч, Б, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Б, Ч, Ч, Ч, Б". (Более умные "форматы со сжатием", возможно, позволят сократить запись до чего-нибудь, подобного: "заполняем квадрат 5х5: Б, 3Ч, Б, 3(Ч, 3Б, Ч), Б, 3Ч, Б", а то и еще более компактно, но суть не в этом).
Векторное ее изображение совсем другое: "черная окружность с центром в (3,3), радиусом 2 и толщиной линии 1".
Важно понимать, что большинство компьютерных графических устройств сегодня -- и терминалы, и сканеры, и принтеры -- по своей природе растровые. Исключение составляют только графопостроители (плотерры) и редко доступные в учебных условиях их промышленные "кузены" (такие, как фрезерный станок с числовым управлением).
Соответственно, изображение, вне зависимости от его собственной природы (векторной или растровой), будет при отображении преобразовано в растр и доступно человеческим чувствам в растровой форме (даже если растр почти незаметен, как на дисплеях с высоким разрешением, или вообще имеет сетку ниже порога восприятия, как при печати на качественных струйных или лазерных принтерах). И указанные два способа вполне могут привести к неотличимому результату.
Разница может проявиться тогда, когда мы начнем обрабатывать элементы изображения.
Векторное изображение может без ущерба масштабироваться (увеличиваться или уменьшаться), причем эта операция обратима. В приведенном примере мы можем без труда увеличить векторную окружность в пять раз: "черная окружность с центром в (15,15), радиусом 10 и толщиной линии 5", и она останется окружностью.
А вот, растровое изображение при увеличении обнаружит лишь свой растр в увеличенном виде (и на окружность наш пример похож уже будет мало). Более того, операция уменьшения (или увеличения в нецелое число раз) растрового изображения уже не является обратимой: информация при осуществлении такой операции безвозвратно теряется.
Кроме того, векторное изображение, содержащее более одного элемента (например, изображение двух пересекающихся окружностей), может быть разъято на элементы без каких-либо потерь. С растровым изображением такое, в общем случае, невозможно: программа "не знает" об элементах изображения и о принадлежности тех или иных точек отдельным элементам.
В общем случае, векторное кодирование хорошо подходит для работы с чертежами, схемами, картами, диаграммами, графиками и т.п., а растровое -- для обработки фотографий и рисунков. Векторное изображение может быть без ущерба восприятия преобразовано в растр, в то время, как обратное преобразование в общем случае проблематично (хотя есть программы, позволяющие с той или иной точностью распознавать графические образы). Векторное кодирование часто компактнее растрового, но его отображение требует больших вычислительных ресурсов5.
Пример, который всегда перед глазами пользователя компьютера -- шрифты. Когда точно известен масштаб, в котором будет отображаться текст, часто используются растровые ("фиксированные") шрифты, представляющие собой набор растровых изображений отдельных букв и других символов используемого алфавита (например, растровые шрифты используются видеокартой, работающей в текстовом режиме, но также часто и как элемент графического интерфейса). Их применение позволяет отображать символы с недостижимой иным способом четкостью, но, если нужны более одного размера шрифта, потребуется трудоемкая работа по разработке нескольких таких шрифтов.
Когда необходимо свободное масштабирование шрифтов, используются векторные шрифты (на самом деле, большинство масштабируемых шрифтов -- это библиотеки программ, "рисующих" соответствующие буквы, часто - с учетом важности их отдельных элементов для восприятия; но разница в данном случае несущественна). Качество отображения мелкого кегля или на экране с низкой разрешающей способностью у них ниже, но они универсальнее.
Прочие элементы графических пользовательских интерфейсов также используют как векторную (большинство органов управления и большинство элементов оформления окон), так и растровую (пиктограммы-"значки") графику.
Из множества свободных программ, предназначенных для редактирования векторно-графических файлов, разумные потребности большинства учебных курсов может удовлетворить любая из следующих:
очень простой векторный редактор Xfig для оконной системы XFree86,
sodipodi (обычно поставляется со всеми операционными системами, включающими среду GNOME),
Kontour (компонент популярного "офисного" пакета KOffice)
и, наконец,
OpenDraw (входящая в пакет OpenOffice.org, знакомый нам уже по Лекции 1).
Рекомендуется при возможности хотя бы вкратце ознакомиться с каждой из них, чтобы понять, какая лучше подходит для конкретного учебного курса. В этой лекции далее будет обсуждаться OpenDraw, исходя из преимуществ, уже описанных в "Лекции" 1, посвященной другому компоненту того же пакета -- word-процессору OpenWriter, но это не в коей мере не означает непригодность для учебных целей прочего из перечисленного.
Как и остальные компоненты пакета 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 в высшей степени конфигурируемая и настраиваемая под конкретное применение программа. Для использования в учебном контексте может оказаться полезным предварительно настроить ее для некоторого сокращения обилия непосредственно доступных пользователю функций, чтобы ученик в них не затерялся.
Функциональность OpenDraw сопоставима с большинством других редакторов векторной графики и включает:
cоздание, форматирование и преобразование объектов-графических примитивов: отрезков и стрелок; квадратов и прямоугольников; окружностей, эллипсов, дуг, сегментов и секторов; кривых Безье, "свободных" кривых, ломаных и многоугольников;
cоздание, форматирование и редактирование объектов-текстовых надписей (при вводе или редактировании текстов доступна большая часть функциональности word-процессора OpenWord (описанного в "Лекции" 1)). На самом деле, текст может содержаться в любом замкнутом контуре. В состав OpenDraw также входит декоративная функция FontWork, позволяющая расположить текст "фигурно" (вдоль дуги или окружности);
импорт растрово-графических объектов (в том числе, и в качестве текстур заливки векторно-графических примитивов).
Преобразование объектов включает:
изменение характеристик линий контура (они могут быть разного цвета, сплошными, пунктирными, двойными и т.п.) и заливки (заполнения; оно возможно отдельным цветом, цветовым градиентом(переходом) и даже растровым изображением) замкнутого контура;
перемещение, изменение размеров и поворот;
группирование (превращение нескольких в один) и разгруппирование объектов; комбинирование и раскомбинирование объектов (разница между группированием и комбинированием слишком тонка для нашего обзора);
вращение и зеркальное отображение;
преобразование примитивов -- линий и контуров -- в произвольные кривые или ломаные;
выравнивание и равномерное распределение (по вертикали или горизонтали, относительно края или центра);
специальные операции, некоторые из которых описаны ниже.
Большинство описанных операций преобразования доступны как посредством меню (к пунктам которого могут быть привязаны "горячие" клавиши), так и на пиктографических палитрах инструментов, наряду с палитрой цвета присутствующих (по желанию) в главном окне программы.
Точное позиционирование объектов облегчает возможность отобразить сетку разметки слайда, а также команды выравнивания объектов относительно узлов этой сетки, края или центра листа (слайда), а также относительно друг друга. Особенно полезно это при создании достаточно формализованных объектов.
Важной особенностью OpenDraw является использования механизма стилей для форматирования графических элементов. Использование стилей в векторной графике вполне сопоставимо с использованием того же механизма при оформлении размеченного текста (см. "Лекцию" 1) и имеет те же преимущества перед "жестким" форматированием/оформлением.
Этот прием позволяет серьезно облегчить вариантное оформление рисунков, отказавшись от "жесткого" (такого, при котором для каждого объекта или группы объектов характеристики задаются вручную) форматирования объектов.
Например, при подготовке схемы оргструктуры учреждения можно создать стиль, которым оформляются изображения подразделений, допустим, с голубой заливкой в черном контуре в 3 пункта толщиной. Если позднее потребуется изобразить те же подразделения желтыми прямоугольниками без рамки, не нужно будет помечать их вручную (представьте, насколько это может быть трудоемко даже для относительно простой организации типа средней школы), достаточно будет лишь изменить параметры стиля. Более того, можно определить стиль и для стрелок, показывающих связи между подразделениями, с "наследованием" цвета от цвета стиля подразделений, если предполагается, что их цвет должен совпадать.
Стиль можно определить и для слайда в целом, что позволяет единообразно оформлять серию рисунков. Набор стилей можно объединить в шаблон (сохраняемый в отдельном файле), если предполагается регулярное его использование.
Интересной функцией OpenDraw является наличие так называемых логических операций над объектами. Два или более заполненных контура могут быть скомбинированы особым образом, что порождает новый объект, являющийся объединением форм, их пересечением или "вычитанием" одной формы из другой.
Еще одной интересной особенностью программы является встроенная в нее базовая функциональность имитации трехмерной графики (3D-функции). Она ограничена 1) конструированием тел вращения, 2) преобразованием в тела вращения произвольных двумерных фигур, а также 3) экструзией (приданием последним "глубины"). Трудно понять необходимость рутинного конструирования тел вращения в "офисной" графике, однако для школы возможность такой демонстрации возможностей компьютерной графики может быть весьма полезна.
Двумерный морфинг (плавное перетекание фигур) реализован в OpenDraw не лучшим с точки зрения эстетического результата, образом, однако интересным дидактически: на самом деле, программа просто группирует заданное (в качестве "количества шагов" морфинга) количество "промежуточных" (по форме и цвету) фигур между морфируемыми фигурами. Созданную таким образом группу можно разгруппировать и посмотреть, что и как, собственно, программа сделала.
Выше
уже было замечено о том, что, хотя преобразование векторного
изображения в растр -- элементарная техническая задача,
гарантированное обратное преобразование в общем случае невозможно.
Тем не менее, существуют программы, которые пытаются это сделать.
OpenDraw обладает функцией векторизации, "спрятанной" в меню "Преобразовать" под кличкой "В многоугольник". Если применить данный пункт меню к импортированному растровому изображению, появится окно предпросмотра с возможностью задать некоторые параметры и увидеть результат.
Ничего мистического в этой функции нет: программа ищет связные области, залитые одним или близкими цветами, и описывает их контур как многоугольник. Затем она группирует полученные фигуры одного цвета и переходит к следующему цвету или группе цветов. Результирующий векторный объект представляет собой группу, в свою очередь состоящую из цветовых групп.
Более глубокого анализа программа не проводит (в принципе, можно было бы каждый выделенный объект пытаться аппроксимировать с заданной точностью отрезком, коническим сечением или кривой Безье; это позволило бы распознать элементарные геометрические фигуры, например, просканировав простой рисунок).
Эта функция предусматривает слишком мало параметров, чтобы быть особенно полезной на практике, однако для демонстрации того, в чем состоит процесс векторизации, она вполне подходит.
Пакет 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].
В предыдущей "лекции", посвященной векторной графике и программе OpenDraw, приводились основные факты, касающиеся различия векторной и растровой компьютерной графики:
растровое изображение представляет собой информацию о цвете точек в равномерно размеченном прямоугольнике, а векторное -- информацию о цвете, форме и размере геометрических фигур;
векторное изображение обратимо увеличивается и уменьшается; растровое изображение при увеличении обнаружит лишь свой растр в увеличенном виде, а операция его уменьшения не является обратимой;
векторное изображение может быть без ущерба восприятию преобразовано в растр, но обратное преобразование в общем случае проблематично;
векторное изображение может быть разъято на элементы без каких-либо потерь, а с растровым изображением такое, в общем случае, невозможно;
векторное кодирование хорошо подходит для работы с чертежами, схемами, графиками и т.п., а растровое -- для обработки фотографий и рисунков.
Обычным источником растровых изображений является сканер -- устройство, "проходящее" (сканирующее) лист бумаги или кадр фотопленки точка за точкой и передающее компьютеру значения, соответствующее интенсивности базовых цветов в каждой точке. Все большей популярностью пользуются цифровые фотокамеры -- аппараты, вместо фотопленки фокусирующие изображение на светочувствительной матрице, передающей цифровую запись изображения на энергонезависимый носитель информации (гибкий диск или т.н. флэш-карту), который затем может читаться компьютером.
Растровые изображения могут также создаваться человеком на компьютере с помощью устройств координатного ввода ("мыши" или более подходящего для этой цели графического планшета) или синтезироваться различными программами.
Важнейшими параметрами растрового изображения являются его растровый размер (в точках) и "глубина цвета" (количество бит, используемых для представления цвета каждой точки). Эти параметры часто записывают в виде 1024х728x24, что означает 1024 точки по горизонтали, 728 точек по вертикали и 24 бит на цвет (двадцати четырех бит достаточно для получения "фотореалистичных" изображений, дальнейшее повышение разрядности не приводит к увеличению качества отображаемых или печатаемых современными средствами изображений, хотя в промежуточной обработке или при синтезе изображений иногда используется большие значения глубины цвета). Еще одним параметром, предусмотренным некоторыми форматами хранения растровой графики, является его "масштаб", который принято измерять в точках на дюйм (DPI); это чисто информационный параметр, который может учитываться при печати изображений, но не влиет на возможность их обработки.
За тридцатилетнюю историю компьютерной графики разработано великое множество (сотни) форматов хранения изображений. Большинство из них является плодом несогласованности "технического творчества" отдельных групп исследователей и компаний, а также отражает особенности давно вышедших из употребления специфических устройств. Важными свойствами форматов являются присущие им внутренние ограничения, из которых наиболее значимы ограничения на глубину цвета, поддерживаемые цветовые модели ("мониторная" RGB, "полиграфическая" CMYK и т.д.) возможность сохранения нескольких слоев изображения (понятия слоев, контуров и масок здесь не обсуждаются), наличие т.н. "альфа-канала" (фиктивного "цвета", соответствующего степени прозрачности изображения при наложении его на другое изображение) и поддерживаемые алгоритмы сжатия.
Применяемые в растровой графике алгоритмы сжатия подразделяются на неразрушающие и форматы с потерей качества (последние используют психофизиологическую модель человеческого зрения для того, чтобы избавиться от незначимых деталей изображения, что несколько снижает его качество, но позволяет добиться гораздо большей компактности кода).
Практически универсальными являются форматы TIFF (обычно применяемый в полиграфии, допускает лишь неразрушающее сжатие), PNG (наиболее удобный для представления графических данных в мультимедийных системах и WWW, допускающий неразрушающее сжатие), а также медленно вытесняемые последним JPEG (допускающий сжатие с потерями) и GIF (ограниченный 8 бит (256) цветами). Кроме того, многие графические редакторы (включая описанный ниже GIMP) обладают собственным форматом, позволяющим сохранять в том же файле массу вспомогательной информации, полезной при продолжающейся более одного сеанса работе с файлами.
GNU Image Manipulation Program (Программа ГНУ для манипуляции изображениями), или сокращенно GIMP (читается "гимп") -- потомок курсового проекта двух студентов, Питера Маттаса и Спенсера Кимболла (1985-86 гг.).
За восемь лет и при участии десятков программистов GIMP вырос в один из самых насыщенных функциональностью графических редакторов, уступающих лишь "под завязку" набитому сторонними модулями редактору Photoshop6. Текущая стабильная версия -- 1.2 (как и в некоторых других проектах нечетным "малым" номерам соответствуют экспериментальные (разработческие) версии, а четным -- стабильные).
Интересно, что в рамках проекта GIMP была создана библиотека работы с экранными примитивами GTK (ныне GTK+), являющаяся на сегодня одной из самых развитых и широко используемых в своем классе (в частности, на GTK+ основана популярная графическая операционная среда GNOME).
GIMP, доступный для всех популярных настольных платформ (включая Linux, MacOS, Microsoft Windows и др.), широко используется для работы над WWW и мультимедийной графикой, обработки любительского, репортажного и даже художественного фото, ретуширования кинокадров. Правда, для последней цели чаще используется модификация, известная как FilmGIMP, ее, в частности, активно эксплуатировали при монтаже первого фильма о Гарри Поттере.
GIMP редко используется для предпечатной подготовки графики: в нем пока нет поддержки "полиграфических" цветовых моделей и системы цветоделения. Еще одним ограничением текущих версий GIMP является относительно низкая производительность, затрудняющая работу с действительно большими (сотни тысяч точек) и сложными (десятки слоев) изображениями. Для создания и обработки достаточно компактных и простых изображений, а также для их отображения на мониторе и печати на оборудовании потребительского класса эти ограничения не важны.
GIMP способен работать с продвинутыми координатными устройствами -- графическими планшетами, в том числе, моделями, распознающими силу нажатия на перо.
Вероятно, успехом GIMP не в малой степени обязан своей изначально модульной и программируемой архитектуре. Сам по себе этот редактор -- достаточно компактная и простая программа, однако его возможности приумножаются за счет открытости архитектуры и наличия множества модулей (в текущей поставке -- около трехсот), реализующих те или иные дополнительные функции, такие как импорт-экспорт сторонних форматов или обработку изображения или его фрагмента по тому или иному алгоритму.
Такие модули можно разрабатывать как отдельные программы с использованием библиотеки GDK, а можно пользоваться одним из встроенных в GIMP интерпретаторов языков программирования. Именно наличие таких интерпретаторов и делает GIMP программируемым графическим редактором. Можно сказать, что его архитектура подобна архитектуре текстового редактора Emacs, о котором говорилось во второй нашей "лекции".
Таких интерпретатора на сегодня два. Забавное название Script-fu, видимо, следует понимать как английско-китайское выражение, означающее "мастерство сценирования" (напомним, что "сценариями" ("скриптами") называют программы, написанные на интерпретируемых языках). Script-fu -- это первый встроенный в GIMP интерпретатор функционального языка Схема (Schema), являющегося потомком первого языка функционального программирования Лисп. Разработчик скрипта имеет доступ к многочисленным базовым функциям-графическим примитивам.
Схема -- весьма продуманный и стройный язык, однако его методический потенциал не может в полной мере быть раскрыт в сегодняшних курсах информатики в средней школе, программирование в которых вводится в директивной (сентенциональной) парадигме. На Схеме, так же, как и на Лиспе, можно писать в директивном стиле, однако изящества и простоты, столь необходимых в обучении, достичь при этом возможным не представляется.
Директивен другой язык, интерпретатор которого также встроен в GIMP. Это Перл (Perl), его GIMP-овская реализация называется Perl-fu. Хороший программист может писать на Перле чисто и аккуратно, однако синтаксис языка сам по себе настолько гибок (чтобы не сказать "жидок"), что, по нашему мнению, Перл совершенно не годится на роль изучаемых в числе первых (хотя существуют и другие мнения, весьма авторитетные).
Добавление в GIMP еще одного интерпретатора (например, алголо- или паскалеподобного языка) не представляется особо сложной задачей, однако о таких проектах ничего не известно, и, наверное, от программирования обработки изображений "внутри" GIMP как от простой в методическом освоении темы большинству педагогов стоит пока отказаться.
Тем не менее, базовой интерактивной функциональности GIMP (включая доступные модули) вполне достаточно, чтобы покрыть обычно изучаемые в школе вопросы обработки графики.
При запуске GIMP на экране открывается ряд окон (Рис. 1). Главное
окно содержит меню основных функций, панель пиктографически
обозначенных "инструментов" и области, в которых
отображаются текщие значения основного и фонового цветов, формы
кисти, текущего градиента. Окна изображения соответствуют отдельным
открытым графическим файлам (или слоям в них).
Дополнительные инструментальные окна (по какой-то причине названные "диалогами") могут открываться из меню главного окна. Однако их всего десяток ("Слои, каналы и контуры", "Параметры инструментов", "Кисти", "Шаблоны", "Градиенты", "Палитра", "Устройства ввода", "Индекс документов", "Консоль ошибок"), а основной массив функций, применяемых к текущему или вновь создаваемому изображению или выбранному участку изображения (включая функции, реализованные внешними модулями-фильтрами) "достаются" через контекстное меню, открывающееся по щелчку правой кнопкой мыши в окне изображения.
Зато можно воспользоваться (непривычным для пользователей упрощенных графических сред, таких, как Microsoft Windows) свойством графической библиотеки GTK+, называемым "линия отрыва". Каждое меню наверху содержит пунктирную линию, щелкнув мышью на которой можно превратить это меню в самостоятельное инструментальное окно, сохраняющееся, пока пользователь явным образом его не закроет (Рис. 2-3). Таким образом (учитывая настраиваемость самой системы меню) можно в любой момент создать на экране дополнительные "панели инструментов", содержащие функции, которыми в ближайшее время предполагается воспользоваться. Привыкшему к другому стилю работы пользователю это непривычно, однако, привыкнув, эту интерфейсную особенность можно использовать весьма эффективно.
Множественность окон, к сожалению, может создавать некоторые неудобства в средах без развитого инструментария управления окнами. В более развитых средах можно "склеить" несколько окон, чтобы они перемещались как единое целое или "поднять" окно, чтобы оно продолжало оставаться видимым, даже если будет активизировано окно, расположенное "под ним" (собственно, многооконное визуальное решение и создано в расчете на наличие таких средств), а если такие средства отсутствуют (как, например, в Microsoft Windows), пользование редактором на мониторе с малым разрешением может быть отягощено необходимостью совершать какие-то дополнительные действия.
Основная интерактивная функциональность, доступная посредством "инструментов" в главном окне, достаточно традиционна для программ этого класса. Она включает, в том числе:
выделение области изображения (прямоугольной, эллиптической или произвольной формы, а также ограниченной кривыми Безье). Последовательно выделяемые области могут образовывать пересечения, объединения или вычитания;
выделение связной области ("волшебная палочка") с заданием параметров связности;
перемещение, копирование, заливку выделенных областей;
кадрирование (обрезку) изображения;
изменение масштаба отображения на экране;
вращение, масштабирование, искривление и зеркальное отображение изображения;
ввод текста;
выбор текущего цвета ("пипетка");
заливку области сплошным цветом или градиентом;
рисование "карандашом" или "кистью" произвольной формы и очистку "ластиком".
В базовую функциональность GIMP входит также возможность захвата изображения со сканера и с экрана.
Основной прием автоматизированной обработки изображений -- фильтрация их целиком, либо выделенных в них областей. Большая часть упомянутых внешних модулей реализует именно функцию фильтрации. Среди наиболее важных в практической обработке изображений фильтров отметим:
изменение цвета, насыщенности, яркости и контраста изображения;
удаление "шума";
повышение резкости и размывание, выделение краев.
Значительное количество фильтров имитируют различные "эффекты": от просмотра изображения через волнистое стекло до натяжения его на сферу, цилиндр или тор.
Синтез изображений в базовой поставке GIMP и известных нам фильтрах не слишком развит, однако есть ряд фильтров, создающие фрактальные изображения (в том числе, натуроморфные).
GIMP входит во все "большие" (многодисковые универсальные) дистрибутивы ОС Linux и во многие "маленькие" (одно-, двух- и трехдисковые, кроме ориентированных только на серверное применение). Интерфейс GIMP переведен на русский язык (хотя есть отдельные модули, доступные только с иноязычными интерфейсами).
GIMP доступен для Linux и других открытых систем -- на www.gimp.org; для Microsoft Windows -- на www.wingimp.org; для MacOS -- на www.macgimp.org. Основной русскоязычный ресурс, посвященный GIMP -- www.gimp.ru.
Краткое сорокастраничное введение в GIMP есть в книге [9]. Из англоязычных книг посоветуем две свободно доступные [13, 14].
Слово "компьютер", означающее буквально "вычислитель" и восходящее к лат. computare, сегодня не нуждается в переводе: повсеместно им обозначают электронные вычислительные машины, и оно понятно даже носителям языков, в которых для компьютера есть собственное слово. Однако в английском, из которого оно и начало свое распространение, это слово имеет и более ранее значение: человек, занятый вычислениями.
Парадоксально, но сколько-нибудь систематического исследования вопроса о динамике совокупной "вычислительной мощи", которыми располагало человечество до появления автоматических вычислителей, в мировой литературе не существует (по крайней мере, с ходу не находится), хотя само содержание общематематического образования и профессиональной подготовки до сих пор наполнено, наряду с теоретическими сведениями о природе и свойствах математических объектов, вполне прагматическими приемами, способами, методами эффективного ручного счета.
Такое исследование будет непростым предприятием, учитывая, что в большинстве случаев вычисления были не отдельной профессией, а частью других профессиональных занятий. Бухгалтер, инженер, техник затрачивали существенные усилия на проведение расчетов, являющихся частью их повседневной работы. Компьютер меняет все это: от профессионала по-прежнему требуется умение применить способ расчета, но сами "вычислительные объемы" выполняются все более и более автоматизированно.
Лишь в относительно небольшом количестве случаев такие вычисления можно сделать полностью автоматическими и централизованными, свалить их на "числомолотилки", а в большинстве случаев расчеты должны проводиться уместно, в том месте и в тот момент, когда это необходимо. Иными словами, от все большего количества профессионалов ожидается умение программировать вычисления.
"Программирование" здесь употреблено не в узком значении, связанном с определенной профессиональной деятельностью, использованием специальных ситем нотаций и интеллектуальной дисциплины, а в самом широком, совпадающем с этимологией слова. "Программировать" означает буквально всего лишь "прописывать наперед" те действия, которые должны быть выполнены.
У маркетологов есть такое сленговое выражение: "убойное применение", или "убойное приложение" (killer application). Оно означает то применение какой-либо многофункциональной в своей основе вещи, которое формирует основную долю спроса на нее и превращает ее из модной новинки в массовый товар.
Появившийся на рубеже семидесятых и восьмидесятых, в сравнении с "настоящим" дорогим компьютером дешевый ПК был всем плох, кроме одного: он быстро выводил данные на экран.
Нужно вспомнить, что в те времена относительно дешевые алфавитно-цифровые терминалы соединялись с машиной последовательными интерфейсами (RS-232), скорость передачи данных по которым обычно измерялась в сотнях знаков в секунду, иногда, в тысячах. Гораздо быстрее обменивались данными X-терминалы, включенные в сеть, но это оборудование другого класса, стоившее совсем других денег.
"Терминал" персонального компьютера -- это (не считая клавиатуры и "мыши") адаптер, интегрированный на системной плате или вставленный в разъем шины с параллельной передачей сигнала со скоростью, как минимум в сотни раз превышающей пропускную способность последовательного интерфейса, а на монитор, находящийся всего в десятках сантиметров от компьютера, сигнал передается по аналоговому кабелю.
Даже на ранних ПК вывод данных на экран был, в масштабах человеческого восприятия, мгновенным (если не "тормозила", конечно, сама программа). Это позволило относительно дешево реализовать различные приложения, сама идея которых в том, чтобы представить пользователю "живую" презентацию каких-либо данных. К числу таких приложений относится полноэкранное редактирование текстов и, в особенности, работа с электронными таблицами. Электронные таблицы -- это, по большому счету, единственное приложение компьютера, которое было придумано для ПК и впервые реализовано на ПК. Сегодня, разумеется, благодаря многократно возросшей скорости передачи данных, редакторами электронных таблиц можно пользоваться в компьютерных системах и сетях практически любой топологии (упомянутый ниже KSpread без проблем заработал на карманном компьютере Sharp Zaurus).
Мы придерживаемся отнюдь не общепризнанной точки зрения, согласно которой популярность электронных таблиц как делового приложения компьютера, обусловлена именно простотой решения задач, требующих программирования.
Электронная таблица -- это двумерный массив, каждый элемент (ячейка) которого может содержать либо значение, либо выражение (формулу), причем выражения в качестве связанных переменных могут содержать ссылки на другие ячейки. (Можно считать значение (константу) частным случаем формулы, однако по историческим и эргономическим соображениям синтаксис этих сущностей различен. Значения, к которым приводятся ячейки, содержащие формулу "=100" (если, как во всех известных нам системах управления электронными таблицами, синтаксис формулы предполагает "=" в первой позиции) и константу 100, равны.)
По сути дела, электронная таблица предполагает использование простого функционального языка программирования (точнее, современные системы управления электронными таблицами как правило реализуют язык формул, функциональный в своей основе, но с элементами инфиксной нотации, т.е. с возможностью вместо "=функция1(функция2((сумма(а; произведение(b;c)))))" написать чуть короче: "=функция1(функция2(a+b*c))").
Синтаксис этого языка очевиден для всех, кто понимает, что такое формула в обычном математическом понимании. Кроме того, форма электронной таблицы снимает с пользователя-"программиста" заботу об организации данных (их организует сама таблица, и вместо имен переменных можно использовать координаты ячеек), о вводе-выводе и о связывании отдельных конструкций в программу (вычисление формул происходит по мере необходимости).
Таким образом, с помощью электронных таблиц в учебный курс информатики можно вводить "нулевую степень программирования", объясняя, что такое выражение и переменная, но откладывая на потом то, от чего можно абстрагироваться (сущности, перечисленные в предыдущем абзаце, и другие, более сложные).
Пробежавшись по каталогам свободных программ (таким, как "кузница кода" Sourceforge, содержащая тысячи проектов), можно обнаружить более двух десятков программ в категории "электронные таблицы". Большинство из них -- незавершенные или более или менее законченные учебные проекты. Работу с электронными таблицами можно, видимо, считать зрелым персонально-компьютерным приложением: оказывается, за полгода-год один программист в состоянии реализовать (разумеется, опираясь на существующие библиотеки) до 90% функциональности, свойственной лидирующим программам в этой категории.
Однако знакомство с содержанием коммуникации на форумах поддержки позволяет предположить, что реальную широкую пользовательскую аудиторию получили три свободных проекта:
OpenCalc -- электронно-табличный компонент уже знакомого нам по "лекциям" 1 и 3 интегрированного прикладного делового пакета OpenOffice.org;
KSpread -- компонент еще одного конкурирующего пакета под названием KOffice, который мы пока обходим вниманием. KSpread сегодня также не будет нами рассматриваться, но по чисто техническим причинам. Ничего плохого мы о нем сказать не можем. И, наконец,
Gnumeric -- компонент слабоинтегрированного пакета (или, скорее, собрания программ) GNOME Office, не слишком популярного в России из-за хронических сложностей с кириллической письменностью, свойственных word-процессорному его компоненту, Abiword. Сразу отметим, что, в отличие от последнего, Gnumeric "русофобией" не страдает.
Упомянутое выше слово -- зрелость самого приложения -- ключевая характеристика. Набор ожиданий пользователя, в общем-то, известен, причем не только в части функциональности, но и в части основных эргономических характеристик программы: помимо богатых выразительных возможностей самих функций, для работы с электронными таблицами важна т.н. "остенсивная" операторика, иными словами, возможность "показать пальцем" на объект, с которым нужно произвести те или иные действия. Например, "суммировать значения вот этих ячеек", а не "... ячеек с A5 по D5". В большей, чем в других приложениях, мере очевидны эвристики, которые должны реализовываться программой в качестве "подсказок"; например, если в ячейку, завершающую длинный столбец чисел, пользователь намерен ввести формулу, скорее всего он суммирует значения, а если он начал ряд "1 2 3" или "январь, февраль, март", скорее всего, он продолжит его очевидным образом.
Соответственно, различий можно ожидать лишь в деталях реализации
функциональности и эргономики. И действительно, большинство
редакторов электронных даблиц, включая и перечисленные, очень похожи.
За две недели, которые готовилась эта "лекция", автор (в обычной жизни не пользующийся этим классом программ), проверяя свои впечатления, "играл" с четырьмя подобными системами, пытаясь решать несложные задачки, которые обычно он решает (ввиду специфики личного профиля навыков) с помощью СУБД, включая 1) элементарные инженерные расчеты (расход материалов и жесткость корпусной мебели), 2) бюджетирование небольшого проекта, 3) бюджетирование личных расходов. Под горячую руку попали и 4) три задачки из учебника алгебры его сына (за 11 класс), две из которых даже удалось с ходу решить.
В
число этих систем вошли три упомянутые свободные программы и, в
качестве контрольного образца, очень популярная несвободная Microsoft
Excel (из офисного пакета Microsoft Office 2000). Вывод: существенной
разницы в возможностях и способах их реализации 99% пользователей не
обнаружат. Некоторые тонкости: самой "интуитивной"
показалась Gnumeric, лучше всего документирована Microsoft Excel, у
последней также наиболее развиты средства визуализации (построение
графиков и диаграмм).
Тем не менее, если бы автору предстояло регулярно работать с электронными таблицами, скорее всего, его выбор пал бы на сравнительно "серенькую" OpenCalc из-за единства интерфейса и интегрированности с OpenWriter и OpenDraw, которыми он пользуется регулярно.
Как и остальные упомянутые программы (за исключением Microsoft Excel), OpenCalc определяет особое приложение языка разметки XML, которое и используется для хранения рабочих книг (почему-то workbook переводится как "рабочая книга", хотя вообще-то это обычная "тетрадь") с подшитыми в них листами электронных таблиц. Как и остальные компоненты OpenOffice.org, OpenCalc упаковывает XML-файл с содержимым (а также ряд вспомогательных файлов) в PKZIP-архив, который и является единицей хранения документа. (О важности стандартизации языков представления данных в "офисных" приложениях мы подробно говорили в первой "лекции", к каковой и отсылаем читателя.)
Кроме "родного" формата, OpenCalc "понимает" распространенный формат, используемый Microsoft Excel разных версий, экспортирует данные в DIF (Data Interchange Format), форматы ранних версий StarCalc, потомком которых она является, SYLK, импортирует -- также из форматов dBase и Lotus 1-2-3. Книгу (workbook) можно с очень приличным качеством экспортировать в гипертекст (html 3.2).
Текущая версия (1.0) OpenCalc позволяет работать с отдельными таблицами (листами) размером до 255 столбцов (пронумерованных буквами и двухбуквенными сочетаниями, от A до IV) на 32000 строк (пронумерованных числами), чего вполне достаточно для большинства офисных применений и уж, во всяком случае, для любых разумных учебных задач. OpenCalc допускает абсолютную и относительную адресацию ячеек и их диапазонов.
В OpenCalc поддерживается типизация данных с возможностью их интерпретации как чисел, денежных сумм, дат, времени, логических значений и, наконец, просто текста. Возможны и определяемые пользователем типы. Для некоторых типов определены различные форматы представления, задающие способ их отображения или печати. В случае, если ячейка содержит формулу, ее результат также может быть типизован.
Библиотека функций OCalc достаточно компактна -- их около трех с половиной сотен. Она разбита на ряд категорий: управление БД, работа с датами и временем, финансы, статистика и т.п. Имеются средства расширения этого набора.
OpenCalc реализует такие средства, как:
автозаполнение однородных рядов данных;
именование ячеек и их групп;
сортировку и фильтрацию;
построение графиков и диаграмм.
Мощный механизм стилей оформления, свойственный всем компонентам пакета OO.o, доступен и в OpenCalc. Стили оформления могут определяться для отдельных ячеек, их совокупностей, листов и рабочих книг в целом, а также для включаемых элементов, таких как текст или иллюстрации (в том числе, графики и диаграммы).
Серьезными достоинствами OpenCalc являются:
1) свободное лицензирование и конкурентная поставка (с соответствующими ценовыми последствиями);
2) независимость от ОС (и пользование им не диктует практически никаких ограничений на выбор операционной системы и операционной среды). Более того, навыки работы с этой программой также в большой степени переносимы. Фактически, OO.o выглядит и управляется одинаково под любой стандартной ОС (разработчики говорят о поддержке Linux и Solaris; известно об устойчивой работе пакета под FreeBSD), а также под Microsoft Windows 9x/Me и Microsoft Windows NT/00/XP, есть экспериментальный порт (перенос) на "Макинтоши", под MacOS X (по некоторой информации, в команду уже вошли представители Apple Computers);
3) он использует в качестве языка разметки стандартный XML. В качестве кодировки используется Unicode, что позволяет забыть про третью (после классических "дураков и дорог") российскую проблему с разнобоем в кодовых таблицах, используемых для представления кириллицы в разных системах,
4) в команде разработчиков есть российские программисты и фирмы, которым небезразличны перспективы его применения в школе.
Пакет OO.o входит во все "большие" (многодисковые универсальные) дистрибутивы ОС Linux и во многие "маленькие" (одно-, двух- и трехдисковые, исключая ориентированные исключительно на серверное применение).
Мы рекомендуем обратить внимание на российскую сборку OO.o, поставляемую с ALT Linux ("большой" дистрибутив Master и "маленький" Junior; www.altlinux.ru) и ASPLinux (в различных вариантах, 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 вообще и OpenCalc в частности пока освещены лишь в сравнительно небольшом количестве публикаций. Внимания заслуживают [6-8].
Существует широко распространенное заблуждение, согласно которому графический интерфейс якобы представляет собой высшую и последнюю стадию развития пользовательских интерфейсов, а (командная строка( -- это нечто примитивное и малополезное, если не устаревшее.
На самом деле, эта последовательность отражает не что иное, как порядок, с которым с двумя основными метафорами организации пользовательских интерфейсов познакомились пользователи персональных компьютеров. Вплоть до начала девяностых ПК были простыми и маломощными, поддержка графики и возможность комфортной работы с оконными графическими системами появилась на них недавно (даже в масштабе стремительно развивающейся информационно-технологической отрасли).
Однако за годы до этого графические интерфейсы уже широко применялись на рабочих станциях -- конечно, более дорогом, редком и специализированном оборудовании. Если быть точными, то обе концепции в их более или менее современном виде сформировались примерно в одно время.
В 1967-68 гг. Дуг Энгельбарт представил прототип т.н. WIMP-интерфейса, т.е. интерфейса, использующего понятия окон (windows), пиктограмм (icons), меню (menus) и указателей (pointers), являющихся ключевыми и для сегодняшних графических пользовательских сред.
В 1968-69 гг. Кен Томсон и Деннис Ричи представили первый релиз ОС UNIX, по сути, явившейся прототипом артикулированной системы современных понятий практической информатики, таких, как процессы и файлы, и содержащей непротиворечивый, логичный и лаконичный язык работы с соответствующими им сущностями, который спустя полтора десятка лет стал стандартным пользовательским интерфейсом ОС. (Рубеж шестидесятых и семидесятых -- уже -- прошлого -- века вообще является "осевым временем" информатики и вычислительной техники...).
Разумеется, как одна, так и вторая метафорические системы появились не на голом месте, и их родословную можно проследить назад вплоть до истоков вычислительной техники: до коммуникационной панели первых компьютеров, как вещи твердой и весьма графической (или, во всяком случае, живописной) -- это конец сороковых, и до языков управления заданиями в первых программных планировщиках, загрузчиках и ОС -- это середина пятидесятых, соответственно. Отметим, что идея управления компьютером как "прибором" -- с помощью органов управления (неважно, "в железе" или нарисованных на экране) старше идеи "диалога" при помощи слов.
При этом, для большинства пользователей знакомство с "командной строкой" до недавнего времени отягощалось радикальным упрощением и изменением, которым язык стандартной оболочки ОС был подвергнут при разработке ОС для ПК (таких, как CP/M, MS-DOS (PC-DOS) и клонов последней). Ограничиваясь знакомством со средствами MS-DOS и ее командных файлов, о метафоре "командной строки" можно составить лишь весьма превратное и убогое представление.
Для людей старорежимных, начиная от возраста автора (ему 33) и старше, компьютер удивителен и страшен своей уникальной способностью к символической активности. Мы выросли в мире "глупых" вещей, пассивных или проявляющих свою активность чисто механически (как автомобиль, который может быстро довезти, или же раздавить, если вовремя не увернешься), и неспособных к диалогу в бытовом окружении. К диалогу способны были вещи культуры (книга, картина, симфония) -- но опосредованно, в отдельных, отведенных для этого местах, в назначенное время и при тщательном отборе собеседников.
Возможно, пирожное и говорило, по Курту Левину, на своем кондитерском языке "съешь меня", но ничего подобного продемонстрированной нам недавно упаковке, говорящей "купи меня" уже обычным человеческим голосом (причем, с учетом физиоантропометрических данных приблизившегося покупателя), не было. Вещи были "глупыми", сколь бы изощренный ум своих создателей они не воплощали, а умными были только люди.
Автор до сих пор находится под влиянием первого своего опыта в десятилетнем возрасте общения с компьютером, что-то ему ответившим в ответ на введенную строку. Ответившим осмысленно. (Подробностей он не помнит, но, скорее всего, первым ответом было указание на то, что команда содержит синтаксическую ошибку.) Слово страшен выше -- не случайно, но, в конце концов, компьютеры были тогда надежно заперты в своих вычислительных центрах.
Роль клетки для этого зверя для очень многих сегодня играет гладкая поверхность "графических интерфейсов", скрывающая диалог. Компьютер, прикрытый таким образом, уже не демонстрирует пугающую символическую наготу. Он реагирует на нажатую кнопку с картинкой -- можно успокаивать себя, что это такая хитрая машинка: пылесос после нажатия кнопки сосет, а компьютер -- печатает, связано все чисто механически, и никакого человечка, который с изнанки интерфейса посмотрел, куда же ты нажал и определил, что же сделать с картинкой, нет.
На самом деле призрак маленьких человечков есть -- за кулисами гладкой разрисованной поверхности идет обмен такими же -- mutatis mutandis -- сообщениями, что озадачили автора, когда он был маленьким. От нынешних маленьких их хотят попрятать, как электрический ток за изоляцией. Чтобы не стукнуло. Но в шкафу каждого компьютера, будь он трижды персональный, спрятан скелет искуственного разума, при всей условности последнего выражения.
Существует влиятельная тенденция в современных гуманитарных дисциплинах, получившая распространение в основном в англоязычном мире и связанная с остроумными теориями канадского профессора Маршала Мак-Льюэна, утверждавшего, что письменная ("визуальная") культура связана с гипертрофией аналитических функций человеческого интеллекта на определенных стадиях его развития, и что ее сменяет культура "аудиальная", направленная на синтез целого путем рассеивания внимания, и возврат к доиндивидуалистическому, общинному сознанию, от полиса и урба -- к "глобальной деревне".
С этой сменой он связывал популярность телевиденья (и утрату популярности чтения как досуга) и "клип-культуры", а его последователи указывают и на несомненный рост в девяностые популярности "графических пользовательских интерфейсов" компьютеров, причем не только в быту, но и в деловом окружении.
Мак-Льюэн, впрочем, в своем "зондировании" (как он именовал свое творчество, весьма последовательно отказываясь называть свои поздейшие произведения "текстами") был достаточно ироничен, что в гораздо меньшей степени наблюдается в творчестве его последователей.
Разумеется, каждый имеет право, хотя оно особо и не оговорено в Конституции, на персональные фобии, и даже право постфактум рационализировать их в теориях. Однако мы полагаем, что никому не должно быть позволено транслировать эти фобии другим, тем менее -- подрастающему поколению.
Компьютеры (и новая генерация "умных" приборов, машин и механизмов, включая промышленные, канцелярские и бытовые) отличаются от всего, созданного человеком ранее способностью непосредственно манипулировать символами, воспринимать символы и сообщать символы человеку, т.е., в некотором роде вести с ним диалог.
Стоит ли называть это свойство компьютеров и программ "искуственным интеллектом" -- отдельный вопрос, но сам факт, по нашему мнению, должен занять одно из основных мест в содержании учебного предмета информатики. В этом смысле, наблюдаемая тенденция к вытеснению программного инструментария, являющего это свойство в самой методически и дидактически откровенной форме, из школьных курсов кажется нам крайне неприятной и нуждающейся в коррекции.
Мы с энтузиазмом относимся к применению графических интерфейсов, как в традиционной сфере компьютерной графики, так и в новых, перспективных приложениях. Картинка часто стоит сотни слов, а энергичный жест способен выразить простую мысль быстро и однозначно.
Однако мысль о том, что пиктограммами и жестами можно заменить полноценный язык, напоминает нам лишь одну из гениальных идей академии наук в Лагадо, описанной Свифтом в "Третьем путешествии Гулливера":
"А так как слова суть только названия вещей, то автор проекта высказывает предложение, что для нас будет гораздо удобнее носить при себе вещи, необходимые для выражения наших мыслей и желаний".
Глядя на визуально-дизайнерское произведение очередного их последователя, лишь удивляешься: из какого мешка он достал значок, выражающий идею: "Вход с жующими мороженое несовершеннолетними леопардами в темное время суток запрещен"? И почему он думает, что этот значок интуитивно понятен?
"Мне часто случалось видеть двух таких мудрецов, изнемогавших под тяжестью ноши ... При встрече на улице они снимали с плеч мешки, открывали их и, достав оттуда необходимые вещи, беседовали в течение часа".
В Ладаго попытка мудрецов осуществить масштабное внедрение своего изобретения закончилась тем, что:
"Женщины, войдя в стачку с невежественной чернью ... пригрозили поднять восстание, требуя, чтобы языку их была предоставлена полная воля ... так простой народ постоянно оказывается непримиримым врагом науки!"
График нагляден, лишь пока цифры на нем можно разглядеть, а пиктограммы осмысленны только при выборе из немногих вариантов (даже сотню дорожных знаков выучить уже непросто). Для артикулированного и гибкого выражения идей (далеко не все из которых можно нарисовать) и их связи человечество выработало такой инструмент, как языки (естественные и формальные), и замены им пока не предвидится.
Опрационная система, как "среда обитания" файлов и процессов, состоит из ядра и оболочки с утилитами. Ядро при нормальном функционировании системы остается для пользователя "вещью в себе", которую непосредственно не видно и не слышно. В то же время, только ядро, имея доступ к оборудованию, способно оперировать файлами и процессами, т.е. осуществлять "деятельность" с некоторым объективным результатом.
Пользователю эта функциональность доступна только опосредованно, через особую программу, которая "общается" с ним посредством терминала и вполне логично называется "оболочкой". Теоретически оболочка могла бы реализовать замкнутый язык диалога (и ранние архитектуры ОС носят следы таких попыток), но в открытых системах принята другая философия -- разделения, специализации и минимизации программ. Поэтому на практике оболочка используется вместе с утилитами -- набором самых часто употребляемых программ -- и лишь синтаксис и семантика оболочки вкупе с синтаксисом и семантикой используемых утилит и образуют полноценный формальный язык диалога пользователя с системой. В июне 1993 г. этот язык был стандартизован Международной организацией стандартизации (документ ISO/IEK IS 9945-2:1993), но известен он больше под своим "отраслевым" названием POSIX.2.
Существует множество реализаций стандартного языка оболочки и утилит, восходящих к системам Unix, BSD, проекту GNU и некоторым другим проектам. Наиболее популярной на сегодня является bash в составе GNU Tools, разработанных частично в Фонде свободного программного обеспечения и частично при его поддержке. GNU Tools являются, наряду с ядром Linux, основой операционных систем на этом ядре, но доступны и для других ОС, включая альтернативные архитектуры.
В техническом аспекте оболочка представляет собой построчный интерпретатор простого языка сентенционального (директивного) программирования, в качестве операторов которого могут использоваться утилиты, как, впрочем, и любые другие программы, включая, в частности, написанные самим пользователем, и, в еще большей частности, написанные на языке самой оболочки, ибо, будучи интерпретатором, она может читать команды как интерактивно (с терминала), так и из файла.
Пользование оболочкой очень просто: в ответ на приглашение ("подсказку"), выдаваемое находящейся в ожидании оболочкой, пользователь вводит команду и, после ее выполнения (возможно, сопровождающееся выводом на экран некоторой информации), оболочка снова выводит приглашение и ожидает следующей команды. И так -- пока пользователь не введет символ конца файла (или команду exit), после чего сеанс работы закончится. Подобным образом (с некоторыми нюансами) оболочка интерпретирует и файл "сценария" (программы) с записанными в нем командами (возможно, с использованием управляющих конструкций; общую характеристику оболочки как языка программирования см. ниже).
$ ls ! k7m-104.old tmp.sh EPIA_Manual_v1.0.pdf k7m-104.pdf wget-log [0-11-9].jpg words-to-avoid.ru.html.1 army_engl.txt names words-to-avoid.ru.html.2 dengi.rar opensource.mit.edu www.computerra.ru econ.pdf ruspunk.swf www.ctc.msiu.ru firewalls.tar school tmp gosorgan.amursk.ru tmp.1 www.oreilly.com j463_k7m.pdf tmp.html $_ |
Рис. 1 |
Простейший "обмен репликами" между оболочкой и пользователем приведен на рис. 1 (здесь и далее вводимый пользователем текст выделен полужирным шрифтом, а невидимые при вводе символы -- курсивом. Введя команду ls (от LiSt -- вывести список файлов в текущем каталоге), пользователь получил список файлов, находящихся в текущем каталоге.
$ ls -l total 3707 drwxr-xr-x 2 maksim None 4096 Oct 29 2001 ! -rw-r--r-- 1 maksim None 19743 Nov 5 00:08 EPIA_Manual_v1.0.pdf -rw-r--r-- 1 maksim None 39 May 27 2002 [0-11-9].jpg -rw-r--r-- 1 maksim None 666120 Nov 12 2001 army_engl.txt -rw-r--r-- 1 maksim None 12402 Oct 11 2001 dengi.rar -rw-r--r-- 1 maksim None 101873 Oct 8 2001 econ.pdf -rw-r--r-- 1 maksim None 2129920 Aug 15 2001 firewalls.tar drwxr-xr-x 2 maksim None 0 Nov 10 08:48 gosorgan.amursk.ru -rw-r--r-- 1 maksim None 768086 May 1 2002 j463_k7m.pdf -rw-r--r-- 1 maksim None 340016 May 1 2002 k7m-104.old -rw-r--r-- 1 maksim None 2543572 Dec 9 2001 k7m-104.pdf -rw-r--r-- 1 maksim None 23 Nov 28 03:44 names drwxr-xr-x 5 maksim None 4096 Nov 7 07:08 opensource.mit.edu -rw-r--r-- 1 maksim None 855480 Jun 7 17:01 ruspunk.swf drwxr-xr-x 5 maksim None 0 Oct 14 2001 school -rw-r--r-- 1 maksim None 16000 Aug 25 02:24 tmp -rw-r--r-- 1 maksim None 467 Oct 29 2001 tmp.1 -rw-r--r-- 1 maksim None 67888 Sep 26 2001 tmp.html -rwxr-xr-x 1 maksim None 198 Aug 23 04:48 tmp.sh -rw-r--r-- 1 maksim None 835 Nov 27 2001 wget-log -rw-r--r-- 1 maksim None 12698 Jun 16 2000 words-to-avoid.ru.html.1 -rw-r--r-- 1 maksim None 12698 Jun 16 2000 words-to-avoid.ru.html.2 drwxr-xr-x 6 maksim None 4096 Sep 26 2001 www.computerra.ru drwxr-xr-x 3 maksim None 0 Oct 9 2001 www.ctc.msiu.ru drwxr-xr-x 12 maksim None 4096 Apr 26 2002 www.oreilly.com $_ |
Рис. 2 |
Начинающих пользователей (особенно воспитанных в субкультуре ПК) часто удивляет такая вещь: если дать, например, команду ls, результат будет весьма лаконичным, в то время, как у нее есть ключи-модификаторы, позволяющие получить указанный список в виде, гораздо более подходящем для восприятия человеком (см. рис. 2). Почему же умолчанием (вариантом, применяемым в случае, если ключи явно указаны не были) является именно лаконичная, "некрасивая", "неудобная" форма?
Причина очень проста: как и любая другая стандартная утилита, ls гораздо чаще используется не оператором, а какой-нибудь другой программой, поэтому ее вывод приспособлен для наиболее удобной его последующей обработки. Подача команды с клавиатуры -- исключение, а не правило, и для удобства оператора предусмотрен соответствующий ключ. Если пользователю часто нужно выводить список файлов на экран, он запрограммирует оболочку, определив для себя синоним (например, синонимом конструкции ls -al --color=always | less, постранично выводящей список файлов со всеми атрибутами и с выделением типов файлов цветами, может быть определена команда lls).
Понять эту простую вещь означает понять весьма серьезную часть компьютерной культуры. Универсальные системы (например, ОС), в отличие от специализированных (например, мультимедийных киосков или игровых приставок) создаются не для удобства пользования ими "из коробки" абстрактным "простым пользователем", а для удобства их настройки (программирования) конкретным пользователем под его конкретные нужды. Это не удобство, а метаудобство, не встроенная в стены комнаты мебель, а модульный гарнитур с инструкцией по сборке, не "для всех", а для каждого. А "простых" пользователей не бывает, все мы сложные и разные.
$ cat Петя Петя Яна Яна Вася Вася Маша Маша ^D $_ |
$ cat >names Петя Яна Вася Маша ^D $ ls names names $ cat <names Петя Яна Вася Маша $_ |
Рис. 3 |
Рис. 4 |
Утилиты могут не только выводить текст, но и читать ввод. Простейший пример -- утилита конкатенации cat, которая, будучи издана без аргументов, просто построчно копирует текст (см. рис. 3). Утилита, читающая что-либо из стандартного ввода и выводящая что-либо на стандартный вывод, называется фильтром, фильтрами являются многие из стандартных POSIX-утилит.
Стандартный ввод-вывод -- это два файла, которые по умолчанию связаны с текущим терминалом. Мощнейшим средством оболочки является перенаправление ввода и вывода в произвольный файл, задающееся соответственно знаками < и >, за которыми следуют имена файлов. На рис. 4. показано перенаправление вывода команды cat в файл names и перенаправление ввода этой команды из созданного предыдущей командой файла. Важно заметить, что перенаправление стандартного ввода-вывода производится именно оболочкой, "умения" распознавать перенаправление как свои аргументы от самой утилиты (или, к примеру, пользовательской программы) не требуется.
Еще одним мощным средством оболочки является так называемый "конвейер" (или "канал") -- соединение вывода одной команды с вводом другой.
$ cat names names >names2 $ cat <names2 Вася Маша Петя Яна Вася Маша Петя Яна $ sort <names2 Вася Вася Маша Маша Петя Петя Яна Яна $ uniq <names2 Вася Маша Петя Яна Вася Маша Петя Яна $ sort <names2 | uniq Вася Маша Петя Яна |
Рис. 5 |
На рис. 5 приведен развернутый пример. Командой cat names names >names2 мы создаем файл names2, содержащий удвоенное содержимое ранее созданного файла names. Утилитой sort его можно отсортировать в алфавитном порядке, а про утилиту uniq известно, что она удаляет повторяющиеся строки. Однако удаляет она только подряд идущие строки, поэтому, чтобы уникализировать строки в файле, содержащем их в произвольном порядке, файл нужно сперва отсортировать.
Нам уже известно, что перенаправлением ввода-вывода можно создать временный файл (это выглядело бы так: sort <names2 >temp ; uniq temp ; rm temp), однако конвейер, задаваемый символом |, позволяет "замкнуть" вывод команды sort на ввод uniq без создания промежуточного файла, который потом нужно удалять: sort <names2 | uniq temp. Цепочка команд, объединяемых в конвейер, может быть произвольной длины.
И, наконец, еще одним мощным средством командной оболочки является поддержка шаблонов имен файлов (усеченного варианта так называемых "регулярных выражений"). Если мы хотим удалить из каталога, содержимое которого отображалось в примере на рис. 1, файлы words-to-avoid.ru.html.1 и words-to-avoid.ru.html.2, нам не обязательно передавать их список команде rm; достаточно определить выражение, однозначно их характеризующее, например words-to-avoid*. Метасимвол * означает любое количество любых символов; существют и другие метасимволы. Результат выполнения этой команды в указанном каталоге в точности эквивалентен команде rm words-to-avoid.ru.html.1 words-to-avoid.ru.html.2, причем "раскрытие" метасимволов выполняет, опять же, не утилита, а сама оболочка.
В качестве языка программирования стандартная оболочка может быть охарактеризована следующим образом:
сентенциональная (директивная) парадигма;
возможность построчной интерпретации или однопроходной компиляции (т.е. построчкая контекстная независимость сверху вниз). Нам неизвестны компилирующие реализации языка стандартной оболочки;
наличие управляющих конструкций:
последовательного исполнения,
условного (if-then, if-else, if-then-else, if-then-elif...) исполнения,
многовариантного выбора (case),
циклов (перебора списка for, с постусловием until, с предусловием while) и их разрыва (break, continue);
наличие механизма подпрограмм-функций (описываемых как в файле сценария, так и в отдельных файлах или библиотеках);
наличие оператора присваивания (установки значения переменной);
возможность использования внешних программ (команд) ОС в качестве операторов (вызовов функций) и обработки значений их кодов возврата;
наличие нетипизованных переменных. Переменные декларируются первым упоминанием, могут принимать в качестве значения произвольную строку. Значение, могущее быть интерпретированным как число может использоваться в выражениях целочисленной арифметики;
развитый синтаксис выражений, используемых в операторах присваивания, а также в качестве условий исполнения или циклов;
развитая система работы с файлами (ввода/вывода), в том числе со стандартным вводом с терминала и выводом на терминал;
Таким образом, язык оболочки хорошо подходит для того, для чего он предназначен: написания программ (сценариев) работы с файлами (небезынтересно, что значительная часть самих открытых ОС написана именно на языке оболочки). Он не слишком подходит для решения алгебраических задач, хотя отсутствие встроенного механизма работы с плавающей арифметикой может быть обойдено применением специальных утилит, например, универсального калькулятора произвольной точности bc, и хранением значений вещественных чисел в строковых переменных. Подобным же образом использованием внешних утилит можно писать на этом языке программы с оконным (как псевдографическим, так и графическим) интерфейсом.
Синтаксис языка (в частности, синтаксис выражений) не отличается внешним изяществом (хотя для знатока сценарии могут быть весьма красивыми и нетривиальными) и вряд ли может быть рекомендован7 в качестве первого языка при знакомстве с программированием. Отсутствие типизации и неподдержка иных, кроме сентенциональной, парадигм программирования, во всяком случае, служат веским поводом к тому, чтобы не вводить его в учебный курс в качестве единственного.
В то же время, хотя бы беглое знакомство с языком оболочки, помимо очевидного прагматического значения, дидактически полезно. Он вполне пригоден для демонстрации таких важных понятий, как присвоение значений, смысл и использование управляющих конструкций, подпрограммы (функции). Технически он прост в использовании благодаря наличию интерпретатора bash (могущего работать в POSIX-режиме, т.е. в строгом соответствии со стандартами) под рукой в любой стандартной ОС (а также наличию портов того же bas практически для любой альтернативной платформы). Он может быть единственным сентенциональным языком в общеобразовательном курсе информатики.
Методическая литература, специально ориентированная на школьный курс и посвященная программированию на языке оболочки, на русском языке сегодня отсутствует, хотя следует отметить, что "классические" руководства по Unix за тридцать лет развития отрасли достигли практически кристальной прозрачности изложения и легко могут быть адаптированы для нужд как учителей, так и самих учащихся. По-русски нам известна единственная книга [11], специально посвященная программированию на языке оболочки.
Интерпретаторы языка оболочки являются неотъемлемой частью открытых систем и включены в состав любого дистрибутива (так же, как и руководства пользователя); лучшим из них мы считаем свободный bash, разработанный Фондом свободного программного обеспечения. Для пользователей альтернативных архитектур (например, Microsoft Windows) мы рекомендуем также bash, доступный в составе многочисленных программных пакетов.
Для Microsoft Windows рекомендуется установка пакета Cygwin, содержащего утилиты GNU и некоторые другие программы, позволяющие организовать стандартную рабочую среду. Следует учесть, что при работе в версиях MS Windows, основанных на MS-DOS (MS Windows 95/98/Me), у многих программ возникают сложности из-за отсутствия в MS-DOS контроля за правами доступа к файлам и каталогам (версии, основанные на 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, включая bash (ее можно приобрести через Microsoft на диске либо скачать с их сайта).
До середины девяностых существовали отдельно компьютерная графика и отдельно -- настольные игры в компьютерную графику. Помнящие историю отечественной школьной информатизации читатели, возможно, сталкивались с чудом техники под названием "цифровой дисплей растровый" (ЦДР), которое удавалось подключить к первому отечественному персональному компьютеру ДВК, чтобы отображать на экране телевизора несколько тысяч пикселов в четырех цветах. В то время в Лабораториях Компьютерной Графики некоторых вузов можно было встретить Графические Рабочие Станции с векторными устройствами и X-терминалами, и даже плоттерами.
Закон Мура тем временем делал свое (в данном случае, не черное, а многоцветное) дело, и к середине девяностых на компьютере с процессором Intel 486 уже запускалась та самая система, которую пятью годами раньше наблюдать можно было лишь на X-терминалах и графических станциях, стоивших каких-то немыслимых (что по тем временам, что сегодня) денег.
Игры в самодельную графику, конечно, продолжаются и сегодня, но в целом мир воссоединился, и особой нужды в таких играх давно нет. Хотя -- такова диалектика массовых рынков -- именно эти игры (включая игры в буквальном смысле) породили спрос на дешевые устройства (прежде всего, графические акселераторы), которые и делают настоящую компьютерную графику доступной пользователю массовой x86- и PowerPC-техники, даже устаревшие "персоналки" -- сопоставимыми с X-терминалами, а более новые и мощные -- соперниками и с профессиональных графических рабочих станций начального и среднего уровня.
X Window System -- один из самых больших и успешных проектов в истории компьютерной техники -- восходит к 1984 г., когда разработчики двух систем компьютерной графики, претендующих на универсальность -- проектов Athena (Массачуссетский технологический институт) и W Windowing (Стэнфордский университет) -- решили объединить свои усилия. С тех пор практически каждая компания, серьезно занимающаяся графикой, посчитала своим долгом внести какие-либо разработки в систему, формальным "хозяином" которой в 1987 г. стал вновь созданный X Consortium (ныне X Open Group, www.X.org).
С тех пор X прошел через одиннадцать основных релизов и множество версий.
Дальнейшее изложение ориентировано на свободную реализацию X, которая называется XFree86, поддерживается одноименным партнерством (www.xfree86.org) и воплощает на сегодня версию 4.2 текущего релиза. XFree86 -- самая популярная реализация X, она поставляется в составе подавляющего большинства открытых систем (как свободных, так и несвободных) для x86-совместимых компьютеров, поддерживает беспрецедентно широкий спектр оборудования и, благодаря доступности исходных текстов и пользовательской аудитории в десятки миллионов человек, достаточно "вылизана", по крайней мере, насколько это возможно для такого разнообразия "железа". Несмотря на то, что исторически цифры "86" в названии пакета относятся к соответствующему семейству процессоров от Intel, современные версии XFree86 реализованы для большинства других популярных процессоров. XFree86 доступен и для некоторых альтернативных архитектур ОС, включая Microsoft Windows NT.
Большинство нижесказанного справедливо для любой реализации X на любом оборудовании и под любой ОС, список которых можно найти на www.X.org.
То, что пользователю, сидящему за монитором, представляется сплошной графической операционной средой, реализовано как многослойный сэндвич технологий.
Непосредственно с оборудованием (видеосистемой, устройствами ввода и динамиком) работает X-сервер. Эта программа захватывает оборудование и предоставляет его возможности другим программам как ресурсы (собственно, именно поэтому она и называется сервером) по особому протоколу, который так и называется, X-протокол. Перечисленное оборудование в совокупности называется X-терминалом (аппаратным X-терминалом называется и специализированный компьютер, на котором исполняется исключительно X-сервер).
Здесь сразу видно отличие X Windows System от большинства самодельных систем графики, используемых в проприетарных системах: взаимодействие X-сервера с его многочисленной клиентурой происходит по специфицированному протоколу, который может туннелироваться через TCP/IP и, соответственно, клиенты и сервер могут исполняться на разных узлах Сети. Это означает, что одни и те же программы могут эксплуатироваться в разных топологиях, включая совокупность автономных рабочих станций ("персональных компьютеров"), совокупность рабочих станций без данных или бездисковых рабочих станций ("локальная сеть"), многопользовательскую систему с X-терминалами (или какую-либо гибридную топологию).
Еще одним ресурсом, который предоставляет X-сервер, являются шрифты. Оперировать шрифтами он может самостоятельно, либо с помощью другой программы, которая называется сервер шрифтов X и обеспечивает их масштабирование.
Большинство пользователей, установив систему, получают в свое распоряжение готовую графическую среду. Мы поступим иначе -- будем разбираться с ней по слоям.
На Рис. 1 изображена "голая" система X
Window -- то, с чем большинство пользователей никогда не
сталкивается. Запустить ее обычно можно так: X.
Мы видим традиционный серый экран с не менее традиционным курсором в виде буквы X. Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже -- сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это Zap (Control-Alt-Backspace) -- завершение работы сервера (если эта возможность не запрещена при конфигурации), Zoom (Control-Alt-+/-) -- "горячее" переключение доступных видеорежимов. В некоторых ОС (Например, GNU/Linux) Control-Alt в сочетании с функциональной клавишей освобождает оборудование и передает его на время соответствующей виртуальной консоли.
Воспользуемся последней возможностью, перейдем на консоль и запустим первое клиентское приложение: программу xterm (Рис. 2). На экране X обрел появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение -- эмулятор терминала, на котором запущена диалоговая оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) -- в отдельных окнах.
Запустим программу xclock (Рис. 3). При ее запуске мы использовали несколько параметров, задающих геометрию (местоположение и размер) вновь порождаемого окна, цвет его фона и шрифта по умолчанию, толщину и цвет рамки. Эти (и некоторые другие) параметры типичны для программ, построенных на основе графической библиотеки X Toolkit. Значения параметров, заданные при вызове программы, могут быть перекрыты самим запускающимся приложением, кроме опции геометрии. Дело в том, что окно выделяется клиентскому приложению при запуске, и все доступные ему ресурсы этим окном и ограничены -- это свойство X-протокола.
Запустив несколько экземпляров того же xterm (и почитав документацию) можно обнаружить, что и "голышом" X умеет не так мало. Например, оперирует буфером обмена текстом между приложениями и предоставляет текстовым приложениям такой ресурс, как полосу прокрутки (забавная полоска, скроллировать текст с помощью которой вверх или вниз можно, щелкая по ней разными кнопками мыши, -- это наследие проекта Athena).
Есть ли польза от системы, работающей с фиксированными окнами? Да, если вспомнить, что "универсальный десктоп" -- не единственная сфера применения компьютера. Можно запустить при загрузке X и браузер на весь экран и получить гипермедийный киоск по цене PC. А можно посадить за тот же браузер оператора, который будет через него весь день "рулить" базу данных.
Но мы пойдем дальше. Итак, основная работа X-сервера -- создавать окна и предоставлять клиентским приложениям возможности работы в них. Для того, чтобы работать с окнами, нужна другая программа, которая так и называется -- менеджер окон (window manager).
Как же менеджер окон преодолевает указанное ограничение X-протокола? Никак -- просто выделенным ему окном является весь экран. (На самом деле, менеджер окон -- не единственная программа, способная работать с "корневым" окном; например, входящая в комплект поставки xsetroot позволяет установить цвет фона или поместить на него рисунок.)
Менеджеров окон существует превеликое множество -- под любой набор задач, которые может решать графическая многооконная система. Их настолько много, что выбрать какой-нибудь в качестве "типичного представителя семейства" затруднительно. Поэтому выберем один из самых развитых -- Enlightenment.
"Просвещение" (www.Enlightenment.org) создано Карстеном Хайцлером и Джеффом Харрисоном (Carsten Haitzler, Geoff Harrison) и его текущая версия -- 0.16.5. До 2000 г. он был "штатным" менеджером окон в популярной среде GNOME (ей будет посвящена отдельная "лекция"), затем уступив это место менее функциональной, но более быстрой "Рыбе-пиле" (Sawfish). Он продолжает оставаться GNOME-совместимым, и многие пользователи этого популярного десктоп-менеджера предпочитают его, хотя и без GNOME у Enlightenment поклонников хватает.
Запустим "Просвещение" (Рис. 4). Как резко изменилась
картина!
Первое, что мы видим -- это появившиеся вокруг окна нашего xterm "виджеты" (элементы окон) -- строка заголовка с кнопками и рамка. Окно теперь можно перемещать по экрану, "ухватив" за заголовок, масштабировать, "взяв" за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что еще можно делать с окном?
Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню (меню -- это тоже "виджет") таких действий (Рис. 5). Оказывается, его можно еще уничтожить (Annihilate), поднять/опустить (Raise/Lower), оттенить/растенить (Shade/Unshade) приклеить/отклеить (Stick/Unstick) и выполнить еще массу действий, для которых потребовались отдельные меню! Набор этих действий зависит от конкретного менеджера окон (и Enlightenment -- один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками -- вообще от его настройки.
Собственно, управление окнами -- основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере еще одну функцию.
Вы уже обратили внимание на то, что при запуске "Просвещения" на экране появилось еще одно окно. Это так называемый пейджер (pager), на Рис. 6 он изображен крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причем, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать "виртуальным столом, по размеру превышающим физический экран, а пейджер -- одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе.
Еще один важный компонент Enlightenment мы не увидели сразу: это меню настройки самого менеджера, которое можно "достать", щелкнув правой кнопкой мыши на фоне экрана (Рис. 7). Порывшись в настройках, можно обнаружить, что вышесказанное о способах оперирования с этим менеджером весьма условно, потому что поменять можно буквально все, от декора виджетов до количества и функций элементов оформления окон и их реакции на различные действия.
Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Разработчики "Просвещения" придумали целых шесть, включая фантастический "полупрозрачный". Настройки и расширения Enlightenment можно объединять в "темы" (themes) и обмениваться ими.
Собственно, на этом функции оконного менеджера как такового и заканчиваются, а дальше Enlightenment вторгается во владения другого класса программ -- менеджеров рабочего стола...
...Что демонстрирует отсутствие резкой границы между ними. Существует два подхода к тому, чтобы достроить оконную систему до полнофункциональной среды. Первый -- добавить в "графический сэндвич" еще один слой -- менеджер рабочего стола -- работающий "поверх" оконного менеджера и использующий функциональность последнего. Этим путем идут команды разработчиков GNOME и KDE, которым посвящены отдельные "лекции".
Другой путь -- "дотянуть" до полнофункциональной среды функциональность самого оконного менеджера, и им идет Enlightenment и ряд других проектов.
Что нам не хватает до полнофункциональной среды? Менеджера программ, утилит и приложений. Так вот, в "Просвещении" есть и такая функциональность, доступная (по умолчанию) по щелчку на фоне левой кнопкой.
Комментировать здесь особо нечего: пункты меню позволяют запустить множество различных приложений, причем, кроме независимо разработанных, и целую пачку "эпплетов", поставляемых вместе с Enlightenment. Альтернативный способ запуска -- через "панель" -- встроен в некоторые темы "Просвещения".
Откуда берутся такие ресурсы, как "виджеты" с их декором и способом поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Большинство развитых оконных менеджеров, менеджеров рабочего стола и "заточенных" под них приложений можно сгруппировать по библиотекам (toolkits), с опорой на которые они разработаны.
Косметических улучшений за тридцать лет существования парадигмы WIMP была придумана масса, а вот более или менее серьезных, при внимательном анализе, обнаруживается только два: интеграция звука (и превращение графической (визуальной) среды в сенсуальную) и начало эксплуатации концепции гиперссылок, в терминах которых можно переформулировать почти весь интерфейс.
Фредерик Брукс еще в 1995 г., обсуждая основные процессы, произошедшие в программной отрасли за 20 предшествовавших лет, назвал в числе "наиболее впечатляющих явлений" "триумф интерфейса WIMP" [17, сс. 239-243]. В этом ставшем классическим четырехстраничном анализе (всем, интересующимся темой, крайне рекомендуется прочитать эти четыре страницы. А заодно -- и всю книгу Брукса). Брукс:
производит декомпозицию самой идеи ("диалог" с системой: объекты-"существительные" и действия-"глаголы"),
выделяет факторы, способствовавшие ее "триумфу" ("концептуальная целостность через метафору" "рабочего стола"; эквивалентность клавиатурных команд пунктам меню, обеспечивающая постепенный переход от новичка к опытному пользователю; навязывание архитектуры через средства разработки),
называет ограничения метафоры "рабочего стола" ("проблема двух курсоров"), а также
предрекает устаревание WIMP при внедрении речевого интерфейса ("WIMP через поколение станет достоянием истории. Указание курсором останется способом задания существительных при управлении нашими компьютерами. Для выражения глаголов станет использоваться речь").
Прошло еще пять лет, и мы можем отметить, что:
Проф. Брукс не заметил решения "проблемы двух курсоров" (а заодно -- и непротиворечивой интеграции командной строки в графико-интерфейсное окружение) в конце восьмидесятых в Norton Commander (и сонме последователей этой замечательной программы на разных платформах (обзор см. в [15]. Проф. Безруков предложил для реализованного в Norton Commander интерфейса термин "ортодоксальный менеджер файлов" (OFM));
WIMP не думает устаревать, и скорее сам абсорбирует новые интерфейсные возможности (включая распознавание речи), чем будет вытеснен ими;
и, наконец, самое серьезное -- это то, что "триумф WIMP" на сегодня выглядит не то, чтобы менее бесспорным, а менее однозначным, все более походя на пресловутое "триумфальное шествие советской власти" по обессиленным Первой мировой войной частям Российской империи и ее окрестностей. Во многих прикладных областях попытки внедрения WIMP стали скорее частью проблемы пользовательского интерфейса, чем частью ее решения.
"Сплошной" же WIMP-среды и вовсе нет нигде, кроме встроенных/специализированных систем: в любом окружении, претендующем даже не на универсальность, а просто на широкую сферу применения, элементы WIMP сочетаются с элементами другой интерфейсной модели -- командно-строчной -- иногда более органично (OFM, AppleScript и т.п.), а чаще эклектично, противоречиво и с фатальным для производительности исходом (фрагменты "рваной" командной строки в "диалоговых окнах", разнообразные Wizards и "окна установки предпочтений").
Если перечитать текст доклада, в котором идеи WIMP впервые были представлены широкой публике [16], станет понятно, почему: модель WIMP предлагалась как средство непосредственного манипулирования конкретными объектами ("взять это и положить туда", "изменить такое-то свойство того-то объекта", а не как средство формулирования абстрактных положений и команд ("все ли файлы, лежащие в каталоге X, имеют формат Y?", "удалить все файлы, созданные до 01.01.2000 в которых упоминается Борис Ельцин" и т.п.). Соответственно, сделать WIMP-рабочее место для выполнения технических процедур, "рабского", неквалифицированного труда можно, а вот систему поддержки полноценной свободной практики -- затруднительно.
Виктор Вагнер [18] противопоставляет "рыхлости" модели WIMP, пусть и целостной метафорически, концептуальную целостность командно-строчного интерфейса (см. также нашу предыдущую "лекцию"), основывающуюся на четырех принципах:
универсальности формы представления информации (текстовый файл, понимаемый как последовательность символов, некоторые из которых разделяют строки(записи), поля и слова;
возможности переназначения ввода-вывода и соединения программ каналами;
философии "набора инструментов" (одна утилита -- одна функция);
наличия в оболочке механизма регулярных выражений.
По Вагнеру, по-настоящему успешным графическим интерфейсом (true UNIX GUI) будет интерфейс, предлагающий не менее целостную и последовательно реализованную концептуальную основу. Причем, предлагающий не только и не столько конечному пользователю, сколько разработчику, т.е. реализованный начиная с системы быстрой разработки (RAD). В упомянутой статье Вагнер рассматривает несколько кандидатов на роль универсальной формы представления информации в графической среде и рассуждает о том, какие принципы могли бы стать аналогами другим "китам", на которых покоится командно-строчный интерфейс.
На самом деле, существует целый ряд систем, в той или иной степени закладывающих основу "интерфейсов следующего поколения". К сожалению, ни одну из них нельзя назвать на сегодня массовой, кроме, возможно, языка описания интерфейса XUL, использованного в Mozilla (www.mozilla.org) и, соответственно, в Netscape 6 (www.netscape.com), но и для XUL пока нет RAD. Но это уже совсем другая тема (см. "Лекцию" 10).
В то время, как сама графическая платформа X Window System много лет является фактическим отраслевым стандартом, лежащие "над" нею слои графической среды не стандартизованы.
Какую-либо классификацию графических сред дать затруднительно, однако самым грубым образом их можно разделить на "интегрированные" и "легкие".
Оборотной стороной интегрированности является достаточно высокая их требовательность к ресурсам. Комфортная работа с KDE или GNOME "свежего разлива" начинается примерно от производительности, эквивалентной производительности 800 МГц процессора Celeron, отказ от некоторых ресурсоемких свойств (анимация изменений в среде и т.п.) позволяет "снизить планку" примерно до 500 МГц при объеме оперативной памяти от 128 МБ. Разумеется, эти цифры даже ниже характерных для компьютеров "стартового уровня", поставляемых сегодня производителями, однако парк машин, находящихся в эксплутации, как в офисах, так дома и в школе, включает и компьютеры с более низкими характеристиками.
Так, в школе весьма желательно предоставить возможность работы в графической среде на менее мощных машинах. Здесь помогут "легкие" графические среды, представляющие собой оконные менеджеры с несколько расширенными возможностями (базовая и расширенная функциональность типичных оконных иенеджеров описана ниже).
Обсуждаемые сегодня IceWB, BlackBox и fluxBox (а также чуть более требовательный к ресурсам WindowMaker)8 позволяют достаточно комфортно работать с графикой на машинах производительностью (в эквиваленте Intel Pentium) примерно от 100 МГц и с памятью от 32М (текст одной из предыдущих "лекций" набирался в поезде, с одновременной "съемкой" изображений с его экрана графическим редактором GIMP (см. "лекцию" 3) на ноутбуке с процессором Intel Pentium MMX 166 и ОЗУ объемом 64МБ).
Следует оговориться, что отказ от интегрированных графических сред не является "волшебной палочкой": конкретные прикладные программы могут быть сами по себе достаточно требовательными к ресурсам. Так, на упомянутом ноутбуке запуск word-процессора OpenWriter, обсуждавшегося в первой "лекции", занимает более минуты (хотя дальнейшая работа не сопряжена с существенными задержками). Кроме того, если прикладная программа изначально создана в ориентации на определенную интегрированную среду, она может интенсивно использовать соответствующие библиотеки, даже если запускается в "легкой" среде. Например, запуск программ из пакета KOffice, который будет обсуждаться в одной из следующих лекций, в "легкой" среде, на самом деле, дает небольшой выигрыш по сравнению с его запуском из "родной" для него среды KDE.
(Если необходимо задействовать имеющийся парк "слабой" техники для таких задач, а также, если необходимо сохранять в эксплуатации еще менее производительные машины (например, старшие модели IBM PC-совместимых компьютеров на базе процессоров Intel 486 или AMD 586 или "Макинтоши" на процессорах Motorola 68K), следует подумать об использовании такой техники в режиме графических терминалов или, по крайней мере, варианте запуска наиболее "тяжелых" прикладных программ на сервере. Об этом у нас будет возможность поговорить в "лекции", посвященной оборудованию под свободно-программные решения.)
Следует оговорить также, что ограниченность аппаратных ресурсов используемого оборудования не является единственным мотивом использования "легких" графических сред. Каждая графическая среда, интегрированная или легкая, обладает собственными уникальными особенностями, собственным стилем, и уместность пользования конкретной средой в значительной степени зависит от набора задач, решаемых на компьютере конкретным пользователям, и от его личных предпочтений.
Как говорилось в прошлой "лекции", ключевой компонент графической платформы -- X Window Server:
захватывает оборудование,
создает по запросу других программ (которые в этой терминологии называются X-клиентами) окна и
предоставляет другим программам возможность работы в окнах, то есть вывода информации в эти окна и обработки сигналов от устройств ввода (клавиатуры и "мыши" или другого координатного устройства), когда окно, назначенное программе, является активным. Предоставление ресурсов возможно в том числе и через сеть, когда клиент и сервер работают на разных компьютерах (узлах).
В "голой" среде, образуемой X Window Server без оконного менеджера, окно, выделяемое клиенту, является фиксированным: его геометрия (местоположение на экране и размер) задается при запуске клиента и сохраняется в течение всего сеанса работы с этим клиентом. Это вполне соответствует цели создания специализированных систем с графическим интерфейсом пользователя (таких, как мультимедийные киооски и т.п.), но совершенно недостаточно для универсального "настольного" применения.
При универсальном применении компьютера характерна поочередная работа с различными программами (иногда достаточно большим их количеством), причем пользователь может отрываться, допустим, от редактирования текста, чтобы поработать другой программой с иллюстрацией, прочитать почту или заглянуть на WWW-страницу, затем возвращаться к редактированию текста и т.д. Графическая операционная среда должна быть достаточно гибкой, чтобы допускать и поддерживать такой, "субъектно-ориентированный", а не ориентированный на строго последовательное выполнение предзаданных процедур, стиль работы.
В частности, должно поддерживаться управление (с помощью клавиатуры или "мыши") окнами, т.е. возможность изменять "на лету" их геометрию (положение и размеры), а также (обычно не относимое к геометрии) положение в воображаемой "стопке" окон, т.е. определение того, какое из окон будет "верхним" (видимым полностью), если окна перекрывают друг друга на плоскости экрана.
Управление окнами и составляет базовую функциональность оконного менеджера (устоявшийся термин window manager, относящийся к этому классу программ, будет передаваться далее словосочетанием-калькой "оконный менеджер", которое, впрочем, не представляется особенно удачным, так же, как и встречающиеся в литературе "менеджер окон" и "администратор окон").
Технически ограничение на изменение геометрии раз выделенного окна преодолевается оконным менеджером за счет того, что ему в качестве окна выделяется весь экран.
Прикладным программам, таким образом, выделяются далее уже не окна собственно X, а окна оконного менеджера. Для них это совершенно прозрачно, хотя желательно, чтобы программа была достаточно "сообразительной", чтобы изменить свое поведение при изменении размеров выделенного ей окна "на лету" (изменение положения окна в подавляющем большинстве случаев ничего от клиента не требуют), это справедливо для большинства, но не для всех программ (в частности, этого не "умеют" многие старые программы и некоторые компьютерные игры).
В свою очередь, и оконный менеджер может быть достаточно "умен", чтобы понять, что программа не реагирует на изменение геометрии, и заблокировать возможность изменения размеров окна пользователем (чтобы он не оказался в ситуации, когда ему видна лишь часть области вывода программы или наоборот, часть окна прикладной программы пуста). Однако такое решение может привести к весьма дискомфортным ситуациям (например, если при запуске программы ее окно оказывается больше экрана)9.
Базовая (а также расширенная) функциональность оконных менеджеров доступна пользователю прежде всего за счет введения в интерфейс так называемых "виджетов" (widgets = window gadgets, "оконные приспособления") -- таких визуальных элементов, как рамки, кнопки, меню и пр., которые служат "органами управления" окна. Технически виджеты представляют собой отдельные окна (в терминах X Window System), примыкающие к окну прикладной программы и, как правило, перемещающиеся вместе с ним.
В пользовательской перспективе виджеты, составляющие обрамление окна, часто воспринимаются как его часть. Однако не следует забывать, что внутри окна (содержимым которого управляет прикладная программа) зачастую тоже есть свои виджеты: кнопки, полосы прокрутки, переключатели, меню и т.п. В общем случае, используемые оконным менеджером и прикладной программой библиотеки виджетов могут и не совпадать.
(Зачастую при проектировании выдвигается требование единства стиля органов управления и согласованного управления изменением этого стиля (например, для настройки среды для пользователя с ограниченными возможностями: со слабым зрением, нарушением моторики и т.п.), и в этом сильно выигрывают интегрированные графические среды GNOME и KDE, используемые совместно с прикладными программами, основанными на тех же графических библиотеках и наследующими те же настройки. Однако на практике ограничиться набором программ, основанных на одной библиотеке графических примитивов, бывает трудно, поэтому разумно познакомить учеников с особенностями по крайней мере самых распространенных из них.)
Обрамление окна обычно включает:
рамку, окружающую окно. При "буксировке" рамки мышью окно изменяет свой размер. Иногда для изменения размера окна предназначены только выделенные "уголки" рамки, представляющие собою отдельные виджеты;
полосу заголовка, часто совпадающую с одной из (обычно, верхней) сторон рамки. Полоса заголовка может содержать название программы, команду, ее запустившую, или другую информацию, специфичную для окна. При "буксировке" полосы заголовка перемещается все окно. Со "щелчками" раличными кнопками мыши на полосе заголовки также могут быть связаны различные действия по управлению окнами;
кнопки управления окном. Часто вынесенные на полосу заголовка или в другое место рамки кнопки позволяют выполнить с ним такие действия, как закрытие (частно сопровождающееся выходом из программы, открывшей окно), максимизация (разворачивание окна на весь экран), минимизация/сворачивание (см. ниже расширенную функциональность), вызов меню управления окном, которое может содержать весьма обширный репертуар других действий.
Детали реализации обрамления окна могут быть весьма различными в зависимости от конкретного оконного менеджера и его настроек.
Собственно, перечисленными функциями оконный менеджер, предназначенный для работы в составе интегрированной операционной среды, может и ограничиться. При использовании же в качестве операционной графической среды самого оконного менеджера, крайне полезной может оказаться его расширенная функциональность. К ней можно отнести:
минимизацию/сворачивание окон и управление свернутыми окнами. Работа на "столе", "захламленном" десятком различных окон, может быть дискомфортной, и крайне полезна возможность "свернуть" или "минимизировать" окно со времеенно неиспользуемой программой. Для того, чтобы средствами графической среды можно было окно затем развернуть, оно и в свернутом состоянии должно каким-то образом визуализироваться. Существует несколько относительно распространенных способов видуализации свернутых окон. Например, "на столе" может оставаться полоса заголовка свернутого окна по щелчке на которой оно вновь разворачивается. Свернутым окнам могут соответствовать пиктограммы ("иконки", "значки") на поверхности "рабочего стола" или в специально отведенном для этого окне ("панели управления"). Свернутые окна могут визуализироваться как пункты общего или специального меню (см. ниже);
управление несколькими "столами". Практика показывает, что для многих продвинутых пользователей, для которых освоение стандартных систем следует за освоением специфически персонально-компьютерных, именно возможность работать на нескольких "столах" оказывается первым "убойным приложением" X Window System. Действительно, переключение между виртуальными "столами" позволяет организовать комфортную работу со множеством программ даже на мониторах с относительно низким разрешением (1024х728, 800х600) и физическими размерами (17, 15-дюймовыми). В иных условиях комфортность работы существенно снизилась бы, или настоятельной еобходимостью стало бы приобретение более крупного и емкого монитора (что зачастую влечет за собой необходимость смены графической карты и прочих недешевых мероприятий). Все современные оконные менеджеры поддерживают вируальные столы, правда называются эти сущности в них по-разному: "столами", "рабочими областями" или "экранами". До предела (чтобы не сказать, до абсурда) эта функциональность развита в оконном менеджере Enlightenment, упоминавшемся в предшествующей "лекции": E позволяет организовать до 64 "экранов" на "рабочем столе", при этом "рабочих столов" также может быть более одного (точнее, до 32). Трудно представить, зачем может понадобиться две тысячи с лишним отдельных экранов (как правило, четырех экранов хватает с избытком для любых практических задач), однако возможности приема демонстрируются этим "в полный рост";
быстрый запуск команд. Возможность быстрого запуска предуготовленных команд обычно ассоциируется с общим меню, вызываемым "щелчком" на особом виджете, не связанном с прикладными окнами, или в свободной от прикладных окон области экрана;
возможности настройки "поведения" и внешего вида среды. "Поведение" (реакция отдельных виджетов на операции с ними, модель фокусировки (связывание ввода с клавиатуры и "мыши" с теми или иными программами) и т.п.) и внешний вид оформления окон, а также наличие на экране "общих" виджетов, не связанных с конкретными прикладными окнами, "обои" и т.п. могут варьировать в очень широких пределах. Иногда возможности такой настройки считают некими "архитектурными излишествами", однако более взвешенной является точка зрения, согласно которой в хорошем визуальном дизайне (так же, как и в хорошей архитектуре) ничто не является излишеством. В частности, в школе программы эксплуатируются на широком спектре оборудования с весьма разными характеристиками и разного качества, причем используются они широким кругом людей с различными психофизическими особенностями, как в пределах нормы, так и связанных со здоровьем, и игнорировать возможности настройки нельзя даже уже исходя из гигиенических соображений.
* * *
Выше при характеристике тех или иных (предположительно, общих) характеристик оконных менеджеров чаще обычного употреблялись слова "обычно", "как правило", "может" и т.п. Это связано с чрезвычайным разнообразием решений на базе распространенных оконных менеджеров. Ниже самые распространенные из них характеризуются более подробно и определенно.
BlackBox
(BB) -- один из самых компактных, "минималистичных"
и быстродействующих оконных менеджеров. Он позволяет эффективно
организовать работу на "рабочем столе", не "захламляя"
его ненужными ссылками и не расходуя экранное пространство на
отображение громоздких элементов оформления.
Наряду с базовой функциональностью, BB предоставляет (факультативно) панель, содержащую кнопки переключения между "рабочими столами" (по умолчанию их четыре) и заголовки открытых окон. Общее меню вызывается "щелчком" правой кнопкой "мыши" на свободном от окон месте "стола". Меню (или любое из вложенных в него меню) "щелчком" по заголовку может быть превращено в окно, остающееся на экране до явного его закрытия щелчком на соответствующей кнопке.
По умолчанию на полосе заголовка каждого окна присутствуют кнопки сворачивания (сворачивание можно выполнить также двойным "щелчком" на самом заголовке), максимизации и закрытия окна. Свернутое окно присутствует на экране в виде полосы заголовка, развернуть его можно повторным двойным "щелчком" на полосе заголовка или из меню Workspaces ("рабочие пространства"), доступного по "щелчку" средней кнопкой мыши на свободном от окон месте "стола". Это же меню позволяет перейти на другой "стол", добавить или удалить "стол" из рабочего пространства.
BB поддерживает различные модели фокусировки ввода. Click to focus ("фокусировка по щелчку") позволяет реализовать стиль работы, привычный для пользователей GNOME, KDE или Microsoft Windows: акно становится активным (принимающим текущий ввод с клавиатуры и от "мыши") после "щелчка" на нем. Активное окно автоматически становится "верхним" (видимым полностью, даже если оно частично перекрывается с другими окнами). Модель Sloppy focus ("небрежная фокусировка") предполагает активизацию окна при попадании на него курсора мыши (окно при этом не "всплывает" автоматически наверх).
Наряду с панелью и конвертируемыми в дополнительные окна-"панели" меню, BB реализует еще один автономный виджет -- так называемую "щель" (Slit). "Щель" располагается на краю видимого экрана и может содержать маленькие (без обрамлений) окна специализированных программок (их распространено порядка десятка), индицирующих какие-либо состояния среды или позволяющих быстро выполнить часто исполняемые действия.
На основе BB созданы два более развитых оконных менеджера -- OpenBox и более популярный FluxBox.
"Наиболее характерная особенность Fluxbox -- реализация закладок (tabs) в контексте рабочего стола. Если закладки в браузере позволяют одновременно открыть несколько страниц в одном окне, то закладки fluxbox позволяют удобно сгруппировать несколько окон на столе. Все окна в группе имеют одинаковые размеры и расположены строго одно под другим. Для переключения на какое-либо из них достаточно навести курсором мыши или щелкнуть (в зависимости от настроек) по соответствующей закладке. К примеру, мне приходится работать с несколькими различными почтовыми клиентами. Совместив их в одну группу, я могу легко переключаться между ними и при этом я всегда знаю, где расположено каждое окно. На словах объяснить преимущества этого оригинального подхода не очень легко, но после нескольких дней практического использования, становится трудно без него обходиться: к хорошему привыкаешь быстро." [3]
Внешний вид BB, FluxBox и OpenBox легко настраивается с помощью механизма "тем" рабочих столов.
WindowMaker (WM) -- это свободная реализация (в рамках проекта
GNUStep) концепций NextSTEP -- первой получившей более или менее
широкую известность реализаций идей универсальной графической среды
пользователя. За недоступностью оригинальной NextSTEP для современных
платформ, познакомиться с WM полезно и поучительно вне зависимости от
того, собираетесь ли вы с ним работать -- это позволит увидеть
исходную точку развития графических сред и оценить продуктивность
(или контрпродуктивность) того, чем эти идеи "обросли" со
временем.
Основным автономным виджетом WM, как и NextSTEP, является "пирс" прикладных программ, представленный при запуске пиктограммой со скрепкой. При запуске любой "корректной" (с точки зрения WM), а также некоторых "некорректных" программ, кроме ее окна на экране появляется ее пиктограмма. Если "пришвартовать" эту пиктограмму к "пирсу", она там и останется, позволяя запускать эту программу вновь и вновь простым щелчком по ней -- это "родной" некстстеповский интегрирующий интерфейс.
WM позволяет работать с несколькими "столами" (переключение по умолчанию по Alt-n или через меню, доступное по "щелчку" правой кнопкой на свободном песте "стола"). WM очень гибко настраивается, как в части внешнего вида, так и в части "поведения", причем большая часть настроек доступна из программы Wprefs.app, доступной по щелчку на пиктограмке "со ступенькой".
IceWM -- простой оконный менеджер, очень часто выбираемый пользователями, приходящими из-под Microsoft Windows или OS/2, поскольку он способен достаточно точно имитировать их основные черты.
Из автономных виджетов прежде всего стоит отметить панель с кнопкой, вызывающей главное меню (подобно тому, как это делает кнопка в Microsoft Windows, GNOME или KDE). С помощью панели можно также управлять текущим сеансом и настраивать IceWM. Впрочем, основное меню таже доступно и по "щелчку" правой кнопкой на свободном месте "стола", что более привычно для пользователей WindowMaker, Sawfish, Blackbox или Enlightenment.
Панель также содержит список запущенных программ (включая те, окна которых минимизированы), на нее можно вывести и "мини-терминал", позволяющий оперировать командной строкой. Любые действия могут выполняться с помощью ассоциированных клавиатурных комбинаций.
IceWM также позволяет работать с множеством "столов" ("рабочих мест"), которые нумеруются или именуются пользователем.
Упомянутые оконные менеджеры присутствуют практически в любом дистрибутиве свободной ОС, начиная с однодисковых. Исключение составлят FluxBox, обычно не включаемый в "маленькие" дистрибутивы (если очень хочется его посмотреть, а доступа к Интернет нет, попытайтесь найти диск, прилагавшийся к журналу [19] -- при заказе этого однодискового дистрибутива редакция специально попросила включить эту несправедливо "обижаемую" программу.
Упомянутый выпуск журнала содержит, помимо прилагаемого дистрибутива ALT Linux Junior 2.1 (www.altlinux.ru), подборку статей, посвященных использованию свободных программ дома.
Запуск графической среды (точнее, "бутерброда" из X Window System, оконного менеджера и графической среды) в открытой операционной системе можно сравнить с запуском Microsoft Windows в MS-DOS10.
Однако, сходство заканчивается, не успев начаться. MS-DOS -- это однозадачная и однопользовательская система, и запущенная оболочка захватывает все ее ресурсы. Из-за неполноценности ОС оболочке приходится брать на себя несвойственные ей функции (например, имитацию многозадачности), с которой она справляется плохо (так, "зависание" одной программы вполне может привести к неработоспособности всей системы).
При запуске графической среды под полноценной ОС, она, с точки зрения последней, представляет группу обычных процессов, управление которыми производится общесистемными средствами. Точно так же, общесистемными средствами производится и управление процессами, запускаемыми "из-под" этой графической среды. Более того, поскольку платформой для запуска конкретной среды является изначально сетевая X Window System, прикладная программа даже не обязана запускаться на том же компьютере.
Среда отнюдь не монополизирует использование этого компьютера; параллельно с ее работой продолжает исполняться множество служебных системных процессов; с других терминалов (если система многотерминальная) могут запускаться другие программы или даже другие графические среды (или дополнительные экземпляры той же среды). Более подробно об этом будет рассказано в "лекции", посвященной операционным системам.
Однородность опыта и связанная с нею привычность (иногда ошибочно называемая "интуитивностью", хотя она не имеет отношения к философскому и психологическому понятиям интуиции) позволяют при освоении нового инструмента-программы сосредоточиться на ее прикладной логике (аспектами, связанными с конкретным приложением ИТ, которое она реализует), не задумываясь и специально не фокусируя внимания на аспектах, общих для разного инструментария. Это делает более "крутой" пресловутую "кривую обучения" нового пользователя.
(Разумеется, это сильно идеализированная картина. Иногда прикладная логика диктует некоторые элементы эргономики; например, интерфейсы большинства систем автоматизированного конструирования и проектирования (CAD, САПР) весьма сходны, вне зависимости от среды, в которой работают эти программы.)
Как ни парадоксально, основной недостаток работы в интегрированной среде является оборотной стороной основного достоинства: жестко закрепленные навыки мешают при выходе за ее пределы. Конечному пользователю, ограниченному опытой работы в одной среде, недостает "стереоскопичности" видения, глубины понимания; элементы эргономической логики могут напрямую ассоциироваться с определенными визуальными элементами и "жестами", с помощью которых подаются команды.
Общеизвестны сложности, с которыми сталкиваются люди, неколько лет пользовавшиеся MacOS или Microsoft Windows при необходимости поработать в другой (пусть даже и весьма схожей) среде. Подобная "ригидность" опыта может формироваться и при работе в любой из свободных сред, хотя как правило пользователь в них не ограничен (в отличие от специфически персонально-компьютерных сред) прикладными программами, специально разработанными для данной среды и делящими с ней наборы элементов интерфейса ("виджетсеты"), поэтому его опыт изначально более разнообразен.
В этом смысле, крайне полезным представляется знакомство учащихся с разными средами уже на начальном этапе освоения графических интерфейсов. Это не обязательно должны быть разные интегрированные среды, но само представление о том, что один и тот же результат может достигаться с помощью разных интерфейсных средств, должно быть передано обязательно. В общем случае это возможно и в рамках одной интегрированной среды из числа рассматриваемых ниже -- и KDE, и GNOME в высшей степени гибки в отношении настройки внешнего вида и "поведения". Эта гибкость также весьма полезна для обеспечения доступности и максимально достижимого комфорта учащимся с физиологическими особенностями и физическими недостатками (дальтонизмом, слабым зрением, ограниченной подвижностью или расстроенной координацией движений и т.п.).
Сколько-нибудь последовательной теории интегрированных графических сред не существует. Изучая отдельные среды в динамике их развития, можно, тем не менее, выделить несколько общих черт:
они опираются на определенный интерфейс разработчика (API), состоящий из библиотек, доступных также разработчикам прикладных программ (будь то MS Windows API для Microsoft Windows, Motif для CDE, Qt для KDE или GTK+ для GNOME);
они реализуют элементы объектной метафоры (одельные экземпляры сущностей, таких как файлы, процессы (их потоки ввода-вывода) визуализируются определенным образом, на них можно фокусироваться и выполнять с ними различные действия, их состояния и изменения этих состояний также могут визуализироваться или озвучиваться). Целостная объектная метафора своей реализации не нашла (и, видимо, последовательно "объектная" среда была бы крайне неудобной в использовании);
они реализуют единообразные элементы управления ("виджеты"), зачастую не только в оформлении отдельных окон, но и в их "начинке";
они содержат те или иные элементы управления, не привязанные к отдельным окнам прикладных программ ("общие" меню, "панели управления", "поверхность стола" и т.п.);
они позволяют согласованно изменять свойства интерфейса образующих среду программ;
они реализуют "буфер (буферы) обмена", позволяющий передавать типизованные данные от программы программе (X Window System содержит буфер, позволяющий передавать данные лишь простого текстового типа);
они реализуют возможность "перетаскивания" (drag'n'drop) объектов или данных между окнами одной программы или разных программ.
(За ограниченностью объема "за бортом" остаются более сложные вопросы, такие, как компонентная объектная модель и модели сетевого взаимодействия, так или иначе "втягиваемые" в проекты интегрированных сред.)
На сегодня существуют и развиваются две свободных интегрированных графических среды общего назначения: KDE и GNOME. Они входят в поставку большинства стандартных (открытых) ОС, как свободных, так и несвободных. Хотя GNOME на полгода моложе KDE, мы начнем обсуждение именно с GNOME.
GNOME (GNU Network Object Model Environment -- "Среда GNU, основанная на модели сетевых объектов", но также и "Образцовая среда для сетевых объектов GNU") -- один из самых амбициозных и масштабных проектов в программистском сообществе.
Кроме реализации функционально полной графической среды (возможно, уместнее говорить о сенсуальных средах, учитывая то, что звук стал их полноправной частью), "Гном" претендует на то, чтобы полностью реализовать спецификации промышленной платформы сетевого взаимодействия CORBA и полностью абстрагировать слой "менеджера рабочего стола" (или "графической среды") от низлежащего слоя управления окнами ("оконного менеджера").
GNOME поддерживает ряд оконных менеджеров, среди которых: Sawfish ("штатный" оконный менеджер по умолчанию), Enlightenment, IceWM, WindowMaker, AfterStep и FVWM2, совместимые с GNOME, впрочем, в разной степени.
Сегодняшняя версия "Гнома" (GNOME 2.1) -- полноценная интегрированная среда, включающая реализацию повседневно необходимых функций и позволяющая использовать сторонние решения для реализации функциональности, которая в ней отсутствует.
GNOME использует один из самых развитых интерфейсных пакетов GTK+, реализованный для разных платформ. Над ним надстраивается масса компонентов и библиотек, обеспечивающих сетевую функциональность, интерфейсы к различным языкам программирования, работу со звуком через механизмы ОС и пр. Сам "Гном" стремится оставаться мобильным и доступным во всех открытых системах. Он стабильно работает в Linux, BSD, AIX и Solaris; последнее обстоятельство способствовало поддержке разработки GNOME, которую оказывает Sun Microsystems через созданный в 2001 г. году Фонд GNOME, среди учредителей которого также крупнейшие поставщики свободных ОС.
С пользовательской точки зрения GNOME предстает как набор базовых компонентов интерфейса и "апплетов", утилит и прикладных программ. К базовым компонентам относятся менеджер файлов и поверхности стола Nautilus, панели управления и меню GNOME Panel и центр управления (Gnome Control Center).
"Наутилус". Менеджер файлов Nautilus позволяет отображать содержимое файлов и каталогов в окнах и выполнять над файлами обычные действия (удаление, переименование, копирование и перемещение и т.п.), а также осуществлять предварительный просмотр многих типов данных. "Наутилус" эффектен, но работа с ним не более эффективна, чем с прочими браузерами файлов, включаемыми обычно в графические среды (менеджер файлов CDE или Microsoft Windows Explorer).
Помимо отображения содержимого каталогов в окнах, "Нау" также может отображать один из каталогов на поверхности "рабочего стола": размещенные на нем иконки как бы приклеены к монитору, и при смене текущего экрана остаются на том же месте относительно наблюдателя (так же, кстати, ведут себя и открытые окна, если их "приклеить").
Поддерживается широкий спектр операций переноса мышью (drag'n'drop), причем "перетаскиванию" подвержены не только объекты (файлы, пункты меню и т.п.), но и некоторые их свойства: так, можно "взять цвет" в окне выбора цвета и перенести его на панель, которая воспримет его. Есть даже операции, позволяющие назначить один объект свойством другого: например, если на панель "перетащить" не цвет, а файл с картинкой, последняя станет ее фоном. "Таскать" файлы между окнами "Нау", на рабочий стол и панели можно практически без ограничений.
Панели и меню. Уже упомянутые панели являются, наряду с менеджером файлов, важнейшей составной частью интерфейса GNOME. Панелей может быть неограниченное количество. Панель может относиться к одному из пяти типов, но на самом деле их два: панель-меню (menu panel) и объектная панель. Первая из них содержит пункты меню и может содержать пиктограммы, а вторая -- только пиктограммы. Последняя может быть краевой (edge), выравненной (aligned), скользящей (sliding) или плавающей (floating), но это скорее свойство панели (которое можно менять "на ходу"), определяющее особенности ее поведения, чем тип.
Внешний вид и поведение панелей является в высшей степени конфигурируемым. Пользователь может задавать как глобальные предпочтения (анимация движения панелей, отображение панельных объектов и пр.), так и индивидуальные предпочтения для каждой из них (ее тип и положение на экране, ширина, возможность автосокрытия и принудительной минимизации, цвет и фоновое изображение и т.п.) Ну и, разумеется, пользователь может "набивать" панели теми объектами, которые ему нужны.
На панелях могут присутствовать объекты пяти типов:
пускатель (launcher) ассоциирован с приложением или командой, которые исполняются по щелчку на его пиктограмме в панели;
выдвижной ящик (drawer) -- это кнопка, открывающая другую панель, перпендикулярно первой -- некий аналог подменю в меню, который можно "набить" всевозможными апплетами;
апплет (applet, "приложеньице") -- интересный тип панельного объекта, демонстрирующий то, что он не обязан быть представлен статической картинкой. Это программа, места в панели которой достаточно, чтобы отображать какую-нибудь полезную (или забавную) информацию или даже принимать клавиатурный и/или координатный ввод. С GNOME поставляется масса апплетов, отображающих всякую полезную информацию (состояние ресурсов и статус сети, например) или позволяющих осуществить нетривиальные действия (например, mini commander, позволяющее набрать команду, не запуская терминала). Важными "приложеньицами" являются "путеводитель по столу" (Desktop Guide) и "список задач" (Task List), позволяющие переключаться между виртуальными экранами и активизировать окна запущенных программ, соответственно;
специальные объекты -- это те же апплеты, но выполняющие функции, которые другими средствами "достать" почему-либо нельзя (запереть экран, выйти из GNOME или запустить программу "вручную"). В качестве "специальных объектов" исполняются и программы, которые не были написаны специально для GNOME, но могут, тем не менее, осуществлять вывод в панель -- "поглощенные программы" (swallowed applications);
наконец, объект-меню раскрывает меню.
За работу системы меню, как и за работу панелей, отвечает компонент GNOME Panel, и это не случайно: разница между панелью и меню более декоративная, чем сущностная: любое меню можно зафиксировать на экране, и оно превратиться в подобие панели-меню (только вертикальное, а не горизонтальное, и с меньшими возможностями настройки).
У "Гнома" нет единой иерархии меню: кроме главного, вызывающегося объектом-меню с гномьей лапой (оно же, когда вызывается щелчком правой кнопки на фоне или нажатием клавиши, почему-то называется глобальным (global)), пользователь может создавать "обычные" (normal) меню, связанные с объектами-меню на панелях.
Меню настраиваются примерно так же, как и панели: пользователь может добавлять, менять и удалять пункты, создавать подменю и т.п. При этом создаваемые "обычные" меню изначально пусты, а главное/глобальное "набивается" при установке всем, что "Гном" найдет в системе, и пользователю остается только убрать лишнее и переставить пункты в соответствии со своими предпочтениями.
Утилиты, апплеты и "капплеты". Для настройки различных аспектов функционирования системы предназначен Центр управления, представляющий собой набор "управляющих апплетов" (capplets), связанных с разными компонентами и прикладными программами.
Одни из них позволяют менять параметры рабочего стола и облик приложений (включая использование "тем"), другие -- настраивать мультимедиа, третьи -- управлять свойствами клавиатуры и мыши, и т.д.
Важным "капплетом" является менеджер т.н. "драйверов документов" (Document Handlers), устанавливающий соответствие между типом файла или протокола и программой, выполняющей различные операции с ними. Набор "капплетов" является расширяемым, их можно писать не только для программ, написанных специально для "Гнома", но и для внешних программ.
Еще более открыт набор утилит, прикладных программ и апплетов, поставляемых с GNOME -- вместе с программами, входящими в большинство дистрибутивов ОС, о которых "Гном" "в курсе", их число превышает сотню.
Перечислить их здесь нет никакой возможности, но в их число входят интерфейсы для администрирования системы, средства звукозаписи и воспроизведения, сетевые утилиты, игры и многое другое.
GNOME снабжен встроенной системой помощи; кроме того, его разработчиками совместно с Sun Microsystems подготовлено компактное (130 с.) руководство, доступное в разных форматах на сайте проекта. В его поставку входит система разработки графических приложений под GTK+, которая называется Glade и включает в себя специфические для Gnome элементы.
"Гном" и большинство его компонент соответствуют соглашениям об интернационализации и, соответственно, поддерживают работу с кириллицей и локализацию и перевод интерфейса. К сожалению, локализация "Гнома" сильно отстает от разработки.
Само
название KDE -- явная пародия на CDE -- Common Desktop
Environment ("Общая настольная среда") -- последнюю
попытку отрасли стандартизовать графическую среду на несвободной
основе, предпринятую в конце девяностых годов. "K" в KDE
ничего не означает.
Несмотря на явно игривый тон, начинающийся с названия среды и продолжающийся в названии компонент (в KDE любят играть со словами; например, универсальный браузер, входящий в среду, называется Konqueror (от Conqueror -- "завоеватель", "покоритель"), терминал -- Konsole (от Console -- "консоль), а система помощи -- вообще Kandalf (от имени Гэндальфа, мага из фантазийных произведений Дж.Р.Р.Толкиена)), KDE -- очень серьезный проект.
Если единообразие и "сплошность" среды считать достоинством, то KDE -- несомненный лидер среди всех (как свободных, так и несвободных) интегрированных графических сред. Основное "видимое" средство интеграции -- это универсальный браузер Konqueror. Функция Konqueror близка к той, которую приобрел Microsoft Internet Explorer в Microsoft Windows (начиная с MS Windows 98 в линейке MS-DOS и MS Windows 2000 в линейке NT) -- он совмещает функции гипермедийного браузера WWW и браузера локальных ресурсов.
Разработчики KDE пошли даже дальше своих коллег из Microsoft и определили ряд дополнительных протоколов, что позволило, в частности, просматривать с помощью браузера в единообразном формате все разнообразие справочной информации, представленное в сегодняшних открытых система (традиционные страницы руководства man, гипертекстовую систему Info из проекта GNU, разрозненные файлы документации в текстовом и гипертекстовом формате). В Konqueror интегрирована также возможность предварительного просмотра содержимого большого количества типов файлов.
KDE включает также настраиваемую систему панелей и меню и интегрированный "центр управления", позволяющий согласованно изменять параметры среды. KDE несколько менее гибка в настройке, чем GNOME, однако на ее гибкости вполне достаточно для решения любых практических задач (в том числе, имитации вида и поведения других сред). KDE работает только с собственным оконным менеджером KWin.
В поставку KDE входит множество "аксессуаров" и прикладных программ, к тому же "рядом" с проектом выросла целая "грибница" сопутствующих, ориентированных на те или иные предметные приложения, из которых самым развитым является KOffice.
С проектом KDE тесно сопряжен проект KOffice, в рамках которого разрабатываются "офисные" программы на основе той же основной библиотеки Qt и предназначенный для совместного с KDE использования. KOffice на сегодня включает в себя следующие основные программы, находящиеся на разных стадиях готовности:
word-процессор (редактор размеченного текста) KWord. Несмотря на позиционирование этой программы как word-процессора, она более напоминает простую настольную издательскую (DTP) систему благодаря концепции "фреймов" (областей печати, обладающих собственной геометрией и способных содержать текст или объекты, созданные в других программах, входящих в этот пакет (рисунки, формулы и т.п.);
программу работы с электронными таблицами Kspread;
программу подготовки мультимедийных презентаций Kpresenter;
программу работы с блок-схемами (flowcharts) Kivio;
векторный графический редактор Karbon14;
простой растровый графический редактор Krita;
программу генерации отчетов из баз данных Kugar;
интегрированную программу подготовки графиков и диаграмм Kchart;
редактор формул Kformula;
пакет управления проектами KPlato (разработка этого проекта только началась).
Собственные форматы KOffice ориентированы, как и собственные форматы большинства современных "офисных" пакетов, на XML, хотя не все из них являются чисто XML-приложениями. Заявлена поддержка достаточно большого количества "чужих" и унаследованных форматов, хотя качество поддержки на сегодня весьма среднее; в особенности последнее относится к поддержке кириллических текстов.
KDE и KOffice достаточно оперативно локализуются (см. www.kde.ru), однако, к сожалению, в переводах на сегодня еще больше, чем в оригиналах, "персонально-компьютерного" сленга.
GNOME и KDE входят в поставку практически всех (свободных и несвободных) открытых систем для всех аппаратных платформ. Об их стабильных переносах под альтернативные ОС нам ничего не известно.
Дополнительную информацию о них можно найти на сайтах http://www.gnome.org и http://www.kde.org, соответственно. Русская информация о KDE периодически обновляется на http://www.kde.ru (http://www.gnome.ru не обновляется, текущие локализационные инициативы "сбрасываются" в основное дерево разработки).
Базовую информацию об обеих интегрированных средах можно найти практически в любом "неканоническом" учебнике или руководстве по Linux (например, в [20]) или в документации по любому дистрибутиву, однако вряд ли вы найдете там что-то такое, чего не было бы во встроенных электронных руководствах. Существует обширная англоязычная (для KDE -- еще и немецкоязычная) литература для разработчиков в обеих средах, из которой на русский пока ничего не переведено.
Типичные локально-сетевые приложения -- это разделение файловых структур, услуги печати, централизованная аутентификация пользователей и т.п., предоставляемые в масштабе от одного офиса (комнаты) до целой группы зданий.
Типичные интернет-приложения11 -- это электронная почта, WWW, обмен "быстрыми сообщениями" ("интернет-пейджинг") и пр. системы, разворачиваемые обычно в глобальном масштабе.
Основной тенденцией последнего десятилетия стало постепенное вытеснение специализированных локально-сетевых низкоуровневых протоколов и замена их интернет-протоколами (TCP/IP). Даже протоколы, специально разработанные для персонально-компьютерных систем и используемые в унаследованных сетях, такие, как AppleShare или NetBIEU, могут сегодня развертываться поверх TCP/IP. В отличие от сетей Интернет, образующих сообщество с единой нумерацией и единым именованием компьютеров, локальные TCP/IP-сети, отделенные от Интернет, называют интранет.
Поддержка TCP/IP на сетевом и транспортном уровнях впервые реализована в ОС BSD и реализована в современных ОС на уровне ядра12. На уровне ядра обычно -- из соображений эффективности -- реализуются и такие, например, сервисы, как экранирование (firewalling) трафика. Протоколы более высокого уровня реализуются в виде системных или прикладных сервисов.
NFS. В открытых ОС локально-сетевая функциональность традиционно реализуется в рамках концепции Сетевой файловой системы NFS. NFS позволяет предоставлять каталоги для удаленного монтирования и монтировать (т.е. делать частью локальной файловой системы) их удаленно. Поскольку с точки зрения стандартной ОС любое устройство представлено файлом, этого достаточно не только для совместной работы с каталогами, но и предоставления доступа к принтерам, ленточным накопителям и прочему оборудованию13.
БД и доступ к ним. Так же традиционно более сложная семантика сетевых взаимодействий (для которых файловое представление данных и файловые операции влекут слишком большие издержки), внедрялась с помощью баз данных совместного доступа и специальных протоколов доступа к ним14, таких, как DAP (X.500) или его упрощенная и более популярная версия LDAP. LDAP входит в поставку практически всех дистрибутивов свободных ОС и широко используется в современных системах, но пока в основном для решения административных задач.
SMB и его расширения. В персонально-компьютерных системах большее развитие получил альтернативный подход, опирающийся на концепцию обмена блочными сообщениями (SMB), разрабатывавшийся первоначально корпорацией IBM, на основе которого компаниями Novell, Microsoft и другими были разработаны семейства локально-сетевых протоколов высокого уровня, к сожалению, не стандартизированные и переусложненные. Более сложная семантика обмена блочными сообщениями влечет за собой и более сложный аудит безопасности построенных на его основе систем, поэтому применимость SMB и его расширения в серьезных приложениях ограничена.
Тем не менее, существует современная авторитетная и очень эффективная свободная реализация SMB и (частично) его позднейших расширений, называющаяся SAMBA (www.samba.org). SAMBA входит в поставку практически любого дистрибутива свободных ОС.
SAMBA дает возможность предоставлять в совместный доступ каталоги, а также принтеры и другие устройства и получать к ним доступ15, что позволяет разворачивать сложные гетерогенные сети, включающие, помимо стандартных ОС, также унаследованные системы на основе Microsoft Windows и Novell OS.
SAMBA предполагает использование специфических локально-сетевых протоколов, таких как IPX или NetBIOS, лишь поверх TCP/IP, что, хотя и влечет за собой некоторые издержки16, но позволяет заметно повысить надежность системы за счет применения собственных средств обеспечения безопасности TCP/IP (экранирование, а при необходимости и шифрование и аутентификацию трафика).
Пакет SAMBA доступен как для открытых ОС, так и для ряда альтернативных архитектур (включая Microsoft Windows NT. Более подробно функциональность SAMBA в этих "лекциях" рассматриваться не будет.
Серверная и инфраструктурная составляющая межсетевых цифровых коммуникаций -- традиционное приложение для свободного ПО. В этой "лекции" мы не будем погружаться в организацию локальных сетевых служб, WWW-серверов и т.п., хотя это важная и нужная в школе тема, она не имеет прямого отношения к предмету школьной информатики. Ниже следует обзор некоторых свободных клиентских программ, реализующих современную сетевую функциональность сессионного, презентативного и прикладного уровня.
Среди массы свободных клиентских программ, связанных с сетевой функциональностью, за ограниченностью печатного объема остановимся на проекте Mozilla.
Mozilla представляет собой свободный пользовательский прикладной пакет, реализующий интерфейсы просмотра WWW (браузер), электронной почты и новостей USENET, многопользовательских диалогов в реальном времени ("чатов") IRC и редактирования страниц WWW (компоновщик). Входящие в пакет программы, таким образом, открывают доступ ко всем наиболее популярным приложениям Интернет (кроме, на сегодня, "быстрых сообщений"). Существенной сильной стороной Mozilla является практически неизменная функциональность и эргономика на широком спектре платформ, включая как стандартные (MacOS X, GNU/Linux, Solaris, Irix, HPUX, BSD/OS и пр.), так и альтернативные (MacOS 9, Microsoft Windows, BeOS, OS/2) операционные системы на большинстве аппаратных платформ.
Слегка модифицированная версия Mozilla 1.x также распространяется организатором разработки -- компанией AOL Time WarnerКомпания AOL приобрела три года назад компанию Netscape. проект Mozilla прототипировался на ранних разработках этой компании -- Netscape Navigator и Netscape Communicator, являвшихся, в свою очередь, развитием первого графического WWW-браузера NSCA Mozaic. -- под названием Netscape Navigator 6.x и 7.x.
Русская локализация Mozilla выполнена Валентиной Ванеевой, Вадимом Виниченко и Сергеем Дегтярвым.
Браузер.
Для просмотра страниц WWW и "хождения" по FTP-серверам
предназначен компонент Navigator. На панели компонент Mozilla он
изображается морским штурвалом (см. рис. 1).
Все возможности программы доступны из меню, наиболее часто употребляемым соответствуют также "горячие клавиши" и кнопки панели навигации. Под меню -- еще одна панель, которую можно настроить по своему желанию (чаще всего, на нее выносятся ссылки на десяток самых посещаемых страниц), еще ниже -- окно для отображения гипертекстовой информации с посещаемых страниц. Замыкает окно строка состояния с панелью компонент слева и служебными пиктограммами справа.
С каким бы компонентом вы не работали в даный момент, всегда можно запустить любой другой кнопкой с соответствующим значком из панели компонент или пункт меню "Окно". Из пункта меню "Создать..." вы можете, кроме того, открыть еще одно окно просмотра или вкладку (вкладка -- это окно в окнеИдея использовать вкладки в основном окне браузера впервые была реализована в браузе Opera. Будьте осторожны: начав их использовать, вы вряд ли затем удовлетворитесь браузером, не поддерживающим такой возможности.) уже открытого окна, на разных вкладках вы можете просматривать разные страницы с одного сайта или разные сайты. Это позволяет не захламлять экран и панель задач окнами одного типа и сразу видеть, где закачка страницы уже завершилась, а где еще нет.
Из пункта меню "Файл" можно также открыть любой локальный html-файл или каталог (или файл другого известного Навигатору формата, например, графический или текстовый), одной командой переслать по почте адрес понравившейся страницы или даже всю страницу, сохранить страницу на жестком диске или напечатать на принтере.
Программа ведет учет страниц, которые вы посетили ("Перейти... Журнал посещений"). Это удобно для быстрого возврата на уже посещенную страницу. Сколько просмотренных адресов (и на какое время) программа будет их сохранять, можна указать в общем окне настроек.
Как и в других браузерах, вы можете вести структурированную базу закладок на понравившиеся сайты и редактировать параметры каждой закладки, в частности, менять названия и делать пометки на память: а чем же зацепила вас именно эта страница.
Навигатор может передать запрос на поиск информации на указанные поисковые машины, дает возможности управления заполнением форм и блокирования изображений (это удобно для отсечения рекламы из многочисленных баннерных сетей) и cookies конкретных сайтов, запрета появления выскакивающих окон.
Наверное, самая интересная особенностью программы -- "боковая панель" (Sidebar). Размещенная в левой части всех окон, она значительно облегчает работу. На нее можно вывести множество полезной информации. Например, вы можете настроить ее так, чтоб сразу при запуске программы, видеть свежие новости новости с любимых новостных сайтов, все свои закладки в виде дерева, иметь доступ к своим любимым поисковикам или еще что-нибудь, что сами придумаете.
Почта. Электронная почта соревнуется с WWW за почетное звание главного коммуникационного приложения. Существует масса свободных программ для работы с почтой, и среди них -- модуль Мозиллы "Почта и новости".
Открыть его можно, нажав кнопочку с изображением конверта, выбрав соответствующий пункт меню "Окна".
Этот модуль позволяет обмениваться письмами с друзьями, писать и получать почту из почтовых рассылок и групп новостей. Всю свою почту вы можно разложить по папочкам и настроить систему фильтров, чтобы новая почта попадала, куда нужно, а надоедливый спам -- в мусор.
Вы можете отвечать на письма, переадресовывать полученное кому-то еще, отсылать и получать нужные файлы. Когда нужно быть уверенным в личности отправителя и неприкосновенности письма, воспользуйтесь интеграцией с GPG, свободной реализацией популярного формата OpenPGP, обеспечивающих электронную подпись и шифрование сообщений.
В почтовом ящике возможен поиск по теме, отправителю, словам в самом письме, дате, приоритету, адресатам, датам или комбинации этих параметров -- этого хватит, чтоб не потеряться в своем почтовом ящике. Можно иметь несколько почтовых ящиков на разных серверах и работать с ними в одном окне.
Главное окно программы поделено на четыре части. Слева вверху -- список почтовых ящиков, под ним боковая панель. Справа вверху -- список писем в выбранной папке, под ним -- текст выбранного сообщения. Многие из них можно временно спрятать, чтоб освободить место для других окошек. И здесь доступна боковая панель со всеми ее возможностями.
Выбрав в правой части название почтового ящика, вы увидите список действий, которые можете выполнить в нем и над ним. Например, настроить сам почтовый ящик, если есть необходимость, и его параметры роботы с почтовым сервером, параметры для исходящих и входящих сообщений. Возможности гибкой настройки и мощная система фильтрации сообщений, вместе с возможностями проверки правописания для многих языков (включая английский, русский, украинский) сделают вашу переписку удобной и приятной.
"Компоновка" собственных страниц. Немного побродив по Сети, каждый испытывает желание сообщить о чем-то своем всему мировому сообществу. Препятствием к этому оказывается необходимость изучать стандарт HTML. Не очень-то просто найти для этого время, особенно если речь идет о создании странички на пару абзацев о домашнем любимце.
В этой ситуации вам на помощь прийдет "Компоновщик", спрятавшийся за кнопкой с листком и пером для письма. Вызвав его, вы сможете быстро и без погружения в изучение стандарта создать простую страницу в режиме визуального редактирования. Как в word-процессоре, просто пишете текст, вставляете таблицы и рисунки и сразу можете видеть, что у вас получается. Более того, заглянув на другие вкладки окна Компоновщика, можно еще и подучить HTML. В этом помогут вкладки "Все теги" и "<HTML> Код". Проверить, как ваша работа будет смотреться в окне просмотра Navigator, можно на последней вкладке. Главное преимущество этого инструмента перед многими похожими состоит в создании правильного HTML кода без лишних и нестандартных тегов, поэтому рекомендую его как первый инструмент начинающего (разумеется, для создания серьезных проектов изучение стандартов W3C обязательно).
В окне программы сперва линейка меню, под ней инструментальные панели, далее главное рабочее окно с вкладками и панель состояния под ним. Для подробного описания всех возможностей модуля потребуется не одна страница. Просто запустите его и попробуйте что-нибудь создать. Большинство пиктограмм и команд никакого объяснения не требуют.
Адресная книга. По мере того, как увеличивается круг ваших знакомых, помнить все необходимые адреса становится все тяжелее, но на помощь приходит адресная книга программы. Каждый раз, когда вы пишете письмо новому адресату или получаете письмо от нового отправителя, этот компонент программы запоминает его адрес. Дальше, когда вы начинаете заполнять поле "кому" нового письма, он пытается завершить набор за вас. Если адрес угадан правильно, можно просто переходить к заполнению остальных полей. Когда программа ошиблась, можно выбрать подходящий адрес из выпадающего списка или завершить набор самостоятельно.
Внешний вид окна Адресной книги достаточно типичен: снова, сперва меню, затем панель инструментов и основное окно с панелью состояния. Основное окно поделено на четыре части, некоторые из которых можно прятать. Слева -- названия коллекций адресов вверху и боковая панель под ними. Справа -- список карточек выбранной коллекции вместе с панелью поиска по ним вверху, и окно для отображения информации с выбранной карточки внизу. Записи для каждой карточки редактируются по необходимости.
Настройки. Мозилла -- пакет не только мощный, но и очень гибкий в настройке. Все доступные параметры настроек собраны в одном окне -- дерево доступных настроек поделено на категории в соответствии с имеющимися программами плюс несколько общих.
В общей категории "Внешний вид" настраивается использование шрифтов для каждой кодовой страницы, отображаемые при запуске Мозиллы окна, использование цветов, язык интерфейса.
Вторая общая категория -- "Дополнительно" -- позволяет отрегулировать использование cookies, Java, размер и время сохранения буфера на диске для быстрого возврата к уже просмотренным страницам, использование прокси-серверов и еще некоторые полезные параметры.
Название группы "Приватность и безопасность" говорит само за себя. Количество доступных в ней настроек, говорит о том, насколько ответственно разработчики отнеслись к этому вопросу. Предлагаю вам разобраться с ней самостоятельно.
Регулировать внешний вид окна программы и степень "свежести" страницы в окне просмотра, вам позволят пункты меню "Вид". Отсюда можно запретить или разрешить показ каждого из компонентов окна программы, подобрать размер шрифта на странице, изменить, если нужно, кодовую страницу для показа текста, увидеть исходный код страницы и получить информацию про страницу на которой сейчас находитесь.
Возможно, более интересным будет общий взгляд на "начинку" Mozilla, поскольку эта тема остается пока практически нераскрытой в публикациях на русском. А именно интересными внутренними архитектурными решениями и возможностями, которые они открывают для программистов, обусловлена перспективность и востребованность этого проекта.
"Движок" Gecko. Собственно интерпретацию ("рендеринг") гипертекста и гипермедиа в браузере и компоновщике осуществляет "движок" под названием Gecko ("геккон", "ящерка"). Сам по себе "движок" компактен и быстр. Он используется также рядом альтернативных браузеров, таких, как Galeon, Aphrodite и Phoenix; первый из них, достачно развитый и "шустрый", может рекомендоваться пользователям старых или маломощных (например, карманных) машин.
Язык XUL. Видимо, самой интересной особенностью Mozilla является реализация интерфейса пользователя на языке XUL, представляющем собой XML-приложение, т.е. набор определений вида и поведения визуальных объектов, свойственных современным графическим интерфейсам пользователя, на расширяемом языке разметки XML (об XML и его интегрирующей роли в современных приложениях компьютера подробнее говорилось в "лекции" 1).
В большей своей части программы Mozilla "написаны для XUL" и интерпретируются "на лету". Обратной и неприятной для пользователя стороной этого остается значительная ресурсоемкость Mozilla и размер пакета. Базовая установка занимает порядка 30 Мб и комфортная работа в большинстве сред начинается от 128 Мб ОЗУ и 500 МГц процессора.
"Светлой" стороной XUL'ности Mozilla является его чрезвычайная гибкость, что, видимо, позволит уже в ближайшие годы "малой кровью" существенно расширить набор входящих в пакет программ и практически полностью покрыть ими клиентские приложения Интернет.
На рисунке видно, что по специальному протоколу chrome можно
просто "открыть" в браузере еще один браузер (или любой
другой компонент пакета), причем это не просто изображение его
интерфейса, а полноценная работающая программа.
Разумеется, суть использования XUL не в этом, а в том, что на этом относительно простом языке разметки могут быть легко реализованы ... На сайтах www.mozdev.org и www.xulplanet.com можно найти десятки программ на XUL, а по http://books.mozdev.org/chapters/ можно найти текст книги "Создание прикладных программ в Mozilla" (к сожалению, пока только на английском).
Например, так выглядит традиционная первая программа "Привет, мир!" на XUL (ее текст заимствован из упомянутой книги):
<?xml version="1.0"?>
<!-- Sample XUL file -->
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<box align="center">
<button label="hello xFly" onclick="alert('Hello World');" />
</box>
</window>
Знакомым с JavaScript-сценариями в HTML или XML этот пример должен быть кристально понятным. Однако внимание следует обратить на то, что элементы разметки, определяемые XUL, свойственны графическим интерфейсам общего назначения ("окно" (window), "контейнер" (box), "кнопка" (button) и т.п.), и весь XUL-файл определяет интерфейс, а не страницустрого говоря, Mozilla поддерживает и смешанные контексты, например, XUL-компоненты в HTML или наоборот, но XUL-интерпретатор как таковой не обязан этого делать, и XUL-интерпретатором, соответственно, вовсе не обязательно должен быть браузер. XUL может не только интерпретироваться, но и транслироваться, хотя трансляторы нам на сегодня не известны.
Перспективы, открываемые универсальным языком описания графического интерфейса перед отраслью быстрой прикладной разработки (RAD) и практическим программированием вообще -- очевидны. Но здесь уместнее будет указать на методические перспективы: включение в один и тот же вводный курс программирования на XUL наряду с изучением языков разметки контента (например, HTML, особенно в его нынешней, XML-версии) позволит осуществить значительную понятийную экономию. Возможно, что наш кругозор ограничен, но нам не известны другие полноценные языки программирования интерфейса, кроме XUL, являющиеся корректными и исполнимыми XML-приложениями.
Пакет Mozilla в исходниках и сборках для большинства ОС доступен на главном сайте проекта, локализованные версии -- на русском сайте. Mozilla входит в большинство поставок открытых ОС (как свободных, так и несвободных).
http://www.oasis-open.org -- рабочая группа поддержки XUL;
http://www.mozilla.org -- главный сайт проекта;
http://www.mozilla.ru -- русский сайт проекта;
http://mozdev.org -- сайт дополнительных приложений Mozilla.
1. Министерство образования Российской Федерации. "Обязательный минимум содержания образования по информатике".
2.
Максим Отставнов (ред.). "Свободное программное обеспечение:
бизнес-модели и корпоративные инициативы" -- М.: ГУ-ВШЭ,
2001. Расширенную версию этого сборника можно найти на:
http://www.otstavnov.com/fsr
3.
Эрик Рэймонд. "Собор и базар" // "Открытые
системы", ## 09-10, 1999 г.
4. С.В. Сергеев, Н.А. Роганова.
Практическая информатика: учебное пособие. Ч.1 -- М.: МГИУ,
2001. См. тж. http://www.ctc.msiu.ru/materials/
5. "Информатика"
# 29, 2002 г.
6. Документация на StarOffice 5.2 ("Руководство
пользователя" и "Инструкция по инсталляции", в
совокупности около 600 стр.) входит в русское "коробочное"
издание этого пакета. "Руководство пользователя" также (в
значительно улучшенном переводе) издавала и включала в "коробочные"
издания своих дистрибутивов, содержащих StarOffice, московская
компания ASPLinux (www.asplinux.ru). Следует заметить, что OO.o 1.0
несколько отличается от StarOffice 5.2 и более ранних версий; однако
единственным серьезным с точки зрения пользователя отличием является
лишь отсутствие единого "рабочего стола" в первом.
7. Сергей Глушаков, Алексей Сурядный. Linux для дома и офиса: Учебный курс. -- Харьков: "Фолио", 2002. -- 389 с. Несмотря на название, бОльшая часть этой книги посвящена прикладным свободным пакетам, и в том, что касается OO.o и Mozilla, ее содержание неспецифично для Linux (или каких-либо конкретных ОС вообще). Часть III, посвященная OW -- это стодесятистраничное (т.е. занимающее более четверти книги) описание базовой функциональности OW с точки зрения пользователя.В OpenDraw уделили всего 7 страниц. Часть, посвященная OpenCalc -- это восьмидесятистраничное (т.е. занимающее около четверти книги) описание базовой функциональности OpenCalc с точки зрения пользователя.
8. Антон Ионов и др. OpenOffice.ru. Руководство пользователя. -- М.: ALT Linux, 2002. -- 115 с. Двадцать пять страниц этой брошюры, не продающейся отдельно, но входящей в "коробочную" комплектацию ALT Linux 2.0 Master и OpenOffice.ru и доступной на сайте http://docs.openoffice.ru, посвящено OW, и это действительно кратчайшая инструкция по использованию.В Двадцать пять страниц посвящено OpenDraw, и это действительно кратчайшая инструкция по использованию, пятнадцать страниц --В OpenCalc
Для методических целей ценно то, что это свободная книга, изданная под лицензией GNU для свободной документации (GNU FDL) и, соответственно, она может использоваться (включая модификацию и распространение) без дополнительных разрешений или отчислений авторам (не забывайте о соблюдении неимущественных прав авторов и о том, что распространение модифицированной версии допускается лишь на условиях той же лицензии).
9. С.В.Андреев, Н.А.Роганова. Практическая информатика: Учебное пособие. Часть 1. -- М.: МГИУ, 2001. -- 348 с. Это тоже свободная книга под GNU FDL, ее можно купить на бумаге или скачать отсюда: www.ctc.msiu.ru/materials/books.php. Пособие консервативно и, несмотря на обновление, пока описывает StarWriter 5.2, а не OW; впрочем, как уже отмечалось, разница между ними с точки зрения пользователя невелика.
10. Т.Робертс, "Текстовые редакторы" // "Человеческий фактор". Т. 6. -- М.: "Мир", 1992
11. Дэвид Тейнсли "Linux и Unix: программирование в shell" -- Киев: BHV, 2001
12. Ричард Столлмен. Руководство по GNU Emacs (тринадцатая редакция) -- М.: Институт логики, 1999
13. Karin Kylander & Olof S Kylander. GIMP: The Official Handbook. The Coriolis Group: 1999, ISBN 1-57610-520-2
Карина и Олаф Киландер взяли на себя нелегкий труд официального документирования GIMP, созданного полутора сотнями программистов. Написанный ими "Официальный справочник по GIMP" доступен (в разных форматах, включая готовые к печати postscript- и pdf-файлы) со страниц http://manual.gimp.org, он также издан на бумаге The Coriolis Group.
Остается надеяться, что рано или поздно эта книга появится и по-русски, а пока скачать это монументальное тысячестраничное издание рекомендуется всем, кто читает по-английски и использует или готовится использовать GIMP. Тем, кто пока не собирается -- тоже, поскольку, помимо всего прочего, эта книга -- одно из лучших введений в растровую компьютерную графику вообще.
14. Carey Bunks. Grokking the GIMP New Riders Publishing, 2000; ISBN: 0735709246; 352 pp.
Из другой литературы, посвященной GIMP, можно порекомендовать написанный Кэрием Банксом учебник Grokking the GIMP, также доступный в Сети на http://gimp-savvy.com/BOOK/.
15 Nikolai Bezroukov. The Orthodox File Manager (OFM) Paradigm. Work in progress // http://www.softpanorama.org/OFM/Ofm_00.shtml
16 D. Englebart, W. English. A Research Center for Augmenting Human Intellect // AFIPS Conf. Proc., Fall Joint Computer Conf. -- San Francisco, 1968.
17 Фредерик Брукс. Мифический человеко-месяц: двадцать лет спустя // Его же. Мифический человеко-месяц. -- СПб.: "Символ-плюс", 1999
18 Виктор Вагнер. True UNIX GUI // http://www.ice.ru/~vitus/thoughts/true_unix_gui.txt/true_unix_gui.txt
19. "Домашний компьютер" #12, 2002 г. Материалы номера также доступны онлайн (http://www.homepc.ru/offline/2002/78/).
20. Матт Уэлш и др. "Запускаем Linux" -- СПб.: "Символ", 2000
Максим Отставнов <maksim@otstavnov.com> (www.otstavnov.com) -- ведущий аналитик компании TechInvestLab.com, член редколлегий еженедельника "Инфобизнес" (www.ibusiness.ru) и ежемесячника "CIO" (www.cio.ru), член рабочей группы по законодательству в области электронной экономики при Председателе СФ Федерального собрания РФ, член экспертного совета фонда "Новая экономика" (www.neweco.ru).
Основная область профессиональных интересов -- гуманитарные аспекты и социокультурные эффекты информационных технологий. Автор более 150 статей, редактор-составитель сборника "Свободное программное обеспечение: бизнес-модели и корпоративные инициативы" ( М.: ГУ-ВШЭ, 2001).
1 Например, типичная цена одно-двухдискового дистрибутива российской сборки, включающего софт, достаточный для обеспечения школьной программы по информатике, не превышает трехсот рублей, в то время, как комплект Microsoft Windows и Microsoft Office, покрывающий лишь часть программы, со всеми скидками обойдется не дешевле трех тысяч.
2 Возможно, использование двоичных форматов и было оправданно во времена, когда позволяло экономить байты памяти и носителей на "персоналках" с крайне ограниченными аппаратными ресурсами. В то же время, современные компьютеры (даже относимые к классу персональных, "стартового уровня") обладают ресурсами, позволяющими организовать гораздо более удобную схему: сжатие "на лету" по стандартному алгоритму стандартно размеченного текста или иных данных.
3"В девичестве" (до того, как американская корпорация Sun Microsystems приобрела немецкую компанию StarDivision и свободно лицензировала код, права на который принадлежали ранее последней) пакет назывался StarOffice, а word-процессор -- StarWriter; под таким названием он получил известность и обрел достаточную популярность, в том числе, и в России (особенно версии 5.1 и 5.2).
4 Кривую обучения можно сгладить, создав дополнительный набор макрокоманд под конкретный курс и, наверное, это правильный способ, но он потребует от методиста незаурядного знания не только Emacs, но и Emacs Lisp.
5 Мы не касаемся здесь специального вопроса о сложных форматах кодирования, включающих векторные элементы и фрагменты растра, так же, как и -- растрового и векторного -- кодирования движущихся изображений и вопросов сжатия растровых изображений.
6 Стоит отметить, что стоимость одной копии последнего, самого по себе не дешевого, вместе со всеми такими модулями составляет несколько тысяч долларов.
7 Поскольку использование тех или иных языков программирования в учебном процессе само по себе является предметом постоянных споров, на всякий случай стоит, не погружаясь в глубину аргументации, все же заметить, что автор придерживается весьма консервативных взглядов, и считает, что в качестве первого языка лучше всего подходят Алгол-60, Паскаль, АПЛ или любой другой простой язык сентенционального программирования, либо простой объектный язык наподобие Лого. Использование языков, поощряющих плохой стиль (как Бейсик) или лояльно к нему относящихся (как С), во всяком случае, не кажется ему удачным выбором. Крайне важным ему кажется хотя бы поверхностное знакомство как минимум с двумя с разными (разработанными в ориентации на разные парадигмы) языками.
8Возможностью представить их обзор в компактном виде автор обязан прежде всего своим соавторам по [3] Егору Гребневу, Сергею Иванову, Михаилу Шигорину.
9 Следует отметить, что большинство базовых функций оконных менеджеров при исполнении опираются на поддержку оконной системой X функций двумерной графической акселерации (ускорения), реализованных практически во всех современных графических адаптерах. В отличие от трехмерной акселерации, полезной лишь для достаточно узкого круга приложений (программ трехмерного моделирования, компьютерных игр), двумерная акселерация -- действительно универсальна полезна для графического пользовательского интерфейса. При использовании карты без двумерного ускорения или карты, чья акселераторная функциональность не поддерживается системой X, можно рекомендовать настройку среды для исключения, например, визуализации перемещения окна со всем его содержимым, дабы избежать неоправданного роста нагрузки на процессор и драматического падения производительности.)
10 Имеются в виду графические оболочки (Microsoft Windows 1.x, 2.x, 3x, 9x и Me), а не семейство Microsoft Windows NT (сегодняшними версиями которых являются Microsoft Windows 2000, XP и .NET Server).
11 Здесь и далее "интернет" с маленькой буквы обозначает сумму сетевых технологий, основанных на протоколах TCP/IP, а "Интернет" с заглавной -- всемирное сообщество интернет-сетей. Возможно разворачивание интернет-сетей, не входящих в Интернет. Слово "интернет" -- сокращение от internetworking, что буквально означает всего лишь "межсетевое взаимодействие".
12 Все существующие реализации восходят к Berkley TCP/IP Stack в качестве живого прототипа, хотя в некоторых ОС сам текст реализации уже переписан по несколько раз.
13 Реально используются несколько более сложные приемы, при которых удаленный доступ предоставляется не к самому устройству, а к очереди заданий для него.
14 Наряду со стандартным SQL.
15 А также выполнять некоторые другие локально-сетевые процедуры, такие как объединение отдельных систем в "домены" и управление ими.
16 Практически незаметные в современных 100-мегабитных и гигабитных Ethernet-сетях.
17 Раздел написан Андреем Добровольским <dobr@iop.kiev.ua>. Текст ранее публиковался в [19].
Last-modified: Tue, 22 Apr 2003 08:43:40 GMT