перед" те действия, которые должны быть выполнены.

5.1 "Убойное приложение" ПК

У маркетологов есть такое сленговое выражение: "убойное применение", или "убойное приложение" (killer application). Оно означает то применение какой-либо многофункциональной в своей основе вещи, которое формирует основную долю спроса на нее и превращает ее из модной новинки в массовый товар.

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

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

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

Даже на ранних ПК вывод данных на экран был, в масштабах человеческого восприятия, мгновенным (если не "тормозила", конечно, сама программа). Это позволило относительно дешево реализовать различные приложения, сама идея которых в том, чтобы представить пользователю "живую" презентацию каких-либо данных. К числу таких приложений относится полноэкранное редактирование текстов и, в особенности, работа с электронными таблицами. Электронные таблицы -- это, по большому счету, единственное приложение компьютера, которое было придумано для ПК и впервые реализовано на ПК. Сегодня, разумеется, благодаря многократно возросшей скорости передачи данных, редакторами электронных таблиц можно пользоваться в компьютерных системах и сетях практически любой топологии (упомянутый ниже KSpread без проблем заработал на карманном компьютере Sharp Zaurus).

5.2 Программирование особого рода

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

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

По сути дела, электронная таблица предполагает использование простого функционального языка программирования (точнее, современные системы управления электронными таблицами как правило реализуют язык формул, функциональный в своей основе, но с элементами инфиксной нотации, т.е. с возможностью вместо "=функция1(функция2((сумма(а; произведение(b;c)))))" написать чуть короче: "=функция1(функция2(a+b*c))").

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

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

5.3 Свободные редакторы электронных таблиц

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

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

Упомянутое выше слово -- зрелость самого приложения -- ключевая характеристика. Набор ожиданий пользователя, в общем-то, известен, причем не только в части функциональности, но и в части основных эргономических характеристик программы: помимо богатых выразительных возможностей самих функций, для работы с электронными таблицами важна т.н. "остенсивная" операторика, иными словами, возможность "показать пальцем" на объект, с которым нужно произвести те или иные действия. Например, "суммировать значения вот этих ячеек", а не "... ячеек с A5 по D5". В большей, чем в других приложениях, мере очевидны эвристики, которые должны реализовываться программой в качестве "подсказок"; например, если в ячейку, завершающую длинный столбец чисел, пользователь намерен ввести формулу, скорее всего он суммирует значения, а если он начал ряд "1 2 3" или "январь, февраль, март", скорее всего, он продолжит его очевидным образом.




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

За две недели, которые готовилась эта "лекция", автор (в обычной жизни не пользующийся этим классом программ), проверяя свои впечатления, "играл" с четырьмя подобными системами, пытаясь решать несложные задачки, которые обычно он решает (ввиду специфики личного профиля навыков) с помощью СУБД, включая 1) элементарные инженерные расчеты (расход материалов и жесткость корпусной мебели), 2) бюджетирование небольшого проекта, 3) бюджетирование личных расходов. Под горячую руку попали и 4) три задачки из учебника алгебры его сына (за 11 класс), две из которых даже удалось с ходу решить.


В число этих систем вошли три упомянутые свободные программы и, в качестве контрольного образца, очень популярная несвободная Microsoft Excel (из офисного пакета Microsoft Office 2000). Вывод: существенной разницы в возможностях и способах их реализации 99% пользователей не обнаружат. Некоторые тонкости: самой "интуитивной" показалась Gnumeric, лучше всего документирована Microsoft Excel, у последней также наиболее развиты средства визуализации (построение графиков и диаграмм).

Тем не менее, если бы автору предстояло регулярно работать с электронными таблицами, скорее всего, его выбор пал бы на сравнительно "серенькую" OpenCalc из-за единства интерфейса и интегрированности с OpenWriter и OpenDraw, которыми он пользуется регулярно.

5.4 Обзор возможностей OpenCalc

Как и остальные упомянутые программы (за исключением 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) в команде разработчиков есть российские программисты и фирмы, которым небезразличны перспективы его применения в школе.

5.5 Ресурсы

Пакет 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].

Лекция 6. Строка длиною в жизнь

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

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

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

В 1967-68 гг. Дуг Энгельбарт представил прототип т.н. WIMP-интерфейса, т.е. интерфейса, использующего понятия окон (windows), пиктограмм (icons), меню (menus) и указателей (pointers), являющихся ключевыми и для сегодняшних графических пользовательских сред.

В 1968-69 гг. Кен Томсон и Деннис Ричи представили первый релиз ОС UNIX, по сути, явившейся прототипом артикулированной системы современных понятий практической информатики, таких, как процессы и файлы, и содержащей непротиворечивый, логичный и лаконичный язык работы с соответствующими им сущностями, который спустя полтора десятка лет стал стандартным пользовательским интерфейсом ОС. (Рубеж шестидесятых и семидесятых -- уже -- прошлого -- века вообще является "осевым временем" информатики и вычислительной техники...).

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

При этом, для большинства пользователей знакомство с "командной строкой" до недавнего времени отягощалось радикальным упрощением и изменением, которым язык стандартной оболочки ОС был подвергнут при разработке ОС для ПК (таких, как CP/M, MS-DOS (PC-DOS) и клонов последней). Ограничиваясь знакомством со средствами MS-DOS и ее командных файлов, о метафоре "командной строки" можно составить лишь весьма превратное и убогое представление.

6.1 Текстофобия

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

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

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

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

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

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

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

Мак-Льюэн, впрочем, в своем "зондировании" (как он именовал свое творчество, весьма последовательно отказываясь называть свои поздейшие произведения "текстами") был достаточно ироничен, что в гораздо меньшей степени наблюдается в творчестве его последователей.

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

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

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

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

Однако мысль о том, что пиктограммами и жестами можно заменить полноценный язык, напоминает нам лишь одну из гениальных идей академии наук в Лагадо, описанной Свифтом в "Третьем путешествии Гулливера":

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

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

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

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

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

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

6.2 Командная оболочка: основные понятия

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

Пользователю эта функциональность доступна только опосредованно, через особую программу, которая "общается" с ним посредством терминала и вполне логично называется "оболочкой". Теоретически оболочка могла бы реализовать замкнутый язык диалога (и ранние архитектуры ОС носят следы таких попыток), но в открытых системах принята другая философия -- разделения, специализации и минимизации программ. Поэтому на практике оболочка используется вместе с утилитами -- набором самых часто употребляемых программ -- и лишь синтаксис и семантика оболочки вкупе с синтаксисом и семантикой используемых утилит и образуют полноценный формальный язык диалога пользователя с системой. В июне 1993 г. этот язык был стандартизован Международной организацией стандартизации (документ ISO/IEK IS 9945-2:1993), но известен он больше под своим "отраслевым" названием POSIX.2.

Существует множество реализаций стандартного языка оболочки и утилит, восходящих к системам Unix, BSD, проекту GNU и некоторым другим проектам. Наиболее популярной на сегодня является bash в составе GNU Tools, разработанных частично в Фонде свободного программного обеспечения и частично при его поддержке. GNU Tools являются, наряду с ядром Linux, основой операционных систем на этом ядре, но доступны и для других ОС, включая альтернативные архитектуры.

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

6.3 Командная оболочка как инструмент

Пользование оболочкой очень просто: в ответ на приглашение ("подсказку"), выдаваемое находящейся в ожидании оболочкой, пользователь вводит команду и, после ее выполнения (возможно, сопровождающееся выводом на экран некоторой информации), оболочка снова выводит приглашение и ожидает следующей команды. И так -- пока пользователь не введет символ конца файла (или команду 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, причем "раскрытие" метасимволов выполняет, опять же, не утилита, а сама оболочка.

6.4 Командная оболочка как язык программирования

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

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

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

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

6.5 Ресурсы

Методическая литература, специально ориентированная на школьный курс и посвященная программированию на языке оболочки, на русском языке сегодня отсутствует, хотя следует отметить, что "классические" руководства по 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 на диске либо скачать с их сайта).

Лекция 7. Графический интерфейс пользователя

До середины девяностых существовали отдельно компьютерная графика и отдельно -- настольные игры в компьютерную графику. Помнящие историю отечественной школьной информатизации читатели, возможно, сталкивались с чудом техники под названием "цифровой дисплей растровый" (ЦДР), которое удавалось подключить к первому отечественному персональному компьютеру ДВК, чтобы отображать на экране телевизора несколько тысяч пикселов в четырех цветах. В то время в Лабораториях Компьютерной Графики некоторых вузов можно было встретить Графические Рабочие Станции с векторными устройствами и X-терминалами, и даже плоттерами.

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

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

7.1 X Window System и Xfree86

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.

7.2 Цветной сэндвич

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

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

Здесь сразу видно отличие X Windows System от большинства самодельных систем графики, используемых в проприетарных системах: взаимодействие X-сервера с его многочисленной клиентурой происходит по специфицированному протоколу, который может туннелироваться через TCP/IP и, соответственно, клиенты и сервер могут исполняться на разных узлах Сети. Это означает, что одни и те же программы могут эксплуатироваться в разных топологиях, включая совокупность автономных рабочих станций ("персональных компьютеров"), совокупность рабочих станций без данных или бездисковых рабочих станций ("локальная сеть"), многопользовательскую систему с X-терминалами (или какую-либо гибридную топологию).

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

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

7.3 "Чистый" 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).

7.4 Окноводы

Как же менеджер окон преодолевает указанное ограничение 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 вторгается во владения другого класса программ -- менеджеров рабочего стола...

7.5 Столоначальники

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

Другой путь -- "дотянуть" до полнофункциональной среды функциональность самого оконного менеджера, и им идет Enlightenment и ряд других проектов.

Что нам не хватает до полнофункциональной среды? Менеджера программ, утилит и приложений. Так вот, в "Просвещении" есть и такая функциональность, доступная (по умолчанию) по щелчку на фоне левой кнопкой.

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

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

7.6 Триумф интерфейса над пользователем?

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

Фредерик Брукс еще в 1995 г., обсуждая основные процессы, произошедшие в программной отрасли за 20 предшествовавших лет, назвал в числе "наиболее впечатляющих явлений" "триумф интерфейса WIMP" [17, сс. 239-243]. В этом ставшем классическим четырехстраничном анализе (всем, интересующимся темой, крайне рекомендуется прочитать эти четыре страницы. А заодно -- и всю книгу Брукса). Брукс:

Прошло еще пять лет, и мы можем отметить, что:

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

Если перечитать текст доклада, в котором идеи WIMP впервые были представлены широкой публике [16], станет понятно, почему: модель WIMP предлагалась как средство непосредственного манипулирования конкретными объектами ("взять это и положить туда", "изменить такое-то свойство того-то объекта", а не как средство формулирования абстрактных положений и команд ("все ли файлы, лежащие в каталоге X, имеют формат Y?", "удалить все файлы, созданные до 01.01.2000 в которых упоминается Борис Ельцин" и т.п.). Соответственно, сделать WIMP-рабочее место для выполнения технических процедур, "рабского", неквалифицированного труда можно, а вот систему поддержки полноценной свободной практики -- затруднительно.

7.7 От какого наследства нам не стоит отказываться?

Виктор Вагнер [18] противопоставляет "рыхлости" модели WIMP, пусть и целостной метафорически, концептуальную целостность командно-строчного интерфейса (см. также нашу предыдущую "лекцию"), основывающуюся на четырех принципах:

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

На самом деле, существует целый ряд систем, в той или иной степени закладывающих основу "интерфейсов следующего поколения". К сожалению, ни одну из них нельзя назвать на сегодня массовой, кроме, возможно, языка описания интерфейса XUL, использованного в Mozilla (www.mozilla.org) и, соответственно, в Netscape 6 (www.netscape.com), но и для XUL пока нет RAD. Но это уже совсем другая тема (см. "Лекцию" 10).

Лекция 8. ГИП II: "Легкие" графические среды

В то время, как сама графическая платформа X Window System много лет является фактическим отраслевым стандартом, лежащие "над" нею слои графической среды не стандартизованы.

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

8.1 Зачем нужны "легкие" среды?

Оборотной стороной интегрированности является достаточно высокая их требовательность к ресурсам. Комфортная работа с 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), следует подумать об использовании такой техники в режиме графических терминалов или, по крайней мере, варианте запуска наиболее "тяжелых" прикладных программ на сервере. Об этом у нас будет возможность поговорить в "лекции", посвященной оборудованию под свободно-программные решения.)

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

8.2 Базовая функциональность оконного менеджера

Как говорилось в прошлой "лекции", ключевой компонент графической платформы -- X Window Server:

В "голой" среде, образуемой X Window Server без оконного менеджера, окно, выделяемое клиенту, является фиксированным: его геометрия (местоположение на экране и размер) задается при запуске клиента и сохраняется в течение всего сеанса работы с этим клиентом. Это вполне соответствует цели создания специализированных систем с графическим интерфейсом пользователя (таких, как мультимедийные киооски и т.п.), но совершенно недостаточно для универсального "настольного" применения.

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

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

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

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

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

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


8.3 "Виджеты"

Базовая (а также расширенная) функциональность оконных менеджеров доступна пользователю прежде всего за счет введения в интерфейс так называемых "виджетов" (widgets = window gadgets, "оконные приспособления") -- таких визуальных элементов, как рамки, кнопки, меню и пр., которые служат "органами управления" окна. Технически виджеты представляют собой отдельные окна (в терминах X Window System), примыкающие к окну прикладной программы и, как правило, перемещающиеся вместе с ним.

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

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

Обрамление окна обычно включает:

Детали реализации обрамления окна могут быть весьма различными в зависимости от конкретного оконного менеджера и его настроек.

8.4 Расширенная функциональность оконного менеджера

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

* * *

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

8.5 Оконные менеджеры BlackBox и FluxBox


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 легко настраивается с помощью механизма "тем" рабочих столов.

8.6 Оконный менеджер WindowMaker


WindowMaker (WM) -- это свободная реализация (в рамках проекта GNUStep) концепций NextSTEP -- первой получившей более или менее широкую известность реализаций идей универсальной графической среды пользователя. За недоступностью оригинальной NextSTEP для современных платформ, познакомиться с WM полезно и поучительно вне зависимости от того, собираетесь ли вы с ним работать -- это позволит увидеть исходную точку развития графических сред и оценить продуктивность (или контрпродуктивность) того, чем эти идеи "обросли" со временем.

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

WM позволяет работать с несколькими "столами" (переключение по умолчанию по Alt-n или через меню, доступное по "щелчку" правой кнопкой на свободном песте "стола"). WM очень гибко настраивается, как в части внешнего вида, так и в части "поведения", причем большая часть настроек доступна из программы Wprefs.app, доступной по щелчку на пиктограмке "со ступенькой".

8.7 Оконный менеджер IceWM



IceWM -- простой оконный менеджер, очень часто выбираемый пользователями, приходящими из-под Microsoft Windows или OS/2, поскольку он способен достаточно точно имитировать их основные черты.

Из автономных виджетов прежде всего стоит отметить панель с кнопкой, вызывающей главное меню (подобно тому, как это делает кнопка в Microsoft Windows, GNOME или KDE). С помощью панели можно также управлять текущим сеансом и настраивать IceWM. Впрочем, основное меню таже доступно и по "щелчку" правой кнопкой на свободном месте "стола", что более привычно для пользователей WindowMaker, Sawfish, Blackbox или Enlightenment.

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

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

8.8 Ресурсы

Упомянутые оконные менеджеры присутствуют практически в любом дистрибутиве свободной ОС, начиная с однодисковых. Исключение составлят FluxBox, обычно не включаемый в "маленькие" дистрибутивы (если очень хочется его посмотреть, а доступа к Интернет нет, попытайтесь найти диск, прилагавшийся к журналу [19] -- при заказе этого однодискового дистрибутива редакция специально попросила включить эту несправедливо "обижаемую" программу.

Упомянутый выпуск журнала содержит, помимо прилагаемого дистрибутива ALT Linux Junior 2.1 (www.altlinux.ru), подборку статей, посвященных использованию свободных программ дома.

Лекция 9. ГИП III: Интегрированные графические среды

Запуск графической среды (точнее, "бутерброда" из X Window System, оконного менеджера и графической среды) в открытой операционной системе можно сравнить с запуском Microsoft Windows в MS-DOS10.

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

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

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

9.1 Плюсы и минусы интегрированных сред

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

(Разумеется, это сильно идеализированная картина. Иногда прикладная логика диктует некоторые элементы эргономики; например, интерфейсы большинства систем автоматизированного конструирования и проектирования (CAD, САПР) весьма сходны, вне зависимости от среды, в которой работают эти программы.)

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

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

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

9.2 Общие черты интегрированных сред

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

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

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

9.3 GNOME (Модельная среда сетевых объектов GNU)



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), но это скорее свойство панели (которое можно менять "на ходу"), определяющее особенности ее поведения, чем тип.

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

На панелях могут присутствовать объекты пяти типов: