You are on page 1of 121

Джим Хаганин » Opera 9 » OSDL » Xfce 4.

4 LXF DVD
внутри!
SimplyMepis 6
Knoppix 5

LXF Октябрь 2006


Плюс: еще 3 дистрибутива,
свежий Mono, OOo и другие
новинки
c. 112

№ 10 (84)
ГЛАВНОЕ В МИРЕ LINUX

Аппаратная виртуализация
октябрь 2006 № 10 (84) Google
Earth
AMD vs Intel Linux-версия
вышла на

Виртуальный орбиту –
время

OSDL
тестировать!

прорыв!

Сильные пароли
Что
Новые процессоры меняют для

Джим Хаганин
правила виртуализации нас
Результаты тестирования сделала
OSDL?

Google Earth
Обзор технологии
Плюс: Пошаговое руководство по совместному Тайны самой важной
использованию Intel VT и Xen Linux-организации

SimplyMepis 6
НОВАЯ СЕРИЯ

Безопасность
Создание 3D-игр
Что делает пароль Когда я впервые
паролем? увидел Java,
то подумал,
что это какая-то
Web-дизайн в Inkscape

шутка
Джим Хаганин c. 32

4 607130 820445
Приветствие

Источник #1 в мире Linux

К вашим услугам
Глядя на новенький с иголочки Linux Format, мы
решили поинтересоваться у его команды: А какое ПО
для Linux более всего нуждается в переработке?

Пол Хадсон Грэм Моррисон Майк Сондерс


Emacs. Режим Viper Есть такой Команда ls. Как же
необходимо маленький проект так – без 3D-
включить по Kalbum – ему очень интерфейса, без
умолчанию! не хватает текстур, без скрытых
внимания. функций...

Совсем другая тема?


Эфрейн Эрнандес- Ребекка Смоли Эндрью Грегори Все, как известно, любят темы. С легкой руки законодателя
Мендоса Gimp звучит вяло. Я хочу, чтобы дух мод компьютерного мира – компании Apple, эта тенденция
Да, в общем, все... Переименовать бы Отто Вагнера занялся
Пингвинов его в DreamPhotos архитектурой Yast – распространилась на мультимедийные проигрыватели,
маловато. или Imageine и знатно бы вышло.
украсить портретами web-браузеры, целые операционные системы, сотовые телефоны
кинозвезд.
(как изнутри, так и снаружи)... и вот, наконец, добралась и до
нашего журнала.
Первое, что должно бросаться вам в глаза, едва вы глянете
на эту страницу – новое фото главного редактора. Умело
откадрированный групповой снимок с Ларри Уоллом из прошлых
Марк Бейн Нейл Ботвик Д-р Крис Браун выпусков уступил место более солидному и широкоформатному
Никакое – но я по- Я бы предложил dd. Ее параметры –
прежнему уверен, что Gnome, но, боюсь, вопиющее наруше- образцу репортажного фото. Благодаря этому нововведению,
XPilot – это круто!. приятный внешний ние стандартов Unix.
вид озадачит его Правда, я бы у меня стало чуть меньше место для изложения своих мыслей
пользователей... предпочел лечению на данной странице, поэтому, видимо, надо потихоньку
эвтаназию.
закругляться, подобно новому дизайну журнала...
На его смену ушло, кстати, около полугода упорного труда.
Надеюсь, что вам понравится результат, хотя, конечно, найдутся
читатели, предпочитающие старый вариант оформления. Не
беспокойтесь – к хорошему быстро привыкаешь, да и за новой
Дэвид Картрайт Энди Ченнел Дэвид Кулсон
X. OOo нужно как-то Я с трудом гляжу в цветной обложкой скрывается ваш старый знакомый. LXF
Они моложе меня, но охладить пыл окно GnomeMeeting,
гораздо толще, пользователей. Как но, кажется, пробле-
капризнее и менее насчет чего-нибудь ма не в нем, а в том,
дружелюбны. жутко сложного в на кого направлена Валентин Синицын Главный редактор info@linuxformat.ru
освоении? web-камера.

Миссия журнала
Как с нами связаться
• Пропаганда свободного ПО в России
• Продвижение решений с открытым кодом в бизнес- Письма для публикации: letters@linuxformat.ru
сообществе Подписка и предыдущие номера: subscribe@linuxformat.ru
Техническая поддержка: answers@linuxformat.ru
• Поддержка российского Open Source сообщества
Проблемы с дисками: disks@linuxformat.ru
• Организация трибуны для разработчиков свободного ПО
Общие вопросы: info@linuxformat.ru
• Обратная связь между разработчиками и потребителями ПО Website: www.linuxformat.ru
Адрес редакции: Россия, Санкт-Петербург, ул. Гончарная, 23, офис 54.
Телефон редакции: (812) 717-00-37. Дополнительная информация на стр.118

Октябрь 2006 Linux Format 1


октябрь 2006 № 10 (84)

Содержание
Весь номер – прямо как на ладони: приятного чтения!

Учебники LXF DVD84 Майк вам покажет ........................ 112

OpenOffice.org Base
Настраиваем базу данных ..............................50
Таблицы, сортировка и фильтры для новичков.
SimplyMepis 6.0
Легко установить – легко
Inkscape использовать: как поживается этому
Создаем web-страницу ....................................54 дистрибутиву на плечах Ubuntu?
Всеми любимый векторный редактор – на Плюс: руководство по инсталляции
службе web-мастера.
Knoppix 5.0
OpenOffice.org Basic Последняя версия первого LiveCD.
Запускаем макрос VBA ....................................58
Читайте руководство на DVD!
Да, это возможно! Узнайте, как импортировать
макрос Excel в OpenOffice.org. PC-BSD 1.2
Скорость и стабильность FreeBSD с
приятным рабочим столом. Если вы
никогда не пробовали FreeBSD,
Inkscape обратите внимание.

Zenwalk Linux
Разработчики обкорнали Slackware и
получили быстрый, компактный,
приятный дистрибутив.

Безопасность Заупустите Live-версию Mepis или инсталлируйте ее на свой винчестер.


Невскрываемый пароль ..................................62
В этом выпуске: хэши, John The Ripper и
тюнинг sudo.

Ogre Что за штука... LXFHotPicks


Прольем свет на строения ..............................66
Висельник Чед, часть третья: время завести
убежище.
Java Server Лучшие новинки открытого ПО
на планете ....................................... 106
Greasemonkey
Моддинг в Web!................................................70
Маленький сценарий на JavaScript заставит
Faces?
любой сайт работать, как надо. Web-
Qt/KDE программисты
Модули и расширения .....................................72
Добавьте функций Konqueror или Digikam!
и дизайнеры
могут
Python для профессионалов
Изображения и звук ........................................76 работать
При помощи сторонних библиотек Python вместе
может буквально все!
c. 46
Java Sonik-бум в мире аудиософта под Linux…
Сказка Java ......................................................82
Начинаем изучать самый кросс-
платформенный язык программирования.
ИНТЕРВЬЮ LXF
Компьютерные TeXнологии
LaTeX ................................................................87
Изучаем базовые элементы и логику. «Когда я
Unix API впервые увидел
Сигналы Unix ....................................................90
Убить можно абсолютно любой процесс, но
Java, то подумал, Усидеть на
как – вот в чем вопрос... что это шутка.» нескольких
Символьные вычисления
Maxima: начала анализа .................................94
стульях c. 38
Пределы, интегралы и производные. Джим Хаганин c. 32
Амбиции The Open Source Development Labs

2 Linux Format Октябрь 2006


Содержание

Подпишись на LXF DVD


Linux Format и внутри!
сэкономь! См. страницу 112

подробности на стр.119

Спецрепортаж Обзоры
Google Earth ................................8

Виртуальный
Linux-версия спутникового ПО от Google
наконец-то вышла! Грэм Моррисон не блещет
в географии, но мы доверили ему оценить эту
новинку

прорыв
Новые процессоры меняют представление о виртуализации c. 22
А также....
Рай для леммингов – во всех

QEMU ............................. 30 подробностях.

AC3D 6.........................................9
Руководство к быстрому старту Ник Вейч рассматривает новые возможности
закрытой системы 3D-моделирования

Apache – друг Opera 9 ......................................10


«бледнолицых» ............. 36 Оба-на – встроенный BitTorrent! Изучим
передовой браузер поближе.

Установка собственного web-сервера для


Xfce 4.4 ..................................... 11
начинающих администраторов Любимый рабочий стол настоящих хакеров –
теперь с новым файловым менеджером. Майк

Что сделала для нас Сондерс доложит детали

Gorky 17 ....................................12
OSDL? ............................ 38 Именитый ученый и бесстрашный командир в
одном лице: Коул Салливен
Ответ внутри
Сравнение: удаленные
Машины – в рейд! ................................. 42 рабочие столы
Больше больших, быстрых, безотказных дисков! VNC Free Edition ........................15
TightVNC....................................16
X11 ............................................16
Постоянные рубрики X11vnc ....................................... 17
NX 2.0.0 ..................................... 17
Tsclient ......................................18
Новости ...........................04 Вопрос? Ответ! .............100
Программа на сегодня: rsync, Apache, Krdc ...........................................18
Distrowatch......................20
Ладислав – о дистрибутивах для подкачка и т.д.
сбежавших из Windows и спорах
вокруг Opera. Что такое? ....................106
JavaServer Faces для растерявшегося
Ричарда Драммонда.
Интервью LXF ...............32
Джим Хаганин, неутомимый Roll call at the Southwest
расширитель Pyhton, обсуждает свой Через месяц .................118 Florida
ход в Microsoft с Полом Хадсоном Что LXF85 нам готовит... GNU/Linux Users Group.

Октябрь 2006 Linux Format 3


Новости

Новости
ГЛАВНЫЕ НОВОСТИ: Gnome 2.16 Python 2.5 LinuxWorld 2006

Python 2.5
Новая версия популярного языка сценариев имеет все
шансы стать еще популярнее. Почему – разбирается
Сергей Супрунов.

19
сентября 2006 года, после Оператор with. Впрочем, вместо try-finally коммуникации между пользовательскими
нескольких месяцев бета-тестиро- теперь можно использовать новый оператор процессами и ядром в Linux.
вания и двух кандидатов в рели- with Модуль threading позволяет устанавли-
зы, увидел свет финальный релиз Python with open(‘file.txt’, ‘w’) as fd: вать размер стека для вновь создаваемых
2.5. Среди основных улучшений – увеличение fd.write(‘Hello’) потоков, для чего используется функция
скорости работы, особенно на операциях со stack_size([size]).
строками и при обработке исключений; улуч- В данном случае дескриптор fd будет Добавлен ряд новых модулей, среди кото-
шенная поддержка Unicode; новые операто- существовать только в пределах блока with, и рых: uuid, позволяющий генерировать уни-
ры языка, призванные сделать его ещё более при выходе из блока (в том числе и в резуль- кальные идентификаторы; sqlite3 для работы
удобным; многочисленные дополнения и улуч- тате исключения) файл будет гарантированно с одноимённой БД; ElementTree для обработки
шения во входящих в дистрибутив модулях. закрыт. XML-данных, и ряд других.
Среди новых языковых средств можно Новый метод словаря. Тип данных сло- Окончательно удалены устаревшие модули
упомянуть: варь получил ещё один встроенный метод: regex и regsub, а также ряд других.
Новый условный оператор. Теперь вы може- __missing__(). Он будет вызываться, если Этим перечень изменений не ограничи-
те писать var = A if <условие> else B, то есть выполняется обращение к словарю по отсутс- вается – всего отмечено около 800 патчей и
если <условие> истинно, то переменная var твующему ключу, и следовательно, програм- исправлений ошибок, так что можно сказать,
получит значение A, иначе – B. Это напоми- мист получает возможность переопределить что Python «стал лучше во всех отношениях».
нает тернарный оператор <условие> ? A : B, этот метод в производных классах. В пре- www.python.org
но ближе к естественному языку, хотя и не дыдущих версиях Python отсутствие ключа в
совсем привычно. словаре приводило к исключению KeyError (по
Единый оператор try-except-finally. В пре- умолчанию это поведение сохранилось).
жних версиях использовалось два оператора Параметр key. Функции min() и max(), по
для обработки исключений: try-except и try- примеру функции sort(), обзавелись допол-
finally. Первый позволял обработать возник- нительным параметром key. Теперь можно
шую ошибку в секции except, второй гаранти- указать свою функцию сравнения. Например,
Что было
ровал выполнение кода в секции finally даже max((‘abc’, ‘bc’, ‘c’), key=len) 33 вернёт значе-
в случае возникновения критической ошибки ние ‘abc’, как имеющее самую большую длину. SofTool’06/LinuxLand
в секции try (это, например, часто использу- Без параметра key будет возвращено ‘c’ как 26-29 сентября 2006 года
В рамках ежегодной выставки информационных технологий SofTool в
ется для гарантированного закрытия откры- самое «большое» по алфавиту.
Москве прошла вторая по счету экспозиция LinuxLand и конференция
тых файл). Теперь эти функции объединены в Ряд изменений внесён в модуль os. В част-
«ИТО-2006: Технологии Linux и Open Source». Участники конференции
одном операторе: ности, функция os.stat() по умолчанию теперь имели возможность прослушать доклады о внедрении Linux в странах
fd = open(‘file.txt’, ‘w’) будет выводить значения дат в виде чисел СНГ, а также поучаствовать в тренингах по современным открытым
try: с плавающей запятой. Добавлена пара новых технологиям. Кроме этого, в рамках LinuxLand состоялось награждение
fd.write(‘Hello’) функций – wait3() и wait4(), позволяющих победителей конкурса IBM WebSphere Community Edition Contest.
except: более гибко реализовывать ожидание завер- См. обзор LinuxLand в LXF85.
raise ‘Ошибка записи’ шения дочерних процессов. › www.linuxland.ru
finally: Модуль socket теперь поддерживает и
fd.close() Linux-сокеты AF_NETLINK, используемые для

4 Linux Format Октябрь 2006


Новости

Gnome 2.16 Новости


короткой строкой
Изменился и по форме, и по содержанию. Компания Mandriva обновила свою
линейку дистрибутивов, выпустив
Mandriva Linux 2007 и Mandriva Corporate

В
начале осени сторонники рабочей сре-
ды Gnome (коих в сообществе Open Server 4.0
Source, согласно некоторым оценкам, Novell готовится готовится к выпуску
никак не меньше трети) отметили выход ее системы реального времени SUSE
новой версии – 2.16. Многочисленные измене- Linux Enterprise Real-Time
ния коснулись как чисто визуальной стороны, В Виртуальной Библиотеке
так и функционала. Но – обо все по порядку. ЛинуксЦентра опубликован ответ на
Пользователи ноутбуков по достоинству статью Владимира Попова «Строим сеть
оценят новый энергосберегающий инстру- с терминальным сервером сами»
мент Gnome. Помимо стандартных функций (LXF81)http://linuxcenter.ru/lib/articles/
по уменьшению яркости экрана, установке soft/x_terminals2.phtml
времени «засыпания» и т.п., теперь досту- Увидели свет: Subversion 1.4.0,
пен график зависимости оставшегося време- Gwenview 1.4.0, Linux 2.6.18
ни автономной работы от времени (простите
за невольный каламбур), который позволяет
наглядно видеть, насколько эффективны ваши
меры по сохранению энергии. Пока компьютер
находится в «спячке», зависимость практичес-
ки горизонтальная, а во время «бодрствова- таки, это не Wiki, а ваш рабочий стол – еще не Новый трехмерных эффектах. Благодаря изменени-
ния» наблюдаются резкие падения. весь Интернет. встроенный ям в Metacity, окна Gnome теперь умеют дро-
Довольно об оборудовании. Все-таки, ком- Редактировать меню Gnome тоже ста- инструмент жать, сжиматься, взрываться, плавно исче-
пьютер – это лишь инструмент, призванный ло значительно проще благодаря введе- управления зать и еще много чего другого. Единственное
автоматизировать рутинные или малоинтерес- нию в строй нового инструмента – Alacarte. питанием. «но», помимо необходимости иметь прилич-
ные операции, например, составление напо- Пользователи Ubuntu должны хорошо знать ную видеокарту (пока поддерживаются только
минаний самому себе. Радуйтесь – в состав эту маленькую утилиту, а теперь она стала Intel i830-i945 и ATI Radeon 7000-9250), состо-
Gnome 2.16 включен Tomboy, система экран- доступна и для людей, предпочитающих дру- ит в требовании скомпилировать Metacity с
ных заметок, основанная на Mono. Tomboy не гие дистрибутивы. ключом --enable-compositor – не все сборщики
раз получал высокую оценку редакции LXF, и Однако, никакой, даже самый развитый пакетов пожелают связываться с эксперимен-
мы наконец-то рады видеть его в стандартной функционал не может удовлетворить тягу к тальной функцией.
поставке. прекрасному – и Gnome стремится тщательно Gnome 2.16 будет рабочим столом по
Чтобы создать новую заметку, достаточ- следовать модным тенденциям. Версия 2.16 умолчанию в Fedora Core 6 и Ubuntu 6.10 так
но щелкнуть мышью в любом месте рабоче- является в этом смысле переходной – многие что, к тому времени, когда вы будете читать
го стола и ввести текст в появившемся окне из заложенных в ней нововведений проявятся эти строки, новинку уже вполне можно будет
(имеется встроенная проверка орфографии). в полной мере лишь в Gnome 2.18, но и сейчас попробовать в деле.
Заметки также можно связывать между собой, владельцам мощных видеокарт уже есть, чем www.Gnome.org
только не увлекайтесь этим чрезмерно – все- нагрузить свои GPU. Речь, разумеется, идет от P.S. Читайте обзор Gnom2 2.16 в LXF85

Октябрь 2006 Linux Format 5


Новости

Обзор выставки LinuxWorld-2006


Андрей Маркелов

С
четвертого по пятое сентября в трибутива действительно реализовано впе-
Москве, в Центральном выставочном чатляюще) или RHEL, а слайды в обрамлении
комплексе «Экспоцентр» прошла уже интерфейса Microsoft PowerPoint.
вторая по счету Российская выставка-конфе- Еще одной точкой, по традиции вызвав-
ренция LinuxWorld. Нужно сказать, что орга- шей заметное скопление заинтересованной
низация самого мероприятия несколько отли- публики, как и на всех подобных выставках,
чалась от прошлогодней выставки не только оказался стенд компании LinuxCenter.Ru. Это
местом проведения, но и еще одним сразу и не удивительно, учитывая что там можно
бросающимся в глаза моментом. Так же, как было приобрести множество различных дис-
и в прошлом году, вместе с LinuxWorld одно- трибутивов Linux, атрибутику и специализи-
временно проходили Storage Expo, Infosecurity рованную литературу, в том числе и журнал
и Documation. Но, в отличие от прошлогодней Linux Format за последние несколько месяцев.
выставки, где стенды Linux-компаний распола- Кстати, говоря о периодике, нельзя не упо-
гались на общем для всех четырех мероприя- мянуть и стенд журнала «Системный админис-
тий пространстве, на этой выставке LinuxWorld тратор», где все желающие могли не только
был вынесен в отдельный уголок Экспоцентра. пообщаться с представителями редакции, но
К сожалению, это произошло не из-за уве- и обменять денежные знаки на журналы по
личившегося количества участников. Скорее льготному курсу. Выставочные В конце этого небольшого обзора хоте-
даже наоборот – ряда компаний, которые мы На выставке были также представлены стенды лось бы выразить надежду, что на LinuxWorld-
видели в 2005 году, на новой выставке не и компании-производители дистрибутивов. компаний- 2007 мы увидим новые компании-участники,
было. И как признали те участники выставки, Были представлены две самые известные участников еще больше интересных докладов, и познако-
с которыми я общался, такое выделение из отечественные компании, выпускающие свои LinuxWorld-2006. мимся с большим числом решений, представ-
«общего котла» выставляло LinuxWorld 2006 дистрибутивы – ASP Linux и ALT Linux, в то ленных на рынке Linux-систем. LXF
не с лучшей стороны, подчеркнув как отно- время как из зарубежных компаний-лидеров
сительно небольшое число участников, так и корпоративного рынка Linux-систем, разраба-
зачастую пустые стенды-коробки, на которых тывающих собственные дистрибутивы, участ-
можно было взглянуть разве что на пару-дру- вовала только Novell.
гую представителей компаний. Из других компаний, участвовавших в
Но не будем о грустном, а лучше скажем выставке, хотелось бы упомянуть Linux Ink
о том, что понравилось. Конечно же, подоб- (являвшуюся, помимо прочего, организато-
ные выставки в первую очередь – это обще- ром конференции), R-Style, MSI, Softline, OAO
ние. Компании могут рассказать о предла- «ВНИИС», издательство «Открытые системы»,
гаемых услугах и продуктах. Потенциальные Центр верификации ОС Linux.
заказчики – задать интересующие вопросы и Достаточно большой интерес у посетите-
познакомиться с предложениями на примере лей вызвали семинары и доклады, проходив-
того среза рынка, который представлен на шие на выставке. Сама конференция была
выставке. Ну и, наконец, подобные выстав- разбита на несколько параллельно идущих
ки – это место, где профессионалы могут секций: бизнес-секция, техническая секция и
пообщаться «вживую», что называется, глаза семинары компаний. К сожалению, охватить
в глаза с собеседником, а не со всплывающи- все доклады не было совершенно никакой
ми окошками IM или интерфейсом почтового возможности: в частности, я так и не смог
клиента. Не будем забывать и о тематических побывать на семинаре компании Microsoft,
семинарах, собиравших достаточно большое сотрудники которой обещали поделиться
число слушателей. взглядами на бизнес-модель, основанную на
Переходя же к конкретике, среди ком- открытом коде, и на взаимодействие с сооб-
паний, отметившихся на LinuxWorld, можно ществом разработчиков. Из тех докладов,
выделить нескольких представителей Linux- на которых удалось побывать, хотелось бы
рынка России. Безусловно, одну из первых отметить серию интересных выступлений,
скрипок играла компания IBM, которая не посвященных новой версии корпоративно-
только являлась платиновым спонсором кон- го дистрибутива SUSE Linux Enterprise 10
ференции, но и представила самые большие от Novell, и любопытный рассказ о приме-
по площади стенды. Параллельно с основ- нении SELinux в проекте для правительства
ными секциями конференции, все на том же Великобритании. Также достаточно интерес-
стенде IBM проходили собственные презен- но было узнать о завершающейся серти-
тации и доклады компании. Правда, в тот фикации RHEL на соответствие российским
момент, когда я прогуливался мимо стенда, стандартам. Правда, интересна эта новость
большой плазменный экран демонстрировал будет лишь клиентам IBM, т.к. процедура сер-
не красоты рабочего стола SLES (а надо ска- тификации привязывается не только к конк-
зать, что 3D-переключение рабочих столов в ретной версии дистрибутива и пакету обнов-
последней версии этого корпоративного дис- лений, но и к конкретному оборудованию.

6 Linux Format Октябрь 2006


Обзоры
Новинки программного и аппаратного обеспечения в описании наших экспертов

АЛЕКСЕЙ ФЕДОРЧУК
Свою первую
(и последнюю) Сегодня мы рассматриваем...
программу написал
еще на Алголе.
Google Earth ..............................................8 AC3D 6 c. 9
LinuxWorld 2006 Приличная видеокарта – 200 баксов. Широкополосное
подключение – от 30 в месяц. Возможность сказать: «А вот
так мой дом выглядит с орбиты» - бесценна!

М
ожет быть, кое-кто из моих AC3D 6 ......................................................9
читателей помнит чувство Maya for Linux используется в Голливуде для создания
сопричастности высоким тех- таких кассовых фильмов, как «Властелин колец». Ну если
нологиях, охватывавшее посетителей пер- ваш бюджет поскромнее? Попробуем AC3D...
вых компьютерных выставок в конце 80- Opera 9 ....................................................10
х – начале 90-х годов прошлого тысяче- Спешно собирая бета-версии Firefox 2, немудрено забыть,
летия. Или – первые выставки UnixExpo что в этом мире есть и другие браузеры. Рассмотрим один
из них.
середины 90-х – когда нашим глазам впер-
вые предстала вся мощь рабочих стан- Xfce 4.4....................................................11
ций, оснащенных разными вариантами Это птица? Или самолет? Нет – это рабочее окружение, Gorky 17 ..................................................12
одноименной операционной системы. Ну столь быстрое, что KDE и Gnome остается только грустно Мы любим старые игры. Добавьте к этому мутантов,
вдыхать его выхлопные газы! Плюс забавная мышка на пейзажи стран бывшего СЭВ – и мы будем на седьмом
и, наконец, многим памятен прошлогод- логотипе. небе.
ний каскад выставок, посвященных Open
Source и Linux, оставивший ощущение Google Earth c. 8 Gorky 17 c. 12
того, что эти сферы перестали быть пери-
ферией IT-мира.

«Мир Linux и Open Source


окончательно миновал
стадию ажиотажного
развития и вступил в
период планомерного
практического
применения.»

Традиция выставок продолжена То березка, то рябина, куст ракиты над рекой.. Кошелек или жизнь? Хотя, с такой мордой как у
была и в текущем году. Вслед за вто- тебя... кошелек и жизнь!
рым Open Source Forum Russia наста-
ло время и LinuxWorld (4–5 сентября).
Первое впечатление от нее – будничность.
Немногочисленные посетители степенно
НАШ ВЕРДИКТ пояснение
беседуют с представителями экспонирую-
Все попавшие в обзор продукты оце- Рассматривая свободное ПО, мы
щихся фирм. Что же до последних – ба,
знакомые все лица, в очередном перечис-
ниваются по одиннадцатибальной обычно указываем предпочтитель- Вердикт
шкале (10 – высшая оценка, 0 – низ- ный дистрибутив. Иногда это озна-
лении не нуждающиеся. Не показатель шая). Как правило, мы оцениваем чает компиляцию из исходных текс- Google Earth
ли это того, что мир Linux и Open Source функциональность, производитель- тов, но, если разработчики рекомен- Разработчик: Google
ность, простоту использования и дуют Autopackage, мы следуем Сайт: http://earth.google.com
окончательно миновал стадию ажиотажно- Цена: Бесплатно по закрытой лицензии
цену, а для бесплатных программ учи- этому совету.
го развития и вступил в период планомер- тывается документация. Кроме того, Функциональность 10/10
Производительность 9/10
ного практического применения? Думаю, мы всегда выставляем общую оценку,
Простота использования 9/10
так – и это не может не радовать. Но, с дру- демонстрирующую наше отношение к Документация 9/10
гой стороны, в жизни должно быть место продукту.
Если весь мир – сцена, то Google Earth
Выдающиеся решения могут полу- – театр. Простая в использовании,
празднику. Может быть, им станет гряду- чить престижную награду «Top Stuff». захватывающая и ободряюще практичная
щий LinuxLand? В момент, когда вы будете Номинантами становятся лучшие из
читать эти строки, ответ будет получен... лучших – просто высокой оценки Рейтинг 9/10
alv@posix.ru здесь недостаточно.

Октябрь 2006 Linux Format 7


Обзоры Виртуальный атлас Земли

Google Earth
Предвидя захват Земли хакерами, Грэм Моррисон рассматривает проект Google –
никогда ещё виртуальная жизнь не была так хороша.

Н
адо признать, что год назад, ког-
Вкратце… да был выпущен Google Earth для
Windows, впечатление было силь-
Исследуйте Землю ным. Мы завистливо наблюдали, как знако-
за своим рабочим мые почитатели Windows и Mac запускают
столом с помощью виртуальную планету Google и бороздят Тихий
спутниковых океан в поисках неисследованных территорий
изображений и 3D-
данных. См. также: или просто удобного места для отпуска. Но
Celestia или больше мы им не завидуем! Google cовершил
ожидаемый NASA благородный поступок и выпустил родной
World Wind 1.5. порт для старого доброго Linux. Родной – это
вам не полуподпольные библиотеки Wine для
обработки системных вызовов Windows, как в
Picasa (см. обзор LXF83). Всё сделано основа-
тельно, с помощью Qt и под OpenGL.
Для тех, кому пока не посчастливилось
наблюдать Google Earth в действии – это
естественное расширение Google Maps. При
первом запуске мы видим голубое пятныш-
ко Земли с расстояния порядка 15 000 миль.
Прокрутка мыши приближает нас к родной Пусть Большой Каньон находится на другой стороне планеты – исследовать фотогеничную
планете, пока мы не зависнем над США. Чем американскую бездну можно, не выходя из-за компьютера.
дольше вы держитесь на одном месте, тем
детальнее становится вид – Google Earth без- тать наилучшим покрытием: здесь не диво рекламодателей Google, аналогично страни-
остановочно транслирует спутниковое изобра- разглядеть автомобиль или даже людей. цам поиска в поисковой машине. Это может
Детализация других частей света различна, пригодиться, если вы, скажем, ищете ближай-

«Навигация сводится к чаще всего она доходит примерно до 15 мет-


ров на пиксель.
ший ресторан в Непале, а программа в этом
помочь не может. Закладки делаются на всех
набору названия места, Полёт навигатора
интересных местах, совершенно так же, как в
обычном браузере.
куда вы хотите попасть.» Секстант не понадобится: навигация сводит- Захлопает бабочка крылышками на другой
ся к набору на клавиатуре названия места, стороне планеты – и Google Earth создаст у вас
жение со своего сервера. Именно поэтому вам куда вы хотели бы попасть. Вид плавно уда- иллюзию, что двойным щелчком мыши можно
понадобится как минимум широкополосное ляется в космос, затем перемещается к месту вмешаться в это событие и наблюдать насту-
подключение к Интернету: только тогда вы назначения. Приоритеты расставлены с аме- пивший хаос. Google Earth будит желание поо-
насладитесь в полной мере. риканских позиций – например, если набрать хотиться за метеоритными кратерами или най-
Уровень детализации зависит от место- «Birmingham», то вы угодите в Алабаму, а не в ти исток Амазонки. Бесплатный ресурс такой
нахождения. США, например, могут похвас- более крупный город в Британии. мощи просто не за что критиковать. LXF
Прибыв на место назначения, можно щёл-
кать и перемещать карту мышью (совсем как
Свойства навскидку в Google Maps). Но если нажать и удерживать
Вердикт
среднюю кнопку мыши, вы измените угол
зрения со стандартного (сверху вниз, как со Google Earth
спутника) до совершенно горизонтального,
Разработчик: Google
если захотите. Google Maps так не умеет – а Сайт: http://earth.google.com
что особенно поражает, Google Earth исполь- Цена: Бесплатно по закрытой лицензии
зует высотные данные для приближённого Функциональность 10/10
отображения неровностей земной поверхнос- Производительность 9/10
ти. Например, посетив Эверест или Большой Простота использования 9/10
Каньон, вы увидите их реалистичные модели. Документация 9/10
Надоело выискивать собственное мес- Если весь мир – сцена, то Google
Высота гор Отображение зданий
тонахождение? Интернет полон открытиями Earth – театр. Простая в использовании,
Использование высотных В нескольких городах США
данных означает, что горы типа отображаются даже дома, а других людей. Они пользуются KML, Keyhole захватывающая и ободряюще практичная
пользователи добавили Markup Language, и отмечают интересные мес- программа.
Эвереста поднимаются над
земной поверхностью. текстурные здания и в другие та, новые 3D-модели (с текстурами!), фото,
места. клипы и информацию, напрямую связанные Рейтинг 9/10
с Интернетом. Поиски могут вывести и на

8 Linux Format Октябрь 2006


Инструмент 3D-моделирования Обзоры

AC3D 6
Linux не обижен инструментами 3D-моделирования, но почти все они – не для обычного
пользователя. Ник Вейч отыскал среди них не требующий семи пядей во лбу.

П
роизводители спецэффектов давно
Вкратце… влюблены в платформу Linux – она
экономит время и деньги в сравне-
Платный нии с другими, менее стабильными, система-
инструмент ми. Но их фирменные приложения вряд ли
объемного доступны для эффективного использования
моделирования со непрофессионалами.
славной историей.
Аналоги - Blender, Поприветствуем же AC3D, программу,
Maya и Realsoft 3D. достаточно простую для домашнего пользова-
теля и, при этом, достаточно мощную по всем
параметрам. Ныне она празднует свое десяти-
летие (первоначально AC3D создавалась для
Unix и Windows), причем все это время она
активно развивалась.

Всеобщая совместимость
AC3D гораздо лучше других Linux-инстру-
ментов справляется с открытием файлов 3D
Studio Max, LightWave 3D, DXF (AutoCAD) и…
всех остальных. Огромное количество сред
разработки, в которых теперь создаются 3D-
объекты, а также проприетарная природа сис-
тем рендеринга привели к появлению мно- От простейших предметов до сложных игровых миров – AC3D умеет делать все.
жества разных форматов. Способность AC3D
понимать их – одно из тех качеств программы, компьютерных игр). Возможность экспорта в многие сложные функции, доступные в других
эти форматы существенна, если необходимо платных программах. Это во многом справед-
«Если вы устали бороться с включить в рабочий процесс другие закрытые ливо: AC3D в основном полигональный/вер-
программы. Фактически, AC3D может запрос- шинный редактор без прихотливых режимов
превосходным, но сложным то обращаться ко многим рендерерам (по моделирования; но теперь он поддерживает
Blender – попробуйте это.» умолчанию – POV-Ray), хотя это более полез- впечатляющую функцию работы с «подпо-
но для Windows/Mac версии. верхностями» (соподчиненными поверхностя-
которые окупают расходы; вот только иногда ми), которая существенно упрощает создание
в процессе трансляции теряются некоторые Интерфейс похорошел «органичных» фигур и плавных изгибов. Если
текстуры и объекты. В версии 6 капитально обновился пользова- у вас уже есть Maya, то вы, возможно, не захо-
Благодаря кросс-платформенности AC3D тельский интерфейс, основные инструменты тите связываться с AC3D (при всем многооб-
можно работать даже с теми форматами, получили цветные значки, теперь их нетруд- разии поддерживаемых форматов). Если же
которые на Linux обычно не поддерживают- но отыскать. По ощущению, программа ста- вы устали бороться с превосходным, но слож-
ся – например, MilkShape (эта программа час- ла значительно быстрее и отзывчивее, чем в ным Blender – загрузите (свободно) пробную
то используется для моделирования арены предыдущей версии. Возможно, это просто версию AC3D, и попробуйте начать с нее. LXF
следствие обновления наших компьютеров с
тех пор, как мы в последний раз рассматри-
Свойства навскидку вали AC3D – OpenGL-рендеринг видов тоже
заметно порезвел. Вердикт
Наряду с косметикой, перемены есть и
в функциональности. Наиболее заметная из AC3D 6
них – оконная иерархия объектов, с помощью Разработчик: Inivis
Сайт: www.ac3d.org
которой можно включить/отключить видимость
Цена: $69.95
различных объектов или просто убедиться, что
Функциональность 9/10
редактируется нужная фигура. Новые органы Производительность 9/10
управления ограниченным движением, а также Простота использования 8/10
улучшенная видимость границ полей редак- Цена 8/10
тирования упрощают редактирование фигур,
Ревизия интерфейса Подповерхности $69,95 – сущая безделица за такой
В переработанном интерфейсе С помощью «подповерхностей» а изменения в процессе выбора означают, что основательный, такой простой и такой
инструменты проще в значительно проще создавать вам больше не понадобится клавиатурная гим- полезный товар.
использовании, да и на вид они «живые» фигуры. настика для отметки нужных вершин.
проще! AC3D довольно долго считалась инстру- Рейтинг 9/10
ментом доводки, ведь в ней отсутствовали

Октябрь 2006 Linux Format 9


Обзоры Web-браузер

Opera 9
Песенка коммерческой Opera уже спета, но шоу, тем не менее, продолжается.
DVD
на

Ричард Коббетт разбирается в деталях.

В
ы жалели Opera. Не потому, что он
Вкратце… остался в стороне от титанической
схватки между Explorer и Firefox, и
Новейшая версия даже не потому, что это достойный претен-
комплекта Opera дент, так и не дождавшийся своего часа. А
«все-в-одном», с потому, что нет другого браузера с такой бога-
виджетами и той историей первопроходца в самых крутых
поддержкой
BitTorrent, по- вещах – от жестов мышью до вкладок и ээ...
прежнему отличается Greasemonkey (хотя в Opera это уныло называ-
высокой скоростью. лось User JS, потому-то он и не взлетел) – и
тем не менее его вспоминают всего лишь как
«браузер с баннерами».
Все, хватит. Теперь Opera 9 бесплатен,
освобожден от прежних рекламных и лицен-
зионных ключей, готов к действию. И вот вам
факт – «на выходе из коробки» это самый
вылизанный и функциональный браузер из
имеющихся. Пользоваться Opera не только
Грэм просто, но и приятно. До всего, что вам нуж-
считает… но, дотянетесь мышью, и нет нужды ни в каких
«Все мы любим расширениях. Это полный web-пакет, справ-
Opera, но она ляющийся и с простейшим Интернет-серфин-
предлагает гом, и с почтой (IMAP и POP3). Все, что нужно от браузера, если не вообще все, что нужно – добавка новой системы
недостаточно, Звучит неплохо? Да. Но есть и недостатки. виджетов к прежде неизменной линейке Opera.
чтобы превзойти Если сайт построен в духе любимых Дэвидом
способности Картрайтом [David Cartwright] web-стандартов, посмотреть, как страничка будет выглядеть на вый инструмент BitTorrent расположен выше
Firefox или то проблем не возникнет – Opera 9 проходит экране мобильного устройства, без таблицы всех; сразу за ним следуют напоминания и
живую
тест Acid2 и превосходно обрабатывает боль- стилей или в «сыром» текстовом формате. простые игры – их несложно создать, и они
многоплановость
шинство статических страниц. Но вот многие Можно провести валидацию одним нажатием кросс-платформенны.
Konqueror».
сайты на Ajax, созданные и тестированные клавиши, а если вы подготовили подходящую У Opera остались проблемы с просмот-
эксклюзивно под IE и Firefox – другое дело. презентацию, используйте Opera как инстру- ром web-сайтов, и вариант «все-в-одном» не
Google Calendar более-менее совместим, но мент для слайд-шоу. похож на Firefox с миллионом расширений.
все еще отмечает Opera как неподдерживае- Но это совершенно иной стиль браузера, при
мый браузер, а динамические ссылки в инс- Быстрее всех котором все инструменты работают совмест-
трументе online-заметок Backpack ломаются. В скорости Opera равных нет, если гово- но, а не явились со всех концов сети, и тут есть
Может быть, посещаемых именно вами сайтов рить о рендеринге страниц и времясберега- свои преимущества. Виджеты – превосход-
проблемы и не касаются – но некоторые стра- ющих функциях движка. Потребление памя- ное дополнение, а солидный самостоятельный
ницы просто не работают. ти в нашем тесте составило 28 МБ – мень- браузер позволяет немедленно окунуться в
Web-разработчикам, конечно, жить стало ше, чем Firefox и Epiphany (оба потянули на Сеть с головой. LXF
легче: встроенные таблицы стилей позволяют 32 МБ). Усиленно рекламируемой на сайте
Opera голосовой системы управления пока
нет, но легкость доступа ко всем инструмен- Вердикт
Свойства навскидку там, и множество клавиатурных комбинаций
делают эту нехватку несущественной. Один Opera 9
из самых полезных инструментов – диало- Developer: Opera Software
говое окно Site Preferences (Параметры сай- Web: www.opera.com
Price: Бесплатно по закрытой лицензии
тов), в котором можно отключить навязчивые
Функциональность 9/10
cookies и встроенные фреймы или настроить
Производительность 9/10
обработку «правого» щелчка мыши, а также
Простота использования 9/10
добавить собственную таблицу стилей или Документация 7/10
файл JavaScript, чтобы изменить поведение
Хорош и для продвинутых
страницы. пользователей, и для простых любителей
BitTorrent Виджеты Наиболее значительное дополнение – сис- Интернета, но возможны проблемы с
Загрузка через встроенный Виджеты кросс-платформенные, тема виджетов (Widget). При работе Opera сайтами, использующими Ajax.
BitTorrent стремительна, как хотя на Linux наблюдаются виджеты порхают друг над другом и над рабо-
падение с дерева. некоторые графические
проблемы.
чим столом, и установка любого из них – дело
одного щелчка. Не удивительно, что поиско-
Рейтинг 8/10
10 Linux Format Октябрь 2006
Рабочий стол Обзоры

Xfce 4.4
Xfce бросает вызов соперникам от Gnome и KDE – но не пришлось ли пожертвовать функциями
ради скорости? Разбирается Майк Сондерс.

С
корость любят все – мы постоянно
Вкратце… ищем способы ускорения системы и
стремимся выжать из нашего компью-
Настольная тера все до капли. Выбор ПО – ключевой момент
система на базе GTK в этом стремлении, и если вы разыскиваете
для X11R6. Аналоги: легкий и быстрый вариант, Gnome и KDE – не
KDE, Gnome и ряд для вас. Конечно, они нашпигованы функциями,
отдельных оконных
менеджеров. утилитами и библиотеками, но это же настоя-
щие пожиратели RAM! Оливье Фордан [Olivier
Fourdan] со товарищи создали более эффектив-
ную среду Xfce, которая призвана «загружать
и исполнять приложения быстро, экономя при
этом системные ресурсы».
Многие дистрибутивы включают Xfce в
свои репозитарии, но команда Xfce поступи-
ла умно, создав легкий в установке бинарный
пакет: – нет необходимости компилировать
что-либо из исходных текстов. Там есть окон-
ный менеджер, панель, файловый менеджер и
Менеджер настроек Xfce позволяет настраивать любую часть рабочего стола – рамки окон, темы
набор утилит – все окружение рабочего стола.
GTK, клавиатурные раскладки и др. – без обращения к командной строке.
По сравнению с геркулесовыми подвигами по
установке Gnome и KDE, запуск Xfce гораздо не рай для любителей настроек, как KDE, зато В нашем тесте Xfce бесспорно превзошел
проще и с ходу дает ему фору. А как же хва- не нужно лазить по «скрытым» настройкам Gnome и KDE по части производительности,
GConf, как в Gnome. Диалоговое окно Settings особенно по использованию памяти панелью и
«Проще в установке, чем Manager (Менеджера настроек) содержит 14 файловым менеджером. Как следствие, с ним
мини-инструментов для редактирования рамок можно работать даже на машинах с 64 МБ ОЗУ,
Gnome и KDE, и стартует окон, GTK-тем, раскладок клавиатуры и др. Все хотя и выгрузив все лишнее. Все же компактная
в два раза быстрее.» настройки хранятся в директории ~/.config в кодовая база реже требует сброса на винчестер
виде XML-файлов, поэтому их нетрудно пере- и обратно при переполнении памяти.
леная скорость? А вот стартует он в два раза нести в другие инсталляции Xfce. Конечно, Xfce нельзя сравнивать с Gnome и
быстрее Gnome и KDE; для новейших компью- KDE по функциональности, но, как нам кажет-
теров это, может, и не столь важно, но если Скандинавское качество ся, соотношение «скорость/возможности» у
у вас машина слабее 1 ГГц, то как не полю- Самое заметное изменение по сравнению с него совсем неплохое; это привлекательный и
бить шуструю загрузку полноценной рабочей версией 4.2 – включение Thunar. Этот файло- крепко сбитый рабочий стол, если вы работае-
среды. вый менджер пришел на смену работящему, но те только с ПО на GTK. Если вас достала мане-
Одна из главных задач команды Xfce – сде- закосневшему Xffm. Thunar намного проще в ра Gnome «прятать» свои функции и настрой-
лать возможной настройку без ручного редакти- обращении, слева имеет список часто посеща- ки, но вы по-прежнему ищете что-нибудь для
рования конфигурационных файлов, и для это- емых мест, а вверху – кнопки для перемещения работы с вашими любимыми GTK-приложени-
го проведена похвальная работа. Xfce – отнюдь взад-вперед по дереву директорий. В духе Xfce, ями – попробуйте Xfce, не пожалеете. LXF
он чрезвычайно скор, вдобавок допускает мно-
жество изменений в конфигурации, из потерь
Свойства навскидку же по сравнению с Xffm ощутима лишь одна
– он не может обращаться к сети через Samba. Вердикт
По количеству функций ему далеко до могучих
Nautilus и Konqueror, но с основными операци- Xfce 4.4
ями над файлами Thunar справляется неплохо. Разработчик: Команда Xfce
Сайт: www.xfce.org
Другие основные усовершенствования
Цена: Бесплатно по лицензии GPL
включают поддержку иконок на рабочем столе
Функциональность 7/10
(требуемую пользователями со времен ранних
Производительность 9/10
версий 4.x), спартанский текстовый редактор Простота использования 7/10
Mousepad и календарь Orage, позволяющий Документация 8/10
настроить напоминания и придающий Xfce
В погоне за скоростью Xfce создал
оттенок персонального органайзера. Панель прекрасную настольную систему,
Управление файлами Электронный дневник
Место Xffm занял Thunar, что Orage – новый календарь с обновлена таким образом, что дополнитель- особенно с введением Thunar.
существенно упростило работу с простыми функциями ные функции добавлены в виде модулей, и
файлами. напоминаний и будильника. крушение одного приложения не потянет за Рейтинг 8/10
собой всю панель.

Октябрь 2006 Linux Format 11


Обзоры Стратегия с элементами ролевой игры

Gorky 17
Эта игра с польским уклоном посвящена опасным последствиям большевистско-фашистских
биологических экспериментов, пишет Грэм Моррисон. Прикончим же мутанта!

И
з названия игры ясно, что действие
Вкратце… Gorky 17 происходит на пост-апо-
калиптических, пост-коммунисти-
Напоминает о ческих пустошах Восточной Европы – а это
point-and-click самое подходящее место для нашего отпуска.
боевиках типа Добро пожаловать в польский город Любин
замечательной UFO:
[Lubin], который, видимо, стал жертвой жес-
Enemy Unknown.
См. также: UFO2000. токих исследований в биотехнологии и раз-
работок советского правительства, и улицы
его теперь совсем небезопасны. Вот куда
вы попали. Вы, офицер Коул Салливен [Cole
Sullivan], возглавляете группу из трех солдат
НАТО, которую послали в Любин узнать при-
чину отсутствия связи с городом, а заодно и
судьбу первой группы натовских солдат, кото-
рые выкрикнули по радио свои последние бес-
связные слова несколько часов назад.

Пальба как в 1999-м


Анимированное вступление (разрешение низ-
кое, но атмосферу создает) открывает жут-
кое зрелище: разрушенный город осажден Готовый фон прорисован чрезвычайно подробно, как видно по этой сцене в музее.
неведомой силой, с ней-то вам и предстоит Увы, динозавр не оживет.
сразиться. Действие Gorky 17 происходит в
ближайшем будущем, но ее исходная версия других модерновых технологий. С тех пор все нанесены поверх при помощи примитивного
для Windows вышла в далеком теперь 1999- перешли на графические карты совершенно 3D-движка. Качество текстур и моделей низ-
м, поэтому не ждите новейших 3D-эффек- иного уровня, а из Nvidia и ATI удалось выжать кое, но можно переключиться из режима стан-
тов, использования пиксельных шейдеров или драйверы для Linux. Единственное преиму- дартного рендеринга в аппаратно-ускоренный
щество игры состоит в чрезвычайно скромных режим OpenGL. Уровень Unreal Tournament
системных требованиях: 300 MГц и 64 MB ОЗУ. 2007 этим не достигается, зато смягчаются
«Город кишит созданиями Она пойдет даже на PPC! тени и резкие края, которые выдает програм-
вроде биомеханоидов Движок игры состоит из изометрического мный рендерер. Но фон отрисован достаточно
фона, с заранее тщательно прорисованны- детально, чтобы увлечь. Та же техника исполь-
Ганса Руди Гигера.» ми мелкими деталями; основные персонажи зуется в играх типа Baldur’s Gate – и этим

Шаг за шагом: Поочередная ликвидация монстров

Место в строю Выбор оружия Убить гада


В режиме схватки пространство вашего Необходимо выбрать место, с которого ваше Когда вы увидите белки его глаз, прицельтесь и всадите
перемещения подсвечено зеленым. С каждым оружие сможет достать плохого парня. ему заряд сами-знаете-куда. Осторожно! Мутанту могут
вашим движением это пространство постепенно Не помешает позаботиться и о безопасном придти на помощь отпрыски-клоны.
сужается, пока не истечет время вашего хода. отступлении.

12 Linux Format Октябрь 2006


Стратегия с элементами ролевой игры Обзоры

сходство не ограничивается. Как и в Baldur’s дальности оружия и успеть убраться восвоя-


Gate, есть два игровых режима: стратегия и си до ответного хода врага. Врага? Есть враг:
схватка. город наводнен созданиями, похожими на
биомеханоидов Ганса Руди Гигера. В отличие
Битва с мутантами от случайных персонажей, эти отрисованы
Первый режим – просто разведка на местнос- игровыми дизайнерами, и крупные сражения
ти. Покружите курсором по экрану, щелкните включают клипы-врезки, знакомящие с каж-
в какой-нибудь точке – и ваша доблестная дым из фотогеничных «героев».
команда направится туда, обходя препятствия
на пути. Если это место недосягаемо, из кур- Heaven 17?
сора вылетит маленький красный кружок, а Итак, что же за игра Gorky 17? Любая мест-
команда останется стоять. ность выглядит прекрасно, упавшие статуи
Основная часть игры проходит во вто- в музеях и мерцающий неон над городски-
ром режиме. Когда ваши герои доберутся до ми магазинами реально захватывают. Сюжет
определенной точки, игра перейдет в режим тоже хорош, но шансов насладиться им мало.
схватки. Фон игры изменится на предвари- Скорее всего, 95% времени уйдет на битвы,
тельно отрисованный, с полом, разлинован- В игре есть закадровые диалоги, но голоса персонажей несколько а остальное – на поиски ключа или дерганье
ным на квадраты, и сюжет переключится с раздражают. рубильника. Продолжительность игры зави-
point-and-click реального времени на страте- сит от того, как много схваток вы сможе-
гию поочередных ходов. Именно здесь у Gorky В Gorky 17 есть и элементы ролевой игры. те выдержать. Сражения не достигают того
17 есть шанс вам понравиться, так как режим По ходу действия каждый персонаж приобре- уровня интенсивности и накала, к каким мы
схватки очень похож на всеми нами любимый тает опыт, повышает свой уровень и набирает привыкли в UFO – они обычно сводятся к под-
UFO: Enemy Unknown. Каждый персонаж за статистику. Но это не та статистика, которая счету затраченной вами амуниции или числа
один ход может передвинуться на определен- обычно ведется в ролевых играх. Правда, ста- канистр с горючим, находящихся поблизости
ное количество квадратов и воспользоваться тистика для очков имеется, но все остальные от мутантов (канистры можно подорвать с
одним объектом. Чаще всего этим объектом
Пол связаны с многоходовой битвой. Например, помощью выстрелов, чтобы нанести макси-
считает…
бывает оружие, но может быть и лекарство есть счет, управляющий количеством квад- мальный ущерб). Это и не вполне стратегия,
или бинт. «Эта игра для ратов, которые можно пройти за один ход, а скорее легкое развлечение.
Стратегия исходит из сравнения возмож- UFO – то же, чем есть подсчет точности ваших выстрелов. Есть Тот факт, что игра реанимирована из 1999
ностей оружия у вас и ваших противников, ибо X2 была для Elite: также учет Удачи и Спокойствия, связанный со года, пробудил было в нас надежду, что это
неплохой клон,
возможности эти ограничены. Например, пис- снятием нескольких очков у вашего противни- забытая классика. Вышло не совсем так, но
но лишенный той
толеты подобны ладьям в шахматах и могут магии, что делала ка в случае удачи и сохранением вашего спо- и полного забвения она отнюдь не заслужи-
прицеливаться только по вертикали и гори- притягательным койствия, когда дела идут плохо. вает. LXF
зонтали. Винтовка уже напоминает ферзя и оригинал. Лучше А схватки жестоки. Первый сценарий, по
может стрелять также по диагоналям. По ходу скачайте с eBay сравнению со всей остальной игрой самый
битвы вооружение набирает мощь, и к момен- копию UFO лобовой – морской порт города. Перед боем
и опробуйте
ту решающей схватки мы обладаем уже мета- наши бесстрашные разведчики натыкаются на
DOSBox».
телем жидкого азота и огнеметом. В шахматах двоих павших товарищей. Хитрость состоит в
это равносильно перевороту доски. том, чтобы выманить противника в пределы

Вердикт
Gorky 17
Разработчик: Linux Game Publishing
Сайт: www.linuxgamepublishing.com
Цена: ‡25.00 (ок. $40)
Сюжет 7/10
Графика 6/10
Долговечность 5/10
Цена 5/10
Дороговато для игры, которую можно
найти на барахолке за гроши, но нищие
не выбирают!

Рейтинг 6/10
К счастью, плохие парни оставили уйму амуниции и прочего добра – только успевай подбирать.

Октябрь 2006 Linux Format 13


Сравнение Удаленное управление рабочим столом

Сравнение
Каждый месяц мы сравниваем для вас
тонны программ – а вы можете отдыхать!

УТИЛИТЫ УДАЛЕННОГО УПРАВЛЕНИЯ


В этом месяце: Чтобы не держать на столе лишние мониторы, Дэвид Кулсон
разбирается с удаленными рабочими столами.

Наши тесты
Удаленный рабочий стол должен обеспечи-
вать пользователя всеми преимуществами
рабочего стола (а не консоли) на удаленной
машине. Ключевые факторы здесь таковы:
Скорость. Рабочий стол с непомерно
медленной реакцией бесполезен.
Безопасность. Не рисково ли использо-
вать его в незащищенной сети? Можно ли
зашифровать данные и потребовать аутен-
тификации?
Внешний вид. Хорошо ли воссоздается
графический рабочий стол, возможно ли
сжатие передаваемой информации?
Мы использовали две тестовых конфигу-
рации. Первый тест был через локальную
сеть 100 Мбит/сек, между двумя Linux-сис-
темами . Этот тест показал нам, на что спо-
собны протоколы при условии стабильной
связи. Второй – через кабельное соедине-
ние 3 Мбит/сек с удаленной сетью, при
Magictorch

задержке около 40 миллисекунд. Это типич-


ные параметры сети для работы и из дома,
и через WAN между офисами.

П
омогла бы вам иной раз воз- установлен в другом месте (и даже на другой ные недостатки: главным образом то, что вы
Наш можность увидеть рабочий стол ОС), и открывать графические приложения. не можете запустить удаленно X-сессию цели-
выбор Windows вашего клиента на своей Движения вашей мыши и нажатия на клавиши ком и что это «отъедает» пропускную спо-
Krdc с.18 Linux-машине? Приходилось ли будут отсылаться на сервер; в ответ обнов- собность. Даже запустив X11 через Ethernet
NX с.17 вам готовить доклад на понедельник в выход- ления экрана отправятся к вашей удаленной 100Mbit, вы можете ощущать задержку, спо-
TightVNC с.16 ные? Или вы просто любите работать на дому, машине. Есть несколько опций для кодирова- собную кое-кого вывести из терпения. Мы
Tsclient с.18 развалясь в пижаме? Вам, друзья мои, нужен ния и сжатия этой экранной информации, что- рассмотрим X11 в этом Сравнении, но есть
VNC с.15 удаленный рабочий стол. бы «перерисовка» всего графического рабоче- и альтернативы запуску «сырого» X по сети,
X11 с.16 Доступ к рабочему столу сервера или рабо- го стола точка за точкой не отнимала половину которые мы тоже протестируем; многие из них
X11vnc с.17 чей станции – функция, уже десятилетия- вашего канала и процессорного времени. включают дополнительные функции, далеко
ми предлагаемая на платформах Unix, но до превосходящие возможности X11.
недавнего времени это был просто терми- X11 и далее! Всего мы рассмотрели семь решений уда-
нальный доступ, как у большинства пользо- Рабочие столы Linux основаны на протоко- ленных рабочих столов: три полных клиент-
вателей. К счастью, в наши дни существуют ле X11, со встроенными сетевыми возмож- серверных пакета, два сервера и два интер-
разные варианты графического доступа. Пусть ностями, позволяющими удаленным систе- фейса (front-end), которые вам следует комби-
вы их еще не пробовали – вы тоже можете мам запускать графические X-приложения на нировать, чтобы получить работающее реше-
увидеть свой рабочий стол так, словно он локальном X-сервере. Это имеет существен- ние удаленного рабочего стола.

14 Linux Format Октябрь 2006


Удаленное управление рабочим столом Сравнение
Клиент-
сервер

VNC Free Edition


Оригинальный мультиплатформенный протокол удаленного управления.
на DVD

В
середине 90-х сотрудники лаборато- смогли через сеть проиграть DVD на Totem,
рии AT&T в Кембридже соорудили без заметного дрожания или рассинхрониза-
довольно изящный протокол, Virtual ции звука и изображения.
Network Computing (VNC), спроектировав Одна из довольно полезных возможнос-
его для удаленного контроля, позволяющего тей VNC – слежение (shadowing) за рабочим
любой платформе управлять любой другой. столом, когда несколько пользователей могут
Серверы и клиенты VNC были разработа- подсоединяться к одному серверу Xvnc и
ны для Unix, Windows и Mac OS, наряду с либо разделить сессию, либо передать управ-
набором мобильных устройств. Многие из ление одному из них, а остальных – сде-
этих реализаций были почти бесполезны, но лать наблюдателями. Это приложение иде-
они демонстрировали гибкость VNC, обязан- ально для тренингов или конференций, когда
ную использованию собственного внутренне- несколько человек работают над проектом
го протокола – Remote FrameBuffer, или RFB. вместе. Каждый, кому приходилось искать
Спустя десять лет после выхода VNC, RFB неисправности и кто хочет, чтобы поставщик
продолжает быть основой почти всех систем или консультант понаблюдали за проблемным
удаленных рабочих столов в Linux. пользователем, найдет его бесценным.
Открытая реализация VNC, включающая
сервер и клиентский просмотрщик (viewer) Чтобы поработать с Xvnc, вы подключаетесь к Множество Безопасность RFB
для удаленного доступа к данным, исполь- нему удаленно через RFB, используя програм- применений VNC Свободная версия VNC не предусматрива-
зовалась коммерческими компаниями и му-клиента VNC (просмотрщик) – и готовая X- выходят далеко за ет шифрования, так что запуск сессии RFB
домашними пользователями с 1998 года. Но сессия открывается в окне. рамки этого простого через открытое интернет-соединение срав-
RealVNC, фирма, основанная выходцами из Те, кто «подсел» на терминал, знакомы с примера: «X в X», ним с использованием Telnet. Пароли для
показывающий Mac и
AT&T Laboratory, выпустила также три ком- программой screen – она позволяет запущен- VNC-аутентификации и нажатия клавиш во
Linux на машине
мерческих VNC-решения, включая версии для ным удаленно (через SSH или Telnet) процес- время сессии передаются открытым текс-
Windows.
предприятий и персонального использования. сам выполнять свою работу и осуществлять том, и их легко перехватить. Однако в Linux
В нашем Сравнении мы тестировали свобод- вывод, даже если сессия была завершена. уже есть многочисленные методы обеспечить
ную версию, известную также как RealVNC, Позже пользователь позже может снова под- безопасность IP-трафика, либо используя тун-
используя ее с рабочим столом Gnome и кли- ключиться к машине, запустить screen и про- нель VPN, либо туннелируя RFB-сессию через
ентами Linux и Windows. должать работу, как ни в чем ни бывало. VNC шифруемый порт SSH. С учетом доступности
Технология довольно проста. Сервер VNC действует очень похожим способом: даже утилит шифрования и простоты их разверты-
запускается на машине Linux, предоставляя если ваша сеть «упадет», сессия Xvnc не пре- вания, все, кто планирует использовать VNC
новую X-сессию, через которую запускаются кратит работу, и все X-приложения – тоже. Это для работы, просто придут на готовенькое.
приложения. Типичная X-сессия на рабочем удобно: пользователь может отсоединиться Если требуется удаленный X-доступ из
столе Linux – :0.0, так что VNC следует искать от сессии, чтобы перезагрузить свою рабочую Linux, использования в той или иной фор-
запущенным на :1.0. Однако, в отличие от станцию или подключиться из другого места. ме VNC практически не избежать. Но данная
стандартного X-сервера, X-сервер VNC (Xvnc) версия лишена функций сжатия и аутентифи-
не полагается на доступность физического Кодирование кации, и пользователям, желающим чего-то
видеоустройства, а запускается независимо от VNC предлагает ряд методов кодирования, большего, чем базовое решение, лучше при-
любого оборудования на локальной машине. предоставляющих множество способов пере- смотреться к TightVNC. Если какие-то из уст-
рисовки рабочего стола: от наиболее общей ройств его не поддерживают, всегда можно
реализации «raw», которая обновляет бук- использовать в роли клиента обычный VNC
Стоит ли ждать? вально каждую точку, как только она изме- и, благодаря обратной совместимости с RFB,
нится, до сложных методов hextile и corre, иметь возможность подключаться к системам
Те из нас, кто пользуется VNC несколько допускающих меньшую пропускную способ- TightVNC.
лет, в курсе, что он очень удобен и гибок на ность и перерисовывающих изменения быс-
соединениях с высокой скоростью и низкой трее. Впрочем, ни один из методов кодиро-
латентностью, но становится практически
бесполезен, как только скорость передачи
вания на самом деле ни сжимает данные, ни Вердикт
модифицирует их методом с потерями, так
данных, требуемая для обновления экрана, VNC Free Edition
превышает возможности локального что VNC на медленном соединении будет слег-
ка срываться (см. врезку слева «Стоит ли Версия: 4.1
соединения. Типичная ситуация, когда это
Сайт: www.realvnc.com
становится проблемой – удаленный офис с ждать»). Однако на Ethernet 100Mbit VNC поч-
Цена: бесплатно по лицензии GPL
ADSL- или кабельным соединением, где ти не отстает от обычной X-сессии – мы даже
Дедушка всех приложений удаленного
скорость исходящего потока заметно ниже,
рабочего стола в Unix рискует быть
чем входящего. Пропихивание целой X-
сессии через 256 кбит/сек не слишком «В Ethernet на 100 Мбит/ потесненным внуками, рассмотренными в
нашем Сравнении.
радует, даже при обычном запуске Twm или
сек VNC почти не
Xterm.
отстает от X-сессии.» Рейтинг 6/10
Октябрь 2006 Linux Format 15
Сравнение Удаленное управление рабочим столом

Клиент-
TightVNC сервер
на DVD
Поднимает VNC на новые высоты.

T
ightVNC – это VNC, сделанный лучше, определенно полезно, но оно не для тех, кто
быстрее... компактнее [tight – компакт- любит мелкие шрифты или заинтересован в
ный, сжатый, – прим. пер.]. Созданный детальном изображении. При низком качес-
командной российских разработчиков как тве удаленного стола шрифты, изображения,
улучшенная версия VNC, TightVNC предлагает меню и т.д. фактически нечитаемы, потому
альтернативные расширения для протокола что все они растровые, и просмотр интернет-
RFB, предоставляющие улучшенную техноло- страниц почти невозможен. Зато JPEG-сжатие
гию сжатия для пользователей с медленными работает через модем 56 кбит/сек – всяко луч-
соединениями. Это достигается ценой неболь- ше, чем ничего.
шого увеличения латентности, пока рассчиты- В TightVNC отсутствует «родное» шифро-
При JPEG-сжатии медленное соединение может передавать
вается сжатый рабочий стол, а также увели- вание, но имеется ряд скриптов, которые поз-
сложные рабочие столы, но качество изображений становится
чения нагрузки на процессор, но это не повод воляют ему работать через stunnel (оболочка к убогим.
для беспокойства для процессоров, создан- SSL-шифрованию), предоставляя TCP-сессию
ных за последние лет пять. между клиентом и сервером, зашифрованную
Как и RealVNC, мы тестировали TightVNC с помощью SSL.
с рабочим столом Gnome и клиентами Linux и Нужен быстрый удаленный доступ через
Вердикт
Windows. Методы сжатия могут быть либо «без медленное соединение? TightVNC как раз для
TightVNC
потерь», либо JPEG. Варианты «без потерь» вас. Нужен быстрый локальный доступ через
Версия: 1.2.9
включают «fast» (быстрое), для наиболее LAN? Все равно берите TightVNC, потому что Сайт: www.tightvnc.com
отзывчивого рабочего стола, и «best» (наилуч- все функции обычного VNC у него есть. Короче Цена: бесплатно по лицензии GPL
шее). Хотя опция JPEG (сжатие с потерями) говоря, пусть все пользуются TightVNC. С дополнительными функциями сжатия,
может попортить ясность и четкость рабочего TightVNC – лидер нового поколения
стола, она реально снижает требования к про- «Предлагает улучшенную реализаций VNC.
пускной способности. Результирующее качест-
во варьируется от «почти оригинал» до «кляк-
технику сжатия для медленных Рейтинг 9/10
са какая-то». JPEG-сжатие с низким качеством соединений.»

X11 Сервер

Linux-сервер, используемый удаленно.

В
се, что вы делаете с X, работает через ли захотите запускать его через общедоступ-
протокол, основанный на сокетах, либо ную сеть. Поскольку все работает с исполь-
TCP, либо Unix. Мы вспомнили об этом зованием TCP, «обернуть» сессию в SSH или
в Сравнении удаленных рабочих столов, пото- stunnel довольно легко; и как только туннель
му что X позволяет приложениям подклю- будет построен, можно будет исполнять раз-
чаться через сеть и к локальной X-сессии, и личные приложения с использованием шиф-
к другой системе. Все возможности X-серве- рованного соединения. Но и тогда вы должны
ра будут доступны клиенту: например, если убедиться, что сессия SSH работает постоян-
удаленная машина не поддерживает GLX (как но, не то по завершении сессии все X-прило-
же мы без OpenGL?), вы все равно сможете жения бесславно погибнут.
запускать GLX-приложения, хотя производи- X11 через сеть может пригодиться, но Это приложение запущено через сеть. Не похоже?
Поверьте, так и есть.
тельность слегка пострадает. X – это сервер, вообще-то он проектировался для использо-
но клиентом является приложение: вы ничем вания исключительно в среде LAN. Он умеет
не подсоединитесь к нему. Мы тестировали работать через VPN, но опасность потерять
Вердикт
X.Org 7.1. все ваши X-приложения из-за кратковремен-
X11
Все X-приложения полагаются на перемен- ного сбоя сети, в общем, слишком велика,
Версия: 7.1
ную DISPLAY; изменив ее, чтобы она указыва- чтобы он стал действительно полезным. Сайт: www.x.org
ла на другую систему, вы можете прозрачно Цена: бесплатно по ряду открытых лицензий
запускать приложения (но не весь рабочий Превосходен для локальной сети, но
стол) на другой машине, как будто они рабо- для прочего хрупковат, хотя можно
попробовать его с туннельным
тают локально. Ликуйте все, кто работает
на нескольких машинах и кому уже некуда
«Можете прозрачно соединением или VPN.
ставить дополнительные мониторы! Один из
основных недостатков X11 – очень простой,
запускать приложения Рейтинг 4/10
основанный на событиях протокол, и вы вряд на другой машине.»
16 Linux Format Октябрь 2006
Удаленное управление рабочим столом Сравнение

X11vnc Сервер на DVD

Используется с VNC-просмотрщиком для экспорта


сессий X11.

Н
аписанный в 2002 году, X11vnc тех приложений, куда люди приходят и гово-
запускается как клиент к любой сес- рят: «Мне нужно это» – и «это» добавляется,
сии X11, которую вы хотите экс- будь оно хоть рукомойником или другим столь
портировать для удаленного доступа, пре- же нетипичным приспособлением. Многие
доставляя рабочий стол как VNC-сервер по дополнения и разумны, и полезны, но когда
сети. Поскольку это VNC-сервер, он исполь- нужен всего-навсего X-дисплей, в поисках
зует протокол RFB, а не X11. Когда X11vnc помощи можно зарыться в горах информации
запущен (мы испытывали его с X.Org 7.11 и и навеки. Впрочем, беда невелика: подробное
клиентом TightVNC), удаленный пользователь ЧАВО (FAQ) на сайте прекрасно посодейству-
Экспорт рабочего стола X11 при помощи X11vnc – запросто: можно
может подключиться к рабочему столу, либо ет заставить общую X-сессию вести себя как
делать почти все, информацию бы только потолковее.
разделяя сессию, либо только в режиме про- надо.
смотра. Для просмотра рабочего стола можно Если у вас есть X11 и вам нужно издалека
использовать различное кодирование, допус- добираться до своего рабочего стола, бери-
кающее сжатие и изменение качества JPEG те X11vnc и не ищите ничего другого – разве
Вердикт
при отображении на стороне клиента, так что что захотите попользоваться инструментами,
X11vnc
даже если у вас на рабочем столе творится встроенными в Gnome или KDE; но даже они
Версия: 0.8.2
нечто безумное, все равно можно будет пог- и близко не подходят к некоторым из возмож- Сайт: www.karlrunge.com/x11vnc
лядеть на это через VNC. ностей X11vnc. Если вы уяснили все опции Цена: бесплатно по лицензии GPL
Звучит хорошо; но затем возникает воп- командной строки и оптимально настроили Должен быть у каждого, кто использует
рос: «Умеет ли X11vnc делать то-то и то-то?». конфигурацию, X11vnc станет лучшим средс- X как рабочий стол и часто нуждается в
Беглый взгляд на X11vnc -h даст ответ, прав- твом экономии времени и продуктивным инс- удаленном доступе к своей системе.
да? После просмотра 40 страниц опций, клю- трументом, необходимым каждому рабочему
чей и других аргументов, вы, может быть, най- столу X11. Рейтинг 9/10
дете то, что искали, а может, и нет. X11vnc – из

Клиент-
NX сервер

Новаторская, быстрая, но проприетарная


альтернатива VNC.

R
FB – прекрасный протокол для базо- или сжатия данных между X-сервером и кли-
вых однопользовательских соеди- ентом: NX запускает X Agent, в итоге получа-
нений. Но ему недостает реальной ется конфигурация в стиле «X внутри X», где
системы аутентификации, и в более круп- один X-сервер посылает обновления другому
ных системах проверка машин и слежение как события вызова от клиента.
за подключениями превращается в кошмар. Имея возможность пересылать звук и фай-
NX не использует ни RFB, ни протокол RDP лы через одно и то же NX-соединение, NX пре-
(Remote Desktop Protocol, протокол удален- восходен для всех, кто использует удаленный
ного рабочего стола, широко применяемый в доступ в ежедневной работе. Хотите проиг-
Windows) – у него собственный протокол для рать Flash-ролик на удаленной машине? Аудио
туннелирования сжатого X и различных прото- автоматически передается через шифрован- NX – очень гибкая система, предоставляющая функции VNC,
дополнительные возможности мультимедиа и общий доступ к файлам.
колов через зашифрованный канал. ное соединение на локальной машине, обес-
Четыре сервера уровня предприятия печивая полное мультимедиа-взаимодействие
доступны по отдельности и за плату, а откры- с вашим удаленным рабочим столом. Как и Вердикт
тый настольный сервер можно скачать с www. предоставление файлов в общий доступ, это
nomachine.com, но вам придется использовать много лет входило в RDP на Windows, но NX NX
его с клиентом NX и узлом, бесплатными, но приносит это на открытый рабочий стол, плав- Версия: 2.0.0
не свободными. Мы рассмотрели один из но интегрируя существующие хосты Windows Сайт: www.nomachine.com
пакетов уровня предприятия NX 2.0.0, протес- и новые Linux-инсталляции. Цена: От $424,50 за подписку Small
Business Server
тировав его с X.Org 7.1 и Windows XP Pro.
Для многопользовательских систем NX –
NX необычен тем, что дает возможность
удаленного доступа к системе и позволяет
«NX плавно интегрирует естественный шаг вперед от XDMCP или
VNC.
приложениям X-клиентов получать доступ к хосты Windows и Linux-
удаленному X-серверу. Это решает проблему
отсутствия хорошего способа шифрования инсталляции.» Рейтинг 4/10
Октябрь 2006 Linux Format 17
Сравнение Удаленное управление рабочим столом

интер-
Tsclient фейс на DVD

Многосторонний инструмент Gnome для протоко-


лов RDP и RFB.

У
правление системами, к которым мы та опций VNC. Мы не смогли назначить ни свое
получаем удаленный доступ, довольно кодирование, ни степень сжатия, или поместить
нудная штука: нужно помнить все имена его в SSL-туннель. Правда, все больше людей
хостов или IP-адреса и все пароли, используемые использует удаленный доступ с VNC и он интег-
для обеспечения безопасности. Для решения этой рируется в большее число окружений рабочих
проблемы можете попробовать Tsclient – прило- столов, так что опции хостов VNC явно ждет
жение Gnome, предоставляющее интерфейс ко улучшение.
всем обычным клиентам удаленных рабочих сто- Главная головная боль с Tsclient начинается,
лов, включая VNC Viewer (интерфейс к RealVNC когда доходит до сохранения сессий. Пароли он
Tsclient подключается почти ко всем протоколам удаленных рабочих
или TightVNC) и Rdesktop, что позволяет полу- вообще не сохраняет, что не радует, когда авто-
столов. Попробуйте его как интерфейс к TightVNC.
чать удаленный доступ и к Linux-, и к Windows- матическое восстановление соединения терпит
системам, а фактически ко всему, что поддержи- неудачу и система должна дожидаться, пока кто-
вает RFB. Для этого Сравнения мы испытывали то не выполнит ввод вручную. Если удаленных
его с серверами TightVNC и RDP. систем дюжина, на ввод всех паролей уйдет мас-
Вердикт
Tsclient изрядно примитивен. Конфигурация са времени. В Tsclient есть над чем поработать,
Tsclient
каждой хост-системы сохраняется в файле, загру- чтобы набор функций стал сравним с предостав-
Версия: 0.148
жаемом через интерфейс. Хотелось бы, конечно, ляемым протоколами удаленных рабочих столов. Сайт: www.gnomepro.com/tsclient
небольшого меню, включающего все хосты, а то Цена: бесплатно по лицензии GPL
и организующей их древовидной структуры; зато Милый маленький интерфейс
можно сохранять сессии как для хостов RFB, так пользователя, но не способен установить
и RDP, и учесть все ваши потребности к доступу в «Все больше народу многие опции, например, уровень сжатия
и шифрование.
одном приложении.
Перейдем к недостаткам. Богатство настроек
использует VNC, и опции
для RDP компенсируется бедностью ассортимен- хостов ждет улучшение.» Рейтинг 5/10

интер-
Krdc фейс

KDE-интерфейс для доступа к хост-системам.

П
усть Tsclient фокусируется на поль- щью Krdc; иными словами, копировать данные
зователях Gnome; поклонникам KDE с хоста на хост непросто.
тоже не дадут пропасть. Krdc – это Эх, вот бы нам интегрированный кли-
ответ KDE на требования доступа к сессиям ент удаленного рабочего стола, позволяю-
RDP и RFB на удаленных машинах, и (говоря щий размещать иконки, или даже простые
не для драчки Gnome vs KDE) он куда лучше, меню, на рабочих столах удаленных машин! С
чем Tsclient. Все хорошо организовано, есть длинным хвостом хостов, накопленным Krdc,
список сохраненных хостов, доступных по пора уже сделать небольшую панель инстру-
двойному щелчку мыши. ментов для быстрого доступа к серверам или
Персональные настройки чисто базовые, рабочим станциям. Определенно, грань меж-
Krdc, поставляемый с KDE, предлагает простой в использовании
но Krdc дает выбор быстрого, среднего или ду локальным хостом и удаленной системой интерфейс на все прихоти клиента
медленного типа соединения, в противопо- должна стираться для конечных пользовате- удаленного
ложность Tsclient, где вообще нет интерфей- лей, которые не вполне уловили концепцию рабочего стола.
са для сжатия. В основном, Krdc прилично возможности доступа к их рабочему столу из Вердикт
подбирает сжатие для различных скоростей другого города.
соединения, но его утверждению, что средний Так или иначе, Krdc опережает Tsclient по Krdc
уровень достаточен для некоторых DSL- или удобству и простоте, хотя обоим нужна дора- Версия: 3.5.3-1
Сайт: www.kde.org
кабельных соединений, не очень верится. Как ботка, чтобы быть на уровне.
Цена: бесплатно по лицензии GPL
всегда, требуется время, чтобы все настроить
Если вам нужно запускать несколько
и добиться хорошей работы. Tsclient предо- сессий, Krdc – инструмент для вас; он
ставляет функцию, которой нет в Krdc – это
поддержка RDP 5, она пригодится, если нужно
«Прилично подбирает лучше, чем Tsclient, даже если вы
используете Gnome.
вырезать и вставлять текст между удаленной сжатие для различных
Windows-системой и локальным хостом. Мы
лишь установили соединение RDP 4 с помо- скоростей соединения.» Рейтинг 8/10
18 Linux Format Октябрь 2006
Удаленное управление рабочим столом Сравнение

Утилиты удаленного управления

ВЕРДИКТ
TightVNC 9/10
П
оскольку из рассмотренных нами столом. Gnome и KDE предлагают функции
приложений все, кроме двух, ведут удаленного рабочего стола на базе X11VNC,
свою родословную от VNC, понят- чтобы интерфейс пользователя стал понят-
но, что TightVNC – наиболее успешная реа- нее и поделился набором опций во всей пол-
лизация. При своей гибкости сжатия сес- ноте. Опытным пользователям X11VNC под
сий для удаленного использования и подде- силу соединяться с не-X11 устройствами, TightVNC: пусть мы идем по жизни всего с одной парой глаз, это не
ржке VNC-кодирования без потерь, TightVNC включая фрейм-буферы или даже интерфей- значит, что они не могут быть многозадачными.
удовлетворяет требованиям всех пользова- сы Video4Linux.
телей. Кодирование TightVNC поддержива-
ют многие сервера, включая RFB-клиенты и Локальное решение Как
Salt работает удаленный доступ
сервера только для Windows, в том числе, X11 имеет свое место под солнцем, и так
UltraVNC. Это абсолютный победитель дан- как это оконная система de facto на Linux,
ного Сравнения. еще некоторое время будет его сохранять.
По серверной части X11VNC оставляет в Простой вызов удаленного приложения через
кильватере всех. На беду, здесь так много локальную сеть делает X11 трудным сопер-
опций, что заставить его работать правиль- ником, а ведь ему присуща еще и гибкость,
но удастся не сразу. Мы готовы подтвердить обеспеченная сетевыми возможностями сто-
его способность упрощать жизнь, поскольку ящего за ним X-протокола. Конечно, попытки
наблюдали, как приложение остается запу- сделать что-то сумасшедшее типа проигры-
щенным удаленно, пока мы просто «пере- вания DVD по сети или запуска Flash-ани-
прыгиваем» на машину через SSH и запус- мации – жесточайшие надругательства над
каем X11VNC для соединения с рабочим сетью.
Протокол RFB, безусловно, дает пользо-
вателям выбор смешивать и согласовывать
К читателю возможности клиентов и серверов, чтобы
подобрать самую подходящую пару для сво-
Скоро ли кто-нибудь реализует функцию их целей. Это ваше дело, как назначить пове-
RFB в X11? Получат ли приложения
дение вашего рабочего стола или функции
встроенное шифрование и сжатие для свой
сжатия, шифрования и упрощения для вза-
отрисовки? А вдруг разработчики Linux,
имодействия с нужными удаленными систе- потратить на настройку приложения. Как ни
рехнувшись, примутся использовать RDP
для удаленного доступа? Сообщите нам мами или рабочими станциями. Конечно, по печально, при доступе к рабочему столу KDE
свое мнение об этом Сравнении на lxf. большому счету, ваше решение будет опре- на PDA с использованием GPRS, даже с самым
letters@futurenet.co.uk деляться скоростью имеющегося интернет- сильным сжатием, продуктивно не поработа-
соединения и временем, которое вы захотите ешь. LXF

Таблица функций
платформенность
Аутентификация
Шифрование
Приложение

Окружение

Лицензия
Протокол

X-сервер
Сжатие

Кросс-
Тип

Krdc Интерфейс RFB/RDP Пароль n/a KDE GPL


NX Клиент-сервер NX Пользователь и пароль X11 X Проприетарная
TightVNC Клиент-сервер RFB Пароль Xvnc X GPL
Tsclient Интерфейс RFB/RDP Пароль n/a Gnome GPL
VNC Клиент-сервер RFB Пароль Xvnc X GPL
X11 Сервер X11 [1] [1] Ключ X11 n/a [2] Различные
X11vnc Сервер RFB Пользователь и пароль X11 n/a GPL

[1] Через SSH [2] Посредством инструментов сторонних производителей


Октябрь 2006 Linux Format 19
Distrowatch Обзор новостей разработки
дистрибутивов Linux этого месяца.
ЛАДИСЛАВ БОДНАР
основатель, начальник
и сотрудник сайта
DistroWatch.com
Будем проще
Xandros Desktop 4 Инструменты перехода с Windows на Linux и
Firefox против
Opera функции безопасности: решение для обычных пользователей?

К
рупные релизы этого года от

Н
едавний обзор Live CD Frenzy BSD на SUSE, Fedora Core и Ubuntu
DistroWatch.com указал на «серьез-
подарили энтузиастам свобод-
ный минус» этого – во всем осталь-
ного ПО новые потрясающие операци-
ном идеального – продукта: выбор Opera в
качестве браузера по умолчанию. Как и сле- онные системы. Однако появляется и
довало ожидать, это критическое замечание другая группа дистрибутивов, которые
разожгло яростные баталии среди читателей. куда меньше внимания обращают на «ух
Некоторые согласны с автором в том, что ты!» и куда больше – на «как».
открытый дистрибутив всегда должен Будучи либо проприетарными, либо
держаться программ с открытым исходным содержащими проприетарные модули,
кодом, а некоторые подчеркивают наличие у эти дистрибутивы созданы с учетом
вышеупомянутого проприетарного браузера интересов обычных пользователей: они
большого количества отличных функций.
объясняют, как установить, как поль-
Что касается использования, то здесь о
зоваться и как обновлять ваше ПО для
сравнении речь просто не идет: пользователи
Firefox составляют почти две трети от общего рабочего стола. В эту группу входят
количества посетителей DistroWatch.com Linspire и Turbolinux, но Xandros, в своем
(который, как мы предполагаем, привлекает последнем релизе, зашел куда дальше
технически грамотную читательскую аудито- большинства в создании интуитивно Xandros Networks: безболезненный способ добраться до сети Linux.
рию). И только 8.5% читателей используют понятной операционной системы для
Opera для просмотра сайта. новичков. Восстав из пепла Corel Linux, Xandros вполне лама предлагала «оставшимся без поддержки пользо-
сможет взлететь выше благодаря отлично отшлифован- вателям Windows 98 и ME» 50% скидки при смене дис-
Норвежская придумка ному домашнему дистрибутиву Xandros Desktop 4. трибутива, а программы типа CrossOver Office и Versora
Тем не менее, Opera – слишком интересная включены в пакет, чтобы помочь беженцам с Windows
программа, чтобы ее можно было так просто Аккуратный дизайн обосноваться в новой среде.
игнорировать. Во-первых, она меньше и быс- Что касается дизайна пользовательского интерфей- Тем не менее, последний продукт Xandros облада-
трее, чем Firefox. Во-вторых, на моей системе
са, это – один из самых дружественных дистрибути- ет такими функциями, которые оценят и продвинутые
Ubuntu Opera показывает куда большую ста-
вов на сегодняшний день: его терминология покажет- пользователи. Xandros Security Suite – хороший пример
бильность, чем любой браузер на движке
Gecko. И в-третьих, создатели этого норвежс-
ся привычной любому новообращенному линуксоиду. утилиты, предоставляющей весьма полезный набор
кого браузера всегда демонстрировали весь- Например, многие популярные приложения Linux пере- программ и мастеров конфигурации – не только для
ма высокую целеустремленность; те, кто антивирусной программы ClamAV, но и для обновлений
использует Opera несколько лет, должны «Зашел дальше многих, антивирусных баз, брандмауэра и программы защиты
помнить, что это был первый браузер с вклад- системных файлов; таким способом Xandros проверяет
ками, первый браузер, который поддерживал
создав ОС, интуитивно наличие в системе рут-китов и прочих «паразитов».
«мышиные жесты», первый браузер с под- понятную новичку.» Наличие в установке по умолчанию программ и
держкой text-to-speech, а сейчас – это первый драйверов, не являющихся свободно распространяе-
браузер с виджетами и поддержкой
именованы, чтобы ясна была их цель: DigiKam превра- мыми, например, графических драйверов Nvidia и ATI,
BitTorrent.
тился в Photo Manager, а Amarok стал Music Manager. модулей Flash Player и RealPlayer, может отпугнуть от
И хотя я по-прежнему предпочитаю откры-
тый Firefox, а не проприетарную Opera, вполне
Xandros Security Suite включает антивирусную про- нее поборников чистоты, но дистрибутив заслуживает
очевидно, какой браузер внес больше иннова- грамму, советующую почаще проводить сканирова- внимания. В версии 4 Xandros весьма продвинулся в
ций в мир интернет-серфинга. Хотите знать, ние на предмет наличия вирусов, а функция «product своем стремлении создать хорошо интегрированный и
какие потрясающие новые функции появятся activation» («активация продукта»), необходимая для дружественный к пользователю дистрибутив с отлич-
у вашего браузера через годик-другой? доступа к серверам обновления Xandros, укрепляет ным набором программ. Так что если вам нужна опе-
Посмотрите на сегодняшнюю Opera – и пой- ощущение, что Xandros Desktop 4 создан не только для рационная система, основанная на Linux, для друга или
мете. высоколобых ветеранов Unix. члена семьи без особых технических наклонностей, на
ladislav.bodnar@futurenet.co.uk Основанный в 2001 году, Xandros не пользовался этот дистрибутив стоит взглянуть.
особо славной репутацией в сообществе Linux. Фирма www.xandros.com
делала упор на пользователей Windows – недавняя рек- Энди Ченнел «сделает» Xandros Desktop 4 в LXF85.

20 Linux Format Октябрь 2006


Distrowatch

Решения Novell BLAGое дело


SUSE Linux Enterprise Desktop 10 Этот коммер- Blag Linux и GNU 50000 Клон Fedora, непохо-
ческий дистрибутив предназначен для бизнеса. жий на оригинал – в нем только один CD!

S М
USE Linux 10.2 приняли со сме- ассе Linux-разработчиков
шанными чувствами, но его ком- Fedora Core дала отличную
мерческий вариант Novell SUSE базу для создания специа-
Linux Enterprise Desktop (SLED) 10 – это лизированных программных решений.
совсем другая история. Добрая молва идет о таких из них,
Без сомнения, SLED 10 станет как BLAG Linux and GNU – проекте, раз-
одним из самых значимых релизов в работанном Джеффом Мо [Jeff Moe]
истории дистрибутивов Linux. Причин из Великобритании в попытке ответа на
на то несколько. Во-первых, Novell критику, которой пользователи Linux
стал влиятельным и преданным сто- иногда подвергают Fedora за большой
ронником Linux, к прямой выгоде всего размер и отсутствие поддержки муль-
сообщества. Во-вторых, за последние Улучшенное меню Computer и центр тимедиа. BLAG противопоставляет этой BLAG, с его множеством программ
управления – лишь две из множества редактирования аудио и видео, сущий
годы фирме пришлось побороться за критике добротный дистрибутив на
новых функций SLED 10. рай для энтузиастов мультимедиа
существование, и если удача не вер- одном CD, включающий Gnome, пол-
под Linux.
нется к ней – причем быстро – то есть лучших программ с открытым исход- ную поддержку воспроизведения MP3
риск, что её акционеры начнут при- ным кодом, инструментов взаимо- и DVD, немало отличных мультиме- (Audacity, Grip), а также инструменты
дираться к стратегии Linux, которой действия с Windows и революционных дийных программ и других полезных потокового аудио (Muse, Streamtuner).
придерживается Novell. И, в-третьих, идей, обусловленных многочасовым инструментов из сторонних репозита- Завершает этот отличный дистрибутив
Novell переживает крупномасштаб- изучением эргономичности. Опробовав риев для Fedora. масса приложений для Интернета и про-
ный переход с Windows на Linux, и его, даже самый убежденный скептик Среди прочего, BLAG включает офис- граммы для работы с графикой.
этот опыт, без сомнения, содействовал Linux будет вынужден признать, что ный пакет Gnome (с AbiWord и Gnumeric), Нечего и удивляться, что в качестве
формированию SLED 10. Другие фир- Novell создал серьезного претенден- настольную издательскую программу установщика системы BLAG использу-
мы, которые предпримут попытку ана- та на роль лучшей ОС рабочего сто- Scribus, Kiax, виртуальный телефон и ет Anaconda и предоставляет все обыч-
логичного перехода в будущем, смогут ла, доступной на любой платформе – создатель наклеек Glabels. Видеоманов ные утилиты Red Hat/Fedora, превос-
воспользоваться опытом Novell с поль- потенциального киллера для Vista. порадует коллекция видеоредакто- ходное определение устройств, а также
зой для себя. www.novell.com/linux ров – в их числе Kino и Cinerella. Не мень- обширное сообщество пользователей,
В самом деле, SLED – не просто Мы вплотную займемся SLED 10 в LXF85. шая радость ждет и любителей аудио, всегда готовых помочь, с активными
более лощеная, коммерциализирован- которые найдут здесь программы вос- форумами и списками рассылок. LXF
ная версия SUSE Linux. Это – сочетание произведения и декодирования аудио www.blagblagblag.org

Частота появления новых релизов Хит-парад дистрибутивов


Разница в частоте появления новых релизов у разных дистрибутивов Десять самых посещаемых страниц дистрибутивов за июль
огромна. Некоторые выпускают новый альфа- или пробный релиз (среднее количество визитов в день)
каждые две недели, а некоторые – несколько новых версий в год.
Приводимая таблица демонстрирует количество тестовых и
стабильных релизов за 12 месяцев, с 1 июля 2005 по 30 июня 2006 г. Дистрибутив Количество визитов
Лидирует Mepis, благодаря большому количеству пробных релизов
для разных редакций дистрибутивов. С другой стороны, Slackware 1 Ubuntu 2,298
выпустила только один релиз – версию 10.1 в сентябре 2005 г. Команда Уоррена
Вудфорда умудряется 2 SUSE 1,495
Число выпускать новый релиз
3 Fedora Core 1,143
Дистрибутив релизов Комментарий Mepis каждые две недели!
4 SimplyMepis 1,012
SimplyMepis 23 Специализируется на пробных релизах 5 Damn Small Linux 863
SUSE 22 Релизу 10.1 предшествовало 16 альфа/бета/релиз-кандидатов 6 Mandriva 795
Damn Small Linux 22 Новая стабильная версия каждые два месяца 7 Debian GNU/Linux 638
Ubuntu 20 «Летучие» и специализированные издания (сервер, SPARC) 8 PCLinuxOS 609
FreeBSD 17 Параллельная разработка серий 5.x и 6.x 9 Slackware 532
Mandriva 11 Снизила активность после перехода на годовой цикл выпуска релизов 10 Knoppix 526
Fedora Core 5 По словам Red Hat, трех пробников вполне достаточно

Gentoo 3 Beta? Что это? DistroWatch.com определяет популярность дистрибутивов,


Knoppix 3 Два релиза в неделю – это уже в прошлом основываясь на количестве посещений страниц, посвященных
каждому из дистрибутивов. Хотя эти цифры и не отражают
Debian GNU/Linux 2 «Многолетняя стабильность» (с периодическими обновлениями) реального количества установок, они все же являются
Slackware 1 Отсутствие новостей – хорошая новость индикатором популярности того или иного дистрибутива
[популярная английская пословица, – прим. пер.] в определенный период.

Октябрь 2006 Linux Format 21


Виртуализация

Прорыв Qemu 0.8.2


Xen 3.0.0
на DVD

в виртуальность
Аппаратная виртуализация позволяет запускать различные операционные
системы на Linux одновременно, с высокой скоростью и бесплатно. Говорят
об этом все; Пол Хадсон покажет вам, как сделать это.

L
inux — это выбор: вы можете выбрать рабочий стол, ка, просто были «прикручены» к существующей архитектуре x86,
выбрать браузер и даже выбрать логотип, который будет чтобы не обесценивать вложения пользователей и предприятий.
появляться при загрузке. Но основной выбор, без сомне- Но это также означает, что сохранились старые недостатки. До
ния, самый сложный: какой дистрибутив лучше всех? Если VT и SVM все чипы x86 использовали четыре уровня (кольца) приви-
вы похожи на нас, то, вероятно, скачете между дистрибутивами так легий для исполнения. На уровне 0 работали наиболее привилегиро-
же быстро, как Майк успевает выкладывать их на диск Linux Format; ванные процессы (обычно ОС), а на уровне 3 – наименее привилеги-
но настает время в вашей жизни, когда вам надоест делать пере- рованные (обычно приложения пользователя). Это способствовало
форматирование и вы начнете искать более разумный способ экспе- безопасному разделению привилегий на аппаратном уровне: только
риментировать с новыми ОС. Этот способ – виртуализация: запустите приложения уровня 0 (нулевого кольца) могут напрямую управлять
множество ОС на одном компьютере и переключайтесь между ними оборудованием, что теоретически не позволяет приложению выпол-
с той же легкостью, как между программами. нить что-то фатальное для машины. Но на практике приложениям
Идея виртуализации не нова: VMware существует с 1999 года, часто нужен доступ к оборудованию, так что они нуждаются в вызо-
и мы опубликовали две большие статьи про Xen за последние два вах ОС и запрашивают ресурсы, например, побольше памяти или
года (LXF67 и LXF77). Теперь, впрочем, производители процессоров отрисовку трехмерной графики.
создали виртуализацию на кристалле (on-chip). Работа ОС в вирту- Традиционная виртуализация работает путем запуска гостевой
альной машине (ВМ) будет явно медленнее, чем на чистом компью- ОС поверх вашей основной ОС, в более высоком, менее привилеги-
тере, так что если вы сможете заставить процессор выполнять эту рованном кольце. Когда гостевая ОС пытается выполнить привилеги-
работу, весь процесс ускорится – по крайней мере, теоретически. рованную инструкцию, ее должен перехватить монитор виртуальной
Конкурирующие решения от Intel (VT или Virtualisation Tethnology, машины (VMM) и подменить ее, чтобы гостевая ОС не обнаружила,
технология виртуализа- что работает не на чистом оборудовании. Эта техника – известная как
«Конкурирующие решения ции) и AMD (SVM, или двоичная трансляция – сложна и сопряжена с проблемами, в частно-
Secure Virtual Machines, сти, самомодифицирующегося и самопроверяющегося кода. Кроме
от Intel и AMD стали безопасные виртуальные того, это довольно медленно, поскольку предполагается, что VMM
поставляться в процессорах.» машины) начали постав- постоянно наблюдает за инструкциями, проносящимися мимо, пока
ляться с их процессора- не сможет выстроить кэш.
ми, и наконец-то предприятия, любители новшеств и эксперимен- Xen решил эту проблему, применив паравиртуализацию, когда
таторы среди вас могут попробовать виртуализацию, поскольку для исходный код гостевой ОС модифицируется так, чтобы она осозна-
этого она и предназначалась. вала себя в виртуальной машине. Если гостевой ОС требуются допол-
нительные привилегии, VMM не будет выполнять никакой двоичной
Прорыв трансляции, поскольку гостевая ОС для обслуживания своих потреб-
Аппаратная виртуализация может, наконец, решить простую, но ностей просто вызовет Xen. Это делает работу виртуализации намного
неприятную проблему: процессоры x86 не умеют выполнять виртуа- быстрее, а хост- и гостевая системы связаны гораздо более тесно.
лизацию хорошо. От выпуска 386-го до последнего, основанного на Аппаратная виртуализация устраняет эту проблему раз и навсег-
Core 2, чипа Intel изменилось немногое – набор базовых инструкций да, за счет создания нового набора уровней привилегий, которые
тот же, то есть код, скомпилированный для 386, также будет рабо- размещаются позади традиционных уровней. Новые уровни (извес-
тать на новейшем оборудовании от Intel и AMD. На самом деле новые тные как VMX Root) становятся реальными привилегированными
функции, например, MMX, SSE, двойные ядра и 64-битная обработ- уровнями, в то время как старые уровни (известные как VMX Nonroot)
виртуализируются чипом и используются там, где работают гостевые
ОС. Когда гостевая ОС спрашивает «на каком уровне я нахожусь?»,
Зачем виртуализировать? чип может честно ответить «уровень 0», потому что он действитель-
но работает на уровне 0 – только это нулевое кольцо виртуальное.
Для домашних пользователей: Сыты по горло у вас платформ, затем разработайте набор
переустановкой дистрибутивов? Запустите тестов для запуска по ночам. Таким образом, все гостевые системы могут работать, не прибегая
один маленький дистрибутив как Domain-0, Для администраторов серверов: Застряли на к двоичной трансляции, поскольку они не замечают разницы между
затем виртуализуйте поверх него любые другие 25%-ной загрузке сервера? Используйте уровнем 0 реальной машины и уровнем 0 внутри VMX Nonroot.
дистрибутивы. виртуальную инфраструктуру для снижения Поскольку это передовая технология, аппаратная виртуализация
Для программистов: Нужно протестировать времени простоя, увеличения гибкости и поддерживается не всеми чипами. В случае с Intel все новые чипы,
вашу программу на различных дистрибутивах, моментального предоставления ресурсов для основанные на Core 2, поддерживают аппаратную виртуализацию VT.
операционных системах и настройках? Легко: всех ваших задач. Некоторые чипы постарше также работают, но подавляющее боль-
создайте столько виртуальных машин, сколько шинство чипов Pentium 4 не совместимы с VT. Что касается AMD, то

22 Linux Format Октябрь 2006


Виртуализация
Alex Williamson

только новейшие чипы, основанные на AM2, поддерживают техноло-


гию Secure Virtual Machines. Линейка Opteron должна обновиться в Xen против VMware
конце этого года, но сейчас SVM поддерживают только новые Athlon
64 и Turion 64. Наиболее явное отличие между Xen и VMware в Между прочим, профессиональная версия
Интересно заметить, что хотя VT и SVM решают одну и ту же про- том, что Xen устанавливает себя как основную VMware – VMware ESX Server – работает во
блему, они работают совершенно по-разному: чипы AMD64 имеют ОС компьютера и загружается, когда включается многом подобно Xen, так что, возможно, люди
интегрированный контроллер памяти, а Intel держит его на северном компьютер. Когда ОС Xen запустится, она VMware тоже считают это лучшим подходом!
мосту. На практике это означает, что чипы Intel должны виртуализо- создаст свою первую виртуальную машину с
операционной системой, известную как
вать контроллер памяти программно, тогда как AMD может делать
Domain-0. Она имеет особые привилегии
это аппаратно, обеспечивая еще больший потенциал для повышения
доступа к оборудованию и имеет полное
скорости виртуализации. управление над любыми гостевыми системами,
вызываемыми после нее.
Да, Xen все еще нужен В VMware ваша первоначальная ОС остается
Размещение поддержки виртуализации на процессоре не отменя- неизменной – VMware запускается как
ет потребности в программном обеспечении типа VMware или Xen, приложение поверх исходной ОС, переключая
потому что все, что находится за пределами процессора (и контрол- ее в режим хоста. Новые виртуальные машины
лера памяти, в случае с AMD), по-прежнему нужно виртуализовать. создаются поверх хост-ОС как гостевые, и
Видеокарта, звуковая карта, жесткие диски и т.д. нуждаются в про- запускаются внутри приложения VMware.
Какая из этих двух идей лучше – вопрос
граммной обработке, и здесь системы виртуализации все еще при
спорный; но мы склоняемся в сторону подхода
деле. Наряду с VMware и Xen вы можете также использовать Qemu
Xen, поскольку если в хост-ОС на VMware
и Parallels Workstation, но хотя вся четверка предоставляет полную обнаружатся проблемы (или она рухнет), все VMware позволяет эмулировать
эмуляцию оборудования, кроме процессора, Qemu не имеет никакой виртуальные машины «завалятся» вместе с многопроцессорный компьютер
поддержки технологий виртуализации Intel и AMD, и его производи- ней. на однопроцессорном.
тельность страдает.

Октябрь 2006 Linux Format 23


Виртуализация

Шаг за шагом:

Попробуйте
сами
Это будет серьезной технологией 2007 года –
испытайте ее сегодня и приплюсуйте к своему 1 Установите пакеты Xen
счетчику крутизны солидную добавку. Из Yast, поищите «kernel-xen», и вы увидите два пакета: kernel-xen и
kernel-xenp-ae (см. ниже врезку «Обратите внимание»). Вам также
понадобятся cloop-kmp-xen, xen, xen-libs, xen-tools и xen-tools-ioemu, и

Е
сть чип, поддерживающий VT/ базе Woodcrest/Core 2 был старшим сер-
любые дополнительные драйверы, какие пожелаете.
SVM? Отлично! Вы в нескольких верным чипом от Intel, а машина AMD ори-
минутах от запуска Windows в ентировалась на домашних пользовате-
Linux при помощи аппаратной вир- лей – все результаты тестирования, которые
туализации. Это можно сделать двумя спо- здесь напечатаны, лучше использовать для
собами: через Vmware — тогда виртуализа- сравнения одной машины, работающей под
ция получится мгновенно, но это закрытая «чистой» ОС, с той же машиной под управ-
программа, не позволяющая модифициро- лением виртуализованной ОС, а не сравни-
вать аппаратную часть во время работы; вать Intel и AMD.
или через Xen, который полностью открыт,
поставляется включенным в ряд основных Наша тестовая платформа
дистрибутивов, но потребует некоторых уси- Мы установили SUSE 10.1 на обе машины,
лий, чтобы заставить его работать. Хотя мы используя 32-разрядные хосты и 32-разряд-
пытались заставить Parallels Workstation ные гостевые ОС. SUSE 10.1 – превосходный
работать с VT, это почти всегда заканчива- выбор для испытания Xen, поскольку она
лось зависанием — приглашаем вас попро- поставляется с пакетами ядра Xen, уста-
бовать самим, и если вы заставите его рабо- навливаемыми через Yast. Также здесь есть
тать, сообщите нам. специальный графический интерфейс для
Нашими тестовыми машинами с Xen установки и настройки виртуальных машин, 4 Настройте работу с ОЗУ
были двухпроцессорный Intel Xeon 5160 но на момент написания статьи он не рабо- Запустите xm list для получения информации о Domain-0. Вы можете
(итого четыре ядра), с 8 ГБ памяти, и AMD тал – так что мы делали все вручную. использовать xm mem-set Domain-0 500, чтобы назначить ему 500 МБ
Athlon 64 X2 5000+ с 1 ГБ памяти. На момент памяти. Можете также использовать xm vcpu-set Domain-0 1, чтобы
задать ему один процессор. Изменения вступят в силу немедленно, так
написания статьи новый чип Xeon 5160 на
что вы сразу увидите, если памяти не хватает!

Выявление неисправностей Обратите внимание


Xen на VT/SVM сейчас довольно сложен – мы обнаружили многочисленные зависания, Windows XP на Xen работает, только если ваш процессор
падения и ошибки, пока писали эту статью. Обычно это ошибка пользователя, но Xen любезно входит в следующий список:
умалчивает об этом. Вот решение некоторых из общих проблем: Intel: 5063/5080/5160/7020/
Core Duo 7030/7040/7041
Проблема Решение
Core 2 Duo
Система зависает Достаточно ли свободной памяти, чтобы создать виртуальную Pentium Extreme Edition AMD:
955/965 AM2-based Athlon 64s
«Имя ВМ уже использовано» Каждая ВМ должна иметь уникальное имя в своем
Pentium D 920/930/940/950/960 AM2-based Athlon 64 X2s
конфигурационном файле.
Xeon 5030/5050/5060/ Athlon 64 FX-62
XP не загружается Убедитесь, что «boot» в конфигурационном файле
установлен в «d».
Имеете ОЗУ больше 4 ГБ?
Графика повреждена Установите «stdvga» в 1 в конфигурационном файле.
Если ваша машина имеет более 4 ГБ памяти, вы, вероятно, уже
Когда XP установится, вы можете снова поменять его на 0.
используете Linux-ядро с PAE (Physical Address Extension).
Гостевая ОС не может Установите «pae» в 1 в конфигурационном файле. Некоторые дистрибутивы именуют такие ядра по типу linux-kernel-
прочитать более 4 ГБ памяти
pae или kernel-bigsmp. Устанавливая свое ядро Xen, используйте
«Платформа не поддерживает Ваш чип с функцией VT/SVM? Эта функция запрещена в также и ядро PAE Xen, иначе ваши гостевые системы в Xen не
HVM» вашем BIOS? Заметьте: когда изменяется эта опция BIOS, смогут получить доступ более чем к 4 ГБ ОЗУ.
вам нужно полностью отключить питание системы.

24 Linux Format Октябрь 2006


Виртуализация

запускаем VT- или SVM-виртуализацию с помощью Xen

2 Перезагрузитесь 3 Проверьте установку


Перезагрузите свой компьютер и выберите Xen – SUSE LINUX 10.1, когда Поздравляем – вы загрузились в Xen! Вы можете проверить это,
появится загрузочное меню Grub. Пролетит кое-какой текст, и ваш открыв консоль и запустив команду uname -a. Ваша версия ядра
компьютер загрузится как обычно. Не беспокойтесь, если исчезнет должна теперь походить на 2.6.16.13-4-xen.
графическая заставка вашей SUSE: это не является дурным знаком.

5 Откройте файл конфигурации 6 Настройте XP


Из командной строки скопируйте /etc/xen/examples/xmexample.hvm Установите «memory» в значение в МБ для этой ВМ, а «name» – в
в /etc/xen/winxp.hvm, затем откройте winxp.hvm в своем любимом уникальное значение, хотя бы «WinXP». Отредактируйте строку «disk»
редакторе от имени root. Мы должны сконфигурировать его, чтобы так, чтобы он указывал на winxp.img. Установите «cdrom» в значение
запустить Windows. /dev/cdrom, «boot» в d, «sdl» в 1, «vnc» в 0 и «vncviewer» в 0. Удалите
любые символы # из начала этих строк.

7 Создайте виртуальный жесткий диск 8 Финал: Windows на Linux!


Отведите вашей системе XP пространство на диске, Теперь выполните команду xm create winxp.hvm из каталога /etc/xen, и –
переключившись в каталог /etc/xen/images и выполнив команду если все будет нормально – появится окно с запущенным инсталлятором
dd if=/dev/zero of=winxp.img bs=1k seek=4096k count=1. Она создаст Windows. Будьте осторожны: этот шаг самый рискованный из всех;
виртуальный диск размером 4 ГБ, который можно будет рекомендуем сперва выполнить команду sync и убедиться, что буфер
смонтировать как loopback-устройство внутри Xen. вашей файловой системы очищен [также подразумевается, что
установочный диск Windows XP вставлен в CD-ROM, – прим. ред.].

Октябрь 2006 Linux Format 25


Виртуализация

Насколько быстра
аппаратная
виртуализация?
Легко утверждать, что «это» быстрее, чем «то» – но вот холодные,
неоспоримые факты.

П
олучить графики испытаний домене Xen (xenU) и внутри виртуальной
аппаратной виртуализации –
задача не простая: фактически,
машины VMware. Поскольку нас особенно
интересовала аппаратная виртуализация для Кодирование Ogg
потребовалось две недели на этих функций, большинство тестов исполь-
Intel native
установку, настройку, переустановку, копиро- зовало Windows XP в качестве гостевой ОС, Выполнялось:
Конвертировался 11.6 sec
вание и тестирование на обеих наших маши- за исключением теста кодирования Ogg: тут файл MP3 (6 МБ) Intel xenU
нах, чтобы получить то, что мы считаем использовалась SUSE 10.1. в формат Ogg 11.8 sec (98.3% native speed)
окончательными результатами. Кроме того, Помимо установки монитора виртуаль- с качеством 9 Intel VMware

не забывайте, что реально мы можем срав- ной машины и гостевой ОС, выполнялась (наивысшим). 14.5 sec (80% NS)
AMD native
нивать только Intel с Intel, а AMD — с AMD, небольшая дальнейшая настройка системы. Проверялось:
поскольку эквивалента AMD64 для подде- Как для VMware, так и для Xen выделялся Нагрузка на CPU; 15.7 sec
AMD xenU
рживающего VT чипа Xeon пока нету. Более одинаковые объем ОЗУ и место на диске
чем ниже, тем 15.7 sec (100% NS)
того, большинство этих тестов автоматически для работы, и от обоих требовалось пре- лучше AMD VMware
получают преимущества от дополнительных доставить виртуальную сетевую карту; обо- 17.8 sec (82.8% NS)
ядер там, где они доступны, так что баллы им дана свобода управлять процессорами
Intel будут с учетом четырех ядер по сравне- как они сочтут нужным. Одно небольшое
нию с двумя ядрами Athlon 64. исключение было сделано для Xen, запус- Вердикт Это одна из областей, где Xen
Мы провели в общей сложности восемь каемого на машине Intel, поскольку Intel должен быть на коне: была бы производительность
тестов, используя шесть сценариев и две VT, похоже, имеет проблемы с чипсетом процессора высока, а Xen просто работает как
машины. Каждый тест на каждой маши- Cirrus Logic, эмулируемым Xen (см. врезку тонкая прослойка между гостевой ОС и хостом.
не запускался на «родной» ОС, в гостевом «Заставь работать VT-графику»).

Интерпретация результатов Запуск Windows


Выполнялось: Intel native

Сравнивать «чистый» Intel с «чистым» Intel native «Холодный» запуск 19 sec


Windows XP. Intel xenU
AMD несправедливо: чип Intel имеет в 100%
два раза больше ядер и в восемь раз Intel xenU
Проверялось: 34 sec
Intel VMware (55.9% NS)
больше ОЗУ. Но мы можем рассмотреть 43.7% (NS) Смесь CPU, ОЗУ
различие в скорости между чипами Intel Intel VMware и жесткого диска – 23 sec (82.6% NS)
AMD native
и AMD, когда они работают виртуально. 45.5% (NS) прекрасный тест
Средняя скорость чипа Intel, управляемого AMD native реальной ситуации; 22 sec
AMD xenU
гостевой ОС через Xen, составила 43,7% 100%
от «чистого», по сравнению с 45,5% на AMD xenU чем ниже, тем 24 sec (91.7% NS)
лучше AMD VMware
VMware. На AMD результаты поднялись 63.6% (NS)
AMD VMware 23 sec (95.7% NS)
до 63,6% для Xen и 73% для VMware.
Это отчасти объясняется 73% (NS)
интегрированным в AMD контроллером
памяти: тогда нужно программно реализовывать одним устройством меньше. Но другой
Вердикт Неудача постигла VT от Intel,
фактор, заслуживающий внимания – тот, что тесты используют конфигурацию «из коробки», разница в скорости по сравнению с «чистым»
и оба приложения управляют ресурсами гостевых ОС в свободном полете. В случае с Xen вы оборудованием – почти вдвое. На AMD разница
можете, например, отдать виртуальной гостевой ОС весь процессор, и многопоточным тестам минимальна. Только VMware хорошо держит темп
будет куда вольготнее. на обеих платформах.

26 Linux Format Октябрь 2006


Виртуализация

Кодирование Windows Media OpenOffice.org


Выполнялось: Intel native Выполнялось: Intel native

Конвертирование 2:05 min Запуск OOo из 5 sec


видео на 720 точек Intel xenU «свежей» системы. Intel xenU
в DVD-качество при 6:30 min (32% NS) Проверялось: 10 sec (50% NS)
помощи Windows Intel VMware Intel VMware
Смесь CPU, ОЗУ
Media Encoder. 4:29 min (46.5% NS) 7 sec (71.4% NS)
ижесткого диска.
AMD native AMD native
Проверялось: Еще один хороший
Нагрузка на 3:05 min реальный тест; 5 sec
AMD xenU AMD xenU
видеоподсистему,
процессор и память; 7:33 min (40.8% NS) чем ниже, тем 13 sec (38.5% NS)
чем ниже, тем AMD VMware лучше AMD VMware

лучше 6:36 min (46.7% NS) 7 sec (71.4% NS)

Вердикт Xen на Intel дает менее 33% от Вердикт Запускаясь в первый раз,
скорости чистого оборудования Intel, в основном OpenOffice.org 2.0 буквально истязает жесткий
из-за слабой эмуляции графики. AMD справился с диск, но VMware и здесь умудряется вывернуться с
тестом лучше, благодаря виртуализованному очень приличным результатом.
контроллеру памяти.

Dhrystone Whetstone Заставь


Intel native Intel native
работать
Выполнялось: Выполнялось: VT-графику
Базовые операции 47,708 MIPS Базовые операции 36,565 MFLOPS
с плавающей точкой, Intel xenU с плавающей точкой, Intel xenU
Наших тесты
для оценки скорости 12,806 MIPS (26.8% NS) для оценки скорости 8,849 MFLOPS (24.2% NS)
Intel VMware Intel VMware обнаружили,
CPU. CPU.
что реализация VT
Проверялось: 8,810 MIPS (18.5% NS) Проверялось: 6,195 MFLOPS (16.9% NS)
AMD native AMD native от Intel в паре
Загрузка СPU; Загрузка CPU; число с Xen вызывала
возвращалось число 18,958 MIPS миллионов операций 16,040 MFLOPS
AMD xenU AMD xenU искажение
миллионов с плавающей точкой
9,352 MIPS (38.5% NS) 7,904 MFLOPS (49.3% NS) графики и даже
инструкций в в секунду
AMD VMware AMD VMware падения, когда
секунду (MIPS); (мегафлоп); чем
чем выше, тем лучше 12,836 MIPS (71.4% NS) выше, тем лучше 10,879 MFLOPS (67.8% NS) выполнялась
загрузка с CD.
Если
Вердикт Чистый Intel властвует в этой Вердикт Чип Intel превосходен при работе с вы столкнетесь
с такой же
категории, но при виртуализации заметно резкое «чистой» ОС, но отстает на виртуальных машинах.
проблемой,
падение. Для сравнения, AMD при виртуализации Результаты AMD близки к его результатам решением будет
замедляется не более чем на 50%. Dhrystone, лишь с небольшим отставанием. редактирование
файла
конфигурации

Floating-point x4 iSSe2 Пропускная способность ОЗУ вашей ВМ:


измените строку
«stdvga»
Выполнялось: Intel native Выполнялось: Intel native
на значение «1»,
Базовые операции 241,466 it/s Измерение 6,590 MB/s чтобы
SSE2 с плавающей Intel xenU поддерживаемой Intel xenU
принудительно
запятой для 42,183 it/s (17.5% NS) пропускной 2,958 MB/s (44.9% NS) включить
тестирования Intel VMware способности Intel VMware
стандартный
производительности 28,868 it/s (12% NS) памяти. 2,384 MB/s (36.2% NS) низкоцветный
мультимедиа. AMD native AMD native
Проверялось: режим VGA.
Проверялось: 53,534 it/s Загрузка ОЗУ; 7,345 MB/s Как только ваша
AMD xenU AMD xenU
Загрузка CPU; число гостевая ОС
инструкций в 26,316 it/s (49.2% NS) чем выше, тем 6,610 MB/s (90% NS)
AMD VMware AMD VMware установится
секунду (it/s); чем лучше
и будет настроена,
выше, тем лучше. 35,907 it/s (67.1% NS) 5,837 MB/s (79.5% NS)
вы можете
изменить stdvga
Вердикт Новое серверное ядро Woodcrest Вердикт AMD не намного обошел Intel в снова на 0,
для возврата
от Intel вызывающе быстро, но плохо уживается с «чистом» режиме, но «сокрушил» его как под Xen, к эмуляции
виртуализацией. У AMD падение куда менее так и под VMware. Опять-таки, аппаратная графической
драматичное. Самые лучшие показатели здесь у виртуализация контроллера памяти – системы Cirrus
VMware. существенное отличие. Logic.

Октябрь 2006 Linux Format 27


Виртуализация

Лучше
не бывает?
Следите за этой областью: впереди еще долгий путь, и аппаратная
виртуализация будет становиться лучше и лучше.

У
влекательные сами по себе, наши диаграммы показы- Пока Intel работает над следующим поколением VT, инновации
вают, что неоптимизированная аппаратная виртуализа- происходят и в программном обеспечении, которое обеспечивает
ция в ряде тестов отстает от ОС, запущенных в «чистом» прогресс виртуализации. Xen 3.0 принес с собой огромные улучше-
виде. Конечно, теперь можно запустить любую ОС поверх ния, включая поддержку VT и SVM, что позволило нам написать эту
другой ОС, но для первой попытки, производительность здесь еще статью. Он также ввел приличную поддержку SMP, большую произ-
недостаточная. Можно достичь хорошей скорости, вручную под- водительность памяти и порт для Itanium. Но есть кое-какие инте-
строив виртуальные машины и отведя им процессорные ядра, но ресные вещи, все еще находящиеся на стадии разработки, которые
это довольно утомительно — особенно сейчас, когда многоядерные могут увидеть свет в следующем крупном релизе Xen.
архитектуры скорее стандарт, чем исключение. Вдобавок ручная
оптимизация лишает виртуальную инфраструктуру свойственной Большие скачки ПО
ей гибкости. Поскольку Xen и VMware расширили свою поддержку Список интересных новых функций возглавляет виртуализован-
для VT и SVM, в частности, для лучшей обработки многоядерных ная графическая подсистема, использующая ПО, а не оборудова-
сценариев, мы надеемся, что наши цифры немного поднимутся, но ние. Чтобы обеспечить базовое ускорение графики, используются
в конечном итоге для достижения полноскоростной виртуализации разделяемые буферы кадров, и есть шансы, что мы увидим даже
нужно реформировать оборудование. виртуализованный OpenGL, доступный современным трехмерным
Как мы видели, виртуализуемый контроллер памяти – огромное графическим интерфейсам. Другая область, где, похоже, разра-
подспорье для AMD, поскольку программно требуется эмулировать
на одну вещь меньше.
Виртуализация высоко-
«Самые значительные скоростных устройств –
новые разработки – ключ к снижению общей
латентности системы, и
в ядре Linux.» неудивительно, что Intel
уже работает над сле-
дующей версией VT, где появится штука, называемая Directed IO и
разработанная, чтобы поддержать аппаратную виртуализацию мири-
адов наших обычных устройств ввода-вывода – клавиатуры, мыши
и устройств USB.
При наличии поддержки аппаратной виртуализации ввода-выво-
да останется решить только одну проблему: нужна виртуальная
графическая система, способная обеспечить гостевым машинам
приличное ускорение графики. Сейчас большинство гостевых ОС
привязаны к эмуляции графического уровня Cirrus Logic, которая
ощутимо тормозила наши тесты по части графики. При такой слабой
2D-графике безнадежно запускать на гостевой ОС графически бога-
тые приложения, так что трехмерное моделирование, игры и даже
окружение рабочего стола уровня 2.5D/3D, например, Xgl и Windows Чип Core 2 Duo от Intel с поддержкой VT превосходен
Vista, не поддерживаются. для виртуализации на чем угодно, от ноутбука до сервера.

28 Linux Format Октябрь 2006


Виртуализация

ботки ведутся интенсивно – качество обслуживания: разработчики


Xen хотят, чтобы виртуальные машины сами балансировали себя на Как добиться максимальной производительности
доступных процессорах, а также эффективнее использовали ОЗУ.
На будущее у разработчиков Xen есть ряд исследовательских Как мы видим, и Xen, и VMware двухпроцессорном
идей, которые они хотели бы реализовать в Xen, не последние из борются за достижение поддерживающем
которых – детерминированное воспроизведение и интерпозиция максимальной HyperThreading Xeon начните
ввода-вывода. Идея детерминированного воспроизведения – сде- производительности, когда с четырех vcups и затем
лать легковесный снимок виртуальной машины в процессе работы, работают на нескольких попробуйте перейти на восемь,
а затем вести журнал всего ввода и событий: если система рухнет, ядрах, но если вы готовы чтобы посмотреть, будет ли
разработчик сможет вернуться к снимку, шаг за шагом проиграть пожертвовать некоторой заметно повышение
гибкостью, вы можете производительности. Заметьте,
журнал и выяснить, где произошла ошибка. Интерпозиция ввода-
достичь максимума, что HyperThreading обновилась
вывода – еще одна интересная идея для отладки, позволяющая
вручную настроив ваши ВМ. с SSE3 («Новые инструкции
разработчикам эмулировать неисправности на уровне ввода-выво- Самое простое, что можно Prescott»). Раньше некоторые
да виртуальной машины, чтобы, например, смоделировать простой сделать – найти настройку приложения шли с HT быстрее,
сети или большие задержки в доставке пакетов. vcpus в файле а некоторые – медленнее,
конфигурации Xen и но после обновления набора
Следующий шаг изменить ее так, чтобы она команд скорость в худшем
Возможно, самые значительные новые разработки имеют место в соответствовала общему случае просто не изменится.
ядре Linux, а не в самом Xen. Xen очень близко подошел к слиянию числу ядер на вашей системе.
с основным ядром, которое сделало бы Xen доступным в каждом Если у вас машина с поддержкой
HyperThreading, вам, возможно, В наших тестах использовался новый
дистрибутиве как стандарт. Сейчас дистрибутивы, поставляющие
захочется ради эксперимента удвоить число основанный на Woodcrest сервер Magnetar
Xen – например, Red Hat и SUSE – должны включать его в свои ядра.
vcpus и выяснить, поможет тут HT или нет. X2 от Armari, и мы смогли достичь
Но планируется создание независимого от поставщиков интерфейса Итак, на одноядерном Athlon 64 установите максимальной производительности, только
к виртуализации ядра, тогда Xen, VMware и вообще любой разра- vcpus в 1, а на двухядерном, переопределив установки по умолчанию Xen.
ботчик виртуализации смогут включить свою систему в ядро Linux.
Чтобы это сработало, потребуется некоторая степень согласования
между Xen и VMware, и обе команды близки к этому. Их конечные домен Xen (известный как Xen0) имеет больше привилегий по управ-
цели совпадают, как во многом совпадают и их коды, но потребуется лению оборудованием, расплачиваться за это скоростью практически
некоторая работа, чтобы завершить объединение оставшихся 25% не придется – и это действительно очень заманчивая перспектива.
или около того, пока не будет готово совместное решение. Как только аппаратная виртуализация сумеет превысить 90%
Пока не планируется вводить совместимость виртуальных машин производительности по сравнению с «чистым железом» без ручной
VMware и Xen, что явилось бы логичным следующим шагом. Сейчас подстройки файлов конфигурации, уклоняться от виртуализации
формат ВМ, используемый Xen, полностью отличается от использу- станет практически незачем. Установка ВМ для базы данных и ВМ
емого в VMware, то есть виртуальную машину, созданную в одном для web-сервера на одном и том же оборудовании и передача дина-
приложении, нельзя запросто использовать в другом. мического назначения требуемых процессоров и памяти на откуп Xen
Xen уже включен как стандарт в SUSE 10.1 и Fedora Core 5, и, или VMware будет способствовать значительной экономии – и в сер-
вероятно, сейчас будет включаться и в другие дистрибутивы: Xen 3.0 верном зале, и дома. Вам больше не понадобится машина для Linux,
достаточно стабилен, чтобы считаться свободным от ошибок. Марк машина для OS X и машина для Windows, и использование сервера
Шаттлворт сказал, что он хочет видеть ряд захватывающих функций на 25% не будет больше считаться средним значением. Вместо этого
в следующем релизе Ubuntu, и мы думаем, что можно держать пари – мы сможем разместить все наши операционные системы на одном
Xen будет одной из них. Вдобавок и SUSE, и Red Hat обдумывают идею центральном компьютере дома и получать доступ к нашему рабочему
сделать Xen доступным по умолчанию в своих дистрибутивах, это даст столу в любом месте, где есть сетевое подключение. Обещания VT и
возможность за пять минут устанавливать новые гостевые домены, SVM станут реальностью – в смысле, виртуальной реальностью. LXF
поскольку машина уже будет виртуализована. Поскольку основной

А как же Qemu? Читайте наше руководство на следующем развороте!

Qemu – превосходная и давно известная системы (т.е. транслирует их программно), а не


программа эмуляции, которая позволяет виртуализует их (т.е. запускает их на самом чипе),
запускать Windows (или любую другую ОС) она всегда работала довольно медленно. Однако
внутри виртуальной машины. Несколько лет она ее создатель реализовал модуль виртуализации,
являлась приложением с открытым кодом, но позволивший Qemu работать гораздо быстрее – с
поскольку она только эмулирует операционные оговоркой, что это модуль закрытый.
Если вас не волнует моральное падение по
отношению к свободному ПО, Qemu с
бесплатным акселератором работает гораздо
быстрее. Мы хотели было включить Qemu в
наше тестирование, но уж очень странные
вышли результаты (невозможные или
маловероятные цифры). Тем не менее Qemu
работает, причем неплохо. Например, Xen
вовсю использует Qemu в режиме аппаратной
виртуализации, потому что эмуляция устройств
определенно реализована в нем лучше, чем
Qemu – отличный способ попробовать где-либо. Windows «гонять» можно было давно, но только сейчас для
дистрибутивы с дисков Linux Format.. Qemu нашлось достойное применение: запуск MikeOS.

Октябрь 2006 Linux Format 29


QEMU QEMU Виртуализация
Виртуализация без затрат
без затрат
на оборудование

QEMU: руководство
Пока еще не купили один из новых процессоров AMD или Intel? Не печальтесь – Xen не единс-
твенное средство виртуализации, доступное в мире Open Source.
Пол Хадсон передает микрофон Андрею Дубравину.

П
роверяя очередной раз свою электронную почту, я обнаружил ной машины. Загруженный в QEMU LiveCD Games Knoppix представлен
письмо с сообщением об ошибке в разрабатываемом мной на рис. 1.
приложении. Я стал изучать полученную информацию и сде- Теперь мы можем изучать LiveCD и при этом слушать свою люби-
лал вывод, что в моей рабочей ОС данной ошибки не наблюдалось. В мую музыку. Что же дальше? Загружаться с установочного CD мы
чем же дело? Немного поразмыслив, я пришел к следующему выводу: научились, но нам еще необходимо выделить место для самой ОС. В
в сообщении было указано, что мой респондент использовал Debian нашем случае ОС будет устанавливаться в образ диска. Существует
3.1; я использовал эту же ОС, но с обновленными библиотеками. несколько форматов для хранения образов, которые поддерживает
Можно было воспользоваться информацией об ошибке и исправить программа QEMU, мы воспользуемся самым распространённым – raw.
её, надеясь на то, что я все сделаю правильно и эта ошибка больше на Мне известно два способа создать пустой образ: с помощью ути-
появится. Кроме того, можно было послать новую версию программы литы qemu-img из состава QEMU и вручную, посредством утилиты dd.
пользователю, чтобы тот проверил её на своей системе, но согласится С использованием qemu-img можно создать образы любых форматов,
ли он? Могли обнаружиться и другие ошибки, связанные с несовпаде- поддерживаемых QEMU, утилита dd позволяет создать только обра-
нием версий библиотек. Что же делать? Я принял решение поставить зы формата raw. Если быть более точным, то с помощью dd можно
ещё одну ОС. Но мне не хотелось изменять таблицу разделов своего создать заполненный нулями файл, который и является пустым raw-
жесткого диска: это может повредить установленным ОС, да и кто образом. Разобраться с утилитой qemu-img не составляет труда, мы же,
знает, сколько их еще мне придется поставить? Я решил, что лучшим чтобы заодно узнать побольше о Linux, воспользуемся утилитой dd.
выходом будет воспользоваться виртуализацией, а именно – QEMU. Перед тем, как создать образ, необходимо определить его мак-
Эта программа является свободной и распространяется с исходными симальный размер. Размер выбирается с учетом места, занимаемого
текстами, исключение составляет модуль ядра kqemu (также извес- установленной ОС, размера swap-раздела (если он используется) и
тный как QEMU Accelerator), который используется для повышения объема свободного места, необходимого вам для работы. Я выбрал
скорости работы. Он доступен только в двоичном виде, его можно бес- размер равным 3 Гб. Формат raw не поддерживает сжатие, но если
платно использовать, но не распространять. создаваемый образ находится на разделе ext2/ext3 (или другой ФС,
Ну что же, приступим! Для начала необходимо установить QEMU. поддерживающей «дыры» – holes), то «сжатие» будет производиться
Найти последнюю версию программы и другую информацию, касаю- автоматически драйвером файловой системы (за счет преобразования
щуюся QEMU можно по адресу http://fabrice.bellard.free.fr/qemu/. Там длинных последовательностей нулей в более короткие), и размер обра-
же можно найти и модуль ядра kqemu. Этот модуль заметно повыша- за будет занимать меньше, чем 3 Гб. Для того, чтобы посмотреть реаль-
ет производительность, поэтому я советую его поставить, хотя QEMU ный размер, занимаемый файлом, можно выполнить команду ls -ls.
будет работать и без него. В своих экспериментах я использовал ОС Создание нового образа выполняется командой:
Debian 3.1 и QEMU версии 0.8.2. dd if=/dev/zero of=<путь_к_файлу_образа> count=3G
Модуль kqemu может работать в двух режимах: for user code и for
user and kernel code. Первый режим устанавливается по умолчанию,
для установки второго режима необходимо использовать ключ -kernel-
kqemu. Второй режим является более быстрым, но его использование
может привести к некорректной работе некоторых ОС.
Что касается оперативной памяти, выделяемой гостевой ОС, то по
умолчанию QEMU использует 128 Мб. Меня это число вполне устроило,
но если вы хотите поменять это значение, то можете воспользоваться
опцией -m, в качестве параметра этой опции передается размер ОЗУ в
мегабайтах.
При дальнейшем изложении, в примерах команд, опции -kernel-
kqemu и -m указываться не будут. Если в этом возникнет необходи-
мость, вы можете добавить их самостоятельно.
Для начала попробуем запустить какой нибудь LiveCD прямо
из текущей ОС. В качестве оного можно взять один из дисков LXF.
Команда для загрузки виртуальной машины прямо с CD выглядит сле-
дующим образом:
qemu -cdrom /dev/cdrom
Что может быть проще? После того, как выполнится эта команда, Рис. 1. Загружаем LiveCD Games Knoppix без отрыва от
перед вами откроется окно QEMU, играющее роль дисплея виртуаль- производства.

30 Linux Format Октябрь 2006


Виртуализация без затрат QEMU

на DVD
QEMU 0.8.2

к быстрому старту
Все просто: содержимое устройства /dev/zero (а это одни нули) должна выполняться уже с устройства hda, а не с cdrom, как в начале
копируется в файл образа, при этом количество копируемых данных установки. Команда для повторной загрузки будет следующей:
ограничено тремя гигабайтами. qemu -cdrom /dev/cdrom -hda <путь_к_файлу_образа>
Теперь, наконец, можно приступать к установке самой ОС. Для этого Как видно, исчезла опция boot, так что теперь загрузка будет произ-
можно воспользоваться следующей командой: водиться с устройства hda. После повторной загрузки можно закончить
qemu -cdrom /dev/cdrom -hda <путь_к_файлу_образа> -boot d установку системы.
Опция boot позволяет изменить устройство, с которого производит- После того, как система будет установлена, загрузите её можно с
ся загрузка. По умолчанию это hda (если устройства hda нет, то загруз- помощью команды:
ка будет производиться с устройства cdrom), для загрузки с cdrom qemu -hda <путь_к_файлу_образа>
необходимо указать опцию boot с параметром d. Теперь можно загру- Наконец, можно приступить к настоящей работе в установленной
жаться в виртуальную машину и приступать к установке ОС. Созданный ОС! На рис. 2 показана загруженная в QEMU ОС Debian 3.1 с рабочим
нами образ диска не содержит таблицы разделов, поэтому в процессе столом GNOME.
установки ОС необходимо осуществить разбиение диска. В нашем
случае создание разделов осуществляется через инсталлятор Debian.
Далее установка ОС производится стандартным образом.
После того, как первый этап установки будет пройден, вас попросят
перезагрузиться. При этом необходимо учесть, что повторная загрузка

Почему RAW?
QEMU поддерживает большое количество форматов дисковых
образов, в том числе, cow (User Mode Linux), vmdk (VMware 3/4), cloop
(сжатый loop-файл, обычно используется различными LiveCD) и qcow
(родной формат QEMU). Многие из них предоставляют ряд полезных
функций, например, реальное сжатие данных, динамическое
изменение размера, шифрование. Почему же я порекомендовал вам
именно raw? Ответ прост как и сам формат – Linux умеет работать с
ним, как с обычным дисковым разделом.
Для того, чтобы прочитать таблицу разделов файла-образа, дайте Рис. 2. Debian 3.1 в QEMU.
команду:
/sbin/fdisk -l -u <путь_к_файлу_образа>
Вы увидите что-то вроде:
Но это еще не все! Программа QEMU предоставляет возможность
... управлять своей работой из специальной консоли. Для переключения в
консоль команд нужно воспользоваться комбинацией клавиш Ctrl-Alt-2.
255 heads, 63 sectors/track, 0 cylinders, total 0 sectors С ее помощью можно подключить новое устройство, когда ОС уже
Units = sectors of 1 * 512 = 512 bytes загружена (например, для подключения устройства cdrom необходимо
ввести change cdrom /dev/cdrom), сохранить состояние виртуальной
Device Boot Start End Blocks Id System машины в файл (попробуйте savevm /debain.state), загрузить состоя-
<путь_к_файлу_образа>1 * 63 5542424 2771181 83 Linux ние виртуальной машины (команда loadvm) и многое другое. Для полу-
...
чение более подробной информации по консоли QEMU воспользуйтесь
Разделы образа можно смонтировать командой mount:
командой help.
mount -o loop,offset=32256 -t ext3 <путь_к_файлу_образа> /mnt/iso
Число 32256 получается путем умножения размера сектора (в
QEMU умеет значительно больше, чем может показаться на первый
нашем случае – 512 байт) на адрес начала раздела (параметр Start в взгляд – мы даже не упомянули о таких возможностях, как эмуляция
выводе fdisk; в нашем случае это 63). После того, как диск будет сети, загрузка ядра Linux, подключение USB-устройств и о многом
примонтирован, вы можете получить доступ к его содержимому, при другом. Думаю, с этим вы справитесь и без меня, ведь главное – дать
условии, что файловая система, используемая гостевой ОС, отправную точку. LXF
поддерживается ядром Linux хотя бы на чтение.

Октябрь 2006 Linux Format 31


ПОНАЧАЛУ
«Впервые поглядев на
Java, я подумал, что
это – какая-то шутка.»

32 Linux Format October 2006


Джим Хаганин LXF-Интервью

Железный
человек
Ненавидите .NET? Джим Хаганин [Jim
Hugunin] тоже ненавидел, пока сам не
попробовал – после этого он написал
IronPython. Что думает сообщество поль-
зователей Python по поводу его неуем-
ной жажды программирования?

Джим Хаганин любит программировать на Python – дина-


мическом языке, про который он впервые услышал от раз-
Интервью работчика Павла Кэртиса [Pavel Curtis]. Но ему нравится
ещё и расширять его, и его любопытство насчет Java заста-
вило его создать Jython, версию для Java-разработчиков.
То же произошло и с .NET – Джим просто не мог поверить,
что все настолько плохо, как говорят, потом убедился,
что не настолько, и создал IronPython для использования с такими API, как .NET и
Mono. Возможно, именно это любопытство и увело его от открытого кода, который
поддерживал Кэртис, и Хаганин сейчас работает в Microsoft. И, как он сказал Полу
Хадсону, не жалеет об этом.

Linux Format: Как вы считаете, что это за инстинкт в вас такой, которому все вре-
мя надо заново переделывать Python?
LXF ВИЗИТКА Джим Хаганин: Это сложный вопрос. До работы над Jython я трудился над про-
ектом под названием Numeric Python. Я тогда завершал обучение в MIT, и мне при-
ходилось делать множество научных вычислений. Раньше я пользовался языками
типа Matlab, и был серьезно расстроен тем фактом, что Matlab – отличный язык для
вычислений и для многого другого, что нужно ученым… но как только надо что-то
спрограммировать и требуются словари, списки и классы, он просто «ломается», и
мой код в итоге получался пугающе уродливым.

Джим Хаганин
В MIT я возился со многими другими языками программирования: одним из
Выпускник MIT, фокусник них был Scheme, а еще – Perl, Python, многие языки этого класса. И мне по-насто-
и серийный
исполнитель Python. Работал
в Xerox Parc ящему понравился Python, я начал развлекаться с его возможностью расширения
над AspectJ – расширением
Java. Пришел в
Microsoft в 2004, чтобы возг объектов – очень легко расширить Python новыми объектами – и вдруг обнаружил,
лавить
разработку IronPython и улуч
шить что могу добавлять в Python все эти числовые массивы, которые были основны-
поддержку в .NET динами
ческих языков. ми в Matlab. Добавляя эти числовые массивы, я чувствовал, что, программируя
Возраст
35 на Python, программирую на Matlab. Куда бы я ни метнулся – я чувствовал мощь
Национальность
Американец
Использует Linux Python. Вот так я и «подсел» на него впервые. И это была положительная сторона.
11 лет
Языки программирования
12
Количество ПК LXF: И он работает!
Ежедневное потребление коф 4
е 1 чашка ДжХ: Да, он отлично работает, и сегодня Numeric Python по-прежнему доволь-
но широко используется. Но вот расширение языка в C меня сильно расстроило.
Потому что, и это проходит красной нитью через всю историю, согласно терми-

Top Trumps courtesy: Winning


Moves UK Ltd Октябрь 2006 Linux Format 33
LXF-Интервью Джим Хаганин

нологии Microsoft... «управляемый язык» (managed language) в основном означает ности, меня поразило то, что все утверждали, что с динамическими языками он
язык, предусматривающий сборку мусора, рефлексию, безопасность типов и дина- работать не может. В некоторой степени это произошло из-за ранних эксперимен-
мическую загрузку. тов – попыток заставить Python и Perl работать на .NET, приведших к заключению,
Именно этими функциями всегда и обладал Python. А вот в С их нет. В этом что это невозможно; а мне очень захотелось узнать, как это Microsoft умудрился
огромное расхождение между миром С и миром Python, так что, когда бы я ни взял- сваять .NET настолько скверно, что он оказался даже хуже, чем JVM для работы с
ся писать расширения для Python на C, всегда расстраиваюсь, потому что вдруг ни с динамическими языками.
того ни с сего приходится снова задумываться об управлении памятью или о безо- Я решил написать небольшую, но содержательную статью «Почему .NET – ужас-
пасности типов. И когда я работал над этим проектом, наткнулся на Java. Впервые ная платформа для работы с динамическими языками». Это повысило бы мой
поглядев на Java, я подумал, что это какая-то шутка, потому что он работал ничуть рейтинг в сообществе пользователей Java, а это сообщество доставило мне без-
не быстрее Python. При выполнении сложных вычислительных задач, например, дну удовольствия и помогло мне понять структуру, когда я ею заинтересовался. Я
быстрого преобразования Фурье (Fast Fourier Transform, FFT) – такие алгоритмы С начал этим заниматься, и вышло так же, как при разработке Jython, когда я понял,
обрабатывает в сотни раз быстрее, чем Python – я попробовал это делать на Java, и что на самом деле все работает отлично. Было и кое-что, отличающееся от начала
там эти операции проходили на той же скорости, что и в Python. И тогда я подумал: разработки Jython: очень хороший генератор байт кода, поставлявшийся со средой
«Кому нужна смена платформы, если она не дает выигрыша по скорости?» времени выполнения. И производительность была очень хорошей – на 70% быст-
А потом – и это правда, хоть и кажется, что я это придумал, потому что сейчас рее, чем CPython.
работаю в Microsoft – именно Microsoft-версия Java убедила меня в ошибочности Так что мне кажется, я сделал это [IronPython] не из-за потребности снова и
этого мнения. Потому что Microsoft стала первой фирмой, создавшей очень быст- снова реформировать Python, а из желания ответить на вызов – что, дескать, это
рый, JIT-компилятор для Java, и я стал работать с ним, и мои показатели сразу же сделать невозможно…
изменились. Теперь те же серьезные и трудные вычисления на Java делались почти
так же быстро, как и на С. LXF: Так вот что сподвигло вас на это?
И я увидел все преимущества Java над С, ДжХ: Да, а также и то, что это сработало,
и мне стало интересно, смогу ли я заставить
O «БЕГСТВЕ» В MICROSOFT а потом покатилось – «Ну, это сработало, а
Python и Java работать вместе. А окончательно «Сообщество пользователей если я еще кое-что добавлю, может, будет еще
убедил меня приняться за Jython Аарон Уотерс лучше?»
[Aaron Waters], и я очень ему обязан. Я сказал:
Python сочло его реальным Так что я пошел тем же самым путем и
«Круто бы вышло», а Аарон Уотерс ответил: «Да шансом на то, что дела с .NET, надо было попробовать разные способы
тебе нипочём не удастся заставить Python рабо- создания многоязычной платформы. И поэтому
тать на JVM [Java Virtual Machine]». Я думаю, это
IronPython пойдут хорошо.» первым моим шоком было то, что формат байт-
была уловка Аарона, чтобы меня подначить – кода в Java предполагает, что ваш исходный код
знаете, вам говорите, что нечто невозможно сде- написан на Java. Когда вы генерируете отладоч-
лать, а это… воодушевляет. ную информацию, вы никогда не указываете, на каком языке написан этот код,
Я уселся за работу, попробовал запрограммировать, и одним из этих сказочных потому что 99% всех людей считает, что он написан на Java. Но в байт-коде для .NET
проектов стал Jython. Это – один лучших проектов, над которыми я работал, потому появился флажок, требующий: «Сообщите мне GUID, который вы зарегистрировали
что он становился все проще и проще, а это весьма нетипчно для проектов разра- для своего языка и его реализации, потому что мы рассчитываем на использование
ботки ПО. Обычно сначала идет нечто вроде медового месяца, когда все отлично различных языков». И снова это привело меня на тот же путь – когда отлично начи-
работает, а потом ты вдруг осознаешь: «Боже, я ведь забыл и про то, и про это!» нает работать то, о чем раньше говорили, что оно не может хорошо работать.
Я понял, что JVM обладает всеми функциями, которые я искал, подходящими
для Python и по производительности сравнимыми с С и С++. Я открыл для себя мно- LXF: А вы не ощутили, что создание Jython и IronPython вызвало враждебность к
го нового о том, как работает рефлексия, и загрузчики классов, и как вообще все вам со стороны сообщества пользователей Python?
это работает, и постепенно проект становился все проще. Я обнаружил, как хорош ДжХ: Вы знаете, нет. Но, честно говоря, я думал, что это могло бы произойти. Я
Java в качестве модели расширения, поэтому с того момента мне больше не нужен занимался Jython недолго, а потом ушел – но ушел нормально, оставив преемни-
был С, теперь у меня был этот замечательный мягкий переход. Когда мне нужно ка, способного продолжить проект, и был уверен, что и с лицензированием, и с
было сделать что-то, как в С, я мог это сделать на Java с той же самой производи- хостингом все в порядке, и другие смогут продолжать всем этим пользоваться и
тельностью. Вот почему я занялся Jython. Я думаю, это было чудесно. работать.
Всегда немного больно уходить из проекта, когда ты больше не можешь рабо-
LXF: Вы вышли из сообщества пользователей Python и занялись AspectJ. Откуда тать над ним, но это приходится делать, нельзя вечно быть привязанным к одному
же появился IronPython? проекту. Лично я так не могу, может быть, другие и могут. Гвидо [ван Россум –
ДжХ: IronPython начался просто для потехи. Я прочел все о новой общей языко- Guido van Rossum, создатель Python] поступает именно так, но даже он не связан
вой среде Microsoft, об этой новой классной штуке, которая появилась у Microsoft с Python слишком тесно, и он может так поступать благодаря большому пользова-
и может работать со всеми этими языками. И я над ними только смеялся, потому тельскому сообществу. Вокруг Jython существует отличное сообщество, хотя и не
что я знал, что Java достаточно эффективно работает с сотнями языков. В част- такое большое, как сообщество пользователей CPython, поэтому и работать так же
здорово у него не получается.
«Список проколов Однако никто не рассматривал IronPython как уход от Jython. Что мне нравится
длинный, Джим.» в сообществе Python – что это языковое сообщество, я думаю, наиболее открыто
Ответы нашего героя для различных реализаций. Они рассматривают язык – и это пошло от Гвидо – как
читайте на единую крутую штуку, но реализация может быть отдельной от языка, и они дейс-
www.linuxformat.co.uk/ твительно тепло принимают любые другие платформы. Python уже долгое время
hugunin.html. лучше всего поддерживает Windows среди «Р-языков», во многом благодаря [кон-
сультанту Microsoft] Марку Хэммонду (Mark Hammond), проделавшему огромную
работу, но в некоторой степени и благодаря своему сообществу, которое утверж-
дает: «Windows – отличная вещь, мы хотим, чтобы Python хорошо работал под
Windows. А еще мы хотим, чтобы он отлично работал на Linux и Mac...»
Jython рассматривали как еще одну возможность для Python глубже проникнуть
в ряды разработчиков Java. А что касается IronPython – похоже, его рассматрива-
ют так: «Вот отличная возможность продвинуть Python в новое крутое простран-
ство .NET». Я не чувствую, что разработчики Jython и IronPython предаются скорби.

34 Linux Format Октябрь 2006


Джим Хаганин LXF-Интервью

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

LXF: Интересно, какова оборотная сторона лицензии Shared Source License? Вы


говорите, что она короткая и ясная. А есть ли у нее недостатки, с точки зрения
открытого кода?
ДжХ: Тот факт, что она называется Частично Открытым кодом – я думаю, это
неудачно. Это скорее восприятие лицензии, а не реальность. Я не думаю, что с
лицензией что-то не так. Это – лицензия в стиле BSD, я сам их предпочитаю, но
Не один Джим связал
вы можете применить ее к коммерческому коду, и вы не обязаны открывать свой
свою жизнь с крупной
коммерческий код всему миру, так что получается, что терминология лицензии мне
корпорацией –
создатель Python, очень нравится.
Гвидо ван Россум,
работает в Google. LXF: Значит, она похожа на LGPL?
ДжХ: Больше всего она похожа на Лицензию BSD. А самой похожей, наиболее
близкой, наверное, будет MPL [Mozilla Public License].
Кто-то хотел бы моего возвращения – чтобы я все свое время посвящал Jython, но
есть и такие, кто хочет, чтобы я много чем занимался. LXF: Что вы думаете о работе IronPython на Mono?
ДжХ: Для начала – предисловие: все, что я вам сказал – мое личное мнение. А то,
LXF: А спрашивали: «Почему вы пошли в Microsoft?» что я вам скажу, тем более мое личное мнение. Когда я заговорил об IronPython,
ДжХ: Ну, не особо. Я представил IronPython сообществу Python в марте 2004 в я прежде всего сказал, что есть отличная реализация .NET. Она отличная по двум
качестве независимого консультанта, планирующего, чем заняться дальше. А затем, причинам. Одна – те огромные усилия, которые Microsoft в нее вкладывает, и я
через четыре-пять месяцев, я объявил на OSCon, что ухожу в Microsoft. Люди прос- вижу колоссальный импульс, исходящий оттуда, и она станет очень эффективной,
то видели IronPython, и знать не знали, что я ушел в Microsoft, они раздумывали: успешной и мощной. Вторая причина в том, что это – международный стандарт,
«А будет ли IronPython летать?». Они понимали, что это – крутая штука, но были стандарт ECMA/ISO, и это действительно стандарт, потому что есть люди, которые
не совсем уверены, что это произойдет. Я тратил свое время, занимаясь консал- создают его альтернативные реализации, а не выдумывают свой. Так что для меня
тингом – жить-то надо, и большая часть моего времени уходила на это. Так что, Mono – это частичное объяснение причины, по которой я, как разработчик языков,
я думаю, мой уход в Microsoft был воспринят как реальный шанс на процветание нахожу .NET особенно интересным. Это платформа, и она широка. В конце моего
проекта IronPython. первого выступления на OSCon 2004, IronPython работал только на моем ноутбуке.
Интересно, как все сложилось бы, поступи я по-другому. Если бы мое первое Единственным компьютером в мире, на котором он работал, был мой ноутбук с
заявление об IronPython звучало, как «Я ухожу в Microsoft», и люди не успели бы Windows. К концу моего выступления его уже скачали, и он начал работать на OS X
привыкнуть к одному до того, как узнали о другом, вряд ли реакция была бы такой, и Linux – причем эффективно работать. Мне это показалось потрясающим. А пар-
как сейчас. ни из Mono делают отличную работу. Производительность улучшается от релиза к
релизу, и мне нравится наблюдать за этим. Здесь я это вижу.
LXF: При работе над IronPython в MS вы прошли через GotDotNet [www.gotdotnet.
com] – схему частично открытого кода (Shared Source). LXF: А каково ваше будущее в Microsoft? Вы будете продолжать работу над
ДжХ: Да. IronPython или займетесь, ну, не знаю, SchemePython?
ДжХ: Нет, нет, лучше PhyrricPython, ладно?
LXF: И что вы думаете по этому поводу, есть ли разница – до и после Microsoft?
ДжХ: Не собираюсь сводить какие-либо счеты по этому поводу: GotDotNet не явля- LXF: PHPython?
ется моим любимым сайтом частично открытого кода (Shared Source). Я не считаю, ДжХ: Python на движке PHP? Вы что,
что он – из той же лиги, что большинство сайтов разработки программ с открытым/ хотите, чтобы я еще и о PHP порас-
частично открытым кодом. Я полагаю, что он просто нужен Microsoft, чтобы луч- суждал?!. LXF
ше работать в нем. Но Microsoft учится играть в этом пространстве. Это никогда не
было основным бизнесом Microsoft, но Microsoft делает все больше и больше – мы
создали WTL [Windows Template Library] и Flex Wiki [открытые проекты Microsoft,
размещенные на SourceForge, – прим. ред.].
Мы продолжаем выяснять, насколько эффективно Microsoft может играть в
этой области без тотальных изменений в своей основной деятельности. GotDotNet –
пример того, что впереди очень долгий путь, по моему личному мнению.

LXF: Но, по крайней мере, они уже в пути!


ДжХ: Тот факт, что GotDotNet существует, уже здорово. Это – большой шаг в вер-
ном направлении. Но я надеюсь, что мы зайдем намного дальше. Конечно, мы сме- Читайте
нили направление… у нас отличная обратная связь с нашими пользователями, еще!
многие из них не в восторге от GotDotNet. В списке рассылки полно сообще-
ний с жалобами по этому поводу. А мы ответили, может быть, лишь на поло- Размышлял ли
Джим о Groovy, что
вину из жалоб. Мы закрыли форумы, но продолжаем поддерживать списки
его расстроило в
рассылки, чтобы сохранить возможность эффективной дискуссии. Perl и что
Люди хотят, чтобы у нас был репозитарий открытого кода. Но на данный заставляет
момент у нас просто нет инфраструктуры, которая могла бы рационально и разум- продолжать
но выполнить эту работу, поэтому мы делаем релизы каждые две недели. Конечно, работу – полная
версия интервью на
это не то же самое, что иметь древо с открытым исходным кодом, но мы стараем- www.linuxformat.co.
ся, чтобы у пользователей сохранялось ощущение интерактивности – если вы что- uk/hugunin.html
то предложили, то через неделю это, вероятно, уже будет проверено и вы получите

Октябрь 2006 Linux Format 35


Новая
Учебник серия! Web-сервер Apache для
Apache
начинающих web-мастеров и администраторов

Apache:
ЧАСТЬ 1: По данным www.netcraft.com, более 60% web-серверов по всему миру работают под
управлением Apache. Причиной такой популярности является непревзойдённая гибкость и
мощь этого сервера наряду с высокой скоростью работы. Сергей Супрунов поможет вам при-
нять его на службу...

Немного истории рацию в /etc/Apache2, а главный файл конфигурации обычные директивы вида «имя значение».
В начале 90-х годов прошлого века основным серве- называется Apache2.conf. Файл httpd.conf тоже при- Секции тоже можно условно разделить на два
ром только-только зарождающейся Всемирной паути- сутствует, но используется в основном для обратной типа: «ограничители» и «условия». Первые ограничи-
ны был httpd, в разработке которого активное участие совместимости. А, скажем, Fedora Core придержива- вают область действия заключенных в них директив.
принимал Национальный Центр Суперкомпьютерных ется на сей счет более «официальной» точки зрения, Например, секция <Directory /var/www/special> будет
Приложений (NCSA). Однако, когда в 1994 году проект и размещает основной файл настройки в /etc/httpd/ влиять только на запросы файлов, размещенных в ука-
покинул один из ведущих разработчиков, работы были conf/httpd.conf, с той лишь разницей, что часть вспо- занном каталоге. Секция <Location /server-status> будет
свернуты. К счастью, NCSA был правительственной могательных настроек вынесена в отдельные файлы отвечать за запросы ресурса с URL вида http://yourserver.
организацией, и он не старался заполучить себе все в каталоге conf.d. ru/server-status/... Секция <Limit GET> окажет влияние
права, так что исходный код httpd был доступен всем В принципе, вариантов не так уж и много, и свой только на GET-запросы. К этому же виду секций можно
желающим. Благодаря этому даже после официально- конфигурационный файл, думаю, вы отыщете без отнести и виртуальные хосты, с которыми мы познако-
го закрытия проекта люди продолжали писать к серве- труда. В дальнейшем я буду ссылаться на него как на мимся чуть позже.
ру исправления, дополнения и т.д. Apache2.conf, так что не забывайте вносить соответс- Секции-условия позволяют применять те или иные
И вот в начале 1995 года Брайан Белендорф (см. твующие поправки... директивы только в том случае, если выполняется
LXF80) и Клиф Скольник, взяв за основу послед- Итак, заглянув в Apache2.conf, вы увидите там некоторое условие, например, если подключен конк-
нюю версию httpd, выпущенную NCSA, и применив несколько видов строк: ретный модуль: <IfModule prefork.c>. Причем влияют
к ней огромное количество найденных в сети патчей, начинающиеся с символа «#» - это комментарии, эти директивы на конфигурацию всего сервера (или
выпустили первую версию того, что ныне известно они игнорируются при анализе файла и служат лишь той секции-ограничителя, в которую вложена данная
под именем Apache [Собственно, название проис- для пояснения нижележащих опций; секция-условие).
ходит от «A patchy server» – пропатченный сервер, – начинающиеся с «<» - это синтаксические конс- Директивы отвечают за самые различные аспекты
прим.ред.]. С тех пор сервер активно развивается, и трукции, разделяющие конфигурационный файл на поведения web-сервера – от прослушиваемых портов
сейчас является одним из самых успешных открытых так называемые секции; до подключения модулей и обработчиков (handlers).
проектов. Обращайте особое внимание на директивы Include,
которые позволяют вставлять в текущий файл настрой-
Установка Ручная работа ки строки из других файлов (особенно этим «грешит»
В настоящее время идет разработка трех ветвей серве- Ubuntu). Другие важные для нас директивы будут рас-
ра – Apache 1.x (текущая версия – 1.3.37) и две ветки Менеджер пакетов, это, конечно, хорошо. Но какой смотрены по ходу дальнейшего изложения.
Apache 2.x (последние версии - 2.0.59 и 2.2.3 соответ- же настоящий линуксоид не попробует хотя бы раз
ственно). Конкретные дистрибутивы могут содержать в жизни поставить что-то из исходников? Благо, и
повод у нас для этого весьма благородный –
Первая страничка
более ранние версии. Перейдем к практике. Apache мы поставили и даже
хочется 2.2.3, а в репозитарии есть только 2.0.55.
Если Apache включен в состав вашего дистрибути- можем увидеть его тестовую страницу, если введем в
Так что – в путь!
ва или доступен для установки из репозитория, пред- 1. Скачайте архив с последней версией с сайта браузере http://yourdomain.ru (если вы ставите сервер
почтительно использовать эту возможность. Впрочем, http://httpd.apache.org: на той же машине, на которой работаете, то можно
при необходимости инсталляцию можно выполнить wget http://apache.rinet.ru/dist/httpd/httpd-2.2.3.tar.bz2 ввести http://localhost). Опять-таки, в зависимости
и из исходных кодов. В данной статье я использовал 2. Распакуйте его в свой домашний каталог: от дистрибутива, это может быть либо страничка с
версию 2.0.55, установленную в Ubuntu с помощью tar xvjf httpd-2.2.3.tar.bz2 «перышком» (см. рисунок), либо оглавление каталога
Synaptic. Про инсталляцию из исходных текстов рас- 3. Сконфигурируйте исходный код: (как в Ubuntu), либо просто строчка «It works!» (как
сказано во врезке «Ручная работа». cd httpd-2.2.3 в официальном пакете). Давайте посмотрим, откуда
./configure --prefix=/usr/local/apache22
она берется.
С помощью --prefix мы изменили каталог
Настройка установки, чтобы случайно не затереть уже
В конфигурационном файле отыщите строку
К сожалению, разработчики дистрибутивов пока не DocumentRoot - она укажет вам на каталог, который
установленный 2.0.55. С помощью опций enable/
пришли к единому мнению на счет того, как же луч- disable вы можете изменить «умолчательный» Apache считает корневым для сайта. В зависимости
ше именовать те или иные файлы. В «чистом» пакете, состав модулей, которые будут собраны в основном от дистрибутива и способа инсталляции это может
скачанном с Apache.org, предполагается, что основной двоичном файле. быть /var/www, $prefix/htdocs (где $prefix - каталог,
двоичный файл именуется httpd, главный файл конфи- 4. Наконец, традиционная сборка и инсталляция: куда выполнялась установка), /var/www/html. В нем
гурации – httpd.conf, а утилита управления - Apachectl. make вы должны найти файл с именем index.html. Если
То есть так, как это принято и в версиях 1.х. sudo make install # вы вернетесь к конфигурации и найдете строку
Однако в некоторых дистрибутивах применяют или DirectoryIndex, то убедитесь, что файл с таким име-
su -c ‘make install’
несколько иные схемы. Например, Ubuntu, Knoppix (да, нем и должен возвращаться на запрос, в котором
в дистрибутивах, отличных от Ubuntu
похоже, и все семейство Debian) размещают конфигу- конкретное имя ресурса не указано. Таким образом,

36 Linux Format Октябрь 2006


Apache Учебник

друг «бледнолицых»
чтобы вместо этой открывался ваш html-файл, прос- Для решения этой задачи предназначен модуль положения запрошенного файла, так что если в них нет
то замените им индексный (главное, чтобы он был mod_userdir. Если он подключен, то вы можете указать острой необходимости, лучше пользуйтесь общим фай-
доступен для чтения пользователю www-data, с пра- в конфигурации такой фрагмент (скорее всего, он там лом конфигурации. Полностью запретить эти файлы
вами которого обычно работает Apache). Впрочем, уже есть, но закомментирован): можно с помощью директивы AllowOverride None.
никто не запретит вам указать здесь свой каталог. UserDir public_html
<Directory /home/*/public_html> Виртуальные хосты
Автоиндекс Options Indexes Домашние странички пользователей достаточно удобны
А что Apache будет делать, если в каталоге отсутствует AllowOverride Indexes для задач «домашнего» уровня. Но Apache предоставля-
индексный файл? Это также зависит от настроек. По </Directory> ет более мощное средство размещения нескольких сай-
умолчанию сервер собирается с поддержкой моду- Здесь мы указываем, что при получении запро- тов на одном сервере (и под одним IP-адресом) - вирту-
ля mod_autoindex (для проверки выполните команду са вида http://yourserver.ru/~vasya нужно открывать альный хостинг. Рассмотрим простейший пример:
Apache2 -l или httpd -l, в зависимости от имени испол- индексный файл из домашнего каталога пользова- NameVirtualHost 127.0.0.1
няемого файла в вашем дистрибутиве), так что Apache, теля vasya, т.е. из /home/vasya/public_html. Ну а там <VirtualHost localhost>
используя его возможности, автоматически постро- Вася пусть делает все, что ему захочется. Чтобы он DocumentRoot /var/www/localhost
ит страничку-оглавление со ссылками на все файлы, не сильно шалил, его возможности можно ограни- </VirtualHost>
содержащиеся в запрошенном каталоге. С помощью чить в последующей секции <Directory> для катало- <VirtualHost toshiba>
директивы IndexOptions можно подстраивать вид этой гов, соответствующих указанной маске (в примере DocumentRoot /var/www/toshiba
страницы. мы устанавливаем ему опцию Indexes и позволяем ее </VirtualHost>
Данная функция удобна для создания каталога переопределять самому). Кстати, о переопределении Здесь мы указали, что у нас будут виртуальные
файлов или чего-то еще, организованного по принци- конфигурации... хосты по адресу 127.0.0.1, и дальше перечисляем
пу FTP-сервера. Но если вы считаете такую возмож- секции <VirtualHost> для каждого доменного имени.
ность излишне опасной (не всегда и не всем нужно Файл .htaccess В этих секциях обязательно нужно указать корень
показывать, что и где у вас лежит), то этот модуль Конфигурационный файл позволяет настроить любые сайта (DocumentRoot) и, при желании, любые другие
можно отключить: опции для любого каталога. Но здесь есть два неудобс- настройки. Разместив в указанных каталогах индек-
Options -Indexes тва – во-первых, для его редактирования нужны права сные файлы с различным содержанием, вы получи-
Кстати говоря, директива Options очень важна суперпользователя, и во-вторых, после каждого изме- те два сайта, открывающиеся в зависимости от того,
и для других аспектов безопасности. Обязательно нения нужно перегружать сервер (для чего, опять-таки, какое доменное имя будет указано в запросе.
ознакомьтесь с ней подробнее в документации. После нужно обладать правами root). Чтобы виртуальный хостинг работал правильно,
изменения конфигурации не забудьте перезагрузить Apache позволяет управлять параметрами доступа к все доменные имена должны быть описаны на сервере
сервер: Apachectl restart (в некоторых дистрибутивах каталогам более гибко - путем размещения в них спе- DNS (для тестирования будет достаточно файла /etc/
эта утилита называется Apache2ctl). циальных файлов, обычно с именем .htaccess. Если для hosts), а браузер клиента должен поддерживать прото-
данного каталога действует опция AllowOverride All, то кол HTTP/1.1, так как HTTP/1.0 не поддерживает поле
Домашние страницы в .htaccess-файле можно указывать практически любые Host: заголовка, в котором и передается имя домена.
Вы, имея привилегии root в системе, можете без огра- опции, допустимые для секции <Directory>. Однако А поскольку запрос направляется по IP-адресу, то для
ничений править свою интернет-страничку. Но что, администратор может ограничить эти возможности, Apache это поле - единственный способ узнать, какой
если вы хотите предоставить такую возможность свое- задав более жесткие ограничения, как в примере выше. же из сайтов запрашивается клиентом.
му другу, который зарегистрирован в вашей системе, Учтите, что использование .htaccess существенно Изложенных сегодня сведений должно быть доста-
но без прав суперпользователя? Не давать же ему повышает нагрузку на сервер – для каждого запроса точно, чтобы начать работать с Apache и создавать
неограниченный доступ? серверу придется проверять наличие этого файла в каж- несложные статические странички. Главное - не бой-
дом каталоге от корня файловой системы до месторас- тесь экспериментировать! LXF

Октябрь 2006 Linux Format 37


OSDL

Что

Matt Herring
сделала
для нас OSDL?
Кажется, что The Open Source Development Labs (Лаборатория Разработки Открытого Кода)
сидит на нескольких стульях – но знает ли кто-нибудь, чем конкретно она занимается?
Расследование ведет Грэм Моррисон.

П
рочтя интервью со Стюартом Коэном [Stuart Cohen] пару номеров группы разрабатывают исключительно подробные спецификации; ею нанято по
назад, вы, наверное, захотели узнать побольше о его нанимателе. меньшей мере 10 разработчиков из тех, что напрямую влияют на функции Linux-
Коэн – исполнительный директор OSDL, организации, образованной систем, используемых нами ежедневно – половина годового бюджета лаборато-
в 2000 г. консорциумом больших компаний, в том числе, CA, Hitachi, рии, а это $5 млн., тратится на развитие технологий.
HP, IBM, Intel и NEC. Эти фирмы предоставили финансирование и получили центр Но от большого бизнеса не уйдешь. Любое дело OSDL, будь то тестовая лабо-
разработки Open Source, беспристрастный и некоммерческий, который посвящен ратория или сервисы технической поддержки, движимо желанием вывести Linuх
продвижению Linux (на что многие из них делают ставку) в большой бизнес. Это на уровень предприятий. Фирмы-учредители задались направлением на совер-
мир подготовительных комитетов и спецификаций, рабочих групп и официальных шенствование преимуществ открытого кода. Это означает, что они могут управ-
документов: частично – мозговой центр, частично – глобальный консорциум, и час- лять политикой разработки и предлагать области исследований – если в этом
тично – Международное Спасение. заинтересован каждый член. OSDL не отстраняет от дела ни своих членов, ни
«OSDL» звучит несколько отчужденно, и тем не менее лаборатория сильно другие открытые инициативы.
влияет на большое сообщество Linux – не только потому, что платит зарплату Хотя OSDL и «открытая», но все же оставляет ощущение некоторой загадоч-
Линусу Торвальдсу, но и потому, что эта организация позиционировала себя как ности. Поэтому мы собираемся присмотреться к некоторым сотрудникам OSDL
«центр тяжести» (термин, от которого она теперь дистанцируется) Linux, в кото- и крупнейшим ее проектам и решить, что же служит стимулом для этой органи-
рый мы все вносим свою лепту. OSDL открыта для всех, а не только для многона- зации. Для сначала сразу предупредим: поскольку это большой бизнес, то будет
циональных конгломератов. Отдельные личности могут свободно присоединиться много акронимов. Мы пытаемся поменьше употреблять их, но все же их будет
и принять участие во всевозможных рабочих группах. много. С другой стороны, мы постарались свести к функциональному минимуму
За лабораторией стоят хорошо продуманные и хорошо финансируемые про- использование слова «рычаг», так что можете читать без опасения запутаться.
екты. Например, она сформировала фонд юридической защиты для помощи в
борьбе пользователей Linux против угроз возбуждения судебных дел, ее рабочие

38 Linux Format Октябрь 2006


OSDL

Хакеры
высокого полета
Вот реальные причины важности OSDL.

О
дной из причин известности OSDL является то, Эндрю Мортон присоединился к Линусу в OSDL через Трудоустройство Линуса Торвальдса
что в ней работают высококлассные хакеры месяц, в июле 2003 г. Мортон – «хранитель» ядра 2.6 дало OSDL рекламную раскрутку.
ядра. Отчасти это потому, что она любит фан- (Торвальдс работает над текущей версией ядра), то есть
фары, а отчасти потому, что никто не сможет лицо, ответственное за включение заплаток от третьих лиц
игнорировать организацию, трудоустроившую Торвальдса. в древо ядра текущей версии. Недавно, он, к недоумению
Альтруистический аспект мотивации найма на работу Линуса многих, предложил посвятить следующий цикл разработки
Торвальдса, Эндрю Мортона и иже с ними в том, что OSDL ядра исправлению ошибок, закравшихся в текущую версию.
хотела предоставить им условия разработки без конфликтов Было очень ценно, что два основных разработчика Linux
с другими обязанностями, чтобы эти два разработчика смог- работают в одной компании, причем бок о бок. Но в августе
ли целиком сосредоточиться на разработке ядра Linux. Но Мортон ушел в Google. Это может нарушить нейтральность,
нельзя отрицать, что OSDL получает свою долю аплодисмен- которой разработчики наслаждались в OSDL, где отсутство-
тов, когда люди видят ее логотип на их визитных карточках. вало прямое давление со стороны крупных фирм, являю-
Нет ни одного пресс-релиза от OSDL, который бы не вклю- щихся частью OSDL.
чал следующую сноску: «OSDL – спонсор Линуса Торвальдса,
создателя ядра Linux – призвана ускорить рост и адаптацию Теплица для ядра
операционных систем на основе Linux на предприятиях». Без OSDL получила своего второго сотрудника в январе 2005 г.,
сомнения, немалой частью оказываемого ей доверия OSDL когда ее ряды пополнил Эндрю Триджелл, ведущий разра- Эндрю Мортон все время пребывания
обязана найму Линуса Торвальдса, человека, с которого все ботчик Samba – одного из самых важных существующих в OSDL занимался ядром.
началось. До перехода в OSDL в июне 2003 г., Торвальдс проектов с открытым кодом. Без Samba мы не могли бы
был сотрудником корпорации Transmeta (члена OSDL), раз- совместно использовать любые файлы или принтеры с
решавшей ему в рабочее время повозиться с ядром Linux, Windows-машинами в локальной сети, а это необходимое
помимо разработки ее собственного ПО. Переход позволил звено при развертывании Linux в любом офисе или на пред-
Торвальдсу сосредоточиться исключительно на основных приятии. OSDL позволила Триджеллу работать над ней пол-
компонентах ядра Linux. ный рабочий день, но, завершив запланированные работы
Итак, Линус впервые стал официально получать зарпла- над четвертой версией комплекса приложений Samba, он ее
ту за сопровождение ядра Linux и координацию процесса покинул и вернулся на свою предыдущую должность в IBM,
разработки. Стюарт Коэн сказал тогда: «Принятие Линусом оставаясь лидером проекта Samba. Уходя, Триджелл выра-
предложения присоединиться к нам подтверждает важность зил благодарность OSDL за ее участие в проекте: «Обладать
нашей миссии. OSDL – единственная организация, в которой временем, позволяющим сосредоточиться только на одном
разработчики Linux, потребители и дистрибьюторы могут проекте, действительно здорово. Большое спасибо OSDL за
участвовать на равных. Дополнение лаборатории взглядами и участие и поддержку разработки Samba».
руководством Линуса увеличивает нашу значимость для всех
трех групп». Тридж ушел, как только закончил
работу над Samba 4.

Проект Open Driver


В поисках новых альтернатив, OSDL часто затевает и драйверов. Число категорий драйверов стало заметно
финансирует проекты. Наиболее масштабные ее больше изначальных пяти (носители, сеть, принтеры,
кампании выросли из поддержки открытого форума видео и звук), охватив большинство других настольных
San Francisco Linux World Expo в августе 2005. Форум устройств; среди них – сканеры, MP3-плейеры и
был посвящен обсуждению препятствий разработке цифровые камеры.
драйверов с открытым кодом, и на нем присутствовало Оригинального контента на сайте не слишком много.
много разработчиков драйверов ядра. Форум обозначил Вместо этого, каждая категория предоставляет список
потребность в централизации разработки драйверов – самых свежих сетевых ресурсов по вашему
явно в унисон с философией «центра притяжения» оборудованию. Цель сайта в том, чтобы разработчики
OSDL, и лаборатория взяла на себя создание web- драйверов, начинающие свой путь в Linux и Open
сайта, способного играть роль центра разработки Source, имели центральный репозиторий и понимание,
драйверов. с чего начать. Проект Open Driver содержит свои
В результате возник проект Open Driver, с домашней собственные wiki и списки рассылки, а также учебный
страницей http://developer.osdl.org/dev/opendrivers. семинар, в этом году совпавший с OSCon в Портленде,
Сайт содержит новейшую информацию, необходимую штат Орегон.
для создания и установки ваших собственных

Октябрь 2006 Linux Format 39


OSDL

то есть не более 30 секунд на отказ в год. Даже при знамени-

Устанавливая той безопасности Linux необходимо многое изменить, чтобы


гарантировать такое качество.

В январе 2002 г. OSDL сформировала рабочую группу CGL

стандарты
(для коллекционеров акронимов – CGL-WG), чтобы создать
для Linux комитет по телекоммуникациям. Основная задача
группы – утверждение стандарта, который обеспечит доступ-
ную и высокоэффективную операционную систему Linux с
прекрасной поддержкой, способную напрямую конкуриро-
вать с готовыми и заказными проприетарными решениями,
получающими все большее распространение. Участие в ней
приняли 24 организации – члены OSDL, а учредительские
Если для внедрения Linux на предприятии требуется пора- обязанности легли на плечи IBM, MontaVista (известной бла-
ботать с бумагами, то OSDL как раз и может здесь помочь. годаря своей real-time версии ядра Linux), Intel и NTT Network
Service Systems Labs, возглавляющей подкомитет разработки.
К настоящему моменту имеется пять версий спецификации.

К
ак и следовало ожидать, OSDL заинтересована Версия 3.1 вышла в июне 2005. Заговорщики из OSDL работа-
в коммерческом успехе проектов, которые она ют над версией 3.2 и намерены выпустить ее в этом году.
финансирует и в которых участвует. В частности, В спецификации CGL-WG девять основных положений,
за последние несколько лет созданы три рабочих среди которых:
группы, где представители фирм-членов OSDL встречаются
для проработки спецификаций и применяют свои техничес- 1 Соответствие стандартам
кие знания для решения наболевшего вопроса об ускорении Это действительно залог нормальной работы CGL-WG с дру-
внедрения Linux в трех областях. гими стандартами Linux и индустрии телекоммуникаций.
Наверху – рабочая группа Carrier Grade Linux (CGL), про- Сюда включаются Linux Standard Base (LSB), POSIX, IPv6 и PCI
талкивающая Linux в бурно разрастающийся телекоммуника- Industrial Computer Manufacturer’s Group.
ционный бизнес. Посередине – группа Data Center Linux (DCL).
Ее любимое слово – «рычаги», и она старается открыть для 2 Платформа
Linux рынок вычислительных центров крупных корпораций. И, Любая CGL-система накладывает специфические требования
наконец, группа Desktop Linux (DTL) сосредоточена на том, что на оборудование. Сюда входит «горячая» замена, удален-
понятно нам всем, а именно на продвижении Linux в настоль- ная загрузка, бездисковое выполнение приложений через
ные среды, типичные для офисов. сеть и архитектура Advanced Telecom Computing Architecture
[Продвинутая архитектура телекоммуникационных вычисле-
Для телекоммуникаций ний – серия спецификаций промышленных стандартов, раз-
Внедрение в области, традиционно использующие проприе- работанных для следующего поколения отказоустойчивого
тарные решения – одна из главных задач OSDL, и есть одна оборудования и ПО].
область, в которой можно особенно поживиться. Это индус-
трия телекоммуникаций. Здесь традиционно вкладывают- 3 Работоспособность
ся средства в проприетарные оборудование и программное Поддержка системы в рабочем состоянии, чтобы все ее сер-
обеспечение, и безопасная, стабильная и расширяемая Linux- висы были всегда доступны, очень важна, и конкретным пос-
альтернатива принесла бы немало выгоды. Решение от OSDL тавщикам приходится вносить множество изменений в ядро
известно как Carrier Grade Linux (CGL – отказоустойчивый Linux. MontaVista – хороший пример дистрибьютора, само-
Linux): это спецификации системы, надежной более чем на стоятельно переделавшего ядро Linux для удовлетворения
99.999% – всего пять минут на отказ в год. Но некоторые уста- повышенным требованиям.
новки требуют даже большей надежности, около 99.9999%,
4 Удобство обслуживания
Машина, работающая постоянно, должна иметь возможность
Почему важны спецификации сервисного обслуживания, а значит, и поставлять в процессе
работы материалы для диагностики, в форме дампов актив-
ного ядра или динамической отладочной информации.
Для корпорации среднего размера любые инвес-
тиции в новую технологию связаны с удов-
летворением большому списку требований. 5 Кластеризация
Необходимо проверить спецификации любого Запуск приложений на кластерах часто является единствен-
будущего оборудования, а каждый производи- ным способом получения высоких уровней доступности, тре-
тель устройств будет предоставлять свои собст- буемых CGL. Кластер обеспечивает повышенную производи-
венные спецификации. Вот тут и появляется тельность и резервирование использованием параллельных
OSDL. Она избавляет дистрибьюторов Linux от ресурсов. Кластеризация настолько важна, что породила свой
проблем создания своих собственных специ-
собственный проект OSDL.
фикаций, передавая все полученные из опыта
Остальные четыре положения спецификации CGL каса-
знания в комитет, занятый формированием спе-
ются производительности, безопасности, расширяемости и
цификаций. И все это делается открыто – любой
может загрузить последнюю версию каждой создания инструментов поддержки приложений. HP сделала
спецификации, прочитать протоколы совещаний хороший шаг в начале этого года, зарегистрировав Debian
После учета всех требований OSDL к ядру
и списки рассылки рабочих групп, предоставля- Linux обновились и спецификации Sarge под CGL версии 2.02, что привело к появлению внутри
емые OSDL. совместимости DCL. Debian подпроекта по созданию отказоустойчивого дистрибу-
тива Linux, удовлетворяющего спецификации CGL.

40 Linux Format Октябрь 2006


OSDL

OSDL хочет выглядеть скорее сторонником Linux корпо- выбора Linux ИТ-профессионалами. Это не экономия денег
ративного уровня, уровня вычислительных центров, а не про- и не повышенная безопасность, как предсказывали многие
талкивать открытый код на машины меньшего размера или эксперты, а чей-то совет. Люди использовали Linux и были
даже на настольные компьютеры. Частично это связано с тех- им так довольны, что рекомендовали коллегам. Электронная
ническими аспектами CGL, а также с тем, что OSDL содержит почта, офисные инструменты и web-браузеры были признаны
и управляет рабочую группу DCL, цель которой – установка критически важными приложениями, а дистрибутив Ubuntu
Linux в хранилищах данных с водяным и воздушным охлажде- оказался самым популярным. Естественно, что результаты
нием некоторых крупных корпораций, многие из которых, так опроса (см. www.osdl.org/dtl/DTL_Survey_Report_Nov2005.pdf)
уж вышло, являются членами OSDL, но есть и фирмы вроде вызвали много разговоров в сообществе Linux.
Siemens AG и Unisys.
Молчаливый партнер
В базе данных – пингвины?! Критиковать OSDL за разработку одной спецификации за дру-
Поскольку CGL-спецификация очень тщательна, рабочая груп- гой без написания хотя бы строки кода легко, но как раз это Хотя Стюарт Коэн и сказал, что
па DCL может использовать ее в качестве стартовой точки для и необходимо корпоративному рынку, на который OSDL пыта- выражение «центр тяжести» было
высококлассного центра обработки данных. Вычислительные ется пробиться. Что нам нравится меньше, так это отсутствие шуткой, но куда денешься – оно
центры, объединяющие корпоративные сервера приложений, диалога с большим сообществом Linux – обычные пользова- попало даже в последнюю CGL-
спецификацию 3.1.
базы данных и т.д., лежат в сфере ИТ с высокими стандарта- тели Linux остаются за бортом любых разработок, выполняе-
ми. Цели группы DCL разбиты на три области деятельности, мых для соответствия большому бизнесу. Хороший пример –
обозначенные как Передний край (Edge), Приложения, База написание данной статьи, потому как даже нам было трудно
данных. Группа определяет «Край» как сервер, где наряду получить комментарии или отзывы от людей из OSDL. А како-
с web-сервисами имеются edge-приложения – в основном вы шансы среднего раздраженного пользователя Linux?
ради улучшения производительности путем использования Если бы OSDL не твердила столь часто, что она является
промежуточного сервера для передачи запросов к сервисам, «центром тяжести» разработки Linux, мы были бы счастливы
запущенным на других машинах. Приложения и База данных
в объяснениях не нуждаются.
Плодом работы группы является версия 1.2 документа, «И верно, группа Desktop Linux
озаглавленного «Цели и Возможности DCL» и впервые выпу-
щенного еще в 2004. Это огромный документ с добавками от
дает возможность участия для
Sun, HP, IBM и Intel. Он похож скорее на техническую специ- всего Linux-сообщества.»
фикацию, в нем приводится список более 300 возможностей,
которые, как считает группа, важны для принятия Linux пред- причислить OSDL к компаниям вроде CollabNet, продвигаю-
приятиями. Например, приоритет номер один – возможность щей открытые стандарты и изменяющей способ ведения биз-
расширения до 16 CPU (пожалуй, уже маловато), асинхрон- неса крупными предприятиями. Но это не так. OSDL финан-
ный сетевой ввод/вывод и «горячая» замена процессоров, сируется несколькими крупнейшими фирмами ИТ-бизнеса и
памяти, а также устройств PCI/PCI-X. наняла двух самых влиятельных из имеющихся разработчи-
ков Linux. Если OSDL желает рассеять дымовую завесу, скры-
На рабочем столе вающую ее действия и мотивы, то ей необходимо уделять
Не удивительно, что самая молодая рабочая группа OSDL больше внимания взаимодействию с сообществом. Когда это
нацелена на настольный Linux. OSDL, видимо, понадеялась, случится, Linux действительно созреет для предприятий. LXF
что образование группы – в начале 2003 г. – будет ответом на
критику заботы о внедрении Linux только на корпоративный
рынок. И верно, образование рабочей группы DTL дало всему
сообществу Linux возможность включиться в то, в чем оно
имеет непосредственный опыт, и OSDL признает, что потен-
циальный размах этого проекта может затмить обе другие ее
инициативы. Но группа отнюдь не чурается предприятий, и
Desktop Linux включает области, которые вы не сразу отнесе-
Проекты, о которых стоит знать...
те к открытому рабочему столу – например, киоски и рабочие
OSDL наделала много шума из продвижения Linux основных разработчика ядра) и выступила с
станции с фиксированным набором функций. на корпоративный рынок, но она не только готовит Сертификатом Разработчика о Происхождении. Он
Вы будете разочарованы, если ожидали больше действий спецификации. Вот несколько более приземленных состоит из нескольких параграфов, снабженных
и меньше создания спецификаций – количество бумажной проектов: цифровой подписью, чтобы корректно описать ваш
работы остается обильным. DTL формулирует свою миссию вклад в древо исходного кода ядра.
как «работа с сообществом Open Source с целью выявления Создание Фонда Юридической защиты Linux
большого набора моделей настольного Linux, разработки В начале 2004 г., когда была серьезная угроза Проект Patent Commons
спецификации и предоставлению рекомендаций.» Вы можете судебных исков со стороны группы SCO ко всем Законодательство о патентах на ПО изменило лицо
найти спецификацию версии 1.0 на web-сайте OSDL, и в отли- использующим ОС Linux, OSDL создала Фонд разработки приложений в США и вызвало резонанс
Юридической Защиты Linux, выделив $10 млн. для в остальном мире. Это еще одна угроза будущему
чие от спецификаций CGL и DCL, она удобочитаема!
помощи конечным пользователям, втянутым в разработки приложений с открытым кодом. Проект
В настоящее время DTL работает при содействии пред-
битву с SCO. был создан в августе 2005 г. после внезапного
ставителей AMD, Novell, Intel и IBM. Одной из их наиболее ливня патентов, пожертвованных сообществу Open
интересных работ является не код, а результаты исследова- Сертификат разработчика о Происхождении Source крупными организациями вроде Sun
ния, проведенного в октябре 2005 г., чтобы определить фокус (Developer’s Certificate of Origin) Microsystems, IBM и Nokia. Проект, как и другие
действий рабочей группы. ИТ-профессионалам, внедрившим Другим результатом тяжбы с SCO стало понимание инициативы OSDL, разработан для того, чтобы
или думающим о внедрении настольного Linux в своих учреж- необходимости отслеживания вклада отдельных играть роль центра и способствовать использованию
дениях, были заданы вопросы об использовании Linux. Было программистов в разработку ядра. OSDL приняла открытых патентов на законных основаниях.
опрошено 3300 респондентов, и результаты удивили многих. меры (и не удивительно, коли в ней работают два
Самым неожиданным оказался ответ на вопрос о причине

Октябрь 2006 Linux Format 41


Raid
RAID

Машины –
в RAID!
Достала низкая производительность или частые отказы SATA? Объединение ваших
жестких дисков может улучшить скорость их работы и повысить надежность,
пишет Нейл Ботвик.

К
то-то может сказать, что название напоминает оружие мас- вашего корневого раздела, так что его тоже можно разместить на
сового уничтожения летающих насекомых, но RAID – заме- RAID. Посмотрим правде в глаза – нет особого смысла в добавлении
чательный способ улучшить производительность ваше- скорости и безопасности, если это не затрагивает вашу операционную
го компьютера и повысить безопасность ваших данных, систему.
используя только ПО, которое у вас уже есть. Если вам нужна лучшая
производительность диска, читайте дальше. Пространство, темп, мощь
Изготовители дисководов снизили сроки гарантии на стандартные Использование RAID сперва было нацелено на повышение надежнос-
ATA- и SATA-диски, и теперь зачастую дают всего лишь год. Выходит, ти, поскольку массив сохраняет работоспособность, если один диск
диски стали менее надежными? У нас нет способа узнать это наверня- выходит из строя, и скорости, поскольку размещение одних и тех же
ка, но если вы хотите, чтобы ваши данные уцелели в случае проблем с данных на более чем одном диске снижает время доступа и чтения.
диском, серьезно подумайте о RAID. Этот термин первоначально озна- «Избыточный» не означает «ненужный»; это слово указывает, что дан-
чал Redundant Array of Inexpensive Disks (избыточный массив недорогих ные хранятся более чем на одном диске, и если один из дисков поло-
дисков), довольно обманчивое имя, поскольку RAID в те времена был мается, данные будут по-прежнему в безопасности. Отдельные диски
вовсе не дешев. Акроним позже был изменен на Redundant Array of могут считаться избыточными, но не массив в целом. Но если назвать
Independent Disks (избыточный массив независимых дисков). его Array of Redundant Independent Disks (массив избыточных независи-
Концепция дискового массива заключается в объединении двух мых дисков), акроним будет скорее напоминать дезодорант [«arid» по-
или более устройств (дисков или разделов) так, чтобы они восприни- английски «сухой», – прим. пер.], чем убийцу насекомых. В наши дни
мались системой как одно устройство. Вашими физическими устрой- RAID также используется и как средство комбинирования различных
ствами могут быть /dev/hda1 и /dev/hdc1, но большая часть ОС и при- дисков в один модуль, хотя LVM (см. практикум по этой теме в про-
ложения увидят /dev/md0. С точки зрения системы диск только один. шлом выпуске), вероятно, подходит для этого лучше.
Фактически же это комбинация двух и более устройств с разбросанны- Далее мы покажем, как опробовать RAID самому. Вам понадобится
ми по ним вашими данными. пара лишних разделов, желательно на различных дисках. Вы можете
Linux обрабатывает все это, когда ядро только загружается, распоз- попробовать и два раздела на одном диске, но не увидите реальных
навая, что ваши диски содержат признаки RAID, и создает устройства преимуществs. Но сначала мы слегка углубимся в принципы работы
/dev/md. Это происходит на раннем этапе загрузки, до монтирования RAID.

42 Linux Format Октябрь 2006


RAID

Как работает RAID


Плутон – планета? Курица – птица? RAID 0 – действительно RAID?

Е
сть несколько уровней RAID, различающихся требованиями к
минимальному числу дисков и компромиссом между произ-
водительностью, надежностью и дисковой памятью, которые
они обеспечивают. Заметьте, что хотя RAID часто использу-
ется на серверах с устройствами, допускающими горячее подключение
и позволяющими выполнять на лету замещение неисправных приво-
дов, без перерыва в работе, он не сделает ваши диски волшебным обра-
зом поддерживающими горячую замену. IDE-диски нельзя заменять «на
лету», а SCSI – разве что при наличии соответствующего интерфейса и
драйверов. У вас либо есть дисковый контроллер с поддержкой горячей
замены, либо нет; RAID не добавит этой способности вашей системе, так
что не испытывайте ее. Вы можете остаться со сгоревшим диском/конт-
роллером, или, в технических терминах, с невозможностью входа.
Наряду с реализацией на различных уровнях, RAID может быть аппа-
ратным или программным. Аппаратный RAID-контроллер управляет
всем так, что дисковый массив виден как один диск даже на самом низ-
Можно использовать отдельные RAID-устройства для каждого
ком уровне. Программный RAID, как вы уже догадались, использует ПО
раздела, чтобы уравнять надежность, место на диске и скорость.
вашей операционной системы – у Linux собранное в ядре – для объеди-
Matt Herring

нения отдельных устройств в RAID-массив. На современных процессорах так гибок, как программный, он может работать в пределах ограничений
программный RAID может быть по меньшей мере не медленнее выделен- BIOS и только на дисках, подключенных к контроллеру, тогда как про-
ного аппаратного контроллера и, при этом, значительно дешевле. граммный RAID работает с любым диском или разделом, подключенным
Есть третий вариант RAID: так называемый аппаратный RAID-конт- к любому контроллеру.
роллер, встраиваемый во многие материнские платы. На самом деле это
программная система RAID, маскирующаяся под аппаратный RAID. Ее Развертывание гибкой системы
часто называют гибридным RAID или, менее деликатно, «фальшивым» Поскольку аппаратный RAID управляется контроллером, а гибридного
(fake). Вспомните Win-модемы, и вы поймете идею. Гибридный RAID не лучше избегать, мы рассмотрим только чисто программный RAID.
Под Linux он объединяет физические разделы в RAID-раздел.
Поначалу потребуется кое-какая дополнительная работа, поскольку
Внимание: суперпользователь нужно создать отдельное устройство RAID для каждого раздела, а это,
в свою очередь, потребует создания разделов-источников для каждого
Многие команды RAID, приведенные в этой используют в реальном мире, но это хороший устройства RAID на физических дисках, зато обеспечит гораздо большую
статье, требуют для запуска привилегий способ проводить эксперименты, не трогая гибкость (см. врезку «Разбиение массивов: возможно ли?» на следую-
суперпользователя (root). Вам нужно открыть ваши разделы на жестком диске. Все, что вам
щей странице), с различными типами RAID для разных целей. На своей
терминал и ввести su - (sudo bash в Ubuntu и понадобится, это достаточное количество
настольной системе вы можете использовать RAID 1 для разделов, где
других дистрибутивах, основанных на Debian), свободного места, чтобы создать loop-файлы:
а затем ваш пароль суперпользователя. dd if=/dev/zero of=raidtest1 bs=1M count=8192
безопасность данных более важна, чем собственно скорость, например,
Большинство команд RAID бывают losetup /dev/loop1 raidtest1 /usr и /home. Но, допустим, вы также используете множество больших
разрушительны, так что хорошей идеей dd if=/dev/zero of=raidtest2 bs=1M count=8192 временных файлов, типа ISO-образов DVD-дисков и видеофайлов. Они
является экспериментирование там, где нельзя losetup /dev/loop2 raidtest2 пойдут на раздел RAID 0, который быстрее и дает в два раза больше места
навредить, например, на отдельном диске. Эти команды создадут два файла по 8 ГБ и для хранения данных, чем RAID 1. Поскольку это в основном временные
Также можно создать RAID-массив, присоединят их к устройствам loop, которые файлы, в избыточности, предоставляемой RAID 1, нужды нет.
используя устройство loop. Его мало вы сможете использовать в RAID-массиве. Программный RAID также позволяет вам использовать диски с раз-
личными контроллерами, при желании объединяя IDE, SATA и SCSI.

Уровни 2 и 3 используются редко. RAID-массивы могут быть вложенными, типа RAID 5+0. Если
Раскапывая уровни RAID от этой мысли у вас ломит виски, не беспокойтесь – здесь мы такого касаться не будем!

RAID 0. Популярен среди пользователей RAID 1. Простейший из настоящих систем RAID 1, увеличивает скорость чтения на дисках в RAID. Производительность
настольных систем, особенно RAID. Использует два или более устройств, и надежность, но не дисковое пространство. записи может быть низкой, поскольку
с «фальшивыми» RAID, но фактически это в идеале — одинакового размера. Каждый RAID 4. Немного похож на RAID 0, данные и информация о четности должны
не RAID, поскольку не обеспечивается диск является «зеркалом» другого; если поскольку размещает свои данные на двух записываться на несколько дисков,
избыточность (может, назвать его AID 0?). размеры отличаются, массив будет иметь или более дисках, но сверх того использует но производительность операций чтения
Записывает данные поочередно на один размер наименьшего диска. Дает большую диск четности. Это отдельный диск, который высокая. Зачастую это лучший вариант
диск, затем на другой (другие), каковой скорость чтения, чем одиночный диск, хранит информацию о записанных данных, для небольших или средних серверов.
процесс известен под названием «striping» так как данные можно читать более чем чтобы использовать ее для восстановления RAID 6. Эволюция RAID 5: предназначен
(страйпинг, чересполосица), он увеличивает с одного диска одновременно. Основное данных в случае сбоя диска. Это означает, для систем с большими массивами.
производительность. Доступное место преимущество – безопасность: если один что для RAID 4 требуется как минимум три Предоставляет лучшую защиту от сбоев
складывается из размеров используемых диск выйдет из строя, RAID продолжит диска. нескольких дисков в таких массивах,
устройств. Сбой одного из дисков испортит работать, как прежде, используя исправный RAID 5. Не использует отдельный диск но неэффективен, если используется малое
весь массив. диск. Каждый диск, добавляемый в массив четности, а хранит эту информацию число устройств.

Октябрь 2006 Linux Format 43


RAID

Запускаем
управление дисками
Использование инструментов и опций ядра для создания RAID-массива из двух разделов.

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

Т вим вашу систему для RAID. Прежде всего вам понадобит-


ся ядро с поддержкой RAID. Она доступна начиная с версии
2.4, так что единственный вопрос – активирована ли она в
вашем ядре (ответ, скорее всего, «да», если вы ставили ядро по умол-
чанию в одном из стандартных дистрибутивов). Если вы собираете
Для работы с массивами RAID есть два набора инструментов – ориги-
нальный raidtools и более свежий mdadm. С его единственной командой,
уместными аргументами и центральной man-страницей, mdadm проще в
работе, и здесь мы будем использовать именно его, но перечислим также и
команды raidtools во врезке «Справка по командам», справа. Большинство
собственное ядро, вам понадобятся следующие опции: Device Drivers, дистрибутивов включают mdadm (обычно и raidtools) на свои установоч-
Multi-device support (RAID and LVM), Multiple devices driver support (RAID ные диски; некоторые даже устанавливают их по умолчанию.
and LVM) и RAID support. Также возьмите модули того типа RAID, кото-
рый вы хотите использовать: сойдут raid0, raid1 и raid5. Путь RAID 1
Вы можете проверить поддержку RAID следующим образом: Начнем с простейшего примера: создать массива RAID 1, используя
modprobe raid1 (или тот, модули для которого вы создали) два раздела, /dev/hda1 и /dev/hdc1. Запустите ваш любимый инстру-
cat /proc/mdstat мент для разбиения диска (попробуйте cfdisk) и пометьте разделы как
Хотя /porc/mdstat должен отчитаться, что у вас нет устройств RAID, «Linux raid autodetect (filesystem type FD)». Ядро распознает разделы
как компоненты RAID и настроит RAID при загрузке. Это означает, что
вы можете поместить свой корневой раздел на RAID.
Настроив разделы, создайте RAID с помощью
mdadm --create /dev/md0 --auto=yes --level=raid1 --raid-devices=2 /dev/
hda1 /dev/hdc1
Эта команда создаст массив в /dev/md0 («md» – сокращение от
Multi-Device): опция auto дает указание создать также и узел (node)
устройства. Уровень – RAID 1, с двумя устройствами: hda1 и hdc1. Если
вы хотите использовать более двух устройств, допишите дополнитель-
ные в командную строку и измените --raid-devices соответствующим
образом. Число устройств должно равняться значению --raid-devices
(плюс --spare-devices, но об этом чуть позже).
Если какой-то из разделов содержит файловую систему, mdadm,
прежде чем продолжить работу, предупредит вас, что вы можете час-
тично потерять ваши данные. Файловая система на первом разделе,
заданном в командной строке, будет сохранена на RAID, но остальные
будут уничтожены (при других уровнях RAID пропадут все разделы).
Наберите cat /proc/mdstat, чтобы убедиться, что ваш массив создан.
Вы увидите нечто вроде
Содержимое /proc/mdstat показывает, что происходит с вашими массивами RAID. md0: active raid1 hdc1[1] hda1[0]
Здесь у нас смесь RAID 0, 1 и 5 с неисправным диском в массиве RAID 5. 11719296 blocks [2/2] [UU]
[=>..................] resync = 5.6% (665024/11719296)
finish=43.5 min speed=4227K/sec
Разбиение массивов: возможно ли? Массив синхронизирован. Данные с первого диска скопированы на
второй. Этот процесс будет протекать в фоновом режиме, и если пер-
Программный RAID работает на уровне система располагается в RAID на 100%. Начало
вый диск содержал файловую систему, вы сможете смонтировать его
разделов. Если вы хотите создать массив RAID каждого раздела RAID выглядит как обычный
с четырьмя разделами, вы должны будете раздел жесткого диска. Так что создайте массив и начать работу с массивом немедленно:
сформировать четыре раздела на каждом из RAID 1 для /boot, используя раздел на каждом mount /dev/md0 /mnt/somewhere
ваших дисков и затем создать четыре RAID- диске, и ваша система будет просто загружаться ls -l /mnt/somewhere
массива для каждого из них. Это основной с первого диска, настроенного в BIOS. Если разделы новые, вам сначала потребуется создать файловую
недостаток программных RAID, по крайней Что же касается вопроса, где монтировать систему:
мере, с точки зрения администратора. Решение раздел подкачки (swap), то можете сделать mke2fs -j /dev/md0
– создать один большой массив и использовать swap частью вашей LVM-системы, или mount /dev/md0 /mnt/newstuff
его как физический том LVM, затем создать использовать обычный раздел на каждом
cp -a /mnt/oldstuff/* /mnt/newstuff
все ваши разделы как логические тома. диске. Особого смысла в размещении swap на
Команда для создания массива RAID 0 та же самая, нужно лишь
Поскольку за настройки RAID отвечает ядро, RAID нет – ядро Linux в любом случае
поменять уровень на raid0. Любая существующая файловая система
а ядро размещается на диске в /boot, вам прекрасно умеет использовать несколько
потребуется обеспечить загрузку ядра до разделов swap, распределяя загрузку между будет разрушена, так что вам нужно будет создать файловую систе-
запуска RAID. Можно это делать с помощью ними. Если один из ваших дисков больше, чем му на устройстве, прежде чем вы сможете с ним что-нибудь сделать.
отдельного раздела /boot, не являющегося остальные, используйте оставшееся место для Чтобы создать массив RAID 5, потребуется минимум три диска, в
частью RAID. Есть и другой способ, когда ваша размещения swap. остальном команда та же самая, с очевидным отличием в параметре
--level.

44 Linux Format Октябрь 2006


RAID

Управление системой
Что делать, если диск вышел из строя, а вы за 100 миль от него; а также другие заботы
администратора.

И
так, вы настроили RAID, установили свои файлы, и все
работает прекрасно. Возможно, вы отслеживаете устрой-
ства массивов и компонентов с помощью полезных опций
Справка по командам
mdadm: --query, --detail и --examine. Одна из основных при- Задача Команда mdadm Команда raidtools
чин для перехода на RAID 1 – функция избыточности; так что же будет,
если одному из дисков «поплохеет»? Создать массив mdadm --create mkraid [1]
Проще всего ответить в случае RAID 0, поскольку здесь избыточнос- Считать информацию о массиве mdadm --detail Israid
ти нет. Если один диск вышел из строя, это означает несостоятельность Изменить существующий массив mdadm --grow raidreconf [1]
массива. Ваши файлы погибли, так что доставайте резервные копии – Запустить массив mdadm --assemble raidstart
да-да, те самые, которые вы собирались обновить в прошлом месяце! Остановить массив mdadm --stop raidstop
С помощью RAID 1 и выше, массив сможет работать без неисправ-
[1] Эти программы raidtools требуют, чтобы вы сначала ввели информацию в файл конфигурации. Файл конфигурации
ного диска, но со сниженной производительностью. Это лучше, чем raidtools – /etc/raidtab, он является обязательным. Файл конфигурации mdadm – /etc/mdadm.conf; перечисление в нем
лишиться всей системы, но вы вряд ли захотите работать в таком режи- устройств не обязательно, опция --scan для mdadm прочитает всю информацию об устройствах сама.
ме сверх необходимого, поскольку вы беззащитны перед поломкой и
второго диска вслед за первым. (Не столь невероятной, как кажется: диска и ручного ввода команды можно избежать – в составе mdadm
бывают сбои по внешним причинам, типа скачка напряжения). есть демон, который наблюдает за вашими дисками в фоновом режиме
Предположим, у вас есть массив RAID 1 на sda1 и sdb1, и sdb1 и отправит вам сообщение по электронной почте в случае проблем (не
выходит из строя. Прежде всего нужно удалить неисправный диск из будете же вы ежеминутно проверять /proc/mdstat).
массива. Он уже должен быть помечен как аварийный – для проверки
используйте cat /proc/mdstat, диск будет отмечен как (F) – так что уда- Демон по вызову
лите его командой В режиме демона, если вы добавили запасной (spare) диск к массиву, этот
mdadm /dev/md0 --fail /dev/sdb1 --remove /dev/sdb1 диск подключится автоматически, когда один из активных дисков выйдет
Теперь можно отключить питание, снять неисправный диск и заме- из строя. Вы можете добавить его при создании массива, например:
нить его другим, должным образом разбитым на разделы, как мы вам mdadm --create /dev/md0 --auto=yes --level=raid5 --raid-devices=3 --
показывали. Когда вы загрузитесь, /dev/md0 будет продолжать работать spare-devices=1 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
в деградированном режиме. Тут-то и добавьте новый диск: Эта команда создаст массив RAID 5 с тремя активными дисками и
mdadm /dev/md0 --add /dev/sdb1 одним запасным. Запасные диски можно использовать на всех уровнях,
Массив немедленно приступит к его пересозданию в фоновом режи- кроме RAID 0. В уже существующий массив запасное устройство добав-
ме. Вы можете ощутить некоторое снижение производительности, но ляется с помощью
пересоздание работает с низким приоритетом. Как обычно, /proc/mdstat mdadm /dev/md0 --add /dev/sdd1
будет сообщать вам, что происходит. Отключения питания, добавления Если в массиве есть запасной диск, а в одном из активных дисков
обнаружена неисправность, неисправный диск автоматически будет
удален из массива, а запасной – добавлен.
Переходим в GUI Если у вас множество массивов, предоставление запасного диска для
каждого из них может быть излишним. Взгляните на опцию spare-group на
Хотя RAID’ом обычно управляют из командной строки, лучшим
графическим инструментом его администрирования является man-странице mdadm.conf. Если она установлена, то mdadm, определив
вездесущий Webmin. Он доступен в репозитариях большинства неисправность диска, передаст неиспользуемый в каком-либо массиве
дистрибутивов, и многие уже установили его на своем компьютере. Вы запасной диск нуждающемуся массиву. Эта программа обучаема.
найдете модуль RAID в секции Hardware. Он запускается как web- Демон mdadm запускается обычным способом, с помощью сцена-
сервис, доступный через любой браузер.
рия в /etc/init.d. Используйте инструмент управления сервисами вашего
дистрибутива для добавления его на стандартный уровень исполнения
(runlevel), чтобы запуск происходил всегда. Адрес электронной почты,
куда будут отсылаться оповещения, устанавливается добавкой строки
в /etc/mdadm.conf:
MAILADDR me@mydomain.com
Можете также заставить демона запускать какую-либо программу
в ответ на «интересное событие» (эвфемизм, применяемый man-стра-
ницей для сбоя): например, отсылать вам IM- или текстовое сообщение
через SMS-шлюз. Выбор за вами, хотя бешеные вспышки и динамики,
орущие «Атас, Вован!», многие сочтут перебором.
Ничто не защитит вас от сбоя нескольких дисков, так что, получив
письмо о сбое диска, поскорее замените его, пока по закону Мэрфи не
поломался другой.
Можно еще многое рассказать о программных RAID на Linux (man-
Webmin: просматривайте и управляйте массивами RAID на страница mdadm – хороший источник), но для начала работы мы дали
удаленном сервере или локальном компьютере – даже без вам более чем достаточно. Только знайте, что вы забавляетесь с данны-
графического интерфейса. ми на вашем жестком диске на низшем уровне, так что будьте осторож-
ны и помните, что RAID не заменяет резервных копий! LXF

Октябрь 2006 Linux Format 45


Что за штука JavaServer Faces

Что за штука…

JavaServer
Faces?
Ричард Драммонд прослышал о более простом и быстром
способе строительства web-приложений.
Определенно стоит разобраться…

Сейчас много шумят об этой новой web-техно- этими событиями Модели и/или Вида). Архитектура
логии, JavaServer Faces. Для чего она? MVC успешно используется некоторыми современ-
JavaServer Faces (сокращенно JSF) – компонентная ными средами разработки, включая Cocoa для Mac
платформа, призванная упростить разработку поль- OS X, Microsoft Foundation Classes и Swing для Java.
зовательских интерфейсов для web-приложений Java. Теперь наблюдается, что подобный подход начал
Это… применяться и к web-приложениям, отсюда и попу-
лярность Struts.
Секундочку. У нас уже есть Struts, Tapestry, Спасибо за объяснение технологии, но что MVC это правильно (как известно, Swing – стандартная сре-
WebWork и nauseam. Зачем создавать еще одну даст лично мне? да разработки графических пользовательских интер-
платформу для Java-приложений? Если рассматривать приложение таким образом, можно фейсов, GUI, на чистом Java). Со Swing легко изменять
В том-то и часть проблемы: много несовместимых отделить модель от вида. Это особенно актуально для способы отображения компонентов интерфейса или
платформ. Однако JSF – открытый стандарт, разраба- web-приложений. Вспомните только, как часто попу- создавать особые компоненты, а также использовать
тываемый в рамках Java Community Process, и пред- лярные сайты подвергаются визуальному обновлению визуальные редакторы интерфейсов. Все эти преиму-
ставители многих популярных, но нестандартных плат- (меняется вид), а обрабатываемые ими данные (модель) щества применимы к JSF, но не к Struts.
форм внесли свою лепту в разработку спецификации остаются неизменными. Кроме того, в web-разработках
JSF (текущая версия JSF 1.2). Спецификация открытая, и у программиста, и у дизайнера (который не обязатель- Вы приводите сравнение со Swing. Это, по-
и применять ее может каждый. Sun, кстати, выпустила но разбирается в программировании) должна быть воз- вашему, убедительно?
стандартную реализацию. можность трудиться над приложением вместе. Наконец, Да забудьте вы эту Swing-фобию! Ведь вы же сможете
вам могут понадобиться различные методы доставки строить интерфейс web-приложения так же легко, как
Ясно. Но чем JSF отличается от, скажем, Jakarta web-приложения пользователям: скажем, вы работаете строится простой GUI – перетаскиванием компонентов
Struts? с HTML-интерфейсом для настольных компьютеров, а с в UI-конструктор; это ли не здорово?
Тем, что у этих проектов разные цели. Struts – завер- WML – для мобильных устройств. Благодаря MVC реше-
шенная платформа, позволяющая упростить постро- ние этих задач существенно упрощается. Допустим. Но интерфейс для web и для обыч-
ение Java-приложений с использованием парадигмы ных платформ – не одно и то же. Осуществима
модель-вид-контроллер (MVC). JSF сосредоточена на Если JSF занимается только видом, чем она ли эта идея?
одной части парадигмы, виде. лучше Struts, которая умеет все? Да, поскольку JSF моделирует интерфейсы точно
Не обязательно быть во всем лучше всех. JSF лучше так же, как традиционные среды разработки, в част-
Вид — то есть вид web-приложений, отсюда и только для построения пользовательских интерфей- ности, Swing. В основе JSF лежит API, позволяющий
«Faces»? сов. Вполне возможно совместное использование создавать компоненты интерфейса, не зависящие от
Точно. MVC – программная архитектура, четко раз- Struts и JSF в одном приложении – есть даже дочерний устройства вывода. Этот API управляет всеми вопро-
деляющая пользовательское приложение на три проект Struts под названием Shale, для более плотной сами, связанными с пользовательским интерфейсом:
части: Модель (часть программы, содержащая дан- интеграции с JSF (см. http://shale.apache.org). жизненным циклом, обработкой событий, персистен-
ные), Вид (представление данных, позволяющее тностью (способность сохранять и поддерживать объ-
пользователю взаимодействовать с программой) и Об этом хватит! Расскажите подробнее о JSF. екты) и навигацией. JSF предоставляет также базовый
Управление (обработка событий, например, пользо- Вижу, вас надо хорошенько убедить. Ладно. набор компонентов GUI, знакомых дизайнеру любых
вательского ввода, и обновление в соответствии с Иногда JSF называют «Swing для web-приложений», и интерфейсов.

46 Linux Format Oктябрь 2006


JavaServer Faces Что за штука

Как это отразится на HTML-интерфейсе, кото- пользовательского интерфейса JSF. Например, если Хм. А нет ли других решений среди свободно-
рый я вижу в браузере? вы хотите представить пользователю данные в виде го ПО?
Основные компоненты интерфейса JSF существуют на таблицы, нужно воспользоваться соответствующим Creator от Sun основывается на открытом NetBeans
серверной стороне приложения и не зависят от средств JSF-тэгом. JSF возьмет на себя генерацию таблицы в IDE, но в текущей стабильной версии NetBeans еще нет
представления. Однако нынешняя спецификация JSF виде HTML-кода в ответ на пользовательский запрос, а визуальных инструментов для работы с JSF.
требует применения рендерера, способного отображать web-контейнер доставит ее в браузер пользователя. Вы сказали, что JSF – открытый стандарт. Нет
компоненты пользовательского интерфейса как HTML, Полагаю, ввод данных в страницы JSF не соста- ли других вариантов, кроме как от Sun?
через JavaServer Pages (JSP). Возможны и другие техно- вит труда… Конечно, есть: например, Apache MyFaces (см. http://
логии представления, но поддержка JSP обязательна. К сожалению, избежать Java-кодирования не полу- myfaces. apache.org).
чится. Каждая страница JSF связана с «бином» (bean),
Погодите продолжать, поясните, пожалуйста, который передает значения компонентам JSF, занима- Хотелось бы познакомиться с библиотеками
что такое JavaServer Pages? ется обработкой событий, проверкой введенных дан- компонентов JSF.
С удовольствием. Основа технологии генерации дина- ных и т.п. Каждый компонент JSF связывается со свойс- Отлично! Попробуйте ADF Faces от Oracle (www.oracle.
мического web-контента с сервера Java-приложений – твами и методами «бина» через атрибуты тэгов JSF com/technology/products/jdev/htdocs/partners/addins/
это сервлет. Но строительство пользовательского exchange/jsf).
интерфейса только через сервлеты весьма пробле- ОК, вы заинтриговали меня. С чего же начать
матично: встраивать весь генерируемый контент (в разработку в JSF? А где можно подробнее узнать о JavaServer
основном HTML) внутрь Java-кода – задача непосиль- Можно начать разработку с помощью web-контейнера Pages?
ная. Поэтому и появилась JavaServer Pages. Теперь все типа Tomcat, вручную инсталлировать экземпляр JSF, Рекомендую http://java.sun.com/javaee/javaserverfaces.
наоборот: можно добавить в HTML особые тэги, испол- затем в простом текстовом редакторе создать шаб- Там можно найти информацию и ссылки на многочис-
няющие необходимый для генерации динамического лоны и необходимый Java-код. Однако простейший ленные статьи и руководства по JSF. LXF
контента Java-код, а то и встроить этот код непосредс- путь – зарегистрироваться в Sun Developer Network и
твенно в HTML-страницу. установить новейшую версию Sun Studio Creator (см.
http:// developers.sun.com/prodtech/javatools/jscreator).
А применение JSF обязательно требует под- Это полный пакет для JSF-разработки, включающий
держки JSP? Java IDE, визуальный конструктор и сервер приложе-
Да, поставляется библиотека тэгов JSP с особыми ний. Регистрация свободная, а загрузка Creator для
тэгами, позволяющими оперировать с компонентами зарегистрированных членов бесплатна.

Октябрь 2006 Linux Format 47


Учебники
НАШИ ЭКСПЕРТЫ ПОМОГУТ ВАМ С ЛЮБЫМ ПРИЛОЖЕНИЕМ LINUX

ЕВГЕНИЙ БАЛДИН
Начинал с Агатов. Когда-
В этом выпуске...
то даже знал, что такое
Робик.
Модули KDE ........................ 72
Андрей Боровский
разрабатывает
Free! Music расширения для Konqueror
и Digikam.

Н
е кодом единым жив человек.
Свободные исходники нужны не Python для профи ...............76
только для программ. Музыка В заключительной статье
тоже достойна быть свободной. Писать OOo Base ............................. 50 этого цикла
для людей бывает интереснее, чем ради
Создайте базу данных в OpenOffice.org с Пароли что надо ................ 62 Сергей Супрунов научит
нуля. Энди Ченнел увлекся описью. Бывает, волк носит овечью шкуру. Д-р Python петь и краснеть.
денег. имущества Крис Браун расскажет, как превратить
Есть люди, из которых музыка исхо- вашу Linux-систему в неприступную
дит. Это своеобразный талант – как дар крепость. LaTeX .................................. 82
TeXнологичное введение
математика. Их мало, как и математиков, в логику LaTeX
но они есть. Я с подобными личностями от Евгения Балдина.
пересекался и подобные встречи укрепля-
ют мою веру в человечество. Вовсе необя-
зательно создавать шедевры всех вре- Сказка Java ........................ 87
мен и народов, ведь понятие шедевра Антон Черноусов научит
писать программы для
относительно.
больших серверов.
Web-страница в Inkscape .. 54 И кофемолок.
«Музыку раньше писали Создайте правильную web-страницу со
для людей, а теперь для всеми шрифтами, цветами и проч. в 3D Ogre Здания .................. 66
шоу-бизнеса.» редакторе №1 под чутким руководством Продолжаем писать стрелялку. Пол Сигналы Unix ...................... 90
Дмитрия Кирсанова. Хадсон строит дом, добавляет Луну и Даже самые сложные
Валерий Мифодовский Солнце и помещает своего героя на карту средства IPC становятся
Quake 3. простыми в исполнении
Андрея Боровского.

Сайт http://freemusic.org.ru/ создан для


таких людей. Любой может выставить там Maxima: начала анализа ... 94
свое произведение для свободного Даже у мощного
математического пакета
рослушивания и тиражирования под есть свой предел –
свободной лицензией. У сайта нет Тихон Тарнавский
большого и активного сообщества, но расскажет, как найти его
аналитически или численно.
вполне возможно, что за подобными Макросы OOo Basic............ 58
начинаниями будущее. Перенесите макросы Excel VBA в Linux и Greasemonkey ..................... 70
У свободной музыки, как и у движения скажите «Прощай!» Microsoft Office. Марк Продвинутые пользователи: знаете лучше
Бейн рассказывает поучительную автора, как должен работать web-сайт?
Open Source, очень схожие проблемы. И
историю. Ник Вейч взламывает Интернет!
там, и там могучие структуры трясутся за
свои гроши и насильно навязывают целым
народам только этим структурам выгод- СОВЕТ МЕСЯЦА: Будильник
ные решения. Но уже поздно — свободное
творчество полностью не задавишь. Как известно, компьютеры нужны для выполнения рутинных указывать время в различном формате, например, 1657 (у кого
операций: сложения и вычитания, рисования разными цветами часы электронные) или ‘now +2 hours’, а также указывать день:
Я не ценитель музыки вследствие
и уведомления своих всесильных хозяев о надвигающейся ‘Saturday’, ‘tomorrow’.
отсутствия музыкального слуха (провере- встрече. Существуют десятки приложений, которые Вывести сообщение на экран поможет команда xmessage.
но шестью годами в музыкальной школе), выскакивают в самый неподходящий момент и утверждают, Это простая утилита, которая уходит корнями в темное прошлое
но, по-моему, свободная музыка просто что вы забыли посетить стоматолога. На самом деле, все они X Window; она открывает диалоговое окно с сообщением и
не нужны – пара команд, запущенных со старого доброго кнопкой «Закрыть». Синтаксис xmessage тоже не слишком
обречена занять свое место в умах и серд-
терминала, выполнит всю работу. Начнем, пожалуй с at. сложен:
цах разумных людей. Рынок, естественно, Команда at – одна из тех, к которым рано или поздно xmessage -display :0.0 “Ты опоздал!”
завоеван не будет, но для желающих всег- приходят все пользователи Linux. Наберите at 4:57 today – Важно не забыть параметр display, потому что иначе
да найдется отдушина. откроется примитивный текстовый редактор. Введите в нем xmessage ни за что не догадается, какой экран ей использовать.
E.M.Baldin@inp.nsk.su все команды, которые желаете выполнить в 4:57, а затем Скрестив xmessage с at, вы получите мощный инструмент, не
нажмите Ctrl-D, чтобы отметить конец файла. Вы можете прибегая к сторонним приложениям.

Октябрь 2006 Linux Format 49


Первые шаги Советы для тех, кто только
начинает знакомиться с Linux

OOo Base: Шаг 1


Базы данных – это сложные непонятные штуки, в которых разбираются только крутые хакеры?
Это так, да не совсем! Энди Ченнел берет быка за рога и принимается за OpenOffice.org Base.
Для многих обычных пользователей базы данных не представляют
интереса: они выглядят чересчур сложными для того, чтобы стоило
возиться с ними. Однако существует пара приложений, которые пыта-
ются устранить этот барьер и принести радость (я действительно ска-
зал «радость»?) работы с БД в массы. Последняя версия KOffice вклю-
чает в себя неплохое приложение Kexi, в то время как офисный пакет
OpenOffice.org укомплектован программой под названием Base. В этот
раз мы поговорим именно о последней, потому что, с одной стороны,
она не так сильно интегрирована в рабочее окружение, как Kexi (что
конечно не мешает вам использовать Kexi в Gnome), а с другой, OОo
в целом справляется с поставленными задачами чуть лучше, что будет
для нас важно на начальных стадиях нашего проекта.
На самом деле, база данных, которую я собираюсь создать пред-
ставляет собой инвентаризацию моих вещей на тот случай, если они
будут украдены или просто потеряются. Для этого в OОo Base имеется
специальный мастер – по сути, это заранее написанный скрипт – как
раз для моей цели. Итак, мы начнем с этого примера, который иллюст-
рирует важные для нас принципы, а затем немного изменим стандарт-
ную БД, углубившись в теорию.
На нашем диске вы найдете последнюю версию ООо, которая
содержит готовый к работе Base и остальные компоненты этого офис-
ного пакета.

Часть 1 Что такое база данных?


Давайте сперва запустим приложение, для чего выберите OpenOffice. экране убедитесь что оба пункта Yes, register the database for me (Да,
Наш org Base из пункта меню Офис (в вашем дистрибутиве он может назы- зарегистрировать мне базу данных) и Open the database for editing
эксперт ваться по-другому). Когда появится окно программы, выберите пункт (Открыть базу для редактирования) отмечены, после чего нажимайте
Энди Ченнел Create a New Database (Создать новую базу данных). На следующем кнопку Finish.
Энди делает свои
Работа по созданию БД обычно состоит из двух частей: структури-
первые шаги в Linux
уже шесть лет, а рование и наполнение. Последнее целиком зависит от вас, поэтому мы
технологиями сосредоточимся на структуре, которая изначально задается в разделе
интересуется еще со Таблицы.
времен Dragon 32.

На что способны таблицы


Каждый, кто работал с электронными таблицами, будет чувствовать
себя комфортно при виде столбцов, строк и ячеек в базе данных. На
самом деле, обычные электронные таблицы даже предпочтительнее
использовать в том случае, если вы работаете с небольшим объемом
данных: они легки в понимании, настройке и последующем визуальном
редактировании всей структуры записей.
Преимущества базы данных проявляются в тот момент, когда нам
нужно объединять информацию из разных источников и работать –
при необходимости – с большими массивами данных, которые при
Регистрация БД уведомит OOo об ее существовании. Это полезно, этом не будут загружаться в память компьютера все сразу. К тому же,
если вы, к примеру, создаете документы для большой адресной гораздо проще создать массив данных при помощи специальной «фор-
книги. мы» с текстовыми полями, флажками и переключателями, чем исполь-

Месяц назад Мы создали по-настоящему детский рабочий стол с ограничением доступа и web-фильтрами

50 Linux Format Октябрь 2006


Первые шаги Учебник

зуя обычные таблицы с колонками. В БД мы также можем создавать флажки или выпадающие списки. Более крупная БД вполне может
связи и отношения между массивами, что помогает управиться с боль- содержать две и более таблиц. Например, база данных школы может
шим объемом данных. содержать одну таблицу с информацией об учителях и вторую – о
Убедились? Теперь перейдем к таблицам, и запомните: девиз серии детях; эти две таблицы могут быть связаны отношением учителя к
на DVD
«Первые шаги» – Сначала составляем план. классу, в котором он преподает. Третья таблица может быть посвя-
При создании базы данных перво-наперво нужно понять, из чего щена оценкам за экзамены и при этом быть связанной с таблицами
она будет состоять и какие связи между объектами вы собираетесь учителей и учеников.
установить (если вообще собираетесь). Для начала лучше всего взять Сейчас у меня есть список из семи свойств предметов: название,
лист бумаги и написать на нем список вещей, которые вы собираетесь производитель, модель, цена, место покупки, дата покупки и серийный
включить в БД. В нашем случае речь идет о списке домашних вещей, номер. Эти свойства следует объединить под общей категорией Record
поэтому такие параметры как название предмета, цена и дата покупки ID (Карточка), поэтому самое время запустить первый мастер в OОo
имеют решающее значение. Мы собираемся создать очень простой Base: мастер таблиц.
массив данных, поэтому эти предметы будут «полями» БД, в которые
мы и внесем детали.

Определяемся с данными
Нужно продумать, какого типа будет каждая информационная ячейка. Вниманию грабителей
Поле Product Name (Название предмета) [кстати, в БД предпочтитель-
нее использовать названия, набранные латинскими буквами. Это не Хранить всю важную информацию на компьютере – достаточно
относится к тексту ячеек, – прим.ред.] должно быть текстовым, в то легкомысленная затея, особенно если учесть, что компьютер в первую
время как поле Price (цена) – числовым, причем в определенном фор- очередь привлекает внимание квартирных воров. В то же время,
мате – десятичном или валютном – для того, чтобы введенные цены нельзя забывать и про резервные копии. Здесь вам не помешает
автоматически приводились к одному виду. немного параноидальной осторожности и совет хранить резервные
На первое время мы будем использовать всего несколько типов CD/DVD в каком-нибудь месте вне дома. К счастью, наша простая база
данных, включая простой текст, десятичные числа и дату, но в дальней- данных представляет собой один аккуратный ODB-файл, который
можно отправить по e-mail на удаленный web-сервер или записать на
шем можно будет добавить и отдельные категории (кухня, компьютер,
CD-R и спрятать на дедушкином чердаке.
музыка и др.) во вторую таблицу. В нее, в свою очередь, можно вклю-
чить параметр «да/нет», указывающий на то, использует ли категория

Часть 2 Немного волшебства

1 Вызовите мастера 2 Выберите поля


В главном окне вашей БД щелкните по кнопке Таблицы слева и выбе- Начните с выбора наиболее подходящей для вас категории – Деловой
рите пункт «Использовать мастер для создания таблицы», после чего или Персональной, в соответствии с которыми меняется содержи-
откроется окно мастера. Если, к примеру, вы хотите упорядочить не мое примеров таблиц и списка полей. Нас интересует категория
домашнюю утварь, а что-то другое, для чего у ООо нет мастера, выбе- Персональный и тип таблицы под названием Домашний_Инвентарь.
рите пункт Создать таблицу в режиме дизайна. Создание таблицы Выбрав эти пункты, мы переходим чуть ниже, и теперь нам нужно
одинаково и там, и там, просто в последнем случае придется кое-что переместить нужные нам переменные поля из левой части списка в
дописать вручную. правую. Для этого щелкните по названию поля, а затем по верхней
кнопке со стрелкой вправо (кнопка с двойной стрелкой работает по
принципу «выделить все»). Выбранные вами поля можно сдвигать
относительно друг друга при помощи кнопок вверх/вниз, меняя таким
образом их очередность.

Октябрь 2006 Linux Format 51


Учебник Первые шаги

3 Что за данные? 4 Создаем форму


На следующем этапе вам нужно задать тип данных для каждого поля. Следующим шагом будет запуск мастера форм. Форма делает именно
Почти везде у нас будут текстовые поля, но нам также понадобится одно то, что подразумевает ее имя: отображает специальные области, кото-
числовое поле (для цены) и одно поле в формате даты (для времени рые пользователь должен заполнить, после чего вставляет получен-
покупки). Для каждого поля есть специальный пункт, определяющий ные данные в таблицу. Выберите в левой части окна кнопку Формы,
обязательность его заполнения. Если выставить значение да, то поль- а затем пункт Использовать мастер для создания формы. Вы увидите
зователь не сможет сохранить изменения до тех пор, пока не заполнит окно, очень похожее на мастер таблиц, в котором также будет список
это поле. На этом этапе вы также может добавить, удалить или изменить полей, которые на этот раз можно включить в состав формы, исполь-
порядок полей, используя кнопки +, – и стрелки вверх/вниз. Если вы зуя уже описанные кнопки со стрелками. Просто перенесите в правый
не пользуетесь мастером, два последних действия можно выполнить список нужные поля один за другим. Следующий шаг мастера мы про-
в отдельном окне, которое по виду похоже на электронную таблицу. пустим, так как у нас нет подформ (это вложенные формы, которые
Слева вы вводите названия полей, а справа выбираете из списка нуж- можно подсоединить, к примеру, ко второй таблице).

5 Ограничения полей ввода 6 Последний шаг – оформление


Теперь пора выбрать стиль формы – расположение полей ввода и Наконец у нас появилась возможность выбрать стиль оформления из
меток. Щелкните по нужному варианту и перейдите на следующий подборки ООо, дать форме имя и насладиться результатом – готовой
экран, отвечающий за источники данных. На этом этапе мы можем для ввода данных формой! Особо отмечу, что для своей БД вы можете
установить ограничения на дальнейшее редактирование содержимого наделать сотни таких форм, просто запуская мастер снова и снова. Это
полей. Из двух категорий в этом окне нас интересует вторая (Форма может сыграть вам на руку, если вы хотите создать две почти одина-
для отображения всех данных), которая означает, что все пользовате- ковые формы, в одну из которых будет внесена, к примеру, стоимость
ли смогут просматривать содержимое БД через диалоги форм OОo. компьютеров, гитар и редких пластинок, а в другую – нет. Так вы смо-
Оставьте все пункты нетронутыми. жете сохранить конфиденциальность своих расходов. И не только вы.

Бриджит Бардо использует Mandriva


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

52 Linux Format Октябрь 2006


Первые шаги Учебник

Скорая
Часть 3 Добавляем данные помощь

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

Пойдем со мной Сортировка изменяет порядок отображения полей.


В редакторе таблиц имеются некоторые важные инструменты, позво-
ляющие делать большую часть работы в этом окне, поэтому давайте
изучим его подробнее. Вдоль верхней части окна располагается стро- За поиском следует кнопка Обновить/Перечитать, о которой я
ка меню с привычными пунктами. Под ней находится панель инстру- расскажу в следующий раз. Далее у нас имеются три инструмен-
ментов, с помощью которых можно фильтровать, проводить поиск та сортировки. Первый называется незамысловато: Сортировка. По
и менять порядок полей в вашей базе данных. На картинке сверху щелчку появится диалоговое окно, в котором мы можем, к примеру,
справа первые шесть иконок представляют собой привычный комп- упорядочить все наши записи по стоимости в виде списка (выберите
лект из разряда копировать/вырезать/вставить. Тем не менее, обратите Возрастающий для того, чтобы в начале были самые дешевые пред-
внимание на первую иконку (маленькая дискета с черным треуголь- меты, или букву А и Убывающий для алфавитного просмотра самых
ником). Нажатие этой кнопки сохраняет сделанные записи, поэтому дорогих; можно наоборот) или по дате приобретения. Функция сор-
будет неплохо, если вы возьмете за правило сохранять изменения при тировки работает по тому же принципу, что и диалог поиска. Задайте
каждом объемном вводе данных. Обратите внимание, что каждый раз, образец искомого, и ваши данные будут упорядочены в соответствии с
когда вы доходите до конца строки и внизу появляется чистая, изме- вашим запросом. Если хотите, можно сделать все немного проще – для
нения автоматически сохраняются в базе. Но этого не происходит при обычной сортировки по одному параметру, например, щелкните по
исправлении уже заполненных строк. имени соответствующего поля, а затем по нужной кнопке сортировки
Следующая по-настоящему интересная иконка – это значок «лупа», (По убыванию или По возрастанию). Вы всегда можете вернуться к
который скрывает за собой диалог поиска. В нем на данный момент не оригинальному расположению записей, щелкнув по полю ID и кнопке
много пользы, так как наша БД ничтожно мала, но со временем, ког- По Возрастанию.
да база данных будет расти, эта функция нам еще пригодится. Можно
искать текст в полях, текст внутри одного поля, поле целиком, избира- Отфильтрованное
тельно начало или конец поля, и так далее. Как и во всех других поис- За вариантами сортировки следуют фильтры. С их помощью мы
ковых системах, введите искомое, нажмите кнопку Поиск и откиньтесь можем выделить записи или группы записей на основе заданного
на спинку кресла в ожидании результатов! критерия. Первая иконка называется Быстрый фильтр, в качестве кри-
терия она использует содержимое текущей ячейки. Если я выделю
ячейку с ценой £65 и нажму кнопку быстрого фильтра, то все ячейки
данного поля, которые не содержат «£65», пропадут, а те, в которых
эта цена имеется, поднимутся к верху таблицы. Чтобы сбросить филь-
трование, используйте кнопку Сбросить фильтр/сортировку (четвертая
в этой группе). Третья по счету иконка вызывает стандартный диалог
фильтра, позволяющий задать более гибкие параметры выборки по
нескольким полям (похоже на описанный выше диалог поиска).
В нижней части окна редактора таблиц расположены области уве-
домления и навигации. Их польза проявляется при работе с большими
базами данных, когда пользователю важно знать, в какой записи он
в данный момент находится и сколько их всего. Здесь также можно
удобно перемещаться между отдельными записями при помощи поля
Запись х из х и переходить к первой и последней строке таблицы.
Ну вот, наша база данных готова. Как поживает ваша самооценка?
Заполнение БД данными может быть скучным занятием, но как только
все настроено и готово к использованию, вы можете без труда добав-
Фильтрование позволяет выделить определенные части таблицы. лять новые элементы (например, купленные вещи) в уже созданную
Боже мой, сколько же я всего накупил! структуру. Постаравшись некоторое время, вы получите ощутимое

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

Октябрь 2006 Linux Format 53


Практикум
Учебник Inkscape
Практикум Реальные проекты
Inkscape
для развития ваших навыков работы в
векторной графике

Inkscape: cоздаем
ЧАСТЬ 4: Интернет ждет вас! Дмитрий
Кирсанов продемонстрирует, на что спо-
собен Inkscape в области создания
web-страниц.

В
спомните время Web 1.0. Dial-up был быстр, #000000 – свеж, а
Bangalore был… просто названием города. С тех пор мы пере-
жили бум сайтов типа MySpace, Google Pages и LiveJournal,
через которые web-литераторы могут загружать контент в Интернет, не
зная ничего о HTML, CSS, не имея даже базовых дизайнерских навы-
ков. Но если вы приложите некоторые усилия, то Inkscape поможет вам
в создании стильных, уникальных сайтов, созданных специально под
ваши цели. Ни в какой программе, кроме векторного редактора, вы не
сможете манипулировать объектами – текстом, графикой, фото – с
такой свободой и неограниченной гибкостью.

Шаг за шагом: Web-страница за несколько часов

Наш
эксперт
Дмитрий Кирсанов
Дизайнер,
специализирующийся
на создании
логотипов и web-
сайтов. Консультант,
пишет книги и статьи
о дизайне и XML-
технологиях.

1 Выберите шаблон 2 Создайте настроение


Первый шаг, как всегда – создание нового документа по некоему шаб- Цвет – невероятно мощное средство. Страх перед пустым листом (писа-
лону. В наши дни минимальный разумный размер экрана составляет тельский комплекс) намного легче преодолеть, если бумага не чисто
800х600 пикселей. Поэтому создание страницы обычно начинают имен- белая. Удачно выбранный фоновый цвет задает настроение всему проек-
но с этого разрешения, а уж затем думают о том, как (и если) можно ту и значительно упрощает выбор остальных элементов. Откройте диало-
будет развернуть ее на больший экран. Начнем с выбора шаблона под говое окно Document Preferences (Параметры документа), (Ctrl+Shift+D),
названием Desktop 800x600 в меню File > New (Файл > Создать). выберите Background color (цвет фона) (А) и воспользуйтесь селектором
цветов (В). Я выбрал легкий, теплый желтовато-коричневый.

Месяц назад Web-анимация вдохнула жизнь в нашего «тростникового» человечка.

54 Linux Format Октябрь 2006


Практикум Inkscape Учебник

web-страницу
Поэтому ни один другой инструмент не может позволить вам стро-
ить вашу страницу с такой точностью и вниманием к деталям. Любая
другая программа просто меркнет в сравнении с Inkscape.
Композиция направлений
Я не собираюсь обсуждать использование формата SVG в Интернет Простота этого сайта ставит дизайнеру интересную задачу: как
непосредственно (хотя такая необходимость давно назрела). Это – скомпоновать его страницы, чтобы они не выглядели скучными или
тема отдельного разговора. Пока мы будем пользоваться Inkscape безликими? Дизайн строится на контрасте и балансе горизонтальных
только для наброски черновика страницы и создания всех ее гра- и вертикальных ориентаций. Так как выровненная слева текстовая
фических элементов. После этого, настоящую HTML-страницу нуж- колонка дает нам вертикальную линию, заголовку нужно придать как
но будет создать отдельно, любым удобным для вас способом. Я не можно больше горизонтальных элементов. В основном, контрастные
буду подробно освещать эту стадию, но дам несколько советов по ее цветные границы горизонтальные, а вертикальные края верхнего и
нижнего колонтитулов выведены за пределы страницы. Притапливание
упрощению.
вертикальных рамок рисунков также способствует общей
В качестве практического примера к этой статье я использовал
горизонтальной ориентации заголовка.
web-сайт, созданный мной для Православной Церкви Св. Владимира,
Галифакс, Канада. Мы изучим способы работы с фото, текстовыми
колонтитулами и некоторыми другими графическими элементами
для сборки их в сбалансированную композицию. Контент сайта очень или скучен. Разумеется, церковному сайту не пристало быть чересчур
прост – одна линейная текстовая область, заголовок, изредка – иллюс- крикливым и броским, но примитивности и занудства допускать тоже
трация. В этой простоте скрыт некоторый вызов дизайнеру: простому нельзя. В идеале он должен быть приветливым и душевным, в соответ-
контенту требуется простая структура, но сайт не должен быть безлик ствии с традициями Восточной Православной церкви.

Скорая
помощь

Inkscape запоминает
разрешение и имя
файла каждого
импортированного
объекта, поэтому
ввести имя файла
достаточно лишь
3 Подготовьте ваши рисунки 4 Выберите подходящий шрифт однажды. Если
Займемся фотографией иконы Св. Владимира, святого покровите- Для простой web-страницы основная часть дизайнерской работы в дальнейшем
ля прихода. Сначала импортируйте фото в Inkscape через меню File > сосредоточивается на ее верхней части, которая обычно состоит из понадобится
Import (Файл > Импорт) (А). Выделите его и конвертируйте из объек- экспортировать
логотипа, заголовка и меню. В нашем случае «логотип» – это икона Св.
та-изображения в прямоугольник с заливкой нажатием Ctrl+Y. Можно некоторые места
Владимира, а заголовок – «St.Vladimir Orthodox Church». Сначала помес-
заново, Inkscape
двигать рукоятки изменения размеров прямоугольника инструментом тим их рядом (А). Для заголовка страницы я выбрал Luxi Serif. Этот сам подставит
Node (Узел) (В), поворачивать рисунок-заливку внутри прямоугольни- шрифт выглядит самобытно, и в то же время достаточно традиционно соответствующее
ка для выравнивания сторон (С) или конвертировать прямоугольник в для нашего случая (В) – sans serif был бы чересчур современен. имя в диалоговом
линии и редактировать его при помощи узлов так, как вам заблагорас- окне экспорта.
судится (D).

Октябрь 2006 Linux Format 55


Учебник Практикум Inkscape

5 Оформите рамку 6 Организуйте меню


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

Скорая
помощь

Для экспорта всех


объектов из слоя
Export можно
написать сценарий
оболочки (пакетный
файл). Для этого
необходимо
указать значения
ID-атрибутов
9 Оживите страницу 10 Измените заголовок
До сих пор наша композиция была совершенно плоской, даже икона Синеватый градиент и глубина фотографии контрастируют с дву-
экспортируемых
не добавила глубины. (Исходя из догматических соображений и тра- мя плоскими пространствами с обеих сторон. Это можно исправить.
прямоугольников в
параметре --export- диций, православные иконы не имеют 3D-перспективы вообще или Сначала сдвинем икону немного вниз и вправо, с тем, чтобы она захва-
id Inkscape. Более используют обратную перспективу, в которой линии сходятся в сторо- тила оба пространства – это сразу оживит композицию (А). Затем
подробно об этом ну наблюдателя, а не в некую отдаленную точку). Давайте добавим еще попробуем ненавязчиво усложнить фон, скопировав заголовок, увели-
см. man inkscape. один элемент (фотографию интерьера церкви) выше полоски меню, чив его до 400% и уменьшив яркость до 10% (В).
затенив ее края полупрозрачными градиентами.

Готовый сайт можно просмотреть по адресу: http://users.churchserve.com/ns/ocastvladimir

56 Linux Format Октябрь 2006


Практикум Inkscape Учебник

Скорая
помощь

Если вы
хотите, чтобы
экспортированная
графика абсолютно,
точка в точку,
соответствовала
размеру экрана
в Inkscape при
масштабе 100%,
экспортируемые
прямоугольники
нужно выровнять по
пиксельной сетке.
Для ее активации
нажмите #.

7 Не забудьте про контент! 8 Нижний колонтитул


Пришло время заняться телом страницы. На главной странице долж- Нам необходимо чем-то завершить каждую страницу снизу. Ничего
но быть приветственное сообщение, заголовок, подпись и групповое особенного, просто сбалансируем верхний колонтитул. Двух узких
фото общины. Вполне естественно выровнять левый край текста по горизонтальных полосок, черной и другого цвета из верхней части,
границе заголовка и меню, оставив поля с левой стороны. Я выбрал темно-красного, будет достаточно. Даже если верхнее меню текстовое,
шрифт Georgia, поскольку он хорошо подходит к Luxi Serif, исполь- а не графическое, добрая традиция требует его повторения внизу стра-
зованному в заголовке. Для названий разделов используется курсив ницы. Для ссылок вполне разумно использовать тот же «парчовый»
Georgia. Чтобы создать текстовую колонку, воспользуйтесь текстовой цвет, что и в верхнем колонтитуле.
заливкой (щелкните и протащите инструментом «Текст»).

11 Сделайте шаг назад 12 Заключительный шаг: Экспорт страницы


Теперь самое время отодвинуться и осмотреть страницу в целом. К несчастью, пока нет возможности конвертировать SVG-документ в HTML-
Заодно попробовать, как страница будет вести себя – а значит, выгля- страницу за один прием. Необходимо будет «разрезать» и экспортировать
деть – на экране размером больше 800 пикселей. Естественное реше- все графические части нашей страницы – икону, колонтитулы, кнопки – в
ние – продолжить горизонтальные границы верхнего и нижнего колон- качестве растровых изображений. Для этого создадим новый слой, назовем
титула до краев экрана, оставив пространство контента (включая левое его Export, и прочертим невидимые прямоугольники (без заливки, без штри-
поле) посередине. хов) вокруг всех экспортируемых элементов. На нашем рисунке они имеют
вид зеленых рамок (А). После этого нужно выделить и экспортировать каж-
дый прямоугольник с помощью диалогового окна экспорта (В). LXF

Через месяц Мы займемся изучением нововведений в Inkscape 0.44.

Октябрь 2006 Linux Format 57


Автоматизируем
Учебник АвтоматизируемOpenOffice.org
OpenOffice.org Последнее
руководство из серии о макросах

OOo Basic: Используем


ЧАСТЬ 5: Как ни хорош OOo, он не распознает макросы Excel VBA, не так ли?
Не так. Эксцентричный Марк Бейн вам все объяснит.
документ содержит макросы», но что бы вы ни выбрали – Включить
макросы или Отключить макросы – Calc не выдаст никаких ошибок и
загрузит документ (Рис. 1). Значит ли это, что OpenOffice.org понимает
макросы VBA? Увы, нет.
Так что же случилось с теми макросами? Открыв свежеимпортиро-
ванный модуль в редакторе OOo Basic, вы обнаружите, почему OOo не
ругается на код: все строки кода превратились в комментарии. Вот так
OOo обрабатывает код VBA: просто его игнорирует, предоставляя вам
самим во всем разбираться.
Итак, похоже, что страхи разработчика VBA обоснованы – и что дан-
ная статья закончится, не начавшись. Я тоже так думал, пока не пого-
ворил с Ноэлем Пауэром [Noel Power]. Этого человека стоит знать – он
отвечает за взаимодействие OpenOffice.org и Excel VBA в Novell. Ноэль
предложил простое решение: установить SUSE 10.1. Давайте подума-
ем: а надо ли? Какой-то тип из Novell всем рекомендует брать SUSE. С
чего это вдруг? «Нет, серьезно, – отвечает Ноэль. – Просто я не знаю,
у какого ещё дистрибутива есть поддержка VBA, а у SUSE точно есть.»
[Русскоязычные пользователи могут воспользоваться сборками OOo
от «Инфра-Ресурс» – они поддерживают макросы VBA – прим. ред.] И
тут он прав: я-то всегда предполагал (наверно, по наивности), что ваш
OpenOffice.org 2.0.2 на машине с PCLinuxOS (к примеру) и OpenOffice.
org на машине с SUSE – совершенно одинаковые OpenOffice.org. Как
бы не так!
Почему же Novell включила поддержку Excel VBA в свою версию

М
ы подходим к концу данной серии уроков, и вы уже знае- OpenOffice.org? Потому, говорит Ноэль, «что одним из барьеров внед-
те, что можно автоматизировать любые задачи с помощью рения OpenOffice.org является отсутствие прозрачной работы макросов.
макросов OpenOffice.org Basic. На этот раз мы рассмотрим В бизнесе почти все жизненно важные макросы сосредоточены в таб-
возможность использования Windows-эквивалента, VBA, в OOo – и лицах Excel. Устранение или снижение этого барьера сразу же облег-
увидим, что не все OpenOffice.org одинаковы. чит внедрение OpenOffice.org.» Исследования Novell по использованию
Наш Позвольте мне начать с истории в стиле Макса Байгрейвcа [Max VBA на предприятиях показали, что большинство макросов исполь-
эксперт Bygraves]. Недавно я купил очень хороший поддержанный ПК, MSI
Марк Бэйн Mega, с Windows XP. Я воздержался от установки на него Linux, и
Свою первую
попытался найти способ запустить Linux через Windows. Скажете,
программу Марк
написал на Sinclair кощунство? Объясняю: у компьютера имеется TV-карта, а у меня –
ZX81. Он уже многие странное ощущение, что я останусь без Freeview, если мигрирую.
годы работает с Поэтому я установил Cygwin, а затем использовал Cygserver, чтобы
системами Unix и работать с Linux на одной из других моих машин. Но на свете столь-
Oracle, а также
читает лекции и
ко дистрибутивов, что я не утерпел, и миграция свершилась. Теперь у
пишет. меня замечательный ПК с PCLinuxOS, а заодно и ежевечернее развле-
чение: попытки заставить эту карту снова заработать.
К чему я это рассказал? Очень просто: мой страх потерять Freeview
аналогичен страху разработчика VBA, который обдумывает миграцию
на OpenOffice.org. Не станут ли макросы, нажитые непосильным тру-
дом, годны только в помойку, и не придется ли писать все сначала?

Камень преткновения в Excel


Начнем с простого. Если вы попытаетесь открыть таблицу Microsoft
Excel в OOo Calc, то все пройдет гладко – Calc откроет ее без вопросов,
ибо OpenOffice.org не страдает предрассудками. А ну как в таблицу (Рис. 2) Файл hypocycloid-demo.xls с разными шаблонами. Calc
встроен макрос? OOo выдаст вам стандартное предупреждение «Этот запросто его откроет, но тут-то и начнутся проблемы...

Месяц назад 14 моих советов по эффективному написанию макросов в OOo Basic.

58 Linux Format Октябрь 2006


Автоматизируем OpenOffice.org Учебник

на DVD

макросы VBA hypocycloid-demo.x


Пример кода макро
ls
са

зуют подмножество объектов Excel API – например, объекты Range и


Worksheet. Ноэль и его коллеги сосредоточились на поддержке часто
используемых объектов, их методов и свойств, то есть модель Novell
VBA хотя и не полна, но покрывает большую часть потребностей.

SUSE как спирограф


Пришла пора установить SUSE 10.1. Должен признаться, что SUSE 7.1
был моим первым дистрибутивом Linux, когда я начал работать на себя
в начале этого столетия. К сожалению, я знал, что SUSE хоть и вели-
кая вещь, но чересчур великая для моего тогдашнего ноутбука. Однако
ПК с тех пор несчетно размножились, поэтому хорошо, что есть повод
вернуться к SUSE. А как с установкой? Да легко.
Ну, на самом деле не совсем. Я скачал 5 образов CD с сайта Novell,
записал их на диски, перегрузился и понял, что создал 5 подставок
для пивных кружек. Поделюсь советом: когда на диске написано, что
скорость прожига 52x – не верьте. Лучше сбросьте скорость записи до
12x – на запись потребуется больше времени, но зато она будет сдела-
на качественно. Что до установки – легко. Скачал 5 образов CD с сайта
Novell, записал их на скорости 12x, перегрузись и следуй инструкциям
инсталлятора.
Если вы сделаете то же самое, перед вами предстанет такая же
копия OpenOffice.org, как и везде. Существующие пользователи SUSE
(Рис. 1) Код VBA не вызовет затруднений – OOo просто его закомментирует.
10.1 могут даже не понимать, из-за чего тут суетиться. Конечно, если
вам не нужны макросы Excel VBA, то вы всего лишь поимели новую
версию OpenOffice.org. А вот если к вам попала таблица Excel с мак-
росом, придется побеспокоиться. Каков же следующий шаг? Загрузим придется. Однако не забудьте сохранить свои наработки, прежде чем
табличку Excel (естественно, содержащую макрос) и посмотрим, что окончательно избавиться от Windows. Второе, не менее важное: мож-
произойдет. но продолжать разработку со старыми знаниями, просто используя
Вы захотите сразу же увидеть рабочий пример, поэтому мы запи- OpenOffice.org вместо Excel. Ура!
сали на диск файл hypocycloid-demo.xls от Ноэля. Что в нем особенно-
го? Ничего. Вы его загружаете, а он работает: нажмите на кнопку – и На практике
картинка изменится (Рис. 2). Все здорово, но реальную разницу вы Не надо песен: вы пошли и загрузили парочку ваших старых макросов
увидите, только просмотрев макрос в редакторе кода. Для этого надо Excel, они идеально работали, а когда вы попытались создать макрос
прощёлкать Tools–>Macros–>Organize Macros–>OpenOffice.org Basic. для новой таблицы, то потерпели неудачу. Например, вы могли бы
На экране OpenOffice.org Macros разверните Hypocycloid-demo, затем попытаться написать следующее:
Standard. Наконец, нажмите Module1 и Edit. Sub writeToCell_VBA
С первого взгляда вы не увидите ничего необычного (Рис. 3). Но sheets(“Sheet1”).select
вспомните, как вы открывали макрос в не-SUSE версии OpenOffice.org. cells(1,1).value=”Hello world”
На сей раз весь код, строчка за строчкой, целехонек; велите ему рабо- End Sub
тать, он и будет работать. Вы, возможно, получаете ошибку ‘BASIC runtime error. Sub-
Это означает две вещи. Первое: если вы работаете на Excel VBA, procedure or function procedure not defined’ Не беспокойтесь. Все, что
при миграции на OpenOffice.org весь свой код выбрасывать вам не вам надо сделать, это добавить дополнительный параметр в начало
каждого модуля, в котором вы хотите использовать VBA:
Option VBASupport 1
Что такое гипоциклоида? Вот так и поступает Novell-версия OOo – не превращает строки
кода в комментарии, а вставляет Option VBASupport 1 в начале модуля
Протестировав файл, вы можете заинтересоваться: что такое гипоциклоида? (Рис. 4).
Вот краткий урок математики: Здесь возникает вопрос: только ли это поддержка VBA? В конце
Циклоиды – класс кривых, по которым движется точка на радиусе круга, концов, кроме упрощения возможности миграции ваших Excel-мак-
катящегося без скольжения по некой направляющей линии. росов в OpenOffice.org, вы получили новый метод программирования,
Если эта направляющая – прямая, получается трохоида. Если это внешняя который вы можете найти более удобным в использовании, чем собст-
сторона другого круга – эпициклоида, а если внутренняя – гипоциклоида.
венно OOo Basic. В этом и прелесть Linux: чтобы выполнить работу, нет
Тут вы воскликнете: «Так это же спирограф!» – и сразу станет ясно,
правильного и неправильного пути. Давайте рассмотрим процедуру
сколько вам лет…
записи в ячейку при помощи OOo Basic:
Sub writeToCell_OOo
dim sheet as object

Октябрь 2006 Linux Format 59


Учебник Автоматизируем OpenOffice.org

dim cell as object чение). Если вы используете формат VBA, у вас только один тип дан-
sheet=thisComponent.sheets(0) ных: значение. Разница невелика, но знать о ней надо.
cell=sheet.getCellByPosition(0,0) Как мы уже видели, большая часть функциональности VBA реа-
cell.string=”Hello World Again” лизуется с помощью функций простого формата. Иногда он совсем
End Sub прост. Например, чтобы очистить диапазон ячеек, вы можете исполь-
Вы можете сократить этот код до зовать либо
Sub writeToCell_minimum Range(“A1:E5”).ClearContents
thisComponent.sheets(0). либо
getCellByPosition(0,1). ThisComponent.Sheets.getByName(“Sheet1”).
string=”Last One” getCellRangeByName(“B1:E5”).clearContents( _
End Sub com.sun.star.sheet.CellFlags.VALUE _
На этих примерах вы, возможно, + com.sun.star.sheet.CellFlags.STRING _
разглядите одно из больших отли- + com.sun.star.sheet.CellFlags.DATETIME _
чий OOo Basic и VBA. OpenOffice.org + com.sun.star.sheet.CellFlags.ANNOTATION _
Скорая Basic содержит главный объект (thisComponent), и все наследуется от + com.sun.star.sheet.CellFlags.FORMULA _
помощь него. VBA работает с отдельными объектами (Application, ActiveSheet, + com.sun.star.sheet.CellFlags.HARDATTR _
ActiveCell и им подобными). Их использование может сделать код + com.sun.star.sheet.CellFlags.STYLES _
OOo безразличен читабельнее и проще в поддержке. + com.sun.star.sheet.CellFlags.OBJECTS _
к регистру (вне за- В некоторых случаях вы обнаружите, что OOo Basic и VBA делают + com.sun.star.sheet.CellFlags.EDITATTR)
висимости от под- одно и то же, просто используя разные слова. Например, взгляните Выбор остается за вами – бывают ведь и любители побарабанить
держки Excel VBA).
на: по клавишам. Знаю, знаю, можно вместо этого написать процедуру, но
Однако постарай-
тесь привыкнуть к ThisComponent.LockControllers ‘формат OOo чего ради, если работа уже сделана за вас?
использованию за- и
главных букв, что- Application.ScreenUpdating = False ‘формат VBA Испытайте на своем дистрибутиве
бы сделать код бо- Обе этих строки выполняют одно и то же: замораживают экран, это Короче, вы поняли, в чем штука. Если вы пишете на VBA, то и продол-
лее читабельным,
может быть полезно, если вы пишете в несколько ячеек. Чем сидеть и жайте себе писать. Если он для вас в новинку и вам понравился, вы,
например, пишите
openNewSheet смотреть, как поштучно происходит обновление ячеек, лучше увидать возможно, захотите узнать о нем побольше. В пакете вы помощи не
вместо полностью готовый экран, когда работа выполнена. И не забудьте раз- найдете. Поискав в файлах справки OpenOffice.org по ключу VBA, полу-
opennewsheet. За- морозить экран: чите информацию о том, как работает обычная редакция OOo – это мы
чем? А чтоб умень-
ThisComponent.UnlockControllers ‘формат OOo уже проходили: код VBA грузится как комментарии. Однако по Excel
шить вероятность
сделать ошибку. или VBA существует уже так много информации, что даже поиск в Google
Application.ScreenUpdating = True ‘формат VBA позволит найти полное руководство к действию.
Большинство случаев похожи на этот: та же функциональность, но Отсутствие документации свидетельствует о статусе проекта, а не о
все слегка упрощено благодаря новым объектам. Мы уже видели, как его качестве. В конце концов, в любом проекте бумажная работа всегда
работать с ячейками; а сейчас мы покажем, как устанавливать диапа- оставляется на потом.
зон значений в VBA и OpenOffice.org: Всегда следует помнить, что проект находится в стадии разви-
ThisComponent.CurrentController.ActiveSheet. тия. Вы можете обнаружить, что какой-то код не импортируется или
getCellRangeByName(“B2”).String = _ вызывает ошибки. Однако в основном это проявляется разве что при
“Используем Windows, когда так просто установить Linux” использовании редких и сложных функций.
и Здесь-то вы и можете помочь. Если вы уже используете SUSE 10.1
Range(“B1”).Value = “Что такое мазохизм” или планируете на него перейти, я ожидаю, что вы скажете: «А в чем
Если вы читали внимательно, то заметили, как вводится информа- проблема?» Ну и прекрасно. Однако если вы приверженец Debian или
ция в ячейки и диапазоны. В формате OOo Basic вы просто указываете Fedora, или любой другой системы, то проблемы будут – ну, то есть,
тип данных, которые собираетесь загрузить в ячейки (строка или зна- будут, если вам потребуется взаимодействие с Excel VBA. Что вы може-
те предпринять?
Ноэль сказал мне, что Novell работает над включением модели
VBA в исходный код стандартной поставки OpenOffice.org, и недав-
но основал проект продвижения работы Novell по VBA (http://vba.
OpenOffice.org) в состав OOo, что позволит большему числу пользо-
вателей Excel VBA перейти на открытое программное обеспечение.
«Наката Махо [Nakata Maho], разработчик OpenOffice.org, и Ханно
Мейер-Туров [Hanno Meyer-Thurow], разработчик Gentoo, помогли в
реализации и разработке API», – сказал он мне. Если вы решили уста-
новить модель VBA на вашем дистрибутиве, то найдете исходный код
на http://go-oo.org, а инструкции по скачиванию на http://wiki.services.
OpenOffice.org/wiki/Getting_It. Однако для экономии времени можно
сделать вот что:
export CVSROOT=’:pserver:anonymous@anoncvs.gnome.org:/
cvs/gnome’
cvs login
cvs -z3 checkout -P OOo-build
Вы обнаружите, что у вас создался каталог OOo-build. Полные
инструкции по сборке расположены по адресу http://wiki.services.
OpenOffice.org/wiki/Building. Процесс достаточно прямолинеен, а если
и сложноват, то полнота описания снижает вероятность совершения
(Рис. 3) На этот раз Calc не закомментировал код VBA, а принял его. ошибки. Так как OOo-build – действительно разрабатываемая версия,

60 Linux Format Октябрь 2006


Автоматизируем OpenOffice.org Учебник

bainm@hector:~/OOo-build$ make Скорая


Making all in po помощь
make[1]: Entering directory `/home/bainm/OOo-build/po’
make[1]: *** No rule to make target `yes’, needed by `all-am’. Если вы собрались
Stop. писать программы
make[1]: Leaving directory `/home/bainm/OOo-build/po’ в стиле VBA, то
не забывайте, что
make: *** [all-recursive] Error 1
первой строкой
Присказка наших дней – «В беде обращайтесь к Google» (если, каждого модуля
(Рис. 4) Установите VBASupport 1, чтобы избежать этой ошибки. конечно, вы не в Китае). Я поискал и обнаружил, что у других людей должна быть
наблюдается та же проблема. К счастью, решение простое: все Makefile Option
то вы можете обнаружить, что придется добавить другие приложения – содержат строку all-am: Makefile $(SCRIPTS), тогда как она должна VBASupport 1
но если что-то потребуется, OOo вам об этом сообщит. быть all-am: Makefile. Чтобы это исправить, надо отредактировать око- В противном
случае вы получите
Поэтому на следующем шаге вы идете в каталог OOo-build и запус- ло 25 Makefile’ов – либо написать простой скрипт: синтаксическую
каете autogen.sh. На моем Debian он не заработал из-за ошибки ‘./ FILES=”Makefile */Makefile */*/Makefile” ошибку.
autogen.sh: line 18:aclocal:command not found’. Быстрое прочесывание for FILE in $FILES
Интернета показало, что лекарство – установка automake: do
sudo apt-get install automake cat $FILE | sed s/”all-am: Makefile \$(SCRIPTS)”/”all-am:
Когда вы заставите работать autogen.sh, следующим шагом будет Makefile”/g > $FILE.tmp
выбор дистрибутива, на котором планируется установка. Выбирайте mv $FILE.tmp $FILE
из Ark, Ark64, Common, CommonLinux, CommonWin32, Debian, done
Debian64, DebianSarge, DroplineGNOME, Frugalware, Frugalware64, После этого make должен работать правильно. Однако, если у вас
Gentoo, Mandriva, Mandriva64, NovellWin32, QiLinux, SUSE-10.0, SUSE- проблемы с программами, можете отключить их с autogen.sh. Потом
10.1, SUSE-64. SUSE9.1, SUSE-9.2, SUSE-9.3, SUSE-PPC, SUSE, Ubuntu, можете воспользоваться советом autogen.sh – расслабиться и выпить
Ubuntu64, UbuntuL10n, translate-org-za-Linux и translate-org-za-win32. чашку чая – хотя у меня это вылилось в питье чая, прогулку с собакой,
Все что вам надо сделать, это запустить autogen.sh с опцией кормление кошек и поход в бар.
--with-distro: Вот и все, уважаемый читатель. Агитируйте разработчиков вашего
/autogen.sh --with-distro=DebianSarge любимого дистрибутива последовать примеру Novell. Примите участие
Далее следим за работой autogen.sh и сообщениями об ошибках, а в сообществе взаимодействия с VBA. Или начните использовать новую
затем устанавливаем недостающие программы: версию OpenOffice.org.
autogen.sh stops with the error: Если вам интересно узнать о вышеупомянутой TV-карте – она
Install the software: заработала, как только я установил SUSE 10.1. Вообще-то я исполь-
configure: error: install pam-devel зую Kaffeine для просмотра каналов – он проще в использовании и
стабильнее, чем исходная Windows-версия программы. Ну как тут не
любить Linux? LXF
«При переходе на OOo
не придется
выкидывать вон свои
наработки.»
sudo apt-get install libpam0g-dev
configure: error: install png-devel
sudo apt-get install libpng2-dev
Чтобы отыскать все программы, придется пошарить в Интернете,
но на базовую конфигурацию много времени не уйдет.
Далее нужно заставить OOo-build скачать необходимые файлы, это
сделать легко: просто запустите ./download. Наконец, запустите make.
Ну, не совсем наконец, потому что вы можете получить следующее
сообщение об ошибке:

Облегчите себе жизнь


Если вы не верите, что взаимодействие OpenOffice.org и Excel VBA поможет With Selection.Font
облегчить вам жизнь, просто гляньте, как легко создать новую таблицу и .Name =”Verdana”
начать в ней писать: .Size = 14
Dim wSheet as worksheet End With
Dim wBook as workbook А как насчет того, чтобы спрятать один из рабочих листов?
set wBook = application.workbooks.add Dim wSheet2 as worksheet
set wSheet = Sheets(0) set wSheet2 = Sheets(2)
wSheet.cells(2,1).value = “Too easy for words” wSheet2.visible = false
Изменить шрифты также просто: Как программист-лентяй, я благодарен людям, выполняющим трудную
wSheet.Range(“A1:Z1”).Select работу по переносу Excel VBA в OpenOffice.org.

Октябрь 2006 Linux Format 61


Новая
Учебник серия! Какстрогого
Безопасность воспользоваться
режима умными
утилитами Linux и защитить вашу машину.

Безопасность:
ЧАСТЬ 1: Первая линия обороны Linux-системы – механизм пользовательских паролей.
Д-р Крис Браун объяснит, как он работает и как ещё можно укрепить защиту системы.

Например, как можно скорее обнаружить вторжение гораздо лучше,


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

Хэшируй это!
Начнем с начал: Linux – многопользовательская операционная систе-
ма. Когда вы входите в нее, вам предложат ввести имя пользователя
и пароль для подтверждения того, что вы – это вы. Выбор хорошего
пароля – ключевая часть сохранения безопасности системы.
Вот как работает механизм паролей в Linux. Информация о поль-
зовательских учетных записях хранится в двух файлах: /etc/passwd и
/etc/shadow. Файл passwd содержит имя пользователя, его числовой
идентификатор (User ID, UID) и домашнюю директорию, но (вопреки
названию) пароля-то в нем и нет: он укрылся в файле shadow (далее
мы увидим, зачем нужно разделение на два файла). Файлы passwd и
shadow параллельны – каждой учетной записи пользователя соответ-
ствует строка в одном файле и строка в другом. Когда пользователь
устанавливает пароль, пароль хэшируется, а результат хэширования
помещается в /etc/shadow.

«У
веренность», по словам Гекаты в трагедии Шекспира Хэширование похоже на шифрование, в том смысле что из
«Макбет», «несет погибель смертным». Она хотела ска- внятного текста получается полная белиберда; однако, в отличие от
зать, что чрезмерная вера Макбета в себя в конце концов шифрования, хэширование – операция необратимая. Каждый раз,
его погубит: ведь считая себя неуязвимым, он необоснованно риско- когда вы вводите пароль, он хэшируется, и полученный хэш срав-
вал. Прямо как вы! Вообразили, что ваш Linux неуязвим? Вы идете к нивается с тем, что прописан в /etc/shadow. Linux не хранит пароли
пропасти… в чистом виде.
Наш
Есть немало свидетельств, что работать в Linux куда безопаснее, В зависимости от вашей Linux-системы, у вас есть выбор из трех
эксперт
чем в Windows. Я сам видел цифры: Linux «из коробки» подхваты- путей хэширования:
Д-р Крис Браун вает заразу за три месяца, тогда как Windows – за три часа (см. www. 1 Функция crypt от Unix, болтающаяся в системе уже много лет.
независимый honeynet.org). Но это не повод относиться к безопасности своей сис- Команда crypt реализует алгоритм DES (Data Encryption Standard) и
инструктор по Linux темы спустя рукава. генерирует 13-символьный хэш.
с сертификатами 2 MD5, который, как вы имели шанс заметить, используется для вери-
В данной серии, состоящих из пяти уроков по безопасности Linux и
Novell и Red Hat,
имеет степень соответствующим открытым утилитам, мы рассмотрим, как обнаружи- фикации ISO-образов компакт-дисков и передаваемых по сети файлов,
доктора наук по вать уязвимости и прикрывать их. В первой части мы рассмотрим паро- а также в цифровых подписях. MD5 генерирует 34-символьный хэш.
физике элементарных ли и поговорим о контроле над привилегиями, даваемом sudo. 3 Blowfish (или, скорее, хэш-функция, выведенная по алгоритму
частиц, недавно Между безопасностью и удобством всегда существует компромисс. Blowfish), генерирующий 60-символьный хэш.
написал книгу о SUSE
для издательства
Машина, запертая в комнате, где нет подключения к сети, конечно, на- Все эти алгоритмы используют «соль» (salt) – случайное число,
O’Reilly. много сохраннее, чем машина с доступом в Интернет посреди проходно- генерируемое при установке пароля. Соль и указанный пользовате-
го двора, однако настолько же и бесполезнее. Попробуем облечь убыт- лем пароль комбинируются и хэшируются. Соль и хэш сохраняются в
ки от уязвимостей в наукообразный вид – получится такая формула: /etc/shadow. Если вы проверите свой /etc/shadow на системе, исполь-
зующей хэши MD5, то ясно разглядите соль и хэш. Например, в строке
Ожидаемые убытки = (вероятность успешного пароля $1$Ue1yZO5i$.6G/4l1AYliPdkTh1AkBi/ восемь символов после
вторжения) x (цена этого вторжения) $1$ – соль, а 22 после последнего $ – хэш. Мы увидим, что соль делает
взлом паролей гораздо труднее.
На этих уроках я буду говорить об уменьшении вероятности Отчасти стойкость пароля зависит от качества хэш-алгоритма.
взлома, но важно также уменьшить потери от успешного вторжения. Хороший хэш-алгоритм в теории делает невозможным вычисление

62 Linux Format Октябрь 2006


Безопасность строгого режима Учебник
на DVD
John the Ripper 1.7.0.2

Стойкие пароли
пароля по хэшу. Конечно, зная хэш, вы всегда можете попробовать
метод грубой силы – хэшировать каждую возможную последователь-
ность из (допустим) восьми символов в надежде найти соответствие.
Аутентификация с хэшем
Но существует около 90 отображаемых ASCII-символов, а это значит,
Пользователь
что перебрать придется 90 в восьмой степени вариантов – то есть Соль Пароль указывает пароль во
4,304,672,100,000,000. время установки
Если ваша машина способна вычислять 10000 хэшей в секунду, то Соль и хэш запоминаются в
MD5
на весь перебор понадобится 13650 лет, а это, вероятно, дольше, чем файле shadow
вам хотелось бы ждать. Соль еще более усложняет взлом, делая невоз-
можным простое сравнение со списком хэшей для наиболее часто Соль Хэш
употребляемых паролей, так что взломщики могут искать совпадение
только с одним паролем за раз. Хэши
Наш анализ немного наивен, поскольку длина хэша тоже влияет на сравниваются
для
интервал поиска, но по крайней мере будьте уверены – атаки грубой идентификации
силой (перебором) слишком медленны. (Более глубокий анализ мож- пользователя
но найти в книге Брюса Шнайдера «Прикладная криптография», более
поверхностный – в «Цифровой крепости» Дэна Брауна). К сожалению, Хэш
реальный интервал поиска гораздо меньше, поскольку многие люди
выбирают для пароля простые слова или имена: любимого супруга или
собаки, или, того хуже, собственное имя пользователя. MD5

Потрошим колбасу Соль Пароль


Пользователь вводит
пароль при входе
Программы-взломщики паролей автоматизируют атаки, выбирая из
словаря пароль, из которого получается данный хэш. Они пользуют-
ся информацией из вашей базы данных паролей, и, увы, добиваются
успеха пугающе часто. Возьмем, к примеру, популярную утилиту John
the Ripper [Джон-Потрошитель, – прим. ред.]. Не ждите, что результаты появятся сразу. Для тестирования я
Вы можете скачать «Джона» с www.openwall.com. Перед запуском создал десять пользовательских учетных записей со следующими
слейте содержимое /etc/passwd и /etc/shadow в один файл. Это делает паролями: user1pw; secret; terces; secret42; Secret; ducttape; England;
команда unshadow (включенная в пакет John the Ripper): pit; coat; milewide; sausages [те самые колбасы, – прим. ред.]. Из них
# unshadow /etc/passwd /etc/shadow > passwdcombo John нашел secret, terces и Secret в течение нескольких минут. В тече-
В результате получится файл, где хэши будут вставлены во второе ние ночи он нашел England и sausages. Пять из десяти, хотя, конечно,
поле файла passwd (как это было до изобретения shadow). Для выпол- некоторые из этих паролей были нарочито слабыми.
нения описанной команды вы должны иметь привилегии суперпользо- В тесте участвовала версия John the Ripper 1.6-4 на Fedora Core 5 с
вателя, поскольку только он может читать /etc/shadow. Теперь запус- MD5-хэшами. Если угодно, настраивается John несколькими способа- Скорая
помощь
кайте John. Опций командной строки для настройки поиска хватает, но ми: подключением к нему разных списков паролей; указанием правил
благодаря разумным установкам по умолчанию John будет работать, по трансформации паролей из списка; через файл John.ini; через аргу-
Установите пароль
если ему просто указать имя полученного выше файла: менты командной строки.
на Grub для
# John passwdcombo Успех программ-взломщиков паролей поясняет, почему пароли не предотвращения
хранятся в /etc/passwd: этот файл могут читать все пользователи (он доступа через
часто используется для поиска соответствия между пользователем и загрузку в одно-
UID), так что если бы хэши хранились здесь, любой пользователь мог пользовательском
режиме
Этика взломщика бы начать подбор паролей. Перемещение хэшей в /etc/shadow (кото-
рый может читать только root) блокировало эту линию атаки.
Наши результаты должны также укрепить в вас сознание необходи-
John the Ripper – одна из утилит для оценки уязвимости, мости выбирать сильные пароли. Те, кто использует слова, имеющего-
которыми пользуются и «темные», и «светлые». Первые ся в словаре, просто нарываются на неприятности. С другой стороны,
пользуются ею для взлома паролей. Вторые применяют
использование слишком сложного для запоминания и набора пароля
ее для обнаружения слабых паролей, пока до них не
также неблагоразумно. (У одних моих клиентов пароль root был накле-
добрались плохие парни. Так что для порядка нужно бы написать про отказ
от ответственности. Во-первых, я (как и вся редакция LinuxFormat)
ен на терминал).
абсолютно не одобряю использование этой утилиты в корыстных целях. Один из способов составления хорошего пароля – выбрать два
Во-вторых, если вы решили применить эту утилиту на работе, сначала несвязанных слова и склеить их каким-нибудь знаком пунктуации;
получите «добро» от своего начальника. Есть реальный шанс, что вас например так: pico:drip или tiny-duck. Другой способ – взять сло-
уволят, если обнаружится, что вы запускаете взломщик на рабочих во, заменить часть букв на заглавные, а часть – на цифры: B33rMats
машинах без разрешения, даже если вы руководствуетесь благими (beermats), a1rcr4FT (aircraft).
намерениями. Добиться того, чтобы ваши пользователи использовали сильные
пароли – вопрос обучения. Объясните, как выбрать хороший пароль,

Октябрь 2006 Linux Format 63


Учебник Безопасность строгого режима

и регулярно запускайте взломщик, деленные пункты меню, и доступ к ним получат только знающие
выявляя тех, кто не слушает сове- пароль, причем пароль у каждого пункта может быть своим. Для
тов. Если вы хотите автоматизиро- этого ознакомьтесь с руководством по Grub, доступном на www.gnu.
вать принудительный выбор сильных org/software/Grub/manual.
паролей, рассмотрите как вариант
установку модуля PAM pam_passwdqc. Контроль доступа
Этому модулю можно поручить уста- Не сомневаюсь: вы уже знаете, что в Linux есть специальная учетная
новку паролей, а заодно настроить запись, называемая суперпользователем. Общепринятое имя для этой
его на проверку паролей по длине записи – root, однако ключевой момент – числовой пользовательский
и смешиваемости символов (верхне- идентификатор, UID: для root он равен нулю. Если вы вошли в систе-
го/нижнего регистра, цифр и других му как root, считайте все проверки пройденными, а все права доступа
знаков). Модуль доступен на www. вашими – вы всемогущи. Как модель безопасности, понятие root вызы-
openwall.com. вает примитивное чувство все-или-ничего.
К примеру, если вы хотите позволить кому-нибудь подстраивать
Установка пароля Grub системные часы, дайте ему пароль root, который позволит ему влезть
Взлом пароля – не единственный способ проникнуть в Linux-систе- в секреты своего начальника. С точки зрения ролевой системы, по
му. Большинство систем в качестве загрузчика используют Grub. Grub контролю доступа ролей только две: смертный человек и Бог. Для
достаточно гибок в настройке и включает опции вмешательства в про- потенциального взломщика получение пароля root на вашей систе-
цесс загрузки и редактирования команд загрузки (или даже добавле- ме – абсолютная победа.
ния новых команд). Команда sudo позволяет системным администраторам распре-
Grub умеет передавать аргументы ядру Linux, и один особо инте- делять ответственность между пользователями более гибко. Sudo
ресный трюк заключается в добавлении аргумента init=/bin/sh в конец контролируется конфигурационным файлом /etc/sudoers. Пытаясь
команды загрузки ядра. Этот аргумент скажет ядру, что вместо коман- произвести впечатление на хорошенькую девушку на вечеринке, я
ды init нужно запустить /bin/sh, и вы получите полный доступ к системе могу сказать что-то вроде «sudo предоставляет контролируемое
без ввода пароля суперпользователя. повышение привилегий» (мне никогда не удавалось стать душой
Атаки такого рода можно предотвратить, установив пароль на Grub. вечеринки). Или, говоря проще, он позволяет указать, кому что раз-
Скорая Тогда интерактивные опции Grub не включатся до тех пор, пока не будет решается делать.
помощь введен верный пароль. Пароль нужен не на загрузку согласно имеюще- Освоение sudo в значительной степени означает освоение синтак-
муся файлу конфигурации Grub, а на редактирование и интерактивный сиса файла /etc/sudoers. К сожалению, документация для sudoers
Хотя сильные ввод команд. описывает синтаксис файла с использованием расширенной формы
пароли трудно Пароль для Grub установить легко. Откройте файл /boot/Grub/menu. Бэкуса-Наура, нотации для формального описания грамматик: если вы
запомнить, но lst и добавьте в глобальные настройки (в начале файла) строку вроде не так давно получили ученую степень по компьютерным наукам, все
лучше брать такие, этой: будет отлично, в противном случае – оставьте надежду. Тем не менее,
чем слово из
словаря или имя
password --md5 $1$H06141$PTIpTGW7fNKspluqd1Mdk. несколько примеров прояснят ситуацию.
любимой. Мы опять видим MD5-хэш (вместе с солью), который мы уже В качестве простого примера допустим, что я хочу разрешить поль-
встречали ранее. Есть несколько способов его генерации. Во-первых, зователю harry изменять системное время и дату из командной строки,
можно просто скопировать хэш существующей учетной записи из фай- используя команду date. Команда date позволяет любому пользовате-
ла /etc/shadow. Естественно, тот, для которого вы знаете пароль. Во- лю, запустившим ее без аргументов, узнать текущее время и дату:
вторых, можно запустить Grub из командной строки и ввести коман- $ date
ду md5crypt. Программа попросит вас ввести пароль и выведет хэш. Thu Sep 15 07:56:52 BST 2006
Диалог выглядит так: А вот если вы попытаетесь изменить время и дату, не будучи root,
# Grub это вам не удастся:
GNU Grub version 0.95 (640K lower / 3072K upper memory) $ date 09150755
Grub> md5crypt date: cannot set date: Operation not permitted
Password: ********* Thu Sep 15 07:55:00 BST 2006
Encrypted: $1$H06141$PTIpTGW7fNKspluqd1Mdk. Чтобы harry мог изменять дату и время, вы должны сообщить sudo,
Grub> quit что на запуск date у него есть права root. Для этого поместите такую
(Теперь можно вставить этот хэш в /boot/Grub/menu.lst) строку в /etc/sudoers:
Если вы теперь загрузите машину, имея эту строку в файле конфи- harry snowhite=(root) /bin/date
гурации Grub, то сможете только выбирать ОС из предопределенных в В терминологии sudo это называется спецификацией привилегий.
menu.lst, клавишами «вверх» и «вниз», а для других действий придется Давайте рассмотрим каждое поле:
нажать p и ввести пароль. harry Первое поле – учетная запись, которой мы даем особые
В мультизагрузочной системе можно также заблокировать опре- привилегии.
snowhite Второе поле – имя машины, к которой имеют отношения
эти привилегии. Указание конкретного имени позволит вам
держать данные sudoers на целую когорту машин в одном
файле (через NFS, например), и настройка будет у каждой
Атаки физического доступа своя. Часто в этом поле можно видеть ALL.
=(root) Эта запись указывает пользователя, чьи права используются
Перехват процесса загрузки Grub требует физического доступа к машине, и
для запуска команд.
если этот доступ есть, то есть и способы обхода пароля. Например, кнопка
Reset вашего компьютера заслуживает бирки «Для root-доступа нажимать /bin/date Последнее поле – имя команды, которую может запускать
здесь». Возьмите LiveCD с диска к нашему журналу и загрузитесь с него, да даже пользователь. Полный путь указывать обязательно.
просто выберите спасательный (rescue) режим загрузки штатной ОС со стандартного носителя – и в Для редактирования файла sudoers вы должны быть root и исполь-
любом из этих случаев у вас будет полный доступ ко всей файловой системе. В конце концов, если и зовать при этом команду visudo (а не обычный редактор). Наш друг
это не удалось, всегда можно взять отвертку и унести жесткий диск в кармане. visudo заблокирует файл от одновременных обновлений и проверит
его синтаксис перед сохранением.

64 Linux Format Октябрь 2006


Безопасность строгого режима Учебник

С этой строкой в sudoers harry может менять время и дату так:


$ sudo date 09150755
У harry спросят пароль. Некоторые дистрибутивы Linux включают в
/etc/sudoers строку вроде этой:
Defaults targetpw
При наличии этой строки harry должен будет вводить не свой
пароль, а пароль того пользователя, от лица которого запускается
команда (обычно root). Вы должны удалить эту строку из sudoers, что-
бы пользователь вводил свой пароль, а не root’а. Иначе будет потеряна
вся гибкость ролевой системы. Вы также должны удалить такую стро-
ку, если у вас она найдется:
ALL ALL=(ALL) ALL
Когда harry воспользуется sudo и введет пароль, sudo на какое-
то время позволит ему выполнять команды без проверки пароля. По
умолчанию этот промежуток времени равен пяти минутам; вы можете
его изменить, добавив в sudoers такую строку:
Defaults timestamp_timeout=0
Нулевое значение означает, что sudo будет спрашивать пароль
всегда.

Ролевая игра
Давайте рассмотрим другие особенности sudoers. Ключевое слово ALL
используется в некоторых местах файла. Например:
isaac ALL=(ALL) ALL
Эта строка говорит о том, что пользователь isaac может запускать QPaMaT (живет на http://qpamat.berlios.de) – удобная утилита поддержки паролей на базе Qt,
любую программу от лица любого пользователя на любой машине позволяющая управлять всеми паролями как бы из одного центра.
(конечно, если он укажет свой пароль или пароль соответствующего
пользователя на нужной машине).
Вы также можете определять псевдонимы (alias). Псевдонимы – это Вы можете рассматривать USERMGMT как роль (хотя в докумен-
просто именованные списки пользователей, машин или команд. Сами тации к sudo этот термин не используется), определяющую команды,
по себе псевдонимы ничего не делают, зато они облегчают написание которые играющий эту роль может выполнить.
привилегий для множества пользователей. Покажу вам на примере. Можно определять псевдонимы пользователей (имя перечня поль-
Пусть вы хотите дать определенному пользователю права на управ- зователей) и присвоить им роли:
ление пользовательскими учетными записями. Для этого есть мно- User_Alias ADMINS tom,joe,sue
жество утилит – useradd, groupadd и т.д. В sudoers вы можете опреде- ADMINS ALL=(root) USERMGMT
лить командный псевдоним (назовем его USERMGMT): Таким способом мы объявили, что tom, joe и sue могут играть роль
Cmnd_Alias USERMGMT=/usr/sbin/useradd,/usr/sbin/usermod,\ USERMGMT.
/usr/sbin/groupadd,/usr/sbin/groupmod,\ Так же можно определить и список машин, используя диапазон IP-
/usr/sbin/userdel,/usr/sbin/groupdel адресов или имена хостов:
Обратите внимание на символ \, означающий, что строка имеет про- Host_Alias LOCALNET 192.168.0.0/255.255.255.0
должение. Определив псевдоним, мы можем дать пользователю isaac Host_Alias TRUSTEES snowhite,happy,sneezy
возможность запускать любую из этих программ таким образом: Теперь мы можем дать определенным пользователям привилегии
isaac ALL=(root) USERMGMT только на определенных машинах:
ADMINS TRUSTEES=(root) USERMGMT
Что ж, на сегодня хватит. Вы узнали о том, как работает механизм
паролей в Linux, и, надеюсь, до вас дошло, почему необходимо приду-
мывать сильные пароли. Вы увидели, как можно защититься от триви-
альной атаки с физическим доступом, установив пароль на Grub. Вы
узнали, как избежать раздачи пароля root кому попало и использовать
sudo для того, чтобы позволить определенным пользователям запус-
кать определенные программы с ограниченными привилегиями. LXF

Скорая
помощь

Никогда не
выдавайте пароль
root. Если кому-то
понадобилось
ограниченное
повышение
Наши Live-дистрибутивы на вид безобидны, но при физическом привилегий,
доступе к вашей машине кто угодно может получить через них используйте sudo.
привилегии root.

Через месяц Мы поотключаем ненужные службы и закрутим гайки прав на работу с файлами.

Октябрь 2006 Linux Format 65


Разработка
Учебник 3D-игры.
Разработка Месяц за месяцем, вы
3D-игры
создаете собственную стрелялку.

Ogre: Освещаем
ЧАСТЬ 3: Как превратить травянистый холм в крепость в стиле Тюдоров и создать
солнце и луну всего на четырех страницах? У Пола Хадсона есть ответ...

файл terrain_detail.jpg обеспечивает детали, которые будут расположе-


ны поверх terrain_texture.jpg, чтобы текстура выглядела сложнее, чем
она есть на самом деле.
Чего нам не хватает, так это места для нашей постройки. В моей
версии terrain.png (она находится на диске) я подредактировал карту,
чтоб выделить пространство для здания (см. «Создание карты высот в
Gimp», стр. 68). Вы также заметите, что я сменил цвет terrain_texture.
jpg на цвет травы, ну устал я от этой пустыни! Теперь откройте в тексто-
вом редакторе файл terrain.cfg и найдите строчку #VertexNormal=Yes.
Знак # – это комментарий, означающий, что VertexNormal отключен.
Удалите #, чтобы включить опцию – это вынудит Ogre генерировать
нормали для нашего ландшафта, которые понадобятся нам позже
(см. врезку «Зачем нужны нормали» на стр. 67). В файле resources.cfg
проверьте, что в секции General указано FileSystem=., это заставит Ogre
считывать файлы ландшафта из вашего текущего каталога. Вперед!
Запустите нашу игру – вы увидите обширную площадку, здесь-то мы
и поставим...

Дом, который построил Пол


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

В
этот урок мы включили много интересного: наша задача – взять объекта, которая позволит позиционировать дом в пространстве). Мы
пустой ландшафт из прошлого номера, построить дом на плато, ставим дом раз навсегда, двигаться ему не надо, поэтому просто объ-
добавить света и тени, и, самое интересное, позволить игроку явим Entity в chad.h. Добавьте строку в chad.h сразу за определением
гулять по дому. Легко? Ой, нет. А моя задача – как раз облегчить рабо- m_OceanFlowNum:
ту, поэтому приготовьтесь разогнать игру до скорости света! Entity* HouseEntity
Мы загружали ландшафт в игру Висельник Чед с помощью файла
Наш terrain.cfg, поставляемого вместе с медиа-пакетом Ogre. Всего одной
эксперт строкой кода создается живописная местность, где можно побродить,
Пол Хадсон но остаются две проблемы: на границах ландшафт обрывается в пус-
написал три книги тоту и нет места, где можно поставить дом. Поэтому нам надо сначала
по Linux и одну по
PHP, он участвует отредактировать файл ландшафта, пусть запляшет под нашу дудку.
в двух Переместите файл terrain.cfg из каталога media в ваш главный
GPL-проектах каталог, где размещен код. Затем переместите файлы terrain_detail.jpg,
для Mono terrain.png и terrain_texture.jpg из media/materials/textures в ваш глав-
на SourceForge.
ный каталог. Учтите, я сказал «переместите», а не «скопируйте» – не
Пол любит Emacs.
оставляйте оригиналы там, где они находятся, не то они будут читать-
ся вместо ваших собственных файлов. Эти четыре файла определяют,
как выглядит и ведет себя ландшафт.
Используемый нами менеджер сцены, ответственный за обработ-
ку неба и земли, создает ландшафт по двумерной карте высот (это
полутоновой план ландшафта, на котором наивысшие точки показаны
белым цветом, а самые низкие – черным). В файле terrain.cfg указана
карта высот terrain.png. Действительный цвет определяется файлом Тюдоровский домик днем – дымоход отбрасывает тень на крышу,
terrain_texture.jpg, который «натягивается» на весь ландшафт. Наконец, а внизу слева тень от ландшафта.

Месяц назад Мы научили нашего героя двигаться и добавили реалистичный эффект воды.

66 Linux Format Октябрь 2006


Разработка 3D-игры Учебник

новый дом
на

Код из учебника

Теперь добавьте этот код в конец метода createScene() файла chad.


cpp:
HouseEntity = m_SceneMgr->createEntity(“house”, “tudorhouse.
mesh”);
SceneNode* HouseNode = m_SceneMgr->getRootSceneNode()->
createChildSceneNode(“HouseNode”);
HouseNode->attachObject(HouseEntity);
HouseNode->translate(1100,137, 500);
HouseNode->scale(0.25,0.125,0.25);
Файл tudorhouse.mesh – один из стандартных сеточных объектов,
входящих в Ogre, и он выглядит великолепно. Заметим также, что дом
огромный, поэтому я использовал scale() и приспособил его размер к
ландшафту. Вот и все, что требовалось для добавления дома в нашу
игру, поэтому перезапустите make и полюбуйтесь результатом. Нет,
определения столкновений пока нет – оставим его на потом!

Небесное вторжение
Сейчас свет в нашей сцене рассеянный, и у сцены скучный и безжиз-
ненный вид. Добавлю-ка я немного простых источников, чтобы вы При вызове m_SceneMgr->setShadowDebugShadows(true) Ogre покажет, куда предметы
увидели, как работают свет и тени. Упор сделан на слове «простые», отбрасывают тени. Дом отбрасывает тень и от солнца, и от луны.
потому что Ogre плоховато работает с освещением неба и земли.
Потребуется четыре переменных для работы со светом в chad.h; мещался по ландшафту. Также необходимо включить тени. У Ogre есть
добавим их в конец класса CChadGame: три типа теней и три типа света. Разница между тенями заключается
Light* m_SunLight; в скорости: тень низкого качества прорисовывается быстрее всего.
Light* m_MoonLight; Первый тип – SHADOWTYPE_TEXTURE_MODULATIVE, использующий
double m_SunY; простую текстуру для создания теней в нужных местах. На практике
double m_SunZ; тени получаются грубоватые – сгодятся только для тех, у кого сла-
Да, мы собираемся создать два света: один для солнца, второй бая видеокарта, все остальные в восторг не придут. Следующий по
для луны. Для получения простого эффекта смены дня и ночи нам качеству тип – SHADOWTYPE_STENCIL_MODULATIVE. Тени выглядят
надо вращать два источника света по кругу, чтобы свет плавно пере- более привлекательно, но создаются в один проход, поэтому резуль-
тат не идеален. Наконец, SHADOWTYPE_STENCIL_ADDITIVE. Тут тени
выглядят превосходно, для каждого источника света построение осу-
Зачем нужны нормали ществляется за отдельный проход, поэтому пересечение теней от двух
источников будет выглядеть темнее, чем остальные части тени. Как вы Скорая
3D-графика составляет рисунки из множества многоугольников, помощь
понимаете, это довольно сложно, но заманчиво!
обычно треугольников, потому что они проще. Но как Ogre узнает, Каждый из трех типов источников характеризуется своим способом
в каком направлении смотрит треугольник? В нашем понимании, у освещения. Точечный источник излучает свет как Солнце – одинаково Игра Висельник
плоской фигуры две стороны, но используется-то всего одна, поэто- Чед написана на 64-
во всех направлениях, из определенной точки. Источник направлен- битной машине, но с
му необходимо сообщить Ogre, где у треугольника верх. Благодаря
ного света излучает свет в одном направлении и не имеет начальной использованием 32-
этой информации Ogre сможет правильно освещать объекты. Здесь
и пригодится нормаль: это вектор, перпендикулярный поверхности и точки. С нашей позиции на Земле солнце выглядит направленным битной ОС, поэтому
источником, потому что мы видим его свет, исходящий из одного мы не гарантируем,
направленный вверх. что игра пойдет
При программировании на направления, но не видим его в других направлениях. Наконец, сущес-
на 64-битной ОС.
чистом OpenGL нам пришлось твуют источники узконаправленного света, типа софитов: у них есть Однако если у
бы бесчисленное множест- начальная точка, направление, их свет слабеет с расстоянием, ширину вас 64-битные
во раз вызывать функцию Нормаль угла освещения вы назначаете сами. версии библиотек,
glNormal(), которая определя- например, zziplib,
Оба наших источника, солнце и луна, находятся очень дале-
ет нормаль для последующих вам, возможно,
ко, поэтому они могут считаться источниками направленного света. повезет больше.
векторов. Но в Ogre доста-
Не будем пренебрегать деталями – выберем опцию SHADOWTYPE_ Если у вас все-таки
точно отредактировать terrain.
STENCIL_ADDITIVE, чтобы тени хорошо смотрелись. В последующем есть проблемы,
cfg и установить VertexNormal попробуйте добыть
на Yes, чтобы Ogre сам вы- Плоскость коде немного приглушим рассеянное освещение, чтобы заметнее ста-
последнюю версию
числял нормали к ландшафту. ли дневной и ночной источники света.
DevIL и запустить
Благодаря этим нормалям наш Вот код – поместите его в метод createScene(): ldconfig от имени
ландшафт будет правильно ос- m_SceneMgr->setAmbientLight( ColourValue(0.35, 0.35, 0.35) ); root.
вещаться, потому как Ogre зна- Нормаль сообщает Ogre, где у m_SceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_
ет лицевую сторону каждого треугольника верх, это позволяет ADDITIVE);
треугольника. правильно осветить треугольник. m_SunLight = m_SceneMgr->createLight(“Sun”);
m_SunLight->setType(Light::LT_DIRECTIONAL);

Октябрь 2006 Linux Format 67


Учебник Разработка 3D-игры

m_SunLight->setDiffuseColour(1.0, 1.0, 1.0); BSP означает binary space partition [двоичное разбиение пространс-
m_SunLight->setSpecularColour(1.0, 1.0, 1.0); тва] и позволяет очень быстро загружать и обрабатывать закрытые
m_SunLight->setDirection(Vector3(0, sin(m_SunY), sin(m_ пространства. Карты BSP используется во многих играх, главным обра-
SunZ))); зом в тех, что используют движок Quake, включая Jedi Knight, Soldier of
m_MoonLight = m_SceneMgr->createLight(“Moon”); Fortune, Half-life. Проблема с BSP состоит в том, что он не умеет хоро-
m_MoonLight->setType(Light::LT_DIRECTIONAL); шо обрабатывать открытые пространства (включая наш ландшафт),
m_MoonLight->setDiffuseColour(0.3, 0.3, 0.5); поэтому текущий менеджер сцены тоже придется оставить.
m_MoonLight->setSpecularColour(0.0, 0.0, 0.0); Добавление нового менеджера сцены вводит интересные осложне-
m_MoonLight->setDirection(Vector3(0, -sin(m_SunY), sin(m_ ния в наш игровой движок. Во-первых, необходимо отредактировать
SunZ))); файл resources.cfg, чтобы использовался файл карты Quake 3. Сотни
Привести луну и солнце в движение можно, отредактировав метод карт доступны бесплатно через сеть, но на самом деле демо-версии
frameStarted(), чтобы метод setDirection() вызывался для каждого Ogre уже поставляются с очень красивой картой Chiroptera (досту-
источника. Необходимо также изменить переменные m_SunY и m_ па для скачивания по адресу http://simland.planetquake.gamespy.com/
SunX, заставив их медленно увеличиваться. Вставьте этот код в начало pages/q3maps/chiroptera.htm), ею мы и воспользуемся.
метода frameStarted(): Во-вторых, необходимо разделить методы createScene()
m_SunLight->setDirection(Vector3(0, sin(m_SunY), sin(m_ и frameStarted() на CreateIndoorScene(), createOutdoorScene(),
SunZ))); frameStartedInside(), frameStartedOutside(). Проще всего это сде-
m_MoonLight->setDirection(Vector3(0, -sin(m_SunY), -sin(m_ лать, переименовав createScene() и frameStarted(), например, как
SunZ))); createOutdoorScene() и frameStartedOutside(), а затем создав заглушки
m_SunY += 0.001; для createIndoorScene() и frameStartedIndoor(). Также потребуется объ-
m_SunZ += 0.001; явить новые методы в chad.h.
Теперь вы должны увидеть, что здание отбрасывает тень. Сделав это, добавьте строчку в chad.h в конце класса CChadGame:
int scenemanager;
Похождения бравого солдата Квейка Переменная будет показывать, снаружи мы или внутри. Теперь
Вы помните, что я собирался строить «Тюдоровскую крепость», но можно написать новый метод frameStarted() для автоматического
пока что мы имеем только невинного вида домик на плоской траве. На вызова нужного «подметода», нечто вроде такого:
крепость не похоже, правда? Сейчас мы это изменим, соорудив внут- bool CChadGame::frameStarted(const FrameEvent& evt) {
ри заведомо неприветливую обстановку. На последних трех уроках мы switch (scenemanager) {
играли в песочнице менеджера сцен Ogre для открытого ландшафта, case ST_EXTERIOR_CLOSE:
но если наши персонажи намерены разгуливать по зданию, потребует- return frameStartedOutside();
ся еще один менеджер сцены – BSP. break;
case ST_INTERIOR:
return frameStartedInside();
break;
Создание карт высот в Gimp }
return true;
Карты высот – это полутоновые текстуры, которые сообщают Ogre, как надо рисовать ландшафт, }
где белые точки – это максимальные высоты, а черные – минимальные. Ландшафт, с которым Переменную scenemanager необходимо переустанавливать, как
мы работали на последних двух уроках, был уже заготовлен в Ogre, и выглядел он не особо только происходит смена типа сцены. Для открытого пространства необ-
хорошо, поэтому мы использовали Gimp и подредактировали края таким образом, чтобы они
ходимо добавить эту строку в начале метода createOutdoorScene():
плавно уходили в море. Используя Gimp, я обнаружил, что лучше всего менять высоту с
scenemanager = ST_EXTERIOR_CLOSE;
помощью Кисти – вот как она настраивается: в окне Редактор кисти выберите круглую форму и
наименьшее значение жесткости, затем измените радиус до нужного вам значения. Установите Метод frameStartedInside() новый, но ничего особенного не делает –
цвет кисти черным, а затем превратите ваш ландшафт в остров. Для создания площадки я в данный момент он должен представлять урезанную версию метода
посадил большую светло-серую кляксу в правом верхнем углу карты. Малое значение жесткости frameStartedOutside() и обрабатывать простой ввод от клавиатуры. Вот
позволяет сделать плавный переход от серого к черному, соответствующий на ландшафте пример подобного кода:
пологому холму, куда будет взбираться наш герой. bool CChadGame::frameStartedInside() {
m_InputReader->capture();
if(m_InputReader->isKeyDown(KC_ESCAPE)) return false;
Vector3 translateVector = Vector3::ZERO;
float playerspeed = m_Player->getSpeed();
if (m_InputReader->isKeyDown(KC_W)) translateVector.z = -
playerspeed * 5;
if (m_InputReader->isKeyDown(KC_S)) translateVector.z =
+playerspeed * 5;
if (m_InputReader->isKeyDown(KC_A)) translateVector.x = -
playerspeed * 5;
if (m_InputReader->isKeyDown(KC_D)) translateVector.x =
+playerspeed * 5;
if (m_InputReader->isKeyDown(KC_F1)) createIndoorScene();
if (m_InputReader->isKeyDown(KC_F2)) createOutdoorScene();
m_Camera->moveRelative(translateVector);
return true;
}
Слева представлена исходная карта высот, справа её отредактированный вариант: по
Вы заметите, что переменная playerspeed умножена на пять – дело
краям зачернено, чтоб получился остров, а светлое пятно – площадка для нашего дома.
в том, что карта Quake огромна, и прогулка с прежней скоростью пре-
вратилась бы в вечность. Если такое решение вы находите примитив-

68 Linux Format Октябрь 2006


Разработка 3D-игры Учебник

начальную позицию игрока на карте и устанавливает камеру в эту


точку. Нам необходимо установить оси камеры pitch и yaw потому, Благодарности
что Quake использует для плоскости пола координаты Х и Y, а Z – для
высоты, а мы обычно используем для пола X и Z и Y – для высоты.
Мы еще не закончили: понадобится добавить две строки в начало
метода createOutdoorScene(), чтобы Ogre обновлял все свои ресурсы Графическая карта
Nvidia GeForce 7800,
при загрузке сцены в открытом пространстве. Без них закрытая сце-
используемая для
на обновит ресурсы и выгрузит все ресурсы открытой сцены. Итак, разработки в этой
добавляем две строки: серии учебников,
ResourceGroupManager::getSingleton().clearResourceGroup(Res была предоставлена
ourceGroupManager::getSingleton().getWorldResourceGroupName()); фирмой MSI –
спасибо, ребята!
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
Наконец, проверим, что вызов createScene() в конструкторе
CChadGame() (который находится в начале chad.cpp) заменен на
createOutdoorScene(). Ну вот и все: запустите make, затем chad.
Это не интерьер XVI века, но карта Quake погружает наш дом в Посмотрим, заметите ли вы разницу....
такие же потёмки, как во времена Тюдоров.
Сложный вопрос
ОК, разницы нет – по крайней мере, с точки зрения игрока. Это
ным, попробуйте увеличить ландшафт, удалив вызов scale() для дома, потому, что мы написали код обработки для закрытой сцены, но не
а затем выберите значение скорости, пригодное везде. написали кода, загружающего эту сцену. Вы вольны написать код,
Теперь перейдем к трудной задаче: загрузке карты Quake. Это способный обнаруживать, что игрок входит в дверь дома, а мы напи-
делается в методе createIndoorScene(), который загрузит нашу карту шем более простую (лишь бы работала) «клавишную реализацию
и создаст новую камеру и область просмотра. Прежде чем перейти переключения сцен», которую можно использовать в любом месте
к другому менеджеру сцены, необходимо удалить камеры и области ландшафта.
просмотра, ассоциированные с текущим менеджером. У нас уже есть функции обработки клавиатуры frameStaretd*(),
Вот этот код: поэтому остается добавить в них поддержку двух дополнительных
void CChadGame::createIndoorScene() { клавиш: F1 (для загрузки закрытой сцены) и F2 (для загрузки откры-
scenemanager = ST_INTERIOR; той сцены). Код, который загружает и выгружает ресурсы, камеры и
if (m_SceneMgr != NULL) { области просмотра, расположен в методах create*Scene(), поэтому
m_Ogre->getAutoCreatedWindow()->removeAllViewports(); о них беспокоиться не надо. Все, что нам надо сделать, это вызвать
m_SceneMgr->destroyAllCameras(); требуемый метод create*Scene(),например, так:
} if (m_InputReader->isKeyDown(KC_F1)) createIndoorScene();
m_SceneMgr = m_Ogre->createSceneManager(“BspSceneMan if (m_InputReader->isKeyDown(KC_F2)) createOutdoorScene();
ager”); Поместите эти две строчки вместе с остальными вызовами
ResourceGroupManager::getSingleton().linkWorldGeometryToR isKeyDown(), перезапустите make, затем саму игру. На этот раз вы
esourceGroup( должны попасть на карту Quake и исследовать ваш новый интерьер,
ResourceGroupManager::getSingleton().getWorldResourceGrou просто нажав клавишу F1 и пару секунд подождав, пока загрузятся
pName(), “maps/chiropteradm.bsp”, m_SceneMgr); необходимые ресурсы Ogre.
ResourceGroupManager::getSingleton().initialiseAllResourceGr Мы рассмотрели в этом руководстве много нового. Труднее всего
oups(); уместить в голове переход от одного менеджера сцены к нескольким;
ResourceGroupManager::getSingleton().clearResourceGroup(Re все остальное сравнительно просто! Я надеюсь, что вам понрави-
sourceGroupManager::getSingleton().getWorldResourceGroupNa лось, как легко Ogre создает освещение и тени и работает с уровня-
me()); ми BSP, хотя покамест некоторые недостатки игры могут и раздра-
Не моя
ResourceGroupManager::getSingleton().loadResourceGroup(Re жать – отсутствие обнаружения столкновений, плохой ввод, небо, на
вина
sourceGroupManager::getSingleton().getWorldResourceGroupNa котором не сказывается освещение, и так далее. Часть недостатков Вы, возможно,
me(), false, true); вы можете исправить сами, ведь это руководство написано для того, заметили довольно
уродливые обход-
m_Camera = m_SceneMgr->createCamera(“Player Cam”); чтобы игру программировали вы, а не я. Но с остальными мы разбе-
ные пути в коде
m_Camera->setNearClipDistance(4); ремся вместе. До следующего раза! LXF этого месяца. Про-
m_Camera->setFarClipDistance(4000); блема систем типа
m_Viewport = m_Ogre->getAutoCreatedWindow() Ogre, умещающих
->addViewport(m_Camera); множество фун-
кций всего в паре
m_Viewport->setBackgroundColour(ColourValue(0, 0, 0));
вызовов методов,
ViewPoint vp = m_SceneMgr->getSuggestedViewpoint(true); состоит в том,
m_Camera->setPosition(vp.position); что вы толком
m_Camera->pitch(Degree(90)); не знаете, что тво-
рится там за кули-
m_Camera->rotate(vp.orientation);
сами. К сожалению,
m_Camera->setFixedYawAxis(true, Vector3::UNIT_Z); документация
} Ogre не идеальна,
Установка значений «ближней» и «дальней» дистанций обреза- и иногда прихо-
ния необходима, потому что наша камера работает внутри замкнутой дится действовать
наобум.
области, и нужно фокусироваться на вещах, расположенных близко
к камере. Метод getSuggestedViewport() считывает произвольную

Через месяц Мы попробуем заняться искусственным интеллектом.

Октябрь 2006 Linux Format 69


Hardcore
Учебник HardcoreLinux:
Linux Проверь себя на
крутых проектах для умников

Greasemonkey:
Не чесались ли у вас руки улучшить даже самые отличные web-сайты?
Greasemonkey научит сайты работать так, как хочется Нику Вейчу, а то и вам.
Flickr позволяет пользователям помечать свои фотографии, то
есть назначать для них ключевые слова-тэги, по которым затем мож-
но выполнять поиск. Но со страницы каждой конкретной фотографии
можно искать только по одному ключевому слову за раз. Если вы круп-
ным планом (макро) засняли цветок наперстянки и выбрали ключевые
на DVD слова «природа макро наперстянка» (“nature macro foxglove”), то найти
похожие кадры, щелкая на метки по отдельности, будет сложновато. Я
Firefox 1.5.0.4
решил добавить возможность искать по всем имеющимся ключевым
Greasemonkey 0.6.4
словам одновременно. Это хороший тестовый пример, поскольку нам
потребуется считывать данные со страницы и записывать их обратно.
Начнем с чтения.

Фокус с Flickr
Требуется найти на странице Flickr, где помещено наше фото и инфор-
мацию о ключевых словах. У JavaScript хватает методов обработки
DOM (внутренней иерархии HTML-документа), и все, что нужно сде-
лать – это посмотреть, где в дереве документа находится нужная
информация и как однозначно отличить ее от прочего. Проще все-
го использовать для этих целей встроенный в Firefox браузер DOM.
Откройте его в Tools – меню инструментов Firefox – и пощелкайте по
нему, чтобы увидеть дерево иерархии. Firefox любезно покажет мига-
ющую красную рамочку вокруг того элемента, который вы выбрали в
DOM Inspector.

З
адача этого месяца ерундовая: всего-навсего создать собствен- Похоже, что нам повезло. Список ключевых слов на странице фото-
ный web-браузер, способный заново интерпретировать обвет- графии хранятся в элементе <div> и помечен как thetags. Это уникаль-
шавшие сайты и заставить их слушаться наших команд. ный идентификатор. Таким образом, мы можем просто перетряхнуть
Думаете, пахать придется серьезно? Ну, мы ж не слабаки! Да и все элементы <div> в документе, пока не найдем нужный. Вот кусочек
не забывайте: фишка нашей серии в том, что черная работа не для JavaScript-кода, который это делает:
нас, главное, чтоб она была сделана. Так что мы и тут извернемся, как var divs, tagsdiv
истые хакеры. divs = document.getElementsByTagName(‘div’);
Наш Firefox – хороший браузер, более чем хороший. Его нужно лишь //Мы сохранили все элементы div как объекты
эксперт чуть-чуть «обработать напильником», например, создать специаль- //в массиве под названием ‘divs’
Ник Вейч ное расширение, позволяющее при помощи заготовленного сценария for (var i=0; i<divs.length; i++) {
Злоупотреблявший
корректировать взятый HTML... Но нам не придется делать даже этого, if(divs[i].id == ‘thetags’){
интернетом еще с тех
пор, как он ходил поскольку – спасибо Аарону Брудману [Aaron Broodman] – на свете tagsdiv=divs[i];
пешком под стол, есть Greasemonkey! Итак, первый этап нашего хитрого плана завершен: }
наш главный мы превратили задачу по написанию миллионов строк кода в задачу }
редактор собирается состряпать небольшой сценарий JavaScript. Ура! Здесь использован метод, позволяющий создать массив всех эле-
любым способом
Хорошо, но прежде чем приступать к созданию сценария, нуж- ментов <div>, а затем искать в нем тот, что нам требуется (thetags).
заставить сайты
работать так, как они но добыть Firefox и Greasemonkey (и то и другое находится на при-
должны, черт побери! лагаемом диске, но проще скачать их прямо из Сети, с сайта http://
greasemonkey.mozdev.org). Кстати, в дальнейшем вам не повредит Не знаете JavaScript?
некоторое знакомство с JavaScript, так что взгляните на врезку справа.
Web-приложение, которое я собираюсь улучшать – менеджер Не беда: если вы хоть раз использовали какой-нибудь язык сценариев,
фотографий Flickr, а вы можете выбрать любой другой сайт на ваш то освоитесь очень быстро. Да и занимаемся мы простейшими
вещами – чтением и записью в DOM. Есть много книг и учебников,
вкус. Хотя было бы неплохо, если бы этот сайт хорошо поддерживался
позволяющих узнать больше, а можно просто взять и разобрать
и имел четкую, понятную иерархическую структуру страниц – напри-
несколько готовых скриптов Greasemonkey.
мер, попытайте счастья с новостным сайтом BBC, с Amazon или с Play. JavaScript: The Definitive Guide David Flanagan (O’Reilly)
Я выбрал Flickr потому, что здесь есть простор для добавления новых http://www.htmlgoodies.com/primers/jsp
функций, а также потому, что визит на этот сайт – повод оставить http://developer.mozilla.org/en/docs/DOM
парочку глумливых комментариев к чужим фото.

Месяц назад Грэм Моррисон использовал PAM-аутентификацию для входа в систему.

70 Linux Format Октябрь 2006


Hardcore Linux Учебник

Обновим Сеть!
Это не самый эффективный способ, но он годится в качестве приме-
ра, и его проще модифицировать для ситуаций, когда требуется найти
более одного отмеченного элемента [в противном случае можно было
бы использовать код var tagsdiv=document.getElementById(‘thetags’), –
прим.ред.]. Более быстрый метод мы покажем в следующей части.
<div> вообще-то содержит много всего – заголовок, ссылки на
иконки, плюс еще по одному <div> на каждый отдельный тэг. И снова
мы можем, перебором в цикле, построить список тэгов. Извлечение
собственно текста метки достигается выборкой HTML-элемента из
нужного узла (какого именно – видно по DOM-структуре). А потом
соберем полученные метки в список, который станет основой запро-
са, который мы передадим обратно на страницу в следующей фазе.
Сосредоточьтесь, привожу этот кусок кода:
if (tagsdiv) {
tagsdiv = tagsdiv.getElementsByTagName(‘div’);
tagslist =’’;
for (var i = 0; i< tagsdiv.length; i++){
if (i>0) {
tagslist = tagslist + ‘+’;
}
tagslist = tagslist + tagsdiv[i].childNodes[3].innerHTML;
}
} DOM Inspector великолепен: не только отображает дерево документа (где скрывается моя
Метод childNodes любого из узлов дерева содержит список всех наперстянка), но и подсвечивает соответствующие области на странице.
дочерних узлов, к которым мы можем обращаться по номерам, чтобы
найти нужный и запросить для него значение innerHTML, в котором ко HTML-текста обратно на страницу. Разработчики JavaScript, видимо, Скорая
содержится HTML-представление этого узла. Оно полезно для прояс- предвидели такую необходимость, и припасли множество встроенных помощь
нения непонятных моментов, но проследите за тем, чтобы запросить функций. Первый вопрос, который нужно решить – это в какое место
его для нужного узла, иначе получите описания совершенно посто- страницы поместить наш текст. Подходящим местом выглядит список Если вы не
ронних тэгов. с информацией о снимке в правой части страницы, ниже списка клю- слишком уверены
чевых слов. Вернувшись в DOM-браузер, мы увидим, что это первый на в своих талантах
Вернем долги странице элемент ul. Так что мы просто создаем новый элемент списка JavaScript-
программиста,
Итак, мы сумели достать нужную информацию из документа. Ура! и вставляем его в нужное место: воспользуйтесь
Настало время поиграть с полученным результатом и записать немнож- var searchtagLi = document.createElement(“li”); готовым
searchtagLi.setAttribute(“class”,”Stats”); сценарием
searchtagText = ‘Search <a href=”http://www.flickr.com/search/ с домашней
страницы
?w=all&q=’+tagslist+’”style=”text-decoration: none;”>similar tags</a> on
Greasemonkey,
Flickr’; там их уйма. Они,
searchtagLi.innerHTML = searchtagText; как правило,
insertpoint = document.getElementsByTagName(“ul”)[0]; прекрасно
документированы
insertpoint.appendChild(searchtagLi);
и содержат много
Метод setAttribute используется для указания, какого класса дол- ценных находок.
жен быть наш новый элемент, чтобы по CSS-стилю не отличаться от
своих соседей.
Текст, который мы добавили – всего лишь ссылка на функцию про-
двинутого поиска Flickr, которой мы, вместо одного ключевого слова,
передаем собранный нами список. Легко видеть, что потом использо-
ван метод innerHTML для записи данных в объект. Объект insertpoint
указывает на ранее найденный элемент ul, так что остается только
вызвать метод appendChild для добавления его в дерево (причем в
самый конец списка, что очень правильно).
Вот и все, и этого достаточно. Чтобы загрузить скрипт Greasemonkey,
просто активируйте это расширение и укажите браузеру на файл
(назвав его как-нибудь вроде something.user.js) – Greasemonkey обна-
ружит файл и позволит вам его загрузить. LXF
Миссия закончена. Небольшая хитрость – и наша добавка
(выделена синим) выглядит так, словно и всегда была здесь.

Октябрь 2006 Linux Format 71


Qt/KDE
Учебник Разработка открытых
Qt/KDE
графических приложений

Модули KDE
ЧАСТЬ 7: Модули, расширения, расширения расширений.... всKIPIте от напряже-
ния и нетерпения под присмотром Андрея Боровского!
делает что-то одно. Мы оставим в стороне вопрос о том, нужно ли
писать модули, и ответим на вопрос, как это можно сделать. Модули
KParts расширяют возможности компонентов KParts, то есть, с точки
зрения основной программы Konqueror, модули являются расширени-
ями расширений. Поддержка модулей KParts возможна, естественно,
не только в Konqueror, но и в любом приложении, поддерживающем
соответствующие компоненты KParts.
Возможно, на этом этапе у читателя возникает вопрос – а зачем
вообще нужны модули Konqueror? Необходимость в механизме моду-
лей была бы очевидна, если бы Konqueror был закрытым приложени-
ем, однако, при наличии исходных текстов, мы можем вносить изме-
нения непосредственно в код компонентов KParts. Это верно, и тем не
менее модули оказываются полезны и в случае открытого приложения.
Главное преимущество использования модулей заключается в лучшей
структурной организации кода. Нам легче писать и отлаживать модули,
связанные с приложением с помощью строго определенного интер-
фейса, нежели вносить изменения в исходные тексты приложения,
написанного другими программистами. К этому следует добавить и
чисто организационный момент – для того, чтобы изменения, сделан-
ные вами в приложении, попали в его основную версию, они должны
быть одобрены другими разработчиками, тогда как в случае с моду-
лями у вас есть возможность самостоятельно решить, какие функции
являются полезными, а какие – нет.
Что же представляет собой модуль KParts с точки зрения взаимо-
действия с приложением? Модуль – это динамическая библиотека
Модули KDE (файл *.so), которая загружается приложением, использующим компо-
Модули KDE (KDE plugins) представляют собой логическое разви- нент KParts. Модуль может добавлять собственные элементы управле-
тие идеи объектно-ориентированной оболочки. Читатели этой статьи ния в меню и на панель инструментов приложения. В некоторых случаях
наверняка знакомы с базовыми концепциями модулей как средств рас- модули также изменяют содержимое главного окна приложения (кото-
ширения уже существующих приложений. Механизм модулей позволя- рое в этот момент управляется соответствующим компонентом KParts).
ет нам не умножать сущностей (приложений) без необходимости вся- В качестве примера мы напишем модуль для компонента KHTMLPart.
кий раз, когда нам требуется новая функциональность. По самой своей Как нетрудно догадаться, этот компонент используется для просмотра
природе модули тесно связаны с теми приложениями, чьи возможнос- страниц HTML. Фактически KHTMLPart представляет собой полно-
ти они расширяют. Нельзя написать «просто модуль». Мы рассмотрим ценный встраиваемый HTML-браузер с поддержкой JavaScript. Класс
программирование модулей для наиболее популярных приложений KHTMLPart является потомком класса KParts::ReadOnlyPart, то есть
KDE и начнем с написания модуля для компонента KParts. он предназначен для просмотра, а не для модификации открывае-
мого файла. Наш модуль будет сохранять открытую в компоненте
K-Части KHTMLPart HTML-страницу в простом текстовом формате.
Модули KParts широко применяются, например, в браузере Konqueror. Модуль для KHTMLPart удобен в качестве примера потому, что в
Сами компоненты KParts представляют собой еще один способ рас- KDevelop есть шаблон проекта такого модуля. В окне Создать новый
ширения возможностей приложения. Примером их использования проект (Рис. 1) мы выбираем пункт KHTMLPart Plugin. Назовем наш
являются встроенные в Konqueror утилиты просмотра файлов различ- проект «textsaver» (полные исходные тексты модуля вы найдете на
ных типов. Каждый раз, когда Konqueror открывает какой-либо файл диске, в файле textsaver.tar.gz). Наш модуль, как таковой, состоит
для просмотра, он загружает соответствующий компонент, который только из двух классов – Plugintextsaver (основной класс модуля) и
встраивается в интерфейс браузера и отображает содержимое файла. textsaverFactory (вспомогательный класс). Оба класса реализованы в
Благодаря динамическим компонентам KParts, Konqueror выполняет файлах plugin_textsaver.h и plugin_textsaver.cpp. Прежде чем вносить
функцию универсального просмотрщика файлов, сохраняя при этом изменения в классы, добавим в файл plugin_textsaver.cpp дополни-
простой дизайн и небольшие размеры основного приложения. Следует тельные заголовочные файлы:
отметить, что универсализм Konqueror иногда подвергается критике, include <stdio.h>
поскольку в Unix традиционно преобладает другой подход – использо- #include <kfiledialog.h>
вание большого числа независимых приложений, каждое из которых #include <qcstring.h>

Месяц назад Мы завершили наше первое настоящее KDE-приложение.

72 Linux Format Октябрь 2006


Qt/KDE Учебник

Этот объект будет добавлен в коллекцию действий приложения,


вызвавшего компонент KHTMLPart, загрузивший наш модуль. Тем, кто
не совсем понимает, о очем идет речь, рекомендуем прочитать поза- на DVD
прошлую статью этого цикла (LXF82), в которой мы познакомились с
Код примеров ста
объектами-действиями. Мы указываем объекту-действию имя соответ- тьи
libkipi 0.1.4 и kipi-
ствующего элемента управления и слот, который должен обрабатывать plugins 0.1.2m
команду. Очевидно, что в общем случае мы можем зарегистрировать
несколько действий для нашего модуля. Нам осталось написать только
сам метод slotAction():
void Plugintextsaver::slotAction()
{
if ( !parent()->inherits(“KHTMLPart”) )
{
QString title( i18n(“HTML Only”));
QString text(i18n(“Only HTML documents can be saved with this
plugin.”));
KMessageBox::sorry( 0, text, title );
return;
}
KHTMLPart *part = dynamic_cast<KHTMLPart *>(parent());
QString FN = KFileDialog::getSaveFileName(“”, “”, 0, “Save Text File
As”);
(Рис. 1) Создаем проект модуля KParts. if (FN == “”) return;
QString Cmd = “html2text > “ + FN;
Рассмотрим сначала класс textsaverFactory, являющийся потом- QCString Text = part->documentSource().local8Bit();
ком класса KParts::Factory и управляющий созданием объекта класса FILE * F = popen(Cmd.ascii(), “w”);
Plugintextsaver (т.е., этот класс реализует фабрику объектов). Такой объект fwrite((char*) Text.data(), 1, Text.length(), F);
создается методом textsaverFactory::createObject(), который сгенерирован pclose(F);
автоматически. Нам вообще ничего не нужно было бы менять в классе }
textsaverFactory, если бы не чистый виртуальный метод createPartObject(). У модуля должна быть какая-то возможность взаимодействовать
Сам по себе он нам не нужен, но для того, чтобы наш модуль мог скомпи- с другими элементами приложения-хозяина (этот термин не следует
лироваться, мы должны создать его реализацию. Странно, что KDevelop, понимать в том смысле, что наш модуль паразитирует на браузере
по крайней мере в версии 3.4.2, не делает этого автоматически: Konqueror). Такая возможность у модуля есть, благодаря тому, что
KParts::Part* createPartObject( конструктору объекта модуля был передан указатель на вызвавший его
QWidget*, const char*, QObject*, объект класса KTHMLPart. Доступ к этому указателю можно получить
const char*, const char*, const QStringList&) с помощью метода parent(). Первый блок кода в методе slotAction()
{return 0;} проверяет, действительно ли объект parent() принадлежит классу
Помимо прочего, разделяемая библиотека, содержащая наш KHTMLPart. На практике это излишне, поскольку модуль никогда не
модуль, должна экспортировать функцию, создающую объект класса будет вызван для какого-либо иного компонента. Далее мы получаем
textsaverFactory. Эта функция, сгенерированная автоматически, экс- указатель на родительский объект KHTMLPart, запрашиваем у пользо-
портируется в формате C: вателя имя файла для сохранения текста (надеюсь, вы еще не забыли,
extern “C” что должен делать наш модуль) и, с помощью метода documentSource()
{ получаем HTML-текст страницы, открытой компонентом KHTMLPart.
void* init_libtextsaverplugin() Метод documentSource() возвращает данные в строке QString в двух-
{ байтовой кодировке. Мы преобразуем полученную строку в локальную
KGlobal::locale()->insertCatalogue(“textsaver”); однобайтовую кодировку и сохраняем результат в переменной Text
return new textsaverFactory; типа QCString. Далее, с помощью функции popen(3), мы запускаем
} внешнюю утилиту html2text, преобразующую данные HTML в простой
} текст. Этой утилите мы передаем содержимое переменной Text и имя
Приложение, вызывающее функцию init_libtextsaverplugin(), знает, файла для сохранения результата. Применяемый нами прием – исполь-
что делать с возвращенным указателем. зование в программе внешней утилиты для решения нашей задачи,
Перейдем к классу Plugintextsaver. Приложение, а точнее, ком- очень широко распространен в Unix-системах.
понент KHTMLPart, взаимодействует с нашим модулем при помощи Хотя мы и определили все методы классов нашего модуля, рабо-
вызова трех методов этого класса – конструктора, деструктора и мето- та над ним еще не закончена. Модуль создает новый объект-действие
да slotAction(). Метод slotAction() представляет собой слот, который для вызвавшего его приложения, но приложение пока не знает, как оно
вызывается всякий раз, когда пользователь выбирает пункт меню или должно (и должно ли) отображать соответствующий этому действию
нажимает кнопку, связанную с модулем. Этот метод содержит код, элемент интерфейса. Наш модуль может дополнить пользовательский
который, собственно, и отвечает за выполнение команды. В конструк- интерфейс хозяйского приложения с помощью механизма XMLGUI, опи-
торе класса Plugintextsaver создается объект-действие: санного в прошлой статье (LXF83). Откройте файл plugin_textsaver.rc:
Plugintextsaver::Plugintextsaver( QObject* parent, const char* name ) <!DOCTYPE kpartgui>
: Plugin( parent, name ) <kpartplugin name=”textsaver” library=”libtextsaverplugin” version=”1”>
{ <MenuBar>
(void) new KAction( i18n(“Save as &Text”), “textsaver”, 0, <Menu name=”tools”><Text>&amp;Tools</Text>
this, SLOT(slotAction()), <Action name=”plugin_action”/>
actionCollection(), “plugin_action” ); </Menu>
} </MenuBar>

Октябрь 2006 Linux Format 73


Учебник Qt/KDE

<ToolBar name=”extraToolBar”>
<Action name=”plugin_action”/> Модули KIPI
</ToolBar> Структура модуля обычно настолько тесно связана со структурой
</kpartplugin> приложения, для которого этот модуль предназначен, что изучение
Те, кто читал предыдущую статью, не найдут в этом тексте ничего программирования модулей имеет смысл только в контексте изуче-
неожиданного. Мы регистрируем два элемента управления – для меню ния разработки для конкретного приложения. Однако из этого прави-
и панели быстрого доступа. Команда вызова нашего модуля (Save as ла есть и исключения. Примером модулей, которые могут использо-
Text) будет расположена в меню Tools (Сервис), хотя, возможно, сле- ваться для работы с несколькими разными приложениями, являются
довало расположить ее в меню Файл. Кнопка команды по умолчанию модули KIPI. KIPI (KDE Image Plugin Interface – интерфейс KDE для
будет расположена на дополнительной панели инструментов, которая обработки изображений) – это проект, целью которого является
(опять-таки, по умолчанию) не видна. создание единого интерфейса модулей для основанных на KDE при-
Нам осталось скомпилировать и установить наш модуль. Обычно ложений, предназначенных для просмотра и редактирования растро-
модули устанавливаются в общую системную директорию, например, в вых изображений, – Digikam, KimDaBa (ныне KPhotoAlbum), ShowFoto
$KDEDIR/lib/kde3/, так что для установки понадобятся права root. При и Gwenview. Хотя «KIPI» представляет собой аббревиатуру, на сайте
отладке модуля следует учитывать, что текущая версия модуля кэши- extragear.kde.org/apps/kipi/ используется написание «Kipi». Мы будем
руется оболочкой Konqueror (и даже ldconfig не помогает), так что для писать KIPI, дабы читатели понимали, что это аббревиатура, а не рус-
того, чтобы увидеть изменения, внесенные после повторной установки ский глагол, написанный транслитом. Модули, соответствующие тре-
расширения, вам, возможно, придется перезапускать оболочку. бованиям KIPI, должны работать одинаково во всех перечисленных
Скомпилируйте и установите модуль, после чего запустите новый приложениях. Думаю, не нужно распространяться о том, насколько
экземпляр Web-браузера (но не файл-менеджера) Konqueror или это упрощает жизнь программиста, стремящегося к тому, чтобы его
откройте HTML-страницу в файл-менеджере. В меню Сервис вы уви- разработками могли пользоваться поклонники всех графических
дите команду, вызывающую наш модуль (Рис. 2). Выше уже было ска- программ KDE. Конечно, не все модули могут иметь смысл в контекс-
зано, что система следит за тем, чтобы наш модуль не был вызван для те каждого приложения. Это становится очевидно, если учесть, что в
неподходящего компонента. Это выражается в том, что соответствую- то время как одни приложения KDE (например, Gwenview) обладают
щая команда меню видна тогда, когда мы открываем HTML-страницу, и исключительно функциями просмотра, то другие (Digikam) включа-
не видна в остальных случаях. ют еще и базовые функции редактирования. Если же все программы
Если при просмотре сохраненной нашим модулем страницы в каком- будут эволюционировать в одном и том же направлении, система
нибудь текстовом редакторе вы увидите нечто странное, то не спешите утратит разнообразие и само наличие нескольких независимых про-
ругаться. Используемая нами утилита html2text, во-первых, пытается грамм потеряет смысл.
сохранить расположение текста, соответствующее его расположению на В отличие от других интерфейсов KDE, интерфейс KIPI сравнитель-
странице HTML, а во-вторых, сохраняет текст в формате команды cat (в но слабо документирован. Это значит, что наилучшим источником све-
этом формате гиперссылка выделяется повторением каждой буквы ее дений о программировании модулей KIPI являются исходные тексты
надписи по два раза). модулей, написанных другими программистами.
Помимо модулей KParts, браузер Konqueror поддерживает еще Информацию о модулях KIPI можно получить на сайте extragear.
несколько типов модулей. Модули панели навигации позволяют доба- kde.org. Там же можно загрузить и исходные тексты модулей (уже
вить новые команды на панель навигации Konqueror (эта панель по модифицированные тексты вы можете найти на прилагаемом диске,
умолчанию припаркована к левому краю окна менеджера файлов). в файле kipi-plugins-0.1.2m.tar.gz). Прежде чем устанавливать модули
Все, что требуется от модуля панели навигации – возвратить ука- необходимо установить библиотеку libkipi (ее исходные тексты тоже
затель на визуальный элемент, который и будут отображен браузе- есть на диске, в файле libkipi-0.1.4.tar.bz2).
ром при вызове соответствующей команды. Модули KFile позволяют Рассмотрим структуру модуля KIPI на примере модуля HelloWorld,
добавлять элементы в окно свойств файла (это окно можно вызвать с который, как следует из названия, как раз и должен служить приме-
помощью команды Свойства контекстного меню менеджера файлов). ром для начинающих модулеписателей (исходные тексты этого модуля
Обычно модули KFile используются для вывода метаданных файлов. находятся в директории kipi-plugins-0.1.2/kipi-plugins/helloworld/ файла
Поскольку для всех мыслимых типов файлов такие модули уже напи- kipi-plugins-0.1.2m.tar.gz). Как вы, наверное, догадались, модуль KIPI
саны, вам не придется писать модуль KFile, если только вы не разраба- представляет собой разделяемую библиотеку. Явным образом эта
тываете собственный файловый формат. библиотека экспортирует один-единственный класс – класс модуля.
Определение соответствующего класса Plugin_HelloWorld мы найдем в
файлах plugin_helloworld.cpp и plugin_helloworld.h.
Пробуем разобраться в том, что делает каждый метод этого класса.
Конструктор Plugin_HelloWorld вызывает конструктор базового класса
всех классов модулей KIPI KIPI::Plugin и выводит сообщение о том, что
модуль загружен. Отметим здесь, что поскольку модули подключаются
динамически, вывод такого сообщения полезен не только в процессе
отладки модуля. Рассмотрим метод setup(), который, как можно дога-
даться из названия, будет вызван приложением-хозяином модуля сра-
зу после создания объекта.:
void Plugin_HelloWorld::setup( QWidget* widget )
{
KIPI::Plugin::setup( widget );

// this is our action shown in the menubar/toolbar of the mainwindow


m_actionHelloWorld = new KAction (i18n(“Hello World...”),
“misc”,
0, // do never set shortcuts from plugins.
this,
(Рис. 2) Команд вызова модуля. SLOT(slotActivate()),

74 Linux Format Октябрь 2006


Qt/KDE Учебник

actionCollection(),
“helloworld”);

addAction( m_actionHelloWorld );

m_interface = dynamic_cast< KIPI::Interface* >( parent() );

if ( !m_interface )
{
kdError( 51000 ) << “Kipi interface is null!” << endl;
return;
}
}
Этот метод вызывает одноименный метод базового класса и
создает объект-действие (таких объектов может быть зарегистриро-
вано несколько). В методе setup() модуль получает также указатель
на объект класса KIPI::Interface, который реализует интерфейс взаимо-
действия между модулем и программой-хозяином. (Рис. 3) Модуль mykipi в работе.
Далее в классе Plugin_HelloWorld определен метод slotActivate(),
который и выполняет всю работу модуля (именно этот слот был ука- жит ссылки на объекты, представляющие изображения, выбранные
зан при создании объекта-действия). Метод slotActivate() мы пока пользователем в окне графической программы (ваш разум еще не
пропустим и рассмотрим последний метод класса Plugin_HelloWorld:: кипит от этих модулей KIPI?). Если метод currentSelection() вернул зна-
category(): чение NULL, значит, пользователь не выбрал ни одного изображения
KIPI::Category Plugin_HelloWorld::category( KAction* action ) const и тогда нашему модулю просто нечего делать. Впрочем, вызов модуля
{ при отсутствии выбранных изображений невозможен, как невозможен
if ( action == m_actionHelloWorld ) вызов модуля KParts для неподходящего компонента. Как и положено
return KIPI::IMAGESPLUGIN; всякому учебному примеру, модуль mykipi не делает ничего полезного.
С помощью метода selection.images() мы получаем список URL выде-
kdWarning( 51000 ) << “Unrecognized action for plugin category ленных изображений (не забывайте, что мы имеем дело с программа-
identification” << endl; ми, предназначенными, в основном, для просмотра и редактирования
return KIPI::IMAGESPLUGIN; // no warning from compiler, please существующих графических файлов). Далее мы преобразуем список
} URL в QStringList и затем QString, и выводим его содержимое в диа-
С помощью этого метода программа-хозяин может выяснить, к логовом окне.
какой категории должен принадлежать элемент управления, кото- Когда я писал, что у нашего модуля есть только один класс, я
рый она создает для данного объекта-действия. Модуль HelloWorld немного упростил ситуацию. На самом деле, модуль реализует еще
возвращает значение KIPI::IMAGESPLUGIN, которое указывает, что один класс, а именно класс Factory, управляющий созданием основно-
соответствующий элемент управления должен относиться к катего- го объекта класса модуля, однако генерация этого класса выполняется
рии Images. автоматически с помощью определения типа и вызова макроса:
Для того чтобы написать свой модуль KIPI, нам, фактически, необхо- typedef KGenericFactory<Plugin_MyKIPI> Factory;
димо только переписать метод slotActivate() модуля HelloWorld. В архиве K_EXPORT_COMPONENT_FACTORY( kipiplugin_mykipi,
kipi-plugins-0.1.2m.tar.gz вы найдете модуль mykipi, который и был создан Factory(“kipiplugin_mykipi”));
на основе модуля HelloWorld (поскольку заготовки проекта KDevelop для Прежде, чем мы установим наш модуль, нам следует отредактиро-
такого модуля в KDevelop нет, его проще распространять как часть паке- вать файл kipiplugin_mykipi.desktop. Ниже приводится его отредактиро-
та kipi-plugins). Все, что отличает модуль mykipi от модуля-прародителя, ванный текст (структура файлов *.desktop похожа на структуру файлов
сосредоточено в методе slotActivate() класса Plugin_MyKIPI: *.ini Windows, и это не случайное совпадение):
void Plugin_MyKIPI::slotActivate() [Desktop Entry]
{ Encoding=UTF-8
kdDebug( 51000 ) << “Plugin_MyKIPI slot activated” << endl; Name=MyKIPI
Name[cs]=My KIPI
KIPI::ImageCollection selection = m_interface->currentSelection(); Comment=Sample KIPI Plugin
Type=Service
if ( !selection.isValid() ) { ServiceTypes=KIPI/Plugin
kdDebug( 51000) << “No Selection!” << endl; X-KDE-Library=kipiplugin_mykipi
} author=Andrei Borovsky, borovsky@tochka.ru
else { Файл kipiplugin_mykipi.desktop cодержит сведения о типе модуля
KURL::List images = selection.images(); (ServiceTypes=KIPI/Plugin), а также имя модуля и комментарий.
QStringList SL = images.toStringList(); Теперь мы можем скомпилировать и установить модуль (естест-
QString S = SL.join(“\n”); венный путь – make install). Запустим программу Gwenview и в меню
KMessageBox::information(0, S, “Selected Images”); Модули, в группе Изображения (Images) мы увидим команду Sample
} KIPI Plugin, которая будет работать так, как мы и ожидаем (Рис. 3).
} В этой статье мы рассмотрели, среди прочих, модули для компо-
Метод начинает работу с вывода диагностического сообщения. нентов KParts. В следующей, заключительной части серии мы узнаем,
Затем мы создаем объект класса KIPI::ImageCollection, который содер- как создавать собственные компоненты (и модули для них). LXF

Через месяц Мы научимся создавать собственные компоненты.

Октябрь 2006 Linux Format 75


Python
Учебник для–профессионалов
Python профессионалам Рекомендации
по решению задач из реальной жизни

Python: Обработка
ЧАСТЬ 4: Язык Python может многое, хотя, конечно, не всё. Но благодаря «привязкам» к таким
мощным библиотекам, как GTK и модулям сторонних разработчиков его возможности стано-
вятся практически безграничными, пишет Сергей Супрунов.

ручная работа не для нас. Вот тут-то и пригодится PIL, где уже реали-
зованы широчайшие возможности по обработке изображений.

Небольшой практикум
Итак, после установки библиотеки все ее модули вы, скорее всего,
найдете в /usr/lib/Python2.4/site-packages/PIL. Кстати, обычно при
инсталляции PIL добавляет в список sys.path также и указанный путь,
так что для подключения, скажем, модуля ImageDraw, можно будет
использовать не только import PIL.ImageDraw, но и просто import
ImageDraw.
Сами модули не слишком щедро прокомментированы, но зато по
адресу http://www.Pythonware.com/library/pil/handbook вы найдете пре-
восходное руководство.
Несмотря на множество модулей, входящих в состав библиоте-
ки, для большинства задач вполне хватает модуля Image, а он уже
сам неявно задействует возможности остальных. Основой является
объект-изображение, которое можно загрузить из файла (используя
метод open()), либо создать с нуля (конструктор new()), причем при
загрузке файла библиотека сама позаботится о распознавании фор-
мата изображения.
Для примера напишем небольшой конвертер, который мог бы
брать указанные с помощью шаблона файлы и сохранять их изменен-

Р
ассказывать о различных «расширениях» Python можно бес- ные копии в другом каталоге. PIL предоставляет много методов для
конечно. Чтобы все-таки завершить серию и дать вам возмож- модификации изображений, в нашем примере мы остановимся на
ность погрузиться в самостоятельное изучение этого языка, я двух – изменении размера и формата. Заодно вспомним, как работать
решил коротко остановиться на двух сторонних библиотеках, значи- с файловой системой, и познакомимся с небольшим, но полезным
тельно расширяющих возможности Python по работе с изображени- модулем getopt для разбора параметров, передаваемых сценарию из
ями и звуком. командной строки. Код сценария представлен в листинге conv2.py.
В строках 8–13 мы используем функцию getopt() одноименно-
Где же кружка?... го модуля для того, чтобы получить передаваемые в скрипт опции.
Начнем с PIL – Python Image Library. Вам наверняка удастся без про- Первым параметром функция получает список аргументов команд-
блем инсталлировать ее с помощью менеджера пакетов вашего дис- ной строки (без первого элемента, соответствующего имени самого
трибутива. Не исключено, что она уже установлена (как это имеет скрипта), а вторым – список так называемых «коротких» опций, кото-
место быть в Ubuntu). Но если вам не очень повезло (мало ли, вдруг рые нужно найти. (Модуль поддерживает также и «длинные» опции в
вы – фанат Slackware), то забрать архив с ее исходным кодом можно формате GNU – смотрите документацию или код самого модуля). Если
на www.Pythonware.com. опция задается как логическая (т.е. важно лишь то, присутствует ли
Итак, зачем она нужна? Представьте, что вы привезли с моря четы- она в командной строке), то в списке просто указывается соответс-
ре «флешки», забитых замечательными фотографиями, и хотели бы твующая ей буква. Если опция параметрическая (т.е. должна сопро-
згрузить их на свою домашнюю страничку... Начинание благое, но вождаться каким-то значением), после ее буквы ставится двоеточие.
каково будет ее посетителям «тянуть» добродушно созданные вашей В нашем примере все опции параметрические: -t (формат выходных
«Минолтой» файлы по 5 МБ каждый? Принципы гуманизма требуют файлов), -o (каталог для их размещения), -h (высота модифицирован-
предварительно «сжать» изображения до приемлемых размеров. Да ного изображения), -w (ширина изображения).
и миниатюры создать было бы неплохо, чтобы можно было окинуть Возвращает getopt() два списка: список распознанных опций в
взглядом сразу несколько фотографий. формате [(опция, значение), (опция, значение), (. . .)] (значение ука-
Если вы уже собрались запускать Gimp – одумайтесь! Ну на 10 зывается только для параметрический опций, для логических второй
изображений у вас терпения хватит, ну на 100... А если их 1000? Нет, элемент кортежа остается пустым), и список оставшихся (не распоз-

Месяц назад Мы подключались из Python к базам данных.

76 Linux Format Октябрь 2006


Python – профессионалам Учебник

на DVD

графики и звука Код примеров ста


Исходные тексты
и PyMedia
тьи
PIL

нанных) аргументов. Наш скрипт будет ожидать во втором списке


Листинг conv2.py имена файлов (с указанием пути, если нужно), которые должны быть
преобразованы. Пользователь может задать ширину результирующих
1 #!/usr/bin/python изображений, их высоту или оба параметра сразу (если задан только
2 # -*- coding: utf-8 -*-
один, второй вычисляется согласно пропорциям исходного файла, см.
строки 31–36).
3 import os, sys, getopt, glob
Поскольку в опции -t пользователь может ввести все, что угодно, в
4 import PIL.Image as pim
строках 14–19 мы проводим небольшую проверку – создаем изобра-
5 type = “JPEG” жение размером 1х1 и пытаемся записать его в /dev/null (чтобы нигде
6 outdir = “.” мусор не разводить) в указанном пользователем формате type (метод
7 width = height = 0 save() самостоятельно выполняет все нужные преобразования форма-
тов). В случае неудачи сообщаем об этом пользователю (обратите вни-
8 opts, pattern = getopt.getopt(sys.argv[1:], “t:o:w:h:”) мание на синтаксис перенаправления вывода по десткриптору, отлич-
9 for opt in opts: ному от stdout). Если же операция пройдет успешно – продолжаем.
10 if opt[0] == “-t”: type = opt[1]
Строки 20-25 отвечают за формирование списка файлов, соот-
11 elif opt[0] == “-o”: outdir = opt[1]
ветствующих указанному шаблону. И, начиная с 26-й, мы приступа-
12 elif opt[0] == “-w”: width = int(opt[1])
ем собственно к обработке. Файлы, которые не могут быть открыты,
13 elif opt[0] == “-h”: height = int(opt[1])
например, текстовые, мы просто игнорируем – строка 30.
14 try: В строке 37 изменяем размер изображения (при этом создается
15 tmp = pim.new(“RGB”, (1,1)) новый объект). Флаг Image.ANTIALIAS задает способ интерполяции
16 tmp.save(“/dev/null”, type) соседних точек (доступны и другие, например, LINEAR, NEAREST,
17 except: BICUBIC). Наконец, рассчитав имя результирующего файла, выполня-
18 print >> sys.stderr, “ОШИБКА: формат %s не ем сохранение. В данном случае мы не передаем методу save() второй
поддерживается” % type параметр, указывающий формат файла – он будет определен автома-
19 sys.exit()
тически по расширению.
Вот, собственно, и готово:
20 if not pattern: pattern = “.”
admin@toshiba:~/lxf/propy/l4/code$ ./conv2.py -t png -h 120 *.jpg
21 filelist = []
22 for entry in pattern: osf_t1.jpg (JPEG, 2272x1704) -> ./osf_t1.png (png, 160x120)
23 if entry[-1] == “/”: entry = entry[:-1] osf_t2.jpg (JPEG, 2272x1704) -> ./osf_t2.png (png, 160x120)
24 if os.path.isdir(entry): entry += “/*” osf_t3.jpg (JPEG, 2272x1704) -> ./osf_t3.png (png, 160x120)
25 filelist.extend(glob.glob(entry)) osf_t4.jpg (JPEG, 2272x1704) -> ./osf_t4.png (png, 160x120)
Небольшой совет: вместо метода resize() для создания миниатюр
26 for file in filelist: лучше использовать метод thumbnail() – он работает раза в два быс-
27 if not os.path.isfile(file): continue трее. Только имейте в виду, что thumbnail() изменяет текущий объект,
28 try:
т.е. исполняется «по месту», в то время как resize() создает копию объ-
29 im = pim.open(file)
екта, оставляя оригинал в неприкосновенном виде (речь, естественно,
30 except IOError: continue
об объекте в памяти – файл на диске не будет изменен до тех пор, пока
31 if not (width and height): вы явно не выполните метод save()).
32 if width: height = width * im.size[1] / im.size[0]
33 elif height: width = height * im.size[0] / im.size[1] Не конвертированием единым...
34 else: Естественно, возможности PIL этим не ограничиваются: она позво-
35 width = im.size[0] ляет изменять цветовые схемы; применять к изображениям фильтры,
36 height = im.size[1] такие как размывание, рельеф и т.д. (см. модуль ImageFilter и метод
filter() модуля Image); вы можете смешивать различные изображения
37 resized = im.resize((width, height), pim.ANTIALIAS)
(методы blend() и composite()), поворачивать их на различные углы,
38 name, ext = os.path.splitext(file)
смещать, вырезать из них фрагменты, накладывать простейшие гра-
39 name = name.split(“/”)[-1]
фические элементы (такие как линии и дуги, см. модуль ImageDraw),
40 outfile = “%s/%s.%s” % (outdir, name, type.lower())
41 resized.save(outfile) и т.д.
42 print “%s (%s, %dx%d) -> %s (%s, %dx%d)” % (file, Вот так, например, можно в два раза усилить «красную» составля-
43 im.format, im.size[0], im.size[1], ющую исходного изображения:
44 outfile, type, width, height)
ЛИСТИНГ MAXIRED.PY
#!/usr/bin/Python
# -*- coding: utf-8 -*-

Октябрь 2006 Linux Format 77


Учебник Python – профессионалам

import os, sys, Image Листинг «playit.py»


infile = sys.argv[1] 1 #!/usr/bin/python
im = Image.open(infile) 2 # -*- coding: utf-8 -*-
if im.mode == “RGB”:
imR, imG, imB = im.split() 3 import pymedia.audio.acodec as acodec
imR = imR.point(lambda pixel: pixel * 2) 4 import pymedia.audio.sound as sound
outfile = Image.merge(“RGB”, (imR, imG, imB)) 5 import pymedia.muxer as muxer
6 import time
outfile.save(“%s-red%s” % os.path.splitext(infile))
else:
7 class playit:
print >> sys.stderr, “ОШИБКА: файл не RGB”
8 def __init__(self, file2play, rateCf=1):
9 self.PLAY_FLG = 1
Здесь методом split() мы раскладываем исходный объект на «цве- 10 self.file2play = file2play
товые» составляющие (если атрибут объекта, mode, подтверждает, 11 self.rateCf = rateCf
что загруженный файл является RGB-изображением), методом point()
применяем указанную функцию (в нашем случае - умножение на два) 12 def playit(self):
к каждому пикселу «красного» объекта, и с помощью merge() объеди- 13 dm = muxer.Demuxer(self.file2play.split(‘.’)[-
няем все снова в одно изображение. 1].lower())
14 f = open(self.file2play, ‘rb’)
15 s = f.read(32000)
16 dm.parse(s)
17 dec = acodec.Decoder({‘id’:dm.streams[0][‘id’]})
18 r = dec.decode(s)

19 print ‘Play “%s”:’ % self.file2play


20 print ‘ Bitrate: %d’ %r.bitrate
21 print ‘ Sample Rate: %d’ % r.sample_rate
22 print ‘ RateCf: %.2f’ % self.rateCf
23 print ‘ Channels: %d’ % r.channels

24 snd = sound.Output(int(r.sample_rate * self.rateCf),


25 r.channels,
26 sound.AFMT_S16_LE)

27 while len(s) > 0:


28 if r: snd.play(r.data)
29 s = f.read(512)
30 r = dec.decode(s)

31 while snd.isPlaying(): time.sleep(1)

32 self.PLAY_FLG = 0

Вот так, десятком строк, мирный утренний пейзаж превращается в


буйный закат (результат работы сценария maxired.py).
Нужно заметить, что библиотека PIL предназначена для обработки
изображений, а не для их вывода. Если вы хотите вставить фотогра-
фию в ваше графическое приложение, для этого следует использо-
вать средства соответствующего модуля. Например, в Tkinter для этого
предназначены классы BitmapImage и PhotoImage. Есть, конечно, и в
PIL метод show(), но он просто сохраняет объект во временный файл
и отдает его внешней программе просмотра изображений (xv под Unix/
Linux, Paint в Windows), поэтому пригоден он разве что для отладоч-
ных целей, чтобы по ходу разработки скрипта можно было «на лету»
контролировать промежуточные результаты.

Нам песня строить и жить помогает...


Следующая библиотека, которую мы затронем в этом уроке – PyMedia.
Скачать исходный код можно с сайта www.pymedia.org (там же вы най-
дете и документацию, и архив с примерами). Установка выполняется,
в принципе, достаточно просто:
admin@toshiba:~$ tar xzvf PyMedia-1.3.7.3.tar.gz
admin@toshiba:~$ cd PyMedia-1.3.7.3
admin@toshiba:~/PyMedia-1.3.7.3$ sudo Python setup.py install
Однако, среди зависимостей – alsa, ogg, vorbis, faad, mp3lame
(причем для инсталляции нужны и заголовочные файлы, т.е. может
потребоваться доустановить соответствующие dev-пакеты). Также

78 Linux Format Октябрь 2006


потребуется пакет Python-dev. Так что, если вам посчастливится
найти для своего дистрибутива двоичный пакет библиотеки (в част-
ности, deb-пакет, правда, не самой новой версии, можно найти
здесь: http://prdownloads.sourceforge.net/PyMedia/PyMedia_1.3.5_i686-
py2.4.deb?download), то рекомендую воспользоваться им.
На листинге «playit.py» представлен код класса, задача которого –
воспроизвести звуковой файл. Первыми строками (3–6) подключаем
нужные нам модули (иерархия здесь довольно сложная, так что без
документации не обойтись; ну и про примеры не забывайте).
Сначала мы должны определить идентификатор кодека, который
подойдет для воспроизведения того или иного файла. Для этого мы
создаем объект Demuxer, которому передается в качестве параметра
расширение файла (строка 13). Этот объект мы используем для того,
чтобы декодировать заголовок звукового файла (в строках 14–16 мы
считываем первые 32000 байт файла и передаем их методу parse()).
Теперь мы можем определить идентификатор нужного кодека по клю-
чу ‘id’ в словаре dm.streams[0] (строка 17; можно в качестве параметра
передать и весь словарь), и используем этот кодек для декодирования
уже считанных данных. Поскольку здесь, помимо всего прочего, при-
сутствует и служебная информация, то после декодирования мы полу-
чаем возможность вывести кое-что из этого на экран (строки 19–23;
но это только в тестовых целях – в классах, которые могут использо-
ваться в различных программах, оператору print, конечно, не место).
В строке 24 создается объект Output, метод play() которого будет
использоваться для воспроизведения (строка 28). Изменив параметр
rateCf, можно ускорить или замедлить проигрывание файла (по умол-
чанию используется значение 1). Наконец, в цикле (строки 27–30) мы
воспроизводим уже считанный фрагмент (переменная s) и готовим
следующий. Как только мы считаем и передим методу play() весь
файл, в строке 31 начнется ожидание конца воспроизведения (что-
бы не сильно нагружать процессор, проверку выполняем один раз в
секунду). Ожидание нужно, поскольку play() является асинхронным
методом, который возвращает управление сценарию до того, как вос-
произведение фрагмента на самом деле завершится. Благодаря этому
мы можем спокойно обрабатывать следующий фрагмент, не беспоко-
ясь о паузах при воспроизведении.
Для использования класса playit нужно создать соответствую-
щий объект, передав ему имя файла и, при желании, коэффициент,
корректирующий скорость воспроизведения. Само воспроизведение
запускается методом playit(). Причем библиотека PyMedia вполне
позволяет поигрывать одновременно несколько файлов - в качестве
примера рассмотрим, как можно получить простейший эффект объ-
емного звука:

Листинг echo.py
#!/usr/bin/Python

from playit import playit


import threading, time

mp3 = ‘Aria.shtil.mp3’
ECHO = 0.1

f1 = playit(mp3)
f1.rateCf = 1
ht1 = threading._start_new_thread(f1.playit, ())

if ECHO:
time.sleep(ECHO)

f2 = playit(mp3)
f2.rateCf = 1
ht2 = threading._start_new_thread(f2.playit, ())

while(f1.PLAY_FLG or ECHO and f2.PLAY_FLG):


time.sleep(1)
Учебник Python – профессионалам

Малышка wave
Листинг wav2.py Кстати, раз уж зашла речь об обработке звука, то и в стандартной
поставке Python есть несколько модулей для выполнения простейших
1 #!/usr/bin/python операций. Например, модуль wave позволяет редактировать (и даже
2 # -*- coding: utf-8 -*- создавать с нуля, если вы сильны в математике) звуковые файлы в
формате WAV. На листинге wav2.py представлен сценарий, с помощью
3 import wave которого можно «развернуть» wav-файл в обратном направлении:
Открыв wav-файл (строка 6), мы можем получить некоторую
4 def sum(a, b): информацию о нем (строки 7-11). Считываем данные в переменную
5 return “%c%c” % (a, b)
normal (нормальная последовательность). «Сырой» wav-файл (т.е. без
компрессии; подавляющее большинство таковыми и является) пред-
6 rf = wave.open(“new.wav”, “rb”)
ставляет собой набор «фреймов», или «отсчетов», то есть значений
7 print “Количество фреймов: %d “ % rf.getnframes()
8 print “Частота дискретизации: %d” % rf.getframerate() амплитуды сигнала в данный момент времени. Частота дискретизации
9 print “Точность дискретизации: %d” % rf.getsampwidth() определяет, сколько фреймов будут формировать одну секунду зву-
10 print “Количество каналов: %d” % rf.getnchannels() чания. Точность дискретизации показывает, сколько байт использует-
11 print “Тип сжатия: %s” % rf.getcomptype() ся для хранения одного фрейма (значение 1 соответствует 8-битному
звуку, 2 – 16-битному).
12 total = rf.getnframes() * rf.getnchannels() * rf.getsampwidth() Для того чтобы развернуть наш файл, нужно «реверсировать» счи-
13 normal = rf.readframes(total) танную нормальную последовательность. Это можно легко выполнить
14 reverse = ‘’
с помощью списковых включений (как показано в строке 21). Но если
15 if rf.getsampwidth() == 2:
мы работаем с 16-битным файлом, то нужно позаботиться о сохране-
16 n2 = normal[-2::-2]
нии порядка байтов во фрейме, иначе получим лишь шум. Для этого в
17 n1 = normal[-1::-2]
18 for i in map(sum, n0, n1): строках 16 и 17 мы формируем две «подпоследовательности», в одну
19 reverse += i из которых попадают младшие байты фреймов, во вторую – старшие.
20 else: С помощью функции map(), которая применяет функцию, указанную
21 reverse = normal[-1::-1] первым параметром (в нашем примере это sum(), описанная в строках
4–5), к каждому элементу последовательностей, переданных вторым и
22 wf = wave.open(“new2.wav”, “wb”) третьим параметрами, мы соединяем полученные полуфреймы воеди-
23 wf.setnchannels(rf.getnchannels()) но. Поскольку на выходе map() получается список, то нам нужно его
24 wf.setsampwidth(rf.getsampwidth())
вручную «собрать» снова в строку (стр. 18–19).
25 wf.setframerate(rf.getframerate())
Нужно заметить, что map() отличается очень высокой скоростью
26 wf.writeframes(reverse)
обработки последовательностей. Если собирать результирующую
строку «вручную» (например, в цикле while), то эта процедура может
затянуться на десятки секунд даже для не очень большого файла, в то
время как map() выполняет эту операцию почти мгновенно.
В этом сценарии мы запускаем два потока (если значение перемен- Наконец, в строках 22-26 мы открываем новый файл на запись,
ной ECHO отлично от нуля). В каждом из потоков проигрывается один устанавливаем его параметры (в соответствии с исходными) и записы-
и тот же файл, но перед запуском второго делается небольшая пауза ваем содержимое. Теперь можете и сами поиграть в «АПОП»!
(в примере – 0,1 секунды). В результате получается довольно интерес-
ное звучание. Кстати, обратите внимание на то, как мы запустили пото- Только вперед!
ки – вместо того, чтобы создавать соответствующий класс и переопре- На этом мы завершаем нашу серию уроков. Благодаря тому, что раз-
делять в нем метод run(), был напрямую вызван «внутренний» метод работчикам Python удалось сделать этот язык простым и в то же время
_start_new_thread(), которому передается функция или метод, которые удивительно мощным и расширяемым, с его помощью можно эффек-
должны быть выполнены в потоке. тивно решать самые различные задачи – дополнительная сложность
Помимо собственно воспроизведения звука, PyMedia предоставля- будет проявляться лишь там, где это действительно необходимо, в
ет средства для работы с видео-файлами, ее можно использовать для то время как простые задачи сохранят предельную простоту. И если
конвертирования исходного файла в другие форматы, для редактиро- вдруг для какого-то проекта стандартных средств окажется недоста-
вания мета-данных и самого звука, и т.д. точно, то наверняка вам поможет какая-нибудь из сторонних библио-
тек. Главное – не сдаваться!
Удачи! LXF

Cсылки по теме
www.python.org – официальный сайт проекта
www.python.ru – российский сайт почитателей этого языка
http://zope.net.ru – сайт российской группы пользователей среды Zope
(разработанный на Python сервер web-приложений); здесь есть
информация и о Python
www.pythonware.com – сайт разработчиков PIL; помимо самой
библиотеки, можно найти и другие интересные вещи
www.awaretek.com/plf.html – страничка, посвящённая изучению языка
Python
http://py.vaults.ca/apyllo.py – множество примеров программ на Python,
от работы с базами данных и графикой до игр

80 Linux Format Октябрь 2006


Компьютерные
Учебник LaTeX TeXнологии Учимся
использовать культовую систему вёрстки

Базовые
ЧАСТЬ 2: Мы говорим на русском языке и пользуемся операционной системой GNU/Linux –
подобное на нашей планете встречается не так уж часто. Хотите стать ещё более элитарным
подмножеством? Евгений Балдин знает уникальный рецепт – используйте LaTeX!

Это: <<\textbackslash>>, <<\$>>, <<\%>>, <<\_>>1 , <<\{>>, <<\}>>,


<<\&>>, <<\#>>, <<\^{}>> и <<\~{}>>. В процессе изложения их роль
будет раскрыта.

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

Построение команды
Команды в LaTeX начинаются с символа \ (backslash или обратная
косая черта) и продолжаются комбинацией, состоящей только из стан-
дартных латинских букв2. Команды завершаются пробелом, цифрой
или не латинской буквой. Все пробельные символы после команды
игнорируются. Для того, чтобы пробел после команды не игнориро-
вался, достаточно вставить «пустую группу»: \command{}. Например,
чтобы лого LaTeX (команда \LaTeX) не слилось со следующим за ним
словом, следует написать \LaTeX{}.

Аргументы
Командам LaTeX могут передаваться внешние аргументы:
\command[param1][param2]{param3}{param4}
«Командная логика» В квадратные скобки заключаются необязательные параметры
(param1 и param2), а в фигурные – обязательные (param3 и param4).
Щенок должен понять, Некоторые из команд LaTeX влияют только на свои аргументы.
что быстрое и чёткое выполнение команд хозяина Например, команда
всегда вознаграждается лакомством или лаской. \textbf{текст}
выводит слово текст жирным шрифтом.
Для набора кода в LaTeX знание английского языка приходится очень
кстати. Основных команд немного – их можно запомнить и так, но для Декларативные команды
совершенствования английский необходим, хотя бы для чтения доку- Часть команд LaTeX являются своеобразными переключателями
ментации к пакетам. Названия у команд, как правило, вполне осмыс- режимов.
ленны, что очень помогает при поиске чего-нибудь необходимого в Область действия декларативной команды может ограничиваться
алфавитном указателе. «Правильный» тестовый редактор тоже не логической группой или единицей структуры печатного документа,
является лишним. например, страницей.
%дальнейший текст будет печататься жирным шрифтом
Спецсимволы \bfseries
Не все символы равноправны. За частью символов в LaTeX зарезерви- %убрать заголовки и нумерацию для текущей страницы
рованы специальные значения. \thispagestyle{empty}
Это: «\», «$», «%», «_», «{», «}», «&», «#», «^» и «~». В процессе
изложения их роль будет, со временем, раскрыта.
1
Чтобы отобразить эти символы при печати необходимы дополни- Можно воспользоваться пакетом underscore – в этом случае необходимость экранировать
знак «_» в текстовом режиме отпадает.
тельные усилия. Предыдущий параграф в текстовом редакторе выгля- 2
Это верно для стандартной кириллизации. Существуют варианты – например, русификация
дел бы так: Шеня – где русские буквы также могут входить в имена команд.

Месяц назад Мы познакомились с «клеем» и «боксами».

82 Linux Format Октябрь 2006


LaTeX Учебник

элементы
Окружения К вопросу о переносах
Сложные конструкции, которые имеют открывающую и закрывающую Пожалуй, единственное, что, возможно, потребует настройки в свеже-
команды вида \begin{имя} и \end{имя}, называют окружениями. Вместо установленном дистрибутиве LaTeX, это включение переносов. Этой
слова «имя» подставляется название соответствующего окружения проблемы заведомо не возникает при установке TeX Live и в большин-
\begin{center} стве современных дистрибутивах GNU/Linux, но всякое бывает.
Это строка будет отцентрирована Для установки переносов можно воспользоваться утилитой texconfig3.
\end{center} После запуска программы следует выбрать меню HYPHENATION, а затем
Окружения могут вкладываться друг в друга, как матрёшки, но их меню LaTeX. Далее будет предложено отредактировать4 файл переносов
области действия не могут перекрываться. language.dat. Обычно достаточно таких настроек:
english hyphen.tex
russian ruhyphen.tex
Логика документа Всё остальное по желанию можно закомментировать. По умол-
чанию, когда включаются переносы для определённого языка, все
Вид документа определяется выбором класса и стилей. Хорошим при- остальные правила переносов отключаются. Но в случае английского и
ёмом является наличие личных готовых шаблонов с уже предопре- русского языков это можно обойти, воспользовавшись русско-англий-
делёнными предпочтениями, которые могут меняться по мере развития ской таблицей переносов:
документа. ruseng ruenhyph.tex
=russian
Структура файла LaTeX =english
Текстовый tex-файл состоит из двух частей: заголовка или преамбулы и Следует понимать, что подобная настройка с точки зрения фило-
собственно самого текста, и выглядит примерно следующим образом: софии LaTeX не совсем корректна. Для гарантированно одинакового
%---начало заголовка--- результата компиляции независимо от платформы лучше поступиться
%выбор класса документа, например article или book некоторыми удобствами.
\documentclass{…}
%минимальная кириллизация Класс документа
\usepackage[koi8-r]{inputenc} С помощью обязательной инструкции \documentclass[опции]{класс}
\usepackage[english,russian]{babel} можно указать, к какому классу будет относиться рабочий текст.
\usepackage{indentfirst} Класс документа следует выбирать в зависимости от того, что дол-
%загрузка пакетов по выбору жен представлять из себя текст. Для начала можно остановиться на
\usepackage{…} стандартном классе article. Этот класс разработан специально для ста-
… тей и небольших отчётов. Для отчётов побольше можно использовать
%определение своих команд или переопределение уже класс report, а для книг – класс book.
существующих Перечисленные стандартные классы сложились очень давно и мно-
\newcommand{\mycommand}{…} гие производные классы документов основаны на них. Как следствие,
\renewcommand{\oldcommand}{…} стандартные базовые классы абсолютно статичны, поэтому для спе-
… циализированных вещей используются свои классы. Например, для
%локальные настройки научных статей популярны различные модификации revtex4. Вячеслав
… Фёдоров разработал класс eskd (стандарт ЕСКД), который можно найти
%---конец заголовка--- на CTAN или в стандартной поставке TeX Live. Те, кто недоволен боль-
\begin{document} шими полями в стандартных LaTeX-классах, могут обратить внимание
%тело документа на набор классов KOMA-script (scrartcl, scrreprt и scrbook вместо article,
\end{document} report и book, соответственно).
Первым делом с помощью инструкции \documentclass осуществля- Поначалу в выбранном классе ничего менять не следует. То, что
ется выбор класса документа. Далее загружаются стилевые пакеты. кажется с непривычки неудобным, на самом деле может улучшать вос-
Для того, чтобы можно было набирать русский текст, необходимо с приятие печатной копии. Например, относительно узкая ширина текс-
помощью пакета inputenc указать кодировку текстового файла, напри- та в стандартных классах (следствие больших полей) позволяет при
мер, koi8-r. Далее нужно подключить пакет babel, который отвечает за прочтении охватывать взглядом всю строку целиком, что увеличивает
локализацию, в частности, за переносы и «национальные особеннос- скорость чтения.
ти» набора. Например, при включении русского языка доопределяется
символ номера № (\No), символ параграфа § (\S) и многое другое. Для 3 texconfig – это простенькое dialog-подобное консольное приложение. Некоторые настройки
формирования отступа или красной строки у первого параграфа, как могут потребовать привилегий суперпользователя. После изменения настроек через texconfig
автоматически пересоздаются необходимые форматные файлы. В противном случае может
это принято в России, необходимо загрузить пакет indentfirst. По идее, потребоваться сделать это вручную, например, с помощью инструкции вида texconfig init.
это должно относиться к «национальным особенностям», но в babel по 4 Редактор можно определить с помощью переменной окружения $EDITOR. Если переменная
не определена, то вызывается редактор vi. В случае отсутствия опыта работы с vi следует выйти
умолчанию не подгружается. из него с помощью последовательности :q и настроить переменную окружения.

Октябрь 2006 Linux Format 83


Учебник LaTeX

Как правило, разумные модификации можно осуществить через Печатаем текст


параметры в команде выбора класса, например: При наборе книги/статьи/заметки основное вовсе не команды, а сам
\documentclass[a4paper,12pt,oneside]{scrbook} текст. Правила очень просты.
a4paper – размер листа бумаги (можно выбрать другой стандарт,
например, a5paper), 12pt – базовый размер шрифта (в стандартных Комментарии
классах доступны размеры в 10pt и 11pt), а oneside – односторонняя Всё, что следует за знаком «%» включительно, является
печать (удобнее при просмотре электронной версии). комментарием.
В заключение хотелось бы отметить набор классов NCC, активно Большие закомментированные сегменты мешают работать с основ-
разрабатываемых А.И.Роженко. Класс ncc позиционируется автором ным текстом, и поэтому их следует исключать из рабочего файла. Но
как «русскоязычная статья». Класс можно взять на CTAN, он присут- при желании можно воспользоваться окружением comment из пакета
ствует и в стандартной поставке TeX Live. verbatim.

Стили Разделение слов


Стилевой файл (.sty) или пакет представляет из себя набор макро- Пробельные символы используются в LaTeX для разделения слов.
сов и определений, созданных для решения какой-то определённой Пробелы в начале строки игнорируются. Символ перевода строки так
задачи. Для подключения стилевого файла используется команда же воспринимается как пробел. Если в конце строки сразу за послед-
\usepackage[опции]{стиль}. ним словом вставить знак комментария:
Основное отличие классов от пакетов в том, что один документ экранировка перевода стр%
может включать один класс и сколько угодно стилевых пакетов. оки
Фактически, на любую задачу в LaTeX находится ответ в виде соответ- то разделения слов не происходит. Иногда этот приём может оказать-
ствующего пакета. В стандартной поставке TeX Live присутствует свы- ся полезным.
ше двух тысяч .sty-файлов, кроме того, ничего не мешает создать свой,
оптимизированный под локальные задачи. Разделение абзацев
Для того, чтобы начать новый абзац, необходимо оставить пустую
К вопросу о кириллизации строку:
Чтобы кириллизовать LaTeX, необходимы шрифты. Благодаря Ольге текущий абзац закончился
Лапко на свете есть шрифты семейства lh, которые отлично согласуют-
ся с базовыми шрифтами Computer Modern. Мало иметь просто кирил- следующий абзац начался
лические буквы – надо, чтобы их начертания соответствовали и другим Число пустых строк между абзацами не имеет значения.
шрифтам, в том числе, математическим. В 2001 году Владимир Волович
проделал огромную работу по переводу METAFONT-шрифтов в формат Пунктуация
Type1, что теперь позволяет создавать не только хорошие печатные Напечатанный текст обезличивается. Нет эмоций – только буквы.
копии, но и вполне качественные электронные pdf-версии документов. Единственное, что остаётся – это знаки пунктуации и, возможно, смай-
За перевод из кодировки файла во внутреннюю кодировку LaTeX лики ☺.
отвечает пакет inputenc. В качестве опции при загрузке с ним передаёт- Запятую, точку, точку с запятой, двоеточие, многоточие, скобки,
ся текущая восьмибитная кодовая страница документа. Для кириллицы кавычки, восклицательный и вопросительные знаки следует «прижи-
могут оказаться интересны следующие варианты: koi8-r, koi8-u, cp866, мать» к словам. Не надо оставлять пробелов, а то LaTeX «подумает»,
cp1251 и 8859-5. Собственно говоря, всё. Единственное неудобство, что так и надо.
которое возникает из-за этого, заключается в том, что сообщения об
ошибке LaTeX выдаёт в своей внутренней T2A кодировке5. Для исправ- Пробелы
ления этого неудобства можно воспользоваться простейшим филь- Расстояние между словами LaTeX выбирает по своему усмотрению для
тром. Для начало его надо собрать: максимально равномерного заполнения страницы. Но иногда необхо-
> locate t2filter.c димо указать размер пробела вручную:
{TEXMF}/texmf-dist/doc/generic/t2/etc/t2filter.c «~» – неразрывный пробел, т.е. по этому пробелу не производится
> cd {TEXMF}/texmf-dist/doc/generic/t2/etc/ перенос на другую строку,
> gcc -Wall -O2 -s -o ~/bin/t2filter t2filter.c «\,» – маленький нерастяжимый пробел,
> LaTeX {файл}.tex | t2filter «\ » – нормальный нерастяжимый пробел.
В основном, указывать размеры пробелов надо в случае набора
Тело документа каких-либо сокращений, например, так следует набирать ФИО:
Всё, что заключено внутри окружения document, является телом Ф.\,А.~Милия “--- негоже <<отрывать>> ИО от Ф\@. Ещё примеры:
документа. Если у вас есть какие-то куски текста, которые печатать т.\,е., г.~Новосибирск, рис.~1 и~т.\,д.\ и~т.\,п.
не хочется, а выкинуть жалко, то их достаточно вынести в конец за LaTeX считает, что после точки предложение заканчивается, если эта
инструкцию \end{document}. точка стоит не после заглавной буквы. Растяжимость пробелов между
предложениями и между словами существенно разная. Поэтому если
Логика набора точка случается в середине предложения, то после неё следует явно
вставить пробел «\ » или неразрывный пробел «~». Может случиться, что
Объявление в газете: Ищу работу машинистки. точка следует сразу за заглавной буквой и означает именно конец пред-
Печатаю со скоростью 4000 знаков в минуту. ложения (как в примере происходит с буквой Ф). Для этого перед такой
Правда, такая белиберда получается! точкой следует добавить коррекцию в виде команды «\@».

Мало открыть файл в текстовом редакторе и начать набирать. Нажимать Дефисы, минусы и тире
на клавиши надо осмысленно. В издательских системах, основанных на TeX’e, различают дефис
(hyphen), короткое тире (en-dash), длинное тире (em-dash) и знак
минуса.
Чтобы получить на печати дефис, короткое или длинное тире, надо
5
Расположение букв похоже на таковое в кодировке cp1251 – это чистая случайность. набрать один, два или три знака «-», соответственно.

84 Linux Format Октябрь 2006


LaTeX Учебник

При подключении пакета babel с опцией russian появляются допол- Ударение


нительные команды, позволяющие более строго следовать русским В русском языке длительность ударного гласного примерно в 1.5–2
печатным традициям. раза длиннее безударного. Если ударение поставить не в том месте, то
слово будет звучать совсем по другому.
Дефис используют в составных словах (кто-то, где-нибудь), В корне \textbf{зар-} “--- \textbf{зор-} под ударением пишется гласная
короткое тире рекомендуется для указания диапазона чисел (10--15, в соответствии с произношением, без ударения “--- \textbf{а}.
2001--2006), длинное тире означает обычное тире (\LaTeX{} “--- это
круто), минус может существовать только в формулах ($a-b=c$). \emph{Исключения:} зор\’янка, озар\’ять.
Пакет \texttt{babel} вводит дополнительные команды для написания
тире. Для двойных или парных фамилий следует использовать „Лапки” и «Ёлочки»
конструкцию “--~, например, уравнение Менделеева”--~Клапейрона, В пакете babel, кроме всего прочего, определены традиционные рус-
композитор Римский”--~Корсаков. Чтобы длинное тире не ские кавычки.
отрывалось от предыдущего слова и вокруг него создавались Если в начале или в конце текста встречаются внутренние и вне-
правильные пробелы вместо --- следует употреблять “---, т.\,е. к шние кавычки, то они должны различаться между собой рисунком.
трём тире надо добавить двойную кавычку. Прямая речь должна Он сказал: <<А пойду-ка я и подпишусь на ,,Linux Format’’>>.
начинаться с команды “--*:
“--* Я сказал.
Правила могут показаться немного запутанными, но к ним быстро
привыкаешь, и они того стоит.
Структурная логика
LaTeX ориентирован на логическую разметку документа. Можно конеч-
Переносы но «сказать», что данный кусок текста следует напечатать 20-м кеглем,
В большинстве случаев LaTeX грамотно переносит слова, но в случае выровнять по левому краю и сделать отступ после него в два интерва-
сложных слов, которые пишутся через дефис, перенос происходит ла, но проще указать, что это заголовок раздела.
только по дефису. Аналогично проблемы возникают, когда слово час-
тично состоит из английских букв, а частично из кириллицы. Титульный лист
Создания титульного листа это отдельная задача, в которой визуаль-
Прямо в тексте перенос можно указать с помощью команды \-, ная составляющая обычно превалирует над структурной. В этом случае
например: дель\-та-функ\-ция, \TeXно\-ло\-гия. следует воспользоваться окружением titlepage. При инициализации
При наличии русского языка в \texttt{babel} вместо дефиса в этого окружения создаётся чистая страница, которой присваивается
сложном слове можно поставить команду “=, например, номер один, а содержание этой страницы полностью определяется
дельта”=функция. В этом случае переносы будут сделаны корректно фантазией автора. Но, в любом случае, это следует делать после напи-
без подсказки. сания самого текста. Обычно достаточно стандартного заголовка:
Для часто упоминаемых слов можно задать шаблон переноса с \title{\LaTeX, Unix и русский стиль}
помощью команды: \author{Е.\,М.~Балдин\thanks{e-mail: E.M.Baldin@inp.nsk.su}}
\hyphenation{образ-цы пе-ре-но-са дель-та=-функ-ция} \date{2006}
Обычно, образцы переноса лучше определять в заголовке доку- \maketitle
мента. Следует понимать, что образцы автоматически не склоняются, Команда \maketitle создаёт стандартный титульный заголовок,
поэтому надо предусмотреть всевозможные варианты окончаний. используя информацию о названии документа (\title), авторе (\author)
С помощью команды \hyphenation можно запретить перенос сло- и дате написания текста (\date). Команда \thanks правильным образом
ва в нежелательных местах, просто не указав место разрыва. В позволяет оформить подстрочное примечание на титульной страни-
тексте запрет переноса можно оформить с помощью инструкции це. Если авторов более чем один, то их можно перечислять, разде-
\mbox{нет переноса}. ляя командой \and – в этом случае список авторов печатается в виде
таблицы.
Многоточие В статьях (производные от класса article) вслед за заголовком сле-
Многоточие печатается с помощью команды \ldots. Если многоточие дует обязательная аннотация, которая оформляется с помощью окру-
идёт после точки, то необходимо вставить неразрывный пробел ~. жения abstract.

За буковку «ё» замолвите слово


Пара слов в поддержку буквы «ё». Эту букву незаслуженно забывают при заново. Одновременно в словарь было добавлено большое число слов.
наборе текстов. Более того, некоторые деятели ратуют за её полное Отличительной чертой данного словаря является то, что в него
упразднение. Однако, коль уж вам довелось узнать русский язык, то включена полноценная поддержка буквы «ё». В современных
говорить и писать на нём следует правильно. Наличие буквы «ё» в тексте дистрибутивах GNU/Linux словарь Александра Лебедева является
значительно облегчает процесс чтения. Особенно это актуально при основным русским словарём для ispell. К сожалению, в подавляющем
быстром чтении. большинстве случаев словарь «собран» без поддержки «ё». Авторы
пакета ошибочно предполагают, что «е» и «ё» – это одинаковые буквы.
Поставь букву «ё» на место её! При проверке правильными являются такие слова как «ежик», «елка» и
Для проверки правописания следует использовать словарь Александра тому подобное. Правильный выход: убедить автора/самому стать автором
Лебедева. Этот словарь построен на основе словаря русского языка для пакета. Неправильный, но гораздо более простой: локально пересобрать
ispell, первоначально составленного Нилом Далтоном (Neal Dalton) в пакет с полноценной поддержкой «ё».
1992 г. После тщательной проверки и исправления примерно 4000 Словарь постоянно совершенствуется, дополняется и корректируется.
ошибок в словаре Нила Далтона, в словарь были добавлены Последнюю версию словаря можно найти на авторской страничке
отсутствовавшие в нём правила образования форм существительных, Александра Лебедева: http://semiconductors.phys.msu.su/~swan/
прилагательных, причастий, наречий, изменены правила формирования orthography.html
окончаний глаголов, так что affix-файл можно считать переписанным

Октябрь 2006 Linux Format 85


Учебник LaTeX

TeX-логослово Перекрёстные ссылки


Одной из основных причин, по которой LaTeX вытеснил обычный TeX
Когда Д.Э. Кнут создавал TeX – он много думал. Причём думал не из текстовых редакторов TeXников, является механизм нумерации и
только об алгоритмах и коде. В частности, он нашёл время подумать о создания ссылок.
том, как назвать своё произведение. TeX читается как «тех». Последняя Чтобы сослаться на раздел, в нём необходимо оставить метку
буква – вовсе не английская буква «икс», а греческая «хи». Также он \label{метка}. А затем можно использовать команды:
продумал и правила изображения этого названия. С тех пор в TeX- В разделе~\ref{ex:section} на странице~\pageref{ex:section} \ldots
сообществе возникла мода на создание TeX-лого. Когда ссылки идут через метку, то номер раздела и номер стра-
ницы определяется LaTeX автоматически. Причём автоматическая
нумерация свойственна не только командам секционирования – точно
так же можно ссылаться на формулы, таблицы, картинки и листинги
программ. Для этого необходимо оставить метку \label в соответству-
ющем окружении.

Сложные документы
Всё можно хранить в одном файле – это ничему не противоречит.
Более того, само понятие «файл» для пользователя не так уж и необхо-
димо. Но уж если файл есть, то почему бы не разделить большой текст
на несколько частично независимых кусков?
Распространённые TeX-лого. Команда \NCC определена в пакете С помощью команды \input{имя файла} можно вставлять в доку-
ncclatex. Остальные команды заведомо определены в пакете мент другой tex-файл. LaTeX просто добавляет содержимое по месту
texnames.
команды, считывая файл либо до конца, либо до первой встретившей-
ся инструкции \endinput. Совершенно не важно, в какой части докумен-
та встречается \input. Бывает довольно удобно вынести преамбулу в
Секционирование отдельный файл. В имени файла можно опустить расширение .tex.
Часто бывает полезно сразу же за титульной страницей вывести оглав- Для включения текста можно применить другой способ:
ление с помощью команды \tableofcontents. Для этого в тексте должно \input{preheader}
присутствовать логическое разбиение на разделы. \includeonly{
\subsection{Секционирование} % intro,
\label{sec:base:sec} base,
% presentation
Часто бывает \ldots }
Команды секционирования образуют строгую иерархию. Самыми \begin{document}
старшими по «званию» являются разделы \part{Часть} и \chapter{Глава}. %введение
Это большие куски текста, и, соответственно, их применение обоснова- \include{intro}
но только в книгах, поэтому они не определены в классах производных %базовые команды
от article и report, зато определены в классе book. \include{base}
Далее по старшинству следуют: %Презентация
\section{Раздел} \include{presentation}
\label{ex:section} \end{document}
Декларация \include позволяет включить только tex-файл (при
\subsection{Подраздел} написании имени расширение .tex опускается). В преамбуле с помощью
\label{ex:subsection} команды \includeonly можно перечислить, какие части надо подклю-
чить при текущей сборке. При этом сохраняется правильная нумерация
\subsubsection[<<Подподраздел>>]{Что-то более мелкое чем страниц и можно сослаться на не включённые в эту сборку разделы.
подраздел} Это довольно актуально в случае больших текстов в процессе их созда-
\label{ex:subsubsection} ния, так как значительно ускоряет компиляцию. LXF

\paragraph{Параграф}
\label{ex:paragraph}

\subparagraph{Подпараграф}
\label{ex:subparagraph}
Если воспользоваться необязательным параметром команды сек-
ционирования, его значение заместит основной заголовок при печати
оглавления и создании колонтитулов.
Команды секционирования печатают заголовок необходимым
шрифтом и нумеруют раздел. Если нет желания, чтобы название раз-
дела попало в оглавление, и надобности в нумерации нет, то к команде
секционирования следует добавить символ «*», например:
\section*{Приложение}

Через месяц Изучим математику на уровне школьной программы.

86 Linux Format Октябрь 2006


Новая серия! Создание кросс-
Программирование на Java Учебник
платформенных приложений на Java

Сказка Java
ЧАСТЬ 1: От кофеварок до промышленных серверов и биллинговых систем – Java можно
встретить буквально везде. Начните изучение этой технологии вместе с Антоном Черноусовым.

«Hello World!», но такой прием настолько изъезжен, что я намереваюсь


предложить пример поинтереснее: мы напишем приложение, расска-
зывающее сказку. Основа приложения – два класса. Каждый класс
содержит члены двух видов: атрибуты и методы. Атрибуты – это дан-
ные, принадлежащие самому классу. Совокупное значение атрибутов
определяет состояние объекта или класса. Метод – это последователь-
ность операторов, изменяющих значения атрибутов и, как следствие,
состояние класса или объекта.
В каждой интересной сказке должен быть свой герой. Предлагаю
взглянуть на класс, который реализует нашего героя. Итак, по порядку.
Следующий код необходимо сохранить в файл FirstHero.java.
public class FirstHero {
private String quest;
public FirstHero(String Quest) {
this.quest = Quest;
}
public void setQuest(String Quest){
this.quest = Quest;
};
public String getQuest(){
return quest;
};
}

Н
ачиная ряд статей о программировании на объектно-ориенти- Расположение одного класса в одном файле считается хорошим
рованном языке Java, хотел бы выразить свое мнение отно- тоном среди программистов на Java – так что приучайтесь к нему сра-
сительно корпоративного рынка разработки программного зу. Имя файла должно совпадать с названием класса, расширение у
обеспечения, на котором в данный момент борются за лидерство два файла – .java.
гиганта, две платформы: J2EE и .NET. Первый созданный нами класс содержит один защищенный атри-
В основе платформы J2EE лежит язык программирования Java – бут (private – модификатор, зарезервированное слово, которое обеспе-
приложения, созданные с его помощью, являются кроссплатфор- чивает возможность обращения к члену класса только внутри класса)
менными, сам язык, средства разработки и технология активно под- и три открытых метода (public – модификатор, зарезервированное
держиваются многими корпорациями: Sun, Google, IBM, Oracle, BEA. слово, которое обеспечивает возможность обращения к члену класса
Платформа пользуется большой популярностью и среди компаний, из любого другого класса.). Хорошо спроектированный класс не име-
ориентированных на OpenSource, таких как Apache Foundation. В про- ет открытых атрибутов, что позволяет быть уверенным в правильной
тивовес J2EE, корпорация Microsoft предлагает свою технологию .NET, работе с ними. Доступ к защищенным атрибутам осуществляется через
которая является колоссом, построенным на мощи программного открытые методы. Такая организация класса позволяет разработчику
обеспечения Microsoft. через методы реализовать различные проверки и исключить непра-
Сегодня еще нельзя сказать, какая технология станет доминиру- вильное поведение объекта. Класс представляет собой объединение
ющей, и, возможно, от вас зависит скорость распространения совре- атрибутов и методов в единое целое – подобное объединение называ-
менной кроссплатформенной технологии создания приложений J2EE и ется инкапсуляцией.
языка программирования Java. Вы можете заметить, что первый метод (третья строка представ-
Предложенные вашему вниманию уроки позволят овладеть основны- ленного ранее листинга) имеет то же название, что и класс – FirstHero.
ми понятиями ООЯ Java и создавать различные приложения с его помо- Такой метод называется конструктором. Конструктор – это метод, кото-
щью. Рассмотрев основы языка, мы сможем изучить типовые решения рый используется при создании экземпляра класса для задания внут-
(паттерны) в программировании и приступить к изучению J2EE. реннего состояния объекта, например:
В первом уроке мы создадим свое первое приложение и разберем- FirstHero ourNewHero = new FirstHero(“Спасти царевну”);
ся с основными понятиями: инкапсуляция, наследование и полимор- Единственный атрибут нашего класса quest имеет тип строка
физм. Для выполнения этого урока нам понадобится пакет Java SDK (String). Для установки значения атрибута quest используется метод
1.5, текстовый редактор и немного терпения. setQuest. Метод setQuest является public и не возвращает никакого зна-
чения. Для обозначения методов, не возвращающих значение, исполь-
Героический объект зуется зарезервированное слово void. Для вызова метода setQuest
Приступая к этой серии материалов, я вспомнил, что, как правило, изу- необходим обязательный параметр: Quest типа String. Для получения
чение языков программирования начинается с написания приложения значения атрибута quest используется метод getQuest, который вызы-

Октябрь 2006 Linux Format 87


Учебник Программирование на Java

вается без параметров, является открытым и возвращает значение Комментарии JavaDoc предназначены для формирования докумен-
типа String. тации к проекту из исходных кодов. Если добавить в файл FirstHero.
Вызов описанных выше методов для объекта ourNewHero осущест- java только что приведенные строки, то с помощью команды javadoc
вляется следующим образом: -author -version *.java можно сформировать документацию к нашему
ourNewHero.getQuest(); проекту.
ourNewHero.setQuest(“какая-то строка”); JavaDoc позволяет создавать подробную документацию, которая
Парные методы, различающиеся приставками set и get, принято просто необходима для любого достаточно крупного проекта.
создавать для работы с закрытыми атрибутами. Это обязательное
условие для реализации объекта в виде JavaBean. Что такое JavaBean, Наследование, интерфейсы их реализация
мы обсудим позже – сейчас запомните, что такое наименование мето- Наша сказка написана, но что делать, если проект большой и над ним
дов позволяет избавиться от ряда проблем в больших системах. работает много людей? Как реализовать одновременное программиро-
Приступим к написанию самой сказки. Возьмите следующий код и вание разных классов так, чтобы результаты, полученные отдельными
поместите его в файл Story.java. разработчиками, можно было без труда соединить в единое целое? Для
public class Story { решения этой задачи, а также задачи множественного наследования в
public static void main(String[] args) { Java существуют интерфейсы – interface. Но обо всем по порядку.
FirstHero ourNewHero = new FirstHero(“Спасти царевну “); Наследование – это одна из парадигм программирования, которая
System.out.println(“Наш герой хочет отправиться в путь и “ связана с инкапсуляцией. Суть наследования заключается в следую-
+ ourNewHero.getQuest()); щем: если есть класс, инкапсулирующий в себе некоторые атрибуты и
} методы, то класс, наследующий его, автоматически наследует все его
} атрибуты и методы.
Это класс Story, он имеет всего один метод main, который является public class SecondHero extends FirstHero{
статичным (static-методы и переменные принято называть перемен- public SecondHero(String Quest) {
ными класса и методами класса, т.к. они общие для всех объектов) и super(Quest + “ Несмеяну”);
используется для работы с классом в целом. Метод main – это стар- }
товая точка для запуска программы, с которой начинается интерпре- }
тация кода. Расположенный выше код объявляет класс SecondHero, который
В ходе интерпретации метода main создается новый объект с помощью зарезервированного слова extends наследует (расши-
ourNewHero, а также вызывается метод println объекта out, кото- ряет) класс FirstHero. В Java класс может наследовать (расширять)
рый обеспечивает вывод в стандартный выходной поток строковой только один класс. При наследовании класса FirstHero, содержащего
переменной. конструктор, обязательно требуется переопределить его (например,
Откомпилируем код и увидим, что у нас получилось. Для компиля- как это делается в методе SecondHero). При выполнении оператора
ции переместитесь в каталог, где вы разместили свои файлы и выпол- super(Quest) будет вызван аналогичный метод из суперкласса (класс-
ните следующую команду: родителя). Строкой super(Quest + “Несмеяну”) мы переопределяем
# javac *.java поведение конструктора. Естественно, класс SecondHero может содер-
При желании вы можете откомпилировать классы по отдельности, жать новые атрибуты и методы.
следующим образом: Для проверки механизма наследования сохраните приведенный
# javac Story.java текст класса SecondHero в файл SecondHero.java и в файле Story.java
# javac FirstHero.java измените имя класса FirstHero на SecondHero. Откомпилируйте и запус-
В итоге вы получите два файла Story.class и FirstHero.class. Теперь тите программу, в результате вы должны увидеть следующее:
посмотрим на результат: # java Story
# java Story Наш герой хочет отправиться в путь и Спасти царевну Несмеяну
Наш герой хочет отправиться в квест и Спасти царевну При разработке программы, перед тем, как приступить к програм-
Первая программа на Java готова и работает! Вы создали два клас- мированию, сначала проводится процесс проектирования (например,
са и научились выводить информацию в консоль. Но мы забыли о через UML-нотации). В результате проектирования появляется доку-
комментариях... ментация к проекту, а также спецификации классов. Интерфейс – это
Комментарии бывают нескольких типов: явно указанная спецификация набора методов, которые должны быть
Строчные начинаются с символа // и длятся до окончания строки. представлены в классе, реализующий эту спецификацию. В серьезном
Многострочные комментарии заключаются между /* и */. проекте на момент начала программирования перед программистом
Комментарии JavaDoc – это многострочные комментарии, заключен- оказываются интерфейсы, которые он должен реализовать в классах.
ные между /** и */, например: Интерфейс в Java – это специальный класс, в котором отсутствует
/** реализация! Давайте напишем интерфейс для нашего класса FirstHero.
* Класс является прототипом объекта “герой” Следует скопировать следующий далее код и поместить его в файл
* @author Chernousov Anton Hero.java – именно этот интерфейс мы будет использован далее. Как
* @version 0.1 вы видите, в отличие от других классов, интерфейс объявляется с
*/ помощью зарезервированного слова interface. В нашем случае интер-
public class FirstHero { фейс представляет собой следующий набор методов:
… public interface Hero {
/** public void setQuest(String Quest);
* Метод предназначен для установки внутренней переменной public String getQuest();
quest }
* в значение Quest. Чтобы класс FirstHero реализовывал интерфейс Hero, необходимо
* У этого метода один параметр изменить первую строчку в файле FirstHero.java на public class FirstHero
* @param Quest это переменная означает задание для Героя implement Hero {. Интерфейс может наследовать (расширять) множест-
*/ во других интерфейсов. Наример:
public void setQuest(String Quest) public interface Lord {
… public String sendToQuest();

88 Linux Format Октябрь 2006


Программирование на Java Учебник

public void setBodyguard(Hero hisHero);


public Hero getBodyguard(); public String getWife() {
} if (theftedWife){return null;}
else{ return wife;}
public interface King extends Hero, Lord{ }
public void setWife (String PrincesName);
public String getWife(); public String getWife(boolean flag) {
} if (flag){ this.theftedWife = true;}
Класс может одновременно наследовать класс и реализовывать return wife;
один или несколько интерфейсов. Например, как в классе LandLord, }
который наследует класс FirstHero и реализует интерфейс Lord: }
public class LandLord extends FirstHero implements Lord{ В представленном классе GreatKing существуют две реализации
private Hero bodyguard; перезагруженного метода getWife, которые можно вызвать следую-
public LandLord(String Quest, Hero hisHero) { щим образом:
super(Quest); GreatKing ourKing = new GreatKing(“Править мудро”,
this.bodyguard = hisHero; (Hero) new FirstHero(“Охранять господина”));
} String hisWife = ourKing.getWife();
public String sendToQuest() { String theftedHisWife = ourKing.getWife(true);
bodyguard.setQuest(this.getQuest());
return null; Вместо заключения
} Ну вот, мы создали всех героев. Разместите интерфейсы Lord, King,
public void setBodyguard(Hero hisHero) { а также классы LandLord и GreatKing в соответствующих файлах.
this.bodyguard = hisHero; Немного измените класс Story, чтобы завершить сказку:
} public class Story {
public Hero getBodyguard() { public static void main(String[] args) {
return bodyguard; // создадим наших героев
} Hero ourNewHero = (Hero) new FirstHero(“Спасити царевну”);
} GreatKing ourKing = new GreatKing(“Править мудро”,
Чтобы окончательно закрыть тему наследования, необходимо пого- (Hero) new FirstHero(“Охранять господина”));
ворить про абстрактные классы – те, что занимают промежуточное LandLord ourNewLandLord = new LandLord(“Похитить царевну”,
место между интерфейсами и реальными классами. Объявление абс- (Hero) new FirstHero(“Охранять господина”));
трактного класса или метода выполняется с помощью специального // Женим нашего короля
слова abstract: ourKing.setWife(“Несмеяна”);
abstract public class Knight // И начнем повествование
Абстрактный класс представляет собой неполную реализацию всех System.out.println(“Жил был мудрый король, и должен был он “
объявленных методов, и его можно наследовать, как и любой из клас- + ourKing.getQuest());
сов. Обязательным условием при наследовании является полная реа- System.out.println(“Была у него жена, и звали ее “ + ourKing.
лизация абстрактных методов. getWife());
System.out.println(“Был в королевстве коварный Визирь и хотел
Полиморфизм он “
Полиморфизм – это концепция, реализованная в Java, которая позво- + ourNewLandLord.getQuest());
ляет одному и тому же объекту выступать в разных формах. Например, System.out.println(“И сделал это”);
экземпляр класс LandLord можно использовать как объект класса String wife = ourKing.getWife(true);
FirstHero. Это стало возможным благодаря тому, что класс LandLord //
наследует класса FirstHero. System.out.println(“А наш герой жаждал “ + ourNewHero.
getQuest()
Перегруженные методы + “ ..и добился этого”);
Иногда при создании сложных (и не очень) систем есть необходимость ourKing.setWife(wife);
реализовать два различных метода, названых одинаково – это возмож- System.out.println(“Король был счастлив.”);
но с помощью перегруженных (overloading) методов. Выбор реализа- System.out.println(“Ну а что случилось дальше вы можете
ции зависит от типа объектов, переданных в качестве параметров. придумать сами...”);
public class GreatKing extends LandLord implements King{ }
private String wife; Откомпилируйте и насладитесь результатом выполнения урока.
private boolean theftedWife; В следующей статье мы поговорим о простых числах и других
типах, вычислениях, циклах, массивах и списках. LXF
public GreatKing(String Quest, Hero hisHero) {
super(Quest, hisHero);
}

public void setWife(String PrincesName) {


this.wife =