"western">Существует влиятельная тенденция в современных гуманитарных дисциплинах, получившая распространение в основном в англоязычном мире и связанная с остроумными теориями канадского профессора Маршала Мак-Льюэна, утверждавшего, что письменная ("визуальная") культура связана с гипертрофией аналитических функций человеческого интеллекта на определенных стадиях его развития, и что ее сменяет культура "аудиальная", направленная на синтез целого путем рассеивания внимания, и возврат к доиндивидуалистическому, общинному сознанию, от полиса и урба -- к "глобальной деревне".
С этой сменой он связывал популярность телевиденья (и утрату популярности чтения как досуга) и "клип-культуры", а его последователи указывают и на несомненный рост в девяностые популярности "графических пользовательских интерфейсов" компьютеров, причем не только в быту, но и в деловом окружении.
Мак-Льюэн, впрочем, в своем "зондировании" (как он именовал свое творчество, весьма последовательно отказываясь называть свои поздейшие произведения "текстами") был достаточно ироничен, что в гораздо меньшей степени наблюдается в творчестве его последователей.
Разумеется, каждый имеет право, хотя оно особо и не оговорено в Конституции, на персональные фобии, и даже право постфактум рационализировать их в теориях. Однако мы полагаем, что никому не должно быть позволено транслировать эти фобии другим, тем менее -- подрастающему поколению.
Компьютеры (и новая генерация "умных" приборов, машин и механизмов, включая промышленные, канцелярские и бытовые) отличаются от всего, созданного человеком ранее способностью непосредственно манипулировать символами, воспринимать символы и сообщать символы человеку, т.е., в некотором роде вести с ним диалог.
Стоит ли называть это свойство компьютеров и программ "искуственным интеллектом" -- отдельный вопрос, но сам факт, по нашему мнению, должен занять одно из основных мест в содержании учебного предмета информатики. В этом смысле, наблюдаемая тенденция к вытеснению программного инструментария, являющего это свойство в самой методически и дидактически откровенной форме, из школьных курсов кажется нам крайне неприятной и нуждающейся в коррекции.
Мы с энтузиазмом относимся к применению графических интерфейсов, как в традиционной сфере компьютерной графики, так и в новых, перспективных приложениях. Картинка часто стоит сотни слов, а энергичный жест способен выразить простую мысль быстро и однозначно.
Однако мысль о том, что пиктограммами и жестами можно заменить полноценный язык, напоминает нам лишь одну из гениальных идей академии наук в Лагадо, описанной Свифтом в "Третьем путешествии Гулливера":
"А так как слова суть только названия вещей, то автор проекта высказывает предложение, что для нас будет гораздо удобнее носить при себе вещи, необходимые для выражения наших мыслей и желаний".
Глядя на визуально-дизайнерское произведение очередного их последователя, лишь удивляешься: из какого мешка он достал значок, выражающий идею: "Вход с жующими мороженое несовершеннолетними леопардами в темное время суток запрещен"? И почему он думает, что этот значок интуитивно понятен?
"Мне часто случалось видеть двух таких мудрецов, изнемогавших под тяжестью ноши ... При встрече на улице они снимали с плеч мешки, открывали их и, достав оттуда необходимые вещи, беседовали в течение часа".
В Ладаго попытка мудрецов осуществить масштабное внедрение своего изобретения закончилась тем, что:
"Женщины, войдя в стачку с невежественной чернью ... пригрозили поднять восстание, требуя, чтобы языку их была предоставлена полная воля ... так простой народ постоянно оказывается непримиримым врагом науки!"
График нагляден, лишь пока цифры на нем можно разглядеть, а пиктограммы осмысленны только при выборе из немногих вариантов (даже сотню дорожных знаков выучить уже непросто). Для артикулированного и гибкого выражения идей (далеко не все из которых можно нарисовать) и их связи человечество выработало такой инструмент, как языки (естественные и формальные), и замены им пока не предвидится.
Опрационная система, как "среда обитания" файлов и процессов, состоит из ядра и оболочки с утилитами. Ядро при нормальном функционировании системы остается для пользователя "вещью в себе", которую непосредственно не видно и не слышно. В то же время, только ядро, имея доступ к оборудованию, способно оперировать файлами и процессами, т.е. осуществлять "деятельность" с некоторым объективным результатом.
Пользователю эта функциональность доступна только опосредованно, через особую программу, которая "общается" с ним посредством терминала и вполне логично называется "оболочкой". Теоретически оболочка могла бы реализовать замкнутый язык диалога (и ранние архитектуры ОС носят следы таких попыток), но в открытых системах принята другая философия -- разделения, специализации и минимизации программ. Поэтому на практике оболочка используется вместе с утилитами -- набором самых часто употребляемых программ -- и лишь синтаксис и семантика оболочки вкупе с синтаксисом и семантикой используемых утилит и образуют полноценный формальный язык диалога пользователя с системой. В июне 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]. В этом ставшем классическим четырехстраничном анализе (всем, интересующимся темой, крайне рекомендуется прочитать эти четыре страницы. А заодно -- и всю книгу Брукса). Брукс:
производит декомпозицию самой идеи ("диалог" с системой: объекты-"существительные" и действия-"глаголы"),