Свободное программное обеспечение в школе


© 2002-3, Максим Отставнов. © 2002, Андрей Добровольский (раздел 10.4). Разрешается использование на условиях GNU FDL в.1.1 или последующих версий, опубликованных Фондом свободного программного обеспечения. Документ не содержит неизменяемых разделов в терминологии GNU FDL. Прочие права сохраняются за авторами. Исходные "Лекции" публиковались в приложении к газете "Первое сенября" "Информатика" (http://inf.1september.ru) в 2002-3 г.

http://www.otstavnov.com/fsft


Лекция 0. Зачем СПО в школе?

0.1 Свободное и несвободное ПО

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

  • нестандартные системы ненадежны и небезопасны. С распространением в школах компьютеров и особенно сетей (включая доступ к региональным и глобальным сетям) ущерб от вирусов, несанкционированного доступа к информации и т.п. станет заметной статьей издержек информатизации;
  • нестандартные системы дороги. Практически для всех стандартных технологий имеются свободные реализации (или, по крайней мере, конкурентный рынок реализаций), в то время, как ожидать появления свободной реализации, допустим, той же MS Windows API в обозримом будущем не приходится, и цены будут оставаться монопольно завышенными (не на проценты или десятки процентов, а в разы и десятки раз). Мы не сторонники "экономии на детях", но, право же, выделяемые на информатизацию школы деньги можно расходовать гораздо более разумно — от их вложения в перспективные разработки до повышения окладов учителей и обслуживающего персонала — нежели платить "налево" по сотне долларов за сторублевый (в базарный день) диск;
  • нестандартные системы ограничивают выбор оборудования и зачастую предъявляют весьма высокие требования к его параметрам;
  • поставщик и партнеры нестандартных систем получают неосновательное преимущество в других сегментах рынка. Если целенаправленно подменять обучение в школе общим принципам и стандартным технологиям изучением конкретных программ, через некоторое время специфические навыки пользования ими распространяться в обществе настолько, что поставщикам конкурирующих технологий и решений пробиться на рынок будет совсем нелегко;
  • использование несвободного ПО отрезает учащихся (и их наставников!) от самых прогрессивных технологических решений.

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

  • с технической точки зрения — безусловно, да (это подтверждается результатами, достигнутыми и на единственной сегодня в России масштабной экспериментальной площадке, где в учебный процесс внедряется ОС GNU/Linux (ЦКТ МГИУ), и рядом зарубежных экспериментов). Имеющийся пул СПО с избытком перекрывает потребности любого разумного учебного курса по информатике, причем большинство программ способно работать на массовом и недорогом оборудовании, распространенном в школах (ПК архитектур IBM PC и Apple Macintosh, терминальные классы от SUN на UltraSPARC и т.п.), включая весьма "пожилые" модели. Некоторые програмы требуют определенных усилий по локализации (переводу элементов интерфейса и документации), однако эти затраты на порядок меньше, чем стоимость "легализации" используемого сегодня несвободного софта;
  • с организационной — все зависит от того, как поставить дело. Мы не беремся предсказывать масштабы и темп освоения свободного ПО российской школой, но заметим, что любые попытки волевого "насаждения" тех или иных решений или конкретных систем "сверху", на наш взгляд, к успеху не приведут.

Гораздо разумнее со вниманием отнестись к тому интересу, который уже проявляется учителями информатики к свободному ПО (и наоборот, авторов и поставщиков свободного ПО — к учебному процессу) и поддержать процесс его освоения в том темпе, который окажется "естественным". В поле зрения "Информатики" уже попадали свободные программы (см. напр. [5], посвященный использованию в учебном процессе свободной СУБД MySQL), а курс лекций, который мы начинаем этой статьей, предполагает рассказ о двух десятках свободных программ и пакетов.

0.2 Право и экономика ПО

Поскольку в литературе и прессе существует изрядная путаница с терминологией, имеет смысл привести определения далее используемых терминов. Это особенно уместно, когда мы говорим о программах в школе, ведь свободное ПО пока очень слабо проникло в эту важнейшую сферу применения компьютеров. Свободными называются программы, автор (или иной обладатель имущественных авторских прав) которых опубликовал (обнародовал) их в сопровождении так называемой "свободной лицензии", или, если следовать терминологии отечественного законодательства, публичного авторского договора, передающего приобретателю права: 0) пользоваться программой для любых целей (в рамках российского законодательства это тавтология, так как у правообладателя нет правомочия ограничивать цели, в которых собственник экземпляра программы может ее применять) и на неограниченном количестве компьютеров или мест в сети; 1) беспрепятственно получать доступ к ее исходным кодам; 2) изготовлять (производить) неограниченное количество дополнительных ее экземпляров, как для собственного пользования, так и для распространения или сдачи в прокат/аренду на тех же условиях, возмездно или безвозмездно; 3) модифицировать ее как для собственного пользования, так и для распространения на тех же условиях. Конкретная "лицензия" (условия конкретного договора) могут предоставлять приобретателю дополнительные правомочия, безусловно или на определенных условиях, и это не делает программу несвободной. Несвободной является программа, распространяемая на условиях, ограничивающих вышеперечисленные права приобретателя. Свободные программы (free software) не следует, как это часто делают, путать со "свободно распространяемыми" (shareware, иногда почему-то называемыми у нас "условно-бесплатными") или "бесплатными" (freeware). Также следует иметь в виду, что, хотя термин "программы с открытыми исходниками" (open source software) часто используется как синоним "свободных программ", им иногда злоупотребляют (к примеру, в Sun Microsystems называет "открытыми исходниками" условия распространения своей свободной операционной системы Solaris; однако та же Sun поддерживает и действительно свободные проекты, такие как OpenOffice.org). Свободное ПО не следует путать и с "открытым" (open software): "открытость" относится к соблюдению стандартов на интерфейсы, и только, а свобода — к условиям лицензирования и модели разработки. И наконец, не следует путать "коммерческое" с несвободным, а "некоммерческое" — со свободным. Хотя роль программистов, в порядке активизма или хобби пишущих и развивающих свободные программы, очень велика, значительная часть (вероятно, большая) свободного кода разрабатывается в коммерческих рамках. В то же время, существует большое количество некоммерческого несвободного кода (freeware). Если вы уже достаточно запутались в юридической терминологии, возможно, обращение к экономической стороне вопроса запутает вас окончательно. Очень часто (особенно, в популярной прессе) можно столкнуться с утверждением о якобы "бесплатности" свободных программ. Не нужно обладать университетским экономическим образованием, чтобы понять, что экземпляр произведения (в том числе, программы), вне зависимости от формы его существования, является материальным (ограниченным) благом, и в этом качестве не может быть "бесплатным", сколь бы исчезающе малой не была стоимость его приобретения. "Бесплатное" материальное благо — это экономический перпетуум мобиле. Даже сыр из пресловутой мышеловки "бесплатен" только для мыши, но отнюдь не для того, кто его туда положил. Сыр в мышеловку кладут не потому, что он бесплатен, а потому что прогнозируемые убытки от мыши, разгуливающей по дому, больше, чем его цена (и, соответственно, будьте уверены, что если какая-нибудь Microsoft "бесплатно" распространяет свой Internet Explorer, подлинная причина этой "бесплатности" в том, что вас хотят поймать в мышеловку несвободной операционной системы, с которой единственно и возможно пользование им). В то же время, произведение как таковое — идеальный объект, не ограниченный по своей природе в использовании, и говорить о его "цене" по меньшей мере некорректно, вне зависимости от того, каковы были затраты материальных ресурсов при его создании. Узел терминологических тонкостей и концептуальных сложностей можно разрубить, введя альтернативное определение: свободные программы — это программы, все услуги по разработке, модификации, сопровождению и поддержки которых продаются на свободном рынке. Если вы видите, что, например, свободный дистрибутив какой-либо версии GNU/Linux, включающий, помимо операционной системы и нескольких операционных сред, большое количество прикладных программ, стоит от нескольких десятков до нескольких тысяч рублей, в то время, как "набрать" даже небольшую часть этой функциональности программами несвободными может обойтись и в десять, и в сто раз дороже{Например, типичная цена одно-двухдискового дистрибутива российской сборки, включающего программы достаточные для обеспечения школьной программы по информатике, не превышает трехсот рублей, в то время, как комплект Microsoft Windows и Microsoft Office, покрывающий лишь часть программы, со всеми скидками обойдется не дешевле трех тысяч.}, причина этому не в "бесплатности" чего-либо, а в конкурентности рынка. Мы избавим читателя от обсуждения анатомии рынка (как формируются цены, кто, за что и каким образом вознаграждается), отослав интересующихся к соответствующей литературе [2, 3]. Важно то, что соответствующий рынок успешно развивается уже в течении четверти века, есть примеры исполнения им задач, немыслимых для отдельных корпораций (самый яркий из них — разворачивание в девяностых на основе свободных программ и систем всемирного сообщества сетей Интернет), и, наконец, то, что после многочисленных колебаний, лидеры компьютерной отрасли сегодня практически однозначно высказазываются в поддержку свободного ПО.

0.3 Применимость СПО при реализации "Обязательного минимума..."

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

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

Кроме того, другие пункты "Минимума" (не отнесенные авторами к "информационным технологиям") также с неизбежностью подразумевают знакомство с определенными приложениями компьютера (если, конечно, автор конкретного курса не предпочел чисто теоретический режим знакомства с материалом, соответствующим тому или иному пункту). Например, для того, чтобы предметно показать учащимся разницу в различных способах представления (кодирования) информации (п. 2 "Обязательного минимума..."), неплохо иметь под рукой соответствующую программу просмотра. Знакомство с языками программирования (п. 5) предполагает и знакомство с интерпретатором или компилятором и другими компонентами инструментальной среды и т.д. и т.п. Ну и, разумеется, чтобы учащийся мог работать со всеми этими программами, ему необходимы базовые навыки обращения с операционной системой/средой (вне зависимости от того, присутствует ли такая тема отдельной строкой в учебном плане). Поскольку, как упоминалось выше, универсум СПО развивался в направлении от инструментальных программ к системным и, далее, к прикладным, сегодняшнее положение дел, при котором все из перечисленных приложений имеют свободную реализацию, сложилось не сразу. Однако уже в течение нескольких лет основная масса свободных прикладных программ находится на уровне, достаточном для их применения в школьном учебном процессе, и в педагогическом сообществе постепенно накапливается опыт их использования. В России, насколько нам известно, наиболее последователен в этом плане опыт Центра компьютерных технологий Московского государственного индустриального университета, сеть которого используется, в том числе, и для практических занятий учащихся московских школ. В ноябре прошлого года, во время рабочей встречи "Свободное программное обеспечение", проведенной Высшей школой экономики и издательским домом "Компьютерра" в рамках разворачивания федеральной целевой программы "Электронная Россия" [2], было достигнуто принципиальное соглашение о том, чтобы учебные материалы, разработанные в ЦКТ МГИУ и касающиеся применения СПО в учебном процессе, были опубликованы также под свободной лицензией, и коллеги из МГИУ выполнили свое обещание, благодаря чему на их сайте можно найти учебник "Практическая информатика" [4] (также опубликован и выпущен в продажу в виде традиционного двухтомного издания). На протяжении года мы будем неоднократно апеллировать к опыту МГИУ, а также других вузов, работающих со школьниками, и школ, в которых СПО успешно (или, наоборот, с проблемами) внедряется в учебный процесс. Более того, мы расчитываем, что в ходе публикации этого цикла лекций откликнутся и расскажут о своем опыте учителя и из других школ, с которыми мы пока не знакомы.

0.4 Логика и последовательность освоения СПО

Логика и последовательность изложения материала в этом курсе существенно отличается от логики, в которой написано большинство книг, посвященных СПО. Чаще всего авторы исходят из того, что последовательность внедрения программ и пакетов, относящихся к различным категориям, будет соответствовать последовательности построения информационной системы (например, школьной сети). Это вполне оправдано в случае разработки и реализации такой системы "с нуля", однако может вызвать существенные сложности в ситуациях, когда система уже существует, развернута на базе несвободного (и, как следствие, почти всегда нестандартного) ПО, нужна поддержка ее роста и развития, и администрация учебного заведения обращается к СПО именно как к средству обеспечения такого развития. "Сплошная миграция", при которой администрации необходимо внедрять (а всем пользователям, включая учителей и учащихся, осваивать) и системное, и прикладное (а в случаях, если проводятся какие-то свои разработки, и инструментальное) ПО одновременно, — объективно очень сложный и болезненный процесс. Если говорить об учебном заведении, то он сложен вдвойне, поскольку очень разнится уровень пользователей различных категорий. Если говорить о школах, где единственный преподаватель информатики — сам себе и учитель, и методист, и системный администратор, и лаборант (а не большинство ли наших школ таковы), миграция по этому сценарию требует, без преувеличения, героических усилий, ожидать которых в массовом порядке не вполне разумно. Однако поскольку значительная часть свободного прикладного программного обеспечения портирована (перенесена), в том числе, и в несвободное окружение (включая получившие широкое распространение в наших школах операционные среды Microsoft Windows и MacOS), миграцию можно облегчить, проведя ее в два этапа (которым в учебном заведении могут соответствовать два академических года): сначала прикладная часть, а затем — системная. В этой логике и подготовлен предлагаемый курс лекций — до конца рождественских каникул или чуть дольше речь пойдет о различных категориях прикладного СПО, а затем — до конца учебного года (если, конечно, первая часть курса получит позитивные отклики) — о свободных операционных системах и средах, включая вопросы их использования в школе как в учебном процессе, так и вне его рамок. Соответственно, тем, кого идея использования СПО в учебном процессе вдохновляет, могут уже в этом учебном году поэкспериментировать с использованием прикладных программ в реальном учебном процессе, а за его рамками (возможно, следующим летом?) попробовать поработать с системным СПО. Нужно ли доводить миграцию до конца — большой вопрос. Дело в том, что хотя, как уже было сказано, все приложения, входящие в "Обязательный минимум...", на сегодня имеют свободные реализации, методисту или учителю может потребоваться познакомить учащихся с каким-то другим приложением, для которого свободных программ на сегодня нет, и нет никаких гарантий, что в ближайшие пару лет они появятся; более того, на рынке может даже не оказаться несвободных программ для свободных систем (это касается таких приложений, как автоматическое распознавание текста (с поддержкой русского языка), систем автоматизированного проектирования "промышленного" класса, программ цветоделения для промышленной печати и нескольких других приложений). Вряд ли кто-то захочет вводить использование таких программ в основной курс информатики, однако иметь возможность продемонстрировать учащимся, как такие задачи решаются на компьютере, весьма полезно. Поэтому иметь одну-две машины под Microsoft Windows или MacOS на один-два учебных класса на сегодня не представляется лишним. К тому же, учащиеся смогут познакомиться с разнообразием операционных сред, используемых на персональных компьютерах, и, к тому же, убедиться, что в плане пользования программами это разнообразие не столь уж и велико, сколь бы стандартной или "новаторской" ни была "изнанка" технологий.

* * *

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

Лекция 1. OpenWriter — свободный word-процессор

Изначально наша первая предметная (после предшествовавшей вводной) "лекция" задумывалась как простая презентация ряда свободных word-процессоров (AbiWord, Kword, OpenWriter) и программ, могущих использоваться в качестве таковых (издательская оболочка LyX и т.п.). Однако уже первые шаги по определению структуры таблицы, представляющей их характеристики, и ее наполнения, заставили задуматься: а что вы с этим потом будете делать? И "Обязательный минимум...", и большинство конкретных учебных планов предусматривает знакомство лишь с базовой функциональностью программ манипуляции текстами, и любой из перечисленных процессоров гарантированно и с избытком перекроет требования (так же, как и масса присутствующих на рынке несвободных программ, таких, как Microsoft Word, "Лексикон", StarOffice или WordPerfect). Поскольку большинство из них так или иначе развивают основные интерфейсные подходы WordPerfect, существенного (и могущего быть выявленным в пределах тех немногих часов, что учитель в состоянии уделить этой теме) эргономического различия между ними нет. Значит основания для рационального выбора программы нужно искать не внутри темы манипулирования тестами, а в ее связи с другими учебными темами. У программистов есть такой эмпирический принцип: когда начинаешь путаться в программах, отложи их в сторону и попытайся разобраться со структурами данных — сам удивишься, насколько очевидными и простыми будут после этого решения, касающиеся программ. Возможно, этот принцип разумно применять и пользователям. Давайте попробуем отложить в сторону программный инструментарий и разобраться с тем, какого рода данные мы им обрабатываем.

1.1 "Плоский" и размеченный

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

<курсив>Предложение, набранное курсивом.</курсив>

а word-процессор визуализирует эти атрибуты, например:

Предложение, набранное курсивом.

Визуализацию иногда путают с так называемым WYSIWYG-принципом (сокращение от "What you see is what you get" — "Что видишь, то и получишь"). Однако в общем случае это неверно: WYSIWYG-идеология унаследована нами от эпохи персональных компьютеров, когда в ходе "малой компьютеризации" отдельные офисы и рабочие места становились "островами" безбумажных технологий в море бумажной коммуникации, и компьютерное представление мыслилось лишь промежуточной или предварительной формой существования текста или документа. Сегодня большинство документов никогда не попадает на принтер, и нет нужды подстраиваться под архаичный бумажный документооборот. Вполне возможно, что автору или редактору удобнее выделение не курсивом, а подчеркиванием:

Предложение, набранное курсивом.

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

Рис. 1-1 Рис. 1-2 Рис. 1-3

Один и тот же гипертекстовый документ, отображенный браузером Mozilla с разметкой, с визуализацией и с использованием обоих способов визуализации Хотя на этом рисунке нам удалось показать три типа отображения одного и того же документа, не выходя из одного прикладного пакета, это не такой частый случай. На самом деле текстовые редакторы, как правило, не имеют способности непосредственной визуализации вообще или обладают ею лишь в зачатке (как, например, Emacs, способный визуализировать формат Enriched text, но Emacs это не просто редактор, а целая операционная среда), а word-процессоры, в свою очередь, крайне неудобны для редактирования "плоского" текста: слишком разнятся базовая операторика и ожидаемая эргономика этих двух типов прикладных программ. Учащийся сталкивается с задачей манипулирования "плоским" текстом как минимум два раза (при знакомстве с электронной почтой и при изучении основ программирования), соответственно, успевает познакомиться, как правило, с двумя разными текстовыми редакторами (встроенными в почтовую программу и среду программирования, соответственно). Как минимум два раза он сталкивается и с задачей манипулирования размеченным текстом: один раз его знакомят с word-процессором (как правило, в России под руку подворачивается "пиратский" Microsoft Word, либо бесплатно распространяемый StarOffice, либо дешевый "Лексикон", исключения единичны), а затем ему преподносят основы HTML. Знакомство с манипулированием текстом, таким образом, оказывается бессистемным и фрагментарным, и, в лучшем случае, автор учебника или учитель сумеют рассказать о том, что сфера это, в общем-то единая, а показать это оказывается весьма затруднительно. Значительным шагом к систематизации опыта, вырабатываемого школьным курсом, на наш взгляд, является использование инструментария, позволяющего демонстрировать возможность работы с размеченным текстом разными средствами. Это значит, что к очевидным требованиям, предъявляемым к "учебному" word-процессору (достаточность функций, локализованность, мультиплатформенность, ценовая доступность), добавляется серьезное пожелание: стандартность формата разметки. Это сильно облегчает выбор. На самом деле, на сегодня всем перечисленным требованиям удовлетворяет, по сути, лишь одна программа. Но сначала — немного о стандартах.

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

Существует и доказали свою устойчивость два основных типа языков разметки. Первый из них, это семейство, называемое *ML-языками: на эти две буквы заканчиваются аббревиатуры их названий — GML, SGML, HTML, XML, — а сами по себе эти буквы означают просто "markup language" — "язык разметки". Второй — разработанный выдающимся американским теоретиком и практиком программирования Дональдом Кнутом язык программирования верстки TeX (это греческий корень, он читается как русское "тех", а не как "текс") и его расширения (например, LaTeX). Не будучи официальным стандартом, постепенно вытесняет и замещает прочие языки разметки, предназначенные для набора и верстки текстов (TeX и системы на его основе плохо приспособлены для верстки т.н. "иллюстрированных изданий" с характерным для них богатым насыщением текста графикой, сложными обводами и наложениями текста на графику и пр., и этот сегмент рынка остается пока не стандартизованным). За пределами этих типов — огромное множество нестандартных (и даже неопубликованных) форматов, зачастую использующих не текстовую, а двоичную форму представления данных (например, файлы Microsoft Word, "Лексикона" и т.п.). Это исключает возможность использования для работы с такими данными обычных текстовых редакторов и обработку их стандартными текстовыми утилитами, а также сильно затрудняет обратную разработку формата с целью обеспечения импорта и экспорта из независимо написанных программ. (Возможно, использование двоичных форматов и было оправданно во времена, когда позволяло экономить байты памяти и носителей на "персоналках" с крайне ограниченными аппаратными ресурсами. В то же время, современные компьютеры (даже относимые к классу персональных, "стартового уровня") обладают ресурсами, позволяющими организовать гораздо более удобную схему: сжатие "на лету" по стандартному алгоритму стандартно размеченного текста или иных данных). Наверное, TeX имеет потенциал к использованию в качестве примера языка разметки (или, точнее, языка генерации разметки), однако вряд ли в средней школе — отчасти потому, что ориентирован на печатную форму в качестве окончательной формы представления содержания, что представляет на сегодня если не экзотический, то, во всяком случае, достаточно специальную область применения компьютеров, в отличие от *ML-языков, в равной степени ориентированных и на "экран", и на "бумагу" (следует все же отметить, что для верстки сложных технических и научных (не обязательно относящихся к точным наукам, на которые он первоначально был ориентирован) текстов TeX остается незаменимым).

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

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

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

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

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

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

1.5 OpenWriter

OpenWriter (далее — OW) — это неофициальное, но уже закрепляющееся название word-процессора из комплекта свободных офисных прикладных программ ОО.о (официальным названием, видимо, следует считать Ooowriter). "В девичестве" (до того, как американская корпорация Sun Microsystems приобрела немецкую компанию StarDivision и свободно лицензировала код, права на который принадлежали ранее последней) пакет назывался StarOffice, а word-процессор — StarWriter; под таким названием он получил известность и обрел достаточную популярность, в том числе, и в России (особенно последние версии 5.1 и 5.2).

Рис. 1.4

Рис. 1.4. Простой документ в окне OpenWriter

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

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

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

Рис. 1.5 Изнанка документа

Рис. 1.5 Изнанка документа

Рис. 1.6. Изнанка документа

Рис. 1.6. Изнанка документа

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

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

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

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

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

Рис. 1.7

Рис. 1.7

* * *

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

Ресурсы

Пакет OO.o входит во все "большие" (многодисковые универсальные) дистрибутивы ОС Linux и во многие "маленькие" (одно-, двух- и трехдисковые, исключая ориентированные исключительно на серверное применение). Мы рекомендуем обратить внимание на российскую сборку OO.o, поставляемую с ALT Linux ("большой" дистрибутив Master 2.0 и "маленький" Junior 2.0; www.altlinux.ru) и ASPLinux 7.3 (в различных вариантах, www.asplinux.ru). В ней раньше, чем в основной ветке, появляются новые возможности, ориентированные на русскоязычного пользователя, в то же время, задержка сборок новых версий (по отношению к основной ветви разработок) минимальна. Многоплатформенная (Linux и Microsoft Windows) российская сборка доступна в составе сборника OpenOffice.ru, его можно взять на сайте www.openoffice.ru или приобрести (список реселлеров доступен на том же сайте) однодисковую коробку. О российских сборках OOO под "Макинтош", Solaris и другие ОС нам ничего не известно, и их пользователям можно порекомендовать следовать по ссылкам с www.openoffice.org. Основной русскоязычный ресурс, посвященный OpenOffice, — это тот же сайт www.openoffice.ru и его сателлиты (включая http://docs.openoffice.ru). Основной международный ресурс — это базовый сайт разработки (www.openoffice.org). OO.o вообще и OW в частности пока освещены лишь в сравнительно небольшом количестве публикаций. Внимания заслуживают [6-9].

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

Обработка "плоских" (неразмеченных) текстов — одна из первых (после вычислительных задач и управления приборами) и исключительно проработанная область приложений компьютера. Работа с текстами критична для многих пользовательских приложений. Электронная почта — это текст. Форматы разметки, посредством которых представлены форматированный текст, векторная графика, ноты и т.п. (практически все данные, за исключением растровой графики и волнового представления звука) — в основе своей также текст. Даже картинки и звуковые файлы, размещенные в WWW, передаются незаметно для пользователя между машинами в закодированной текстом форме, хотя в данном случае текст и не является "собственной" формой представления данных. Команды, с помощью которых пользователь "общается" с системой — это текст. Сколько бы не популяризовали и не навязывали графические интерфейсы, для серьезной и продуктивной работы, как правило, не обойтись без полноценного тестового диалога, так же как при серьезном и предметном разговоре сложно обойтись жестами и ответной мимикой. Более того, работа с текстом критична и для развития самих вычислительных и коммуникационных систем, поскольку сами программы в исходной своей форме — тексты. Для программ на интерпретируемых языках тексты являются и исполняемой формой, так что такие программы — тексты вдвойне (а типичная стандартизованная ОС почти наполовину состоит из "сценариев", т.е. программ, написанных на интерпретируемых языках). (Хотя существуют и исключения. Например, электронные таблицы — специфические программы (определяющие порядок вычислений и способ представления их результатов) — представляют собой размеченный, а не "плоский" текст. В некоторых случаях файлы настроек — тоже программы в широком смысле этого слова — представлены не текстом, а базой данных более сложной структуры. Программы с графическим интерфейсом могут содержать значительные фрагменты, первичной формой представления которых является нетекстовая. Однако, это исключения, требующие отдельного обсуждения, а правило состоит в том, что в программировании текст сидит на тексте и текстом погоняет.) Эффективные методы и приемы работы с текстом — неотъемлемая часть компьютерной грамотности, но в подавляющем большинстве случаев они оказываются не освоенными вовремя. Зачастую в курсе средней школы знакомство с обработкой "плоских" текстов ограничивается встроенными редакторами в среде программирования и электронно-почтовой программе, а навыки — простейшими приемами набора и исправления. Более абстрактные и всеобщие операции изучаются как часть word-процессинга, и хотя иногда при этом и демонстрируются возможности встроенных в word-процессоры языков программирования, область обработки текстов остается "вещью в себе" и никак не интегрируется с другими областями, осваиваемыми в курсе информатики.

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

Водораздел между текстовыми редакторами и word-процессорами, как это обсуждалось в предыдущей лекции, проходит по способу отображения размеченного (имеющего некоторые атрибуты, такие, как цвет, начертание и кегль (размер) символов, выключка (выравнивание) и расположение абзацев, оформление страницы и т.п.) текста. Word-процессор определенным образом интерпретирует разметку, визуализуя указанные атрибуты. Текстовый редактор отображает текст "как есть", хотя он вполне может быть "в курсе" синтаксиса языка разметки (если текст размечен, например, XML, HTML или TeX) или даже самого текста (например, синтаксиса языка программирования) и каким-то образом на него реагировать (например, расцвечивать теги разметки HTML или зарезервированные слова Pascal). В принципе, он может быть "в курсе" синтаксиса, грамматики и лексики даже естественного языка, хотя для работы с естественными языками "плоский", неразмеченный текст используется все реже, или, по крайней мере, неразмеченный текст все реже используется как первичная форма представления текста на естественном языке. Отказаться вовсе от работы с "плоским" текстом затруднительно по давно известной эргономистам причине: использование визуализации "позволяет демонстрировать лишь результат форматирования, по нему невозможно определить задачи форматирования, поставленные пользователем системе. Например, если пользователь замечает, что система не делает переносов ... невозможно определить ... является ли это простым совпадением или же при форматировании данной главы перенос запрещен" [10].

2.2 Редакторы

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

2.3 Vi и Emacs

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

Милая Лена!

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

- Максим
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
-- INSERT --                                                  3,1           All

Редактор vi Первый ныне стандартизован и, в той или иной реализации (наиболее популярна, видимо, vim Брама Мооленаара) доступен в составе любой стандартной операционной системы (в том числе, свободных). Второй под названием GNU Emacs поддерживается Фондом свободного ПО (www.fsf.org) и выдержал с тех пор более двадцати изданий (релизов). Исходная идеология и эргономическая модель этих двух выдающихся разработок серьезно различается, что служит поводом для шутливой "священной войны" между их приверженцами. Vi(m) относится к так называемым "многорежимным" редакторам. В режиме редактирования оператор вводит и исправляет текст. Перемещение по тексту, контекстный поиск и замена, более сложные операции выполняются в командном режиме. Между этими режимами (а также, унаследованным от ed и редко применяющимся режимом построчного редактирования) нужно явное переключение нажатием клавиатурной комбинации. Зато большинство команд привязаны к нажатиям одной клавиши, и даже перемещаться по тексту в командном режиме можно, не сбрасывая кисть на дополнительную клавиатуру со стрелками, а нажимая алфавитные клавиши в центре клавиатуры. Адепты vi — программисты и системные администраторы — очень серьезно относятся к экономии времени и энергии за счет минимизации движения пальцев. Emacs — пример "безрежимного" или, если угодно, "однорежимного" редактора: пользователь всегда находится в режиме непосредственного редактирования текста в точке курсора, а команды издает, нажимая сложные сочетания клавиш и, при необходимости, вводя параметры команд в отдельном окне. Из-за стремления обеспечить прямую клавиатурную привязку как можно большему количеству команд и следующей из нее сложности используемых клавиатурных сочетаний был даже пущен слух о том, что Emacs расшифровывается как "Esc-Meta-Alt-Ctrl-Shift" (хотя на деле, конечно, клавиатурные аккорды все же не так сложны, а Emacs — это просто Editing MACroS, т.е. "макрокоманды редактирования"). В действительности, различие это скорее идеологическое, чем прагматическое: в современных версиях vi в большинстве случаев также можно осуществить привязку часто употребляемых команд к клавиатурным комбинациям и выполнять их из режима редактирования, а в Emacs можно достаточно точно (если кому-то это потребуется) сымитировать командный режим, характерный для многорежимных редакторов.

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

Реальное очень значимое отличие заключается в том, что по своей архитектуре vi — более или менее монолитная программа (с вытекающей отсюда компактностью), а Emacs — на самом деле, расширяемая (программируемая) коллекция макрокоманд редактирования, написанных на Emasc Lisp (диалекте известного языка функционального программирования). Лишь небольшое количество часто выполняемых и требовательных к ресурсам команд встроены в саму программу и написаны на компилируемом C, большинство же команд написаны на Lisp и могут изменяться или дополняться пользователями (или профессиональными программистами по заказу пользователей). За четверть века существования Emacs, благодаря свободной модели лицензирования и открытой модели разработки, "оброс" невероятным количеством макрокоманд, "затачивающих" его под синтакcические особенности различных формальных языков (включая, но не ограничиваясь языками программирования и языками разметки), а также реализующих приложения, традиционно слабо ассоциируемые с "просто редакторами". Например, не выходя из Emacs, можно работать с электронной почтой и службами новостей USENET (а также с гипертекстом со страничек WWW). Или — что не менее интересно — не выходя из Emacs, можно прогнать текст программы через компилятор и подсветить синтаксические ошибки или предупреждения, воспользоваться символьным отладчиком или профилировщиком (реально, Emacs образует оболочку интегрированной среды разработки программ, и в этом качестве является вдохновителем и предшественником столь любимых школьным народом интегрированных сред, например, от Borland). И это лишь пара примеров. Фактически, регулярно используемый Emacs позволяет реализовать (чисто в текстовом режиме, даже в системах, вообще не поддерживающих графику) метафору "рабочего стола", более известную по позднейшим графическим пакетам. Он реализует множественность окон (неперекрывающихся) на одном экране ("фрейме"), а в графической среде способен работать со многими "фреймами" (окнами в терминах менеджера окон). Пакет Emacspeak добавляет к функциональности Emacs речевой вывод, предоставляя мощную поддержку для незрячих и слабовидящих пользователей. Все это (доступность, расширяемость, интегрируемость) делает его серьезным претендентом на организацию "учебного" рабочего пространства программиста (и, на самом деле, есть университетские курсы, так и построенные). Можно ли это использовать в сегодняшней школе? Однозначного ответа на этот вопрос у нет. Дело в том, что нам неизвестны такие (ориентированные на среду на основе Emacs) курсы для школ вообще. А что касается России (и русскоязычного сообщества), то нам неизвестны примеры школьных курсов, вводящих на достаточно раннем этапе идеи функционального программирования (если они все же есть, нам было бы крайне интересно услышать о них). А без последнего — увы — расширяемость Emacs остается чисто теоретической. Однако в качестве интегрированной среды именно для программирования (в том числе, на обычно изучаемых в школе директивных (сентенциональных) языках, например, Pascal) Emacs использовать, безусловно, можно. Следует только учесть, что пресловутая "кривая обучения" для него гораздо более вогнутая, чем для более простых (но и менее мощных) средств редактирования, обычно используемых в подобного рода средах. Грубо говоря, может потребоваться пара занятий до того, как учащийся будет чувствовать себя уверенно при наборе и редактировании программ, зато потом эти задачи будут решаться гораздо эффективнее. (Кривую обучения можно сгладить, создав дополнительный набор макрокоманд под конкретный курс и, наверное, это правильный способ, но он потребует от методиста незаурядного знания не только Emacs, но и Emacs Lisp.) Почему в обычных учебных курсах vi изучается раньше Emacs? Такая структура заимствуется из традиционного курса подготовки администраторов и продвинутых пользователей открытых систем. Дело в том, что vi, во-первых, стандартизован (и доступен во всех без исключения открытых системах), а во-вторых, компактен. Администратор системы может оказаться (например, при восстановлении после сбоя) в среде, где ему из экранных редакторов доступен только vi. Поэтому для сисадминов базовые навыки работы с ним обязательны (вне зависимости от личных предпочтений). В учебной обстановке, не ориентированной на профессиональную подготовку, такого императива, полагаем, нет, поэтому методисты и преподаватели вольны выбрать наиболее адекватный инструмент для демонстрации возможностей текстовых редакторов, если задача состоит только в знакомстве учащегося с таковыми. Выбор огромен, но остановится он, скорее всего, или на vi, или на Emacs.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

$grep Лена note
Милая Лена!
Команда sort сортирует строки по алфавиту:
$sort note
- Максим
Милая Ира!
Ты не откажешься поужинать со мной в ночь с пятницы на воскресенье?

Команда uniq удаляет неуникальные (дублирующиеся) строки, split разделяет файлы, cat соединяет и т.п. В стандартной операционной среде (или при ее имитации [2]) отдельные утилиты могут "склеиваться" с помощью штатных средств оболочки операционной системы, что позволяет гибко решать самые сложные задачи обработки текстов, не прибегая к программированию на специальных языках, компилированию и сборке программ. Это (программирование оболочки) настолько интересная тема, что она выделяется в отдельное производство и составит предмет особой лекции. Также отдельного обсуждения требует понятие регулярных выражений — шаблонов, позволяющих искать подстроки, не полностью совпадающие с заданной.

Ресурсы

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

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

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

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

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

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

Способы кодирования графических данных делятся на две категории: растровый (точки равномерно размеченного прямоугольника) и векторный (описания линий и фигур, составляющих изображение). Например, растровое изображение окружности может быть таким: "заполняем квадрат 5х5: белая точка (Б), черная точка (Ч), Ч, Ч, Б, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Ч, Б, Б, Б, Ч, Б, Ч, Ч, Ч, Б". (Более умные "форматы со сжатием", возможно, позволят сократить запись до чего-нибудь, подобного: "заполняем квадрат 5х5: Б, 3Ч, Б, 3(Ч, 3Б, Ч), Б, 3Ч, Б", а то и еще более компактно, но суть не в этом). Векторное ее изображение совсем другое: "черная окружность с центром в (3,3), радиусом 2 и толщиной линии 1". Важно понимать, что большинство компьютерных графических устройств сегодня — и терминалы, и сканеры, и принтеры — по своей природе растровые. Исключение составляют только графопостроители (плотерры) и редко доступные в учебных условиях их промышленные "кузены" (такие, как фрезерный станок с числовым управлением). Соответственно, изображение, вне зависимости от его собственной природы (векторной или растровой), будет при отображении преобразовано в растр и доступно человеческим чувствам в растровой форме (даже если растр почти незаметен, как на дисплеях с высоким разрешением, или вообще имеет сетку ниже порога восприятия, как при печати на качественных струйных или лазерных принтерах). И указанные два способа вполне могут привести к неотличимому результату.

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

Разница может проявиться тогда, когда мы начнем обрабатывать элементы изображения. Векторное изображение может без ущерба масштабироваться (увеличиваться или уменьшаться), причем эта операция обратима. В приведенном примере мы можем без труда увеличить векторную окружность в пять раз: "черная окружность с центром в (15,15), радиусом 10 и толщиной линии 5", и она останется окружностью. А вот, растровое изображение при увеличении обнаружит лишь свой растр в увеличенном виде (и на окружность наш пример похож уже будет мало). Более того, операция уменьшения (или увеличения в нецелое число раз) растрового изображения уже не является обратимой: информация при осуществлении такой операции безвозвратно теряется. Кроме того, векторное изображение, содержащее более одного элемента (например, изображение двух пересекающихся окружностей), может быть разъято на элементы без каких-либо потерь. С растровым изображением такое, в общем случае, невозможно: программа "не знает" об элементах изображения и о принадлежности тех или иных точек отдельным элементам. В общем случае, векторное кодирование хорошо подходит для работы с чертежами, схемами, картами, диаграммами, графиками и т.п., а растровое — для обработки фотографий и рисунков. Векторное изображение может быть без ущерба восприятия преобразовано в растр, в то время, как обратное преобразование в общем случае проблематично (хотя есть программы, позволяющие с той или иной точностью распознавать графические образы). Векторное кодирование часто компактнее растрового, но его отображение требует больших вычислительных ресурсов. (Мы не касаемся здесь специального вопроса о сложных форматах кодирования, включающих векторные элементы и фрагменты растра, так же, как и — растрового и векторного — кодирования движущихся изображений и вопросов сжатия растровых изображений). Пример, который всегда перед глазами пользователя компьютера — шрифты. Когда точно известен масштаб, в котором будет отображаться текст, часто используются растровые ("фиксированные") шрифты, представляющие собой набор растровых изображений отдельных букв и других символов используемого алфавита (например, растровые шрифты используются видеокартой, работающей в текстовом режиме, но также часто и как элемент графического интерфейса). Их применение позволяет отображать символы с недостижимой иным способом четкостью, но, если нужны более одного размера шрифта, потребуется трудоемкая работа по разработке нескольких таких шрифтов. Когда необходимо свободное масштабирование шрифтов, используются векторные шрифты (на самом деле, большинство масштабируемых шрифтов — это библиотеки программ, "рисующих" соответствующие буквы, часто - с учетом важности их отдельных элементов для восприятия; но разница в данном случае несущественна). Качество отображения мелкого кегля или на экране с низкой разрешающей способностью у них ниже, но они универсальнее. Прочие элементы графических пользовательских интерфейсов также используют как векторную (большинство органов управления и большинство элементов оформления окон), так и растровую (пиктограммы-"значки") графику.

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

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

  • очень простой векторный редактор Xfig для оконной системы XFree86,
  • sodipodi (обычно поставляется со всеми операционными системами, включающими среду GNOME),
  • Kontour (компонент популярного "офисного" пакета KOffice)

и, наконец,

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

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

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

Рис. 3.1

Рис. 3.1

Как и остальные компоненты пакета OO.o, OpenDraw использует в качестве "родного" формата специально разработанное XML-приложение (об XML и о том, почему ориентация на этот стремительно набирающий популярность формат данных важна при выборе учебных программ, см. материалы Лекции 1). Этот пакет доступен для популярных стандарных (Linux, Solaris) и нестандартных (Microsoft Windows, MacOS) операционных систем и прилично (хотя и не идеально) локализован. Самым же существенным недостатком OpenDraw являются относительно высокие требования к аппаратным ресурсам, поэтому его использование затруднительно на старых или маломощных компьютерах (для комфортной работы над несложными учебными упражнениями должно быть достаточно Intel P-II, Celeron или K6-2 с частотой от 500 МГц или G3 с частотой от 350 МГц при памяти от 64 MБ). Если нужна демонстрация векторно-графических возможностей на таких компьютерах, мы рекомендуем sodipodi или еще более "легкую" XFig. Сохранение в "чужих" векторных форматах (экспорт) на сегодня реализовано только для ранних версий предшественника OpenOffice.org пакета StarOffice (и StarDraw как отдельной программы). Зато импорт (чтение "чужих" форматов) возможен не только из популярных универсальных векторных форматов, но и из DXF, используемого в популярных системах автоматизированного проектирования (САПР). OpenDraw также позволяет экспортировать рисунок во многие растровые форматы или в гипертекстовую страницу. Следует понимать, что StarDraw, на основе которого разработана программа, задумывалась как "офисный" графический редактор, прежде всего предназначенный для создания и редактирования графических элементов оформления документооборота (сопровождающих документы рисунков, карт, диаграмм, графиков и пр.). Поэтому действия, типичные для такой работы, максимально облегчены и "вынесены на первый план", и OpenDraw содержит массу готовых деталей, широко употребимых в "офисной" графике (например, готовых стрелок и множества соединительных линий, часто используемых в таких случаях). Для технического черчения и схемотехники OpenDraw не приспособлена (хотя при случае в ней можно создать простой чертеж или электронную схему). Документ OpenDraw называется рисунком, что несколько дезориентирует, поскольку на самом деле он может содержать целую "пачку" отдельных изображений, называемых слайдами. Каждый слайд, в свою очередь, может содержать один или более слоев (работа со слоями чаще нужна при работе с растровой графикой, и мы коснемся ее в соответствующей лекции; к тому же, механизм слоев в OpenDraw не развит). Рисунок сохраняется в файле, который технически представляет собой PKZip-архив, включающий стилевые определения и собственно содержание документа на языке XML. Какой-либо инструментарий, специально предназначенный для обработки OpenDraw XML, нам не известен. Как и остальные компоненты OpenOffice.org, OpenDraw в высшей степени конфигурируемая и настраиваемая под конкретное применение программа. Для использования в учебном контексте может оказаться полезным предварительно настроить ее для некоторого сокращения обилия непосредственно доступных пользователю функций, чтобы ученик в них не затерялся.

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

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

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

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

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

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

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

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

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

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

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

Рис. 3.2

Рис. 3.2

Выше уже было замечено о том, что, хотя преобразование векторного изображения в растр — элементарная техническая задача, гарантированное обратное преобразование в общем случае невозможно. Тем не менее, существуют программы, которые пытаются это сделать. OpenDraw обладает функцией векторизации, "спрятанной" в меню "Преобразовать" под кличкой "В многоугольник". Если применить данный пункт меню к импортированному растровому изображению, появится окно предпросмотра с возможностью задать некоторые параметры и увидеть результат. Ничего мистического в этой функции нет: программа ищет связные области, залитые одним или близкими цветами, и описывает их контур как многоугольник. Затем она группирует полученные фигуры одного цвета и переходит к следующему цвету или группе цветов. Результирующий векторный объект представляет собой группу, в свою очередь состоящую из цветовых групп. Более глубокого анализа программа не проводит (в принципе, можно было бы каждый выделенный объект пытаться аппроксимировать с заданной точностью отрезком, коническим сечением или кривой Безье; это позволило бы распознать элементарные геометрические фигуры, например, просканировав простой рисунок). Эта функция предусматривает слишком мало паратметров, чтобы быть особенно полезной на практике, однако для демонстрации того, в чем состоит процесс векторизации, она вполне подходит.

Ресурсы

Пакет OO.o входит во все "большие" (многодисковые универсальные) дистрибутивы ОС Linux и во многие "маленькие" (одно-, двух- и трехдисковые, исключая ориентированные исключительно на серверное применение). Мы рекомендуем обратить внимание на российскую сборку OO.o, поставляемую с ALT Linux ("большой" дистрибутив Master и "маленький" Junior; www.altlinux.ru) и ASPLinux (в различных вариантах, www.asplinux.ru). В ней раньше, чем в основной ветке, появляются новые возможности, ориентированные на русского пользователя, в то же время, задержка сборок новых версий (по отношению к основной ветви разработок) минимальна. Многоплатформенная (Linux и Microsoft Windows) российская сборка доступна в составе сборника OpenOffice.ru, его можно взять на сайте www.openoffice.ru или приобрести (список реселлеров доступен на том же сайте) однодисковую коробку. О российских сборках OO.o под "Макинтош", Solaris и другие ОС нам ничего не известно, и их пользователям можно порекомендовать следовать по ссылкам с www.openoffice.org. Основной русскоязычный ресурс, посвященный OpenOffice, — это тот же сайт www.openoffice.ru и его сателлиты (включая http://docs.openoffice.ru). Основной международный ресурс — это базовый сайт разработки www.openoffice.org). OO.o вообще и OpenDraw в частности пока освещены лишь нескольких публикациях. Внимания заслуживают: [6-8].

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

В предыдущей (лекции(, посвященной векторной графике и программе OpenDraw, приводились основные факты, касающиеся различия векторной и растровой компьютерной графики:

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

4.1 Источники и параметры растровой графики

Обычным источником растровых изображений является сканер — устройство, "проходящее" (сканирующее) лист бумаги или кадр фотопленки точка за точкой и передающее компьютеру значения, соответствующее интенсивности базовых цветов в каждой точке. Все большей популярностью пользуются цифровые фотокамеры — аппараты, вместо фотопленки фокусирующие изображение на светочувствительной матрице, передающей цифровую запись изображения на энергонезависимый носитель информации (гибкий диск или т.н. флэш-карту), который затем может читаться компьютером. Растровые изображения могут также создаваться человеком на компьютере с помощью устройств координатного ввода ("мыши" или более подходящего для этой цели графического планшета) или синтезироваться различными программами. Важнейшими параметрами растрового изображения являются его растровый размер (в точках) и "глубина цвета" (количество бит, используемых для представления цвета каждой точки). Эти параметры часто записывают в виде 1024х728x24, что означает 1024 точки по горизонтали, 728 точек по вертикали и 24 бит на цвет (двадцати четырех бит достаточно для получения "фотореалистичных" изображений, дальнейшее повышение разрядности не приводит к увеличению качества отображаемых или печатаемых современными средствами изображений, хотя в промежуточной обработке или при синтезе изображений иногда используется большие значения глубины цвета). Еще одним параметром, предусмотренным некоторыми форматами хранения растровой графики, является его "масштаб", который принято измерять в точках на дюйм (DPI); это чисто информационный параметр, который может учитываться при печати изображений, но не влиет на возможность их обработки.

4.2 Источники и параметры и форматы представления растровой графики

За тридцатилетнюю историю компьютерной графики разработано великое множество (сотни) форматов хранения изображений. Большинство из них является плодом несогласованности "технического творчества" отдельных групп исследователей и компаний, а также отражает особенности давно вышедших из употребления специфических устройств. Важными свойствами форматов являются присущие им внутренние ограничения, из которых наиболее значимы ограничения на глубину цвета, поддерживаемые цветовые модели ("мониторная" RGB, "полиграфическая" CMYK и т.д.) возможность сохранения нескольких слоев изображения (понятия слоев, контуров и масок здесь не обсуждаются), наличие т.н. "альфа-канала" (фиктивного "цвета", соответствующего степени прозрачности изображения при наложении его на другое изображение) и поддерживаемые алгоритмы сжатия. Применяемые в растровой графике алгоритмы сжатия подразделяются на неразрушающие и форматы с потерей качества (последние используют психофизиологическую модель человеческого зрения для того, чтобы избавиться от незначимых деталей изображения, что несколько снижает его качество, но позволяет добиться гораздо большей компактности кода). Практически универсальными являются форматы TIFF (обычно применяемый в полиграфии, допускает лишь неразрушающее сжатие), PNG (наиболее удобный для представления графических данных в мультимедийных системах и WWW, допускающий как неразрушающее сжатие, так и сжатие с потерями), а также медленно вытесняемые последним JPEG (допускающий сжатие с потерями) и GIF (ограниченный 8 бит (256) цветами). Кроме того, многие графические редакторы (включая описанный ниже GIMP) обладают собственным форматом, позволяющим сохранять в том же файле массу вспомогательной информации, полезной при продолжающейся более одного сеанса работе с файлами.

4.3 Общие сведения о GIMP

GNU Image Manipulation Program (Программа ГНУ для манипуляции изображениями), или сокращенно GIMP (читается "гимп") — потомок курсового проекта двух студентов, Питера Маттаса и Спенсера Кимболла (1985-86 гг.). За восемь лет и при участии десятков программистов GIMP вырос в один из самых насыщенных функциональностью графических редакторов, уступающих лишь "под завязку" набитому сторонними модулями редактору Photoshop (стоит отметить, что стоимость одной копии последнего, самого по себе не дешевого, вместе со всеми такими модулями составляет несколько тысяч долларов). Текущая стабильная версия — 1.2; вполне возможно, что ко времени выхода этого выпуска "Информатики" уже появится версия 1.4 (как и в некоторых других проектах нечетным "малым" номерам соответствуют экспериментальные (разработческие) версии, а четным — стабильные). Интересно, что в рамках проекта GIMP была создана библиотека работы с экранными примитивами GTK (ныне GTK+), являющаяся на сегодня одной из самых развитых и широко используемых в своем классе (в частности, на GTK+ основана популярная графическая операционная среда GNOME). GIMP, доступный для всех популярных настольных платформ (включая Linux, MacOS, Microsoft Windows и др.), широко используется для работы над WWW и мультимедийной графикой, обработки любительского, репортажного и даже художественного фото, ретуширования кинокадров. Правда, для последней цели чаще используется модификация, известная как FilmGIMP, ее, в частности, активно эксплуатировали при монтаже недавно вышедшего первого фильма о Гарри Поттере. GIMP редко используется для предпечатной подготовки графики: в нем пока нет поддержки "полиграфических" цветовых моделей и системы цветоделения. Еще одним ограничением текущих версий GIMP является относительно низкая производительность, затрудняющая работу с действительно большими (сотни тысяч точек) и сложными (десятки слоев) изображениями. Для создания и обработки достаточно компактных и простых изображений, а также для их отображения на мониторе и печати на оборудовании потребительского класса эти ограничения не важны. GIMP способен работать с продвинутыми координатными устройствами — графическими планшетами, в том числе, моделями, распознающими силу нажатия на перо.

4.4 GIMP — программируемый графический редактор

Вероятно, успехом GIMP не в малой степени обязан своей изначально модульной и программируемой архитектуре. Сам по себе этот редактор — достаточно компактная и простая программа, однако его возможности приумножаются за счет открытости архитектуры и наличия множества модулей (в текущей поставке — около трехсот), реализующих те или иные дополнительные функции, такие как импорт-экспорт сторонних форматов или обработку изображения или его фрагмента по тому или иному алгоритму. Такие модули можно разрабатывать как отдельные программы с использованием библиотеки GDK, а можно пользоваться одним из встроенных в GIMP интерпретаторов языков программирования. Именно наличие таких интерпретаторов и делает GIMP программируемым графическим редактором. Можно сказать, что его архитектура подобна архитектуре текстового редактора Emacs, о котором говорилось во второй нашей "лекции". Таких интерпретатора на сегодня два. Забавное название Script-fu, видимо, следует понимать как английско-китайское выражение, означающее "мастерство сценирования" (напомним, что "сценариями" ("скриптами") называют программы, написанные на интерпретируемых языках). Script-fu — это первый встроенный в GIMP интерпретатор функционального языка Схема (Schema), являющегося потомком первого языка функционального программирования Лисп. Разработчик скрипта имеет доступ к многочисленным базовым функциям-графическим примитивам. Схема — весьма продуманный и стройный язык, однако его методический потенциал не может в полной мере быть раскрыт в сегодняшних курсах информатики в средней школе, программирование в которых вводится в директивной (сентенциональной) парадигме. На Схеме, так же, как и на Лиспе, можно писать в директивном стиле, однако изящества и простоты, столь необходимых в обучении, достичь при этом возможным не представляется. Директивен другой язык, интерпретатор которого также встроен в GIMP. Это Перл (Perl), его GIMP-овская реализация называется Perl-fu. Хороший программист может писать на Перле чисто и аккуратно, однако синтаксис языка сам по себе настолько гибок (чтобы не сказать "жидок"), что, по нашему мнению, Перл совершенно не годится на роль изучаемых в числе первых (хотя существуют и другие мнения, весьма авторитетные). Добавление в GIMP еще одного интерпретатора (например, алголо- или паскалеподобного языка) не представляется особо сложной задачей, однако о таких проектах ничего не известно, и, наверное, от программирования обработки изображений "внутри" GIMP как от простой в методическом освоении темы большинству педагогов стоит пока отказаться.

4.5 Интерактивная функциональность и эргономика

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

Рис. 4.1

Рис. 4.1

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

Рис. 4.2

Рис. 4.2

Рис. 4-2

Рис. 4.3

Рис. 4.3

Зато можно воспользоваться (непривычным для пользователей упрощенных графических сред, таких, как Microsoft Windows) свойством графической библиотеки GTK+, называемым "линия отрыва". Каждое меню наверху содержит пунктирную линию, щелкнув мышью на которой можно превратить это меню в самостоятельное инструментальное окно, сохраняющееся, пока пользователь явным образом его не закроет (Рис. 2-3). Таким образом (учитывая настраиваемость самой системы меню) можно в любой момент создать на экране дополнительные "панели инструментов", содержащие функции, которыми в ближайшее время предполагается воспользоваться. Привыкшему к другому стилю работы пользователю это непривычно, однако, привыкнув, эту интерфейсную особенность можно использовать весьма эффективно. Множественность окон, к сожалению, может создавать некоторые неудобства в средах без развитого инструментария управления окнами. В более развитых средах можно "склеить" несколько окон, чтобы они перемещались как единое целое или "поднять" окно, чтобы оно продолжало оставаться видимым, даже если будет активизировано окно, расположенное "под ним" (собственно, многооконное визуальное решение и создано в расчете на наличие таких средств), а если такие средства отсутствуют (как, например, в Microsoft Windows), пользование редактором на мониторе с малым разрешением может быть отягощено необходимостью совершать какие-то дополнительные действия. Основная интерактивная функциональность, доступная посредством "инструментов" в главном окне, достаточно традиционна для программ этого класса. Она включает, в том числе:

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

В базовую функциональность GIMP входит также возможность захвата изображения со сканера и с экрана.

4.6 Фильтрация и синтез изображений

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

  • изменение цвета, насыщенности, яркости и контраста изображения;
  • удаление "шума";
  • повышение резкости и размывание, выделение краев.
Рис. 4.4

Рис. 4.4

Рис. 4.5

Рис. 4.5

Рис. 4.6

Рис. 4.6

Рис. 4.7

Рис. 4.7

Рис. 4.8

Рис. 4.8

Рис. 4.9

Рис. 4.9

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

* * *

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

Ресурсы

GIMP входит во все "большие" (многодисковые универсальные) дистрибутивы ОС Linux и во многие "маленькие" (одно-, двух- и трехдисковые, кроме ориентированных только на серверное применение). Интерфейс GIMP переведен на русский язык (хотя есть отдельные модули, доступные только с иноязычными интерфейсами). GIMP доступен для Linux и других открытых систем — на www.gimp.org; для Microsoft Windows — на www.wingimp.org; для MacOS — на www.macgimp.org. Основной русскоязычный ресурс, посвященный GIMP — www.gimp.ru. Краткое сорокастраничное введение в GIMP есть в книге [9]. Из англоязычных книг посоветуем две свободно доступные [13, 14].

Лекция 5. OpenCalc — свободный редактор электронных таблиц

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

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

  • OpenCalc — электронно-табличный компонент уже знакомого нам по "лекциям" 1 и 3 интегрированного прикладного делового пакета OpenOffice.org;
  • KSpread — компонент еще одного конкурирующего пакета под названием KOffice, который мы пока обходим вниманием. KSpread сегодня также не будет нами рассматриваться, но по чисто техническим причинам. Ничего плохого мы о нем сказать не можем. И, наконец,
  • Gnumeric — компонент слабоинтегрированного пакета (или, скорее, собрания программ) GNOME Office, не слишком популярного в России из-за хронических сложностей с кириллической письменностью, свойственных word-процессорному его компоненту, Abiword. Сразу отметим, что, в отличие от последнего, Gnumeric "русофобией" не страдает.

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

Рис. 5.1

Рис. 5.1

Рис. 5.2

Рис. 5.2

Рис. 5.3

Рис. 5.3

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

Ресурсы

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

Рис. 3 Утилиты могут не только выводить текст, но и читать ввод. Простейший пример — утилита конкатенации cat, которая, будучи издана без аргументов, просто построчно копирует текст (см. рис. 3). Утилита, читающая что-либо из стандартного ввода и выводящая что-либо на стандартный вывод, называется фильтром, фильтрами являются многие из стандартных POSIX-утилит.

$ cat >names
Петя
Яна
Вася
Маша
^D
$ ls names
names
$ cat <names
Петя
Яна
Вася
Маша
$_

Рис. 4 Стандартный ввод-вывод — это два файла, которые по умолчанию связаны с текущим терминалом. Мощнейшим средством оболочки является перенаправление ввода и вывода в произвольный файл, задающееся соответственно знаками < и >, за которыми следуют имена файлов. На рис. 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 Командная оболочка как язык программирования

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

  • сентенциональная (директивная) парадигма;
  • возможность построчной интерпретации или однопроходной компиляции (т.е. построчкая контекстная независимость сверху вниз). Нам неизвестны компилирующие реализации языка стандартной оболочки;
  • наличие управляющих конструкций:
  • последовательного исполнения,
  • условного (if-then, if-else, if-then-else, if-then-elif...) исполнения,
  • многовариантного выбора (case),
  • циклов (перебора списка for, с постусловием until, с предусловием while) и их разрыва (break, continue);
  • наличие механизма подпрограмм-функций (описываемых как в файле сценария, так и в отдельных файлах или библиотеках);
  • наличие оператора присваивания (установки значения переменной);
  • возможность использования внешних программ (команд) ОС в качестве операторов (вызовов функций) и обработки значений их кодов возврата;
  • наличие нетипизованных переменных. Переменные декларируются первым упоминанием, могут принимать в качестве значения произвольную строку. Значение, могущее быть интерпретированным как число может использоваться в выражениях целочисленной арифметики;
  • развитый синтаксис выражений, используемых в операторах присваивания, а также в качестве условий исполнения или циклов;
  • развитая система работы с файлами (ввода/вывода), в том числе со стандартным вводом с терминала и выводом на терминал;

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

Лекция 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.

Рис. 7.1

Рис. 7.1

Мы видим традиционный серый экран с не менее традиционным курсором в виде буквы X. Используя мышь или другое координатное устройство, курсор можно перемещать по экрану. На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже — сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это Zap (Control-Alt-Backspace) — завершение работы сервера (если эта возможность не запрещена при конфигурации), Zoom (Control-Alt-+/-) — "горячее" переключение доступных видеорежимов. В некоторых ОС (Например, GNU/Linux) Control-Alt в сочетании с функциональной клавишей освобождает оборудование и передает его на время соответствующей виртуальной консоли.

Рис. 7.2

Рис. 7.2

Воспользуемся последней возможностью, перейдем на консоль и запустим первое клиентское приложение: программу xterm (Рис. 2). На экране X обрел появилось окно, а в окне можно видеть интерфейс клиентского приложения. В данном случае интерфейс текстовый, а приложение — эмулятор терминала, на котором запущена диалоговая оболочка системы по умолчанию. С эмулятором можно делать все то же, что и с обычным терминалом: издавать команды, получать результат и запускать другие программы. Если программы текстовые (строчные или оконные), исполняться они будут в том же окне, а если графические (как и сам xterm) — в отдельных окнах.

Рис. 7.3

Рис. 7.3

Запустим программу 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 поклонников хватает.

Рис. 7.4

Рис. 7.4

Запустим "Просвещение" (Рис. 4). Как резко изменилась картина! Первое, что мы видим — это появившиеся вокруг окна нашего xterm "виджеты" (элементы окон) — строка заголовка с кнопками и рамка. Окно теперь можно перемещать по экрану, "ухватив" за заголовок, масштабировать, "взяв" за бок или за угол, максимизировать, минимизировать или закрыть, нажав соответствующую кнопку. Спрашивается, что еще можно делать с окном?

Рис. 7.5

Рис. 7.5

Вопрос не праздный. Нажав на левую кнопку в заголовке, получаем неожиданно разнообразное меню (меню — это тоже "виджет") таких действий (Рис. 5). Оказывается, его можно еще уничтожить (Annihilate), поднять/опустить (Raise/Lower), оттенить/растенить (Shade/Unshade) приклеить/отклеить (Stick/Unstick) и выполнить еще массу действий, для которых потребовались отдельные меню! Набор этих действий зависит от конкретного менеджера окон (и Enlightenment — один из самых богатых возможностями), а то, какие из них выведены в строку заголовка отдельными кнопками — вообще от его настройки. Собственно, управление окнами — основная функция оконного менеджера, и на этом его функциональность может и заканчиваться. Однако большинство из них выполняют по крайней мере еще одну функцию.

Рис. 7.6

Рис. 7.6

Вы уже обратили внимание на то, что при запуске "Просвещения" на экране появилось еще одно окно. Это так называемый пейджер (pager), на Рис. 6 он изображен крупным планом. На пейджере представлена миниатюрная копия экрана, обновляющаяся в режиме реального времени, причем, если подвести курсор к изображению отдельного окна, оно увеличивается и рядом высвечивается название приложения, запущенного в нем. Но почему экран занимает только четверть окна пейджера? Потому что оконный менеджер позволяет оперировать "виртуальным столом, по размеру превышающим физический экран, а пейджер — одно из средств перемещения физического экрана по рабочему столу. Enlightenment позволяет создавать до 64 экранов на рабочем столе.

Рис. 7.7

Рис. 7.7

Еще один важный компонент Enlightenment мы не увидели сразу: это меню настройки самого менеджера, которое можно "достать", щелкнув правой кнопкой мыши на фоне экрана (Рис. 7). Порывшись в настройках, можно обнаружить, что вышесказанное о способах оперирования с этим менеджером весьма условно, потому что поменять можно буквально все, от декора виджетов до количества и функций элементов оформления окон и их реакции на различные действия. Лишь один пример: сколько способов визуализировать перемещение окна вы знаете? Разработчики "Просвещения" придумали целых шесть, включая фантастический "полупрозрачный". Настройки и расширения Enlightenment можно объединять в "темы" (themes) и обмениваться ими. Собственно, на этом функции оконного менеджера как такового и заканчиваются, а дальше Enlightenment вторгается во владения другого класса программ — менеджеров рабочего стола...

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

...Что демонстрирует отсутствие резкой границы между ними. Существует два подхода к тому, чтобы достроить оконную систему до полнофункциональной среды. Первый — добавить в "графический сэндвич" еще один слой — менеджер рабочего стола — работающий "поверх" оконного менеджера и использующий функциональность последнего. Этим путем идут команды разработчиков GNOME и KDE, которым посвящены отдельные "лекции". Другой путь — "дотянуть" до полнофункциональной среды функциональность самого оконного менеджера, и им идет Enlightenment и ряд других проектов. Что нам не хватает до полнофункциональной среды? Менеджера программ, утилит и приложений. Так вот, в "Просвещении" есть и такая функциональность, доступная (по умолчанию) по щелчку на фоне левой кнопкой. Комментировать здесь особо нечего: пункты меню позволяют запустить множество различных приложений, причем, кроме независимо разработанных, и целую пачку "эпплетов", поставляемых вместе с Enlightenment. Альтернативный способ запуска — через "панель" — встроен в некоторые темы "Просвещения". Откуда берутся такие ресурсы, как "виджеты" с их декором и способом поведения? Конечно, менеджер окон может содержать их в себе. Но такой подход не очень характерен для открытых систем, одним из принципов разработки которых является компонентность. Большинство развитых оконных менеджеров, менеджеров рабочего стола и "заточенных" под них приложений можно сгруппировать по библиотекам (toolkits), с опорой на которые они разработаны.

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

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

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

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

  • Проф. Брукс не заметил решения "проблемы двух курсоров" (а заодно — и непротиворечивой интеграции командной строки в графико-интерфейсное окружение) в конце восьмидесятых в Norton Commander (и сонме последователей этой замечательной программы на разных платформах (обзор см. в [15]. Проф. Безруков предложил для реализованного в Norton Commander интерфейса термин "ортодоксальный менеджер файлов" (OFM));
  • WIMP не думает устаревать, и скорее сам абсорбирует новые интерфейсные возможности (включая распознавание речи), чем будет вытеснен ими;
  • и, наконец, самое серьезное — это то, что "триумф WIMP" на сегодня выглядит не то, чтобы менее бесспорным, а менее однозначным, все более походя на пресловутое "триумфальное шествие советской власти" по обессиленным Первой мировой войной частям Российской империи и ее окрестностей. Во многих прикладных областях попытки внедрения WIMP стали скорее частью проблемы пользовательского интерфейса, чем частью ее решения.

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

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){Возможностью представить их обзор в компактном виде лектор обязан прежде всего своим соавторам по [3] Егору Гребневу, Сергею Иванову, Михаилу Шигорину.} позволяют достаточно комфортно работать с графикой на машинах производительностью (в эквиваленте 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-клиентами) окна и
  • предоставляет другим программам возможность работы в окнах, то есть вывода информации в эти окна и обработки сигналов от устройств ввода (клавиатуры и "мыши" или другого координатного устройства), когда окно, назначенное программе, является активным. Предоставление ресурсов возможно в том числе и через сеть, когда клиент и сервер работают на разных компьютерах (узлах).

В "голой" среде, образуемой X Window Server без оконного менеджера, окно, выделяемое клиенту, является фиксированным: его геометрия (местоположение на экране и размер) задается при запуске клиента и сохраняется в течение всего сеанса работы с этим клиентом. Это вполне соответствует цели создания специализированных систем с графическим интерфейсом пользователя (таких, как мультимедийные киооски и т.п.), но совершенно недостаточно для универсального "настольного" применения. При универсальном применении компьютера характерна поочередная работа с различными программами (иногда достаточно большим их количеством), причем пользователь может отрываться, допустим, от редактирования текста, чтобы поработать другой программой с иллюстрацией, прочитать почту или заглянуть на WWW-страницу, затем возвращаться к редактированию текста и т.д. Графическая операционная среда должна быть достаточно гибкой, чтобы допускать и поддерживать такой, "субъектно-ориентированный", а не ориентированный на строго последовательное выполнение предзаданных процедур, стиль работы. В частности, должно поддерживаться управление (с помощью клавиатуры или "мыши") окнами, т.е. возможность изменять "на лету" их геометрию (положение и размеры), а также (обычно не относимое к геометрии) положение в воображаемой "стопке" окон, т.е. определение того, какое из окон будет "верхним" (видимым полностью), если окна перекрывают друг друга на плоскости экрана. Управление окнами и составляет базовую функциональность оконного менеджера (устоявшийся термин window manager, относящийся к этому классу программ, будет передаваться далее словосочетанием-калькой "оконный менеджер", которое, впрочем, не представляется особенно удачным, так же, как и встречающиеся в литературе "менеджер окон" и "администратор окон"). Технически ограничение на изменение геометрии раз выделенного окна преодолевается оконным менеджером за счет того, что ему в качестве окна выделяется весь экран. Прикладным программам, таким образом, выделяются далее уже не окна собственно X, а окна оконного менеджера. Для них это совершенно прозрачно, хотя желательно, чтобы программа была достаточно "сообразительной", чтобы изменить свое поведение при изменении размеров выделенного ей окна "на лету" (изменение положения окна в подавляющем большинстве случаев ничего от клиента не требуют), это справедливо для большинства, но не для всех программ (в частности, этого не "умеют" многие старые программы и некоторые компьютерные игры). В свою очередь, и оконный менеджер может быть достаточно "умен", чтобы понять, что программа не реагирует на изменение геометрии, и заблокировать возможность изменения размеров окна пользователем (чтобы он не оказался в ситуации, когда ему видна лишь часть области вывода программы или наоборот, часть окна прикладной программы пуста). Однако такое решение может привести к весьма дискомфортным ситуациям (например, если при запуске программы ее окно оказывается больше экрана). (Следует отметить, что большинство базовых функций оконных менеджеров при исполнении опираются на поддержку оконной системой X функций двумерной графической акселерации (ускорения), реализованных практически во всех современных графических адаптерах. В отличие от трехмерной акселерации, полезной лишь для достаточно узкого круга приложений (программ трехмерного моделирования, компьютерных игр), двумерная акселерация — действительно универсальна полезна для графического пользовательского интерфейса. При использовании карты без двумерного ускорения или карты, чья акселераторная функциональность не поддерживается системой X, можно рекомендовать настройку среды для исключения, например, визуализации перемещения окна со всем его содержимым, дабы избежать неоправданного роста нагрузки на процессор и драматического падения производительности.)

8.3 "Виджеты"

Рис. 8.1

Рис. 8.1

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

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

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

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

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

  • минимизацию/сворачивание окон и управление свернутыми окнами. Работа на "столе", "захламленном" десятком различных окон, может быть дискомфортной, и крайне полезна возможность "свернуть" или "минимизировать" окно со времеенно неиспользуемой программой. Для того, чтобы средствами графической среды можно было окно затем развернуть, оно и в свернутом состоянии должно каким-то образом визуализироваться. Существует несколько относительно распространенных способов видуализации свернутых окон. Например, "на столе" может оставаться полоса заголовка свернутого окна по щелчке на которой оно вновь разворачивается. Свернутым окнам могут соответствовать пиктограммы ("иконки", "значки") на поверхности "рабочего стола" или в специально отведенном для этого окне ("панели управления"). Свернутые окна могут визуализироваться как пункты общего или специального меню (см. ниже);
  • управление несколькими "столами". Практика показывает, что для многих продвинутых пользователей, для которых освоение стандартных систем следует за освоением специфически персонально-компьютерных, именно возможность работать на нескольких "столах" оказывается первым "убойным приложением" X Window System. Действительно, переключение между виртуальными "столами" позволяет организовать комфортную работу со множеством программ даже на мониторах с относительно низким разрешением (1024х728, 800х600) и физическими размерами (17, 15-дюймовыми). В иных условиях комфортность работы существенно снизилась бы, или настоятельной еобходимостью стало бы приобретение более крупного и емкого монитора (что зачастую влечет за собой необходимость смены графической карты и прочих недешевых мероприятий). Все современные оконные менеджеры поддерживают вируальные столы, правда называются эти сущности в них по-разному: "столами", "рабочими областями" или "экранами". До предела (чтобы не сказать, до абсурда) эта функциональность развита в оконном менеджере Enlightenment, упоминавшемся в предшествующей "лекции": E позволяет организовать до 64 "экранов" на "рабочем столе", при этом "рабочих столов" также может быть более одного (точнее, до 32). Трудно представить, зачем может понадобиться две тысячи с лишним отдельных экранов (как правило, четырех экранов хватает с избытком для любых практических задач), однако возможности приема демонстрируются этим "в полный рост";
  • быстрый запуск команд. Возможность быстрого запуска предуготовленных команд обычно ассоциируется с общим меню, вызываемым "щелчком" на особом виджете, не связанном с прикладными окнами, или в свободной от прикладных окон области экрана;
  • возможности настройки "поведения" и внешего вида среды. "Поведение" (реакция отдельных виджетов на операции с ними, модель фокусировки (связывание ввода с клавиатуры и "мыши" с теми или иными программами) и т.п.) и внешний вид оформления окон, а также наличие на экране "общих" виджетов, не связанных с конкретными прикладными окнами, "обои" и т.п. могут варьировать в очень широких пределах. Иногда возможности такой настройки считают некими "архитектурными излишествами", однако более взвешенной является точка зрения, согласно которой в хорошем визуальном дизайне (так же, как и в хорошей архитектуре) ничто не является излишеством. В частности, в школе программы эксплуатируются на широком спектре оборудования с весьма разными характеристиками и разного качества, причем используются они широким кругом людей с различными психофизическими особенностями, как в пределах нормы, так и связанных со здоровьем, и игнорировать возможности настройки нельзя даже уже исходя из гигиенических соображений.

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

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

Рис. 8.4

Рис. 8.4

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

Рис. 8.2

Рис. 8.2

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

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

Рис. 8.3

Рис. 8.3

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

Ресурсы

Упомянутые оконные менеджеры присутствуют практически в любом дистрибутиве свободной ОС, начиная с однодисковых. Исключение составлят FluxBox, обычно не включаемый в "маленькие" дистрибутивы (если очень хочется его посмотреть, а доступа к Интернет нет, попытайтесь найти диск, прилагавшийся к журналу [19] — при заказе этого однодискового дистрибутива редакция специально попросила включить эту несправедливо "обижаемую" программу. Упомянутый выпуск журнала содержит, помимо прилагаемого дистрибутива ALT Linux Junior 2.1 (www.altlinux.ru), подборку статей, посвященных использованию свободных программ дома.

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

Запуск графической среды (точнее, "бутерброда" из X Window System, оконного менеджера и графической среды) в открытой операционной системе можно сравнить с запуском Microsoft Windows в MS-DOS{Имеются в виду графические оболочки (Microsoft Windows 1.x, 2.x, 3x, 9x и Me), а не семейство Microsoft Windows NT (сегодняшними версиями которых являются Microsoft Windows 2000, XP и .NET Server).} }. Однако, сходство заканчивается, не успев начаться. MS-DOS — это однозадачная и однопользовательская система, и запущенная оболочка захватывает все ее ресурсы. Из-за неполноценности ОС оболочке приходится брать на себя несвойственные ей функции (например, имитацию многозадачности), с которой она справляется плохо (так, "зависание" одной программы вполне может привести к неработоспособности всей системы). При запуске графической среды под полноценной ОС, она, с точки зрения последней, представляет группу обычных процессов, управление которыми производится общесистемными средствами. Точно так же, общесистемными средствами производится и управление процессами, запускаемыми "из-под" этой графической среды. Более того, поскольку платформой для запуска конкретной среды является изначально сетевая X Window System, прикладная программа даже не обязана запускаться на том же компьютере. Среда отнюдь не монополизирует использование этого компьютера; параллельно с ее работой продолжает исполняться множество служебных системных процессов; с других терминалов (если система многотерминальная) могут запускаться другие программы или даже другие графические среды (или дополнительные экземпляры той же среды). Более подробно об этом будет рассказано в "лекции", посвященной операционным системам.

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

Однородность опыта и связанная с нею привычность (иногда ошибочно называемая "интуитивностью", хотя она не имеет отношения к философскому и психологическому понятиям интуиции) позволяют при освоении нового инструмента-программы сосредоточиться на ее прикладной логике (аспектами, связанными с конкретным приложением ИТ, которое она реализует), не задумываясь и специально не фокусируя внимания на аспектах, общих для разного инструментария. Это делает более "крутой" пресловутую "кривую обучения" нового пользователя. (Разумеется, это сильно идеализированная картина. Иногда прикладная логика диктует некоторые элементы эргономики; например, интерфейсы большинства систем автоматизированного конструирования и проектирования (CAD, САПР) весьма сходны, вне зависимости от среды, в которой работают эти программы.) Как ни парадоксально, основной недостаток работы в интегрированной среде является оборотной стороной основного достоинства: жестко закрепленные навыки мешают при выходе за ее пределы. Конечному пользователю, ограниченному опытой работы в одной среде, недостает "стереоскопичности" видения, глубины понимания; элементы эргономической логики могут напрямую ассоциироваться с определенными визуальными элементами и "жестами", с помощью которых подаются команды. Общеизвестны сложности, с которыми сталкиваются люди, неколько лет пользовавшиеся MacOS или Microsoft Windows при необходимости поработать в другой (пусть даже и весьма схожей) среде. Подобная "ригидность" опыта может формироваться и при работе в любой из свободных сред, хотя как правило пользователь в них не ограничен (в отличие от специфически персонально-компьютерных сред) прикладными программами, специально разработанными для данной среды и делящими с ней наборы элементов интерфейса ("виджетсеты"), поэтому его опыт изначально более разнообразен. В этом смысле, крайне полезным представляется знакомство учащихся с разными средами уже на начальном этапе освоения графических интерфейсов. Это не обязательно должны быть разные интегрированные среды, но само представление о том, что один и тот же результат может достигаться с помощью разных интерфейсных средств, должно быть передана обязательно. В общем случае это возможно и в рамках одной интегрированной среды из числа рассматриваемых ниже — и KDE, и GNOME в высшей степени гибки в отношении настройки внешнего вида и "поведения". Эта гибкость также весьма полезна для обеспечения доступности и максимально достижимого комфорта учащимся с физиологическими особенностями и физическими недостатками (дальтонизмом, слабым зрением, ограниченной подвижностью или расстроенной координацией движений и т.п.).

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

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

  • они опираются на определенный интерфейс разработчика (API), состоящий из библиотек, доступных также разработчикам прикладных программ (будь то MS Windows API для Microsoft Windows, Motif для CDE, Qt для KDE или GTK+ для GNOME);
  • они реализуют элементы объектной метафоры (одельные экземпляры сущностей, таких как файлы, процессы (их потоки ввода-вывода) визуализируются определенным образом, на них можно фокусироваться и выполнять с ними различные действия, их состояния и изменения этих состояний также могут визуализироваться или озвучиваться). Целостная объектная метафора своей реализации не нашла (и, видимо, последовательно "объектная" среда была бы крайне неудобной в использовании);
  • они реализуют единообразные элементы управления ("виджеты"), зачастую не только в оформлении отдельных окон, но и в их "начинке";
  • они содержат те или иные элементы управления, не привязанные к отдельным окнам прикладных программ ("общие" меню, "панели управления", "поверхность стола" и т.п.);
  • они позволяют согласованно изменять свойства интерфейса образующих среду программ;
  • они реализуют "буфер (буферы) обмена", позволяющий передавать типизованные данные от программы программе (X Window System содержит буфер, позволяющий передавать данные лишь простого текстового типа);
  • они реализуют возможность "перетаскивания" (drag'n'drop) объектов или данных между окнами одной программы или разных программ.

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

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

Рис. 9.1

Рис. 9.1

GNOME (GNU Network Object Model Environment — "Среда GNU, основанная на модели сетевых объектов", но также и "Образцовая среда для сетевых объектов GNU") — один из самых амбициозных и масштабных проектов в программистском сообществе. Кроме реализации функционально полной графической среды (возможно, уместнее говорить о сенсуальных средах, учитывая то, что звук стал их полноправной частью), "Гном" претендует на то, чтобы полностью реализовать спецификации промышленной платформы сетевого взаимодействия CORBA и полностью абстрагировать слой "менеджера рабочего стола" (или "графической среды") от низлежащего слоя управления окнами ("оконного менеджера"). GNOME поддерживает ряд оконных менеджеров, среди которых: Sawfish ("штатный" оконный менеджер по умолчанию), Enlightenment, IceWM, WindowMaker, AfterStep и FVWM2, совместимые с GNOME, впрочем, в разной степени. Сегодняшняя версия "Гнома" (GNOME 2.1) — полноценная интегрированная среда, включающая реализацию повседневно необходимых функций и позволяющая использовать сторонние решения для реализации функциональности, которая в ней отсутствует. GNOME использует один из самых развитых интерфейсных пакетов GTK+, реализованный для разных платформ. Над ним надстраивается масса компонентов и библиотек, обеспечивающих сетевую функциональность, интерфейсы к различным языкам программирования, работу со звуком через механизмы ОС и пр. Сам "Гном" стремится оставаться мобильным и доступным во всех открытых системах. Он стабильно работает в Linux, BSD, AIX и Solaris; последнее обстоятельство способствовало поддержке разработки GNOME, которую оказывает Sun Microsystems через созданный в 2001 г. году Фонд GNOME, среди учредителей которого также крупнейшие поставщики свободных ОС. С пользовательской точки зрения GNOME предстает как набор базовых компонентов интерфейса и "апплетов", утилит и прикладных программ. К базовым компонентам относятся менеджер файлов и поверхности стола Nautilus, панели управления и меню GNOME Panel и центр управления (Gnome Control Center). "Наутилус". Менеджер файлов Nautilus позволяет отображать содержимое файлов и каталогов в окнах и выполнять над файлами обычные действия (удаление, переименование, копирование и перемещение и т.п.), а также осуществлять предварительный просмотр многих типов данных. "Наутилус" эффектен, но работа с ним не более эффективна, чем с прочими браузерами файлов, включаемыми обычно в графические среды (менеджер файлов CDE или Microsoft Windows Explorer). Помимо отображения содержимого каталогов в окнах, "Нау" также может отображать один из каталогов на поверхности "рабочего стола": размещенные на нем иконки как бы приклеены к монитору, и при смене текущего экрана остаются на том же месте относительно наблюдателя (так же, кстати, ведут себя и открытые окна, если их "приклеить"). Поддерживается широкий спектр операций переноса мышью (drag'n'drop), причем "перетаскиванию" подвержены не только объекты (файлы, пункты меню и т.п.), но и некоторые их свойства: так, можно "взять цвет" в окне выбора цвета и перенести его на панель, которая воспримет его. Есть даже операции, позволяющие назначить один объект свойством другого: например, если на панель "перетащить" не цвет, а файл с картинкой, последняя станет ее фоном. "Таскать" файлы между окнами "Нау", на рабочий стол и панели можно практически без ограничений. Панели и меню. Уже упомянутые панели являются, наряду с менеджером файлов, важнейшей составной частью интерфейса GNOME. Панелей может быть неограниченное количество. Панель может относиться к одному из пяти типов, но на самом деле их два: панель-меню (menu panel) и объектная панель. Первая из них содержит пункты меню и может содержать пиктограммы, а вторая — только пиктограммы. Последняя может быть краевой (edge), выравненной (aligned), скользящей (sliding) или плавающей (floating), но это скорее свойство панели (которое можно менять "на ходу"), определяющее особенности ее поведения, чем тип. Внешний вид и поведение панелей является в высшей степени конфигурируемым. Пользователь может задавать как глобальные предпочтения (анимация движения панелей, отображение панельных объектов и пр.), так и индивидуальные предпочтения для каждой из них (ее тип и положение на экране, ширина, возможность автосокрытия и принудительной минимизации, цвет и фоновое изображение и т.п.) Ну и, разумеется, пользователь может "набивать" панели теми объектами, которые ему нужны. На панелях могут присутствовать объекты пяти типов:

  • пускатель (launcher) ассоциирован с приложением или командой, которые исполняются по щелчку на его пиктограмме в панели;
  • выдвижной ящик (drawer) — это кнопка, открывающая другую панель, перпендикулярно первой — некий аналог подменю в меню, который можно "набить" всевозможными апплетами;
  • апплет (applet, "приложеньице") — интересный тип панельного объекта, демонстрирующий то, что он не обязан быть представлен статической картинкой. Это программа, места в панели которой достаточно, чтобы отображать какую-нибудь полезную (или забавную) информацию или даже принимать клавиатурный и/или координатный ввод. С GNOME поставляется масса апплетов, отображающих всякую полезную информацию (состояние ресурсов и статус сети, например) или позволяющих осуществить нетривиальные действия (например, mini commander, позволяющее набрать команду, не запуская терминала). Важными "приложеньицами" являются "путеводитель по столу" (Desktop Guide) и "список задач" (Task List), позволяющие переключаться между виртуальными экранами и активизировать окна запущенных программ, соответственно;
  • специальные объекты — это те же апплеты, но выполняющие функции, которые другими средствами "достать" почему-либо нельзя (запереть экран, выйти из GNOME или запустить программу "вручную"). В качестве "специальных объектов" исполняются и программы, которые не были написаны специально для GNOME, но могут, тем не менее, осуществлять вывод в панель — "поглощенные программы" (swallowed applications);
  • наконец, объект-меню раскрывает меню.

За работу системы меню, как и за работу панелей, отвечает компонент GNOME Panel, и это не случайно: разница между панелью и меню более декоративная, чем сущностная: любое меню можно зафиксировать на экране, и оно превратиться в подобие панели-меню (только вертикальное, а не горизонтальное, и с меньшими возможностями настройки). У "Гнома" нет единой иерархии меню: кроме главного, вызывающегося объектом-меню с гномьей лапой (оно же, когда вызывается щелчком правой кнопки на фоне или нажатием клавиши, почему-то называется глобальным (global)), пользователь может создавать "обычные" (normal) меню, связанные с объектами-меню на панелях. Меню настраиваются примерно так же, как и панели: пользователь может добавлять, менять и удалять пункты, создавать подменю и т.п. При этом создаваемые "обычные" меню изначально пусты, а главное/глобальное "набивается" при установке всем, что "Гном" найдет в системе, и пользователю остается только убрать лишнее и переставить пункты в соответствии со своими предпочтениями. Утилиты, апплеты и "капплеты". Для настройки различных аспектов функционирования системы предназначен Центр управления, представляющий собой набор "управляющих апплетов" (capplets), связанных с разными компонентами и прикладными программами. Одни из них позволяют менять параметры рабочего стола и облик приложений (включая использование "тем"), другие — настраивать мультимедиа, третьи — управлять свойствами клавиатуры и мыши, и т.д. Важным "капплетом" является менеджер т.н. "драйверов документов" (Document Handlers), устанавливающий соответствие между типом файла или протокола и программой, выполняющей различные операции с ними. Набор "капплетов" является расширяемым, их можно писать не только для программ, написанных специально для "Гнома", но и для внешних программ. Еще более открыт набор утилит, прикладных программ и апплетов, поставляемых с GNOME — вместе с программами, входящими в большинство дистрибутивов ОС, о которых "Гном" "в курсе", их число превышает сотню. Перечислить их здесь нет никакой возможности, но в их число входят интерфейсы для администрирования системы, средства звукозаписи и воспроизведения, сетевые утилиты, игры и многое другое. GNOME снабжен встроенной системой помощи; кроме того, его разработчиками совместно с Sun Microsystems подготовлено компактное (130 с.) руководство, доступное в разных форматах на сайте проекта. В его поставку входит система разработки графических приложений под GTK+, которая называется Glade и включает в себя специфические для Gnome элементы. "Гном" и большинство его компонент соответствуют соглашениям об интернационализации и, соответственно, поддерживают работу с кириллицей и локализацию и перевод интерфейса. К сожалению, локализация "Гнома" сильно отстает от разработки.

9.4 KDE (Настольная среда K)

Рис. 9.2

Рис. 9.2

Само название KDE — явная пародия на CDE — Common Desktop Environment ("Общая настольная среда") — последнюю попытку отрасли стандартизовать графическую среду на несвободной основе, предпринятую в конце девяностых годов. "K" в KDE ничего не означает. Несмотря на явно игривый тон, начинающийся с названия среды и продолжающийся в названии компонент (в KDE любят играть со словами; например, универсальный браузер, входящий в среду, называется Konqueror (от Conqueror — "завоеватель", "покоритель"), терминал — Konsole (от Console — "консоль), а система помощи — вообще Kandalf (от имени Гэндальфа, мага из фантазийных произведений Дж.Р.Р.Толкиена)), KDE — очень серьезный проект. Проект KDE запущен несколько раньше, чем GNOME, но некоторое время он был сомнительным из-за того, что основывался на тогда несвободной библиотеке Qt (разработка норвежской компании TrollTech), и часть ранее лицензированного под GPL кода была включена при отсутствие формального согласия на то авторов (их просто не могли найти). Проблему "расшила" сама компания TrollTech, выпустив вторую версию своей библиотеки под лицензией GPL, однако в течение некоторого времени оттенок лицензионной "нечистоты" разработки мешал ее включению в ведущие дистрибутивы свободных ОС, такие, как Debian GNU/Linux и RedHat Linux, что подтолкнуло разработку GNOME. Сегодня это только исторический вопрос. Если единообразие и "сплошность" среды считать достоинством, то KDE — несомненный лидер среди всех (как свободных, так и несвободных) интегрированных графических сред. Основное "видимое" средство интеграции — это универсальный браузер Konqueror. Функция Konqueror близка к той, которую приобрел Microsoft Internet Explorer в Microsoft Windows (начиная с MS Windows 98 в линейке MS-DOS и MS Windows 2000 в линейке NT) — он совмещает функции гипермедийного браузера WWW и браузера локальных ресурсов. Разработчики KDE пошли даже дальше своих коллег из Microsoft и определили ряд дополнительных протоколов, что позволило, в частности, просматривать с помощью браузера в единообразном формате все разнообразие справочной информации, представленное в сегодняшних открытых система (традиционные страницы руководства man, гипертекстовую систему Info из проекта GNU, разрозненные файлы документации в текстовом и гипертекстовом формате). В Konqueror интегрирована также возможность предварительного просмотра содержимого большого количества типов файлов. KDE включает также настраиваемую систему панелей и меню и интегрированный "центр управления", позволяющий согласованно изменять параметры среды. KDE несколько менее гибка в настройке, чем GNOME, однако на ее гибкости вполне достаточно для решения любых практических задач (в том числе, имитации вида и поведения других сред). KDE работает только с собственным оконным менеджером KWin. В поставку KDE входит множество "аксессуаров" и прикладных программ, к тому же "рядом" с проектом выросла целая "грибница" сопутствующих, ориентированных на те или иные предметные приложения, из которых самым развитым является KOffice.

9.5 "Офисный" прикладной пакет KOffice

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

  • word-процессор (редактор размеченного текста) KWord. Несмотря на позиционирование этой программы как word-процессора, она более напоминает простую настольную издательскую (DTP) систему благодаря концепции "фреймов" (областей печати, обладающих собственной геометрией и способных содержать текст или объекты, созданные в других программах, входящих в этот пакет (рисунки, формулы и т.п.);
  • программу работы с электронными таблицами Kspread;
  • программу подготовки мультимедийных презентаций Kpresenter;
  • программу работы с блок-схемами (flowcharts) Kivio;
  • векторный графический редактор Karbon14;
  • простой растровый графический редактор Krita;
  • программу генерации отчетов из баз данных Kugar;
  • интегрированную программу подготовки графиков и диаграмм Kchart;
  • редактор формул Kformula;
  • пакет управления проектами KPlato (разработка этого проекта только началась).

Собственные форматы KOffice ориентированы, как и собственные форматы большинства современных "офисных" пакетов, на XML, хотя не все из них являются чисто XML-приложениями. Заявлена поддержка достаточно большого количества "чужих" и унаследованных форматов, хотя качество поддержки на сегодня весьма среднее; в особенности последнее относится к поддержке кириллических текстов. KDE и KOffice достаточно оперативно локализуются (см. www.kde.ru), однако, к сожалению, в переводах на сегодня еще больше, чем в оригиналах, "персонально-компьютерного" сленга.

Ресурсы

GNOME и KDE входят в поставку практически всех (свободных и несвободных) открытых систем для всех аппаратных платформ. Об их стабильных переносах под альтернативные ОС нам ничего не известно. Дополнительную информацию о них можно найти на сайтах http://www.gnome.org и http://www.kde.org, соответственно. Русская информация о KDE периодически обновляется на http://www.kde.ru (http://www.gnome.ru не обновляется, текущие локализационные инициативы "сбрасываются" в основное дерево разработки). Базовую информацию об обеих интегрированных средах можно найти практически в любом "неканоническом" учебнике или руководстве по Linux (например, в [20]) или в документации по любому дистрибутиву, однако вряд ли вы найдете там что-то такое, чего не было бы во встроенных электронных руководствах. Существует обширная англоязычная (для KDE — еще и немецкоязычная) литература для разработчиков в обеих средах, из которой на русский пока ничего не переведено.

Лекция 10. Свободные коммуникации

Типичные локально-сетевые приложения — это разделение файловых структур, услуги печати, централизованная аутентификация пользователей и т.п., предоставляемые в масштабе от одного офиса (комнаты) до целой группы зданий. Типичные интернет-приложения{Здесь и далее "интернет" с маленькой буквы обозначает сумму сетевых технологий, основанных на протоколах TCP/IP, а "Интернет" с заглавной — всемирное сообщество интернет-сетей. Возможно разворачивание интернет-сетей, не входящих в Интернет. Слово "интернет" — сокращение от internetworking, что буквально означает всего лишь "межсетевое взаимодействие".} — это электронная почта, WWW, обмен "быстрыми сообщениями" ("интернет-пейджинг") и пр. системы, разворачиваемые обычно в глобальном масштабе. Основной тенденцией последнего десятилетия стало постепенное вытеснение специализированных локально-сетевых низкоуровневых протоколов и замена их интернет-протоколами (TCP/IP). Даже протоколы, специально разработанные для персонально-компьютерных систем и используемые в унаследованных сетях, такие, как AppleShare или NetBIEU, могут сегодня развертываться поверх TCP/IP. В отличие от сетей Интернет, образующих сообщество с единой нумерацией и единым именованием компьютеров, локальные TCP/IP-сети, отделенные от Интернет, называют интранет. Поддержка TCP/IP на сетевом и транспортном уровнях впервые реализована в ОС BSD и реализована в современных ОС на уровне ядра{Все существующие реализации восходят к Berkley TCP/IP Stack в качестве живого прототипа, хотя в некоторых ОС сам текст реализации уже переписан по несколько раз.}. На уровне ядра обычно — из соображений эффективности — реализуются и такие, например, сервисы, как экранирование (firewalling) трафика. Протоколы более высокого уровня реализуются в виде системных или прикладных сервисов.

10.1 Локальные сети

NFS. В открытых ОС локально-сетевая функциональность традиционно реализуется в рамках концепции Сетевой файловой системы NFS. NFS позволяет предоставлять каталоги для удаленного монтирования и монтировать (т.е. делать частью локальной файловой системы) их удаленно. Поскольку с точки зрения стандартной ОС любое устройство представлено файлом, этого достаточно не только для совместной работы с каталогами, но и предоставления доступа к принтерам, ленточным накопителям и прочему оборудованию{Реально используются несколько более сложные приемы, при которых удаленный доступ предоставляется не к самому устройству, а к очереди заданий для него.}. БД и доступ к ним. Так же традиционно более сложная семантика сетевых взаимодействий (для которых файловое представление данных и файловые операции влекут слишком большие издержки), внедрялась с помощью баз данных совместного доступа и специальных протоколов доступа к ним{Наряду со стандартным SQL.}, таких, как DAP (X.500) или его упрощенная и более популярная версия LDAP. LDAP входит в поставку практически всех дистрибутивов свободных ОС и широко используется в современных системах, но пока в основном для решения административных задач. SMB и его расширения. В персонально-компьютерных системах большее развитие получил альтернативный подход, опирающийся на концепцию обмена блочными сообщениями (SMB), разрабатывавшийся первоначально корпорацией IBM, на основе которого компаниями Novell, Microsoft и другими были разработаны семейства локально-сетевых протоколов высокого уровня, к сожалению, не стандартизированные и переусложненные. Более сложная семантика обмена блочными сообщениями влечет за собой и более сложный аудит безопасности построенных на его основе систем, поэтому применимость SMB и его расширения в серьезных приложениях ограничена. Тем не менее, существует современная авторитетная и очень эффективная свободная реализация SMB и (частично) его позднейших расширений, называющаяся SAMBA (www.samba.org). SAMBA входит в поставку практически любого дистрибутива свободных ОС. SAMBA дает возможность предоставлять в совместный доступ каталоги, а также принтеры и другие устройства и получать к ним доступ{А также выполнять некоторые другие локально-сетевые процедуры, такие как объединение отдельных систем в "домены" и управление ими.}, что позволяет разворачивать сложные гетерогенные сети, включающие, помимо стандартных ОС, также унаследованные системы на основе Microsoft Windows и Novell OS. SAMBA предполагает использование специфических локально-сетевых протоколов, таких как IPX или NetBIOS, лишь поверх TCP/IP, что, хотя и влечет за собой некоторые издержки{Практически незаметные в современных 100-мегабитных и гигабитных Ethernet-сетях.}, но позволяет заметно повысить надежность системы за счет применения собственных средств обеспечения безопасности TCP/IP (экранирование, а при необходимости и шифрование и аутентификацию трафика). Пакет SAMBA доступен как для открытых ОС, так и для ряда альтернативных архитектур (включая Microsoft Windows NT{Как ни странно, SAMBA не менее интенсивно, чем в открытых системах, используется и на плаформе NT, обладающей встроенной реализацией SMB в версии Microsoft (SBM/CIF). Это объясняется соображениями безопасности (доступностью исходного кода для аудита) и лицензионными соображениями (Microsoft торгует отдельными клиентскими "лицензиями" для удаленного доступа к серверам).}). Более подробно функциональность SAMBA в этих "лекциях" рассматриваться не будет.

10.2 Интернет

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

10.3 Пакет Mozilla

Среди массы свободных клиентских программ, связанных с сетевой функциональностью, за ограниченностью печатного объема остановимся на проекте Mozilla. Mozilla представляет собой свободный пользовательский прикладной пакет, реализующий интерфейсы просмотра WWW (браузер), электронной почты и новостей USENET, многопользовательских диалогов в реальном времени ("чатов") IRC и редактирования страниц WWW (компоновщик). Входящие в пакет программы, таким образом, открывают доступ ко всем наиболее популярным приложениям Интернет (кроме, на сегодня, "быстрых сообщений"). Существенной сильной стороной Mozilla является практически неизменная функциональность и эргономика на широком спектре платформ, включая как стандартные (MacOS X, GNU/Linux, Solaris, Irix, HPUX, BSD/OS и пр.), так и альтернативные (MacOS 9, Microsoft Windows, BeOS, OS/2) операционные системы на большинстве аппаратных платформ. Слегка модифицированная версия Mozilla 1.x также распространяется организатором разработки — компанией AOL Time Warner{Компания AOL приобрела три года назад компанию Netscape. проект Mozilla прототипировался на ранних разработках этой компании — Netscape Navigator и Netscape Communicator, являвшихся, в свою очередь, развитием первого графического WWW-браузера NSCA Mozaic.} — под названием Netscape Navigator 6.x и 7.x. Русская локализация Mozilla выполнена Валентиной Ванеевой, Вадимом Виниченко и Сергеем Дегтярёвым.

10.4 Базовая функциональность Mozilla

(Главка написана Андреем Добровольским <dobr@iop.kiev.ua>. Текст ранее публиковался в [19]).

Браузер. Для просмотра страниц WWW и "хождения" по FTP-серверам предназначен компонент Navigator. На панели компонент Mozilla он изображается морским штурвалом (см. рис. 1).

Рис. 10.1

Рис. 10.1

Все возможности программы доступны из меню, наиболее часто употребляемым соответствуют также "горячие клавиши" и кнопки панели навигации. Под меню — еще одна панель, которую можно настроить по своему желанию (чаще всего, на нее выносятся ссылки на десяток самых посещаемых страниц), еще ниже — окно для отображения гипертекстовой информации с посещаемых страниц. Замыкает окно строка состояния с панелью компонент слева и служебными пиктограммами справа. С каким бы компонентом вы не работали в даный момент, всегда можно запустить любой другой кнопкой с соответствующим значком из панели компонент или пункт меню "Окно". Из пункта меню "Создать..." вы можете, кроме того, открыть еще одно окно просмотра или вкладку (вкладка — это окно в окне{Идея использовать вкладки в основном окне браузера впервые была реализована в браузе Opera. Будьте осторожны: начав их использовать, вы вряд ли затем удовлетворитесь браузером, не поддерживающим такой возможности.}) уже открытого окна, на разных вкладках вы можете просматривать разные страницы с одного сайта или разные сайты. Это позволяет не захламлять экран и панель задач окнами одного типа и сразу видеть, где закачка страницы уже завершилась, а где еще нет. Из пункта меню "Файл" можно также открыть любой локальный html-файл или каталог (или файл другого известного Навигатору формата, например, графический или текстовый), одной командой переслать по почте адрес понравившейся страницы или даже всю страницу, сохранить страницу на жестком диске или напечатать на принтере. Программа ведет учет страниц, которые вы посетили ("Перейти... Журнал посещений"). Это удобно для быстрого возврата на уже посещенную страницу. Сколько просмотренных адресов (и на какое время) программа будет их сохранять, можна указать в общем окне настроек. Как и в других браузерах, вы можете вести структурированную базу закладок на понравившиеся сайты и редактировать параметры каждой закладки, в частности, менять названия и делать пометки на память: а чем же зацепила вас именно эта страница. Навигатор может передать запрос на поиск информации на указанные поисковые машины, дает возможности управления заполнением форм и блокирования изображений (это удобно для отсечения рекламы из многочисленных баннерных сетей) и cookies конкретных сайтов, запрета появления выскакивающих окон. Наверное, самая интересная особенностью программы — "боковая панель" (Sidebar). Размещенная в левой части всех окон, она значительно облегчает работу. На нее можно вывести множество полезной информации. Например, вы можете настроить ее так, чтоб сразу при запуске программы, видеть свежие новости новости с любимых новостных сайтов, все свои закладки в виде дерева, иметь доступ к своим любимым поисковикам или еще что-нибудь, что сами придумаете{См. www.sidebar.org и www.sidebar.ru.}. Почта. Электронная почта соревнуется с WWW за почетное звание главного коммуникационного приложения. Существует масса свободных программ для работы с почтой, и среди них — модуль Мозиллы "Почта и новости". Открыть его можно, нажав кнопочку с изображением конверта, выбрав соответствующий пункт меню "Окна". Этот модуль позволяет обмениваться письмами с друзьями, писать и получать почту из почтовых рассылок и групп новостей. Всю свою почту вы можно разложить по папочкам и настроить систему фильтров, чтобы новая почта попадала, куда нужно, а надоедливый спам — в мусор. Вы можете отвечать на письма, переадресовывать полученное кому-то еще, отсылать и получать нужные файлы. Когда нужно быть уверенным в личности отправителя и неприкосновенности письма, воспользуйтесь интеграцией с GPG, свободной реализацией популярного формата OpenPGP, обеспечивающих электронную подпись и шифрование сообщений. В почтовом ящике возможен поиск по теме, отправителю, словам в самом письме, дате, приоритету, адресатам, датам или комбинации этих параметров — этого хватит, чтоб не потеряться в своем почтовом ящике. Можно иметь несколько почтовых ящиков на разных серверах и работать с ними в одном окне. Главное окно программы поделено на четыре части. Слева вверху — список почтовых ящиков, под ним боковая панель. Справа вверху — список писем в выбранной папке, под ним — текст выбранного сообщения. Многие из них можно временно спрятать, чтоб освободить место для других окошек. И здесь доступна боковая панель со всеми ее возможностями. Выбрав в правой части название почтового ящика, вы увидите список действий, которые можете выполнить в нем и над ним. Например, настроить сам почтовый ящик, если есть необходимость, и его параметры роботы с почтовым сервером, параметры для исходящих и входящих сообщений. Возможности гибкой настройки и мощная система фильтрации сообщений, вместе с возможностями проверки правописания для многих языков (включая английский, русский, украинский) сделают вашу переписку удобной и приятной. "Компоновка" собственных страниц. Немного побродив по Сети, каждый испытывает желание сообщить о чем-то своем всему мировому сообществу. Препятствием к этому оказывается необходимость изучать стандарт HTML. Не очень-то просто найти для этого время, особенно если речь идет о создании странички на пару абзацев о домашнем любимце. В этой ситуации вам на помощь прийдет "Компоновщик", спрятавшийся за кнопкой с листком и пером для письма. Вызвав его, вы сможете быстро и без погружения в изучение стандарта создать простую страницу в режиме визуального редактирования. Как в word-процессоре, просто пишете текст, вставляете таблицы и рисунки и сразу можете видеть, что у вас получается. Более того, заглянув на другие вкладки окна Компоновщика, можно еще и подучить HTML. В этом помогут вкладки "Все теги" и "<HTML> Код". Проверить, как ваша работа будет смотреться в окне просмотра Navigator, можно на последней вкладке. Главное преимущество этого инструмента перед многими похожими состоит в создании правильного HTML кода без лишних и нестандартных тегов, поэтому рекомендую его как первый инструмент начинающего (разумеется, для создания серьезных проектов изучение стандартов W3C обязательно). В окне программы сперва линейка меню, под ней инструментальные панели, далее главное рабочее окно с вкладками и панель состояния под ним. Для подробного описания всех возможностей модуля потребуется не одна страница. Просто запустите его и попробуйте что-нибудь создать. Большинство пиктограмм и команд никакого объяснения не требуют. Адресная книга. По мере того, как увеличивается круг ваших знакомых, помнить все необходимые адреса становится все тяжелее, но на помощь приходит адресная книга программы. Каждый раз, когда вы пишете письмо новому адресату или получаете письмо от нового отправителя, этот компонент программы запоминает его адрес. Дальше, когда вы начинаете заполнять поле "кому" нового письма, он пытается завершить набор за вас. Если адрес угадан правильно, можно просто переходить к заполнению остальных полей. Когда программа ошиблась, можно выбрать подходящий адрес из выпадающего списка или завершить набор самостоятельно. Внешний вид окна Адресной книги достаточно типичен: снова, сперва меню, затем панель инструментов и основное окно с панелью состояния. Основное окно поделено на четыре части, некоторые из которых можно прятать. Слева — названия коллекций адресов вверху и боковая панель под ними. Справа — список карточек выбранной коллекции вместе с панелью поиска по ним вверху, и окно для отображения информации с выбранной карточки внизу. Записи для каждой карточки редактируются по необходимости. Настройки. Мозилла — пакет не только мощный, но и очень гибкий в настройке. Все доступные параметры настроек собраны в одном окне — дерево доступных настроек поделено на категории в соответствии с имеющимися программами плюс несколько общих. В общей категории "Внешний вид" настраивается использование шрифтов для каждой кодовой страницы, отображаемые при запуске Мозиллы окна, использование цветов, язык интерфейса. Вторая общая категория — "Дополнительно" — позволяет отрегулировать использование cookies, Java, размер и время сохранения буфера на диске для быстрого возврата к уже просмотренным страницам, использование прокси-серверов и еще некоторые полезные параметры. Название группы "Приватность и безопасность" говорит само за себя. Количество доступных в ней настроек, говорит о том, насколько ответственно разработчики отнеслись к этому вопросу. Предлагаю вам разобраться с ней самостоятельно. Регулировать внешний вид окна программы и степень "свежести" страницы в окне просмотра, вам позволят пункты меню "Вид". Отсюда можно запретить или разрешить показ каждого из компонентов окна программы, подобрать размер шрифта на странице, изменить, если нужно, кодовую страницу для показа текста, увидеть исходный код страницы и получить информацию про страницу на которой сейчас находитесь.

10.5 Mozilla: как это сделано

Возможно, более интересным будет общий взгляд на "начинку" Mozilla, поскольку эта тема остается пока практически нераскрытой в публикациях на русском. А именно интересными внутренними архитектурными решениями и возможностями, которые они открывают для программистов, обусловлена перспективность и востребованность этого проекта. "Движок" Gecko. Собственно интерпретацию ("рендеринг") гипертекста и гипермедиа в браузере и компоновщике осуществляет "движок" под названием Gecko ("геккон", "ящерка"). Сам по себе "движок" компактен и быстр. Он используется также рядом альтернативных браузеров, таких, как Galeon, Aphrodite и Phoenix; первый из них, достачно развитый и "шустрый", может рекомендоваться пользователям старых или маломощных (например, карманных) машин. Язык XUL. Видимо, самой интересной особенностью Mozilla является реализация интерфейса пользователя на языке XUL, представляющем собой XML-приложение, т.е. набор определений вида и поведения визуальных объектов, свойственных современным графическим интерфейсам пользователя, на расширяемом языке разметки XML (об XML и его интегрирующей роли в современных приложениях компьютера подробнее говорилось в "лекции" 1). В большей своей части программы Mozilla "написаны для XUL" и интерпретируются "на лету". Обратной и неприятной для пользователя стороной этого остается значительная ресурсоемкость Mozilla и размер пакета. Базовая установка занимает порядка 30 Мб и комфортная работа в большинстве сред начинается от 128 Мб ОЗУ и 500 МГц процессора. "Светлой" стороной XUL'ности Mozilla является его чрезвычайная гибкость, что, видимо, позволит уже в ближайшие годы "малой кровью" существенно расширить набор входящих в пакет программ и практически полностью покрыть ими клиентские приложения Интернет.

Рис. 10.2

Рис. 10.2

На рис. 2. видно, что по специальному протоколу chrome можно просто "открыть" в браузере еще один браузер (или любой другой компонент пакета), причем это не просто изображение его интерфейса, а полноценная работающая программа. Разумеется, суть использования XUL не в этом, а в том, что на этом относительно простом языке разметки могут быть легко реализованы ... На сайтах www.mozdev.org и www.xulplanet.com можно найти десятки программ на XUL, а по http://books.mozdev.org/chapters/ можно найти текст книги "Создание прикладных программ в Mozilla" (к сожалению, пока только на английском). Например, так выглядит традиционная первая программа "Привет, мир!" на XUL (ее текст заимствован из упомянутой книги):

<?xml version="1.0"?>
<!-- Sample XUL file -->
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<box align="center">
 <button label="hello xFly" onclick="alert('Hello World');" />
</box>
</window>

Знакомым с JavaScript-сценариями в HTML или XML этот пример должен быть кристально понятным. Однако внимание следует обратить на то, что элементы разметки, определяемые XUL, свойственны графическим интерфейсам общего назначения ("окно" (window), "контейнер" (box), "кнопка" (button) и т.п.), и весь XUL-файл определяет интерфейс, а не страницу{строго говоря, Mozilla поддерживает и смешанные контексты, например, XUL-компоненты в HTML или наоборот, но XUL-интерпретатор как таковой не обязан этого делать, и XUL-интерпретатором, соответственно, вовсе не обязательно должен быть браузер. XUL может не только интерпретироваться, но и транслироваться, хотя трансляторы нам на сегодня не известны.}. Перспективы, открываемые универсальным языком описания графического интерфейса перед отраслью быстрой прикладной разработки (RAD) и практическим программированием вообще — очевидны. Но здесь уместнее будет указать на методические перспективы: включение в один и тот же вводный курс программирования на XUL наряду с изучением языков разметки контента (например, HTML, особенно в его нынешней, XML-версии) позволит осуществить значительную понятийную экономию. Возможно, что наш кругозор ограничен, но нам не известны другие полноценные языки программирования интерфейса, кроме XUL, являющиеся корректными и исполнимыми XML-приложениями.

10.6 Ресурсы

Пакет Mozilla в исходниках и сборках для большинства ОС доступен на главном сайте проекта, локализованные версии — на русском сайте. Mozilla входит в большинство поставок открытых ОС (как свободных, так и несвободных).

Лекция 11. Свободные операционные системы I

11.1 Назначение операционных систем

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

  • вычислительная система используется для различных задач, причем программы, исполняющие эти задачи, нуждаются в обмене данными. Из этого следует необходимость в универсальном механизме хранения данных; в подавляющем большинстве случаев ОС отвечает на нее реализацией файловой системы. ). Современные ОС, кроме того, предоставляют возможность непосредственно "связать" вывод одной программы со вводом другой, минуя относительно медленные дисковые операции;
  • различные программы нуждаются в выполнении одних и тех же рутинных действий. Например, простой ввод символа с клавиатуры и отображение его на экране требуют исполнения сотен машинных команд, а дисковая операция — тысяч. Чтобы не программировать их каждый раз заново, ОС предоставляют системные библиотеки часто используемых подпрограмм;
  • между программами и пользователями системы необходимо распределять полномочия. ...
  • необходима возможность имитации "одновременного" исполнения нескольких программ, осуществляемой с помощью приема, известного как "разделение времени". При этом специальный компонент, называемый планировщиком, "нарезает" процессорное время на короткие отрезки и предоставляет их поочередно различным исполняющимся программам (процессам);
  • наконец, оператор должен иметь возможность как или иначе управлять процессами. Для этого служат операционные среды, одна из которых — оболочка и набор стандартных утилит (см. "лекцию" 6) — является частью ОС (прочие, такие, как графическая операционная среда (см. "лекции" 7-9), образуют независимые от ОС прикладные платформы).

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

Рис. 11

Рис. 11

Многозадачность и распределение полномочий требуют определенной иерархии привилегий компонентов самой ОС. В составе ОС различают:

  • ядро, содержащее планировщик, драйверы устройств, непосредственно управляющие оборудованием, сетевую подсистему, файловую систему;
  • системные библиотеки и
  • оболочку с утилитами.

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

11.2 Краткая история открытых ОС

К концу шестидесятых годов XX в. операционным системам как класс прораммного обеспечения шел уже второй десяток. Были разработаны больше сотни различных ОС для разных компьютеров, из них полтора десятка находилась в "боевой" эксплуатации. На рубеже шестидесятых и семидесятых в одном из исследовательских подразделений американской телекоммуникационной монополии AT&T была выполнена разработка, ставшая важнейшей вехой в истории ОС: система Unix. Задуманная и реализованная Кеном Томсоном при участии нескольких коллег, она вобрала в себя многие черты более ранних ОС, но обладала целым рядом свойств, отличающих ее от большинства предшественников:

  • компонентная архитектура: принцип "одна программа — одна функция" плюс мощные средства связывания различных программ для решения возникающих задач;
  • минимизация ядра и количества системных вызовов;
  • независимость от аппаратной архитектуры и реализация на языке высокого уровня (язык программирования С стал "побочным продуктом" разработки Unix).

Unix, благодаря своему удобству прежде всего в качестве инструментальной среды (среды разработки), была тепло принята сначала в университетах, а затем и в отрасли, получившей прототип единой ОС, которая могла использоваться на самых разных вычислительных системах и, более того, быстро и с минимальными усилиями перенесена на вновь разработанную аппаратную архитектуру. Одним из центров развития Unix стал Университет Калифорнии в Беркли, там было создано множество средств, дополняющих систему и развивающих ее концепцию. В конце концов, в Беркли создали свой вариант ОС той же архитектуры, получивший название BSD. Задачу разработать независимую (от авторских прав AT&T) реализацию той же архитектуры поставил и Ричард Столлмен, основатель проекта GNU (характерно, что аббревиатура расшифровывается как GNU's Not Unix, т.е. "GNU — это не Unix"). В ходе разворачивания проекта было создано множество утилит и инструментальных средств, которые сегодня активно используются в BSD (входя в систему) и Unix (как правило, распространяемые в качестве дополнений), а также являющиеся основой операционных систем на основе ядра Linux, разработка которого была запущена и возглавляется с начала девяностых Линусом Торвальдсом. Таким образом, на сегодня существует три семейства открытых операционных систем, концептуально происходящих от Unix, но реализованных независимо:

  • Unix (в разнообразных фирменных вариантах, таких как AIX (компания IBM), Solaris (компания Sun Microsystems) и т.п.),
  • BSD (в него входят FreeBSD, OpenBSD, NetBSD, а также Darwin, являющаяся основой MacOS X),
  • GNU/Linux (в различных вариантах, или дистрибутивах, таких как Debian GNU/Linux, RedHat Linux, Linux-Mandrake и пр.)

Все варианты Unix, содержащие код, изначально написанный в AT&T, несвободны{В прошлом году Bell Labs, подразделение AT&T, занимающееся исследованиями и разработками, с какой-то целью релицензировало свободно одну из старых версию Unix, System 7, имеющую сегодня лишь историческое значение.}, а BSD и GNU/Linux разрабатываются под свободными лицензиями. Благодаря наличествующей конкурентности реализаций, архитектура открытых ОС стала вначале фактическим отраслевым стандартом, а затем обрела статус и стандарта юридического (свежая версия принята Международной организацией стандартизации (ISO) в прошлом году). Стандартизация ОС означает возможность безболезненной замены самой ОС или оборудования при развитии вычислительной системы или сети и дешевого переноса прикладного программного обеспечения (строгое следование стандарту предполагает полную совместимость программ на уровне исходного текста; из-за профилирования стандарта и его развития некоторые изменения иногда все же необходимы, но перенос программы между открытыми системами на порядки дешевле, чем между альтернативными). Самым значимым эффектом существования этого стандарта стало эффективное разворачивание сетей Интернет в девяностых годах. Вытеснение открытыми ОС альтернативных архитектур — медленный и сложный процесс. Хотя открытые системы сегодня существуют для вычислительных систем практически всех типов — от встроенных и карманных компьютеров до суперсерверов и мэйнфреймов — доля их в разных сегментах рынка неодинакова. Открытые ОС уверенно доминируют в серверном сегменте (особенно, в сетевых приложениях), но пока менее, чем альтернативные, распространены на ПК и рабочих станциях нижнего уровня.

11.3 Роль свободных операционных систем

В последние 5-7 лет рост числа установок открытых ОС в основном происходит за счет распространения их свободных вариантов — BSD и GNU/Linux — причем темп задает сейчас GNU/Linux. Спецификой рынка свободных ОС, особенно, основанных на ядре Linux, является их существование в виде "популяции" параллельно развивающихся вариантов, называемых "дистрибутивами" (от англ. distributive kit — "распространяемый комплект"). Обычно дистрибутив включает в себя, помимо системных программ, большое количество прикладных программ и пакетов. С разнообразием дистрибутивов свободных ОС и критериями выбора дистрибутива мы будем иметь дело в следующей "лекции".

11.4 Практическая интеграция: общие вопросы

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

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

В качестве существенной проблемы, сдерживающей стандартизацию во многих категориях систем, часто называют сложности с поддержкой многих устройств "потребительского" класса, ориентированных на архитектуры IA-32 (IBM PC-совместимые) и PowerPC ("Макинтоши"). Поставщики таких устройств нередко утаивают важные технические параметры и другую информацию, необходимую для разработки драйверов для своих видеокарт, модемов и пр. Мы склонны считать это скорее проблемой в политике закупок, чем проблемой открытых ОС. Помимо всего прочего, владельцы таких изделий сплошь и рядом сталкиваются со сложностями и при смене версий ОС, поддерживаемых их поставщиками (производитель может прекратить свое существование или поддержку конкретного устройства или поссориться с разработчиком самой такой ОС). При приобретении оборудования, которое будет эксплуатироваться длительное время, всегда следует обращать внимание на доступность технической документации{Следует также отметить, что зачастую недоступность технической документации скрывает различного рода подлоги и дезинформацию потребителя. Например для дешевого сканера с пластиковой механикой и слабой оптикой могут заявляться недостижимые в этом классе разрешение и цветопередача; при этом производитель "забудет" указать, что они относятся не к работе самого устройства, а к результату программной интерполяции, выполняемой "закрытым" драйвером устройства. То же относится и к заявляемой поддержке неправдоподобного количества протоколов дешевыми модемами и т.п.}, а не только "пользовательских инструкций". Поддержка различных топологий важна, поскольку позволяет найти применение, в том числе, и "устаревающему" (недостаточному по своим характеристикам для непосредственного исполнения потребных программ) оборудованию. Старые IBM PC-совместимые компьютеры или "Макинтоши" ранних моделей (в том числе, на основе процессоров от Motorola) могут включаться в сеть в качестве X-терминалов, и даже уже не выпускаемые алфавитно-цифровые терминалы можно присоединить к дешевому мультиплексору.

11.5 Практическая интеграция: топологии

Вообще говоря, топологии вычислительных систем (например, учебных классов) можно разделить на следующие категории. 1. Совокупность автономных рабочих станций (standalone WS; персональных компьютеров). Каждая станция содержит копию ОС и необходимых прикладных пакетов, пользовательские файлы хранятся так же на локальном диске. Эта топология исключает затраты на разворачивание и поддержание локальной сети, однако без всякого преувеличения ее можно назвать "администраторским адом": даже такая простая операция как обновление какого-либо программного пакета, требует "врачебного обхода" всех машин, которых может быть и десяток, и сотня. Кроме того, на пользователей ложится забота о воспроизведении своих данных в следующем сеансе (например, сохранением их на съемный носитель или жестким закреплением мест в классе за пользователями), что отнимает массу времени и приводит к неразберихе. Сильной ее стороной является высокая "живучесть": выход из строя любого устройства означает в худшем случае утрату работоспособности одного рабочего места. 2. Система рабочих станций без данных (dataless WS). Рабочая станция без данных также содержит локальную копию ОС и прикладных пакетов, однако рабочие каталоги пользователей храняться на файл-сервере локальной сети, объединяющей станцию. Та же сеть может использоваться и для централизованного администрирования систем, и встроенные административные средства открытых систем делают выполнение типовых процедур достаточно эффективным. Однако возрастают издержки за счет расходов на сеть и рисков выхода из строя сервера, что повлечет за собой неработоспособность целого класса или нескольких классов. 3. Система бездисковых (diskless) рабочих станций. Бездисковые рабочие станции подобны рабочим станциям без данных с тем дополнением, что не только данные, но и ОС и прикладные программы хранятся на файл-сервере. Сеть бездисковых станций предъявляет более высокие требования к производительности сервера и сети, чем сеть станций без данных, однако сами станции несколько дешевле, и администрировать такую систему еще проще. 4. Система терминалов ("тонких клиентов") и прикладного сервера. В отличие от сети рабочих станций ("толстых клиентов"), концепция "тонких клиентов" предполагает, что на рабочем месте исполняются только терминальные функции, а сами программы (и системные, и прикладные) запускаются на выделенном сервере. Эта топология предъявляет самые высокие требования к производительности и надежности сервера и сети, зато сами терминалы могут быть очень дешевыми и при этом надежными (нагрузка на процессор в терминале невысока, он может работать без принудительного охлаждения, диска в терминале нет в принципе, таким образом, X-терминал может быть собран вообще без движущихся частей). (Интересной "вариацией на тему" является разработка Московского государственного индустриального университета "Горыныч", представляющая собой двух- или трехтерминальный комплекс, собранный на основе одного IBM PC-совместимого системного блока и работающий под управлением ОС на основе Linux (www.ctc.msiu.ru). Отличие от классической терминально-серверной архитектуры заключается в том, что дополнительные "терминалы" (видеоадаптеры и USB-клавиатуры и мыши) включаются не в локальную сеть, а в шину отдельного компьютера.). 5. Смешанные топологии. В одной и той же сети могут сосуществовать терминалы с рабочими станциями. Кроме того, машины с маргинальной производительностью могут использоваться в качестве рабочих станций при запуске "легких" программ и как терминалы ---- при исполнении "тяжелых" (ресурсоемких). Существуют методики выбора оптимальной топологии исходя из профиля рабочих задач, конъюнктуры рынка и параметров уже эксплуатируемого оборудования. Скорее всего, в отличие от коммерческой среды, в реальных сегодняшних школьных условиях, включающих хроническое недофинансирование и спорадические, зависящие больше от вышестоящих органов, чем от самих школ, закупки и поставки оборудования, они редкоприменимы. Однако сама гибкость топологии позволяет эффективным образом "лопать, что дают", используя и вновь приобретаемое, и уже имеющее, и устаревающее оборудование.

11.6 Практическая интеграция: подбор оборудования

Все элементы перечисленных топологий, включая терминалы, рабочие станции и серверы, могут реализоваться на основе самого массового IBM PC-совместимого оборудования. Кроме того, можно задействовать менее распространенные PowerPC и UltraSPARC-машины, а также старые "Макинтоши" на основе Motorola 68K (в качестве терминалов). Что-то более экзотическое в нашу школу попадет вряд ли. Стартовая мощность X-терминала — Intel 486DX-66 или эквивалентный по производительности процессор (хотя теория показывает возможность запуска X на процессорах i486SX и i386, нам не доводилось видеть, чтобы это приводило к удовлетворительным результатам) с 16 МБ памяти. Рекомендуемый начальный уровень рабочих станций — PII600 или Celeron 800 со 128 МБ ОЗУ (многие программы могут нормально эксплуатироваться при гораздо меньшей производительности; некоторые прикидки приводились в "лекциях", касавшихся графических рабочих сред). Для нормальной работы в бездисковой топологии сеть желательна (а при терминальной — необходима) как минимум 100-мегабитная. Производительность серверов необходимо расчитывать; на сайтах производителей можно найти методики оценки. Как уже отмечалось, нужно по возможности следить за доступностью технической документации на комплектующие (или, что то же самое, за их присутствием в списках аппаратной совместимости ведущих поставщиков Linux- и BSD-систем). Рекомендуемые параметры мониторов определяются Гигиеническими требованиями, принимаемыми Министерством образования; практика показывает, что их лучше соблюдать. Еще один совет, который можно найти в рекомендациях по интеграции, устарел: одно время были популярны упрощенные "мыши" без средней кнопки, работать с которыми в современных графических средах не слишком удобно, однако сегодня большинство "мышей" снабжены колесом прокрутки, также действующим как средняя кнопка.

11.7 Практическая интеграция: администрирование

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

Лекция 12. Свободные операционные системы II

12.1 Linux и BSD

Существуют две распространенных мифа относительно дистрибутивов, основанных на ядре Linux, с одной стороны, и восходящих к BSD — с другой.

Первый из них заключается в том, что "Linux — для клиентов, BSD — для серверов". Это неправда не только в части Linux-систем, "прекрасно чувствующих себя" на серверах, но и в отношении BSD, совершенно нормально приспособленной для "настольного" применения (по крайней мере, в ипостаси FreeBSD).

Второй сводится к тому, что "Linux под GPL, BSD под BSD-лицензией". На самом деле, как BSD-, так и Linux-дистрибутивы включают в себя множество пакетов под различными свободными лицензиями. При этом в прикладной части состав пакетов практически одинаков, да и в системной и инструментальной пересекается более чем наполовину.

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

Реальное основное различие (помимо технических тонкостей) заключается в том, что BSD-сообщества более склонны к централизации, а Linux — к диверсификации. Свободные системы BSD на сегодня существуют в четырех вариантах: FreeBSD, NetBSD, OpenBSD и Darwin [1]. Число известных дистрибутивов Linux превышает сотню [2].

Большая часть нижеприведенной информации для перспективных пользователей *BSD не нужна.

12.2 Практическая интеграция: дистрибутивы

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

В программном обеспечении "разработчик дистрибутива" — важное активное звено в процессах разработки, использования и применения программ. Его роль не менее важна, чем роль разработчиков отдельных программ. Сила свободного ПО не только в том, что любая программа может свободно использоваться как таковая (включая ее модификацию и распространение){Система на основе Linux может быть собрана полностью "вручную", каковая процедура [3] весьма рекомендуется в курсе подготовки продвинутых администраторов и системных программистов, но совершенно излишня для всех остальных.}, но и в том, что идеология "интеллектуальной собственности" исключена как помеха на пути объединения программ в системы.

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

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

Рис. 12.1 Рис. 12.3

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

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

Рис. 12.4

Рис. 12.4

Поставка очередного выпуска дистрибутива (на дисках или через Сеть) — лишь один шаг в этой коммуникации{Следует также понимать, что торговля коробками, как правило, не является основным бизнесом компании или команды, зарабатывающей чаще всего заказной разработкой и/или продажей услуг. Продажа коробок — низкорентабельные издательские проекты, в лучшем случае окупающие управление самим изданием.}. Выбор дистрибутива со стороны конечного пользователя — больше, чем просто выбор товара; по сути дела это выбор "узла присоединения к инфраструктуре". Не все аспекты функционирования ОС, а тем более, прикладных платформ и пакетов, стандартизованы, поэтому часть знаний и навыков администратора специфичны для дистрибутива.

Однако еще важнее, что дистрибутив определяет ближайший круг общения и стиль общения, в которое неизбежно вступает конечный пользователь. Большая часть литературы, в которой различные дистрибутивы сравниваются между собой{Из русских публикаций в особенности отметим цикл статей [4] и книгу [5] Алексея Федорчука.} сосредоточена на технических различиях, однако, гуманитарные и "коммунитарные" (относящиеся к жизни сообщества) аспекты представляются более важными.

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

12.3 Практическая интеграция: критерии для выбора дистрибутива

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

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

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

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

Документированность. Значение имеет также документированность особенностей дистрибутива и наличие свежих переводов документации.

Консервативность/склонность к экспериментированию. Некоторые составители (такие, как Debian) более склонны к консервативным, проверенным временем решениям, а некоторые (например, RedHat) более смелы в экспериментах. Что вам важнее: иметь самые свежие версии программ или меньшую вероятность ошибки? — Не торопитесь с ответом, для него нужны опыт и приходящая только с опытом мудрость, и ответ не будет однозначным.

Спектр поддерживаемого оборудования (HCL). Наличие формального списка поддерживамего оборудования, или hardware compatibility list (HCL) — серьезный довод в пользу дистрибутива, особенно, если ваш парк оборудования комплектуется на случайной основе. Если у вас постоянный поставщик оборудования и он сотрудничает с кем-либо из составителей дистрибутивов — это еще более серьезный довод в пользу последнего.

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

Критичность несвободных компонентов. Большинство популярных дистрибутивов (кроме Debian GNU/Linux), по крайней мере, в наиболее полном варианте, включает, помимо свободных, и несвободные программы. Правильная политика заключается в том, чтобы отделять свободное от несвободного и исключать зависимость основной функциональности от несвободных программ (например, в текущем (2.2) выпуске дистрибутива ALT Linux Master все несвободное сосредоточено на девятом диске). Важным является также свободное лицензирование (или, по крайней мере, лицензия на свободное распространение в неизменном виде) документации, каковой политики придерживаются не все разработчики.

Информационная и ценовая политика разработчика. При прочих равных, преимущественно стоит входить в отношения с поставщиком, придерживающимся полной прозрачности разработки дистрибутивов. Технически это означает свободный доступ (на чтение) к дереву разработки через cvs или ftp или, по крайней мере, простую регистрационную процедуру для получения такого доступа. Разработчики, закрывающие процесс и лишь периодически сбрасывающие его результаты в релизы, скорее всего, готовят сюрпризы своим пользователям, и редко такие сюрпризы оказываются приятными. В частности, плохим знаком является закрытое дерево разработки UnitedLinux, ведущейся компаниями Conectiva S.A, The SCO Group, SuSE Linux AG и Turbolinux, Inc.

Цена изданий на дисках обычно не играет большого значения (поскольку приобретается один-два комплекта на десятки компьютеров) и варьирует незначительно из-за конкуренции между промышленно тиражированными дистрибутивами и альтернативой самостоятельного переписывания с одолженных дисков или через Интернет. Цена "компактного" (один-три диска плюс брошюрка) дистрибутива в России — порядка 200-300 р., "обширного" (шесть-десять CD плюс несклько томов документации) — от тысячи до трех тыс. р. Публикация дистрибутивов на DVD, возможно, уничтожит феномен "компактного" малодискового дистрибутива и приведет к дальнейшему снижению цен{Пока в России существует один прецедент издания дистрибутива на DVD — Debian GNU/Linux 3.0 в редакции ALT Linux.}.

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

12.4 Практическая интеграция: технические параметры дистрибутивов

Бинарная установка или установка из исходников? В сообществе BSD в качестве штатной процедуры установки принято "портирование", т.е. автоматизированная компиляция и сборка пакетов для целевой машины из исходников. В сообществе GNU/Linux в качестве штатной процедуры установки принята распаковка бинарных (прекомпилированных) пакетов, и до недавнего времени (появления так называемых source-based дистрибутивов) все дистрибутивы технически поддерживали именно этот способ установки (хотя, разумеется, администратор мог и пересобрать любой пакет).

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

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

Стандарта на пакетирование и управление пакетами не существует. Распространение получили три формата пакетов: rpm (впервые появившийся в дистрибутиве RedHat и применяемый сегодня большинством составителей дистрибутивов), deb (применяемый Debian) и tgz (применяемый Slackware). На формат пакета завязаны программа установки и управления пакетами (rpm для rpm, setup для tgz и dpkg для deb), способная отслеживать зависимости между пакетами (ситуации, когда для нормальной работы программы из одного пакета требуется программа (возможно, определенная версия) из другого пакета, или, наоборот, когда программы из разных пакетов являются взаимоисключающими в рамках одной системы).

В последние годы развиваются усовершенствованные средства управления пакетами, позволяющие преодолевать некоторые ограничения, свойственные rpm и dpkg (в частности, отслеживать ситуацию смены имени (в отличие от номера версии) пакета). Единственным известным нам таким средством, доведенным до "боевого" использования, остается apt (дистрибутивы Debian, ALT Linux и Conectiva).

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

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

Аппаратные платформы. Наконец, следует иметь в виду аппаратные платформы, на которые ориентирован дистрибутив. Более половины существующих дистрибутивов ориентированы исключительно на IA-32 (IBM PC-совместимые компьютеры), большинство остальных поддерживает две-три аппаратные платформы, а Debian — целых десять, включая такую экзотику, как ....

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

12.5 Практическая интеграция: обзор самых популярных дистрибутивов

Скорее всего, реальный выбор будет идти между дистрибутивами, либо входящими в "высшую лигу" по популярности в мире (Debian, RedHat, Mandrake и SuSE), либо разрабатывающимися в России (ALT Linux и ASPLinux){Реально команды разработчиков этих двух дистрибутивов международные, как и большинства дистрибутивов, считающихся "зарубежными" по месту публикации.}.

ALT Linux разрабатывается международным коллективом ALT Linux Team и публикуется одноименной московской компанией. Сильной стороной ALT является достаточно структурированное русскоязычное сообщество пользователей (включающее списки рассылки, справочные серверы, деловые связи ALT Linux и пр.) , слабой — отсутствие на сегодня сколько-нибудь серьезной аппаратной базы для тестирования (и, как следствие, отсутствие формального HCL). ALT неплохо документирован [6]. Дистрибутив выходит с 2001 г., хотя следует учитывать и ранний опыт той же команды, выпускавшей до того русскую версию Linux-Mandrake

ASPLinux — в значительной мере остается производным от Red Hat, причем заявляется бинарная и аппаратная совместимость с последним. ASPLinux более консервативен, чем RedHat, поставка его включает неплохую документацию на русском [6], и в большинстве случаев, сохраняя лучшие черты RedHat, является более интересным, чем RedHat, вариантом, по крайней мере, для начинающего российского пользователя. Выпускается с 2001 г., хотя следует иметь в виду и более ранний опыт влившейся в коллектив ASPLinux украинской команды Black Cat Linux.

Debian GNU/Linux. "Образцово-показательный" Debian — единственный из популярных дистрибутивов, разрабатываемый принципиально в некоммерческих рамках. Официальные дистрибутивы Debian содержат пакеты исключительно со свободным софтом. У Debian наиболее формализованные и прозрачные правила взаимодействия в сообществе, причем многие процедуры технологизированы. Debian поддерживает самый широкий спектр аппаратных платформ. "Коробочные" продажи этого дистрибутива невелики, но он является самым популярным среди разработчиков ПО (около половины активных раработчиков свободного ПО, по опросу прошлого года, пользуются именно им). В России Debian GNU/Linux издается московской компанией ALT Linux, являющейся также разработчиком собственного одноименного дистрибутива (см. ниже). Debian GNU/Linux существует с 1993 г.

Linux-Mandrake. Этот дистрибутив, выпускающийся французской компанией MandrakeSoft, "отпочковался" в свое время (1996 г.) от RedHat и в какой-то момент даже догнал его по количеству коробочных продаж. Парадоксальным образом достаточно высокое качество разработки не помешало компании попасть в затруднительное положение; она проходит сейчас процедуру защиты от банкротства. Не менее парадоксальным образом компания продолжает выпуск своего дистрибутива, текущая версия которого оценивается пользователями как весьма удачная и сохраняет достаточную популярность.

RedHat Linux. Этот дистрибутив, выпускаемый американской компанией RedHat Software, наиболее популярен в мире среди непрофессиональных пользователей Linux, и является лидером по "коробочным" и OEM-продажам. Для RedHat собирается наибольшее количество несвободного софта, что важно для пользователей приложений, не имеющих удовлетворительных свободных реализаций. RedHat Linux существует с 1994 г. дщВ России выходит "кириллическое издание" RedHat, издающееся питерской компанией Linux-ink.

SuSE Linux. С вхождением SuSE в группу аутсайдеров Linux-дистрибуции UnitedLinux, стремящихся за счет объединения усилий отвоевать часть рыночной доли RedHat, перспективы дистрибутивов SuSE, имеющих, несомненно, свои преимущества, становятся весьма туманными, хотя текущее состояние проекта достаточно стабильное.

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

12.6 Заключение

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

На случай прочих равных (и настоятельной необходимости немедленно выбрать дистрибутив для первого знакомства с Linux) лектор рискнет порекомендовать Debian GNU/Linux. Категорически не рекомендуются (в любой ситуации) Lindows и Caldera OpenLinux, а также дистрибутивы, разработка которых прекращена (Corel Linux, Storm Linux, Stampede, HP Secure Linux).

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

Ресурсы

1. Единым "концентратором" ссылок на сайты систем BSD является сайт www.bsd.org.

2. Ссылки на сайты большинства дистрибутивов Linux можно найти на www.distrowatch.com.

3. Сборка системы на базе Linux "с нуля" описана в книге Linux from Scratch (www.linuxfromscratch.org). Русский перевод можно найти на http://vnc.org.ua/lfsbook/

4. Проект "Юникс для всех" (http://linuxshop.ru/unix4all/)

5. См. [21].

6. Документация на издаваемые в России дистрибутивы ALT Linux и ASPLinux может быть найдена на http://docs.altlinux.ru и www.asplinux.ru/ru/docs, соответственно.

Лекция 13. Выражайтесь правильно!

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

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

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

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

При всей справедливости этого замечания, ориентация на построчное разбиение заложена лишь в некоторые системные утилиты (например, семейства grep), а большинство утилит может использоваться и с размеченным текстом. Более того, распространенные языки разметки имеют на первом уровне достаточно простой синтаксис, позволяющий с помощью тех же стандартных утилит “отделить мух от котлет” (метки от размечаемого текста). Например, в HTML метки всегда заключены в пару символов < и >, а спецсимволы в пару & и ;. Все остальное является текстом, и задачу его выделения из html мы решим в ходе этой “лекции”.

Нечеткая интернационализация. В СССР и Россию открытые системы попали изначально в практически не локализованном виде. Многие операции (даже такие простые, как алфавитная сортировка) применительно к кириллическому тексту теряли осмысленность.

Сегодня в распространенных открытых системах (большинство сборок UNIX, GNU/Linux, *BSD) поддерживается корректная интернационализация и локализация с использованием восьмибитных кодовых таблиц символов. В отношении кодировки Unicode с некоторыми утилитами до сих пор возможны проблемы (а Unicode является единственным практичным способом работы, например, с немецко-русскими или украинско-французскими двуязычными текстами, не говоря уже о восточных алфавитах и многоязычных текстах), несмотря на то, что поддержка Unicode-локалей{Локаль (locale) определение текущего окружения, относящегося к естественно-языковым и культурно-конвенциональным аспектам, таким, как алфавит и его порядок, язык вывода сообщений, формат даты и времени и т.п.} включена в текущую версию стандарта на оболочку и утилиты.

13.1 “Глоббинг” (шаблоны имен файлов в оболочке)

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

Звездочка. Звездочка означает любую последовательность символов (включая пустую). Например, исполнение команды ls a* в каталоге, содержащем файлы aa, ab, ba, bb, будет полностью эквивалентно исполнению команды ls aa ab, а не передаче утилите ls команды 'a*'. Собственно, можно попробовать передать утилите такую строку, заключив ее в одинарные кавычки (апострофы) — такие кавычки “экранируют” специальные символы от интерпретации оболочкой. Результат предстказуем — ls сообщит, что файла с именем, состоящим из буквы a и звездочки, в текущем каталоге нет (Рис. 1).

$ ls

aa ab ba bb

$ ls a*

aa ab

$ ls 'a*'

ls: a*: No such file or directory

Рис 1

Вопросительный знак. Кроме звездочки, означающей “ноль или более любых символов”, стандартная оболочка распознает символ ? (вопросительный знак) — один символ. Например, исполнение команды ls ?a будет эквивалентно ls aa ba.

Предположим, в отдельном каталоге размещены тексты предшествоваших лекций этой серии в файлах, поименованных с 1.txt по 12.txt, а кроме того, файл toc.txt содержит оглавление содержания этих лекций. Мы хотим вывести список файлов с лекциями, соответствующий “естественному” порядку их следования. Однако команде ls он неизвестен, она (по умолчанию) перечисляет имена в порядке их алфавитного следования (в котором 10.txt предшествует 2.txt). Как быть? Мы можем попробовать дать команду ls ?.txt ??.txt в надежде получить сначала имена, в которых точке предшествует один символ (однозначные номера лекций), а затем имена, в которых точке предшествует два символа. Однако результат может обескуражить (см. рис. 2). Дело в том, что утилита ls сама сортирует имена всех найденных файлов уже после того, как их сравнение с шаблоном завершено.

Обойти это мы можем, отказавшись от утилиты ls и прибегнув к утилите echo (которая, как известно, просто выводит на экран свои аргументы), пользуясь знанием о том, что оболочка сама расширяет неоднозначные имена. Теперь “однозначные номера” предшествуют двузначным.

$ ls

1.txt 11.txt 2.txt 4.txt 6.txt 8.txt book.txt

10.txt 12.txt 3.txt 5.txt 7.txt 9.txt toc.txt

$ ls ?.txt ??.txt

1.txt 11.txt 2.txt 4.txt 6.txt 8.txt

10.txt 12.txt 3.txt 5.txt 7.txt 9.txt

$ echo ?.txt ??.txt

1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt

Рис. 2

Скобочные выражения. И наконец, третий элемент “глоббинга” — это списки и диапазоны символов. Заключенная в квадратные скобки последовательность символов означает образец, которому соответствует хотя бы один из этих символов. Например, образцу [135].txt соответствует список файлов 1.txt 3.txt, 5.txt. Кроме списков, в квадратных скобках могут присутствовать диапазоны — пары символов, разделенные дефисом. Такому образцу соответствует любой символ, попадающий в указанный диапазон (имея в виду алфавитный порядок символов).

Применение “глоббинга”. Допустим, мы решили объединить лекции в части будущей книги, пользуясь для этого командой объединения файлов cat. В нашем примере команда cat [1-5].txt >part1.txt “сольет” в файл part1.txt файлы 1.txt, 2.txt, 3.txt, 4.txt и 5.txt.

Однако, “слить” следующие пять файлов во вторую часть командой cat [6-10].txt >part2.txt уже не удастся. Почему? — Ведь оболочке неведомо, что цифры 10 означают для нас число 10. Она проинтерпретирует выражение [6-10].txt как “символ в диапазоне 6-1 или совпадающий с 0, за каковым символом следуют символы .txt”. Понятно, что в диапазон 6-1 ничего не попадает (поскольку 6 алфавитно следует за 1, а не предшествует ему), а файла с именем 0.txt в нашем примере нет, так что образцу в целом будет соответствовать пустое множество файлов. Придется нам объединять файлы более сложной командой cat [1-9].txt 10.txt >part2.txt.

“Слить” в третью часть два оставшихся файла просто: cat 1[12].txt >part3.txt (или полностью равнозначной ей командой cat 1[1-2].txt >part3.txt). И, наконец, собрать части в книгу, предварив ее оглавлением, мы можем с помощью команды cat toc.txt part[1-3].txt >book.txt.

Если бы эти “лекции” продолжались не один учебный год, а года три, и у нас скопилось 37 файлов, объединить их в книгу мы смогли бы командой cat [1-9].txt [12][0-9].txt 3[0-7].txt >book.txt{Жизнь, конечно, становится много проще, если использовать нумерацию с разрядностью, соответствующей количеству файлов, добавляя при необходимости ведущие нули: 01.txt, 02.txt и т.д.}.

13.2 Базовые регулярные выражения

Переходя к рассмотрению более сложных, чем “глоббинг”, базовых регулярных выражений, используемых многими стандартными утилитами (такими как sed, grep, vi) для поиска, замены, выбора текста, определим регулярное выражение более формально.

Регулярное выражение — это последовательность символов. При использовании (передаче в качестве аргумента программе или вводе в ходе сеанса редактирования) регулярное выражение (шаблон) обычно{Исключением являются утилиты семейства grep.} окружается ограничителями — двумя одинаковыми символами, обозначающими его начало и конец, но не являющимися частью самого выражения. За исключением особых случаев в качестве ограничителей принято брать прямую косую черту (/, слэш), она окрущает выражения и во всех нижеприведенных примерах.

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

В буквальном значении символ автонимен, т.е. обозначает сам себя. /а/ обозначает букву “а”, /слово/ означает слово “слово”.

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

  • Любой одиночный символ обозначается точкой (.), а не вопросительным знаком, как при “глоббинге” имен файлов.

  • Квадратные скобки ([ и ]) так же, как и при “глоббинге”, используются для задания списков и диапазонов.

  • Знак каретки (^) имеет специальное значение в первой позиции внутри квадратных скобок. В этом случае он означает отрицание: /[А-Яа-я]/ соответствует “любой букве русского алфавита”, а /[^А-Яа-я]/ — “любому символу, кроме букв русского алфавита”. Чтобы включить его в список, достаточно поместить его в любую другую позицию: /[~`^]/ — это “тильда, апостроф или знак каретки”.

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

  • Каретка в начале выражения означает начало строки: ^T найдет заглавное “Т”, начинающее строку. Подобно этому знак доллара ($) в конце выражения означает конец строки.

  • Звездочка тоже используется в значении “нуля или более вхождений символа”, но по-другому — для этого она должна следовать за таким символом. Шаблон /A*/ соответствует “A”, “AA”, “AAA” и т.д. Звездочка может следовать и за выражением, например, /[А-Яа-я]*/ означает “любую последовательность букв русского алфавита”. Любая последовательность любых символов может быть обозначена /.*/.

  • Обратная косая черта (\, “бэкслэш”) “экранирует” следующий за нею символ, то есть отменяет его специальное значение. /\./ означает точку, /\*/ — звездочку, а /\\/ — обратную косую черту. Обратная косая черта, за которой следует цифра, также имеет специальное значение, которое здесь не рассматривается.

Кроме того, регулярные выражения могут включать скобочные конструкции. В качестве скобок используются последовательности  ? (это совершенно нелогичное обратное (не отменяющее специальное значение следующего символа, а, наоборот, придающее ему специальное значение) значение бэкслэша обусловлено чисто историческими причинами: скобочные выражения вводились в синтаксис регулярных выражений, когда он уже устоялся). Например, шаблон /??*/ соответствует строкам “аб”, “абаб”, “абабаб” и т.д. Скобочные конструкции могут быть вложенными. В стандарте определены также скобочные конструкции вида \{ и \}, которые мы здесь рассматривать не будем.

Применение базовых регулярных выражений. Давайте попробуем решить простую реалистичную{Хотя и не реальную, ибо для нее есть более подходящие инструменты.} задачу, требующую применения регулярных выражений. Предположим, у нас есть файл index.html, содержащий текст “лекций” этого курса в формате HTML (Рис. 3){Такой файл и вправду можно найти на http://www.otstavnov.com/fsft/index.html.}, а нам нужен “плоский” текст. Мы знаем, что html-файл — это последовательность меток, заключенных в угловые скобки, и размеченного ими текста, и наша задача сводится таким образом к удалению всех подстрок, заключенных в угловые скобки, вместе с этими скобками{Нижеприведенный пример, строго говоря, справедлив только в случае, если каждая метка находится в пределах одной строки. Синтаксис HTML этого не требует, символ новой строки теоретически может встретиться и внутри тега, между его аргументами.}.

Рис. 12.3
Рис. 13-3

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

Казалось бы, это просто: нам нужна открывающая угловая скобка, за которой следует любое количество символов, завершающееся закрывающей угловой скобкой, т.е., в синтаксисе базовых регулярных выражений /<.*>/. Команда “заменить все совпадающие подстроки на пустые” будет выглядеть так: $ sed 's/<.*>//g' <index.html{Напомним, что s означает собственно подстановку, а завершающая команду g — повторение действия, пока в строке находятся совпадения. Обратите внимание также, что выражение-аргумент, передающееся утилите, заключено в одиночные ковычки. Это понадобилось, чтобы отменить “глоббинг” звездочки оболочкой.}. Однако попытка ее выполнить приводит к достаточно странному результату (см. Рис. 4). В чем дело?

$ sed 's/<.*>//g' <index.html

Максим Отставнов &lt;

Исходные "Лекции" публиковались в

На сегодня в школе, как и в

некоторых других сегментах рынка, доминируют "альтернативные", нестандарные

<...>

Рис. 4

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

Нужно модифицировать наше регулярное выражение, добавив условие, чтобы в найденной подстроке содержался только один закрывающий тег. Оно выглядит так: sed 's/<[^>]*>//g' <index.html, то есть “открывающая скобка, за которой следует один или более любой символ, кроме закрывающей скобки, за которым следует закрывающая скобка”. Результат (см. Рис. 5) уже более похож на правду. Возможно, мы захотим также заменить особые символы на их значения, дополнительно прогнав поток через редактирование, и вывести результат в файл{Допустим, так: sed 's/<[^>]*>//g' <index.html | sed 's/&lt;/</g' | sed 's/&gt;/>/g' >index.txt.}.

$sed 's/<[^>]*>//g' <index.html

Свободное программное обеспечение в школе

Свободное программное обеспечение в школе

Версия 0.6

Максим Отставнов &lt;maksim@otstavnov.com&gt;

© 2002-3, Максим Отставнов.

© 2002, Андрей Добровольский (раздел 10.4).

Разрешается использование на условиях GNU FDL в.1.1 или последующих версий, опубликованных Фондом свободного программного обеспечения. Документ не содержит неизменяемых разделов в терминологии GNU FDL. Прочие права сохраняются за авторами.

Исходные "Лекции" публиковались в приложении к газете "Первое сенября" "Информатика" (http://inf.1september.ru) в 2002-3 г.

http://www.otstavnov.com/fsft

Лекция 0. Зачем СПО в школе?

0.1 Свободное и несвободное ПО На сегодня в школе, как и в

некоторых других сегментах рынка,

<...>

Рис. 5

В качестве упражнения остается обратная задача: вывод всех меток, использованных в данном html-тексте{Материала этой и шестой “лекций”, в общем, достаточно для ее решения.}.

13.3 Расширенные регулярные выражения

Расширенные регулярные выражения, используемые более сложными утилитами, такими как awk, отличаются от базовых:

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

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

  • специальным значением вопросительного знака (?), подобным значению звездочки и плюса, но означающим ни одного или одно вхождение предшествующего символа или выражения. Шаблон /а?б/ соответствует строкам “аб” и “б”, но не “ааб”;

  • специальным значением вертикальной черты (|), означающей включающее логическое “или”. Шаблон /аб|ба/ соответствует строкам “аб” и “ба”.

Заключение

Владение регулярными выражениями представляет собой полезный навык, который должен считаться частью компьютерной грамотности. Эффективное практическое применение регулярных выражений — достаточно тонкое искусство, которое требует твердого знания основ и определенной изобретательности. О регулярных выражениях написаны целые книги (см. [22-24], а также весьма забавные примеры в [25]).

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

Существует альтернатива. В 50-60е гг. XX в. Наумом Хомским и последователями был разработан аппарат так называемых трансформационных порождающих (генеративных) грамматик. Это формальные описания, которые первоначально предлагались как метаязык для возможности грамматик на заданном словаре.

Например, если предложение определяется как последовательность <группы подлежащего> и <группы сказуемого>, группа подлежащего — как последовательность необязательного <прилагательного> и <существительного>, группа сказуемого как последовательность <глагола> и необязательного <существительного>, существительное как “boy” или “apple”, глагол как “eats” или “flies”, а прилагательное как “red” или “sour”, то допустимым станет конечное множество предложений (среди которых и скучно-правильные типа “red boy eats sour apple”, и загадочные типа “sour boy flies”, и бессмысленные типа “apple flies boy”{Пример приведен на английском, поскольку флексивный характер русского языка приводит к очевидной неправдоподобности выражений. Перечислены существительные “мальчик”, “яблоко”, глаголы “ест”, “летит”, прилагательные “красный” (“рыжий”), “кислый”. Предложения (c опущенными для простоты артиклями) можно перевести как “рыжий мальчик ест кислое яблоко”, “кислый мальчик летит”, “яблоко летит мальчика”.}.

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

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

Ресурсы

1. Стандартная оболочка и перечисленные утилиты входят в поставку любой открытой ОС. Для альтернативных ОС можно использовать GNU Tools (например, для Microsoft Windows — Cygwin (www.cygwin.com) или UNIX Services for Windows (www.microsoft.com).

2. Новая редакция стандарта на открытые ОС пока доступна только по-английски: IEEE Std 1003.1-2001 (The Open Group Base Specifications Issue 6, www.unix-systems.org/single_unix_specification/). Девятая глава тома “Базовые определения” содержит исчерпывающее описание синтаксиса базовых и расширенных регулярных выражений. Вторая глава тома “Оболочка и утилиты” содержит описания синтаксиса паттернов имен файлов (“глоббинга”).

Вместо заключения. Зачем школа свободному ПО?

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

Проект оказался несколько более трудоемким, чем предполагалось, но в то же время неожиданно богатым результатами. Помимо полутора десятков “лекций”, опубликованных в “Информатике”, эти результаты частично нашли свое отражение в брошюре [26], представленной участниками Второго марафона учебных предметов в апреле этого года и в сообщении [27]. По ходу дела “лектор” узнал для себя много нового и интересного. “Лектор” пользуется случаем выразить самую искреннюю благодарность всем тем, кто этому поспособствовал, включая читателей, присылавших по ход дела свои замечания, часть из которых уже учтена.

Тексты и иллюстрации можно найти на странице http://www.otstavnov.com/fsft; в духе свободного ПО автор предоставляет их на условиях Свободной лицензии ГНУ на документацию (GNU FDL) и надеется на их активное использование, критику и развитие.

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

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

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

14.1 Школа как вызов разработчикам

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

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

Но мы сейчас не о том.

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

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

Мы знаем, что на сегодня имеет место весьма далекая от этого идеала картина. В сфере ИТ (в особенности, в том, что касается наиболее проблемной ее части, всего “персонального” и “настольного”) сложились свои традиции “антидизайна” и “антиэргономики”. Их концентрация “на столе” не случайна: пользователь часто не профессионален и при выборе ориентируется на первое впечатление, а впоследствие уже перегружен унаследованными навыками. В этой области много украшательства и эффектности, но мало эргономики и эффективности.

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

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

А когда я поделился со столичными и вполне успешными коллегами провинциальных разработчиков понравившегося мне пособия своими впечатлениями, один из них с презрением заметил: Это же не программа, это просто записанный на диск учебник. И был глубоко неправ, поскольку самая хорошая программа — эта та, которую не нужно писать{Вообще, самым хорошим учебным пособием я считаю первое гипермедийное издание “Энциклопедиа Британника”.}. О силе мудрого воздержания от действия знает любой начинающий адепт дзен, но программистам это понимание приходит с годами. Да и то не всем.

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

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

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

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

14.2 Условия сотрудничества

Для того, чтобы свободное ПО смогло раскрыть свой потенциал применительно к сфере школьного образования, нужно пройти длинный путь, и “мяч” сегодня — на стороне государства. Отдельные шаги предпринимаются на уровне местных правительств; активность проявляют и российски свободно-софтовые компании, но простая поставка нужного количества дисков ведь проблемы не решит.

Прежде всего, задача стандартизации платформ для среднего образования должна быть поставлена в явном виде. Это позволит достичь независимости:

  • от конкретных поставщиков,

  • от конкретных аппаратных архитектур,

  • от конкретных топологий вычислительных систем и конструктивных решений.

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

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

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

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

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

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

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

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

* * *

Напомню, что на сегодня в России существует лишь одна площадка по-настоящему массового внедрения свободных программ в школьный учебный процесс — Центр компьютерных технологий Московского государственного индустриального университета (www.ctc.msiu.ru). Чуть больше десятка школ в России и ближнем зарубежье, активно применяющих свободный софт, можно найти, поискав в Интернет “школа Linux”, “школа OpenOffice” или что-то подобное. Вероятно, есть и школы, внедряющие свободные программы, но не имеющие собственных страниц в WWW. Еще одно место, где стоит искать поддержки — это местные Группы пользователей Linux (www.lug.org), существующие сегодня почти в полусотне российских городов, хотя активные и в разной мере.

Единственным школьным учебным пособием, включающим сведения о свободных реализациях популярных приложений, остается учебник, подготовленный в том же МГИУ{С.В. Андреев, Н.А. Роганова. Практическая информатика. — М.: МГИУ, 2001.}, текст которого можно найти на упомянутом сайте, хотя на протяжении следующего академического года ситуация должна измениться (прежде всего, в связи с началом поставок компьютеров с Linux в школы ряда регионов, включая Москву).

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

Литература

1. Министерство образования Российской Федерации. "Обязательный минимум содержания образования по информатике". 2. Максим Отставнов (ред.). "Свободное программное обеспечение: бизнес-модели и корпоративные инициативы" — М.: ГУ-ВШЭ, 2001. Расширенную версию этого сборника можно найти на: http://www.otstavnov.com/fsr 3. Эрик Рэймонд. "Собор и базар" // "Открытые системы", ## 09-10, 1999 г. 4. С.В. Сергеев, Н.А. Роганова. Практическая информатика: учебное пособие. Ч.1 — М.: МГИУ, 2001. См. тж. http://www.ctc.msiu.ru/materials/ 5. "Информатика" # 29, 2002 г. 6. Документация на StarOffice 5.2 ("Руководство пользователя" и "Инструкция по инсталляции", в совокупности около 600 стр.) входит в русское "коробочное" издание этого пакета. "Руководство пользователя" также (в значительно улучшенном переводе) издавала и включала в "коробочные" издания своих дистрибутивов, содержащих StarOffice, московская компания ASPLinux (www.asplinux.ru). Следует заметить, что OO.o 1.0 несколько отличается от StarOffice 5.2 и более ранних версий; однако единственным серьезным с точки зрения пользователя отличием является лишь отсутствие единого "рабочего стола" в первом. 7. Сергей Глушаков, Алексей Сурядный. Linux для дома и офиса: Учебный курс. — Харьков: "Фолио", 2002. — 389 с. Несмотря на название, бОльшая часть этой книги посвящена прикладным свободным пакетам, и в том, что касается OO.o и Mozilla, ее содержание неспецифично для Linux (или каких-либо конкретных ОС вообще). Часть III, посвященная OW — это стодесятистраничное (т.е. занимающее более четверти книги) описание базовой функциональности OW с точки зрения пользователя. OpenDraw уделили всего 7 страниц. Часть, посвященная OpenCalc — это восьмидесятистраничное (т.е. занимающее около четверти книги) описание базовой функциональности OpenCalc с точки зрения пользователя. 8. Антон Ионов и др. OpenOffice.ru. Руководство пользователя. — М.: ALT Linux, 2002. — 115 с. Двадцать пять страниц этой брошюры, не продающейся отдельно, но входящей в "коробочную" комплектацию ALT Linux 2.0 Master и OpenOffice.ru и доступной на сайте http://docs.openoffice.ru, посвящено OW, и это действительно кратчайшая инструкция по использованию. Двадцать пять страниц посвящено OpenDraw, и это действительно кратчайшая инструкция по использованию, пятнадцать страниц -- OpenCalc

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

9. С.В.Андреев, Н.А.Роганова. Практическая информатика: Учебное пособие. Часть 1. — М.: МГИУ, 2001. — 348 с. Это тоже свободная книга под GNU FDL, ее можно купить на бумаге или скачать отсюда: www.ctc.msiu.ru/materials/books.php. Пособие консервативно и, несмотря на обновление, пока описывает StarWriter 5.2, а не OW; впрочем, как уже отмечалось, разница между ними с точки зрения пользователя невелика. 10. Т.Робертс, "Текстовые редакторы" // "Человеческий фактор". Т. 6. — М.: "Мир", 1992 11. Дэвид Тейнсли "Linux и Unix: программирование в shell" — Киев: BHV, 2001 12. Ричард Столлмен. Руководство по GNU Emacs (тринадцатая редакция) — М.: Институт логики, 1999 13. Karin Kylander & Olof S Kylander. GIMP: The Official Handbook. The Coriolis Group: 1999, ISBN 1-57610-520-2

Карина и Олаф Киландер взяли на себя нелегкий труд официального документирования GIMP, созданного полутора сотнями программистов. Написанный ими "Официальный справочник по GIMP" доступен (в разных форматах, включая готовые к печати postscript- и pdf-файлы) со страниц http://manual.gimp.org, он также издан на бумаге The Coriolis Group.

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

14. Carey Bunks. Grokking the GIMP New Riders Publishing, 2000; ISBN: 0735709246; 352 pp.

Из другой литературы, посвященной GIMP, можно порекомендовать написанный Кэрием Банксом учебник Grokking the GIMP, также доступный в Сети на http://gimp-savvy.com/BOOK/.

15 Nikolai Bezroukov. The Orthodox File Manager (OFM) Paradigm. Work in progress // http://www.softpanorama.org/OFM/Ofm_00.shtml 16 D. Englebart, W. English. A Research Center for Augmenting Human Intellect // AFIPS Conf. Proc., Fall Joint Computer Conf. — San Francisco, 1968. 17 Фредерик Брукс. Мифический человеко-месяц: двадцать лет спустя // Его же. Мифический человеко-месяц. — СПб.: "Символ-плюс", 1999 18 Виктор Вагнер. True UNIX GUI // http://www.ice.ru/~vitus/thoughts/true_unix_gui.txt/true_unix_gui.txt 19. "Домашний компьютер" #12, 2002 г. Материалы номера также доступны онлайн (http://www.homepc.ru/offline/2002/78/). 20. Матт Уэлш и др. "Запускаем Linux" — СПб.: "Символ", 2000

21. Алексей Федорчук, "Офис, графика, Web в Linux". — СПб.: BHV, 2001.

22. Дж. Фридл. “Регулярные выражения”. — СПб: "Питер", 2001 23. Arnold Robbins. sed & awk Pocket Reference, 2nd Edition. — N.Y.: O'Reilly, 2002 24. Arnold Robbins. Effective awk Programming, 3rd Edition — N.Y.: O'Reilly, 2001 25. Дж. Пик и др., “Unix. Инструментальные средства”. — Киев: BHV, 2002 26. Максим Отставнов. “Прикладные свободные программы в школе” — М.: “Медиа Технолоджи сервис”, 2003. ISBN 5-94842-003-5.

27. Максим Отставнов. “Свободное программное обеспечение школьной информатики”{“Теорія та методика навчання математики, фізики, інформатики”. Вип. 3, том 3. ― Кривий Ріг: НМетАУ, 2003, сс. 251-260.


Приложение А. GNU Free Documentation License

Версия 1.1, март 2000г. Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Каждый вправе копировать и распространять экземпляры настоящей Лицензии без внесения изменений в ее текст.

0. ПРЕАМБУЛА

Цель настоящей Лицензии - сделать свободными справочник, руководство пользователя или иные документы в письменной форме, т.е. обеспечить каждому право свободно копировать и распространять как с изменениями, так и без изменений, за вознаграждение или бесплатно указанные документы. Настоящая Лицензия также позволяет авторам или издателям документа сохранить свою репутацию, не принимая на себя ответственность за изменения, сделанные третьими лицами. Настоящая Лицензия относится к категории "copyleft". Это означает, что все произведения, производные от документа, должны быть свободными в соответствии с концепцией "copyleft". Настоящая Лицензия дополняет General Public License GNU, которая является лицензией "copyleft", разработанной для свободного программного обеспечения. Настоящая Лицензия разработана для применения ее к документации на свободное программное обеспечение, поскольку свободное программное обеспечение должно сопровождаться свободной документацией. Пользователь должен обладать теми же правами в отношении руководства пользователя, какими он обладает в отношении свободного программного обеспечения. При этом действие настоящей Лицензии не распространяется только на руководство пользователя. Настоящая Лицензия может применяться к любому текстовому произведению независимо от его темы или от того, издано ли данное произведение в виде печатной книги или нет. Настоящую Лицензию рекомендуется применять для произведений справочного или обучающего характера.

1. СФЕРА ДЕЙСТВИЯ, ТЕРМИНЫ И ИХ ОПРЕДЕЛЕНИЯ

Условия настоящей Лицензии применяются к любому руководству пользователя или иному произведению, которое в соответствии с уведомлением, помещенным правообладателем, может распространяться на условиях настоящей Лицензии. Далее под термином "Документ" понимается любое подобное руководство пользователя или произведение. Лицо, которому передаются права по настоящей Лицензии, в дальнейшем именуется "Лицензиат". "Модифицированная версия Документа" - любое произведение, содержащее Документ или его часть, скопированные как с изменениями, так и без них и/или переведенные на другой язык. "Второстепенный раздел" - имеющее название приложение или предисловие к Документу, в котором отражено исключительно отношение издателей или авторов Документа к его содержанию в целом, либо к вопросам, связанным с содержанием Документа. Второстепенный раздел не может включать в себя то, что относится непосредственно к содержанию Документа. (Например, если часть Документа является учебником по математике, во Второстепенном разделе не может содержаться что-либо имеющее отношение непосредственно к математике). Во Второстепенных разделах могут быть затронуты вопросы истории того, что составляет содержание или что связано с содержанием Документа, а также правовые, коммерческие, философские, этические или политические взгляды относительно содержания Документа. "Неизменяемые разделы" - определенные Второстепенные разделы, названия которых перечислены как Неизменяемые разделы в уведомлении Документа, определяющем лицензионные условия. "Текст, помещаемый на обложке" - определенные краткие строки текста, которые перечислены в уведомлении Документа, определяющем лицензионные условия, как текст, помещаемый на первой и последней страницах обложки. "Прозрачный" экземпляр Документа - экземпляр Документа в машиночитаемой форме, представленный в формате с общедоступной спецификацией при условии, что документ может просматриваться и редактироваться непосредственно с помощью общедоступных текстовых редакторов или общедоступных программ для векторной или растровой графики (в случае, если в документе содержатся изображения векторной или растровой графики). Указанный формат должен обеспечить ввод текста Документа в программы форматирования текста или автоматический перевод Документа в различные форматы, подходящие для ввода текста Документа в программы форматирования текста. Экземпляр Документа, представленный в ином формате, разметка которого затрудняет или препятствует внесению в Документ последующих изменений пользователями, не является Прозрачным. Такой экземпляр документа называется "Непрозрачным". Форматы, в которых может быть представлен Прозрачный экземпляр Документа, включают простой формат ASCII без разметки, формат ввода Texinfo, формат ввода LaTeX, SGML или XML с использованием общедоступного DTD, а также соответствующий стандартам простой формат HTML, предназначений для внесения модификаций человеком. "Непрозрачные" форматы включают в себя PostScript, PDF, форматы, которые можно прочитать и редактировать только с помощью текстовых редакторов, права на использование которых свободно не передаются, форматы SGML или XML, для которых DTD или инструменты для обработки не являются общедоступными, а также генерируемый машиной HTML, который вырабатывается некоторыми тесктовыми редакторами исключительно в целях вывода. "Титульный лист" - для печатной книги собственно титульный лист, а также следующие за ним страницы, которые должны содержать сведения, помещаемые на титульном листе в соответствии с условиями настоящей Лицензии. Для произведений, формат которых не предполагает наличие титульного листа, под Титульным листом понимается текст, который помещен перед началом основного текста произведения, после его названия, напечатанного наиболее заметным шрифтом.

2. КОПИРОВАНИЕ БЕЗ ВНЕСЕНИЯ ИЗМЕНЕНИЙ

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

3. ТИРАЖИРОВАНИЕ

Если Лицензиат издает печатные экземпляры Документа в количестве свыше 100, и в соответствии с уведомлением Документа, определяющем лицензионные условия, Документ должен содержать Текст, помещаемый на обложке, Лицензиат обязан издавать экземпляры Документа в обложке с напечатанными на ней ясно и разборчиво соответстветствующими Текстами, помещаемыми на обложке: Тексты, помещаемые на первой странице обложки - на первой странице, Тексты, помещаемые на последней странице - соответственно на последней. Также на первой и последней странице обложки экземпляра Документа должно быть ясно и разборчиво указано, что Лицензиат является издателем данных экземпляров. На первой странице обложки должно быть указано полное название Документа без пропусков и сокращений, все слова в названии должны быть набраны шрифтом одинакового размера. Лицензиат вправе поместить прочие сведения на обложке экземпляра. Если при издании экземпляров Документа изменяются только сведения, помещенные на обложке экземпляра, за исключением названия Документа, и при этом соблюдаются требования настоящего пункта, такие действия приравниваются к копированию без внесения изменений. Если объем текста, который должен быть помещен на обложке экземпляра, не позволяет напечатать его разборчиво, Лицензиат обязан поместить разумную часть текста непосредственно на обложке, а остальной текст на страницах Документа, следующих сразу за обложкой. Если Лицензиат издает или распространяет Непрозрачные экземпляры Документа в количестве свыше 100, Лицезиат обязан к каждому такому экземпляру приложить Прозрачный экземпляр этого Документа в машиночитаемой форме или указать на каждом Непрозрачном экземпляре Документа адрес в компьютерной сети общего пользования, где содержится Прозрачный экземпляр без каких-либо добавленных материалов, полный текст которого каждый пользователь компьютерной сети общего пользования вправе бесплатно, не называя своего имени и не регистрируясь, записать в память компьютера с использованием общедоступных сетевых протоколов. Во втором случае Лицензиат обязан предпринять разумные шаги с тем, чтобы доступ к Прозрачному экземпляру Документа по указанному адресу сохранялся по крайней мере в течение одного года после последнего распространения Непрозрачного экземпляра Документа данного тиража, независимо от того, было ли распространение осуществлено Лицензиатом непосредственно или через агентов или розничных продавцов. Прежде чем начать распространение большого количества экземпляров Документа Лицензиату заблаговременно следует связаться с авторами Документа, чтобы они имели возможность предоставить Лицензиату обновленную версию Документа. Лицензиат не обязан выполнять данное условие.

4. ВНЕСЕНИЕ ИЗМЕНЕНИЙ

Лицензиат вправе воспроизводить и распространять Модифицированные версии Документа в соответствии с условиями пунктов 2 и 3 настоящей Лицензии, при условии что Модифицированная версия Документа публикуется в соответствии с настоящей Лицензией. В частности, Лицензиат обязан передать каждому обладателю экземпляра Модифицированной версии Документа права на распространение и внесение изменений в данную Модифицированную версию Документа, аналогично правам на распространение и внесение изменений, которые передаются обладателю экземпляра Документа. При распространении Модифицированных версий Документа Лицензиат обязан: A. поместить на Титульном листе и на обложке при ее наличии название Модифицированной версии, отличающееся от названия Документа и названий предыдущих версий. Названия предыдущих версий при их наличии должны быть указаны в Документе в разделе "История". Лицензиат вправе использовать название предыдущей версии Документа с согласия издателя предыдущей версии; B. указать на Титульном листе в качестве авторов тех лиц, которые являются авторами изменений в Модифицированной версии, а также не менее пяти основных авторов Документа либо всех авторов, если их не более пяти; C. указать на Титульном листе наименование издателя Модифицированной версии, с указанием, что он является издателем данной Версии; D. сохранить все знаки охраны авторского права Документа; E. поместить соответствующий знак охраны авторского права на внесенные Лицензиатом изменения рядом с прочими знаками охраны авторского права; F. поместить непосредственно после знаков охраны авторского права уведомление, в соответствии с которым каждому предоставляется право использовать Модифицированную Версию в соответствии с условиями настоящей Лицензии. Текст уведомления приводится в Приложении к настоящей Лицензии; G. сохранить в уведомлении, указанном в подпункте G, полный список Неизменяемых разделов и Текста, помещяемого на обложке, перечисленных в уведомлении Документа; H. включить в Модифицированную версию текст настоящий Лицензии без каких-либо изменений; I. сохранить в Модифицированной версии раздел "История", включая его название, и дополнить его пунктом, в котором указать так же, как данные сведения указаны на Титульном листе, название, год публикации, наименования новых авторов и издателя Модифицированной версии. Если в Документе отсутствует раздел "История", Лицензиат обязан создать в Модифицированной версии такой раздел, указать в нем название, год публикации, авторов и издателя Документа так же, как данные сведения указаны на Титульном листе Документа и дополнить этот раздел пунктом, содержание которого описано в предыдущем предложении; J. сохранить в Модифицированной версии адрес в компьютерной сети, указанный в Документе, по которому каждый вправе осуществить доступ к Прозрачному экземпляру Документа, а также адрес в компьютерной сети, указанный в Документе, по которому можно получить доступ к предыдущим версиям Документа. Адреса, по которым находятся предыдущие версии Документа, можно поместить в раздел "История". Лицензиат вправе не указывать адрес произведения в компьютерной сети, которое было опубликовано не менее чем за четыре года до публикации самого Документа. Лицензиат вправе не указывать адрес определенной версии в компьютерной сети с разрешения первоначального издателя данной версии; K. сохранить без изменений названия разделов "Благодарности" или "Посвящения", а также содержание и стиль каждой благодарности и/или посвящения; L. сохранить без изменений названия и содержание всех Неизменяемых разделов Документа. Нумерация данных разделов или иной способ их перечисления не включается в состав названий разделов; M. удалить существующий раздел Документа под названием "Одобрения". Такой раздел не может быть включен в Модифицированную версию; N. не присваивать существующим разделам Модифицированной версии название "Одобрения" или такие названия, которые повторяют название любого из Неизменяемых разделов. Если в Модифицированную версию включены новые предисловия или приложения, которые могут быть определены как Второстепенные разделы и которые не содержат текст, скопированный из Документа, Лицензиат вправе по своему выбору определить все или некоторые из этих разделов как Неизменяемые. Для этого следует добавить их названия в список Неизменяемых разделов в уведомлении в Модифицированной версии, определяющем лицензионные условия. Названия данных разделов должны отличаться от названий всех остальных разделов. Лицензиат вправе дополнить Модифицированную версию новым разделом "Одобрения" при условии, что в него включены исключительно одобрения Модифицированной версии Лицензиата третьими сторонами, например оценки экспертов или указания, что текст Модифицированной версии был одобрен организацией в качестве официального определения стандарта. Лицензиат вправе дополнительно поместить на обложке Модифицированной версии Текст, помещаемый на обложке, не превышающий пяти слов для первой страницы обложке и 25 слов для последней страницы обложки. К Тексту, помещаемому на обложке, каждым лицом непосредственно или от имени этого лица на основании соглашения с ним может быть добавлено только по одной строке на первой и на последней страницах обложки. Если на обложке Документа Лицензиатом от своего имени или от имени лица, в интересах которого действует Лицензиат, уже был помещен Текст, помещаемый на обложке, Лицензиат не вправе добавить другой Текст. В этом случае Лицензиат вправе заменить старый текст на новый с разрешения предыдущего издателя, который включил старый текст в издание. По настоящей Лицензии автор(ы) и издатель(и) Документа не передают право использовать их имена и/или наименования в целях рекламы или заявления или предположения, что любая из Модифицированных Версий получила их одобрение.

5. ОБЪЕДИНЕНИЕ ДОКУМЕНТОВ

Лицензиат с соблюдением условий п.4 настоящей Лицензии вправе объединить Документ с другими документами, которые опубликованы на условиях настоящей Лицензии, при этом Лицензиат должен включить в произведение, возникшее в результате объединения, все Неизменяемые разделы из всех первоначальных документов без внесения в них изменений, а также указать их в качестве Неизменяемых разделов данного произведения в списке Неизменяемых разделов, который содержится в уведомлении, определяющем лицензионные условия для произведения. Произведение, возникшее в результате объединения, должно содержать только один экземпляр настоящей Лицензии. Повторяющиеся в произведении одинаковые Неизменяемые разделы могут быть заменены единственной копией таких разделов. Если произведение содержит несколько Неизменяемых Разделов с одним и тем же названием, но с разным содержанием, Лицензиат обязан сделать название каждого такого раздела уникальным путем добавления после названия в скобках уникального номера данного раздела или имени первоначального автора или издателя данного раздела, если автор или издатель известны Лицензиату. Лицензиат обязан соответственно изменить названия Неизменяемых разделов в списке Неизменяемых разделов в уведомлении, определяющем лицензионные условия для произведения, возникшего в результате объединения. В произведении, возникшем в результате объединения, Лицензиат обязан объединить все разделы "История" из различных первоначальных Документов в один общий раздел "История". Подобным образом Лицензиат обязан объединить все разделы с названием "Благодарности" и "Посвящения". Лицензиат обязан исключить из произведения все разделы под названием "Одобрения".

6. СБОРНИКИ ДОКУМЕНТОВ

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

7. ПОДБОРКА ДОКУМЕНТА И САМОСТОЯТЕЛЬНЫХ ПРОИЗВЕДЕНИЙ

Размещение Документа или произведений, производных от Документа, с другими самостоятельными документами или произведениями на одном устройстве для хранения информации или носителе не влечет за собой возникновения Модифицированной версии Документа, при условии, что Лицензиат не заявляет авторских прав на осуществленный им подбор или расположение документов при их размещении. Такое размещение называется "Подборкой", при этом условия настоящей Лицензии не применяются к самостоятельным произведениям, размещенным вышеуказанным способом вместе с Документом, при условии, что они не являются произведениями, производными от Документа. Если условия пункта 3 настоящей Лицензии относительно Текста, помещаемого на обложке, могут быть применены к экземплярам Документа в Подборке, то в этом случае Текст с обложки Документа может быть помещен на обложке только собственно Документа внутри подборки при условии, что Документ занимает менее четвертой части объема всей Подборки. Если Документ занимает более четвертой части объема Подборки, в этом случае Текст с обложки Документа должен быть помещен на обложке всей Подборки.

8. ПЕРЕВОД

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

9. РАСТОРЖЕНИЕ ЛИЦЕНЗИИ

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

10. ПЕРЕСМОТР УСЛОВИЙ ЛИЦЕНЗИИ

Free Software Foundation может публиковать новые исправленные версии GFDL. Такие версии могут быть дополнены различными нормами, регулирующими правоотношения, которые возникли после опубликования предыдущих версий, однако в них будут сохранены основные принципы, закрепленные в настоящей версии (смотри http://www/gnu.org/copyleft/). Каждой версии присваивается свой собственный номер. Если указано, что Документ распространяется в соответствии с определенной версией, т.е. указан ее номер, или любой более поздней версией настоящей Лицензии, Лицензиат вправе присоединиться к любой из этих версий Лицензии, опубликованных Free Software Foundation (при условии, что ни одна из версий не является проектом Лицензии). Если Документ не содержит такого указания на номер версии Лицензии Лицензиат вправе присоединиться к любой из версий Лицензии, опубликованных когда-либо Free Software Foundation (при условии, что ни одна из версий не является Проектом Лицензии).

Порядок применения условий настоящей Лицензии к вашей документации

Чтобы применить условия настоящей Лицензии к созданному вами документу, вам следует включить в документ текст настоящей Лицензии, а также знак охраны авторского права и уведомление, определяющее лицензионные условия, сразу после титульного листа документа в соответствии с нижеприведенным образцом: (c) имя (наименование) автора или иного правообладателя, год первого опубликования документа Каждый имеет право воспроизводить, распространять и/или вносить изменения в настоящий Документ в соответствии с условиями GNU Free Documentation License, Версией 1.1 или любой более поздней версией, опубликованной Free Software Foundation; Данный Документ содержит следующие Неизменяемые разделы (указать названия Неизменяемых разделов); данный документ содержит следующий Текст, помещаемый на первой странице обложки (перечислить), данный документ содержит следующий Текст, помещаемый на последней странице обложки (перечислить). Копия настоящей Лицензии включена в раздел под названием "GNU Free Documentation License". Если документ не содержит Неизменяемых разделов, укажите "Данный документ не содержит Неизменяемых разделов". Если документ не содержит Текста, помещаемого на первой или последней страницах обложки, укажите "Данный документ не содержит Текста, помещяемого на первой странице обложки", соответственно укажите для последней страницы обложки. Если ваш документ содержит имеющие существенное значение примеры программного кода, мы рекомендуем вам выпустить их отдельно в соответствии с условиями одной из лицензий на свободное программное обеспечение, например GNU General Public License, чтобы их можно было использовать как свободное программное обеспечение.

Приложение Б. Changelog/Todo

Б.1 Changelog

0.7 Добавлено содержание лекций 12-14 0.6.1 Исправлено описание XFig согласно замечанию aen 0.6 Поправлены поля в рисунках 0.6 Библиография сведена в единый список 0.6 Поставлены на место текстовые "рисунки" в Лекции 6 0.5.2 Введена единообразная нумерация подразделов 0.5.1 Исправлены очевидные опечатки 0.5 Копия статей, опубликованных в "Информатике" с добавлением GNU FDL

Б.2 Todo

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

Leave a Reply