http://wiki.linuxformat.ru/wiki/api.php?action=feedcontributions&user=WikiSysop&feedformat=atomLinuxformat - Вклад участника [ru]2024-03-29T05:20:56ZВклад участникаMediaWiki 1.19.20+dfsg-0+deb7u3http://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2012-03-15T15:28:06Z<p>WikiSysop: Добавлены журналы за 2010 г</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2011 год ===<br />
* [[LXF139-140|LXF139-140 Январь 2011]]<br />
<br />
=== 2010 год ===<br />
* [[LXF138|LXF138 Декабрь 2010]]<br />
* [[LXF137|LXF137 Ноябрь 2010]]<br />
* [[LXF136|LXF136 Октябрь 2010]]<br />
* [[LXF135|LXF135 Сентябрь 2010]]<br />
* [[LXF134|LXF134 Август 2010]]<br />
* [[LXF133|LXF133 Июль 2010]]<br />
* [[LXF132|LXF132 Июнь 2010]]<br />
* [[LXF131|LXF131 Май 2010]]<br />
* [[LXF130|LXF130 Апрель 2010]]<br />
* [[LXF129|LXF129 Март 2010]]<br />
* [[LXF128|LXF128 Февраль 2010]]<br />
* [[LXF126-127|LXF126-127 Январь 2010]]<br />
<br />
=== 2009 год ===<br />
* [[LXF125|LXF125 Декабрь 2009]]<br />
* [[LXF124|LXF124 Ноябрь 2009]]<br />
* [[LXF123|LXF123 Октябрь 2009]]<br />
* [[LXF122|LXF122 Сентябрь 2009]]<br />
* [[LXF121|LXF121 Август 2009]]<br />
* [[LXF120|LXF120 Июль 2009]]<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF125:GIMPLXF125:GIMP2010-11-13T09:27:23Z<p>WikiSysop: /* ''GIMP'': В стиле Города Грехов */</p>
<hr />
<div>: '''''GIMP''''' Свободный графический редактор, в который вы тоже можете вонзить зубы<br />
<br />
==''GIMP'': В стиле Города Грехов==<br />
<br />
{{Цикл/GIMP 2.4}}<br />
<br />
: На дождливом уроке этого месяца художник и разработчик '''Майкл Дж. Хэммел''' преобразится во Фрэнка Миллера. И однажды дождь пойдет по-настоящему...<br />
<br />
В детстве я не особо зачитывался комиксами издательств Marvel или DC. Я часами упивался картинками из «Звездного пути» и фотографиями Луны, сидел на крылечке<br />
за чтением Кларка и Азимова, рвался к звездам вместе с Карлом Саганом и прятался под одеялом, чтобы послушать радиопередачи д-ра Дименто. Я был странным ребенком, даже по<br />
меркам читателя комиксов. Но с тех пор я вырос и, если верить моей жене, выгляжу гораздо представительнее среднего технаря. Я меньше читаю, больше смотрю кино и вполне прилично могу сыграть басовую партию в ''Guitar Hero''. И попрежнему не интересуюсь комиксами.<br />
<br />
{{Врезка|left|Содержание=[[Изображение:LXF125_56_1.jpeg|300px]]}}<br />
<br />
Однако даже взрослым, но все еще чокнутым типам вроде меня практически невозможно полностью игнорировать влияние, которое комиксы и их мрачные собратья, графические новеллы, имеют в обществе. В постоянных попытках все более изуверским способом пустить кровь своим персонажам кинопродюсеры обращаются к комиксам, переводя сюжеты этого мирка на язык большого экрана. Если пренебречь жуткими приключениями Спауна и Кролика Роджера, Голливуд, похоже, нашел свою комикс-нишу и счастливо влился в мир супергероев.<br />
<br />
===Героям — слава!===<br />
<br />
Так что придется отдать должное жанру. Недавние шедевры «Железный человек» и «Темный рыцарь» добавили «чернухи» в воплощения Супермена и Чудоженщины, известные с 1970х годов. Город Грехов [Sin City] и Хранители перенесли это новое видение в еще более мрачные пределы. Город Грехов, с его высокой контрастностью и пятнами цвета, произвел удовлетворительное художественное впечатление на меня как на фаната ''GIMP'', что в итоге послужило основой сегодняшнего урока...<br />
<br />
На сей раз нам понадобится несколько стоковых фото, чтобы показать, как наш оборванный герой под покровом сырой и неприглядной ночи обходит дозором криминальные районы развращенного города. Все будет чернобелым, с единственным пятном цвета. Самое приятное в работе с чернобелым изображением – то, что оно скорей всего не выйдет из диапазона цветов местного струйного принтера. Единственный момент, когда это может быть не так – работа с цветовым пятном.<br />
<br />
===Ресурсы этого урока===<br />
<br />
Стоковые фото:<br />
* Мужик с пушкой [Man with Gun] http://www.bigstockphoto.com/photo/view/2123798<br />
* Мужик с пушкой (галстук) [Men with Gun (Red Tie)] http://www.bigstockphoto.com/photo/view/3343608<br />
* Пистолет [Handgun] http://www.bigstockphoto.com/photo/view/2944267<br />
* Строение [Building] http://www.morguefile.com/archive/?display=55516|Ширина=400px}}<br />
<br />
===Шаг за шагом: Создаем картинку в стиле «гризайль»===<br />
<br />
[[Изображение:LXF125_57_1.jpg|Шаг 1]]<br />
'''1 Базовое изображение'''<br />
: Базовое изображение предоставляет нам главного героя, «крепкого орешка» с пистолетом, на однотонном светлом фоне с разрешением 1600×1067 пикселей. Обесцветим изображение ('''Цвет > Обесцветить...'''), выбрав опцию '''Светлота''', что сохранит высокий контраст между лицом и фоном. <br />
<br />
[[Изображение:LXF125_57_2.jpg|Шаг 2]]<br />
'''2 Увеличим контраст'''<br />
: Откроем диалог '''Уровни''' ('''Цвет > Уровни'''), затем щелкнем на пипетке точки белого (с правой стороны под гистограммой '''Уровней''') и щелкнем в правом верхнем углу фона изображения. Это сделает фон полностью белым, слайдер точки белого подвинется влево от центра гистограммы. Передвинем слайдер точки черного вправо почти до самой точки белого. В итоге получится практически черно-белое изображение.<br />
<br />
[[Изображение:LXF125_57_3.jpg|Шаг 3]]<br />
'''3 Первый слой дождя: шум'''<br />
: Создадим прозрачный слой ('''Слой > Cоздать слой''') с именем '''Дождь1'''. Откроем фильтр '''Бросок''' ('''Фильтры > Шум > Бросок'''). Значения по умолчанию тут вполне подойдут: '''Cлучайное зерно = 10, Cлучай ность %= 50, Повторов = 1'''. Нажмем '''OK''', чтобы визуализировать шум в слое '''Дождь1'''. Шум будет окрашенным, и мы его обесцветим (я выбрал здесь опцию '''Светлота''', но подойдет любой из способов обесцвечивания).<br />
<br />
[[Изображение:LXF125_57_4.jpg|Шаг 4]]<br />
'''4 Первый слой дождя: капли'''<br />
: Откроем фильтр Размывание движением ('''Фильтры > Размывание > Размывание движением'''), выберем «'''Линейное'''», длину 120 и угол 90 градусов. Щелкнем '''ОК''', чтобы применить размывание к слою '''Дождь1'''. Увеличим размер слоя на '''40 %''', то есть изменим единицы измерения в диалоге '''Смена размера слоя''' ('''Слой > Размер слоя''') на проценты и выставим 140 в поле ширины. При нажатии кнопки '''Изменить''' высота изменится автоматически, чтобы соблюсти пропорции.<br />
<br />
[[Изображение:LXF125_57_5.jpg|Шаг 5]]<br />
'''5 Первый слой дождя: перекос'''<br />
: Уменьшим масштаб, чтобы увидеть границу слоя '''Дождь1''', затем выберем на панели инструментов инструмент '''Искривление'''. Щелкнем на изображении и протащим его, пока края слоя не коснутся правого верхнего и левого нижнего углов изображения, затем применим изменения щелчком по кнопке '''Искривить'''. Откроем диалог '''Уровни''' и настроим точку белого примерно на значение 107, а точку черного – примерно на 116. Восстановим размеры слоя ('''Слой > Слой к размеру изображения''').<br />
<br />
[[Изображение:LXF125_57_6.jpg|Шаг 6]]<br />
'''6 Второй слой дождя'''<br />
: Аналогичным образом добавим второй слой с дождем, но применим не такое сильное '''Искривление''', чтобы дождь падал более вертикально. Настройка '''Уровней''' также может быть несколько другой, на ваш вкус. Позже мы подправим режимы обо их слоев и настройки непрозрачности, поскольку контраст изменится изза добавления фоновых элементов. Назовите второй слой '''Дождь2'''.<br />
<br />
[[Изображение:LXF125_57_7.jpg|Шаг 7]]<br />
'''7 Маскируем базовое изображение'''<br />
: Щелкнем по слою с базовым изображением, чтобы сделать его активным. Добавим ему альфаканал и белую маску, затем снова откроем исходное изображение. Выберем инструмент '''Выделение связанной области''', выставим значение порога на 70 и сделаем щелчок при нажатой клавише '''Shift''', чтобы вы брать области, окрашенные голубым. Вставляем выделение в маску слоя базового изображения. Через диалог уровней выставим точку черного на 254.<br />
<br />
[[Изображение:LXF125_57_8.jpg|Шаг 8]]<br />
'''8 Здание на заднем плане'''<br />
: Изменим размер фонового здания так, чтобы оно соответствовало размеру слоя базового изображения, затем вставим его в базовое изображение и переместим новый слой в самый низ стопки слоев. Отключим видимость всех других слоев, чтобы облегчить следующие шаги, затем обесцветим и настроим контраст изображения точно так же, как мы это делали на '''Шаге 2'''.<br />
<br />
[[Изображение:LXF125_57_9.jpg|Шаг 9]]<br />
'''9 Обработка слоев с дождем'''<br />
: В диалоге слоев уменьшим непрозрачность каждого слоя с дождем до 30 %, затем сольем эти два слоя (щелчком правой клавишей мыши на слое '''Дождь1''' и выбором «'''Объединить с предыдущим'''»). С помощью диалога '''Яркость/Kонтраст''' настроим контраст объединенных слоев ('''Цвет > Яркость/контраст'''), выставив значение яркости на 121 и контрастности – на 127.<br />
<br />
[[Изображение:LXF125_57_10.jpg|Шаг 10]]<br />
'''10 Добавим цветовое пятно'''<br />
: Откроем изображение гангстера с красным галстуком. Выберем инструмент '''Выделение связанной области''' и выставим значение порога на 95. Щелкнем в любом месте красного галстука. Если внутри выделения останутся невыделенные области, увеличьте выделение на один пиксель, чтобы захватить их. Иллюстрация показывает выделение с задействованной '''Быстрой маской''' зеленого цвета. Скопируем выделение.<br />
<br />
[[Изображение:LXF125_57_11.jpg|Шаг 11]]<br />
'''11 Повяжем галстук'''<br />
: Вставим выделение в базовое изображение, зеркально повернем его по горизонтали, затем обесцветим слой и выберем новый красный цвет. Отметим галочкой опцию «'''Запереть альфаканал'''» в диалоге слоев. Выберем инструмент '''Заливка''', настроим режим «'''Объединение зерна'''» и область применения «'''Заполнить все выделенное'''». Щелкнем на слое '''Красный галстук''', чтобы перекрасить изображение.<br />
<br />
[[Изображение:LXF125_57_12.jpg|Шаг 12]]<br />
'''12 Изменяем здание'''<br />
: Откроем диалог изменения размера слоя ('''Слой > Размер слоя'''). Щелкнем по иконке цепочки, чтобы «разорвать» и изменить соотношение пропорций слоя. Выставим ширину слоя на 165 % и высоту – на 140 %. С помощью инструмента '''Перемещение''' перетащим слой влево, пока парадный вход здания не окажется слева от пистолета. Снова изменим размер слоя, чтобы он совпал с размером изображения. ('''Слой > Слой к размеру изображения''').<br />
<br />
[[Изображение:LXF125_57_13.jpg|Шаг 13]]<br />
'''13 Направляющая для фонарей'''<br />
: Добавим прозрачный слой прямо над слоем со зданием. Установим цвет переднего слоя в светлосерый (HTMLкод – '''cbcbcb'''). Проведем линию слева направо примерно на уровне верха второго этажа здания. Позднее мы удалим этот слой.<br />
<br />
[[Изображение:LXF125_57_14.jpg|Шаг 14]]<br />
'''14 Рисуем фонарные столбы'''<br />
: Добавим прозрачный слой над слоем с направляющей и кистью малого радиуса нарисуем линию слева от главного входа от направляющей вниз к фундаменту здания. Повторим процесс справа от входа. Скопируем этот слой и сместим его на один пиксель по оси '''Х'''. Уменьшим яркость до 127.<br />
<br />
[[Изображение:LXF125_57_15.jpg|Шаг 15]]<br />
'''15 Фонари'''<br />
: Создадим овальное выделение в новом слое, затем отрежем нижнюю половину выделения. Расположим выделение над левым столбом. Выберем инструмент '''Градиент''' и протащим линейный градиент от черного к серому, от верха выделения прямо вниз. Повторим действие для другого фонаря, затем уберем выделение ('''Выделение > Снять''').<br />
<br />
[[Изображение:LXF125_57_16.jpg|Шаг 16]]<br />
'''16 Свет'''<br />
: Создадим в диалоге '''Слои''' прозрачный слой под слоем фонарей. Инструментом «'''Кривые'''» очертим вставку под левым фонарем, в выделении применим градиент от белого к прозрачному сверху вниз и повторим эти действия для другого фонаря. Уберем выделение.<br />
<br />
[[Изображение:LXF125_57_17.jpg|Шаг 17]]<br />
'''17 Настроим свет'''<br />
: Откроем фильтр '''Гауссово размывание''' ('''Фильтры > Размывание > Гауссово размывание''') и применим размывание в 10 пикселей к обеим осям ('''Y''' и '''X''') слоя фонарей. Установим непрозрачность слоя между 35 и 40 %. На данном этапе можно удалить слой с направляющей линией или же просто отключить его видимость в диалоге слоев.<br />
<br />
[[Изображение:LXF125_57_18.jpg|Шаг 18]]<br />
'''18 Финальный эффект'''<br />
: Чтобы затемнить фон, добавим прозрачный слой сразу над слоем со зданием, зальем его черным, добавим маску слоя и выберем инструмент '''Градиент'''. Настроим радиальную форму от черного к серому, затем сделаем щелчок посреди лица мужчины и протащим к его указательному пальцу на пистолете, чтобы создать радиальную маску.<br />
'''LXF'''</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-11-13T09:23:20Z<p>WikiSysop: Добавлен LXF124</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF124|LXF124 Ноябрь 2009]]<br />
* [[LXF123|LXF123 Октябрь 2009]]<br />
* [[LXF122|LXF122 Сентябрь 2009]]<br />
* [[LXF121|LXF121 Август 2009]]<br />
* [[LXF120|LXF120 Июль 2009]]<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-10-19T10:25:15Z<p>WikiSysop: Добавлены ссылки на номера LXF121-123</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF123|LXF123 Октябрь 2009]]<br />
* [[LXF122|LXF122 Сентябрь 2009]]<br />
* [[LXF121|LXF121 Август 2009]]<br />
* [[LXF120|LXF120 Июль 2009]]<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-06-24T11:16:33Z<p>WikiSysop: /* 2009 год */</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF120|LXF120 Июль 2009]]<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-06-24T11:16:13Z<p>WikiSysop: Добавлен LXF120</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF120|LXF119 Июль 2010]]<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF119LXF1192010-06-17T10:50:54Z<p>WikiSysop: /* Обзоры */</p>
<hr />
<div>==Linux Format 119 (6), Июнь 2009==<br />
<center>[[Изображение:LXF119.jpg|Linux Format 119 (6), Июнь 2009]]</center><br />
===Обзоры===<br />
* [[LXF119:Review1|SUSE Enterprise]]<br />
*: После нескольких лет бурного развития, ''Compiz'' и KDE 4 наконецто остепенились – теперь их можно найти в солидном дистрибу тиве Novell для предприятий.<br />
* [[LXF119:Review2|''BitDefender'']]<br />
*: Нам не известны опасные вирусы для Linux. Но корабли выходят на боевое дежурство да же в мирное время: случись что, вы будете на дежно защищены.<br />
* [[LXF119:Review3|''CrossOver Games'']]<br />
*: Мы любим наблюдать за устойчивым развитием этого славного приложения: возможность запустить ''Spore'' в Linux – еще один гвоздь в крышку гроба двойной загрузки.<br />
* [[LXF119:Review4|''Qt Creator'']]<br />
*: Если вы искали повод не начинать разработку в ''Mono'', эта IDE – веский аргумент в пользу ''Qt'' как полностью открытого инструментария.<br />
* [[LXF119:Review5|PCLinuxOS 09]]<br />
*: Что поделывал Tuxstar все эти годы? У вас уже была возможность попробовать PCLOS самостоятельно – теперь давайте сравним наши впечатления.<br />
<br />
===Постоянные рубрики===<br />
* [[LXF119:Сравнение|'''Сравнение''': Файловые менеджеры]]<br />
*: Каждый месяц мы сравниваем тысячи программ — а вы можете отдыхать!<br />
* [[LXF119:Тема номера|'''Тема номера:''' Будем эффективнее]]<br />
*: Повысьте производительность труда и отдыха, подобрав правильное ПО <br />
* [[LXF119:Что за штука|'''Что за штука...''' Metalink]]<br />
*: Пусть компьютер сам ищет для вас оптимальный способ загрузки файлов<br />
* [[LXF119:История успеха|'''История успеха:''' Inquisitor]]<br />
*: Как вывести простой набор тестов компьютера в финалисты конкурса Trophees du libre? Узнаем из первых рук!<br />
* [[LXF119:Interview|'''Интервью LXF''' Учиться и еще раз учиться]]<br />
*: …но как делать это правильно? Мы решили обратиться с данным вопросом к '''Кэри Вильерд''' и '''Оттмару Кугельману''' – людям, отвечающим за этот процесс в Sun Microsystems.<br />
* '''Спецрепортаж'''<br />
** [[LXF119:Slackware|Slackware]]<br />
**: Там, куда мы направляемся, пакетные менеджеры не нужны.<br />
** [[LXF119:Moblin|Moblin под микроскопом]]<br />
**: Рубрика '''«Что за штука»''' прошлого номера только раздразнила ваш аппетит? Познакомьтесь с мобильной ОС от Intel поближе.<br />
** [[LXF119:Money|Властвуй над деньгами]]<br />
**: Разберитесь, куда утекают деньги, благодаря особенно удачному образцу свободного ПО.<br />
* '''По рецептам доктора Брауна'''<br />
*: Добротное администрирование систем из причудливых заворотов кишок серверной.<br />
** [[LXF119:DrBrown1|Мудрость ''Moodle'']]<br />
**: '''''Moodle''''' Если вы занимаетесь онлайнобучением, попробуйте эту свободную систему.<br />
** [[LXF119:DrBrown2|Структура репозитория Debian]]<br />
**: '''Debian/Ubuntu''' Недоумеваете, откуда берутся ваши Deb-пакеты? Давайте разберемся с устройством репозиториев.<br />
** [[LXF119:DrBrown3|Отраженная слава]]<br />
**: Прокси-серверы и зеркала доставят репозитории Debian или Ubuntu поближе к дому и ускорят установку ПО.<br />
<br />
===Учебники===<br />
* [[LXF119:Совет месяца|'''Совет месяца''': Ищем потерянные файлы]]<br />
* [[LXF119:Первые шаги|Прекрасные презентации]]<br />
*: Прощайте, пыльные слайды! '''Энди Ченнел''' создаст в ''Smile'' настоящее произведение искусства и выложит его на YouTube.<br />
* [[LXF119:codecs|Разберитесь в кодеках]]<br />
*: FLAC? OGG? WAV? MP3? Есть много других страшных слов, но '''Маянк Шарма''' поможет познать именно эти.<br />
* [[LXF119:ssh|Заходим издалека]]<br />
*: Если вы в пу ти, это вовсе не значит, что вы не можете работать за домашним компьютером. '''Нейл Ботвик''' рассматривает ''SSH'' и удаленные рабочие столы.<br />
* [[LXF119:JavaFX|Откройте ''JavaFX Script'']]<br />
*: Если вам не нравится ''Silverlight'' (из-за ''Mono''), '''Антон Черноусов''' предлагает попробовать ''JavaFX'': он пока не работает в Linux, но зато его писали не в Microsoft.<br />
* [[LXF119:GIMP|Улучшим ''GIMP'']]<br />
*: Под невзрачной личиной интерфейса ''GIMP'' скрываются невиданные возможности – сегодня '''Майкл Дж. Хэммел''' выпустит их на свободу.<br />
* [[LXF119:OpenOffice|Автоматизация в офисе]]<br />
*: Хватит тратить часы на щелчки мышью – сценарии '''Марко Фиоретти''' генерируют таблицы ''OpenOffice.org'' на лету.<br />
* [[LXF119:spoutnik|В Сеть через орбиту]]<br />
*: '''Андрей Прахов''' покажет, как настроить спутниковый Интернет, и даст пару советов по вылавливанию ценных файлов удочкой Skynet.<br />
* [[LXF119:Trickle|Канал по справедливости]]<br />
*: Если какието из программ на вашем компьютере слишком охочи до трафика, '''Шашанк Шарма''' и ''Trickle'' найдут способ умерить их аппетиты.<br />
<br />
===[[LXF119:Ответы|Ответы]]===<br />
: Проблемы Linux решены: от настройки ''X.Org'' до резервного копирования</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-06-17T05:42:56Z<p>WikiSysop: Добавлен LXF119</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF119|LXF119 Июнь 2009]]<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF110:EducationLXF110:Education2010-05-13T08:17:26Z<p>WikiSysop: /* Вопросы к экзамену LPI */</p>
<hr />
<div>==Стать дипломированным Linux-гуру==<br />
<br />
: Мастерство вы накопили - в подтверждение осталось получить сертификат и отличную работу на ниве Open Source <br />
<br />
Для большинства из нас использование Linux начиналось как хобби. Но если это хобби у вас уже давно, вы, скорее всего, успели приобрести весьма неплохие навыки. Теперь пора использовать их – и найти работу, позволяющую вам заниматься своей любимой ОС и своим хобби.<br />
<br />
Все, что вам нужно – соответствующий сертификат: ваш потенциальный работодатель вмиг приметит его в вашем резюме. Сертификация –<br />
это квалификация, подтверждающая ваши умения в выбранной вами области Linux. Возможно, вы – превосходный системный<br />
администратор, или терминальный хакер, или эксперт по web-серверам, или программист. На следующих страницах мы рассмотрим основные организации, выдающие сертификаты, которые могут серьезно повлиять на вашу карьеру, и объясним, что вы должны уметь, чтобы получить такой документ.<br />
<br />
Даже если вы новичок в Linux и пока что не достигли экспертного <br />
уровня знаний, входы в мир тренинга по Linux для вас тоже имеются.<br />
Компании вроде Novell и Red Hat предлагают курсы, способные помочь<br />
начинающим пользователям, а Ubuntu и Mandriva.Ru выкладывают<br />
материалы тренингов, ориентированных на настольные ПК, бесплатно.<br />
Форматы этих курсов отличаются. Некоторые их них исключительно<br />
онлайновые, и учебный материал и даже экзамены в них управляются<br />
дистанционно. Другие, например, курсы Red Hat, проводятся аудиторно, перед настоящим компьютером.<br />
В любом случае, процесс подготовки<br />
может оказаться весьма длительным, так что попробуйте ответить<br />
на вопросы пробного теста и познакомьтесь с содержанием интересующих вас курсов.<br />
<br />
Профессиональное обучение стоит профессиональных денег, и если вам повезет, эти деньги внесет ваш работодатель. Обучение недешево, но лишь потому, что ваши усилия и затраты окупятся, благодаря повышению зарплаты и удовлетворению своей работой.<br />
<br />
===В самом начале===<br />
<br />
: Сперва выберите себе дистрибутив. Или базу данных. Или язык – все зависит от того, чем вы хотите заняться после сертификации.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''''MySQL''''' http://www.mysql.com/training<br />
* '''Novell''' http://www.novell.com/training | Ширина=200px}}<br />
<br />
При мыслях об обучении Linux, часто первым делом в голову приходит технический аспект – те задачи, выполнение которых ожидается от системного администратора или ИТ-менеджера. Но есть целый невероятно полезный мир обучения, не относящийся<br />
только к Linux. Триединство ''Apache, PHP'' и ''MySQL'' трансформировало статичный web-дизайн в динамический процесс слияния контента<br />
под воздействием сообщества. Под Linux работает немало серверов, но ''Apache, PHP'' и ''MySQL'' все являются кросс-платформенными технологиями. Другими словами, полученные навыки и знания в Linux будут целиком и полностью применимы к OS X или Windows, и наоборот. Это<br />
означает, что, если вы хотите продолжить свою карьеру, не ограничивая себя рамками Linux, одно из возможных решений – последовать по<br />
проторенной дорожке LAMP. Ее стоит выбрать и в том случае, если вы не в восторге от идеи целый день торчать в серверной.<br />
<br />
На следующей странице мы рассмотрим ''PHP'', но если вы, например, предпочтете тренинг ''Apache'', то увидите, что и тут работает все та<br />
же испытанная формула, которую вы будете встречать вновь и вновь, как только речь зайдет об обучении. Вы зарабатываете баллы, изучая<br />
определенные курсы и сдавая экзамены, а набрав достаточное количество баллов, получаете сертификат. Обучение поручается множеству<br />
местных компаний, и вы, скорее всего, найдете поблизости того, кто будет проводить курсы в недалеком будущем.<br />
<br />
====Примеряем Красную Шапочку====<br />
<br />
{{Врезка| Заголовок=Срез знаний | Содержание= [[Изображение: LXF110_37_1.jpg | 300px]] | Ширина=300px}}<br />
<br />
Все сказанное здесь будет, с некоторыми вариациями, относиться и к другим поставщикам Linux. Red Hat был пионером в области Linux-тренинга, и многие компании применяют его систему начисления баллов, обучения и сдачи экзаменов при проведении собственных курсов.<br />
Но и Red Hat тоже одолжила пару страничек из учебника Microsoft, внедрив множество схожих принципов – хотя сейчас типы тренингов,<br />
предлагаемых обеими компаниями, в корне отличаются друг от друга.<br />
<br />
Превосходный пример являет собой Novell. Это – Linux-компания корпоративного уровня, чьи продукты используются в тех же сценариях и на тех же предприятиях, что и решения Red Hat; эти две фирмы конкурируют. Выбор между ними – это не проблема выбора компании,<br />
предлагающей наилучший тренинг: это проблема выбора дистрибутива Linux, с которым вы намерены работать. Например, если ваша фирма<br />
использует SUSE, то вам потребуется тренинг Novell. Иногда это является требованием договора о поддержке, поскольку поставщику нужно<br />
обеспечить должный уровень понимания у администраторов. Тренинг Novell по Linux в основном зеркально отражает то, что делает конкурент, Red Hat – надо только изменить названия соответствующих технологий и сертификаций. Например, в обучающем модуле по безопасности Linux, предлагаемом Novell, вы изучаете ''AppArmor'', а в аналогичном модуле Red Hat вы будете изучать ''SELinux''. Обе компании предлагают<br />
квалификацию сертифицированного инженера (Certified Engineer, СЕ) в качестве стартового пункта для получения других степеней, и статус<br />
СЕ часто рассматривается как отправная точка для профессиональной сертификации – подобно Microsoft Certified Engineers. Novell уже давно<br />
занимается этим, и его квалификация Netware Certified Engineer почти что предшествовала самому Linux. Но есть и различия. Большинство<br />
тренингов Novell можно пройти онлайн, а практические занятия не так широко распространены, как у Red Hat. Если вы хотите знать, чего<br />
ожидать от программы Novell, загляните в наш обзор, посвященный Red Hat.<br />
<br />
В курсах, предлагаемых этими двумя компаниями, безусловно, есть и различия. Не так давно Novell ввела квалификацию Certified Linux Desktop Administrator, у которой нет эквивалента в Red Hat. Это – стартовый уровень сертификации, позволяющий овладеть базовыми навыками работы в настольном Linux. Он включает такие компоненты, как использование графической среды Gnome и ''Yast'' (что само по себе достойно отдельной сертификации), установка приложений из пакетов, стандартные применения командной строки и основы системного мониторинга. Этот курс идеально подходит для мигрантов с Windows, а также для людей с техническим<br />
складом ума, которые хотят побольше узнать о методах работы Novell.<br />
<br />
===PHP===<br />
<br />
: Если вам неинтересны командная строка и настройка оборудования, то web-программирование – это умение, которое никогда не устареет.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''Zend Technologies''' http://www.zend.com/en/services/training<br />
* '''Mandriva eTraining''' http://etraining.mandriva.ru<br />
* '''Linuxgym''' http://www.linuxgym.com | Ширина=200px}}<br />
<br />
''PHP'' – это язык программирования, выбранный множеством сайтов. Он обеспечивает работу десятков приложений Web 2.0 и господствует повсюду, от web-форумов до домашних серверов. Своим успехом ''PHP'' обязан относительной простоте и открытой лицензии; в итоге он распространен в сети повсеместно.<br />
<br />
И так легко позабыть, что за ним стоит определенная компания.<br />
Zend Technologies – это диспетчер ''PHP''. Там трудятся его главные<br />
разработчики, поддерживая установки ''PHP'' по всему миру. Компания<br />
отвечает за развитие ''PHP'' и за использование его имени, и потому-то<br />
Zend Technologies – единственный признанный авторитет в области<br />
обучения и сертификации по ''PHP''. Она предлагает собственную серию<br />
курсов и квалификацию Zend Certified Engineer – статус, гарантирующий доступ к профессиональным форумам и привилегиям. Zend<br />
Technologies может похвастаться более чем 3400 сертифицированными инженерами. Эта квалификация может стать для вас хорошим<br />
выбором, если вам нужна яркая отметка в вашем резюме. Вряд ли на<br />
место будет много кандидатов с таким же статусом. Из тех, кто стал<br />
ZCE, 25% заявили о том, что их зарплата/доход увеличился, а 98% сказали, что они рекомендуют эту сертификацию всем.<br />
<br />
====Искусство Zend====<br />
<br />
Обучающие курсы Zend размещены онлайн, и они варьируются от трехчасовых, имеющих целью помочь вам перевести свои web-приложения<br />
с ''PHP 4'' на ''PHP 5'' (300 евро), до полномасштабного «От начинающего до сертификата Zend Certification за 90 дней» (‘From Beginner to Zend<br />
Certification in 90 days’) (2750 евро). Лучшее, что есть в учебных схемах по ''PHP'' – это их широкий охват. Если вас, например, интересует только безопасность, то есть специальный курс, посвященный самым распространенным сетевым атакам и методам борьбы с ними. Zend также предлагает ряд более общих<br />
курсов. Они начинаются с '''PHP I: Foundations''', тренинга, который подходит для начинающих. Он рассматривает языки программирования, основы синтаксиса,<br />
переменные, управляющие конструкции и процедурное программирование, а затем переходит к отладке, HTML,<br />
онлайн-сессиям и безопасности. Данный курс не требует предварительной подготовки, и если вы уже используете Linux, у вас не должно<br />
возникнуть больших проблем при работе с этим материалом.<br />
<br />
Следующий уровень – '''PHP II: Higher Structures'''. Он разработан для<br />
углубленного изучения тех концепций, с которыми слушатели ознакомились в курсе для начинающих, и предполагает наличие у студентов не менее шести месяцев опыта программирования на ''PHP''. Здесь впервые упоминается объектно-ориентированное программирование,<br />
и курс затрагивает основные принципы объектного проектирования, абстрактные классы, модификаторы доступа и интерфейсы, а также<br />
регулярные выражения в стиле ''Perl'', продвинутую отладку, использование web с cookies и интеграцию с базами данных. По овладении<br />
этими умениями, остается только '''PHP 5 Certification Training''', и это – последний шаг на пути к сертификации. Данный заключительный курс<br />
предшествует и готовит к экзамену ZCE. Тут вы должны быть опытным программистом ''PHP'' и человеком, овладевшим содержанием первых<br />
двух курсов, не боящимся предлагать собственные решения. Если вы пойдете по этому пути, вам придется потратить на обучение 3000 евро<br />
и быть готовым к финальному экзамену.<br />
<br />
====Linuxgym====<br />
<br />
Если вы ищете более общую платформу для<br />
обучения Linux, возможно, стоит познакомиться с Linuxgym. Это – обучающая система<br />
онлайн, она отслеживает изменения, которые вы вносите в виртуальную машину с Linux, и<br />
на данный момент проверяется в двух университетах Австралии. Мы спросили Брюса Гарви<br />
[Bruce Garvey] из Linuxgym, что он думает о ситуации с обучением Linux. «В основном<br />
обучение Linux охватывает вопросы, связанные с сервером, поскольку до сих пор Linux<br />
особо не рвался на настольные ПК», сказал он<br />
нам. «Подвижки налицо – например, разработан Ubuntu Desktop Training, обучающий работе на настольных ПК и дающий сертификацию,<br />
но для нас всегда была и есть третья категория пользователей, которым тоже нужно<br />
обучение и сертификация: это программисты. Linuxgym – механизм доставки, – продолжает Гарви, – а его содержание – в<br />
тетрадях XML. Мы повысили процент успешной сдачи экзаменов с помощью нашего<br />
первого публичного сборника упражнений –<br />
''Bash'' 101 – на 40% и значительно снизили шансы списывания на тестировании в<br />
Технологическом университете Сиднея (University of Technology, Sydney).<br />
Тестирование по ''Perl'' и HTML дало похожие результаты».<br />
<br />
===LPI===<br />
<br />
: Сертификация LPI является стандартом в обучении «Linux вообще» уже долгие годы.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''LPI''' http://www.lpi.org<br />
* '''LinuxIT''' http://www.linuxit.com<br />
* '''Ubuntu desktop''' https://wiki.ubuntu.com/Training | Ширина=200px}}<br />
<br />
Наиболее широко распространенное и стандартное решение в сфере профессионального обучения из всех рассмотренных<br />
нами в этой статье – сертификация Linux Professional Institute (Профессионального Института Linux). Практически любой, имеющий<br />
должный уровень знаний и квалификации, может стать обучающим партнером LPI. Учебная документация и сами экзамены переведены на<br />
многие языки. Фактически, где бы вы ни жили, вы всегда сможете найти по соседству место проведения курсов и сдачи экзаменов LPI.<br />
<br />
Получаемая квалификация тоже довольно широкая. В отличие от большинства обучающих курсов по Linux, сертификация LPI в основном независима от производителя, так что вы не будете привязаны к конкретному дистрибутиву. Тут есть и преимущества, и недостатки. С одной стороны, ваша квалификация будет отличаться гибкостью, и вы легко адаптируете свои знания к самым общим программам и средам. С другой стороны, это способствует развитию синдрома «мастера на<br />
все руки» (мы его сами придумали) – ваших знаний какой-то специфичной программы может оказаться недостаточно, чтобы конкурировать с экспертами именно по данной системе. LPI отдает себе отчет в том, что это может стать проблемой, и предлагает также тренинги по<br />
определенным дистрибутивам. Квалификация та же самая, но содержание учебного курса нацелено на конкретное решение. Например,<br />
Canonical предлагает собственные курсы LPI по изучению Ubuntu, замещая все аспекты обучения соответствующими эквивалентами для<br />
Ubuntu. А если Ubuntu вас особенно интересует, есть также специально разработанная сообществом учебная программа для настольных<br />
систем, выпущенная под лицензией Creative Commons.<br />
<br />
Еще один аспект квалификации LPI, немало способствующий ее привлекательности в глазах работодателя – привязка к современности. Через пять лет вам придется либо расширять свою квалификацию LPI, либо подтверждать ее. Для обычных пользователей это непросто, зато заставляет<br />
постоянно совершенствоваться в Linux. Большинство из нас согласно с тем, что за последние пять лет Linux сильно изменился и явно не собирается<br />
стоять на месте.<br />
<br />
====Сертификаты LPI====<br />
<br />
=====LPIC 1=====<br />
<br />
Это – стартовая точка. Для '''LPIC1''' нет никаких предварительных требований, и он идеально подходит для тех, чей стаж работы в Linux невелик. В него включены два экзамена под номерами '''101''' и '''102''', и вам придется сдать оба. Ответы на вопросы экзаменов придется выбрать из<br />
предложенных вариантов, и если вы пользуетесь Linux уже год или два, у вас вряд ли возникнут проблемы с первым уровнем. Он охватывает<br />
в основном базовые знания, которые есть у многих из нас и которые мы считаем чем-то самим собой разумеющимся. Его цель – дать вам<br />
основные знания по работе с командной строкой и решению простейших задач сопровождения. Сюда, например, входит понятие о BIOS, и<br />
вы должны уметь включать и отключать опции материнской платы, а также настраивать IRQ, DMA и другие параметры.<br />
<br />
Затем курс переходит на общее расположение файлов, базовое управление файлами и процессами и установку и конфигурацию ''X11''.<br />
Мы назвали бы это классической основой администрирования систем Linux и Unix. Возможно, все, чему вы научитесь, и не найдет немедленного применения, но послужит отличной основой для последующего опыта работы в Linux.<br />
<br />
=====LPIC 2=====<br />
<br />
Сдав '''LPIC 1''', можете переходить ко второму уровню. Цель этого курса – формирование основных навыков администрирования системы и работы в сети. Он включает настройку сети и поиск неисправностей, работу с почтовыми, web- и DNS-серверами, аутентификацию LDAP и PAM и установку LDAP. Вы также сможете побаловаться с ''Samba, SSH'' и ''Kerberos'', а потом перейдете к компиляции собственного ядра. По названиям тем<br />
видно, что курс нейтральный. Как и в '''LPIC1''', каждая категория оценивается отдельно, и это значит, что они имеют разное влияние на вашу общую<br />
оценку. Например, задачи по использованию ''Perl, Bash, Awk, sed'' и ''Cron''<br />
оцениваются на '''3''', а обзор системных журналов – на '''1'''. Отсюда понятно,<br />
на что следует обратить больше внимания, и полученные вами знания и<br />
умения пригодится в широком диапазоне дистрибутивов Linux.<br />
<br />
=====LPIC 3=====<br />
<br />
Высший уровень квалификации LPI разработан для более крупных программ, планирования ИТ-ресурсов и сетевого администрирования.<br />
В отличие от других схем сертификации LPI, квалификация третьего уровня присваивается после сдачи одного экзамена, но начальные<br />
требования у него весьма жесткие. Коротко говоря, этот уровень обучения полностью посвящен вопросам, связанным с крупными сетями,<br />
а значит, вам придется многое узнать о службах каталогов LDAP, и о безопасности. Если вас не пугают термины «X.500» и «схема LDAP”, то<br />
вы, очевидно, попали в нужное место. Программа включает работу с клиентами Windows, безопасность и производительность и интеграцию<br />
сети с Active Directory.<br />
<br />
Как и на курсах Red Hat, обучение можно продолжать, занявшись такими предметами, как электронная почта, интранет, отказоустойчивость и виртуализация; это добавит ценности стандартному сертификату.<br />
<br />
====LPI: Независимое мнение====<br />
<br />
Мы побеседовали с А.К.Моу [A K Moe], старшим системным инженером iwantoneofthose.com и недавним выпускником курсов LPI.<br />
<br />
'''В''' ''Что в первую очередь привело вас к сертификации LPI?''<br />
<br />
'''О''' В моей компании мне предложили найти курсы повышения квалификации. Первое, о чем я подумал, были курсы Red Hat, но тот тренинг, который я нашел, оказался слишком дорогим. А потом я узнал об экзаменах LPI.<br />
<br />
'''В''' ''У вас уже был опыт работы с Linux?''<br />
<br />
'''О''' В университете я немного познакомился с Unix, а будучи системным инженером в iwantoneofthose.com, работаю с Linux каж дый день.<br />
<br />
'''В''' ''Сложным ли оказался курс?''<br />
<br />
'''О''' Некоторые части курса довольно трудны для начинающих в Linux. Чтобы сдавать '''LPI101''', надо наработать примерно 3–6 месяцев опыта.<br />
<br />
'''В''' ''Насколько помогла вам сертификация? Это была практическая помощь, или просто другие стали относиться к вам более серьезно?''<br />
<br />
'''О''' Она не только позволила мне заполнить пробелы, оставшиеся после университета, но также и увеличила мою уверенность в работе.<br />
<br />
===Вопросы к экзамену LPI===<br />
<br />
: Проверьте свои знания<br />
<br />
{{Врезка | Содержание=Вопросы и ответы взяты с: LPI Linux Certification in a Nutshell: A Desktop Quick Reference, Second Edition ISBN: 978-0-596-00528-3<br />
http://oreilly.com/catalog/9780596005283/index.html Copyright (c) 2006 O’Reilly Media, Inc. Все права сохранены. Используется с разрешения.<br />
<br />
[[Изображение: LXF110_41_1.jpg | 200px]] | Ширина=200px}}<br />
<br />
<br />
'''Первый уровень'''<br />
<br />
''1 Какие две команды отображают состояние процессов в системе Linux?''<br />
<br />
a ls и df.<br />
b ps и top.<br />
c ps и df.<br />
d df и top.<br />
e du и df.<br />
<br />
''2 Что представляет собой устройство file /dev/hdb6?''<br />
<br />
a Расширенный раздел на диске SCSI.<br />
b Логический раздел на диске SCSI.<br />
c Расширенный раздел на диске IDE.<br />
d Первичный раздел на диске IDE.<br />
e Логический раздел на диске IDE.<br />
<br />
''3 В ответ на команду df система выдала отчет: Use% of 98% for the filesystem mounted on /home. Что из перечисленного ниже наилучшим образом описывает смысл этого сообщения?''<br />
<br />
a Файлы в /home занимают 98% физического диска.<br />
b Операции чтения-записи файлов в /home потребляют 98% I/O-мощностей системы.<br />
c Файлы в /home занимают 98% файловой системы /home.<br />
d Индексные дескрипторы в /home почти на исходе.<br />
e Индексные дескрипторы в /home на 98% свободны.<br />
<br />
''4 У Кэролайн имеется текстовый файл под названием guest_list, содержащий 12 строк. Она выполняет следующую команду. Каков будет результат?''<br />
<br />
# split -4 guest_list gl<br />
<br />
a Первые четыре колонки текста будут записаны в новые файлы<br />
glaa, glab, glac и glad.<br />
<br />
b Первые четыре колонки текста будут записаны в новые файлы<br />
aagl, abgl, acgl и adgl.<br />
<br />
c Строки guest_list будут поровну разделены между новыми файлами glaa, glab, glac и glad.<br />
<br />
d Строки guest_list будут поровну разделены между новыми файлами aagl, abgl и acgl.<br />
<br />
''5 Алекс работает в директории, где всего один файл, Afile1. Что отобразится после того, как в bash будут введены следующие команды?''<br />
<br />
# MYVAR=ls<br />
# echo $MYVAR “$MYVAR” ‘$MYVAR’ `$MYVAR`<br />
<br />
a Afile1 Afile1 Afile1 Afile1.<br />
b ls Afile1 Afile1 Afile1.<br />
c ls ls Afile1 Afile1.<br />
d ls ls $MYVAR Afile1.<br />
e ls ls ls $MYVAR.<br />
<br />
'''Уровень 2'''<br />
<br />
''6 Вы только что завершили настройку собственного ядра. Что из перечисленного ниже является правильным следующим шагом для генерации его образа?''<br />
<br />
a make dep.<br />
b make bzImage.<br />
c make kernel.<br />
d make image.<br />
<br />
''7 Как называется файл в Grub, который нужно отредактировать, что бы изменить ядро, загружаемое по умолчанию?''<br />
<br />
a boot.conf.<br />
b grub.conf.<br />
c img.conf.<br />
d vmlinux.conf.<br />
<br />
''8 Вам позвонил разработчик и попросил вас помочь решить проблему с драйвером устройства для платы PCI, поддержкой которой решила заниматься ваша компания. Ему нужно знать IRQ, которое использует устройство, а также статистику по латентности. Какую из нижеприведенных команд надо использовать, чтобы предоставить ему требующуюся информацию?''<br />
<br />
a lspci -p.<br />
b setserial.<br />
c lspci -vv.<br />
d lsdev -C /dev/.<br />
<br />
''9 У вас возникли проблемы с подключением жесткого диска USB к системе. Вы хотите определить возможности устройства по передаче данных и потенциальную скорость соединения USB-контроллера. Впишите приложение, которое поможет вам получить эту информацию.''<br />
<br />
''10 Вам нужно запустить скрипт под названием backup через три часа, но в это время вы не планируете находиться в системе или перед терминалом, с которого можно получить доступ к вашей системе. Какие из приведенных команд позволят вам запустить этот скрипт?''<br />
<br />
a at now + 3 hours <backup.<br />
b сrontab -e < 0 3 *** backup.<br />
c at now + 3 >backup.<br />
d echo “0 3 *** backup”>>/etc/сrontab.<br />
<br />
===Сертификация Red Hat===<br />
<br />
: Большой папочка тренингов Linux.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''Red Hat''' http://www.europe.redhat.com/training | Ширина=200px}}<br />
<br />
Если для олицетворения тренинга Linux придется выбирать одну компанию, то это будет Red Hat. Для многих людей за пределами активного Linux-сообщества Red Hat представляет собой корпоративную ипостась Linux. Но несмотря на то, что дистрибутив разделен на корпоративную и свободную модели, Red Hat по-прежнему остается жизненно важной частью сообщества, а его курсы Certified Engineer [Сертифицированный инженер] являются индустриальным стандартом. Термин «Red Hat Certified Engineer» (Сертифицированный инженер Red Hat – RHCE) впервые появился в 1997 году, и тренинг, который стоял за ним, стал эталоном, используемым Red Hat и его партнерами для оценки знаний. Впервые курсы сертификации Red Hat проводились в декабре 1998 года – почти 10 лет назад. С тех пор RHCE стала самой популярной квалификацией, а количество схем сертификации, предлагаемых Red Hat, увеличилось до пяти.<br />
<br />
Сами по себе схемы сертификации – это просто экзамены: сдавайте и получайте квалификацию. В отличие от других обучающих схем, особенно предлагаемых LPI, экзамены имеют практическую направленность; проверка знаний проводится на настоящих машинах. Предлагается, например, оптимизировать сервер или отредактировать файлы настройки ''Apache''. Получившаяся конфигурация позволяет судить, сдан тест или нет.<br />
<br />
К каждой сертификации прилагается список обучающих курсов Red Hat, которые надо пройти, чтобы заполнить мозг необходимой для сдачи экзамена информацией. Все курсы разные, но обычно они включают несколько дней интенсивного аудиторного тренинга перед экзаменом на получение сертификата. Если вы чувствуете, что уже приобрели необходимые знания, не обязательно проходить все курсы: можно перейти сразу к экзамену. Этот подход довольно распространен, например, среди тех, у кого есть опыт работы в Unix. Red Hat рекомендует пройти трехдневный курс и затем сдать экзамен на RHCE.<br />
<br />
Вне зависимости от выбранной схемы, вам придется здраво оценить свои шансы. Процент успешной сдачи как RHCT, так и RHCE составляет 50%, но это только для повторной попытки. При первой сдаче, например, RHCE риск провала составит приблизительно 60–70%. Учитывая, что экзамен стоит денег, затраты получаются немалые, и Red Hat восполняет их, предлагая «Пакеты Успеха» (Success Packs) – они позволяют пересдать экзамены RHCT или RHCE без дополнительной<br />
оплаты.<br />
<br />
====Схемы Red Hat====<br />
<br />
=====Red Hat Certified Technician (RHCT)=====<br />
<br />
Red Hat осознала, что для новичков в Linux сдача экзамена '''RHCE''' – большое испытание. И в ответ разработала программу обучения более низкого уровня, для тех, кто только знакомится с этой платформой. К данной группе относятся домашние пользователи, желающие запустить собственный сервер, а также компании, которые хотят попробовать поработать в Linux. Впервые курс '''RHCT''' был предложен более пяти лет назад, и его рекомендуют в качестве первого шага тем, у кого нет опыта работы в Unix/Linux, и тем, кто перешел с других ОС. Здесь не требуется знаний по Linux, и от вас ожидают только рудиментарных навыков работы с мышью и клавиатурой. Среди получаемых в этом курсе знаний и умений – смена пользователя и редактирование файлов, использование документации, расположение всех основных файлов и устройств, права доступа и оболочка ''Bash''. Вы также научитесь управлять процессами, и вам даже дадут краткий обзор ''SELinux'' и сетевого брандмауэра. Согласно Red Hat, '''RHCT''' – самый быстрый способ заработать доверие и получить знания в мире Linux, а по популярности<br />
'''RHCT''' на данный момент превзошел '''RHCE'''. Это – оптимальный стартовый пункт, если вы жаждете сделать карьеру в области администрирования систем Red Hat.<br />
<br />
=====Red Hat Certified Engineer (RHCE)=====<br />
<br />
Это – классическая квалификация: именно с нее началась обучающая<br />
инициатива Red Hat. Сейчас во всем мире насчитывается свыше 325 700<br />
сертифицированных инженеров, и '''RHCE''' – одна из самых признанных<br />
квалификаций, которую вы можете добавить в свое резюме. Это – всеобъемлющее руководство по администрированию Red Hat и стандартное требование для многих системных администраторов, инженеров и консультантов Linux среднего звена. Сертификация разбита на разделы, каждый из которых посвящен отдельной области. Сюда включены производительность и безопасность, системные сервисы, сетевые ресурсы, web, распределенный доступ к электронной почте и файлам.<br />
Как и следует ожидать, каждый курс проникает в материал гораздо глубже, чем '''RHCT''', и сертификация включает некоторые из курсов<br />
'''RHCT''' в качестве основы. Если у вас нет времени, Red Hat также предлагает ускоренный курс. Обучение длится пять дней, в конце каждый<br />
слушатель сдает сертификационный экзамен '''RHCE'''. Это отличная идея, если у вас уже есть солидный опыт работы в Linux.<br />
<br />
=====Red Hat Certificates of Expertise=====<br />
<br />
Данные сертификаты являются развитием статуса '''RHCE''' и позволяют<br />
продолжить обучение и квалификацию, подгоняя свои знания под конкретные задачи. Среди охватываемых ими предметов – службы каталогов и аутентификация, администрирование политик ''SELinux'', виртуализация и создание кластеров. Все эти курсы относятся к продвинутому<br />
уровню и могут быть полезны для получения более высокой степени<br />
квалификации от Red Hat. Например, сертификат ''SELinux'' – это один<br />
шаг в направлении степени Red Hat Certified Security Specialist, а более<br />
продвинутый экзамен по созданию кластеров и хранилищ (Clustering and Storage) – один из пяти сертификатов, необходимых для получения квалификации Red Hat Certified Architect – высшего уровня, предлагаемого Red Hat.<br />
<br />
=====Red Hat Certified Specialist (RHDS & RHSS)=====<br />
<br />
Уровень Специалист – четвертая программа в учебной иерархии Red Hat и возможность формализации инженерных знаний как в области<br />
безопасности ('''RHSS'''), так и для центра обработки данных ('''RHDS'''). Чтобы стать специалистом, вы должны обладать статусом '''RHCE''', и<br />
для получения каждого сертификата требуется сдать по три экзамена. Специалист по безопасности должен разбираться в таких вопросах уровня предприятия, как аутентификация и службы каталогов, а специалист центра обработки данных – понимать в виртуализации и создании кластеров.<br />
<br />
=====Red Hat Certified Architect (RHCA)=====<br />
<br />
Это – самая вершина, квалификация для птиц высокого полета в сфере Red Hat. '''RHCA''' появилась в 2005 году, и, как следует из ее названия, создана для тех, кто принимает решения в сфере ИТ, и для экспертов Red Hat. Типичные функции '''RHCA'''<br />
могут включать планирование, разработку и управление системами Linux и Open Source, знания и умения,<br />
необходимые тем, кто разрабатывает и реализует такие решения в сфере ИТ, как, например, центры обработки<br />
данных и пр. В итоге, получить ее непросто: придется пройти четыре курса продвинутого уровня и сдать все пять экзаменов<br />
Expertise Exams. Лучший совет дал нам Флориан Брэнд [Florian Brand], первый, кто получил квалификацию '''RHCA''', и заключался он<br />
в том, что спешить не надо. Усвоить необходимо уйму информации, и кавалерийским наскоком это не получается. '''LXF'''<br />
<br />
====Взгляд изнутри Red Hat: Йенс Циманн====<br />
<br />
'''В''' ''Расскажите, пожалуйста, о себе нашим читателям.''<br />
<br />
'''О''' Я – один из учредителей Red Hat EMEA (Европа, Средний Восток и Африка). До этого у меня была собственная Linux-компания (под названием Delix),<br />
и у нас был собственный дистрибутив Linux, под названием DLD.<br />
<br />
'''В''' ''Кто является типичным слушателем курсов Red Hat?''<br />
<br />
'''О''' Как правило, это системные администраторы, системные инженеры и консультанты по Linux и Unix, решившие заняться определенными проектами. Тут есть два аспекта: администраторский и консалтинговый, и это отражено в структуре наших экзаменов. Мы тестируем оба аспекта.<br />
<br />
'''В''' ''Как работают практические экзамены?''<br />
<br />
'''О''' Если сравнивать с обычными в ИТ-индустрии экзаменами, где надо выбирать правильный ответ среди предложенных, мы выбрали путь, подобный Cisco. Вам надо присутствовать в аудитории, перед вами стоит реальная машина. У нас есть разные сценарии, в которых мы автоматически запускаем сессии по поиску неисправностей, с прицелом на сисадминов, а во второй части больше внимания уделяем реализации, установке и настройке, для тех, кто работает на клиентской стороне.<br />
<br />
'''В''' ''Кто обычно платит за ваши курсы? Компании или частные лица?''<br />
<br />
'''О''' Отчасти это зависит от страны. Например, в Великобритании частные лица в большей степени заинтересованы в этих экзаменах – чтобы получать более высокую зарплату, чтобы найти лучшую, более интересную работу. В некоторых других странах, например, на континенте, больший интерес проявляют компании-работодатели. Если люди участвуют в проекте, их отправляют на курсы.<br />
<br />
'''В''' ''Каков средний уровень подготовки слушателей?''<br />
<br />
'''О''' За последнюю пару лет произошел сильный сдвиг. Сначала к нам приходило множество людей с опытом работы в Unix – для них у нас есть курс '''RH300''', который впоследствии ведет к экзамену '''RHCE''', и за пять дней обучения они могут более или менее подготовиться к нему. Мы учим их расхождениям – что в Linux отличается от Solaris, HP UX. Это не совсем классический учебный курс. Но сейчас все изменилось, и теперь все больше и больше людей приходит к нам, чтобы начать с нуля. По мере того, как Linux все больше «выходит в люди», множество компаний начинают видеть в этом практическую ценность.<br />
<br />
'''В''' ''Какие должности, по вашему мнению, смогут занять получившие более высокую квалификацию Red Hat?''<br />
<br />
'''О''' Нас отличает от наших конкурентов на рынке то, что мы подгоняем содержание наших курсов под нужды слушателей, работающих на разных должностях. Например, наш курс '''253''' – это сети и безопасность, но это вовсе не означает, что мы не обучаем работе в сети и безопасности в рамках других курсов. В основном мы выделяем три уровня должностей: '''RHCT, RHCE''' и '''RHCA''', и, опираясь на обратную связь с нашими клиентами, мы вносим в их содержание все необходимое дляаксимального повышения продуктивности повседневной работы этих людей. Скажем, уровень '''RHCT''' – это уровень человека, работающего с<br />
клиентами, рабочими станциями и, возможно, с сервером отдела. '''RHCE''' – типичный сисадмин, поддерживающий ряд серверов со всеми сервисами, и демонами, и управлением пользователями. '''RHCA''' – для тех, кто следит за работой корпоративной сети. Обычно им нужно обладать полной картиной состава приложений, и<br />
знать их требования в плане отказоустойчивости, создания кластеров, восстановления после сбоя и единого входа.<br />
<br />
====Пробные вопросы====<br />
<br />
: Основы Linux для Red Hat Enterprise.<br />
<br />
''1 Если файла newdir/file2 не существует, но существует директория newdir, каким будет результат следующей команды?''<br />
<br />
mv file1 newdir/file2<br />
a) file1 будет перемещен в newdir и переименован в file2.<br />
b) file1 будет скопирован в newdir и назван file2.<br />
c) Появится сообщение об ошибке, поскольку эта команда некорректна.<br />
<br />
''2 Для файла report.txt, какая из следующих команд будет, невзирая на регистр, извлекать каждую строку, содержащую слово «expense», строки перед и после каждого совпадения и выводить на печать соответствующие номера строк?''<br />
<br />
a) grep -i expense report.txt.<br />
b) grep -A1 -B1 -n -i expense report.txt.<br />
c) grep --context=1 -n -i expense report.txt.<br />
<br />
''3 Вы хотите автоматически входить в систему на компьютере 1 с компьютера 2. Чтобы выполнить эту задачу, вы размещаете ключ с компьютера 2 в файле в соответствующей скрытой директории на компьютере 1. В какой файл вы поместите данный ключ?''<br />
<br />
a) authorized_keys.<br />
b) known_hosts.<br />
c) id_dsa.pub.<br />
<br />
===Спасибо вам…===<br />
<br />
* Эмма Дин [Emma Dean] и Йенс Циманн [Jens Ziemann] из Red Hat.<br />
* Вернер Ван Штаден [Werner van Staden] из MeWe.org.uk.<br />
* Питер Доус [Peter Dawes] из LinuxIT.<br />
* Хосетт Гарсия [Josette Garcia] из O’Reilly.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF110:EducationLXF110:Education2010-05-13T08:17:08Z<p>WikiSysop: /* Вопросы к экзамену LPI */</p>
<hr />
<div>==Стать дипломированным Linux-гуру==<br />
<br />
: Мастерство вы накопили - в подтверждение осталось получить сертификат и отличную работу на ниве Open Source <br />
<br />
Для большинства из нас использование Linux начиналось как хобби. Но если это хобби у вас уже давно, вы, скорее всего, успели приобрести весьма неплохие навыки. Теперь пора использовать их – и найти работу, позволяющую вам заниматься своей любимой ОС и своим хобби.<br />
<br />
Все, что вам нужно – соответствующий сертификат: ваш потенциальный работодатель вмиг приметит его в вашем резюме. Сертификация –<br />
это квалификация, подтверждающая ваши умения в выбранной вами области Linux. Возможно, вы – превосходный системный<br />
администратор, или терминальный хакер, или эксперт по web-серверам, или программист. На следующих страницах мы рассмотрим основные организации, выдающие сертификаты, которые могут серьезно повлиять на вашу карьеру, и объясним, что вы должны уметь, чтобы получить такой документ.<br />
<br />
Даже если вы новичок в Linux и пока что не достигли экспертного <br />
уровня знаний, входы в мир тренинга по Linux для вас тоже имеются.<br />
Компании вроде Novell и Red Hat предлагают курсы, способные помочь<br />
начинающим пользователям, а Ubuntu и Mandriva.Ru выкладывают<br />
материалы тренингов, ориентированных на настольные ПК, бесплатно.<br />
Форматы этих курсов отличаются. Некоторые их них исключительно<br />
онлайновые, и учебный материал и даже экзамены в них управляются<br />
дистанционно. Другие, например, курсы Red Hat, проводятся аудиторно, перед настоящим компьютером.<br />
В любом случае, процесс подготовки<br />
может оказаться весьма длительным, так что попробуйте ответить<br />
на вопросы пробного теста и познакомьтесь с содержанием интересующих вас курсов.<br />
<br />
Профессиональное обучение стоит профессиональных денег, и если вам повезет, эти деньги внесет ваш работодатель. Обучение недешево, но лишь потому, что ваши усилия и затраты окупятся, благодаря повышению зарплаты и удовлетворению своей работой.<br />
<br />
===В самом начале===<br />
<br />
: Сперва выберите себе дистрибутив. Или базу данных. Или язык – все зависит от того, чем вы хотите заняться после сертификации.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''''MySQL''''' http://www.mysql.com/training<br />
* '''Novell''' http://www.novell.com/training | Ширина=200px}}<br />
<br />
При мыслях об обучении Linux, часто первым делом в голову приходит технический аспект – те задачи, выполнение которых ожидается от системного администратора или ИТ-менеджера. Но есть целый невероятно полезный мир обучения, не относящийся<br />
только к Linux. Триединство ''Apache, PHP'' и ''MySQL'' трансформировало статичный web-дизайн в динамический процесс слияния контента<br />
под воздействием сообщества. Под Linux работает немало серверов, но ''Apache, PHP'' и ''MySQL'' все являются кросс-платформенными технологиями. Другими словами, полученные навыки и знания в Linux будут целиком и полностью применимы к OS X или Windows, и наоборот. Это<br />
означает, что, если вы хотите продолжить свою карьеру, не ограничивая себя рамками Linux, одно из возможных решений – последовать по<br />
проторенной дорожке LAMP. Ее стоит выбрать и в том случае, если вы не в восторге от идеи целый день торчать в серверной.<br />
<br />
На следующей странице мы рассмотрим ''PHP'', но если вы, например, предпочтете тренинг ''Apache'', то увидите, что и тут работает все та<br />
же испытанная формула, которую вы будете встречать вновь и вновь, как только речь зайдет об обучении. Вы зарабатываете баллы, изучая<br />
определенные курсы и сдавая экзамены, а набрав достаточное количество баллов, получаете сертификат. Обучение поручается множеству<br />
местных компаний, и вы, скорее всего, найдете поблизости того, кто будет проводить курсы в недалеком будущем.<br />
<br />
====Примеряем Красную Шапочку====<br />
<br />
{{Врезка| Заголовок=Срез знаний | Содержание= [[Изображение: LXF110_37_1.jpg | 300px]] | Ширина=300px}}<br />
<br />
Все сказанное здесь будет, с некоторыми вариациями, относиться и к другим поставщикам Linux. Red Hat был пионером в области Linux-тренинга, и многие компании применяют его систему начисления баллов, обучения и сдачи экзаменов при проведении собственных курсов.<br />
Но и Red Hat тоже одолжила пару страничек из учебника Microsoft, внедрив множество схожих принципов – хотя сейчас типы тренингов,<br />
предлагаемых обеими компаниями, в корне отличаются друг от друга.<br />
<br />
Превосходный пример являет собой Novell. Это – Linux-компания корпоративного уровня, чьи продукты используются в тех же сценариях и на тех же предприятиях, что и решения Red Hat; эти две фирмы конкурируют. Выбор между ними – это не проблема выбора компании,<br />
предлагающей наилучший тренинг: это проблема выбора дистрибутива Linux, с которым вы намерены работать. Например, если ваша фирма<br />
использует SUSE, то вам потребуется тренинг Novell. Иногда это является требованием договора о поддержке, поскольку поставщику нужно<br />
обеспечить должный уровень понимания у администраторов. Тренинг Novell по Linux в основном зеркально отражает то, что делает конкурент, Red Hat – надо только изменить названия соответствующих технологий и сертификаций. Например, в обучающем модуле по безопасности Linux, предлагаемом Novell, вы изучаете ''AppArmor'', а в аналогичном модуле Red Hat вы будете изучать ''SELinux''. Обе компании предлагают<br />
квалификацию сертифицированного инженера (Certified Engineer, СЕ) в качестве стартового пункта для получения других степеней, и статус<br />
СЕ часто рассматривается как отправная точка для профессиональной сертификации – подобно Microsoft Certified Engineers. Novell уже давно<br />
занимается этим, и его квалификация Netware Certified Engineer почти что предшествовала самому Linux. Но есть и различия. Большинство<br />
тренингов Novell можно пройти онлайн, а практические занятия не так широко распространены, как у Red Hat. Если вы хотите знать, чего<br />
ожидать от программы Novell, загляните в наш обзор, посвященный Red Hat.<br />
<br />
В курсах, предлагаемых этими двумя компаниями, безусловно, есть и различия. Не так давно Novell ввела квалификацию Certified Linux Desktop Administrator, у которой нет эквивалента в Red Hat. Это – стартовый уровень сертификации, позволяющий овладеть базовыми навыками работы в настольном Linux. Он включает такие компоненты, как использование графической среды Gnome и ''Yast'' (что само по себе достойно отдельной сертификации), установка приложений из пакетов, стандартные применения командной строки и основы системного мониторинга. Этот курс идеально подходит для мигрантов с Windows, а также для людей с техническим<br />
складом ума, которые хотят побольше узнать о методах работы Novell.<br />
<br />
===PHP===<br />
<br />
: Если вам неинтересны командная строка и настройка оборудования, то web-программирование – это умение, которое никогда не устареет.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''Zend Technologies''' http://www.zend.com/en/services/training<br />
* '''Mandriva eTraining''' http://etraining.mandriva.ru<br />
* '''Linuxgym''' http://www.linuxgym.com | Ширина=200px}}<br />
<br />
''PHP'' – это язык программирования, выбранный множеством сайтов. Он обеспечивает работу десятков приложений Web 2.0 и господствует повсюду, от web-форумов до домашних серверов. Своим успехом ''PHP'' обязан относительной простоте и открытой лицензии; в итоге он распространен в сети повсеместно.<br />
<br />
И так легко позабыть, что за ним стоит определенная компания.<br />
Zend Technologies – это диспетчер ''PHP''. Там трудятся его главные<br />
разработчики, поддерживая установки ''PHP'' по всему миру. Компания<br />
отвечает за развитие ''PHP'' и за использование его имени, и потому-то<br />
Zend Technologies – единственный признанный авторитет в области<br />
обучения и сертификации по ''PHP''. Она предлагает собственную серию<br />
курсов и квалификацию Zend Certified Engineer – статус, гарантирующий доступ к профессиональным форумам и привилегиям. Zend<br />
Technologies может похвастаться более чем 3400 сертифицированными инженерами. Эта квалификация может стать для вас хорошим<br />
выбором, если вам нужна яркая отметка в вашем резюме. Вряд ли на<br />
место будет много кандидатов с таким же статусом. Из тех, кто стал<br />
ZCE, 25% заявили о том, что их зарплата/доход увеличился, а 98% сказали, что они рекомендуют эту сертификацию всем.<br />
<br />
====Искусство Zend====<br />
<br />
Обучающие курсы Zend размещены онлайн, и они варьируются от трехчасовых, имеющих целью помочь вам перевести свои web-приложения<br />
с ''PHP 4'' на ''PHP 5'' (300 евро), до полномасштабного «От начинающего до сертификата Zend Certification за 90 дней» (‘From Beginner to Zend<br />
Certification in 90 days’) (2750 евро). Лучшее, что есть в учебных схемах по ''PHP'' – это их широкий охват. Если вас, например, интересует только безопасность, то есть специальный курс, посвященный самым распространенным сетевым атакам и методам борьбы с ними. Zend также предлагает ряд более общих<br />
курсов. Они начинаются с '''PHP I: Foundations''', тренинга, который подходит для начинающих. Он рассматривает языки программирования, основы синтаксиса,<br />
переменные, управляющие конструкции и процедурное программирование, а затем переходит к отладке, HTML,<br />
онлайн-сессиям и безопасности. Данный курс не требует предварительной подготовки, и если вы уже используете Linux, у вас не должно<br />
возникнуть больших проблем при работе с этим материалом.<br />
<br />
Следующий уровень – '''PHP II: Higher Structures'''. Он разработан для<br />
углубленного изучения тех концепций, с которыми слушатели ознакомились в курсе для начинающих, и предполагает наличие у студентов не менее шести месяцев опыта программирования на ''PHP''. Здесь впервые упоминается объектно-ориентированное программирование,<br />
и курс затрагивает основные принципы объектного проектирования, абстрактные классы, модификаторы доступа и интерфейсы, а также<br />
регулярные выражения в стиле ''Perl'', продвинутую отладку, использование web с cookies и интеграцию с базами данных. По овладении<br />
этими умениями, остается только '''PHP 5 Certification Training''', и это – последний шаг на пути к сертификации. Данный заключительный курс<br />
предшествует и готовит к экзамену ZCE. Тут вы должны быть опытным программистом ''PHP'' и человеком, овладевшим содержанием первых<br />
двух курсов, не боящимся предлагать собственные решения. Если вы пойдете по этому пути, вам придется потратить на обучение 3000 евро<br />
и быть готовым к финальному экзамену.<br />
<br />
====Linuxgym====<br />
<br />
Если вы ищете более общую платформу для<br />
обучения Linux, возможно, стоит познакомиться с Linuxgym. Это – обучающая система<br />
онлайн, она отслеживает изменения, которые вы вносите в виртуальную машину с Linux, и<br />
на данный момент проверяется в двух университетах Австралии. Мы спросили Брюса Гарви<br />
[Bruce Garvey] из Linuxgym, что он думает о ситуации с обучением Linux. «В основном<br />
обучение Linux охватывает вопросы, связанные с сервером, поскольку до сих пор Linux<br />
особо не рвался на настольные ПК», сказал он<br />
нам. «Подвижки налицо – например, разработан Ubuntu Desktop Training, обучающий работе на настольных ПК и дающий сертификацию,<br />
но для нас всегда была и есть третья категория пользователей, которым тоже нужно<br />
обучение и сертификация: это программисты. Linuxgym – механизм доставки, – продолжает Гарви, – а его содержание – в<br />
тетрадях XML. Мы повысили процент успешной сдачи экзаменов с помощью нашего<br />
первого публичного сборника упражнений –<br />
''Bash'' 101 – на 40% и значительно снизили шансы списывания на тестировании в<br />
Технологическом университете Сиднея (University of Technology, Sydney).<br />
Тестирование по ''Perl'' и HTML дало похожие результаты».<br />
<br />
===LPI===<br />
<br />
: Сертификация LPI является стандартом в обучении «Linux вообще» уже долгие годы.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''LPI''' http://www.lpi.org<br />
* '''LinuxIT''' http://www.linuxit.com<br />
* '''Ubuntu desktop''' https://wiki.ubuntu.com/Training | Ширина=200px}}<br />
<br />
Наиболее широко распространенное и стандартное решение в сфере профессионального обучения из всех рассмотренных<br />
нами в этой статье – сертификация Linux Professional Institute (Профессионального Института Linux). Практически любой, имеющий<br />
должный уровень знаний и квалификации, может стать обучающим партнером LPI. Учебная документация и сами экзамены переведены на<br />
многие языки. Фактически, где бы вы ни жили, вы всегда сможете найти по соседству место проведения курсов и сдачи экзаменов LPI.<br />
<br />
Получаемая квалификация тоже довольно широкая. В отличие от большинства обучающих курсов по Linux, сертификация LPI в основном независима от производителя, так что вы не будете привязаны к конкретному дистрибутиву. Тут есть и преимущества, и недостатки. С одной стороны, ваша квалификация будет отличаться гибкостью, и вы легко адаптируете свои знания к самым общим программам и средам. С другой стороны, это способствует развитию синдрома «мастера на<br />
все руки» (мы его сами придумали) – ваших знаний какой-то специфичной программы может оказаться недостаточно, чтобы конкурировать с экспертами именно по данной системе. LPI отдает себе отчет в том, что это может стать проблемой, и предлагает также тренинги по<br />
определенным дистрибутивам. Квалификация та же самая, но содержание учебного курса нацелено на конкретное решение. Например,<br />
Canonical предлагает собственные курсы LPI по изучению Ubuntu, замещая все аспекты обучения соответствующими эквивалентами для<br />
Ubuntu. А если Ubuntu вас особенно интересует, есть также специально разработанная сообществом учебная программа для настольных<br />
систем, выпущенная под лицензией Creative Commons.<br />
<br />
Еще один аспект квалификации LPI, немало способствующий ее привлекательности в глазах работодателя – привязка к современности. Через пять лет вам придется либо расширять свою квалификацию LPI, либо подтверждать ее. Для обычных пользователей это непросто, зато заставляет<br />
постоянно совершенствоваться в Linux. Большинство из нас согласно с тем, что за последние пять лет Linux сильно изменился и явно не собирается<br />
стоять на месте.<br />
<br />
====Сертификаты LPI====<br />
<br />
=====LPIC 1=====<br />
<br />
Это – стартовая точка. Для '''LPIC1''' нет никаких предварительных требований, и он идеально подходит для тех, чей стаж работы в Linux невелик. В него включены два экзамена под номерами '''101''' и '''102''', и вам придется сдать оба. Ответы на вопросы экзаменов придется выбрать из<br />
предложенных вариантов, и если вы пользуетесь Linux уже год или два, у вас вряд ли возникнут проблемы с первым уровнем. Он охватывает<br />
в основном базовые знания, которые есть у многих из нас и которые мы считаем чем-то самим собой разумеющимся. Его цель – дать вам<br />
основные знания по работе с командной строкой и решению простейших задач сопровождения. Сюда, например, входит понятие о BIOS, и<br />
вы должны уметь включать и отключать опции материнской платы, а также настраивать IRQ, DMA и другие параметры.<br />
<br />
Затем курс переходит на общее расположение файлов, базовое управление файлами и процессами и установку и конфигурацию ''X11''.<br />
Мы назвали бы это классической основой администрирования систем Linux и Unix. Возможно, все, чему вы научитесь, и не найдет немедленного применения, но послужит отличной основой для последующего опыта работы в Linux.<br />
<br />
=====LPIC 2=====<br />
<br />
Сдав '''LPIC 1''', можете переходить ко второму уровню. Цель этого курса – формирование основных навыков администрирования системы и работы в сети. Он включает настройку сети и поиск неисправностей, работу с почтовыми, web- и DNS-серверами, аутентификацию LDAP и PAM и установку LDAP. Вы также сможете побаловаться с ''Samba, SSH'' и ''Kerberos'', а потом перейдете к компиляции собственного ядра. По названиям тем<br />
видно, что курс нейтральный. Как и в '''LPIC1''', каждая категория оценивается отдельно, и это значит, что они имеют разное влияние на вашу общую<br />
оценку. Например, задачи по использованию ''Perl, Bash, Awk, sed'' и ''Cron''<br />
оцениваются на '''3''', а обзор системных журналов – на '''1'''. Отсюда понятно,<br />
на что следует обратить больше внимания, и полученные вами знания и<br />
умения пригодится в широком диапазоне дистрибутивов Linux.<br />
<br />
=====LPIC 3=====<br />
<br />
Высший уровень квалификации LPI разработан для более крупных программ, планирования ИТ-ресурсов и сетевого администрирования.<br />
В отличие от других схем сертификации LPI, квалификация третьего уровня присваивается после сдачи одного экзамена, но начальные<br />
требования у него весьма жесткие. Коротко говоря, этот уровень обучения полностью посвящен вопросам, связанным с крупными сетями,<br />
а значит, вам придется многое узнать о службах каталогов LDAP, и о безопасности. Если вас не пугают термины «X.500» и «схема LDAP”, то<br />
вы, очевидно, попали в нужное место. Программа включает работу с клиентами Windows, безопасность и производительность и интеграцию<br />
сети с Active Directory.<br />
<br />
Как и на курсах Red Hat, обучение можно продолжать, занявшись такими предметами, как электронная почта, интранет, отказоустойчивость и виртуализация; это добавит ценности стандартному сертификату.<br />
<br />
====LPI: Независимое мнение====<br />
<br />
Мы побеседовали с А.К.Моу [A K Moe], старшим системным инженером iwantoneofthose.com и недавним выпускником курсов LPI.<br />
<br />
'''В''' ''Что в первую очередь привело вас к сертификации LPI?''<br />
<br />
'''О''' В моей компании мне предложили найти курсы повышения квалификации. Первое, о чем я подумал, были курсы Red Hat, но тот тренинг, который я нашел, оказался слишком дорогим. А потом я узнал об экзаменах LPI.<br />
<br />
'''В''' ''У вас уже был опыт работы с Linux?''<br />
<br />
'''О''' В университете я немного познакомился с Unix, а будучи системным инженером в iwantoneofthose.com, работаю с Linux каж дый день.<br />
<br />
'''В''' ''Сложным ли оказался курс?''<br />
<br />
'''О''' Некоторые части курса довольно трудны для начинающих в Linux. Чтобы сдавать '''LPI101''', надо наработать примерно 3–6 месяцев опыта.<br />
<br />
'''В''' ''Насколько помогла вам сертификация? Это была практическая помощь, или просто другие стали относиться к вам более серьезно?''<br />
<br />
'''О''' Она не только позволила мне заполнить пробелы, оставшиеся после университета, но также и увеличила мою уверенность в работе.<br />
<br />
===Вопросы к экзамену LPI===<br />
<br />
: Проверьте свои знания<br />
<br />
{{Врезка | Содержание=Вопросы и ответы взяты с: LPI Linux Certification in a Nutshell: A Desktop Quick Reference, Second Edition ISBN: 978-0-596-00528-3<br />
http://oreilly.com/catalog/9780596005283/index.html Copyright (c) 2006 O’Reilly Media, Inc. Все права сохранены. Используется с разрешения.<br />
<br />
[[Изображение: LXF110_41_1.jpg | 200px]] | Ширина=200px}}<br />
<br />
<br />
'''Первый уровень'''<br />
<br />
''1 Какие две команды отображают состояние процессов в системе Linux?''<br />
<br />
a ls и df.<br />
b ps и top.<br />
c ps и df.<br />
d df и top.<br />
e du и df.<br />
<br />
''2 Что представляет собой устройство file /dev/hdb6?''<br />
<br />
a Расширенный раздел на диске SCSI.<br />
b Логический раздел на диске SCSI.<br />
c Расширенный раздел на диске IDE.<br />
d Первичный раздел на диске IDE.<br />
e Логический раздел на диске IDE.<br />
<br />
''3 В ответ на команду df система выдала отчет: Use% of 98% for the filesystem mounted on /home. Что из перечисленного ниже наилучшим образом описывает смысл этого сообщения?''<br />
<br />
a Файлы в /home занимают 98% физического диска.<br />
b Операции чтения-записи файлов в /home потребляют 98% I/O-мощностей системы.<br />
c Файлы в /home занимают 98% файловой системы /home.<br />
d Индексные дескрипторы в /home почти на исходе.<br />
e Индексные дескрипторы в /home на 98% свободны.<br />
<br />
''4 У Кэролайн имеется текстовый файл под названием guest_list, содержащий 12 строк. Она выполняет следующую команду. Каков будет результат?''<br />
<br />
# split -4 guest_list gl<br />
<br />
a Первые четыре колонки текста будут записаны в новые файлы<br />
glaa, glab, glac и glad.<br />
<br />
b Первые четыре колонки текста будут записаны в новые файлы<br />
aagl, abgl, acgl и adgl.<br />
<br />
c Строки guest_list будут поровну разделены между новыми файлами glaa, glab, glac и glad.<br />
<br />
d Строки guest_list будут поровну разделены между новыми файлами aagl, abgl и acgl.<br />
<br />
''5 Алекс работает в директории, где всего один файл, Afile1. Что отобразится после того, как в bash будут введены следующие команды?''<br />
<br />
# MYVAR=ls<br />
# echo $MYVAR “$MYVAR” ‘$MYVAR’ `$MYVAR`<br />
<br />
a Afile1 Afile1 Afile1 Afile1.<br />
b ls Afile1 Afile1 Afile1.<br />
c ls ls Afile1 Afile1.<br />
d ls ls $MYVAR Afile1.<br />
e ls ls ls $MYVAR.<br />
<br />
'''Уровень 2'''<br />
<br />
''6 Вы только что завершили настройку собственного ядра. Что из перечисленного ниже является пра вильнымследующим шагом для генерации его образа?''<br />
<br />
a make dep.<br />
b make bzImage.<br />
c make kernel.<br />
d make image.<br />
<br />
''7 Как называется файл в Grub, который нужно отредактировать, что бы изменить ядро, загружаемое по умолчанию?''<br />
<br />
a boot.conf.<br />
b grub.conf.<br />
c img.conf.<br />
d vmlinux.conf.<br />
<br />
''8 Вам позвонил разработчик и попросил вас помочь решить проблему с драйвером устройства для платы PCI, поддержкой которой решила заниматься ваша компания. Ему нужно знать IRQ, которое использует устройство, а также статистику по латентности. Какую из нижеприведенных команд надо использовать, чтобы предоставить ему требующуюся информацию?''<br />
<br />
a lspci -p.<br />
b setserial.<br />
c lspci -vv.<br />
d lsdev -C /dev/.<br />
<br />
''9 У вас возникли проблемы с подключением жесткого диска USB к системе. Вы хотите определить возможности устройства по передаче данных и потенциальную скорость соединения USB-контроллера. Впишите приложение, которое поможет вам получить эту информацию.''<br />
<br />
''10 Вам нужно запустить скрипт под названием backup через три часа, но в это время вы не планируете находиться в системе или перед терминалом, с которого можно получить доступ к вашей системе. Какие из приведенных команд позволят вам запустить этот скрипт?''<br />
<br />
a at now + 3 hours <backup.<br />
b сrontab -e < 0 3 *** backup.<br />
c at now + 3 >backup.<br />
d echo “0 3 *** backup”>>/etc/сrontab.<br />
<br />
===Сертификация Red Hat===<br />
<br />
: Большой папочка тренингов Linux.<br />
<br />
{{Врезка | Заголовок=Ресурсы | Содержание= <br />
* '''Red Hat''' http://www.europe.redhat.com/training | Ширина=200px}}<br />
<br />
Если для олицетворения тренинга Linux придется выбирать одну компанию, то это будет Red Hat. Для многих людей за пределами активного Linux-сообщества Red Hat представляет собой корпоративную ипостась Linux. Но несмотря на то, что дистрибутив разделен на корпоративную и свободную модели, Red Hat по-прежнему остается жизненно важной частью сообщества, а его курсы Certified Engineer [Сертифицированный инженер] являются индустриальным стандартом. Термин «Red Hat Certified Engineer» (Сертифицированный инженер Red Hat – RHCE) впервые появился в 1997 году, и тренинг, который стоял за ним, стал эталоном, используемым Red Hat и его партнерами для оценки знаний. Впервые курсы сертификации Red Hat проводились в декабре 1998 года – почти 10 лет назад. С тех пор RHCE стала самой популярной квалификацией, а количество схем сертификации, предлагаемых Red Hat, увеличилось до пяти.<br />
<br />
Сами по себе схемы сертификации – это просто экзамены: сдавайте и получайте квалификацию. В отличие от других обучающих схем, особенно предлагаемых LPI, экзамены имеют практическую направленность; проверка знаний проводится на настоящих машинах. Предлагается, например, оптимизировать сервер или отредактировать файлы настройки ''Apache''. Получившаяся конфигурация позволяет судить, сдан тест или нет.<br />
<br />
К каждой сертификации прилагается список обучающих курсов Red Hat, которые надо пройти, чтобы заполнить мозг необходимой для сдачи экзамена информацией. Все курсы разные, но обычно они включают несколько дней интенсивного аудиторного тренинга перед экзаменом на получение сертификата. Если вы чувствуете, что уже приобрели необходимые знания, не обязательно проходить все курсы: можно перейти сразу к экзамену. Этот подход довольно распространен, например, среди тех, у кого есть опыт работы в Unix. Red Hat рекомендует пройти трехдневный курс и затем сдать экзамен на RHCE.<br />
<br />
Вне зависимости от выбранной схемы, вам придется здраво оценить свои шансы. Процент успешной сдачи как RHCT, так и RHCE составляет 50%, но это только для повторной попытки. При первой сдаче, например, RHCE риск провала составит приблизительно 60–70%. Учитывая, что экзамен стоит денег, затраты получаются немалые, и Red Hat восполняет их, предлагая «Пакеты Успеха» (Success Packs) – они позволяют пересдать экзамены RHCT или RHCE без дополнительной<br />
оплаты.<br />
<br />
====Схемы Red Hat====<br />
<br />
=====Red Hat Certified Technician (RHCT)=====<br />
<br />
Red Hat осознала, что для новичков в Linux сдача экзамена '''RHCE''' – большое испытание. И в ответ разработала программу обучения более низкого уровня, для тех, кто только знакомится с этой платформой. К данной группе относятся домашние пользователи, желающие запустить собственный сервер, а также компании, которые хотят попробовать поработать в Linux. Впервые курс '''RHCT''' был предложен более пяти лет назад, и его рекомендуют в качестве первого шага тем, у кого нет опыта работы в Unix/Linux, и тем, кто перешел с других ОС. Здесь не требуется знаний по Linux, и от вас ожидают только рудиментарных навыков работы с мышью и клавиатурой. Среди получаемых в этом курсе знаний и умений – смена пользователя и редактирование файлов, использование документации, расположение всех основных файлов и устройств, права доступа и оболочка ''Bash''. Вы также научитесь управлять процессами, и вам даже дадут краткий обзор ''SELinux'' и сетевого брандмауэра. Согласно Red Hat, '''RHCT''' – самый быстрый способ заработать доверие и получить знания в мире Linux, а по популярности<br />
'''RHCT''' на данный момент превзошел '''RHCE'''. Это – оптимальный стартовый пункт, если вы жаждете сделать карьеру в области администрирования систем Red Hat.<br />
<br />
=====Red Hat Certified Engineer (RHCE)=====<br />
<br />
Это – классическая квалификация: именно с нее началась обучающая<br />
инициатива Red Hat. Сейчас во всем мире насчитывается свыше 325 700<br />
сертифицированных инженеров, и '''RHCE''' – одна из самых признанных<br />
квалификаций, которую вы можете добавить в свое резюме. Это – всеобъемлющее руководство по администрированию Red Hat и стандартное требование для многих системных администраторов, инженеров и консультантов Linux среднего звена. Сертификация разбита на разделы, каждый из которых посвящен отдельной области. Сюда включены производительность и безопасность, системные сервисы, сетевые ресурсы, web, распределенный доступ к электронной почте и файлам.<br />
Как и следует ожидать, каждый курс проникает в материал гораздо глубже, чем '''RHCT''', и сертификация включает некоторые из курсов<br />
'''RHCT''' в качестве основы. Если у вас нет времени, Red Hat также предлагает ускоренный курс. Обучение длится пять дней, в конце каждый<br />
слушатель сдает сертификационный экзамен '''RHCE'''. Это отличная идея, если у вас уже есть солидный опыт работы в Linux.<br />
<br />
=====Red Hat Certificates of Expertise=====<br />
<br />
Данные сертификаты являются развитием статуса '''RHCE''' и позволяют<br />
продолжить обучение и квалификацию, подгоняя свои знания под конкретные задачи. Среди охватываемых ими предметов – службы каталогов и аутентификация, администрирование политик ''SELinux'', виртуализация и создание кластеров. Все эти курсы относятся к продвинутому<br />
уровню и могут быть полезны для получения более высокой степени<br />
квалификации от Red Hat. Например, сертификат ''SELinux'' – это один<br />
шаг в направлении степени Red Hat Certified Security Specialist, а более<br />
продвинутый экзамен по созданию кластеров и хранилищ (Clustering and Storage) – один из пяти сертификатов, необходимых для получения квалификации Red Hat Certified Architect – высшего уровня, предлагаемого Red Hat.<br />
<br />
=====Red Hat Certified Specialist (RHDS & RHSS)=====<br />
<br />
Уровень Специалист – четвертая программа в учебной иерархии Red Hat и возможность формализации инженерных знаний как в области<br />
безопасности ('''RHSS'''), так и для центра обработки данных ('''RHDS'''). Чтобы стать специалистом, вы должны обладать статусом '''RHCE''', и<br />
для получения каждого сертификата требуется сдать по три экзамена. Специалист по безопасности должен разбираться в таких вопросах уровня предприятия, как аутентификация и службы каталогов, а специалист центра обработки данных – понимать в виртуализации и создании кластеров.<br />
<br />
=====Red Hat Certified Architect (RHCA)=====<br />
<br />
Это – самая вершина, квалификация для птиц высокого полета в сфере Red Hat. '''RHCA''' появилась в 2005 году, и, как следует из ее названия, создана для тех, кто принимает решения в сфере ИТ, и для экспертов Red Hat. Типичные функции '''RHCA'''<br />
могут включать планирование, разработку и управление системами Linux и Open Source, знания и умения,<br />
необходимые тем, кто разрабатывает и реализует такие решения в сфере ИТ, как, например, центры обработки<br />
данных и пр. В итоге, получить ее непросто: придется пройти четыре курса продвинутого уровня и сдать все пять экзаменов<br />
Expertise Exams. Лучший совет дал нам Флориан Брэнд [Florian Brand], первый, кто получил квалификацию '''RHCA''', и заключался он<br />
в том, что спешить не надо. Усвоить необходимо уйму информации, и кавалерийским наскоком это не получается. '''LXF'''<br />
<br />
====Взгляд изнутри Red Hat: Йенс Циманн====<br />
<br />
'''В''' ''Расскажите, пожалуйста, о себе нашим читателям.''<br />
<br />
'''О''' Я – один из учредителей Red Hat EMEA (Европа, Средний Восток и Африка). До этого у меня была собственная Linux-компания (под названием Delix),<br />
и у нас был собственный дистрибутив Linux, под названием DLD.<br />
<br />
'''В''' ''Кто является типичным слушателем курсов Red Hat?''<br />
<br />
'''О''' Как правило, это системные администраторы, системные инженеры и консультанты по Linux и Unix, решившие заняться определенными проектами. Тут есть два аспекта: администраторский и консалтинговый, и это отражено в структуре наших экзаменов. Мы тестируем оба аспекта.<br />
<br />
'''В''' ''Как работают практические экзамены?''<br />
<br />
'''О''' Если сравнивать с обычными в ИТ-индустрии экзаменами, где надо выбирать правильный ответ среди предложенных, мы выбрали путь, подобный Cisco. Вам надо присутствовать в аудитории, перед вами стоит реальная машина. У нас есть разные сценарии, в которых мы автоматически запускаем сессии по поиску неисправностей, с прицелом на сисадминов, а во второй части больше внимания уделяем реализации, установке и настройке, для тех, кто работает на клиентской стороне.<br />
<br />
'''В''' ''Кто обычно платит за ваши курсы? Компании или частные лица?''<br />
<br />
'''О''' Отчасти это зависит от страны. Например, в Великобритании частные лица в большей степени заинтересованы в этих экзаменах – чтобы получать более высокую зарплату, чтобы найти лучшую, более интересную работу. В некоторых других странах, например, на континенте, больший интерес проявляют компании-работодатели. Если люди участвуют в проекте, их отправляют на курсы.<br />
<br />
'''В''' ''Каков средний уровень подготовки слушателей?''<br />
<br />
'''О''' За последнюю пару лет произошел сильный сдвиг. Сначала к нам приходило множество людей с опытом работы в Unix – для них у нас есть курс '''RH300''', который впоследствии ведет к экзамену '''RHCE''', и за пять дней обучения они могут более или менее подготовиться к нему. Мы учим их расхождениям – что в Linux отличается от Solaris, HP UX. Это не совсем классический учебный курс. Но сейчас все изменилось, и теперь все больше и больше людей приходит к нам, чтобы начать с нуля. По мере того, как Linux все больше «выходит в люди», множество компаний начинают видеть в этом практическую ценность.<br />
<br />
'''В''' ''Какие должности, по вашему мнению, смогут занять получившие более высокую квалификацию Red Hat?''<br />
<br />
'''О''' Нас отличает от наших конкурентов на рынке то, что мы подгоняем содержание наших курсов под нужды слушателей, работающих на разных должностях. Например, наш курс '''253''' – это сети и безопасность, но это вовсе не означает, что мы не обучаем работе в сети и безопасности в рамках других курсов. В основном мы выделяем три уровня должностей: '''RHCT, RHCE''' и '''RHCA''', и, опираясь на обратную связь с нашими клиентами, мы вносим в их содержание все необходимое дляаксимального повышения продуктивности повседневной работы этих людей. Скажем, уровень '''RHCT''' – это уровень человека, работающего с<br />
клиентами, рабочими станциями и, возможно, с сервером отдела. '''RHCE''' – типичный сисадмин, поддерживающий ряд серверов со всеми сервисами, и демонами, и управлением пользователями. '''RHCA''' – для тех, кто следит за работой корпоративной сети. Обычно им нужно обладать полной картиной состава приложений, и<br />
знать их требования в плане отказоустойчивости, создания кластеров, восстановления после сбоя и единого входа.<br />
<br />
====Пробные вопросы====<br />
<br />
: Основы Linux для Red Hat Enterprise.<br />
<br />
''1 Если файла newdir/file2 не существует, но существует директория newdir, каким будет результат следующей команды?''<br />
<br />
mv file1 newdir/file2<br />
a) file1 будет перемещен в newdir и переименован в file2.<br />
b) file1 будет скопирован в newdir и назван file2.<br />
c) Появится сообщение об ошибке, поскольку эта команда некорректна.<br />
<br />
''2 Для файла report.txt, какая из следующих команд будет, невзирая на регистр, извлекать каждую строку, содержащую слово «expense», строки перед и после каждого совпадения и выводить на печать соответствующие номера строк?''<br />
<br />
a) grep -i expense report.txt.<br />
b) grep -A1 -B1 -n -i expense report.txt.<br />
c) grep --context=1 -n -i expense report.txt.<br />
<br />
''3 Вы хотите автоматически входить в систему на компьютере 1 с компьютера 2. Чтобы выполнить эту задачу, вы размещаете ключ с компьютера 2 в файле в соответствующей скрытой директории на компьютере 1. В какой файл вы поместите данный ключ?''<br />
<br />
a) authorized_keys.<br />
b) known_hosts.<br />
c) id_dsa.pub.<br />
<br />
===Спасибо вам…===<br />
<br />
* Эмма Дин [Emma Dean] и Йенс Циманн [Jens Ziemann] из Red Hat.<br />
* Вернер Ван Штаден [Werner van Staden] из MeWe.org.uk.<br />
* Питер Доус [Peter Dawes] из LinuxIT.<br />
* Хосетт Гарсия [Josette Garcia] из O’Reilly.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF118:Review3LXF118:Review32010-04-13T06:02:52Z<p>WikiSysop: /* Debian 5 */</p>
<hr />
<div>==Debian 5==<br />
<br />
: '''Грэм Моррисон''' считал, считает и будет считать, что Debian лучше произносить c французским прононсом – ‘de bien’.<br />
<br />
[[Категория:Обзоры]]<br />
<br />
{{Сравнение<br />
|кратко=Linux-дистрибутив старой школы, приверженец высоких стандартов стабильности и свободы ПО.<br />
|также=Fedora, Slackware.<br />
|изображение=LXF118_13_1.jpg<br />
|подпись=На рисунке этого не видно, но после сборки устройства нижняя часть передней панели откидывается и открывает удобный доступ к передним портам.<br />
|разработчик=Debian Project<br />
|сайт=www.debian.org<br />
|цена=бесплатно по GPL<br />
|параметр1=Функциональность <br />
|оценка1=7<br />
|параметр2=Производительность<br />
|оценка2=8<br />
|параметр3=Простота использования<br />
|оценка3=7<br />
|параметр4=Документация<br />
|оценка4=9<br />
|итог=Для фанатов Debian — повод порадоваться. Для не фанатов — задуматься…<br />
|рейтинг=8<br />
}} <br />
<br />
Debian поспешает не торопясь. Версия 5 варилась около 22 месяцев и вышла в день Святого Валентина – интересно, что получилось: романтический ужин для двоих или подгоревшая похлебка холостяка? Однако согласитесь, что не так-то просто управиться с 23000 пакетов, 7700 из которых появились впервые. Всё это умещается на 5 DVD, 31 CD<br />
или одном диске Blue-ray, причём дистрибутив остался стабильным и безопасным. Благо, интернет-подключение у нас<br />
мощное: мы воспользовались сетевым вариантом установки, когда нужен всего один CD, а остальное скачивается. А для<br />
тех, кто пока не дозрел до инсталляции, команда Debian Live подготовила первый Debian на Live CD.<br />
<br />
Установка наконец отшлифована: благодаря графическому инсталлятору, появившемуся в предыдущей версии, и многочисленным патчам совместимости, сопровождающим ядро 2.6.26, это простейший в развертывании Debian из всех,<br />
с которыми нам приходилось работать. Сетевые домены определяются точно, разделы создаются как по волшебству: для<br />
желающих есть даже вариант установки на зашифрованный раздел LVM. А если всё же что-то пойдёт не так, то всегда<br />
под рукой непревзойдённая установочная документация Debian.<br />
<br />
===Игра версий===<br />
<br />
Попав на рабочий стол, вы обнаружите гибрид Gnome 2.20 и Gnome 2.22 и тут же ощутите результаты июльской (2008) функциональной заморозки Debian. Есть проверка правописания и подсветка синтаксиса в ''Gedit'', есть прекрасное фото-приложение ''Cheese'', но нет ''Ekiga 3'', нет ''Telepathy'' – вообще ни одной новинки из Gnome 2.24.<br />
Но Gnome ещё легко отделался, по сравнению с KDE. Lenny застрял на KDE 3.5, и хотя это вполне понятно (Debian ратует за стабильность), всё-таки жаль, что пользователям KDE придётся искать официально поддерживаемые пакеты KDE 4 на стороне. ''OpenOffice.org'' постигла та же участь.<br />
<br />
И здесь мы видим, как Lenny утаптывает для себя собственную рыночную нишу. Мир Linux-дистрибутивов ныне по<br />
лон передовыми приложениями, которые весьма стихийно тестируются и обновляются. Желая получить новейшие версии<br />
ПО, можно выбирать минимум из дюжины вариантов. Но если вы хотите стабильности любой ценой, при некоторых преимуществах новейших ядер и рабочих столов, то Debian окажется, пожалуй, лишь одним из немногих. И ни у кого нет столь же богатой родословной и столь же преданного сообщества.<br />
<br />
За несколько недель, прошедших со дня выхода версии 5.0 до написания статьи, у нас не было ни проблем со стабильностью, ни беспричинных зависаний. Разумеется, при таком богатстве репозиториев можно подогнать Debian «под стандарт», но это означает пойти вразрез с его главной идеей: Debian ценят за стабильность и скрупулёзность, и новая версия дистрибутива – образец верного баланса. '''LXF'''</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:WikiSysopУчастник:WikiSysop2010-03-20T11:24:26Z<p>WikiSysop: Удалена спам-ссылка</p>
<hr />
<div>В настоящий момент текст на данной странице отсутствует. Вы можете найти упоминание данного названия в других статьях или создать страницу с таким названием.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Crazy_RebelОбсуждение участника:Crazy Rebel2010-03-20T11:22:31Z<p>WikiSysop: Удалена спам-ссылка</p>
<hr />
<div>В настоящий момент текст на данной странице отсутствует. Вы можете найти упоминание данного названия в других статьях или создать страницу с таким названием.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF112LXF1122010-03-20T11:18:44Z<p>WikiSysop: Правки Che (обсуждение) откачены к версии Yaleks</p>
<hr />
<div>==Linux Format 112 (12), Декабрь 2008==<br />
<center>[[Изображение:LXF112.jpg|Linux Format 112 (12), Декабрь 2008]]</center><br />
<br />
===Обзоры===<br />
* [[LXF112:Review1|LBook eReader V3]]<br />
*: Возьмите в дорогу томик или целую библиотеку – с электронной книгой под управлением Linux это совсем несложно.<br />
* [[LXF112:Review2|Ubuntu Desktop Training]]<br />
*: Нужен ли специальный учебный курс для самого дружественного пользователю дистрибутива в мире? Canonical полагает, что да.<br />
* [[LXF112:Review3|Excito Bubba 2]]<br />
*: Тенденции мировой моды свидетельствуют, что черный – это новый бежевый. В этом смысле, новое сетевое хранилище от Excito определенно la mode.<br />
* [[LXF112:Review4|Intel Classmate]]<br />
*: Предложение от Intel в сегменте бюджетных ноутбуков вряд ли соберет много друзей в лагере OLPC, но он маленький, прочный и работает под Linux – так почему бы не попробовать?<br />
* [[LXF112:Review5|Focusrite Saffire LE]]<br />
*: Ура, внешняя звуковая карта! Даже больше – она поддерживается Linux и производитель активно сотрудничает с разработчиками открытого драйвера.<br />
* [[LXF112:Review6|''Kerio MailServer'']]<br />
*: Бесплатных почтовых серверов полным-полно в каждом дистрибутиве Linux – так что такого может предложить этот продукт администратору, заплатившему деньги?<br />
* [[LXF112:Review7|''VirtualBox 2.0'']]<br />
*: Свободная и бесплатная виртуальная машина становится лучше с каждым релизом.<br />
<br />
=== Постоянные рубрики ===<br />
* [[LXF112:Сравнение|'''Сравнение''': Web-браузеры]]<br />
*: Выбор браузера не менее ответственен, чем выбор ОС. '''Энди Ченнел''' выясняет, существует ли ПО, сопоставимое с нашими амбициями.<br />
* [[LXF112:Спецрепортаж|'''Спецрепортаж''' Стать творцом]]<br />
*: Направьте потоки своего креатива в русло свободного ПО!<br />
** Пишите музыку<br />
** Создавайте web-сайты<br />
** Редактируйте видео<br />
* [[LXF112:Настроим KDE 4|'''Спецрепортаж''' Настроим KDE 4]]<br />
*:Новый рабочий стол ведет себя не так, как вам хочется? Исправьте это прямо сейчас!<br />
* [[LXF112:Смена дистрибутива |'''Спецрепортаж''' Умный переезд]]<br />
*: Устанавливая себе новый дистрибутив, не потеряйте ценные данные: держите их в безопасности.<br />
* [[LXF112:Какой Linux изучать?|Какой Linux изучать?]]<br />
*: '''Алексей Федорчук''' убедительно доказывает, что будущих гуру надо воспитывать в духе дзен.<br />
* [[LXF112:Что за штука... ГИС?|'''Что за штука...''' ГИС?]]<br />
*: ГИС: в современном мире, переполненном Web 2.0 и GPS, информацию не только можно, но и нужно привязывать к географическим точкам.0<br />
* [[LXF112:Интервью|'''LXF Интервью''' Хокон Ли]]<br />
*: Web – наше все!<br />
* [[LXF112:Интервью2|'''LXF Интервью''' Макс Спевак]]<br />
*: Бывший руководитель проекта Fedora '''Макс Спевак''' даже не прикасался к Fedora, пока не начал там работать – а ныне он защищает пламя свободы…<br />
* [[LXF112:История успеха |'''История успеха''' От ''1С'' до СПО не так уж и далеко]]<br />
*: Ещё два-три года назад ''1С'' считалась основным препятствием для использования Linux в бизнесе. Сейчас уже понятно, что одно другому не мешает, а скоро и помогать начнет: '''Игорь Вершинин''' – живой тому пример.<br />
* '''По рецептам д-ра Брауна'''<br />
*: Добротное администрирование систем из причудливых заворотов кишок серверной.<br />
** [[LXF112:DrBrown1|Игры для больших]]<br />
**: А не слабо вам переформатировать жесткий диск своего сервера через iPhone? Вот как это сделать...<br />
** [[LXF112:DrBrown2|Радости RWX]]<br />
**: Доктор рассматривает права доступа к файлу и отвечает на вопросы, которые никто бы и не задал.<br />
** [[LXF112:DrBrown3|Наследить для аудита]]<br />
**: ''Sudo'' и ''auditctl'' Вооружившись Fedora 9 и насушив сухарей, рассмотрим пару способов записать действия системного администратора.<br />
<br />
=== Учебники ===<br />
* [[LXF112:Совет месяца|'''Совет месяца''' Запасной пользователь]]<br />
<br />
* [[LXF112:Начинающим|'''Начинающим'''. Глянцевый Gnome и открытый космос]]<br />
*: Коричневый Ubuntu наводит скуку? '''Энди Ченнел''' даст советы по облагораживанию рабочего стола, а заодно рассмотрит ''Stellarium'' – восхитительный свободный планетарий.<br />
<br />
* [[LXF112:Игры|'''Игры'''. Программируем гонки]]<br />
*: По просьбам трудящихся, серия по программированию игр с ''PyGame'' продолжается. Подключайтесь к '''Майку Сондерсу''' в кодировании ралли старой школы.<br />
<br />
* [[LXF112:LVM|'''Hardcore Linux''' Логические тома]]<br />
*: Традиционные схемы разбиения ужасно ограничены – '''Роб Добози''' проведет мастер-класс по ''LVM'', гораздо более гибкой и продвинутой системе.<br />
<br />
* [[LXF112:GIMP|'''''GIMP''''' Восстановим фото]]<br />
*: Размытость, шум и оптические искажения: вот три главных причины, по которым сделанные вами снимки не выглядят безупречно. К счастью, '''Александр Толстой''' знает, как это исправить.<br />
<br />
* [[LXF112:KDE4|Погружаясь в ''Solid'']]<br />
*: '''Андрей Боровский''' рассмотрит кросс-платформенную систему взаимодействия с оборудованием, предлагаемую KDE 4, и напишет для нее парочку несложных приложений.<br />
<br />
* [[LXF112:R|'''''R''''' Data-mining]]<br />
*: Термин «data mining» нынче в моде, но что за ним скрывается? '''Алексей Шипунов''' и '''Евгений Балдин''' рассматривают эту технологию через призму ''R''.<br />
<br />
* [[LXF112:Grid|'''''gLite''''' Гриды, часть 2]]<br />
*: Большие задачи подразумевают большие объемы данных. '''Андрей Е. Шевель''' покажет, как они перемещаются в масштабах грида, и рассмотрит информационные сервисы.<br />
<br />
* [[LXF112:Getopt|'''Getopt''' Анализ командной строки]]<br />
*: Обработка аргументов вашей программы по всем правилам – задача не из простых, но '''Артем Коротченко''' знает легкий путь к успеху: '''getopt()'''.<br />
<br />
* [[LXF112:Геотеги|'''Геотеги''' Пришпилим снимки]]<br />
*: Картинка стоит тысячи слов, а с учебником '''Марко Фиоретти''' – двух тысяч. Научитесь добавлять информацию о местоположении к вашим снимкам, используя ''Minimap'' и ''Image-ExifTool''.<br />
<br />
* [[LXF112:Мультимедиа|'''Мультимедиа''' Калейдоскоп обоев]]<br />
*: В этом месяце '''Марко Фиоретти''' обрабатывает RAW-изображения, устанавливает случайные обои на рабочем столе и развлекается в Facebook.<br />
<br />
===[[LXF112:Ответы|Ответы]]===<br />
: Решение проблем Linux: экранные читалки, беспроводные сети, USB-брелки и запись ТВ прямо на DVD.<br />
<br />
=== Школа LXF ===<br />
* [[LXF112:Atutor|''ATutor 1.6.2'']]<br />
*: Открытому ПО есть что предложить в области образовательных систем: '''Галина Пожарина''' рассматривает, что представляет собой ''ATutor''.<br />
* [[LXF112:Ponosov|Как я провел лето]]<br />
*: '''Александр Поносов''' давно не появлялся на страницах '''LXF''', поэтому мы попросили его рассказать, где он, собственно, пропадал все это время.<br />
* [[LXF112:School3|НКО внедряет Linux]]<br />
*: Linux не появится в школах, пока его туда кто-нибудь не поставит. Этим важным и нужным делом занимается не так уж много людей, но '''Алексей Дубинин''' – в их числе.<br />
* [[LXF112:School4|GNU/Linux рвётся в поля]]<br />
*: В рамках индустриального, и тем более постиндустриального общества, отсутствие автоматизации в сельском хозяйстве – это в лучшем случае зависимость. Иными словами, для Linux здесь есть работа: ее и выполняет '''Василий Знайдюк'''.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-03-06T15:20:43Z<p>WikiSysop: /* 2009 год */</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF118|LXF118 Май 2009]]<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2010-02-18T09:12:22Z<p>WikiSysop: Добавлены ссылки на номера за январь-апрель 2009 года</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2009 год ===<br />
* [[LXF117|LXF117 Апрель 2009]]<br />
* [[LXF116|LXF116 Март 2009]]<br />
* [[LXF115|LXF115 Февраль 2009]]<br />
* [[LXF113-114|LXF113-114 Январь 2009]]<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100-101 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF112:LVMLXF112:LVM2009-11-05T16:01:20Z<p>WikiSysop: </p>
<hr />
<div>== LVM: Виртуальные разделы ==<br />
: ''Сражаетесь с созданием разделов при установке? Хотели бы файловую систему с гибко изменяемым размером или более чем на один диск? Спросите '''Роба Добози'''.''<br />
<br />
Представьте, что у вас есть волшебный нож, которым можно<br />
нарезать хлеб на ломтики и намазать их маслом. Вроде ничего<br />
магического, а? Теперь представьте, что этот нож позволяет<br />
снова слепить ломтики воедино или сделать их тоньше, не затрагивая<br />
масло на них. Примерно это и умеет делать технология LVM (Logical<br />
Volume Manager, Менеджер логических томов). Буханка хлеба – это<br />
ваш диск, ломтики – разделы на нем, масло – файловые системы с их<br />
содержимым, а LVM – тот самый волшебный нож.<br />
<br />
LVM добавляет логический слой между физическим диском (им<br />
может быть реальный винчестер, RAID-массив или что-нибудь другое)<br />
и файловой системой. Этот логический слой (или том) затем может<br />
динамически изменять свой размер (если это поддерживается файловой системой), прозрачно перемещать файловую систему в другое<br />
физическое место, создавать снимки файловой системы, доступные<br />
для чтения-записи, или размазывать ваши данные между несколькими<br />
физическими накопителями.<br />
<br />
Я работал в виртуальной машине, но вы можете взять реальную<br />
систему с несколькими неиспользуемыми разделами (не менее 100<br />
МБ). Эквивалент дискового раздела LVM зовется логическим томом<br />
(volume), и файловая система обычно создается на нем. Логические<br />
тома объединяются в логические группы (volume group). Для создания<br />
группы тома нужен физический том (обычно созданный на дисковом<br />
разделе). Итак, это была теория, а теперь давайте взглянем, как создавать и использовать тома.<br />
[[Изображение:LXF 112 62 1.png|center]]<br />
<br />
=== Часть 1 Базовые операции ===<br />
Сперва надо идентифицировать и настроить существующие разделы.<br />
Важно, чтобы тип раздела был установлен в 8E (LVM). Будьте осторожны при экспериментах с разделами и томами, не то можно уничтожить<br />
ваши данные (все команды даются от имени суперпользователя-root).<br />
<source lang="bash">#fdisk /dev/sdb<br />
[… куча ненужных нам строк ...]<br />
Command (m for help): n<br />
Command action<br />
e extended<br />
p primary partition (1-4)<br />
p<br />
Partition number (1-4): 1<br />
First cylinder (1-65270, default 1):<br />
Using default value 1<br />
Last cylinder or +size or +sizeM or +sizeK (1-65270, default 65270):<br />
Using default value 65270<br />
Command (m for help): t<br />
Selected partition 1<br />
Hex code (type L to list codes): 8e<br />
Changed system type of partition 1 to 8e (Linux LVM)<br />
Command (m for help): w<br />
The partition table has been altered!<br />
Calling ioctl() to re-read partition table.<br />
Syncing disks.</source><br />
Давайте создадим физический том LVM:<br />
<source lang="bash">#pvcreate /dev/sdb1<br />
Physical volume “/dev/sdb1” successfully created</source><br />
Теперь можно создать группу томов и назначить ей физический том.<br />
Вы можете дать группе томов любое содержательное имя, но хорошим<br />
решением будет использовать окончание ‘vg’. Это поможет легко идентифицировать файловые системы, находящиеся в ведении LVM.<br />
<source lang="bash">#vgcreate testvg /dev/sdb1<br />
Volume group “testvg” successfully created</source><br />
Чтобы иметь возможность создавать файловые системы, сперва<br />
нужно создать логический том. Снова, вы можете использовать любое<br />
имя, но я рекомендую добавить ‘lv’ в его конец.<br />
<source lang="bash">#lvcreate -L 20M -n testlv testvg<br />
Logical volume “testlv” created</source><br />
Теперь у вас есть логический том с именем testlv, занимающий<br />
20 МБ (параметр -L). Он доступен через /dev/testvg/testlv (поняли,<br />
зачем нужно было ‘vg’ в конце имени группы томов?). Наконец, создадим файловую систему – допускается любой ее тип, но, пожалуйста,<br />
помните, что не все файловые системы поддерживают расширение<br />
или уменьшение, поэтому мы выберем ext3.<br />
<source lang="bash">#mkfs.ext3 /dev/testvg/testlv<br />
[... куча удаленного ненужного текста …]</source><br />
Чтобы пользоваться файловой системой, смонтируем ее где-нибудь: например, в точке монтирования /mnt/test.<br />
<source lang="bash">#mkdir /mnt/test<br />
#mount /dev/testvg/testlv /mnt/test</source><br />
Так файловая система смонтирована временно. После перезагрузки она исчезнет, и вам придется монтировать ее снова. Если вы хотите<br />
всегда иметь ее под рукой всегда, добавьте соответствующую строку<br />
в /etc/fstab.<br />
<br />
==== Ищем информацию ====<br />
Перед тем как тестировать, что мы понаделали, припомним и опробуем пару команд, которые могут предоставить информацию об всех<br />
компонентах LVM. Сперва мы создавали разделы и физические тома;<br />
о них расскажет pvdisplay. Как и все команды LVM, вызванная без<br />
параметров, она выведет сведения обо всех физических томах системы. Второй шла группа томов – vgdisplay позволит увидеть атрибуты<br />
указанных групп томов (или всех групп, при запуске без параметров).<br />
Обычно самой интересной частью информации, выдаваемой vgdisplay,<br />
является размер группы томов, PE size (размер физического экстента<br />
[диапазоны (обычно несколько мегабайт) физического диска, подобные кластерам, – прим. пер.]), полное, занятое и свободное число экстентов или МБ (Total PE, Alloc PE и Free PE). Последним объектом LVM<br />
является логический том. Команда, выводящая данные о нем, называется lvdisplay. Также интереснейшей информацией может быть размер<br />
логического тома (LV size): его значение отражает размер файловой<br />
системы. Можете попробовать эти команды друг за другом:<br />
<source lang="bash">#pvdisplay /dev/sdb1<br />
#vgdisplay testvg<br />
#lvdisplay /dev/testvg/testlv</source><br />
А что у нас с файловой системой?<br />
<source lang="bash">#df -h /mnt/test<br />
Filesystem<br />
Size Used Avail Use% Mounted on<br />
/dev/mapper/testvg-testlv<br />
20M 1.2M 18M 7% /mnt/test</source><br />
Вы заметили, что тут неверно? Мы создали и смонтировали файловую систему с /dev/testvg/testlv, а обнаружили, что она смонтирована с /dev/mapper/testvg-testlv. Все так и должно быть. Это нормально<br />
для LVM2, так как для обращения к ядру он использует device-mapper.<br />
Это второй способ узнать, что интересующее вас устройство, на самом<br />
деле, том LVM (первый способ заключается в соглашении об именовании, использованном при создании группы томов и самих томов).<br />
<br />
==== Тестируем и изменяем размер ====<br />
Ну вот, все создано; давайте проверим, работают ли тома, скопировав<br />
что-нибудь в файловую систему.<br />
#cp /usr/bin/* /mnt/test/<br />
Ой-ей!!! Если вы следуете этому учебнику слово в слово, вы должны увидеть следующее:<br />
<source lang="bash">cp: cannot create regular file `/mnt/test/zjsdecode’: No space left on device<br />
cp: cannot create regular file `/mnt/test/zsoelim’: No space left on device</source><br />
Что же произошло? Проверим-ка свободное место в файловой<br />
системе:<br />
<source lang="bash">#df -h /mnt/test<br />
Filesystem<br />
Size Used Avail Use% Mounted on<br />
/dev/mapper/testvg-testlv<br />
20M 20M 0 100% /mnt/test</source><br />
Как видите, мы использовали все свободное пространство. Если бы<br />
эта файловая система была создана на дисковом разделе, единственным способом все исправить было бы удаление каких-нибудь данных<br />
или переразбиение диска, но LVM способен расширить логический том<br />
и файловую систему. Начнем с логического тома:<br />
<source lang="bash">#lvdisplay /dev/testvg/testlv | grep Size<br />
LV Size<br />
20.00 MB<br />
#lvextend -L100M /dev/testvg/testlv<br />
Extending logical volume testlv to 100.00 MB<br />
Logical volume testlv successfully resized<br />
#lvdisplay /dev/testvg/testlv | grep Size<br />
LV Size<br />
100.00 MB</source><br />
Файловую систему ext3 вы можете расширить «на лету», без<br />
останова.<br />
<source lang="bash">#resize2fs /dev/testvg/testlv<br />
resize2fs 1.40.8 (13-Mar-2008)<br />
Filesystem at /dev/testvg/testlv is mounted on /mnt/test; on-line<br />
resizing required<br />
old desc_blocks = 1, new_desc_blocks = 1<br />
Performing an on-line resize of /dev/testvg/testlv to 102400 (1k)<br />
blocks.<br />
The filesystem on /dev/testvg/testlv is now 102400 blocks long.<br />
#df -h /mnt/test<br />
Filesystem<br />
Size Used Avail Use% Mounted on<br />
/dev/mapper/testvg-testlv<br />
98M 20M 74M 22% /mnt/test</source><br />
Глядя на вывод df выше, я счел, что файловая система великовата,<br />
и решил ее чуть-чуть уменьшить. При этом следует знать, что LVM распределяет место в «экстентах»; размер экстента показывается в выводе vgdisplay как поле ‘PE size’, и по умолчанию он равен 4 МБ. Размер<br />
логического тома уменьшается кратно экстенту. Первый шаг – уменьшение размера файловой системы. Увы, в реальном времени ext3<br />
такого не умеет, поэтому придется сперва отмонтировать файловую<br />
систему и запустить проверку (fsck).<br />
<source lang="bash">#umount /mnt/test<br />
#e2fsck -f /dev/testvg/testlv<br />
[... удаленные всякие ненужные строки ...]<br />
/dev/testvg/testlv: 426/22256 files (1.2% non-contiguous), 22964/102400 blocks</source><br />
Проверка убеждает, что файловая система в порядке, и дает возможность ее уменьшения с минимальным риском.<br />
<source lang="bash">#resize2fs /dev/testvg/testlv 50M<br />
resize2fs 1.40.8 (13-Mar-2008)<br />
Resizing the filesystem on /dev/testvg/testlv to 51200 (1k) blocks.<br />
The filesystem on /dev/testvg/testlv is now 51200 blocks long.</source><br />
Немного математики. Пятьдесят не делится на четыре без остатка.<br />
Если мы попытаемся уменьшить размер логического тома до 50 МБ,<br />
он станет 48 МБ или 52 МБ. К счастью, lvreduce хватает ума выбрать<br />
большее значение.<br />
<source lang="bash">#lvreduce -L 50M /dev/testvg/testlv<br />
Rounding up size to full physical extent 52.00 MB<br />
WARNING: Reducing active logical volume to 52.00 MB<br />
THIS MAY DESTROY YOUR DATA (filesystem etc.)<br />
Do you really want to reduce testlv? [y/n]: y<br />
Reducing logical volume testlv to 52.00 MB<br />
Logical volume testlv successfully resized</source><br />
Последним шагом будет еще одно изменение размера файловой<br />
системы, для использования всего доступного пространства.<br />
<source lang="bash">#resize2fs /dev/testvg/testlv<br />
resize2fs 1.40.8 (13-Mar-2008)<br />
Resizing the filesystem on /dev/testvg/testlv to 53248 (1k) blocks.<br />
The filesystem on /dev/testvg/testlv is now 53248 blocks long.</source><br />
Теперь можно заново смонтировать файловую систему и проверить, что она имеет корректный размер.<br />
<source lang="bash">#mount /dev/testvg/testlv /mnt/test/<br />
#df -h /mnt/test<br />
Filesystem<br />
Size Used Avail Use% Mounted on<br />
/dev/mapper/testvg-testlv<br />
51M 20M 30M 40% /mnt/test</source><br />
Пожалуйста, помните про размер экстента при изменении размера<br />
логических томов и проверяйте, что размер нового тома такой же или<br />
больше, чем размер файловой системы.<br />
{{Врезка|center|<br />
|Заголовок=Изменяем размер файловых систем<br />
|Содержание=Подходящими инструментами, размер большинства современных файловых систем можно<br />
менять – у некоторых даже «на лету». Здесь важно знать ограничения: например, некоторые<br />
файловые системы нельзя уменьшать: они только расширяются, да и то когда отмонтированы.<br />
Прочитайте соответствующую man-страницу и протестируйте команду, прежде чем применять ее<br />
на реальных данных.<br />
{{{!}}<br />
!ext2/3<br />
{{!}} resize2fs<br />
{{!}}-<br />
!jfs<br />
{{!}} mount -o remount,resize /filesystem<br />
{{!}}-<br />
!reiserfs<br />
{{!}} resize_reiserfs<br />
{{!}}-<br />
!xfs<br />
{{!}} xfs_growfs<br />
{{!}}}<br />
|Ширина=}}<br />
<br />
=== Часть 2 Операции посложнее ===<br />
[[Изображение:LXF 112 64 1.png|300px|thumb|Это system-config-lvm. Имя не самое затейливое, но действия ему соответствуют, и выполняются хорошо.]]<br />
LVM позволяет создать копию логического тома для определенного<br />
момента времени (ее называют снимком). Так и слышу ваш стон: «А это<br />
еще зачем?» Хорошо, представим, что у вас есть база данных (или другое приложение), и вы хотите сделать полноценную резервную копию.<br />
Для этого придется завершить работу или, как минимум, приостановить<br />
ее. Однако создание резервной копии требует времени – и система долго<br />
будет недоступна. А вот с LVM можно остановить вашу базу данных, сделать снимок ее файловой системы и запустить ее снова, что займет пару<br />
секунд. К состоянию, зафиксированному снимком, можно вернуться.<br />
<br />
Другой пример касается виртуализации. Пусть вы хотите протестировать нечто на вашей виртуальной машине, но боитесь, что она от этого<br />
сломается. Решение очень простое: создайте снимок файловой системы,<br />
на которой расположен образ диска вашей виртуальной машины. Теперь<br />
можете запустить виртуальную машину из этого снимка, выполнить ваш<br />
тест, и если что-то пойдет не так, просто удалить снимок. Данные на<br />
момент создания снимка в вашей исходной файловой системе уцелеют.<br />
Хитро! [даже слишком: возможность делать снимки состояния гостевой<br />
ОС есть в большинстве виртуальных машин, например, VirtualBox, –<br />
прим. ред.] Итак, что надо сделать? Сперва убедимся, что в группе томов<br />
достаточно места (см. vgdisplay ранее). Если да, то просто создадим<br />
новый логический том с параметром -s (снимок) и смонтируем его, как<br />
если бы он был обычной файловой системой.<br />
<source lang="bash">#lvcreate -s -L50M -n testlvsnap /dev/testvg/testlv<br />
Rounding up size to full physical extent 52.00 MB<br />
Logical volume “testlvsnap” created<br />
#mkdir /mnt/snap<br />
#mount /dev/testvg/testlvsnap /mnt/snap<br />
#df -h /mnt/test /mnt/snap<br />
Filesystem Size Used Avail Use% Mounted on<br />
/dev/mapper/testvg-testlv<br />
51M 20M 30M 40% /mnt/test<br />
/dev/mapper/testvg-testlvsnap<br />
51M 20M 30M 40% /mnt/snap</source><br />
Они оба выглядят одинаково. Вы можете перепроверить это, запустив следующие команды (их вывод мы удалили, так как он слишком<br />
длинный):<br />
<source lang="bash">#diff /mnt/test /mnt/snap/<br />
#ls -l /mnt/test<br />
#ls -l /mnt/snap</source><br />
Теперь можно убедиться, что LVM и вправду умеет удалять и создавать любые файлы в нашем снимке.<br />
<source lang="bash">#rm -rf /mnt/snap/* (БУДЬТЕ ОСТОРОЖНЫ С ЭТОЙ КОМАНДОЙ!)<br />
#touch /mnt/snap/SNAP_TEST<br />
#touch /mnt/test/ORIG_TEST<br />
#ls -l /mnt/test<br />
#ls -l /mnt/snap</source><br />
Если снимок больше не нужен, его можно удалить тем же способом, что и логический раздел.<br />
<source lang="bash">#umount /mnt/snap<br />
#lvremove /dev/testvg/testlvsnap<br />
Do you really want to remove active logical volume “testlvsnap”?<br />
[y/n]: y<br />
Logical volume “testlvsnap” successfully removed</source><br />
<br />
==== Одним махом ====<br />
Если вы интересуетесь, как работает механизм снимков, то все несложно. При создании снимка LVM ничего не копирует: в группе томов<br />
просто отводится требуемое место и затем начинается отслеживание<br />
изменений. И оригинал, и снимок вначале указывают на те же блоки<br />
данных. Если какие-то из них модифицируются, LVM создаст копию<br />
измененных данных и сохранит их отдельно. Эта техника называется<br />
копированием-при-записи, так что снимки создаются моментально,<br />
вне зависимости от размера файловой системы.<br />
<br />
Другая дополнительная возможность LVM – прозрачный перенос<br />
данных между физическими томами. Он экономит время при замене<br />
жесткого диска. Без LVM пришлось бы загружаться с CD и использовать его для копирования файловых систем – а с LVM можно просто<br />
добавить новый диск (или его раздел) в имеющуюся группу томов<br />
и велеть LVM переместить все на него. Чтобы проделать следующее<br />
упражнение, вы должны иметь доступ к другому разделу (неважно, на<br />
другом он диске или на том же самом). Создайте раздел и установите<br />
его тип в 8E, как мы делали ранее.<br />
<source lang="bash">#pvcreate /dev/sdc1<br />
Physical volume “/dev/sdc1” successfully created<br />
#vgextend testvg /dev/sdc1<br />
Volume group “testvg” successfully extended</source><br />
Нашей группе томов теперь отведено два физических тома (sdb1<br />
и sdc1). Так вы можете расширить существующую группу томов (и ее<br />
тома). Это также и способ создания файловых систем, превышающих<br />
размер одного диска. Далее нам нужно переместить данные на новый<br />
том и удалить старый диск:<br />
<source lang="bash">#pvmove /dev/sdb1 /dev/sdc1<br />
/dev/sdb1: Moved: 100.0%<br />
#vgreduce testvg /dev/sdb1<br />
Removed “/dev/sdb1” from volume group “testvg”</source><br />
Pvmove физически перемещает все данные с одного тома на другой. На нашей крошечной файловой системе это займет несколько<br />
секунд, но на большой системе (особенно если она постоянно используется) может потребоваться несколько часов.<br />
<br />
=== Часть 3 Установка или конвертирование в LVM ===<br />
{{Врезка<br />
|Заголовок=А ещё…<br />
|Содержание=GParted – отличный<br />
инструмент, но он<br />
не поддерживает<br />
изменение размера<br />
томов LVM. Для<br />
этого следует пользоваться средствами<br />
командной строки<br />
или специализированными инструментами с графическим<br />
интерфейсом.<br />
<br />
Однако GParted умеет изменять размер<br />
файловой системы,<br />
расположенной на<br />
томе LVM.<br />
|Ширина=200px}}<br />
Ну что, убедились, что, после нарезания хлеба, LVM – самая отличная<br />
штука? Захотелось перевести свою систему на управляемые тома LVM?<br />
Не бойтесь, это довольно просто. Fedora и CentOS практически идентичны, и обе будут использовать LVM, если вы выберете стандартную<br />
установку. OpenSUSE позволит выбрать между установкой на обычный<br />
раздел и установкой на основе LVM, Ubuntu Server также имеет снабженную описанием установку с использованием LVM. Единственным<br />
дистрибутивом, из мной протестированных, который не поддерживает<br />
установку на LVM, является Ubuntu Desktop. К счастью, есть обходной<br />
путь. Подробности ищите здесь: http://www.debuntu.org/how-to-install-ubuntu-over-lvm-filesystem.<br />
<br />
А что делать, если вы желаете использовать LVM на существующих<br />
файловых системах, но не хотите переустанавливать систему? К сожалению, нет магического инструмента, умеющего преобразовывать разделы в логические тома. Вы можете сделать это, но файловая система<br />
должна иметь по крайней мере 50% свободного места. (Альтернатива –<br />
использовать запасной диск или другой раздел, где места достаточно.)<br />
Прежде чем менять разделы и файловые системы, пожалуйста, позаботьтесь о резервных копиях ваших ценных данных.<br />
<br />
Во-первых, создайте новый раздел, используя свободное место на<br />
диске. Наилучший инструмент для этого – GParted. Теперь установите<br />
тип раздела в LVM (с помощью fdisk или cfdisk), создайте физический<br />
том, группу томов и логический том, а затем и файловую систему.<br />
Используйте что-нибудь подходящее, типа dd, cpio, dump/restore или<br />
tar, для копирования данных в новую файловую систему. Сделав это,<br />
измените тип исходного раздела на LVM, создайте на нем физический<br />
том и добавьте его в группу томов. Теперь можете расширить логический том до требуемого размера.<br />
<br />
Если вы намерены конвертировать в LVM вашу корневую файловую<br />
систему, загрузитесь с любого LiveCD/DVD и выполните все действия<br />
оттуда. Следует также знать, что на логическом томе нельзя размещать<br />
/boot, иначе вы вообще не сможете загрузить вашу систему. Причина<br />
здесь в том, что загрузчики (в частности, Grub) не понимают LVM и не<br />
могут найти ядро для загрузки.<br />
<br />
==== И более того ====<br />
Мы рассмотрели часть основных и чуть-чуть расширенных возможностей менеджера логических томов. LVM, однако, умеет больше,<br />
особенно если у вас не один диск. Например, если назначить два<br />
физических тома на группу томов, LVM употребит все доступное пространство на первом томе, а затем перейдет на второй. Хотя, возможно,<br />
было бы быстрее читать и писать на два диска параллельно – поэтому<br />
можно велеть LVM размещать порции данных на нескольких физических томов по принципу RAID0. LVM не предусматривает избыточности данных, как RAID1 или 5, но физические тома можно организовать на основе устройств Linux Software RAID (md): создать несколько<br />
md-устройств, а затем объединить их в один или более логических<br />
томов.<br />
<br />
Я также обошел вниманием некоторые функции, типа поддержки<br />
кластеризации, и команды, такие как vgscan, vgchange и vgs. Если вы<br />
хотите узнать о них больше, взгляните на документ LVM HOWTO на<br />
http://www.tldp.org/HOWTO/LVM-HOWTO. Местами он немного устарел, но все<br />
еще является прекрасным источником информации.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF111:MultomediaLXF111:Multomedia2009-10-06T12:27:59Z<p>WikiSysop: «LXF111:Multomedia» переименована в «LXF111:Multimedia»: Опечатка</p>
<hr />
<div>#REDIRECT [[LXF111:Multimedia]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF111:MultimediaLXF111:Multimedia2009-10-06T12:27:59Z<p>WikiSysop: «LXF111:Multomedia» переименована в «LXF111:Multimedia»: Опечатка</p>
<hr />
<div>: '''Мультимедиа''' Полезные советы для аудио-, видео- и фотоприложений [[Категория:Учебники]]<br />
<br />
==Мультимедиа: HDR и ''DigiKam''==<br />
<br />
: '''Марко Фиоретти''' начинает серию уроков по мультимедиа, с советами и новостями от ''DigiKam'', музыкального сервера ''Icecast'', ''LMMS'' и забавным «пожирателем времени» от ''Blender''.<br />
<br />
'''''Linux Format''''' регулярно освещает темы домашнего мультимедиа, от архивирования ваших цифровых фотографий или музыкальных коллекций до производства и проигрывания семейных<br />
видеороликов или онлайн-подкастов. Однако информация такого рода<br />
устаревает с выходом новых версий программ – а ведь Linux был бы не<br />
Linux, если бы они не появлялись каждые пару недель. По той же причине, например, представляется невозможным доскональное освещение всех способов использования аудиоприложений в одном учебнике.<br />
На самом деле, учебник украсился бы массой подробностей, если бы<br />
только они успевали попасть в приложение на том этапе, когда мы о<br />
нем писали.<br />
<br />
Я собираюсь восполнить несколько пробелов по части ряда интересных функций, которые мы проскочили из-за огромных темпов развития свободного ПО, не повторяя объяснения про старые, уже описанные нами возможности – вы о них и так знаете. Поле для деятельности здесь огромное, и если вы хотели бы познакомиться с какими-то<br />
моментами более подробно, напишите нам (именно так появилась на свет статья о [[LXF111:MythTV|''MythTV'']]). Итак, без дальнейших прелюдий займемся…<br />
<br />
===''PFSTools'' в HDR-фотографии===<br />
<br />
В [[LXF105:Манипулируем фото|LXF105]] Дейл Стрикленд-Кларк представил замечательный мир изображений с расширенным динамическим диапазоном (HDR). Данная технология позволяет объединять разные фотографии одного и того<br />
же объекта для создания новой версии с большим количеством деталей в тенях и световых участках, чем в любом из составляющих снимков. HDR-фотографии обычно сохраняют в формате OpenEXR (http://www.openexr.com), позволяющем держать несколько экспозиций одного кадра в одном файле.<br />
<br />
Обычная в HDR процедура – это наложение тонов (tone mapping),<br />
методика, позволющая снижать контрастность до диапазона, отображаемого на экране или бумаге, при сохранении детализации и цветовой гаммы. В последнем релизе обработчика HDR, ''PFSTools'' (http://pfstools.sourceforge.net), включен новый инструмент для этой операции. Посмотрим, как он работает.<br />
<br />
Стандартная процедура выглядит так, как изображено далее: на рисунке справа детали двух экспозиций объединены.<br />
Магическое заклинание для командной строки, чтобы провернуть такой же трюк с вашими фотографиями в ''PFSTools'', выглядит следующим образом:<br />
<br />
pfsin tree.exr | pfstmo_mantiuk08 -v -e 1.5 -c 0.7 | pfsview<br />
<br />
что в переводе на человеческий язык означает:<br />
<br />
* Распаковать все экспозиции фотографии из файла OpenEXR ('''tree.exr''') с помощью ''pfsin''.<br />
* Отправить их в несжатом формате в программу ''pfstmo_mantiuk08'', которая и выполняет наложение.<br />
* Отобразить результат во всей красе в просмотрщике изображений ''pfsview'' (вы также можете использовать его для редактирования и сохранения настроек экспозиции).<br />
<br />
Адаптивное наложение тонов еще круче. Взгляните на следующий пример. Слева – обычный снимок в формате JPEG, как он выглядел бы на вашем мониторе при оптимальных условиях, без каких-либо отражений и других искажений от рассеянного света. Если вы примените к нему стандартную процедуру, описанную выше, и будете просматривать его на экране ноутбука в полдень на вашей веранде, результат будет похож на второе изображение, которое выглядит блеклым.<br />
<br />
Чтобы исправить эту беду, нужно выполнить наложение тонов, адаптирующееся к настройкам вашего монитора; при этом картинка преобразовывается таким образом, чтобы компенсировать недостатки монитора и свести на нет эффекты, связанные с рассеянным светом (эту информацию приложение получает в реальном времени, если на<br />
мониторе есть сенсор рассеянного света). В результате изображение<br />
выглядит как HDR даже при полном свете дня. Команда для получения<br />
этого эффекта выглядит следующим образом:<br />
<br />
pfsin japan_garden.exr | pfstmo_mantiuk08 -d a=5000 | pfsdisplayfunction -l -d a=5000 | pfsview<br />
<br />
Она схожа с первой: это совмещение программы наложения тонов с утилитой ''pfsdisplayfunction'' для получения адаптивного результата.<br />
<br />
Для получения более подробной информации об адаптивном к вашему монитору наложении тонов, пройдите по ссылке http://www.mpi-inf.mpg.de/resources/hdr/datmo или напишите одному из разработчиков,<br />
Рафалу Мантьюку (Rafal Mantiuk; он любезно поделился с нами этими примерами), на [mailto:mantiuk@cs.ubc.ca mantiuk@cs.ubc.ca].<br />
<br />
====Наложение тонов с HDR====<br />
<br />
[[Изображение:LXF111_70_1.jpg|Наложение тонов с HDR]]<br />
<br />
====Наложение тонов при рассеянном свете====<br />
<br />
[[Изображение:LXF111_71_1.jpg|Наложение тонов при рассеянном свете]]<br />
<br />
===''DigiKam'' Интеллектуальный поиск===<br />
<br />
Кстати о цифровой фотографии: разработчики менеджера фотографий ''DigiKam'' (http://www.digikam.org) переводят эту программу и все связанные с ней библиотеки на KDE 4. Они также предоставляют много новых<br />
функций, начиная от интерфейса базы данных до множественных корневых альбомов, прозрачной работы по сети, геолокации и поддержки стандарта Digital Negative (http://www.adobe.com/products/dng), полностью<br />
документированного расширения TIFF от Adobe для целиком переносимых необработанных [raw] цифровых фотографий высокого качества. Бета-релизы ''DigiKam'' для KDE 4 появились в июле 2008 года. Пока им,<br />
наверно, рановато вверять свои драгоценные хранилища фотографий,<br />
но функции так заманчивы, что не грех и побаловаться с новой ''DigiKam''<br />
(на копии ваших архивов, естественно) и, возможно, внести свою лепту<br />
в отчеты об ошибках.<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF111_71_2.jpg|300px]]Галереи эскизов изображений пришли на смену текстовым спискам в функции '''Поиска дубликатов'''.|Ширина=300px}}<br />
<br />
Полезнейшей из функций является поиск: есть новый интерфейс<br />
для нахождения дубликатов и, кроме того, функция '''Fuzzy Search''' [интеллектуальный поиск]. Конечно, поиск дубликатов в ''DigiKam'' уже есть, но в новой версии эта функция должна быть ощутимо быстрее,<br />
потому что поисковый модуль теперь встроен в основной код и стал<br />
более приятным в использовании. Взгляните на экранные<br />
снимки, сравнивающие поиск дубликатов в KDE 3 (вверху) и в<br />
KDE 4 (внизу). Довольно гадать над именами файлов: просто<br />
нажмите на кнопку '''Поиск Дубликатов''' [Find Duplicates], и вы<br />
получите слева миниатюры изображений, имеющих дубликаты. Выберите одну из них мышью, и галерея всех дубликатов<br />
появится в остальном пространстве окна.<br />
<br />
====Вейвлеты Хаара====<br />
<br />
На минуточку побудем умниками: в KDE 4 ''DigiKam'' хранит во<br />
внутренней базе данных «наброски» каждого изображения,<br />
сгенерированные с помощью вейвлетов Хаара [Haar wavelets].<br />
Ну как не использовать штуку с таким классным названием?<br />
Вообще-то мы упомянули вейвлеты Хаара неспроста: именно<br />
они лежат в основе нового инструмента '''Fuzzy Search'''. Это метод<br />
поиска картинок, которые просто похожи (но не являются<br />
дубликатами), либо по выбранной мышью миниатюре, либо –<br />
вот это да! – по эскизу, нарисованному от руки! Честно!<br />
<br />
{{Врезка|left|Содержание=[[Изображение:LXF111_72_1.jpg|300px]] Новой KDE 4 версии ''DigiKam'' достаточно ваших смутных воспоминаний о снимке для его обнаружения! |Ширина=300px}}<br />
<br />
Помните день, когда ваш сынишка играл на пляже? Вы сделали<br />
чудесные фотографии, но где они? У вас в памяти сохранились только голубизна неба и красная футболка – обновка, которой он так гордился. Не волнуйтесь, этого достаточно для ''DigiKam'': нажмите на '''Fuzzy Search''', нарисуйте голубую и красную полосы (это представление неба и футболки) в панели набросков – и получите искомую фотографию!<br />
Знаем, знаем: сама по себе, эта возможность отнюдь не нова, и основной алгоритм (быстрый запрос изображений с разным разрешением) и исходный код взяты из другого менеджера изображений под Linux, под<br />
названием ''ImgSeek'' (http://www.imgseek.net); он делает то же самое. С другой стороны, конкуренция и конструктивный плагиат в приложениях с открытым кодом приветствуются, а интеллектуальный поиск, интегрированный в среду рабочего стола KDE – это же здорово, верно?<br />
<br />
Запомните: вы можете найти эти и другие экранные снимки ''DigiKam'' в хорошем разрешении на http://www.flickr.com/groups/digikam-labs, любезно предоставленные главным разработчиком Жилем Колье [Gilles<br />
Caulier].<br />
<br />
===''Blender''===<br />
<br />
Хотите разработать первоклассную свободную 3D-игру с онлайн-сообществом? ОК, сначала<br />
идем на http://apricot.blender.org. На этом сайте, после открытых фильмов Orange [Апельсин]<br />
и Peach [Персик] (http://www.bigbuckbunny.org),<br />
Blender Institute запустил проект разработки<br />
открытой 3D-игры с участием главных героев<br />
из Peach. С главной страницы Apricot [Абрикос]<br />
можно скачать демо-версию, чтобы с ней<br />
поиграть. Это сделано не ради вашего удовольствия, а потому, что разработчики хотят<br />
протестировать его на как можно большем<br />
количестве графических карт и компьютеров!<br />
Когда вы наиграетесь, вам понадобится всего<br />
минута, чтобы понять, как делать анимацию с<br />
''Blender'', и, возможно, внести свой вклад в развитие игры!<br />
<br />
Скачайте файл http://apricot.blender.org/wp-content/uploads/2008/06/frankanim.blend и<br />
откройте его в ''Blender'': вы увидите окно, похожее на показанное на экранном снимке. Теперь<br />
щелкните где-нибудь слева и нажимайте стрелки вправо-влево: нет, вы не перебрали<br />
пивка, Фрэнки [Frankie] и вправду двигается.<br />
Это вы только что открыли готовый к запуску<br />
файл анимации ''Blender'' – самый доступный<br />
способ научиться анимации, не предваряя<br />
открытие ''Blender'' перелопачиванием тонны<br />
руководств. Под текстурой Фрэнки находится<br />
скелет из нескольких «костей», которые видны в ''Blender'' как зеленые линии. Можно отдельно контролировать движение каждой кости, привязав к ней комбинацию клавиш, а не то<br />
''Blender'' сам назначит клавиши, когда вы двигаете очередную кость. Каждая кость имеет<br />
отдельный канал в окне '''Редактирования действий''' (на экранном снимке – крайнее справа),<br />
которая используется для сложения и контроля, что, где и как двигается. Естественно, можно группировать части тела, чтобы они двигались вместе, связывать простые движения для создания более сложных или зацикливать<br />
движения, например, для создания пробежки<br />
из отдельных шагов. Пошаговые инструкции,<br />
как анимировать модели в ''Blender'', находятся<br />
по адресу http://wiki.blender.org/index.php/BSoD/Introduction_to_Character_Animation.<br />
<br />
[[Изображение:LXF111_72_2.jpg|Вдохнуть жизнь во Фрэнки, одного из главных героев Apricot, очень легко!]]<br />
<br />
*: Вдохнуть жизнь во Фрэнки, одного из главных героев ''Apricot'', очень легко!<br />
<br />
===''Icecast'' Транслируйте музыку через Интернет===<br />
<br />
В [[LXF106:Вещайте по сети|LXF106]] мы узнали, как создать интернет-радиостанцию в ''Icecast''.<br />
Хорошая новость: почти сразу после того, как мы написали учебник, и<br />
после двух с половиной лет разработки была выпущена новая версия<br />
''Icecast'' (ее можно скачать с http://www.icecast.org как исполняемый файл<br />
Windows, исходный код или RPM-пакет) Это сервер вещания под Linux<br />
и Windows, созданный для трансляции аудиофайлов MP3 или Ogg<br />
Vorbis для всех типов клиентов. Полный список новых функций версии 2.3.2 доступен на домашней странице. Две наиболее интересные<br />
из них, по крайней мере, для начинающего ди-джея, который хотел<br />
бы донести свою музыку до слушателей по всему миру, имея при этом<br />
самый полный контроль над трансляцией – это улучшенная поддержка<br />
разных алфавитов и возможность создания черных и белых списков<br />
IP-адресов.<br />
<br />
На практике первая особенность означает, что ''Icecast'' теперь умеет<br />
преобразовывать все метаданные в UTF-8 для мгновенной передачи их<br />
в клиенты: в итоге вы можете общаться с большим количеством слушателей на их родном языке. Например, если вы транслируете web-страницы и списки каталогов, посвященные балладам об Афганистане, и<br />
некоторые из ваших слушателей используют русскоязычные браузеры,<br />
вся передаваемая информация будет отображаться корректно.<br />
<br />
====Безопасность – это просто====<br />
<br />
Списки IP-адресов, кроме того, дают вам гибкость другого рода.<br />
Задайте в ''Icecast 2.3.2'' имя списка IP-адресов в текстовом формате,<br />
и, в соответствии с конфигурацией, программа будет сама разрешать<br />
или запрещать запросы соединений от указанных хостов, не задавая<br />
лишних вопросов. Такая функция очень пригодится тем web-ди-джеям,<br />
которые непривычны к настройке брандмауэра или не имеют достаточных административных прав, чтобы произвести ее.<br />
<br />
===''DVD-слайд-шоу'' Создайте видео из ваших фотографий===<br />
<br />
Если вы не покушаетесь на создание очередного оскароносного<br />
«Из Африки», состряпать DVD-слайд-шоу можно довольно быстро.<br />
Инструменты ''DVD-slideshow'' (http://dvd-slideshow.sourceforge.net/wiki) –<br />
это набор утилит командной строки, которые сделают мультимедийные<br />
слайд-шоу на DVD из любой коллекции изображений в формате JPEG<br />
или PNG, а также MP3-, OGG- или WAV-аудио-файлов. Накопив нужные<br />
изображения и аудиоклипы, всего лишь изучите парочку man-страниц<br />
и перечислите последовательность действий в простом текстовом<br />
файле. Компоненты ''DVD-slideshow'' прочитают эту информацию, и ваш<br />
шедевр вскорости будет готов.<br />
<br />
Последовательность действий описывается рядом строк. Каждая из<br />
них ссылается на один видеоэффект или на один аудио- или графический файл и определяет, что с ним делать. Общий синтаксис выглядит следующим образом:<br />
<br />
[картинка.jpg|ключевое слово]:продолжительность:субтитры:эффект:параметры эффекта<br />
<br />
где после специального ключевого слова, обозначающего эффект,<br />
или имени графического файла вы указываете, используя двоеточие<br />
как разделитель, длительность пребывания на экране, требуемую подпись, и далее – несколько дополнительных параметров конфигурации. Не волнуйтесь, вы не обречены на чередование статических картинок:<br />
кроме добавления аудиофайла, также можно включить эффекты затухания, увеличения, масштабирования или горизонтального кадрирования. Все возможности детально описаны на man-страницах. Для понимания работы программы взгляните на пример подобных инструкций: это творчески примененная смесь более полных примеров, доступных<br />
на домашней странице.<br />
<br />
# Комментарии оформляются так же, как в скриптах<br />
title:10:Это название слайд-шоу, оно маячит 10 секунд<br />
моя_музыка.mp3:1:crossfade<br />
голос_диктора.mp3:2<br />
родительская_свадьба.jpg:5:День, когда все началось<br />
нервный_жених.jpg:5:По слухам, папа немного нервничал...<br />
все_отплясывают.jpg:5:...но потом всем было ужасно весело<br />
<br />
Прежде всего отметьте, что поля ‘'''effect'''’ присутствуют, только если<br />
они нужны. Следующие две строки добавляют фоновую музыку на<br />
аудиотреке 1, постепенно затухающую с переходом на голос диктора с<br />
трека 2. Воспроизведение пойдет с запуском следующей картинки. Для<br />
добавления меню существует другой компонент ''DVD-slideshow'', под<br />
названием – нипочем не угадаете! – ''DVD-menu''.<br />
<br />
В процессе изучения ''DVD-slideshow'' не забывайте задавать командный ключ '''-L'''. Тогда видео будет более низкого качества, со вдвое меньшим разрешением и с более грубыми переходами. Почему нужна подобная гадость? Да хотя бы потому, что ее создание займет на 75 % меньше времени. '''-L'''-режим прекрасно подходит для изучения и<br />
отладки.<br />
<br />
===''LMMS'' Теперь с ''Qt4''===<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF111_73_1.jpg]]Новое поколение ''LMMS'' включает множество функций по обработке<br />
звука, и даже работает под Windows.|Ширина=300px}}<br />
<br />
''The Linux Multimedia Studio'' (''LMMS'', http://lmms.sourceforge.net) – это<br />
система генерирования звука, реализованная на дизайнерских решениях по типу ''GarageBand'' от Apple или ''FL Studio''. Вы сможете составлять сложные музыкальные произведения в два этапа. Сначала сгенерируйте несколько основных звуков с помощью генераторов, включенных<br />
в ''LMMS''. Подготовив звуки, приступайте к их объединению. Альфа-<br />
релизы серии 0.4 ''LMMS'' уже доступны и выглядят неплохо, почему бы<br />
их не попробовать? Посмотрите на снимок с монитора разработчика<br />
Тобиаса Дерффеля [Tobias Doerffel], чтобы понять, чего ожидать.<br />
<br />
Новый интерфейс пользователя построен на библиотеках ''Qt 4'':<br />
если вам очень-очень нужно, можете даже запустить ''LMMS'' на 32-битных версиях Windows. Но хакер, сидящий внутри вас, будет, наоборот, счастлив узнать, что начиная с 0.4.0 версии, ''LMMS'' можно выполнять<br />
посредством скрипта даже без графического интерфейса и даже разделять один ''LMMS''-сервер между несколькими пользователями. Кроме того, можно сэкономить массу времени, генерируя и обрабатывая звуки посредством скрипта автоматически. Вот пример:<br />
<br />
lmms --render foo.mmpz --format wav --samplerate 96000 --oversampling 2 -o foo.wav<br />
<br />
С помощью этого кода вы создадите WAV-версию с частотой дискретизации 96 кГц, обработанную при 192 кГц (частота дискретизации, помноженная на коэффициент запаса точности – '''oversampling''') из<br />
необработанного MMPZ-файла. '''LXF'''<br />
<br />
===''Greasemonkey''===<br />
<br />
{{Врезка|Содержание=[[Изображение:LXF111_73_2.jpg]]Получение MP4- или FLV-версии видеоролика YouTube теперь ускорилось.|Ширина=300px}}<br />
<br />
''Greasemonkey'' (https://addons.mozilla.org/en-US/firefox/addon/748) – сверхпопулярное дополнение для ''Firefox'', способное запускать сотни разных скриптов для изменения «на лету» страниц, которые вы посещаете. Миллионы людей<br />
используют ''Greasemonkey'' для объединения частей разных web-страниц.<br />
<br />
Пользовательский сценарий – это не что иное, как небольшая программа на JavaScript,<br />
написанная специально для работы с ''Greasemonkey''. Главный репозиторий находится по адресу http://userscripts.org. Одно из<br />
наиболее полезных недавних дополнений, по<br />
крайней мере, для любителей видео, обожающих коллекционировать и совмещать максимум информации – мастер закачек YouTube http://userscripts.org/scripts/show/30318.<br />
Экранный снимок показывает, как он работает.<br />
Слева скрипт в ''Firefox'' не запущен, справа –<br />
запущен. Данный скрипт добавляет, прямо под<br />
фрагментом кода ‘'''Embed this video'''’, ссылки,<br />
просматриваемые в окне ''KMag'' в правом нижнем углу: '''Download as MP4''' и '''Download as FLV'''.<br />
Просто нажмите на один из них, чтобы по-быстрому нахватать клипов, готовых для<br />
сохранения или редактирования.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-09-16T06:34:19Z<p>WikiSysop: </p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
=== 2008 год ===<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100 Январь 2008]]<br />
<br />
=== 2007 год ===<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
<br />
=== 2006 год ===<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2006]]<br />
<br />
=== 2005 год ===<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-09-16T06:24:41Z<p>WikiSysop: Добавлены ссылки на номера за вторую половину 2008 года</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF112|LXF112 Декабрь 2008]]<br />
* [[LXF111|LXF111 Ноябрь 2008]]<br />
* [[LXF110|LXF110 Октябрь 2008]]<br />
* [[LXF109|LXF109 Сентябрь 2008]]<br />
* [[LXF108|LXF108 Август 2008]]<br />
* [[LXF107|LXF107 Июль 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100 Январь 2008]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:%D0%A6%D0%B8%D0%BA%D0%BB/Java_EEШаблон:Цикл/Java EE2009-08-17T08:18:23Z<p>WikiSysop: Добавлен Антон Черноусов</p>
<hr />
<div>{{Цикл|Java EE|<br />
* [[LXF89:Java EE|Часть 1: Адресная книга]]<br />
* [[LXF90:JavaEE|Часть 2: Java Server Pages]]<br />
* [[LXF91:Java EE|Часть 3: Сессии и фильтры]]<br />
* [[LXF92:Java_EE|Часть 4: MVC в J2EE]]<br />
* [[LXF93:Java EE|Часть 5: Все на базу!]]<br />
* [[LXF94:Java EE|Часть 6: Команды и фабрики]]<br />
* [[LXF95:Java EE|Часть 7: Web 2.0 своими руками]]<br />
* [[LXF96:Java EE|Часть 8: Перекличка серверов]]<br />
* [[LXF97:Java EE|Часть 9: Почтовый сервис]]<br />
* [[LXF98:Java EE|Часть 10: Struts, великий и ужасный]]<br />
* [[LXF99:Java EE|Часть 11: EJB3]]<br />
}}<br />
<br />
<br />
[[Категория:Учебники]]<br />
[[Категория:Java]]<br />
[[Категория:Александр Бабаев]]<br />
[[Категория:Антон Черноусов]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-06-10T07:51:34Z<p>WikiSysop: </p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF100-101|LXF100 Январь 2008]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF74-75|LXF74-75 Январь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-06-10T07:48:01Z<p>WikiSysop: Добавлены номера 2008 года</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF74-75|LXF74-75 Январь 2005]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
* [[LXF100-101|LXF100 Январь 2008]]<br />
* [[LXF102|LXF102 Февраль 2008]]<br />
* [[LXF103|LXF103 Март 2008]]<br />
* [[LXF104|LXF104 Апрель 2008]]<br />
* [[LXF105|LXF105 Май 2008]]<br />
* [[LXF106|LXF106 Июнь 2008]]<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF83:PythonLXF83:Python2009-05-31T11:27:11Z<p>WikiSysop: Правки RicroAcdom (обсуждение) откачены к версии AmbientLight</p>
<hr />
<div>{{Цикл/Python}}<br />
<br />
== Работа с базами данных и web-программирование ==<br />
'' '''Часть 3''' Что может быть мощнее связки «база данных + интернет»? А если к этому добавить еще и Python... Чтобы почувствовать все это на практике, погрузимся сегодня в пучины SQL-запросов и HTTP-ответов вместе с '''Сергеем Супруновым'''.''<br />
<br />
Мы уже видели, что Python прекрасно подходит для работы с текстом. А что такое интернет-страницы, которые миллионы серверов Apache ежедневно миллиардами отдают на растерзание нашим браузерам? По сути, тот же текст, только немножко «гипер»... А значит, если нам нужно будет формировать html-страницу динамически, то Python прекрасно с этим справится. И никаких препятствий для разработки на нем CGI-сценариев не существует – web-серверу, по большому счету, безразлично, как именно выполняется скрипт и на каком языке он разработан: лишь бы он умел читать данные из потока ввода и переменных окружения да отдавать текст в стандартный выходной поток.<br />
<br />
Впрочем, если вы жаждете скорости, то к вашим услугам mod_Python, да и в режиме FastCGI Python работать умеет. Но сейчас у нас разговор все же не о настройках CGI, а о Python, так что вернемся к тому, ради чего мы эту статью начали.<br />
<br />
=== Постановка задачи ===<br />
С любым вопросом лучше всего разбираться на практическом примере. Поэтому мы будем «плясать» вокруг несложного и, в общем-то, достаточно банального CGI-приложения: гостевой книги. Заодно разберемся с тем, как Python взаимодействует с базами данных, где представляется разумным хранить все наши сообщения.<br />
<br />
Но прежде чем перейти к рассмотрению кода (вы найдете его целиком на нашем диске), полезно будет дать кое-какую вводную информацию.<br />
<br />
=== Универсальное «междумордье» CGI ===<br />
CGI (Common Gateway Interface, общий шлюзовой интерфейс) был разработан как средство взаимодействия HTTP-сервера с программами, которые могут запускаться в операционной системе. Если говорить упрощенно, то CGI, передавая управление такой программе (обычно их именуют cgi-сценариями, хотя это вполне может быть и двоичный файл, разработанный на C/C++), формирует для нее определенное окружение. В частности, параметры HTTP-запроса, полученного от клиента, могут помещаться в определенные переменные окружения или передаваться cgi-программе как аргументы или как входной поток (STDIN). В ответ HTTP-сервер ждет данные, которые cgi-программа должна выдать в стандартный выходной поток (STDOUT), и передает их клиенту.<br />
<br />
Таким образом, все, что требуется от cgi-программы, это способность получать необходимую для работы информацию из формируемой HTTP-сервером среды и возвращать ответные данные, соответствующие протоколу HTTP, чтобы web-клиент знал, что с ними делать.<br />
<br />
=== Учимся посылать ===<br />
Начнем с формирования HTTP-ответа. Чтобы браузер клиента мог его правильно обработать, он должен состоять из заголовка и тела, разделенных пустой строкой. В заголовке передается необходимая служебная информация, например, тип содержимого, его кодировка, указание браузеру запросить другой ресурс (так называемое перенаправление), и т.д. Простейший cgi-сценарий на языке Python может выглядеть так:<br />
<br />
<source lang="python"><br />
#!/usr/bin/Python<br />
# -*- coding: utf-8 -*-<br />
print 'Content-Type: text/html\n'<br />
print '<H3>Если вы это видите, значит все работает</H3>'<br />
</source><br />
<br />
Первым оператором print мы формируем минимально необходимый заголовок – браузер клиента обязательно должен знать, каков тип пересылаемых ему данных (в нашем случае это простой текст, соответствующий формату HTML). Не забывайте о дополнительном переводе строки \n, необходимом для отделения заголовка от тела ответа. Ну и далее вы можете передавать любой HTML-код.<br />
<br />
Аналогично могут передаваться любые объекты, поддерживаемые клиентом: изображения, звуковые файлы, css-таблицы и т.д. Главное, чтобы значение поля Content-Type (именуемое также MIME-типом) соответствовало содержимому.<br />
<br />
=== Здесь играть, здесь не играть... ===<br />
Однако какой смысл поручать формирование статических, по сути, страниц cgi-сценарию, если сам HTTP-сервер справится с этим намного лучше? В общем-то никакого. Разве что для общего развития... А вот в чем CGI по-настоящему силен, так это в формировании динамических страниц, содержимое которых зависит от информации, переданной пользователем.<br />
<br />
Протокол HTTP предусматривает несколько способов передачи информации от клиента на сервер, называемых методами. Наиболее популярные из них – GET, POST, PUT и HEAD.<br />
<br />
Метод GET позволяет вставлять информацию в URL, то есть в строку адреса запрашиваемого ресурса. Когда «Яндекс» вернет вам список искомых страниц, посмотрите на адресную строку в браузере – вот так данные и передаются методом GET. Кстати, обратите внимание на то, как все это кодируется, особенно если вы искали какое-то русское слово.<br />
<br />
Если на сервер требуется передать больший объем информации, или ее желательно скрыть от любопытных глаз, используется другой метод – POST. В данном случае в заголовке передается лишь размер пользовательских данных, а сами данные пересылаются в теле запроса.<br />
<br />
Метод PUT предназначается для размещения ресурсов на сервере и по соображениям безопасности практически не используется. Ну и, наконец, метод HEAD очень похож на GET, за тем исключением, что сервер в ответ на такой запрос возвращает не весь ресурс, а лишь информацию о нем, такую как дата последнего изменения, помещаемую в заголовке. Обычно используется прокси-серверами для определения «свежести» имеющихся у них данных – стоит ли запрашивать ресурс повторно или можно вернуть клиенту то, что есть в кэше.<br />
<br />
Определенная сложность для разработчика cgi-сценария заключается в том, что данные, отправленные различными методами, передаются в сценарий по-разному. Так, информация, поступившая с помощью POST, подается на стандартный вход сценария и может быть считана оттуда, например, с помощью sys.stdin.read(size) или даже функцией raw_input() (хотя во втором случае сложнее контролировать объем принимаемых данных). Количество байт, которые требуется считать, можно получить из переменной окружения CONTENT_LENGTH (например, так: size = os.environ['CONTENT_LENGTH']).<br />
<br />
Если клиент использует метод GET, то данные поступят в сценарий через переменную среды QUERY_STRING. Метод, которым данные переданы (нужно же как-то разобраться, где их искать) можно всегда получить из REQUEST_METHOD.<br />
<br />
Есть еще один особый случай. Если данные передаются методом GET, но с использованием «индексного» формата, который формируется тегом <ISINDEX>, то в этом случае они кодируются не в виде «переменная=значение&переменная=значение&...», а как «значение+значение+...». И cgi-сценарию они будут переданы, помимо QUERY_STRING, через аргументы командной строки, как если бы сценарий вызывался такой командой:<br />
<br />
script.cgi arg1 arg2 arg3<br />
<br />
То есть, на этот раз пользовательские данные можно будет получить как sys.argv[1] и т.д.<br />
<br />
Как видите, огромное число вариантов, предусмотренных CGI-интерфейсом, которые все должны быть учтены при разработке сценария, может вызвать нервный тик даже у опытных программистов, которые и во сне потихоньку набивают по подушке какой-то код. А если еще вспомнить, что данные передаются в закодированном виде (это англичанам хорошо – взял значение переменной и работай, а нам-то с вами это значение вернется в виде %EC%E4%E0), да еще и о проверке этих данных нужно позаботиться, чтобы какой-нибудь начинающий хакер не попытался заставить наш сервер работать по-своему... Нет, обо всем этом лучше и не вспоминать. Благо у нас есть модуль cgi, в котором все это уже сделано!<br />
<br />
Но о нем – чуть позже. Сначала пару слов нужно сказать о HTML-формах.<br />
<br />
=== Формируем формы ===<br />
Чтобы вам было проще понять рассматриваемый сегодня пример, коротко скажу про то, как же клиент выполняет передачу данных нашему cgi-сценарию. Конечно, продвинутые пользователи могут набрать GET-запрос вручную в адресной строке браузера. Хотя что мелочиться – ведь можно же сформировать и POST-запрос, подключившись телнетом на 80-й порт! Впрочем, обычные пользователи предпочитают более понятные и «осязаемые» способы, например, формы.<br />
<br />
Как они выглядят, думаю, каждый знает. Создаются они с помощью тега <FORM>, внутри которого добавляются такие элементы, как <INPUT> (поле ввода) или <TEXTAREA> (многострочный редактор). Этим элементам, если их данные должны быть переданы на сервер, присваиваются имена с помощью атрибута name. Начальное значение задается параметром value и в дальнейшем для «редактируемых» полей может быть изменено пользователем. Когда пользователь нажимает кнопку «Отправить» (надпись на ней, в принципе, можно изменить), то браузер объединяет все данные полей в пары name=value, разделяя их символом &. Затем полученная таким образом строка передается на сервер методом, указанным в атрибуте method тега <FORM>. Путь к сценарию, который будет заниматься ее обработкой, задается атрибутом action этого же тега. Если action не задан, то данные передаются файлу, сформировавшему текущую страничку.<br />
<br />
Если что-то не совсем понятно, обратитесь к коду разрабатываемой гостевой книги, который приведен ниже.<br />
<br />
=== Наш спаситель – модуль cgi ===<br />
Возвращаемся к обработке всего этого добра, которое сотни пользователей уже готовы обрушить на наш бедный сценарий. Мы решили воспользоваться стандартными средствами Python, и здесь все действительно очень просто – импортируйте модуль cgi и, создав объект класса FieldStorage, вы получите через него доступ ко всем данным, переданным пользователем, независимо от используемого метода:<br />
<br />
<source lang="python"><br />
import cgi<br />
data = cgi.FieldStorage()<br />
for entry in data.keys():<br />
print 'Переменная %s имеет значение %s' % (entry, data[entry].value)<br />
</source><br />
<br />
Если вам нужно получить значение определенного поля, это делается так:<br />
<br />
<source lang="python"><br />
field = data['field'].value<br />
</source><br />
<br />
Помимо пользовательских данных, объект класса FieldStorage содержит информацию и о полях заголовка (в нашем примере их можно получить из словаря data.headers). MIME-тип данных (передаваемый полем заголовка Content-Type) можно получить из атрибута data.type. Через этот же объект может быть выполнена и загрузка файла.<br />
<br />
С помощью методов keys() и has_key() можно выполнять обработку полученных данных в цикле и проверять наличие той или иной переменной. Кстати говоря, проверять наличие переменной во входных данных, прежде чем приступать к их обработке, нужно непременно – ведь запрос формируется клиентом, а кто знает, что у него на уме?<br />
<br />
=== Базируем данные ===<br />
Итак, получать данные от клиента мы научились. Отправлять тоже умеем. Осталось придумать, как эти данные лучше всего хранить. Конечно, для несложной гостевой книги с небольшой нагрузкой вполне хватило бы и текстовых файлов. Правда, там есть свои сложности – если сразу пять человек захотят высказать свое мнение о вашей крутейшей домашней страничке, то сценарию придется каким-то образом регулировать доступ к файлу-хранилищу (как минимум, обрабатывать ситуацию, если файл уже открыт на запись другим экземпляром сценария). Но зачем нам все эти головные боли? Если мы так ловко отвертелись от необходимости вручную разбирать HTTP-запросы, то неужели не найдем что-то подходящее на этот раз?<br />
<br />
Конечно, найдем! И это «что-то» называется системой управления базами данных (в просторечье – СУБД). Теперь наше дело – отправить запрос и получить ответ. Все остальное – уже не наша забота.<br />
<br />
Для этого примера я выбрал в качестве «ответственного» за хранение данных сервер баз данных PostgreSQL. Поскольку мы пишем ну очень простую гостевую книгу, то и структура базы будет у нас элементарной – одна таблица с тремя полями: время публикации сообщения, имя автора и, собственно, само сообщение:<br />
<br />
admin@toshiba:~$ psql<br />
Welcome to psql 8.1.4, the PostgreSQL interactive terminal.<br />
guestbook=# create user "www-data" nocreatedb nocreateuser;<br />
CREATE ROLE<br />
admin=# create database guestbook with owner "www-data";<br />
CREATE DATABASE<br />
admin=# \connect guestbook<br />
Вы подсоединились к базе данных "guestbook".<br />
guestbook=# create table guestbook (<br />
guestbook(# datum timestamp, author varchar, message varchar);<br />
CREATE TABLE<br />
guestbook=# alter table guestbook owner to "www-data";<br />
ALTER TABLE<br />
guestbook=# \q<br />
admin@toshiba:~$<br />
<br />
Пожалуй, единственное, что здесь нужно пояснить, это почему базе и таблице мы назначили владельцем пользователя www-data. Просто к ним будет обращаться cgi-сценарий, работающий с правами HTTP-сервера Apache, который, в свою очередь, исполняется от имени данного пользователя [в вашем дистрибутиве он может назваться по-другому, – прим. ред.]. А PostgreSQL по умолчанию требует, чтобы имя пользователя в БД совпадало с его системным именем. Мне это кажется достаточно удобным, хотя вы, конечно, можете поступить по-своему.<br />
<br />
=== DB API на страже унификации ===<br />
Осталось разобраться, как же Python взаимодействует с базами данных. Для этого Python предоставляет DB API – специальный интерфейс, унифицирующий набор методов, которые будут одинаково работать независимо от того, с какой СУБД мы взаимодействуем. Для работы с PostgreSQL нам понадобится модуль PyPgSQL (в стандартной поставке его может не оказаться, но ваш менеджер пакетов наверняка будет в курсе, как его установить; кстати, это не единственный модуль – у вас, возможно, будет PyGreSQL, который работает ничуть ни хуже и с теми же самыми методами).<br />
<br />
DB API определяет стандартные методы работы с базами данных, так что, какой бы модуль вы ни загрузили и с какой бы СУБД ни работали (будь то MySQL, PostgreSQL, SQLite или что-то еще), меняться будет только имя модуля. Главное, чтобы используемый модуль соответствовал DB API. Рассмотрим коротко основные методы:<br />
<br />
<source lang="python"><br />
conn = connect(dsn='localhost', user='admin', password='superparol', database='mydb')<br />
</source><br />
<br />
Так осуществляется подключение к базе. В зависимости от ситуации, вам может потребоваться указать только нужные параметры (например, имя хоста 'localhost' подразумевается по умолчанию).<br />
<br />
<source lang="python"><br />
cur = conn.cursor()<br />
</source><br />
<br />
Курсоры поддерживаются далеко не всеми СУБД, но для общности в DB API они введены и, в случае необходимости, должны эмулироваться модулями сопряжения искусственно. Так что не забывайте отправлять все ваши запросы через курсор.<br />
<br />
<source lang="python"><br />
cur.execute('''SELECT * FROM mytable''')<br />
</source><br />
<br />
Так выполняется SQL-запрос. Если в строке запроса используются знакоместа %s, то вторым параметром передается список переменных-значений, причем в SQL-запросе знакоместа не требуется окружать апострофами – модуль сделает это самостоятельно в зависимости от<br />
типа переменной.<br />
<br />
<source lang="python"><br />
cur.fetchall()<br />
</source><br />
<br />
Возвращает двумерный список (строки – поля) полученных от СУБД данных. Существуют и другие методы, ознакомиться с которыми вы сможете в документации или с помощью знакомой вам функции dir() да пары-тройки несложных экспериментов.<br />
<br />
=== Закрепляем на практике ===<br />
Перейдем к рассмотрению нашего примера. Начнем стандартно – укажем кодировку, подключим нужные модули:<br />
<br />
<source lang="python"><br />
#!/usr/bin/Python<br />
# -*- coding: utf-8 -*-<br />
import PyPgSQL.PgSQL as pg<br />
import cgi<br />
</source><br />
<br />
Далее, определим две функции. Первая будет отвечать за добавление нового сообщения в базу:<br />
<br />
<source lang="python"><br />
def addMessage(author, message):<br />
db = pg.connect(database="guestbook")<br />
c = db.cursor()<br />
c.execute("""INSERT INTO guestbook (datum, author, message) VALUES ('now', %s, %s);""", (author, message))<br />
c.close()<br />
db.commit()<br />
db.close()<br />
print "Content-Type: text/html"<br />
print "Location: ?#form\n"<br />
</source><br />
<br />
Как видите, все очень даже логично: устанавливаем соединение с БД (поскольку в нашем случае подключение выполняется с именем текущего системного пользователя, то достаточно указать только имя базы), создаем курсор (в PostgreSQL они не применяются, но они эмулируются каждым модулем, претендующим на соответствие DB API), выполняется запрос, закрывается курсор, фиксируются изменения (PostgreSQL использует транзакции, поэтому выполнение метода commit() обязательно, иначе ваши изменения не будут сохранены), и, наконец, закрываем само соединение с базой. В поле datum заносим значение встроенной переменной PostgreSQL – now, которая каждый раз заменяется текущим значением даты и времени.<br />
<br />
Ну и печать заголовка «Location» выполняется для того, чтобы перенаправить пользователя на этот же сценарий, но уже без параметров – мы же должны показать клиенту, что он на самом деле ввел? (Якорь #form используется, чтобы автоматически прокрутить страничку на последнее сообщение).<br />
<br />
Вторая функция будет отвечать за вывод на экран уже оставленныхв книге записей, а также за форму, с помощью которой можно будет добавить и свое высказывание:<br />
<br />
<source lang="python"><br />
def showGB():<br />
db = pg.connect(database="guestbook")<br />
c = db.cursor()<br />
c.execute("""SELECT datum, author, message FROM guestbook ORDER BY datum;""")<br />
res = c.fetchall()<br />
c.close()<br />
db.close()<br />
</source><br />
<br />
В этом фрагменте мы выбираем все строки из нашей таблицы данных, сортируя их по дате. Результат сохраняется в переменной res, с которой и будем работать. Теперь осталось лишь аккуратненько разложить наши данные по табличкам и вывести их на экран:<br />
<br />
<source lang="python"><br />
print "Content-Type: text/html\n"<br />
print "<H1 style='color:#7777FF'><U>Велькам к нам в гости!</U></H1>"<br />
for item in res:<br />
print """<TABLE width='90%%'><br />
<TR><TD><SMALL>Товарищ <B>%s</B> поведалнам следующее:</SMALL><br />
<TD align='right'><SMALL>%s</SMALL><br />
<TR><TD style='background-color:#DDDDFF' colspan='2'>%s<br />
</TABLE>""" % (item[1], str(item[0])[:19], item[2])<br />
print "<HR><A name='form'><H3>Присоединяйтесь к дискуссии:</H3>"<br />
print """<FORM method='GET'><br />
Ваше имя: <INPUT type='text' name='author'><BR><br />
Что вы думаете по этому поводу:<BR><br />
<TEXTAREA name='message' rows='5' cols='80'></TEXTAREA><BR><br />
<INPUT type='submit' value='Отправить'><br />
</FORM>"""<br />
</source><br />
<br />
<div id="img"></div><br />
[[Изображение:Img 83 81 1.png|thumb|Ни смайликов, ни BB-кода, ни даже логотипа... Зато мы сделали эту гостевую за 10 минут!]]<br />
<br />
Смысл конструкции str(item[0])[:19] заключается в том, чтобы в строке времени отсечь ненужные нам миллисекунды, которые сохраняются в поле типа timestamp. После всех опубликованных сообщений выводим форму добавления нового, чтобы каждый мог присоединиться к нашей дискуссии. Кстати, в теге <FORM> мы не указали параметр action, поскольку данные будут передаваться на обработку этому же сценарию (благодаря чему имя сценарию можно присвоить любое).<br />
Наконец, последний фрагмент:<br />
<br />
<source lang="python"><br />
form = cgi.FieldStorage()<br />
if form.has_key("message") and form.has_key("author"):<br />
author = cgi.escape(form["author"].value)<br />
message = cgi.escape(form["message"].value)<br />
message = message.replace("\n", "<BR>")<br />
addMessage(author, message)<br />
else:<br />
showGB()<br />
</source><br />
<br />
Создаем FieldStorage-объект, и если в нем есть заполненные поля message и author (то есть запрос был сформирован из заполненной пользователем формы), то, немножко их обработав (функция cgi.escape() заменяет все «неблагонадежные» символы – например, < – их стандартными SGML-сущностями, в данном случае – &lt;), передаем функции addMessage(). Обработка нужна для того, чтобы злоумышленник не мог ввести в поле сообщения или имени автора что-нибудь такое:<br />
<br />
<SCRIPT>alert('Да пошли вы все!');</SCRIPT><br />
<br />
К слову, пренебрегать проверкой введенных данных ни в коем случае нельзя. Зайдите как-нибудь на [http://securitylab.ru securitylab.ru] и посмотрите, сколько уязвимостей типа «XSS» обнаруживается каждый месяц! Так что шутки шутками, но последствия могут быть очень серьезными.<br />
<br />
=== Куда же нам теперь идти? ===<br />
Итак, что-то вполне работоспособное у нас есть (см. [[LXF83:Python#img|рисунок]]). Но как вы может догадаться, наша гостевая очень далека от совершенства. Что еще можно сделать? Ну, например, разбить на страницы. Пока сообщений в ней будет не больше дюжины, сойдет и так. А когда их число дойдет до сотни, то редкий пользователь дождется окончания загрузки всех данных. Можно дать пользователям возможность использовать некоторые HTML-теги, чтобы их сообщения выглядели более красочно. Можно добавить смайликов... А можно даже сделать модуль администрирования, позволяющий редактировать или удалять сообщения, а также отвечать на них. Так что работы непочатый край. Дерзайте – не буду вам мешать.<br />
<br />
=== Некоторые распространённые MIME-типы ===<br />
{| style="background:white;color:black;" border="1" cellspacing="0"<br />
|- style="background:#dfcfe6;color:black"<br />
! MIME-тип<br />
! Описание<br />
|-<br />
| text/plain<br />
| Простой текст<br />
|-<br />
| text/html<br />
| HTML-страница<br />
|-<br />
| image/gif<br />
| Изображение GIF<br />
|-<br />
| video/mpeg<br />
| Видео-файл в формате MPEG<br />
|-<br />
| application/msword <br />
| Документ MS Word<br />
|}</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF90:JavaEELXF90:JavaEE2009-05-31T11:26:36Z<p>WikiSysop: Правки LieleLtdom (обсуждение) откачены к версии Yaleks</p>
<hr />
<div>{{Цикл/Java EE}}<br />
== {{oncolor||red|Телефонная книга}}: переход на JSP ==<br />
''{{oncolor||red|ЧАСТЬ 2}} Встречают по одежке – и Большой Босс не был сильно впечатлен созданной нами в прошлый раз адресной книгой. '''Александр Бабаев''' исправляет замеченные недочеты.''<br />
<br />
__TOC__<br />
В прошлый раз мы создали простейшую электронную записную книжку. Она работает в браузере и показывает несколько простых страничек, на которых можно просмотреть список контактов, добавить новый контакт, удалить его или отредактировать. А сейчас давайте попробуем сделать все это более правильно.<br />
<br />
=== Почему было плохо? ===<br />
<br />
Действительно, почему? Работает, и хорошо. Достаточно быстро и не слишком сложно. Но вдруг захочется поменять дизайн страничек? А захочется через десять минут работы. Или после того, как страничку посмотрит начальник.<br />
<br />
Чтобы сделать это, можно изменить код проекта, потом перекомпилировать его, остановить сервер (А? Кто-то работал? Извините...), установить новый код и повторно запустить сервер. Метод, мягко говоря, неудобный. А можно изменить сам проект так, чтобы выполнение таких пожеланий не требовало столь сложных действий. Второй путь зовется рефакторингом и гораздо более корректен. Если разделить дизайн и логику работы приложения (бизнес-логику), то в дальнейшем можно будет, например, разделить и работу по их поддержанию. Хороший программист не всегда создает хорошие пользовательские интерфейсы, поэтому данный аспект тоже важен.<br />
<br />
=== Как сделать хорошо? ===<br />
<br />
Ну, вкратце уже понятно. Нужно вынести в отдельные файлы ту часть, которая меняется часто (в нашем случае, это интерфейс) и как-то подключить эти файлы из нашей программы. Плюс, желательно сделать это так, чтобы формат файлов «дизайна» был стандартным, чтобы каждый раз не переучиваться.<br />
<br />
Решений для данной проблемы существует множество. Рассмотрим самые распространенные:<br />
<br />
* '''Шаблоны.''' Одна из самых распространенных библиотек работы с шаблонами – ''Velocity''. При использовании шаблонных движков можно добавлять в текст специальные вставки, которые говорят: «Тут вставить значение переменной {{oncolor||red|Name}}». Иногда можно делать более сложные операции (вставка подшаблонов, вычисления, условные вставки).<br />
<br />
* '''JSP (Java Server Pages).''' По времени появления, пожалуй, первая технология для отделения дизайна от бизнес-логики. Но я ее поставил второй, так как она сложнее, чем просто шаблонная библиотека. JSP позволяет внедрить код на (по задумке) любом языке программирования внутрь специальным образом созданной странички. Впрочем, обычно используется Java. Теоретически, можно написать серверное приложение, используя исключительно JSP. Этот подход похож на PHP, с тем отличием, что JSP-страницы – это полноценные сервлеты, они компилируются при обновлении исходного текста и обрабатываются как таковые.<br />
<br />
* '''JSF (Java Server Faces).''' В некотором роде эта технология объединяет подходы, которые используются при создании «обычных» и «сетевых» программ. Интерфейс (как дизайн интерфейса, так и его логика) программы описывается специальным образом, а после этого пишутся JSP-странички, в которых указывается «тут вставить таблицу с именем таким-то». JSF обрабатывает эти спецвставки и «рисует» функциональные элементы интерфейса (обрабатывая события от них и так далее), позволяя дизайнеру сосредоточиться на остальном.<br />
<br />
* '''Google Web Toolkit.''' Не могу не остановиться на этом средстве. При его использовании на выходе получается полноценное AJAX-приложение (что это такое – тема отдельной статьи, пример – Google Mail), а на входе – все тот же Java-код. Решение интересное, не лишенное своих достоинств и недостатков.<br />
<br />
Мы же в рамках данной статьи рассмотрим «средненькое» решение – Java Server Pages. В основном – из-за его стандартности, хотя для данного конкретного случая можно выбрать какой-нибудь шаблонный движок, например, тот же Velocity (http://velocity.apache.org).<br />
<br />
=== Общая схема работы приложения ===<br />
<br />
Поняв, что нужно отделить логику от дизайна, давайте подумаем, каким образом это можно сделать. Предлагаю остановиться на следующей схеме - '''(Рис. 1)'''.<br />
<br />
Сервлет выдает данные, абсолютно не заботясь о том, как они будут отображаться. Но выдает он их не в «сыром» виде, а в полностью обработанном, готовом для отображения на экране (например, если нужно полное имя человека, а в данных – его ФИО по отдельности, то сервлет должен преобразовать второе в первое перед передачей в JSP).<br />
<br />
Возникает вопрос: как же передаются данные от сервлета в JSP? Через уже известный нам объект {{oncolor||red|request}}. К нему «прикручен» специальный ассоциативный массив «{{oncolor||red|String – Object}}», который называется атрибутами и который живет, пока жив запрос. К нему имеет доступ и сервлет, и JSP-страница, поэтому его можно (и это правильно) использовать для передачи данных.<br />
<br />
=== Переходим на Tomcat ===<br />
<br />
Но сначала нужно переписать наш сервлет «по-взрослому». Встроенный сервер – это замечательно для кустарных проектов, но обычно контейнер сервлетов уже стоит, и подключаться следует к нему.<br />
<br />
Мы будем использовать Tomcat 5.5. Это классический, можно даже сказать, стандартный открытый сервлет-контейнер. Для установки Tomcat достаточно просто скачать его с http://tomcat.apache.org (или взять с нашего DVD), распаковать и запустить '''bin/startup.sh''' (или соответсвующий '''.bat'''). ''Tomcat'' работает с файлами специального типа Web Archive (WAR). Обнаружив такой файл в определенном каталоге, Tomcat разворачивает его и запускает содержащееся в нем приложение. Чтобы перезапустить или обновить программу, достаточно просто заменить один WAR-файл другим.<br />
<br />
Предыдущий код не готов для работы с Tomcat, поэтому его нужно немного переписать. Вот что будет сделано:<br />
<br />
* '''{{oncolor||red|AddressBook}}''' потеряет методы {{oncolor||red|start}} и {{oncolor||red|main}} и превратится в простое хранилище записей.<br />
* '''{{oncolor||red|AddressBookHandler}}''' превратится в {{oncolor||red|AddressBookServlet}}, и в него будет добавлено примерно следующее '''(Листинг 1)''':<br />
<br />
'''{{oncolor||red|Листинг 1. Новый AddressBook}}'''<br />
<br />
private AddressBook _addressBook = null;<br />
<br />
public void init(ServletConfig aServletConfig) throws ServletException {<br />
super.init(aServletConfig);<br />
_addressBook = new AddressBook();<br />
}<br />
<br />
protected void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse)<br />
throws ServletException, IOException<br />
handle(aRequest, aResponse);<br />
}<br />
<br />
protected void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse)<br />
throws ServletException, IOException <br />
handle(aRequest, aResponse); <br />
}<br />
<br />
Сам метод {{oncolor||red|handle}} тоже слегка преобразуется '''(Листинг 2)''':<br />
<br />
'''{{oncolor||red|Листинг 2. Новый метод handle}}'''<br />
<br />
private void handle(HttpServletRequest aRequest, HttpServletResponse aResponse)<br />
throws ServletException, IOException {<br />
aRequest.setCharacterEncoding("utf-8");<br />
<br />
String target = aRequest.getRequestURI().substring(<br />
aRequest.getContextPath().length());<br />
<br />
if (target.equals("/")) {<br />
_drawer.outputPage("index.jsp", aRequest, aResponse);<br />
} else if ("/add".equals(target)) {<br />
handleAdd(aRequest, aResponse);<br />
} else if ("/view".equals(target)) {<br />
handleView(aRequest, aResponse);<br />
} else if ("/edit".equals(target)) {<br />
handleEdit(aRequest, aResponse);<br />
} else if ("/remove".equals(target)) {<br />
handleRemove(aRequest, aResponse);<br />
}<br />
}<br />
<br />
* Для того, чтобы Tomcat «понял», что ему положили сервлет, и знал, как его обрабатывать, нужно написать специальный файл, который называется «дескриптор». Несмотря на то, что слово страшное, это просто XML-документ с описанием сервлета. Если перевести с языка написания дескрипторов на русский, то получится примерно следующая информация:<br />
<br />
** Наш сервлет называется {{oncolor||red|«ABServlet»}} и запускается классом {{oncolor||red|AddressBookServlet}}. Теоретически можно назвать сервлет так же, как и класс, но мы не будем так делать, чтобы было меньше путаницы.<br />
<br />
** Для всех URL, которые начинаются с «/», нужно вызывать сервлет, который называется ABServlet.<br />
<br />
А вот как он выглядит '''(Листинг 3)''':<br />
<br />
'''{{oncolor||red|Листинг 3. Дескриптор для сервлета}}'''<br />
<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<web-app version="2.4"<br />
xmlns="http://java.sun.com/xml/ns/j2ee"<br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee<br />
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" ><br />
<br />
<servlet><br />
<display-name>AddressBook</display-name> <br />
<servlet-name>Servlet</servlet-name><br />
<servlet-class>AddressBookServlet</servlet-class><br />
<load-on-startup>0</load-on-startup><br />
</servlet><br />
<br />
<servlet-mapping><br />
<servlet-name>Servlet</servlet-name><br />
<url-pattern>/</url-pattern><br />
</servlet-mapping><br />
<br />
</web-app><br />
<br />
* Дескриптор будет называться '''web.xml''' и храниться в специальном каталоге. Где именно – обсудим, когда будем собирать сервлет в {{oncolor||red|WAR}}<br />
.<br />
Сделайте указанные изменения самостоятельно или возьмите гото-вый код с DVD. Все в порядке? Тогда движемся дальше.<br />
<br />
=== Новый метод ===<br />
<br />
Если присмотреться более внимательно к коду нового {{oncolor||red|handle}}, можно заметить, что там появился вызов метода {{oncolor||red|outputPage}}. Раньше его, в отличие от разных {{oncolor||red|handle}}... не было. Это метод, который выбирает JSP-файл и передает ему управление для вывода страничек. Выглядит метод следующим образом '''(Листинг 4)''':<br />
<br />
'''{{oncolor||red|Листинг 4. Метод outputPage}}'''<br />
<br />
public void outputPage(String aJSPName, HttpServletRequest aRequest, HttpServletResponse aResponse) throws IOException, ServletException<br />
{<br />
RequestDispatcher dispatcher = aRequest.getRequestDispatcher("/jsps/" + aJSPName);<br />
dispatcher.forward(aRequest, aResponse);<br />
}<br />
<br />
В этом методе мы берем нужный JSP-файл и говорим сервлет-контейнеру: «Обработай, пожалуйста». Остальное берет на себя контейнер. Он ищет JSP-файл, загружает его, компилирует (если это нужно), выполняет получившийся сервлет, а результат записывает в {{oncolor||red|aResponse}}.<br />
<br />
=== JSP-страницы ===<br />
<br />
Для начала создадим каталог, в котором будем собирать наше интернет-приложение. Назвать можно как угодно, например, {{oncolor||red|WebApp}} ({{oncolor||red|Web Application}}). В нем создадим специальный каталог '''WEB-INF''', где должен находиться дескриптор '''web.xml''', и каталог '''jsps''', в котором будут храниться JSP-странички.<br />
<br />
Создадим три JSP-файла: для индексной странички, для редактирования (или добавления) записей и для просмотра, и назовем их, соответственно, '''index.jsp''', '''edit.jsp''', '''view.jsp'''. Не забудьте – их нужно сохранить в в {{oncolor||red|WebApp/jsps}}.<br />
<br />
Сам JSP достаточно прост. Рассмотрим '''index.jsp''' '''(Листинг 5)''':<br />
<br />
'''{{oncolor||red|Листинг 5. index.jsp}}'''<br />
<br />
<nowiki><br />
<%@ page contentType="text/html; charset=UTF-8" %><br />
<html><br />
<head><br />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><br />
<title>Адресная книга</title><br />
</head><br />
<body><h1>Адресная книга</h1><br />
<a href="<%=request.getContextPath()%>/add">Добавить запись</a><br/><br />
<a href="<%=request.getContextPath()%>/view">Просмотреть записи</a><br/><br />
</body><br />
</html><br />
</nowiki><br />
<br />
Первая строчка добавляет поле «Content-type» к HTTP-заголовку ответа. Это прямой аналог строки<br />
<br />
aRequest.setContentType("text/html; charset=utf-8")<br />
<br />
из «старого» метода {{oncolor||red|handle}}. А дальше, кроме странных вставок {{oncolor||red|<%...%>}}, идет обычный HTML-код. И это хорошо! Это понятно! Теперь разберемся с непонятным.<br />
<br />
В JSP можно вставлять «инородный» для HTML код, который специальным образом интерпретируется сервером и может быть использован для вставки различных данных. Есть несколько типов таких вставок.<br />
<br />
* {{oncolor||red|<%@...%>}} – обозначает специальную вставку, которая определяет параметры страницы, в нашем случае – {{oncolor||red|ContentType}}. Можно задавать, например, язык, на котором написана страница. Он же используется для секций {{oncolor||red|import}} (см. '''view.jsp''' ниже).<br />
* {{oncolor||red|<%&#61;...%>}} – это простой вывод переменной. Действие вставки {{oncolor||red|<%&#61;что-нибудь%>}} аналогично вызову {{oncolor||red|request.getWriter().write(что-нибудь)}}.<br />
* {{oncolor||red|<%...%>}} – самый общий вариант вставки, внутри может быть любой код. В нашем случае, на Java.<br />
<br />
'''index.jsp''' – простой файл, посмотрим на нечто более сложное. Например, '''view.jsp''' '''(Листинг 6)'''.<br />
<br />
'''{{oncolor||red|Листинг 6. view.jsp}}'''<br />
<br />
<nowiki><br />
<%@ page contentType="text/html; charset=UTF-8" %><br />
<%@ page import="java.util.*" %><br />
<html><br />
<head><title>Адресная книга</title></head><br />
<body><h1>Адресная книга, список контактов</h1><br />
<a href="<%=request.getContextPath()%>">На главную</a><br/><br />
<span style="color: green;"><%=request.getAttribute("message")%></span><br />
<table border="1"><br />
<tr><td width="100">Имя</td><td width="100">Номер</td><td width="100">Комментарий</td><td> - </td></tr><br />
<% Map numbers = (Map) request.getAttribute("numbers");<br />
Map comments = (Map) request.getAttribute("comments");<br />
for (Object entry : numbers.entrySet()) {<br />
String name = (String) ((Map.Entry) entry).getKey();<br />
String number = (String) numbers.get(name);<br />
String comment = (String) comments.get(name); %><br />
<tr><br />
<td class="name"><%=name%></td><br />
<td class="number"><%=number%></td><br />
<td class="comment"><%=comment%></td><br />
<td class="name"><br />
<a href="<%=request.getContextPath()%>/remove?number=<%=number%>">Удалить</a><br />
<a href="<%=request.getContextPath()%>/edit?number=<%=number%>">Редактировать</a><br />
</td><br />
</tr><br />
<% } %><br />
</table><br />
</body><br />
</html><br />
</nowiki><br />
<br />
Как можно заметить, здесь есть и импорт (о чем я говорил чуть выше), и вставка Java-кода. Данный файл отлично показывает, как, например (не самый лучший способ, конечно), сделать вывод в цикле.<br />
<br />
=== А как это обрабатывается-то? ===<br />
<br />
Естественно, и методы {{oncolor||red|handle}}... после такого изменения стали другими. Весь вывод HTML-кода исчез, осталась подготовка данных, и вызов метода {{oncolor||red|outputPage}}. Вот, например, метод {{oncolor||red|handleEdit(...)}} '''(Листинг 7)''':<br />
<br />
'''{{oncolor||red|Листинг 7. Метод handleEdit, обработка редактирования записи}}'''<br />
<br />
if (aRequest.getParameter("number") == null) {<br />
_addressBook.removeContactByNumber(aRequest.getParameter("number"));<br />
aRequest.setAttribute("message", "Не определено, что редактировать");<br />
handleView(aRequest, aResponse);<br />
} else if (aRequest.getParameter("edited") != null) {<br />
_addressBook.editContact(aRequest.getParameter("edited"), <br />
aRequest.getParameter("name"), <br />
aRequest.getParameter("number"),<br />
aRequest.getParameter("comment"));<br />
aRequest.setAttribute("message", "Контакт \"" +<br />
aRequest.getParameter("name") + "\" отредактирован");<br />
handleView(aRequest, aResponse); <br />
} else {<br />
Contact contact = _addressBook.getContactByNumber(aRequest.getParameter("number"));<br />
aRequest.setAttribute("action", "edit");<br />
aRequest.setAttribute("edit.name", contact.getName());<br />
aRequest.setAttribute("edit.number", contact.getNumber());<br />
aRequest.setAttribute("edit.comment", contact.getComment());<br />
outputPage("edit.jsp", aRequest, aResponse);<br />
}<br />
<br />
Остальные методы меняются аналогично – их [[Media:Archive.tar.bz2|полный код]] можно найти на диске.<br />
<br />
=== И как все это вставить в Tomcat? ===<br />
<br />
Теперь у нас есть:<br />
<br />
* Классы {{oncolor||red|Contact}}, {{oncolor||red|AddressBook}}, {{oncolor||red|AddressBookServlet}}.<br />
* Файл '''web.xml'''.<br />
* Каталог '''jsps''' с файлами '''edit.jsp''', '''index.jsp''', '''view.jsp'''.<br />
<br />
Для того, чтобы Tomcat понял, что ему дали полноценное приложение, нужно выполнить всего три шага:<br />
<br />
* Скомпилировать все, что компилируется, и создать правильную иерархию файлов и каталогов, которая представлена '''на рис. 2'''.<br />
* Создать специальный файл-описание архива («манифест»).<br />
* Заархивировать созданную структуру при помоци утилиты ''jar'', входящей в комплект JDK.<br />
<br />
Скомпилируем файлы. Тут ничего нового не появилось, разве что изменилась сама команда (обратите внимание на ключ {{oncolor||red|-cp}}, задающий библиотеки {{oncolor||red|classpath}}):<br />
<br />
cd ~/Programming/AddressBook/src<br />
javac -encoding utf-8 -cp ~/bin/tomcat/common/lib/servlet-api.jar -d ../build/WEB-INF/classes/ *.java<br />
<br />
Переходим к созданию манифеста. Он должен называться '''MANIFEST.MF''' и располагаться в каталоге '''META-INF'''. К счастью, за этим следит сам '''jar''', поэтому нам достаточно просто сохранить где-то файл и указать его '''jar''''у как манифест. В нашем случае он предельно прост и не содержит интересной информации, но в принципе здесь могут располагаться всякие настройки для запуска вашего приложения. Вот его текст '''(Листинг 8)''':<br />
<br />
'''{{oncolor||red|Листинг 8. Манифест для war-файла}}'''<br />
<br />
Manifest-Version: 1.0<br />
Created-By: Hands of programmer<br />
<br />
Теперь соберем все в {{oncolor||red|war}} (Web Archive). Манифест для приведенной ниже команды должен быть назван '''MANIFEST.MF''' и располагаться рядом с каталогом '''build'''. Результирующий архив называется '''address.war''' и располагается там же, рядом с манифестом.<br />
<br />
jar -cfm ../address.war ../MANIFEST.MF *<br />
<br />
А сейчас наступает самый волшебный момент! Возьмите '''address.war''' и положите его в каталог webapps Tomcat'а. Подождите несколько секунд. Увидев новое приложение, Tomcat развернет его (появляется каталог с именем вашего war'а) и подключит к системе. После этого можно просто зайти в браузер и набрать:<br />
<br />
http://localhost:8080/address/<br />
<br />
Вуаля, получите ваше приложение.<br />
<br />
=== И что теперь? ===<br />
<br />
А теперь можно менять JSP-файлы «на лету» в распакованном каталоге '''webapps/address/jsps'''. При этом будет автоматически происходить несколько действий, в результате которых файлы подхватятся приложением. Так меняется дизайн без перекомпиляции, без рестарта серверного приложения, как это у нас было до сих пор.<br />
<br />
Я считаю, что на данном этапе приложение «Адресная книга» работает хорошо. Оно выполняет свои несложные функции и умеет изменяться «на лету» по запросу пользователя. Оно простое – и это чуть ли не самое главное. Но есть еще достаточно аспектов, о которых стоит знать при разработке более сложных интернет-приложений. Мы рассмотрим их в следующих статьях данной серии. [http://www.linuxformat.ru LXF]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/MediaWiki:Common.jsMediaWiki:Common.js2009-05-26T07:37:02Z<p>WikiSysop: </p>
<hr />
<div>/* Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице */<br />
<br />
var auto_comment = 0;<br />
<br />
if (document.URL.indexOf('action=edit') > 0 || document.URL.indexOf('action=submit') > 0) {<br />
if (wgCanonicalNamespace != 'Special') {<br />
document.write('<script type="text/javascript" src="http://ru.wikipedia.org/w/index.php' +<br />
'?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');<br />
}<br />
}<br />
<br />
if (mwCustomEditButtons) {<br />
mwCustomEditButtons[mwCustomEditButtons.length] = {<br />
"imageFile": "/skins/common/images/button_insert_table.png",<br />
"speedTip": "Insert table (3 by 3)",<br />
"tagOpen": "{|",<br />
"tagClose": "|}",<br />
"sampleText": "class=wikitable border=1 cellpadding=5\<br />
|+ table name\<br />
|-\<br />
! header 1\<br />
! header 2\<br />
! header 3\<br />
|-\<br />
| row 1, cell 1\<br />
| row 1, cell 2\<br />
| row 1, cell 3\<br />
|-\<br />
| row 2, cell 1\<br />
| row 2, cell 2\<br />
| row 2, cell 3\<br />
|-"}<br />
}</div>WikiSysophttp://wiki.linuxformat.ru/wiki/MediaWiki:Common.jsMediaWiki:Common.js2009-05-26T07:36:38Z<p>WikiSysop: </p>
<hr />
<div>/* Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице */<br />
<br />
var auto_comment = 0;<br />
<br />
if (document.URL.indexOf('action=edit') > 0 || document.URL.indexOf('action=submit') > 0) {<br />
if (wgCanonicalNamespace != 'Special') {<br />
document.write('<script type="text/javascript" src="http://ru.wikipedia.org/w/index.php' +<br />
'?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');<br />
}<br />
}<br />
<br />
if (mwCustomEditButtons) {<br />
mwCustomEditButtons[mwCustomEditButtons.length] = {<br />
"imageFile": "/skins/common/images/button_insert table.png",<br />
"speedTip": "Insert table (3 by 3)",<br />
"tagOpen": "{|",<br />
"tagClose": "|}",<br />
"sampleText": "class=wikitable border=1 cellpadding=5\<br />
|+ table name\<br />
|-\<br />
! header 1\<br />
! header 2\<br />
! header 3\<br />
|-\<br />
| row 1, cell 1\<br />
| row 1, cell 2\<br />
| row 1, cell 3\<br />
|-\<br />
| row 2, cell 1\<br />
| row 2, cell 2\<br />
| row 2, cell 3\<br />
|-"}<br />
}</div>WikiSysophttp://wiki.linuxformat.ru/wiki/MediaWiki:Common.jsMediaWiki:Common.js2009-05-26T07:35:32Z<p>WikiSysop: Added "Insert table" button to the toolbar</p>
<hr />
<div>/* Размещённый здесь код JavaScript будет загружен всем пользователям при обращении к какой-либо странице */<br />
<br />
var auto_comment = 0;<br />
<br />
if (document.URL.indexOf('action=edit') > 0 || document.URL.indexOf('action=submit') > 0) {<br />
if (wgCanonicalNamespace != 'Special') {<br />
document.write('<script type="text/javascript" src="http://ru.wikipedia.org/w/index.php' +<br />
'?title=MediaWiki:Onlyifediting.js&action=raw&ctype=text/javascript&dontcountme=s"></script>');<br />
}<br />
}<br />
<br />
if (mwCustomEditButtons) {<br />
<br />
mwCustomEditButtons[mwCustomEditButtons.length] = {<br />
"imageFile": "/skins/common/images/button_insert table.png",<br />
"speedTip": "Insert table (3 by 3)",<br />
"tagOpen": "{|",<br />
"tagClose": "|}",<br />
"sampleText": "class=wikitable border=1 cellpadding=5<br />
|+ table name<br />
|-<br />
! header 1<br />
! header 2<br />
! header 3<br />
|-<br />
| row 1, cell 1<br />
| row 1, cell 2<br />
| row 1, cell 3<br />
|-<br />
| row 2, cell 1<br />
| row 2, cell 2<br />
| row 2, cell 3<br />
|-"}<br />
}</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF79:%D0%A3%D0%BE%D1%80%D1%80%D0%B5%D0%BD_%D0%92%D1%83%D0%B4%D1%84%D0%BE%D1%80%D0%B4LXF79:Уоррен Вудфорд2009-05-17T13:51:53Z<p>WikiSysop: </p>
<hr />
<div>__NOTOC__<br />
'''''Уоррен Вудфорд (Warren Woodford)''', архитектор SimplyMepis, объясняет свой новый подход к Linux.''<br />
<br />
'''Linux Format''': Что заставило Вас начать работу над Mepis?<br />
<br />
{{Шаблон:Врезка|<br />
Заголовок=Визитка LXF|<br />
Содержание=Уоррен Вудфорд<br />
<br />
[[Изображение:Woodford.jpg]]<br />
<br />
Родом из Западной Вирджинии, Уоррен работал в различных IT-проектах, а в 2002-м вложил все время и деньги в Mepis, взяв за логотип модный египетский иероглиф.<br />
<br />
* Возраст 57<br />
<br />
* Национальность Американец<br />
<br />
* Опыт работы в Unix 4<br />
<br />
* Языки программирования 15<br />
<br />
* Количество ПК 7<br />
<br />
* Дневная норма кофе 1 чашка<br />
<br />
* Пар сандалий 0<br />
<br />
* Прямая речь: «Это просто факт из жизни что американские покупатели предпочитают покупать американские продукты»|<br />
Ширина=30%}}<br />
<br />
'''Уоррен Вудфорд (УВ)''': Прежде всего, я искал платформу для личного использования, надежную и интуитивно понятную для меня. Первой в моем списке была Next OS, а второй – нечто от фирмы Xerox. Решая, на какой платформе я мог бы создать что-то новое и прекрасное, я подумал: «Это может быть Linux». И я дожидался выхода версии Linux, соответствующей моим минимальным требованиям. После выхода KDE 2.2 или около этого времени я сказал: «Эта оконная система обладает достаточным потенциалом», а консоль Linux уже обладала потенциалом.<br />
<br />
Теперь – нужен кто-то для создания хорошего дистрибутива. И Red Hat казался худшим кандидатом, так как у них нет концепции «настольного компьютера» – добившись финансирования и известности, они сфокусировались на сервере, у сервера больший потенциал в смысле денег, и я не обвиняю их за это. Но вся их корпоративная культура разработана и построена вокруг идеи использования серверов. Они явно не имели хорошего понимания, чего хотят обычные пользователи. И я исключил их из уравнения.<br />
<br />
'''LXF''': А как насчет SUSE?<br />
<br />
'''УВ''': SUSE всегда казался мне незаконченным. Он какой-то художественный. Не то что он технически неправилен, просто он в дисгармонии со мной; он не кажется мне однородным, он не кажется интуитивно понятным для меня. Я чувствовал, что у него другая культура, и для меня это был не идеал. Так что я возложил все свои надежды на Mandrake. И продолжал возлагать надежды на Mandrake, но они никогда не делали то, что, как мне казалось, следует сделать. Им всегда чего-то нехватало, и нехватало из-за недостатка внимания к деталям или недостатка внимания к качеству.<br />
<br />
В сентябре/октябре 2002 вышла новая версия Mandrake, и с ней имели место две фатальные ошибки, сказавшие мне, что Mandrake никогда не преодолеет недостатки своей культуры и не создаст продукт, отвечающий моим стандартам. Одной [из ошибок] было то, что человек, отвечавший за формирование ISO-образов, три месяца спорил с сообществом тестеров: действительно ли какой-то из ISO-образов слишком велик, чтобы его можно было прожечь на большинстве компьютеров. Образ просто был на пределе стандартного CD емкостью 700 МБ, и этот парень высокомерно заявлял: «Вы не правы, а прав я, все вмещается». Но неправ был он сам. Множество людей сообщили, что не могут прожечь ISO-образы.<br />
Другая ошибка – после четырех бетаверсий и, я уверен, четырех релиз-кандидатов, за два дня до выпуска финальной версии они изменили automount и вывели его из строя более чем на два месяца, а сами тем временем спорили с сообществом тестеров, знает ли сообщество, о чем говорит, когда сообщает о проблеме.<br />
<br />
Вот в это время, я точно помню – 21 ноября 2002, я и принял решение создать свой собственный дистрибутив. Я не знал, в каком направлении пойдет развитие и что получится. Я поделился этим с несколькими людьми, и все они назвали меня сумасшедшим, потому что и без меня были сотни различных дистрибутивов. Но на тот момент у меня не было выбора.<br />
<br />
'''LXF''': Что оттолкнуло вас от работы с Mandrake?<br />
<br />
'''УВ''': По большей части это был весь мой опыт работы в Кремниевой Долине, где я работал консультантом, приходя и налаживая технологические подразделения, неспособные выпустить продукт – [фирмы] имели фатальные ошибки в своей инженерной философии. Я видел, что Mandrake испытывает те же трудности, что и фирмы, с которыми я работал до этого. Я чувствовал, что никогда не ликвидирую эти проблемы. Вот я и создал свой собственный дистрибутив, потому что решил: «Для моего дистрибутива есть место, никто не делает то, что хочу сделать я, и может быть, другим людям это тоже понравится. Попробую и посмотрю, что получится.»<br />
<br />
'''LXF''': А откуда взялось имя Mepis?<br />
<br />
'''УВ''': Ну, как-то мы с другом хотели создать софтверную фирму в Париже, и по поводу названия у нас возникло недопонимание, так как я не мог понять его очень сильный французский акцент. Я подумал, что он сказал Mepis [Уоррен произносит это как «Меп-с»], а я не понял, но тут обнаружил, что Mepis является комбинацией пяти букв, которая еще нигде не использовалась и потому была невероятно хорошим названием для продукта. Я ухватился за это имя и остановился на нем, и когда пришло время, я сказал: «ОК, у меня нет времени на маркетинг, я хочу просто сделать это», – и я вновь использовал имя Mepis [теперь он произносит «М-пис»].<br />
<br />
Я осознавал, что Mepis можно использовать как аббревиатуру. Например, сегодня это может быть Моя Экстраординарная Персональная Информационная Система. Вероятно, оно никогда не будет означать что-либо, но вполне может.<br />
<br />
'''LXF''': Итак, вы взяли Mandrake и хотели его исправить?<br />
<br />
'''УВ''': Нет, начал я с Debian. Я был под большим впечатлением от LiveCD [Knoppix] Клауса Кноппера (Klaus Knopper). Мне казалось, что никто не осознает возможности LiveCD; о его назначении думали очень узко. Итак, для начала я создал дистрибутив на базе Debian с заимствованиями из работы Клауса. Я создал версию Linux, в которой вы могли делать все что угодно с LiveCD, как если бы он был установлен на жестком диске. Не ограниченный, не модифицированный, а абсолютно стандартный запуск, абсолютно стандартный рабочий стол. И ух ты, что если создать и установщик как обычное приложение? Прекратить практику создания установщика как специального режима загрузки системы. Запуск LiveCD – это уже нечто новое. Сначала вы проводите тест-драйв Linux, то есть пробуете его, и он работает так, как работал бы после установки. Очевидно, что некоторые вещи работать не будут, так как нет файловой системы с возможностью записи, но вы можете испробовать многое из доступного. Итак, LiveCD – это прекрасно, но мы не называем наш диск LiveCD: мы называем его загрузочным CD для испытания и принятия решения, потому что некоторые люди, пытаясь сообразить, что такое Mepis, классифицируют его как LiveCD и упускают множество того, что он реально предоставляет.<br />
<br />
Второй момент: почему бы не иметь графический установщик, запускать его с LiveCD и устанавливать Mepis, если вы убедились, что он вам подходит? Мы сделали это. Третий момент: уж если имеется такое графическое окружение, почему бы не добавить к имеющемуся набору несколько инструментов, необходимых для обслуживания системы, восстановления при ошибках? Например, вы – любитель, запутались в настройках файловой системы и больше не можете загрузиться. Почему бы не иметь возможность загрузиться с CD и запустить небольшую утилиту, которая переустановит для вас X? Мы включили инструменты подобного типа.<br />
<br />
'''LXF''': Когда вы выбрали Debian, вас заботило, что и другие поставщики разрабатывали его и потерпели неудачу?<br />
<br />
'''УВ''': Я думаю, что основной трудностью для любого дистрибутива является балансирование между нуждами больших коммерческих потребителей и попытками удержаться в сообществе разработчиков Open Source, от которого все зависят и которому все благодарны. Некоторые [члены сообщества] словно живут в параллельной вселенной – они считают, что все должны вести себя так, как будто сейчас XXIV век и у всех все есть, так что можно просто отдать все планете и все будет прекрасно. Но реальность такова, что люди, посвящающие свое время Open Source, должны кушать и иметь крышу над головой, так что подход полного социализма Star Trek – это прекрасный идеал, но не реальность. Есть такие люди, а есть прагматики, считающие «Эй, люди должны зарабатывать себе на жизнь». Мы прикладываем все усилия, чтобы отметить вклад тех, кто выполняет работу по личным причинам, и стараемся не обидеть и сообщество.<br />
<br />
'''LXF''': Как вы думаете, Mepis приживется на рынке среди таких соперников, как Ubuntu?<br />
<br />
'''УВ''': Похоже, что Ubuntu все взял от Debian и поставил на этом свое имя, а также нанял несколько людей с намерением сделать ответвление от Debian. Об этом вряд ли есть хоть какие-то официальные заявления Ubuntu, но мне это совершенно ясно; их подход в том, чтобы сперва взять все что можно из Debian, налепить свой ярлык и мощным маркетингом вывести дистрибутив на арену... затем попытаться вернуться назад и сделать что-нибудь уникальное на закуску, чтобы можно было сказать: «Это действительно наше, а не унаследованное от Debian». И мне кажется, это одна из лучших стратегий большого бизнеса. Я думаю, есть пуристы, которым это не нравится, но хороший, расчетливый и твердый бизнес вполне имеет смысл. «Эй, здесь что-то дают, ну так возьмем. Подпишем свое имя, это позволено. Вложим много денег в маркетинг и получим большое признание нашей марки». Тут есть логика.<br />
<br />
В данный момент, Ubuntu и Mepis никак не сталкиваются друг с другом, разве что Ubuntu налаживает мосты к Hewlett Packard в Европе, и я не знаю, будем мы соперничать с ним в этом или нет. А так мы вообще не сталкиваемся друг с другом. Я видел только одного человека во всем мире, которому нравится Ubuntu, и тот сказал, что не взял бы его для своей фирмы, он нравится ему лично.<br />
<br />
Как серверный вариант, Ubuntu представляет слишком много около-Debian философии вроде «Из этого супер-универсального меню вы можете получить все на свете». Наш серверный продукт [SoHo Server] похож на наш настольный продукт: установите его, и все – можете работать. Что хорошо и что плохо, мы решим за вас.<br />
<br />
А если вы пришли с Windows, вам это и нужно. Зачем становиться экспертом в Linux, чтобы знать, что установить? Нужна хорошая и легкая отправная точка, чтонибудь, с чем вы сможете работать прямо сейчас. Затем вы можете потихоньку изучать что захотите, и настроите систему, как вам нравится.<br />
<br />
[[Категория:Интервью]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF79:%D0%A3%D0%BE%D1%80%D1%80%D0%B5%D0%BD_%D0%92%D1%83%D0%B4%D1%84%D0%BE%D1%80%D0%B4LXF79:Уоррен Вудфорд2009-05-17T13:51:18Z<p>WikiSysop: </p>
<hr />
<div>__NOTOC__<br />
'''''Уоррен Вудфорд (Warren Woodford)''', архитектор SimplyMepis, объясняет свой новый подход к Linux.''<br />
<br />
'''Linux Format''': Что заставило Вас начать работу над Mepis?<br />
<br />
{{Шаблон:Врезка|<br />
Заголовок=Визитка LXF|<br />
Содержание=Уоррен Вудфорд<br />
<br />
[[Изображение:Woodford.jpg]]<br />
<br />
Родом из Западной Вирджинии, Уоррен работал в различных IT-проектах, а в 2002-м вложил все время и деньги в Mepis, взяв за логотип модный египетский иероглиф.<br />
<br />
* Возраст 57<br />
<br />
* Национальность Американец<br />
<br />
* Опыт работы в Unix 4<br />
<br />
* Языки программирования 15<br />
<br />
* Количество ПК 7<br />
<br />
* Дневная норма кофе 1 чашка<br />
<br />
* Пар сандалий 0<br />
<br />
* Прямая речь: «Это просто факт из жизни что американские покупатели предпочитают покупать американские продукты»|<br />
Ширина=30%}}<br />
<br />
'''Уоррен Вудфорд (УВ)''': Прежде всего, я искал платформу для личного использования, надежную и интуитивно понятную для меня. Первой в моем списке была Next OS, а второй – нечто от фирмы Xerox. Решая, на какой платформе я мог бы создать что-то новое и прекрасное, я подумал: «Это может быть Linux». И я дожидался выхода версии Linux, соответствующей моим минимальным требованиям. После выхода KDE 2.2 или около этого времени я сказал: «Эта оконная система обладает достаточным потенциалом», а консоль Linux уже обладала потенциалом.<br />
<br />
Теперь – нужен кто-то для создания хорошего дистрибутива. И Red Hat казался худшим кандидатом, так как у них нет концепции «настольного компьютера» – добившись финансирования и известности, они сфокусировались на сервере, у сервера больший потенциал в смысле денег, и я не обвиняю их за это. Но вся их корпоративная культура разработана и построена вокруг идеи использования серверов. Они явно не имели хорошего понимания, чего хотят обычные пользователи. И я исключил их из уравнения.<br />
<br />
'''LXF''': А как насчет SUSE?<br />
<br />
'''УВ''': SUSE всегда казался мне незаконченным. Он какой-то художественный. Не то что он технически неправилен, просто он в дисгармонии со мной; он не кажется мне однородным, он не кажется интуитивно понятным для меня. Я чувствовал, что у него другая культура, и для меня это был не идеал. Так что я возложил все свои надежды на Mandrake. И продолжал возлагать надежды на Mandrake, но они никогда не делали то, что, как мне казалось, следует сделать. Им всегда чего-то нехватало, и нехватало из-за недостатка внимания к деталям или недостатка внимания к качеству.<br />
<br />
В сентябре/октябре 2002 вышла новая версия Mandrake, и с ней имели место две фатальные ошибки, сказавшие мне, что Mandrake никогда не преодолеет недостатки своей культуры и не создаст продукт, отвечающий моим стандартам. Одной [из ошибок] было то, что человек, отвечавший за формирование ISO-образов, три месяца спорил с сообществом тестеров: действительно ли какой-то из ISO-образов слишком велик, чтобы его можно было прожечь на большинстве компьютеров. Образ просто был на пределе стандартного CD емкостью 700 МБ, и этот парень высокомерно заявлял: «Вы не правы, а прав я, все вмещается». Но неправ был он сам. Множество людей сообщили, что не могут прожечь ISO-образы.<br />
Другая ошибка – после четырех бетаверсий и, я уверен, четырех релиз-кандидатов, за два дня до выпуска финальной версии они изменили automount и вывели его из строя более чем на два месяца, а сами тем временем спорили с сообществом тестеров, знает ли сообщество, о чем говорит, когда сообщает о проблеме.<br />
<br />
Вот в это время, я точно помню – 21 ноября 2002, я и принял решение создать свой собственный дистрибутив. Я не знал, в каком направлении пойдет развитие и что получится. Я поделился этим с несколькими людьми, и все они назвали меня сумасшедшим, потому что и без меня были сотни различных дистрибутивов. Но на тот момент у меня не было выбора.<br />
<br />
'''LXF''': Что оттолкнуло вас от работы с Mandrake?<br />
<br />
'''УВ''': По большей части это был весь мой опыт работы в Кремнеивой Долине, где я работал консультантом, приходя и налаживая технологические подразделения, неспособные выпустить продукт – [фирмы] имели фатальные ошибки в своей инженерной философии. Я видел, что Mandrake испытывает те же трудности, что и фирмы, с которыми я работал до этого. Я чувствовал, что никогда не ликвидирую эти проблемы. Вот я и создал свой собственный дистрибутив, потому что решил: «Для моего дистрибутива есть место, никто не делает то, что хочу сделать я, и может быть, другим людям это тоже понравится. Попробую и посмотрю, что получится.»<br />
<br />
'''LXF''': А откуда взялось имя Mepis?<br />
<br />
'''УВ''': Ну, как-то мы с другом хотели создать софтверную фирму в Париже, и по поводу названия у нас возникло недопонимание, так как я не мог понять его очень сильный французский акцент. Я подумал, что он сказал Mepis [Уоррен произносит это как «Меп-с»], а я не понял, но тут обнаружил, что Mepis является комбинацией пяти букв, которая еще нигде не использовалась и потому была невероятно хорошим названием для продукта. Я ухватился за это имя и остановился на нем, и когда пришло время, я сказал: «ОК, у меня нет времени на маркетинг, я хочу просто сделать это», – и я вновь использовал имя Mepis [теперь он произносит «М-пис»].<br />
<br />
Я осознавал, что Mepis можно использовать как аббревиатуру. Например, сегодня это может быть Моя Экстраординарная Персональная Информационная Система. Вероятно, оно никогда не будет означать что-либо, но вполне может.<br />
<br />
'''LXF''': Итак, вы взяли Mandrake и хотели его исправить?<br />
<br />
'''УВ''': Нет, начал я с Debian. Я был под большим впечатлением от LiveCD [Knoppix] Клауса Кноппера (Klaus Knopper). Мне казалось, что никто не осознает возможности LiveCD; о его назначении думали очень узко. Итак, для начала я создал дистрибутив на базе Debian с заимствованиями из работы Клауса. Я создал версию Linux, в которой вы могли делать все что угодно с LiveCD, как если бы он был установлен на жестком диске. Не ограниченный, не модифицированный, а абсолютно стандартный запуск, абсолютно стандартный рабочий стол. И ух ты, что если создать и установщик как обычное приложение? Прекратить практику создания установщика как специального режима загрузки системы. Запуск LiveCD – это уже нечто новое. Сначала вы проводите тест-драйв Linux, то есть пробуете его, и он работает так, как работал бы после установки. Очевидно, что некоторые вещи работать не будут, так как нет файловой системы с возможностью записи, но вы можете испробовать многое из доступного. Итак, LiveCD – это прекрасно, но мы не называем наш диск LiveCD: мы называем его загрузочным CD для испытания и принятия решения, потому что некоторые люди, пытаясь сообразить, что такое Mepis, классифицируют его как LiveCD и упускают множество того, что он реально предоставляет.<br />
<br />
Второй момент: почему бы не иметь графический установщик, запускать его с LiveCD и устанавливать Mepis, если вы убедились, что он вам подходит? Мы сделали это. Третий момент: уж если имеется такое графическое окружение, почему бы не добавить к имеющемуся набору несколько инструментов, необходимых для обслуживания системы, восстановления при ошибках? Например, вы – любитель, запутались в настройках файловой системы и больше не можете загрузиться. Почему бы не иметь возможность загрузиться с CD и запустить небольшую утилиту, которая переустановит для вас X? Мы включили инструменты подобного типа.<br />
<br />
'''LXF''': Когда вы выбрали Debian, вас заботило, что и другие поставщики разрабатывали его и потерпели неудачу?<br />
<br />
'''УВ''': Я думаю, что основной трудностью для любого дистрибутива является балансирование между нуждами больших коммерческих потребителей и попытками удержаться в сообществе разработчиков Open Source, от которого все зависят и которому все благодарны. Некоторые [члены сообщества] словно живут в параллельной вселенной – они считают, что все должны вести себя так, как будто сейчас XXIV век и у всех все есть, так что можно просто отдать все планете и все будет прекрасно. Но реальность такова, что люди, посвящающие свое время Open Source, должны кушать и иметь крышу над головой, так что подход полного социализма Star Trek – это прекрасный идеал, но не реальность. Есть такие люди, а есть прагматики, считающие «Эй, люди должны зарабатывать себе на жизнь». Мы прикладываем все усилия, чтобы отметить вклад тех, кто выполняет работу по личным причинам, и стараемся не обидеть и сообщество.<br />
<br />
'''LXF''': Как вы думаете, Mepis приживется на рынке среди таких соперников, как Ubuntu?<br />
<br />
'''УВ''': Похоже, что Ubuntu все взял от Debian и поставил на этом свое имя, а также нанял несколько людей с намерением сделать ответвление от Debian. Об этом вряд ли есть хоть какие-то официальные заявления Ubuntu, но мне это совершенно ясно; их подход в том, чтобы сперва взять все что можно из Debian, налепить свой ярлык и мощным маркетингом вывести дистрибутив на арену... затем попытаться вернуться назад и сделать что-нибудь уникальное на закуску, чтобы можно было сказать: «Это действительно наше, а не унаследованное от Debian». И мне кажется, это одна из лучших стратегий большого бизнеса. Я думаю, есть пуристы, которым это не нравится, но хороший, расчетливый и твердый бизнес вполне имеет смысл. «Эй, здесь что-то дают, ну так возьмем. Подпишем свое имя, это позволено. Вложим много денег в маркетинг и получим большое признание нашей марки». Тут есть логика.<br />
<br />
В данный момент, Ubuntu и Mepis никак не сталкиваются друг с другом, разве что Ubuntu налаживает мосты к Hewlett Packard в Европе, и я не знаю, будем мы соперничать с ним в этом или нет. А так мы вообще не сталкиваемся друг с другом. Я видел только одного человека во всем мире, которому нравится Ubuntu, и тот сказал, что не взял бы его для своей фирмы, он нравится ему лично.<br />
<br />
Как серверный вариант, Ubuntu представляет слишком много около-Debian философии вроде «Из этого супер-универсального меню вы можете получить все на свете». Наш серверный продукт [SoHo Server] похож на наш настольный продукт: установите его, и все – можете работать. Что хорошо и что плохо, мы решим за вас.<br />
<br />
А если вы пришли с Windows, вам это и нужно. Зачем становиться экспертом в Linux, чтобы знать, что установить? Нужна хорошая и легкая отправная точка, чтонибудь, с чем вы сможете работать прямо сейчас. Затем вы можете потихоньку изучать что захотите, и настроите систему, как вам нравится.<br />
<br />
[[Категория:Интервью]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:LXF104_85_1.pngФайл:LXF104 85 1.png2009-04-21T11:32:09Z<p>WikiSysop: </p>
<hr />
<div></div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-02-16T16:38:29Z<p>WikiSysop: Удален параграф про "сайт находится в стадии наполнения материалами"</p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF74-75|LXF74-75 Январь 2005]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF73:BrightStor_ARCserve_BackupLXF73:BrightStor ARCserve Backup2009-02-16T16:36:31Z<p>WikiSysop: </p>
<hr />
<div>= Brightstor ARCserve Backup =<br />
<br />
''Масштабируемое – да! Но удобное ли? '''Грэм Моррисон''' расскажет о резервировании для серьезных ребят.''<br />
<br />
{{Врезка|left|<br />
Заголовок = Самое главное |<br />
Содержание = Система «клиент-сервер» для резервирования данных в крупных организациях. Альтернативы: Bacula и Storix.<br />
<br />
* Разработчик: Computer Associates<br />
* Web: [http://www.ca.com www.ca.com]<br />
* Цена: $775 |<br />
Ширина=250px}}<br />
<br />
''BrightStor ARCserve Backup'' – не программа из разряда «для души». если вам нужен простой и быстрый инструмент для резервирования данных, поищите что-нибудь другое. Если честно, то это приложение вовсе не предназначается для работы с вашей MP3-коллекцией. Это масштабируемое решение, которое может обслуживать от дюжины компьютеров в маленькой компании до сложнейших систем в вычислительных центрах. У нее важная функция, так как ошибки в работе такой программы могут стоить IT-менеджеру карьеры.<br />
<br />
Реализован ''ARCserve Backup'' не менее амбициозно. Серверная часть отвечает за управление резервными копиями, вне зависимости от того, находятся они на внешних носителях, или на жестких дисках SCSI. Программа-клиент соединяется с сервером, настраивает различные процессы резервного копирования и управляет ими. Клиентская часть может быть расположена как на той же машине, так и на другом узле сети.<br />
<br />
=== Трудности установки ===<br />
<br />
Инсталляция ''ARCserve Backup'' вовсе не так легка, как могла бы. Наличие установочного сценария придает чувство ложной уверенности. Его выполнение идет гладко, а вывод в терминал выглядит достаточно солидно, чтобы вы почувствовали себя хакером экстра-класса. Вместе с компонентами системы устанавливается СУбд ''Ingres'', и сценарий даже берет на себя заботу по созданию учетных записей и назначению прав доступа.<br />
<br />
А через некоторое время вы остаетесь один на один с пустой командной строкой и в недоумении оглядываетесь. К счастью, существует руководство «Первые шаги», поставляемое в виде PDF. Оно очень хорошее, но вот чего оно не объясняет, так это как сделать «первый шаг».<br />
<br />
Это усугубляется невразумительными сообщениями об ошибках, которые вы получаете по мере знакомства с утилитами командной строки. Вот классический пример: «ОШИБКА. Не удалось запустить демон httpd. Пожалуйста, прочитайте сообщение об ошибке и проверьте директорию httpd». Сколько ни читай это «сообщение о ошибке», проблема яснее не станет, даже если долго морщить лоб.<br />
<br />
Однажды настроенный, ''ARCserve Backup'' работает на нескольких уровнях. Самый нижний предназначен для размещения служб-демонов, обеспечивающих доступ к бд, устройствам хранения, управления заданиями и пользовательскими уведомлениями.<br />
<br />
Поверх него располагается слой управления, который организует слаженную работу служб нижнего уровня. Он расширяют возможности системы, организуя управление съемными носителями, копирование лент и позволяя пользователю настраивать некоторые параметры. Узнать о состоянии служб этого уровня можно с помощью команды '''cstatus'''.<br />
<br />
Очень важно понимать, как работает каждая служба в составе ''ARCserve Backup'', но особое внимание заслуживают две из них. Служба Discovery сканирует вашу сеть на предмет серверов резервных хранилищ, после чего она настраивает связи между нижним слоем и клиентом. В обязанности службы аутентификации входит контроль за целостностью сетевых ресурсов и за разграничение доступа пользователей к определенным ресурсам. Важной службой также является Менеджер носителей (Media Manager), который управляет непосредственным копированием важных данных с сервера на выбранное устройство хранения.<br />
<br />
=== Апплет дня ===<br />
<br />
<br />
Звучит как-то запутанно, но именно так оно и есть! Все становится понятнее, когда вы начинаете пользоваться самым верхним уровнем системы – перегруженным Java-web-интерфейсом. Запуск браузера и соединение с сервером хранения данных задействует 14 самостоятельных Java-апплетов (см. экранный снимок на этой странице). Именно через web-интерфейс производится настоящая работа по управлению корпоративными данными: создание заданий, управление носителями и восстановление данных в случае сбоя.<br />
<br />
Очевидным недостатком такой схемы является нерасторопность Java, однако, наличие отдельных окон для различных компонентов позволяет удобно разграничить рабочее пространство.<br />
<br />
Скорее всего, большую часть времени вы будете проводить в первом окне – Менеджере резервных копий (Backup manager). Здесь вы без лишних заморочек сможете создать задания для архивации. Вам будет предложено указать исходную директорию с данными, а также то, как именно сервер архивации должен обрабатывать вашу задачу. Вы можете выбрать, где именно размещать сжатый архив – на локальном/сетевом жестком диске, удаленно на сервере, на стримере или еще где-то.<br />
<br />
Остальные апплеты четко отвечают за определенные функции. Вы можете разграничивать права пользователей, проверять систему на наличие вирусов или удаленно контролировать носители данных.<br />
<br />
''BrightStor ARCserve Backup'' не предназначен для простых смертных. Его пользователи – это супер-администраторы, которые каждый день управляют гигабайтами данных. Однако компании Computer Associates стоило бы выложить на свой сайт нормальное руководство по установке, потому что бесконечный процесс инсталляции вызывает больше проблем, чем их должно быть. Это одно из самых полнофункциональных, и вместе с тем, самых запутанных приложений в своем классе, которое мы когда-либо видели. Однако, в ситуации сбоя, программа справляется со своими обязанностями, поэтому вы, надеемся, не пострадаете.<br />
<br />
<br />
=== Вердикт Linux Format ===<br />
* Возможности — 8/10<br />
* Производительность — 7/10<br />
* Простота использования — 5/10<br />
* «Цена/Качество» — 6/10<br />
The cost of scalability is complexity, but this is a versatile and capable solution.<br />
<br />
* '''Рейтинг — 7/10'''<br />
<br />
[[Категория:Обзоры]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF74-75LXF74-752009-01-03T11:25:42Z<p>WikiSysop: </p>
<hr />
<div>[[Изображение:Lxf74-75.jpg|right|Обложка журнала]]<br />
<br />
== LinuxFormat 74-75, Январь 2006 ==<br />
<br />
__TOC__<br />
<br />
=== Обзоры ===<br />
* [[LXF74-75:FireFox 1.5|LXF74-75:Firefox 1.5]]<br />
Mozilla поработала на славу!<br />
<br />
* [[LXF74-75:Parallel Workstation 2.0|LXF74-75:Parallel Workstation 2.0]]<br />
Почти что VMWare или все-таки нет?!<br />
<br />
* [[LXF74-75:VMware Workstation 5.5|LXF74-75:VMware Workstation 5.5]]<br />
Теперь – с бесплатным «пробником»<br />
<br />
* [[LXF74-75:Ubuntu 5.10|LXF74-75:Ubuntu 5.10]]<br />
Это что за зверушка?<br />
<br />
* [[LXF74-75:Slackware 10.2|LXF74-75:Slackware 10.2]]<br />
Этот Linux использовал еще ваш папа<br />
<br />
* [[LXF74-75:Cairo|LXF74-75:Cairo]]<br />
Графика для фараонов<br />
<br />
* [[LXF74-75:Maya 7.0|LXF74-75:Maya 7.0]]<br />
И что, она лучше Blender?<br />
<br />
* [[LXF74-75:ThinkFree Office 3|LXF74-75:ThinkFree Office 3]]<br />
Думает быстрее, чем OOo.<br />
<br />
* [[LXF74-75:Жизнь на рабочем столе|LXF74-75:Жизнь на рабочем столе]]<br />
SuperKaramba, Gdesklets побери!<br />
<br />
=== Сравнение ===<br />
* [[LXF74-75:Сравнение|Остановим вирусы!]]<br />
<br />
=== Что за штука…? ===<br />
* [[LXF74-75:Что за штука...|Что такое... HIBERNATE?]]<br />
Холодно, темно – пора спать!<br />
<br />
=== Специальный репортаж ===<br />
* [[LXF74-75:Дистрибутив своими руками|LXF74-75:Дистрибутив своими руками]]<br />
Возьмите полкило ядра и 100 грамм X.Org <br />
* [[LXF74-75:LXF READER AWARDS|LXF74-75:LXF READER AWARDS]]<br />
Голосуйте или они никому не достанутся!<br />
* [[LXF74-75:Технологии Linux-2006|LXF74-75:Технологии Linux-2006]]<br />
Мы больше не можем скрывать это!<br />
* [[LXF74-75:Linux обучающий|LXF74-75:Linux обучающий]]<br />
Учитель! Прочти меня! <br />
<br />
<br />
=== Интервью ===<br />
* [[LXF74-75:Эндрю Мортон|LXF74-75:Эндрю Мортон]]<br />
Хранитель ядра в гостях у LinuxFormat<br />
<br />
* [[LXF74-75:В ожидании Ларри|LXF74-75:В ожидании Ларри]]<br />
Лингвист-программист Ларри Уолл<br />
<br />
* [[LXF74-75:Первые шаги|Первые шаги в системе]]<br />
Не теряйте важные файлы<br />
<br />
* [[LXF74-75:Gambas|Gambas напоследок]]<br />
Отделяем креветок от панцирей<br />
<br />
* [[LXF74-75:Inkscape|Inkscape: Повелитель градиентов]]<br />
Inkscape по-русски!<br />
<br />
* PHP в 2 частях<br />
*# [[LXF74-75:PHP1|Колдуем над Google API]]<br />
*# [[LXF74-75:PHP2|Sprechen sie multibyte?]]<br />
<br />
* [[LXF74-75:Python|Уроки Рython]]<br />
Как амебе превратиться в удава?<br />
<br />
=== Ответы ===<br />
* [[LXF74-75:Ответы|Ответы]]<br />
Поможем пользователям Mandriva</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF74-75LXF74-752009-01-03T11:25:22Z<p>WikiSysop: </p>
<hr />
<div>[[Изображение:Lxf74-75.jpg|right|Обложка журнала]]<br />
<br />
== LinuxFormat 74-75, Январь 2006 ==<br />
<br />
__TOC__<br />
<br />
=== Обзоры ===<br />
* [[LXF74-75:Firefox 1.5|LXF74-75:FireFox 1.5]]<br />
Mozilla поработала на славу!<br />
<br />
* [[LXF74-75:Parallel Workstation 2.0|LXF74-75:Parallel Workstation 2.0]]<br />
Почти что VMWare или все-таки нет?!<br />
<br />
* [[LXF74-75:VMware Workstation 5.5|LXF74-75:VMware Workstation 5.5]]<br />
Теперь – с бесплатным «пробником»<br />
<br />
* [[LXF74-75:Ubuntu 5.10|LXF74-75:Ubuntu 5.10]]<br />
Это что за зверушка?<br />
<br />
* [[LXF74-75:Slackware 10.2|LXF74-75:Slackware 10.2]]<br />
Этот Linux использовал еще ваш папа<br />
<br />
* [[LXF74-75:Cairo|LXF74-75:Cairo]]<br />
Графика для фараонов<br />
<br />
* [[LXF74-75:Maya 7.0|LXF74-75:Maya 7.0]]<br />
И что, она лучше Blender?<br />
<br />
* [[LXF74-75:ThinkFree Office 3|LXF74-75:ThinkFree Office 3]]<br />
Думает быстрее, чем OOo.<br />
<br />
* [[LXF74-75:Жизнь на рабочем столе|LXF74-75:Жизнь на рабочем столе]]<br />
SuperKaramba, Gdesklets побери!<br />
<br />
=== Сравнение ===<br />
* [[LXF74-75:Сравнение|Остановим вирусы!]]<br />
<br />
=== Что за штука…? ===<br />
* [[LXF74-75:Что за штука...|Что такое... HIBERNATE?]]<br />
Холодно, темно – пора спать!<br />
<br />
=== Специальный репортаж ===<br />
* [[LXF74-75:Дистрибутив своими руками|LXF74-75:Дистрибутив своими руками]]<br />
Возьмите полкило ядра и 100 грамм X.Org <br />
* [[LXF74-75:LXF READER AWARDS|LXF74-75:LXF READER AWARDS]]<br />
Голосуйте или они никому не достанутся!<br />
* [[LXF74-75:Технологии Linux-2006|LXF74-75:Технологии Linux-2006]]<br />
Мы больше не можем скрывать это!<br />
* [[LXF74-75:Linux обучающий|LXF74-75:Linux обучающий]]<br />
Учитель! Прочти меня! <br />
<br />
<br />
=== Интервью ===<br />
* [[LXF74-75:Эндрю Мортон|LXF74-75:Эндрю Мортон]]<br />
Хранитель ядра в гостях у LinuxFormat<br />
<br />
* [[LXF74-75:В ожидании Ларри|LXF74-75:В ожидании Ларри]]<br />
Лингвист-программист Ларри Уолл<br />
<br />
* [[LXF74-75:Первые шаги|Первые шаги в системе]]<br />
Не теряйте важные файлы<br />
<br />
* [[LXF74-75:Gambas|Gambas напоследок]]<br />
Отделяем креветок от панцирей<br />
<br />
* [[LXF74-75:Inkscape|Inkscape: Повелитель градиентов]]<br />
Inkscape по-русски!<br />
<br />
* PHP в 2 частях<br />
*# [[LXF74-75:PHP1|Колдуем над Google API]]<br />
*# [[LXF74-75:PHP2|Sprechen sie multibyte?]]<br />
<br />
* [[LXF74-75:Python|Уроки Рython]]<br />
Как амебе превратиться в удава?<br />
<br />
=== Ответы ===<br />
* [[LXF74-75:Ответы|Ответы]]<br />
Поможем пользователям Mandriva</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2009-01-03T11:24:51Z<p>WikiSysop: </p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
В настоящее время сайт находится в состоянии наполнения материалами &ndash; мы планируем опубликовать на нем выпуски 2005-2007 гг. Для всех 28 номеров журнала уже нашлись люди, желающий провести их викификацию, однако, вы можете сообщить нам о своем интересе к проекту, написав письмо на info at linuxformat dot ru. В случае, если нам понадобится содействие, мы обязательно с вами свяжемся.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF74-75|LXF74-75 Январь 2005]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF87-88|LXF87-88 Январь 2007]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Starfighter-src.tar.gzФайл:Starfighter-src.tar.gz2008-12-18T11:34:30Z<p>WikiSysop: Исходные тексты игры Starfighter (LXF98), включая файл ingame.h</p>
<hr />
<div>Исходные тексты игры Starfighter (LXF98), включая файл ingame.h</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF98:%D0%A1%D1%82%D1%80%D0%B5%D0%BB%D1%8F%D0%BB%D0%BA%D0%B0LXF98:Стрелялка2008-12-18T11:32:47Z<p>WikiSysop: </p>
<hr />
<div>[[Категория:Игрострой]]<br />
<br />
: '''ИГРОСТРОЙ''' Все о разработке компьютерных игр с использованием свободного программного обеспечения<br />
<br />
=Постепенное погружение=<br />
<br />
: '''АНДРЕЙ ПРАХОВ''' Участник нескольких игровых проектов, представитель СМИ и начальник http://www.linuxmedia.ru<br />
<br />
Игрострой – дело нелегкое и весьма-весьма затратное. Понятно, почему маститые разработчики игр не горят желанием ваять свои шедевры под открытый и свободный Linux. Ну никак не окупится разработка, ну не та идеология у пользователей открытых систем! И получается, что основная надежда игроков остается лишь на своих же «свободных» разработчиков. Конечно, радует появление таких проектов, как ''AstroMenace'' или игровой LiveDVD от linux-games.net. Честь и хвала людям, занимающимся этим делом почти на чистом энтузиазме. Да вот уровень у них, мягко говоря, не дотягивает до желанной истинными геймерами хардкорной планки. Вот и ждут игроки у моря погоды, в надежде, что разработчики игр «одумаются». Однако давайте вспомним, какие масштабные проекты были осуществлены на этом самом энтузиазме, столь нелюбимом некоторыми несознательными элементами ИТ-мира. Думается, создание и поддержка какого-либо дистрибутива отнюдь не легче, чем работа над серьезным игровым проектом. Так, может, объединение светлых голов по известной схеме Open Source и приведет к долгожданному результату?<br />
<br />
«Москва не сразу строилась…» – это известно всем и каждому. Попробуйте свои силы в самом маленьком, крошечном проекте. Еще никто не говорил, что офисные игры – это зло. А «Игрострой» всецело вам в этом поможет. [mailto:info@linuxmedia.ru info@linuxmedia.ru]<br />
<br />
=Стрелялка за выходные=<br />
<br />
: '''ЧАСТЬ 1''' Скучаете по ''R-Type'' и ''River Raid'' и готовы сделать что-то сами, но не знаете, с чего начать? '''Александр Супрунов''' покажет путь, доступный даже новичку!<br />
<br />
Признаюсь сразу – это самый странный урок из всех, что вас ожидают. Я, конечно, постараюсь скрасить его различными интересными отступлениями, но уж ничего не поделаешь – в нем вы начнете учиться с конца. В качестве положительного момента<br />
отмечу, что изложенных в нем сведений должно хватить для того, чтобы начать писать компьютерные игры для<br />
Linux и, таким образом, значительно увеличить их число в нашей любимой ОС. Мы будем использовать язык ''C/C++'', но, чтобы следовать курсу, вам потребуются только базовые знания.<br />
<br />
Основной игровой библиотекой в Linux, пожалуй, следует назвать ''SDL''. Скажу больше – написав игру с<br />
использованием ''SDL'', вы без каких-либо изменений сможете откомпилировать ее для Linux, Windows, Mac OS X, Amiga Pegasos и даже наладонников, а возможностей библиотеки хватило для портирования ''Heroes of Might and Magic 3''. Я не сомневаюсь, что ваши планы более грандиозны, но ''SDL'' способна реализовать и их. В крайнем случае (для повышения быстродействия и скоростных операций масштабирования, вращения и прозрачности) всегда можно подключить ''OpenGL''.<br />
<br />
При всех достоинствах ''SDL'' – это конструктор, позволяющий собрать действительно удобный инструмент.<br />
Например, вместо следующего кода, выводящего спрайт<br />
на экран стандартными средствами ''SDL'' –<br />
<br />
<source lang=c><br />
SDL_Rect shadow;<br />
shadow.x=(Sint16)x;<br />
shadow.y=(Sint16)y;<br />
SDL_SetColorKey(img,SDL_SRCCOLORKEY,SDL_MapRGB(img->format,255,0,255));<br />
SDL_BlitSurface(img,0,screen,&shadow);<br />
</source><br />
мне кажется более логичным написать:<br />
<br />
sprite(номер, x, y);<br />
<br />
Если вам тоже импонирует эта мысль, читайте дальше – мы доведем ''SDL'' именно до такой степени. При<br />
этом исходный код ваших игр едва ли превысит 20–30 КБ и будет кристально понятным даже новичкам.<br />
<br />
Мы поместим на игровое поле крошечный кораблик, храбро «выносящий» с экрана полчища врагов (будут<br />
ли ужасные БОССы и различные типы оружия – зависит от вас), реализуем многоплановый параллаксный<br />
скроллинг, эффекты прозрачности и другие интересные вещи. Подобный тип игр малораспространен на платформе Linux, так давайте разберем по шагам все моменты, которые требуются для создания игры и, следуя им,<br />
напишем новую!<br />
<br />
==Приготовим рабочее место==<br />
<br />
{{Врезка<br />
|Заголовок=Что нам потребуется?<br />
|Содержание=GNU/Linux – свободная, бесплатная (другими словами – доступная любому человеку) операционная система и<br />
обладающие теми же преимуществами средства разработки, входящие в состав любого популярного дистрибутива, а также текстовый редактор (''Kate, vi, mcedit'' – по вкусу). Помимо этого, необходимы библиотеки (в том числе и версии для разработчиков с суффиксом «'''devel'''») ''SDL'' (для графики), ''SDL_mixer'' (для звука) и ''SDL_ttf'' (для вывода сообщений) – их можно установить через менеджер пакетов вашей системы.<br />
|Ширина=200px<br />
}}<br />
<br />
Взгляните на врезку Что нам потребуется? и убедитесь, что указанные в ней компоненты присутствуют и готовы к работе. Я специально не стал упоминать популярные ''IDE'' типа ''KDevelop'' – при всем своем удобстве они<br />
достаточно громоздки и скрывают суть происходящих процессов. Для компиляции нашего кода потребуется<br />
написать лишь крошечный make-файл (назовите его '''Makefile''').<br />
<br />
<source lang=c_mac><br />
TARGET = ingame.run<br />
CFLAGS= `sdl-config --cflags`<br />
LIBS = `sdl-config --libs` -lSDL_ttf -lSDL_mixer<br />
CC=g++<br />
all:<br />
$(CC) -o $(TARGET) starfighter.cpp $(LIBS)<br />
strip $(TARGET)<br />
./$(TARGET)&<br />
</source><br />
<br />
Переменная '''TARGET''' задает имя исполняемого файла, который будет получен в результате компиляции. '''CFLAGS''' содержит флаги, необходимые любому ''SDL''-приложению – в данном случае мы получаем их командой ''sdl-config''. В поле '''LIBS''' указываются требуемые библиотеки. Если понадобиться добавить еще одну, например, ''SDL_image'', следует просто дописать<br />
'''-lимя_библиотеки''' в конце этой строки. Переменная ''CC'' содержит команду для вызова компилятора ''C++''.<br />
<br />
Строки, следующие за '''all:''' – это те самые правила, по которым будет происходить сборка. Думаю, вы уже<br />
догадались, как интерпретировать строку <br />
$(CC) -o $(TARGET) starfighter.cpp $(LIBS)<br />
<br />
а если нет, сделаю подсказку – '''$(var)''' подставляет в строку значение переменной '''var'''. Что же касается<br />
необязательной команды '''strip $(TARGET)''', то она очищает получившийся исполняемый файл от ненужной<br />
служебной информации. Наконец, последняя строчка<br />
<br />
./$(TARGET)&<br />
<br />
после каждой компиляции запускает игру на выполнение, чтобы вы могли видеть результат. Ее можно<br />
удалить, но на мой взгляд, это удобно.<br />
<br />
Общий цикл разработки нашей игры теперь будет выглядеть следующим образом:<br />
# Открыть текстовый редактор и набрать код программы.<br />
# Запустить терминал, перейти в каталог с игрой и набрать ''make''.<br />
# Оценить результат.<br />
# Завершить программу, нажав клавишу '''Escape'''.<br />
# Перейти к пункту '''1'''.<br />
<br />
...и так до тех пор, пока оценка, выставленная в пункте 3, не достигнет «хорошо» или «отлично».<br />
<br />
==Приступим к делу==<br />
<br />
Ну-с, теперь мы готовы начать программирование. И в первую очередь следует подключить файл '''ingame.h''' –<br />
он содержит все основные функции, которые потребуются нам при написании игры (см. «Основные функции»). Простейшая программа, не создающая ничего, помимо пустого окна (но уже умеющая вычислять ''FPS'' и реагировать на клавишу '''Escape''') будет<br />
иметь следующий вид:<br />
<br />
<source lang=c><br />
1 #include “ingame.h”<br />
2<br />
3 int main(int n, char **s)<br />
4 {<br />
5 screen(1024, 768);<br />
6 while (GAME)<br />
7 {<br />
8 fx();<br />
9 }<br />
10 return 0;<br />
11 }<br />
</source><br />
<br />
Давайте разберемся, что здесь происходит.<br />
Функция '''screen()''', вызванная в строке '''5''', устанавливает полноэкранный режим '''1024x768''' (кстати, как мы вскоре увидим, здесь можно указать и любое другое значение). В строке '''6''' запускается главный цикл игры, обрабатывающий события, поступающие от пользователя. Этим занимается вспомогательная функция<br />
'''fx()''', определенная в '''ingame.h''' – она отслеживает нажатие на клавиши, вычисляет значение ''FPS'' и так далее.<br />
Если пользователь нажимает '''Escape''', функция '''fx()''' сбрасывает флаг '''GAME''' возвращает управление, после<br />
чего главный цикл, а вместе с ним и наша программа, завершаются.<br />
<br />
==Разместим первый спрайт==<br />
<br />
{{Врезка<br />
|Заголовок=Система координат<br />
|Содержание=В наших приложениях используется прямоугольная декартова система координат с центром в левом верхнем углу экрана. Ось абсцисс направлена влево, а ось ординат – вниз.<br />
[[Изображение:LXF98_game1.png|Система координат]]<br />
|Ширина=320px<br />
}}<br />
<br />
Теперь немного усложним программу – заставим ее выводить на экран картинку, сохраненную в формате '''BMP'''. Изображение можно взять с LXFDVD или подготовить самостоятельно в графическом/трехмерном редакторе. Я, например, создал боевой космический истребитель в ''Blender'' ([[LXF89:Blender|LXF89-91]]). Учтите только, что для правильного отображения нашим движком, прозрачные участки картинки должны иметь цвет '''(255,0,255)''' в RGB-нотации.<br />
<br />
<source lang=c><br />
#include “ingame.h”<br />
int main(int n, char **s)<br />
{<br />
screen(500, 700);<br />
loadsprite(1, “ship.bmp”);<br />
while (GAME)<br />
{<br />
sprite(1,250,650);<br />
fx();<br />
}<br />
return 0;<br />
}<br />
</source><br />
<br />
По сравнению с предыдущим случаем добавился вызов функции '''loadsprite()''', загружающей спрайт '''ship.bmp''' в память и присваивающей ему номер '''1'''. Это число может изменяться в пределах от 0 до 999 – более высокие значения зарезервированы '''ingame.h''' для служебных целей. При этом количество копий каждого спрайта на экране практически неограничено. Спрайт<br />
выводится на экран функцией '''sprite()''', которой следует передать номер и координаты точки, в которой<br />
осуществляется отображение. Для вашего удобства в '''ingame.h''' уже определены такие переменные, как '''x, y, x2''' и '''y2''', поэтому вы можете просто использовать их в<br />
коде. Например, если вы измените<br />
<br />
{{Врезка<br />
|Заголовок=<br />
|Содержание=<br />
[[Изображение:LXF98_game2.png|Игровое поле]]<br />
|Ширина=350px<br />
}}<br />
<br />
<source lang=c><br />
sprite(1,250,650);<br />
на<br />
x=250;<br />
y=650;<br />
...<br />
sprite(1,x,y);<br />
</source><br />
<br />
все будет работать, как раньше.<br />
<br />
Итак, с выводом одной картинки мы разобрались. Программирование игр – не жонглирование, и обращаться с несколькими спрайтами ненамного сложнее:<br />
<br />
<source lang=c><br />
screen(800,600);<br />
loadsprite(1,”luna.png”);<br />
loadsprite(2,”ship.png”);<br />
loadsprite(3,”fire.png”);<br />
while (GAME)<br />
{<br />
sprite(1, 150 , 0);<br />
sprite(3, 250 , 300);<br />
sprite(2, 350 , 500);<br />
fx();<br />
}<br />
</source><br />
<br />
С назначением переменных '''UP''' (вверх), '''DOWN''' (вниз) и '''FIRE''' (огонь) вы теперь можете разобраться самостоятельно.<br />
<br />
==Ключ на старт!==<br />
<br />
Чтобы находящийся на экране неподвижный корабль<br />
начал движение, в программу необходимо добавить<br />
всего две строчки. Вот так:<br />
<br />
<source lang=c><br />
screen(500, 700);<br />
loadsprite(1, “ship.bmp”);<br />
x=250;<br />
y=650;<br />
while (GAME)<br />
{<br />
sprite(1,x,y);<br />
if (LEFT) {x=x-2;}<br />
if (RIGHT) {x=x+2;}<br />
fx();<br />
}<br />
</source><br />
<br />
Чем больше будет изменение координаты, тем быстрее будет перемещаться корабль по экрану. И наооборот, если приращение координаты установить равным 0,1 или 0,01, ваш скоростной истребитель будет ползти, как старый имперский сухогруз.<br />
<br />
==Что дальше?==<br />
<br />
Прошло каких-то несколько минут, а вы уже имеете работающую демо-версию новой игры. Есть что показать друзьям, поэтому самое время решительно сказать: «Стоп!». Все должно развиваться по плану.<br />
<br />
Начнем с уже озвученной фабулы. Мы управляем небольшим космическим истребителем. Цель: уничтожить враждебных пришельцев, основавших цитадель на Обратной стороне Луны. Соответственно, до этой самой Луны необходимо добраться, поэтому игровой<br />
процесс целесообразно разделить на 3 этапа:<br />
<br />
* '''Первый''' – добраться до Луны через открытый космос. Этому, очевидно, будут мешать вражеские перехватчики.<br />
* '''Второй этап''' происходит над Лунной поверхностью. Это повод реализовать фантастический многоплановый паралаксный cкролинг! Нашими врагами будут все те же истребители, а также пушки, вмонтированные в скалы.<br />
* '''Третий этап''' – битва с БОССом. В роли «великого и ужасного» будет выступать Гигантский корабль-матка.<br />
* '''Конец'''. Враг разгромлен, но одна шлюпка выскользнула за пределы оцепления и скрылась в звездных просторах. Продолжение следует?<br />
<br />
Конечно, вы вольны придумать свою сюжетную линию, но главное здесь – увидеть примерную структуру игры. И могу вас заверить – если все сделать грамотно, то играть будет весьма увлекательно. А что<br />
самое важное в космических стрелялках? Конечно же, красивые взрывы, поэтому на красочных эффектах<br />
тоже экономить не стоит.<br />
<br />
Все это здорово, но мы упустили одну маленькую деталь. Чтобы создать по-настоящему высококлассную игру, необходимо придумать изюминку, свойственную только ей. Поэтому сидите и думайте, изредка поглядывая в зеркало. Как только размер головы<br />
станет чуть больше перезревшего арбуза – бегите к друзьям и продолжайте мозговой штурм. И тогда...<br />
<br />
Не забывайте и о факторе внезапности, а так же физических законах. Где-то на полпути к Луне кораблю может повстречаться метеоритный поток. Некоторые метеориты будут настолько велики, что окажутся способны своим импульсом изменить<br />
направление движения истребителя. Но именно в этом астероидном поле устроили засаду мириады вражеских перехватчиков – земному пилоту придется ой как не сладко! Однако всему этому придется подождать<br />
до следующего выпуска «Игростроя»... '''LXF'''<br />
<br />
[[Изображение:LXF98_game3.png|К этому будем стремиться]]<br />
<br />
==Основные функции==<br />
<br />
В файле '''ingame.h''' определен ряд функций, делающих программирование игр простым и понятным даже для новичков. Все они являются обертками над соответствующими функциями библиотеки ''SDL''.<br />
<br />
* '''screen (ширина экрана , высота экрана)''' Устанавливает экранное разрешение.<br />
Пример: Вызов '''screen(640,480)''' переключит монитор в режим 640x480.<br />
<br />
* '''loadsprite (номер ячейки , “название файла”)''' Загружает спрайт (рисунок) в память и связывает его с указанными номером.<br />
Пример: '''loadsprite(5, “cat.bmp”)''' загружает файл '''cat.bmp''' с изображением кота и ассоциирует его с номером 5.<br />
<br />
* '''sprite (номер ячейки, x, y, [a])''' Отображает ранее загруженный в память спрайт на экране. Функция может быть вызвана только после '''screen()'''.<br />
Пример: '''sprite (5, 100,150)''' разместит кота на экран в точке с координатами '''x=100, y=150''':<br />
Четвертый необязательный параметр регулирует прозрачность спрайта и меняется в пределах от 0 (непрозрачный)<br />
до 255 (полностью прозрачный).<br />
<br />
* '''colorfon(R, G, B);''' Закрашивает фон экрана произвольным цветом. R,G,B – значения его красной, зеленой и синей составляющей, соответственно.<br />
<br />
* '''loadmusic (название файла, номер ячейки с музыкой);''' Загружает в память музыку в формате '''MID, MOD, XM, IT, WAV''' и т.д.<br />
Пример: '''loadmusic (“sintez.mod”, 5);'''<br />
<br />
* '''music (номер ячейки с музыкой);''' Проигрывает ранее загруженный музыкальный ролик.<br />
Пример: '''music (5);'''<br />
<br />
* '''loadsound (название файла, номер ячейки со звуком);''' Загружает в память звук в формате '''WAV'''.<br />
Пример: '''loadsound (“boom.wav”,1);'''<br />
<br />
* '''sound (номер ячейки со звуком);''' Проигрывает ранее загруженный звук. <br />
Пример: '''sound (1);'''<br />
<br />
* '''box(объект1, координата Х объекта1, Y объекта1, объект2, координата Х объекта2, координата Y объекта2, );'''<br />
Простая проверка столкновения '''объекта1''' и '''объекта2'''<br />
(учитывается только пересечение прямоугольников, ограничивающих спрайт).<br />
Пример: <br />
<br />
if (box(1, bomb_x, bomb_y, 2, ship_x, ship_y) ) {<br />
sound(“boom.wav”); }<br />
<br />
* '''fx();''' Основная и обязательная функция. Обрабатывает события, поступающие от пользователя и формирует изображение на экране вашего монитора.<br />
Пример: '''while (GAME) { fx(); }'''<br />
<br />
==Предопределенные переменные==<br />
<br />
В '''ingame.h''' определен целый ряд переменных, которые с большой вероятностью понадобятся вам при разработке<br />
своей игры.<br />
<br />
Следует отметить, что движок работает с числами с плавающей точкой. Это значит, что мы можем перемещать<br />
спрайт не только на целое число пикселей (скажем, '''1'''), но и на дробное – например '''0.02'''. Это дает возможность<br />
выводить очень медленно перемещающиеся спрайты (например, далекие облака).<br />
<br />
Список предопределенных переменных:<br />
<br />
* '''x, y''' Координаты спрайта первого игрока (тип '''float''')<br />
* '''x2, y2''' Координаты спрайта второго игрока (тип '''float''')<br />
* '''LEFT, RIGHT, UP, DOWN''' Флаг, равный '''1''', если нажата клавиша «стрелка влево/вправо/вверх/вниз» или «огонь» (пробел), соответственно, и '''0''' в противном случае<br />
* '''GAME''' Флаг, сбрасываемый в '''0''', если пользователь нажал клавишу '''Escape'''<br />
<br />
==Исходные тексты==<br />
[[Media:starfighter-src.tar.gz]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF79:%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B5_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D1%8BLXF79:Графическе редакторы2008-12-12T07:21:32Z<p>WikiSysop: «LXF79:Графическе редакторы» переименована в «LXF79:Графические редакторы»</p>
<hr />
<div>#REDIRECT [[LXF79:Графические редакторы]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF79:%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D1%8BLXF79:Графические редакторы2008-12-12T07:21:32Z<p>WikiSysop: «LXF79:Графическе редакторы» переименована в «LXF79:Графические редакторы»</p>
<hr />
<div>''Тебя ли с растром мне сравнить? Векторная графика на пике моды, поэтому '''Ник Вейч''' тестирует некоторые из лучших редакторов векторной графики с открытым исходным кодом: они годятся для дизайна, иллюстраций и просто для экраномарания.''<br />
<br />
__TOC__<br />
<br />
Еще на заре графического пользовательского интерфейса (GUI) отдельные чудики запали на идею поиска оптимальных графических инструментов: сперва – чтобы создавать GUI собственных приложений, потом – чтобы использовать графический интерфейс как трамплин для творчества. Вся графика аккуратно поделена на две части: на растровую, где изображение состоит из пикселей, и векторную, или «структурированную» графику, тут объекты сохраняются в виде описаний формы, превращающихся в пиксели только во время отображения на экране или для печати.<br />
<br />
Масштаб структурированной графики при необходимости можно легко варьировать, но ее применение зачастую сводилось к печатному дизайну. Благодаря появлению стандарта SVG (Scalable Vector Graphics, масштабируемая векторная графика) и системам рендеринга вроде Cairo, эту резервную роту вновь натренировали и отправили на передовую. А раз уж векторные графические редакторы Linux пошли в ход и для работы, и для развлечения, мы ощутили необходимость сравнить самые лучшие из них.<br />
<br />
Наше исследование, опиравшееся на тестовый пакет W3C SVG Test Suite, фокусировалось на трех элементах. Во-первых, возможностях программ по созданию иллюстраций, от простого логотипа до полноценного произведения искусства. Такая работа требует изрядного количества манипуляций с объектами и кривыми, а также наличия продвинутых свойств, например, прозрачности. Другая область применения векторной графики – создание структурных диаграмм, схем и графиков. Способность поддерживать структуру при одновременном редактировании или перекомпоновке всего объекта здесь очень полезна. И, наконец, какой смысл создавать лучшие в мире графические шедевры, если их нельзя использовать, поэтому мы тщательно и строго рассматривали конечный результат и поддержку соответствующих стандартам файловых форматов.<br />
<br />
Как обычно, будут жалобы по поводу программ, не попавших в наше Сравнение. Позвольте сразу же на них ответить: да, Xfig вошел в наше Сравнение, потому что это приложение больше всех прочих напоминает живое ископаемое. Нет, Xara сюда не вошла, потому что до сих пор остается бета-версией, и включать ее было бы неправильно. Были еще разные инструменты на основе Java, которые либо ненадежно работали, либо не подвергались обновлению больше года. Если вы все еще думаете, что мы что-то пропустили – напишите вашу жалобу на листочке, привяжите его к кирпичу и бросьте в известное окно (адрес – в конце Сравнения).<br />
<br />
=== Участники сравнения ===<br />
<br />
* [[#Dia|Dia]]<br />
<br />
* [[#Draw|Draw]]<br />
<br />
* [[#Glips Graffiti|Glips Graffiti]]<br />
<br />
* [[#Inkscape|Inkscape]]<br />
<br />
* [[#Karbon14|Karbon14]]<br />
<br />
* [[#Sketsa|Sketsa]]<br />
<br />
* [[#Skencil|Skencil]]<br />
<br />
* [[#Xfig|Xfig]]<br />
<br />
=== Xfig ===<br />
<br />
Приложение Gnome следующего поколения.<br />
<br />
* ВЕРСИЯ: 3.2.5<br />
* WEB: [http://www.xfig.org www.xfig.org]<br />
* Цена: Бесплатно по лицензии GPL<br />
<br />
[[Изображение:Img_79_29_1.jpg|thumb|Xfig поддерживает любую технологию, но истинно великим ему не бывать.]]<br />
<br />
<br />
Мы вовсе не утверждаем, что Xfig – старая программа, просто самый первый отчет о ее ошибках присылал еще Ной. Эта программа разрабатывается с незапамятных времен (на самом деле, с 1985 года), и в итоге дошла только до версии 3.2.5! Но пока ее охочие до ресурсов родственники слой за слоем наводят глянец, Xfig по-прежнему имеет что предложить.<br />
<br />
Первый приятный сюрприз: родной файловый формат программы - FIG - настолько прост, что его можно с легкостью сгенерировать в другой программе или с помощью простых скриптов, и это укрепляет позиции Unix как части экосистемы других приложений, которые можно связывать друг с другом, отвечая сложным программным запросам. Во-вторых, хотя сам подход и не нов, но технологии остаются актуальными – например, Xfig поддерживает SVG и все шрифты, доступные X. Кроме того, весьма обширна поддержка Xfig третьими сторонами, особенно по части построения схем и графиков, с большим количеством библиотек доступных объектов.<br />
<br />
Этот старинный, обнадеживающе минималистичный инструмент Unix врос в хакерскую культуру и повсеместно остается любимым инструментом векторной графики у мужиков с большими кустистыми бородами. И не без причины. Может быть, Xfig и уступает более современным инструментам для иллюстраций, но по-прежнему высоко держит марку поддержки файловых форматов и взаимодействия с другими инструментами Unix.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Не больно красив, но функционален и хорошо работает при минимуме требований.<br />
* Рейтинг - 5/10<br />
<br />
=== Dia ===<br />
<br />
Присоединяйтесь – и вы получите очень полезный инструмент.<br />
* ВЕРСИЯ: 0.94<br />
* WEB: [http://www.gnome.org/projects/dia www.gnome.org/projects/dia]<br />
* Цена: Бесплатно по лицензии GPL<br />
<br />
[[Изображение:Img_79_29_2.jpg|thumb|Для диаграмм Dia хороша, а вот для рисунков не очень.]]<br />
<br />
Dia – основанный на GTK инструмент для рисования, разработчики которого изначально хотели создать его похожим на MS Visio, инструмент для создания диаграмм, который без проблем работает со структурными элементами любого вида. Его хлеб с маслом – сетевые диаграммы, блок-схемы, документы и т.п.<br />
<br />
Во всем, что не относится к вышеперечисленному, уровень его функциональности и эргономичности резко снижается. Через GTK Dia может использовать практически любой шрифт, но при этом не обладает никакими дополнительными инструментами форматирования текста (в отличие от, скажем, Inkscape), поэтому слова вводятся так же, как и любой другой объект, причем в одну строку, если вы не позаботитесь о переносах. Нет текстового блока, отсутствуют стили (за исключением поддерживаемых шрифтом), есть всего несколько опций выравнивания. Вы не найдете здесь возможности конвертировать текст в отдельные кривые, так что прощально помашите ручкой хитрым эффектам. Поскольку Dia нацелена на создание диаграмм, слабость текстовой поддержки в ней выглядит как-то предательски.<br />
<br />
Современный GUI мог бы быть и поудобнее в использовании, чем у Xfig, но он использует те же самые разболтанные панели инструментов, которые засоряют Gimp, и в ответ на большинство действий всплывает диалоговое окно, только затрудняющее работу. Однако, когда дело доходит до любых схематических рисунков, на Dia можно и нужно рассчитывать.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Не универсал, но как инструмент специалиста не хуже других.<br />
* Рейтинг - 7/10<br />
<br />
=== Karbon14 ===<br />
<br />
Участник от KOffice.<br />
* ВЕРСИЯ: 0.2<br />
* WEB: [http://www.koffice.org/karbon www.koffice.org/karbon]<br />
* Цена: Бесплатно по лицензии GPL<br />
<br />
[[Изображение:Img_79_29_3.jpg|thumb|Функциональность Karbon14 висит лоскутами, но все же многообещающа.]]<br />
<br />
Karbon14 – это самое последнее название графического Компонента из пакета KOffice: надоевший компании Adobe KIllustrator и незначительный Kontour благополучно отошли в историческое прошлое. Как это ни грустно, за период между названиями прогресса не просматривается.<br />
<br />
Функции Импорта и Экспорта Графики рассчитывают на векторную графику, поэтому вам придется использовать инструмент Растровое изображение на панели инструментов, чтобы импортировать изображение в одном из трех поддерживаемых растровых форматов (PNG, JPEG и GIF). Панель инструментов нуждается в некоторой рационализации – наличие специальных кнопочек для изображения спирали или синусоиды, пусть и очень красивых, кажется излишним, учитывая, насколько редко их используют.<br />
<br />
Приятно, что имеются эффекты тени (доступные из дополнительных модулей), но еще приятнее было бы иметь работающий рендеринг шрифтов, опции экспорта получше, шаг и повтор, и некоторые пункты в меню, которые не вызывали бы автоматический крах. Наверно, мы немного суровы к программе, ведь она вышла лишь в версии 0.2 и может считаться молодой-зеленой. Да к тому же Karbon14 умеет читать и записывать формат SVG и OpenDocument (подвиг, с которым не справился OpenOffice Draw), а это чего-нибудь да стоит!<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Местами блестящий, местами убогий; проклятие KOffice снова настигло его.<br />
* Рейтинг - 5/10<br />
<br />
=== OpenOffice.org Draw ===<br />
<br />
Да, тяжеленькая, но интеграция превосходна.<br />
* ВЕРСИЯ: 2.0.1<br />
* WEB: [http://www.openoffice.org www.openoffice.org]<br />
* Цена: Бесплатно по лицензии GPL<br />
<br />
[[Изображение:Img_79_30_1.jpg|thumb|OOo Draw отлично сочетает инструменты для создания грандиозных рисунков с генерацией эскиза одним щелчком.]]<br />
<br />
Если вы только что обновили OpenOffice.org 2.0, то могли заметить, что некоторые приложения радикально изменились. Особенно это верно насчет Draw, по крайней мере, внешне. Интерфейс перекроили, инструменты рисования стали больше и доступнее, а настраиваемые аспекты программы настолько расширились, что теперь запросто можно создать собственную панель управления и вынести туда инструменты и формы, которые вам нужны – по крайней мере, вы сумеете это сделать, прочитав документацию.<br />
<br />
Одна из странностей программы – вид по умолчанию: «страница» на левой панели и вместо текущего рисунка. Большинство художников привыкли работать над одним элементом, а не заполнять документы страницами. Единственным приемлемым объяснением этой странности может служить лишь то, что ныне все больше стираются грани между составными частями пакета OOo: документ затевается как чертеж, слайд-шоу или текст, а в итоге превращается в комбинацию из всех трех.<br />
<br />
Это та область, в которой Draw имеет явно преимущество перед соперниками: за исключением Karbon, ни одна другая программа не в силах невзначай вставить ряд Фибоначчи посреди диаграммы, графика или полнофункциональной электронной таблицы. Для обеспечения комплексного взаимодействия разнородных материалов доступ к интегрированному офисному пакету, который может динамически соединять данные, весьма полезен.<br />
<br />
Однако у офисного подхода есть и недостатки. Хороший пример – слои. Понятно, что графический редактор только выигрывает от наличия слоев, но как их применить наилучшим образом? В случае с Draw, они следуют той же модели, что и листы в документе OOo Calc – слои располагаются на вкладке внизу слева на панели просмотра, поэтому увидеть их разом нельзя. Зачем они нужны, тоже не совсем ясно: просто включать, выключать или блокировать слои – сомнительное удовольствие, особенно если учесть, что блокировка срабатывает не всегда, а на котором из слоев расположен элемент, нипочем не догадаешься.<br />
<br />
Когда вы начинаете рисовать, Draw кажется вам почти что живым художником. Все стандартные инструменты на месте: кривые, квадраты, текст, простейшие формы, инструмент для рисования от руки… Есть даже такие красоты, за которыми погнался бы любой набор профессиональных инструментов: простая трассировка растров, привязка текста к контуру, эффекты шрифтов и смешивание.<br />
<br />
Вишенка (слегка просроченная) на этом торте – 3D-эффекты, с помощью которых любой объект можно преобразовать в трехмерный и наиграться с ним всласть. Впечатляют рендеринг шрифтов и простые формы, которые, кажется, прямо слетают на экран. Всем этим следует пользоваться умеренно – как и клип-арт, поставляемый с программами, мудреные эффекты изрядно раздражают, если ими злоупотребить.<br />
<br />
'''Носитель стандарта'''<br />
<br />
По идее, Draw должен бы отлично работать с различными форматами файлов, ведь OpenOffice.org 2.0 громко превозносили как первый серьезный офисный пакет, поддерживающий формат OpenDocument (нацеленный на будущее XML-стандарт, разработанный для взаимодействия с другими программами). Увы, поверхностная поддержка других форматов придает программе привкус тухлого яйца. Способность безвозмездно экспортировать ваши рисунки в проприетарный формат Flash (.swf) – это, конечно, замечательно, высший балл. Но вовсе не замечательна неспособность импортировать векторные изображения (SVG), хотя экспортировать в SVG легко и удобно.<br />
<br />
Для Draw есть неофициальный дополнительный модуль, который использует движок Apache Batik для перевода файлов SVG в формат OpenDocument, но мы его здесь рассматривать не будем, поскольку он не входит в официальный релиз и полной поддержки стандарта SVG все равно не обеспечивает (заметно, впрочем, что разработчики постарались). Зато другие типы ввода Draw очень даже удались, включая ввод полезных, хоть и редко встречающихся файлов DXF (AutoCAD), EMF и RGB TIFF.<br />
<br />
Более очевидный недостаток Draw – жадная до ресурсов натура всего пакета. Тонны чернил извели, обсуждая, сколько времени уходит на вызов OOo к жизни, но съедаемый им объем памяти почему-то обходят молчанием. А ведь если для редактирования растровых элементов вашего дизайна вы запустили и Draw и Gimp, проблемы обеспечены.<br />
<br />
Какое место в нашем Сравнении занимает эта программа? Мы бы сказали, что в Draw есть все – по крайней мере, с виду. Стиль жизни у программы, может быть, и гламурный, но иногда она лежит ночью без сна и размышляет, не упустила ли чего-нибудь.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Многое делает очень хорошо, но дряблая, и местами ей нехватает воображения.<br />
* Рейтинг - 8/10<br />
<br />
=== Inkscape ===<br />
<br />
La belle du jour [царица бала, – прим. ред.] графических редакторов с открытым кодом.<br />
* ВЕРСИЯ: 0.4.2<br />
* WEB: [http://www.inkscape.org www.inkscape.org]<br />
* Цена: Бесплатно по лицензии LGPL<br />
<br />
[[Изображение:Img_79_31_1.jpg|thumb|В Inkscape всего лучше удается трассировка растровых изображений. И раскраска роботов.]]<br />
<br />
Некогда ответвившись от инициативы Sodipodi, Inkscape сейчас лидирует среди инструментов векторной графики для Gnome. Хотя разработчики OpenOffice.org заявляют, что SVG был задуман как формат вывода (истинная правда), авторы данного кода этого в голову не брали. Inkscape использует SVG в качестве «родного» формата, и, по большому счету, это хорошо.<br />
<br />
Приходится признать, что Inkscape не на 100% выполняет тестовые требования SVG 1.1, но ведь и все прочие программы из тех, что мы испытывали, тоже их не выполняют – в частности, дополнения к рендерингу текста и режимы наложения работают в режиме ограниченной функциональности (проще говоря, не поддерживаются). Однако же это не мешает редактировать документы, в которых используются эти свойства, или выводить их на экран.<br />
<br />
'''Минимализм = голяк'''<br />
<br />
С точки зрения интерфейса, Inkscape выглядит очень чисто – едва ли не слишком чисто. Инструменты рисования прибились к левой стороне окна, а остальные элементы управления и прочая информация находятся в двухэтажной панели инструментов наверху. Любая операция посложнее вызывает уместное (в большинстве случаев) диалоговое окно.<br />
<br />
Функция Свойства Объекта (Object Properties) – первая заповедь поддержки SVG данной программой, но выполняется она странновато. Щелкните правой кнопкой мыши, чтобы получить всплывающее меню и выбрать Свойства Объекта. Возможно, вы ожидаете увидеть информацию о цвете объекта или толщине штриха (зря ожидаете, эти данные – в пункте меню Заливка) или, по крайней мере, расположении объекта на странице (тоже зря, оно показано в панели инструментов). Все, что вы видите – это диалог, позволяющий редактировать XML-свойства объекта. Круто, конечно, что вы можете редактировать на таком уровне – это крайне важно, но способ исполнения неоправданно запутан. В большинстве случаев пользователь пребывает в блаженном неведении нюансов, отличающих Id, Label и Title, а именно эти пункты вы первым делом и увидите.<br />
<br />
Работа со слоями тоже огорчает, хотя и не до такой степени, как в Draw. На сей раз слои представлены в виде выпадающего списка внизу страницы. Нельзя отрицать, что здесь хватает возможностей для полезных действий над слоями, но различать слои при работе трудно. Здесь и только здесь можно было бы позаимствовать принципы пользовательского интерфейса из Gimp – но не сообразили.<br />
<br />
'''Свободное рисование'''<br />
<br />
Но все это мелочи по сравнению с богатым выбором инструментов и простотой их использования. Программа, например, проще всех создает градиенты. Трассировка растровых изображений дала наилучшие результаты из всех инструментов, рассмотренных в этом Сравнении (причина, скорее всего, в возможности более тонкой настройки), а уж с текстом можно делать потрясающие вещи. Там, где Draw имеет тенденцию склоняться к предустановленным эффектам, Inkscape дает больше свободы, хотя и требует от пользователя куда больше взамен.<br />
<br />
Поддержка файловых форматов в Inkscape достойная. Растровые форматы включают TIFF и Targa, но, вероятно, еще полезнее структурная поддержка таких форматов, как Adobe Illustrator. Вывод немного более ограничен: можно выбирать из растрового вывода, небольшой группы форматов PostScript (включая PDF) и Inkscape или простой SVG (сжатый или нет, в обоих случаях). Еще имеется поддержка довольно странного экспорта в POV-Ray, но его мы тестировать не стали.<br />
<br />
Разработчики постарались включить сюда и некоторые полезные для хакеров инструменты. Inkscape поддерживает скрипты, созданные с помощью Python – но чего ради вылезать на консоль и запускать Vi, если можно посмотреть скрипт изнутри? Более того, встроенный редактор XML позволит знающему пользователю проникнуть внутрь структуры рисунка и сделать быстрые исправления или добавить дополнительные данные в файл.<br />
<br />
Из всех пакетов, именно в этом проще всего рисовать сложные формы. Инструменты рисования легко выбирать, и они выполняют то, что вы от них хотите; возможность применять многочисленные слои и прозрачность, особенно при смешивании, позволяют ускорить создание сложного изображения. У предыдущих версий Inkscape были проблемы с некоторыми аспектами прозрачности – то, что хорошо выглядело в Inkscape, могло оказаться серым в браузере или в другом приложении SVG. Теперь эти погрешности ликвидированы. Отсутствие должных смешений объектов отбрасывает программу назад, но так как в настоящий момент это один из наиболее активно развивающихся векторных инструментов, надо думать, что недостатки будут устранены.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Отсутствует несколько важных функций, но в остальном – очень, очень впечатляет.<br />
* Рейтинг - 8/10<br />
<br />
=== Sketsa ===<br />
<br />
Aскeтичная коммерческая попытка.<br />
* ВЕРСИЯ: 3.3<br />
* WEB: [http://www.kiyut.com www.kiyut.com]<br />
* Цена: $49<br />
<br />
[[Изображение:Img_79_32_1.jpg|thumb|Хорошая поддержка SVG, а в остальном – полная ерунда.]]<br />
<br />
Sketsa отличается от инструментов, которые мы рассматривали, по двум причинам: она использует Java, и она создана исключительно как SVG-редактор. Последнее никак не должно стать препятствием ни для вдохновения, ни для успеха этой программы. В конце концов, SVG создавался, чтобы быть lingua franca векторной графики, так что довольно скоро все подобные приложения станут редакторами SVG.<br />
<br />
Однако Sketsa применяет спартанский подход – ничего лишнего, как будто функциональность и дружественность по отношению к пользователю – это экстравагантное украшательство, от которого нужно избавиться любой ценой. Интерфейс Swing не производит приятного впечатления, функции разбросанные, и хотя Sketsa, возможно, на данный момент лучшее приложение для рендеринга SVG-файлов, в самом приложении такие сложные изображения не создать. Более того, панели, выполненные в «инспекторском» стиле с правой стороны, производят впечатление, что они недалеко ушли от самого XML – хотя это может кому-то и понравиться.<br />
<br />
Вы, очевидно, рассчитываете, что Sketsa сможет безупречно читать и записывать SVG файлы, и действительно, она хорошо справилась с тестовыми изображениями. Но, к сожалению, вы вряд ли намешаете здесь изысканный шедевр – в программе нет ни смешивания, ни слоев.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Хорошая поддержка формата SVG, хороший рендеринг, а сверх этого почти ничего.<br />
* Рейтинг - 5/10<br />
<br />
=== Glips Graffiti ===<br />
<br />
Кросс-платформный редактор на основе Batik.<br />
* ВЕРСИЯ: 1.3<br />
* WEB: [http://glipssvgeditor.sourceforge.net glipssvgeditor.sourceforge.net]<br />
* Цена: Бесплатно по лицензии Apache<br />
<br />
[[Изображение:Img_79_32_2.jpg|thumb|Бедная родственница Sketsa. Увы.]]<br />
<br />
Сходство между Glips Graffiti и Sketsa заметно сразу. Обе программы используют Java, и ни одна из них не претендует на большее, чем роль просто хорошего редактора. Однако опыт работы с ними в качестве пользователя не позволяет продолжить аналогию. Хотя Graffiti выглядит малость симпатичнее, ей, мягко говоря, не хватает отзывчивости. Хорошо еще, что тут нет сложных процедур вроде смешения или прозрачности – они бы вообще все затормозили.<br />
<br />
Очень жаль – хотя бы потому, что бесплатная программа хуже своего ближайшего конкурента. В ней тоже не хватает любви, да еще и функций маловато. Понятно, что Glips Graffiti пока что в развитии, но от версии 1.3 вы вправе ожидать большего. Минимальная поддержка файловых форматов и никаких функций, кроме рисования простых форм… наш поиск программы-победителя значительно сужается.<br />
<br />
Хотя программа, безусловно, работает, и провела впечатляющий рендеринг наших SVG, все же на нее не захочется тратить время, чтоб создать рисунок с нуля. Пока не доросла.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Единственное, за что можно похвалить программу – хороший рендеринг SVG.<br />
* Рейтинг - 3/10<br />
<br />
=== Skencil ===<br />
<br />
Инструмент для создания зарисовок на Python.<br />
* ВЕРСИЯ: 0.6.16<br />
* WEB: [http://www.nongnu.org/skencil www.nongnu.org/skencil]<br />
* Цена: Бесплатно по лицензии GPL<br />
<br />
[[Изображение:Img_79_32_3.jpg|thumb|Лихо рисует, использует Python.]]<br />
<br />
Эту маленькую жемчужину создал Бернхард Херцог (Bernhard Herzog) на Python и Tkinter, интерфейсе Python для Tk – инструментария разработки графических интерфейсов. Не ждите продвинутых функций – при нашем тестировании Skencil упорно сопротивлялся всем попыткам заставить работать смешивание. Хотя рендеринг шрифтов действительно хорош, в плане достижимых результатов он все еще ограничен.<br />
<br />
Это инструмент для набросков [оно и логично, судя по названию, – прим.ред.], то есть он лучше всего приспособлен для того, чтобы начеркать что-нибудь, а вовсе не для создания подробной схемы ротора, и, как большинство таких инструментов, не предлагает функции соединения объектов наподобие имеющейся в Dia. Зато есть простой и чуткий интерфейс с понятными иконками, позволяющий вам в шесть секунд намалевать что-то в стиле если не Айвазовского, то хотя бы Пушкина (на полях). В нем нет прозрачности, блендинга, трассировки растрового изображения и многого другого… но, минуточку, что это? Слои, перечисленные, как положено, списком на определенной панели, в стиле, похожем на Gimp! Вы действительно можете увидеть, какие слои активны! И даже сказать, где находятся объекты! Вот и думай тут...<br />
<br />
Касательно файлов, Skencil поддерживает SVG, WMF, PDF и Adobe Illustrator для экспорта, хотя при считывании этих форматов наблюдалась некие проблемы. Но все же как быстрое, использующее скрипты маленькое приложение для зарисовок оно имеет свои достоинства.<br />
<br />
''' Вердикт Linux Format'''<br />
<br />
Простой, но эргономичный и понятный интерфейс. Результат зависит от формата файлов.<br />
* Рейтинг - 5/10<br />
<br />
===Наш вердикт===<br />
'''Inkscape - 8/10'''<br />
<br />
Было бы здорово, если бы всегда существовал «чистый» победитель нашего состязания – но если бы все было настолько очевидно, вы бы нашли его и без нас, и не нужны были бы долгие дни кропотливых исследований, которые привели к обнародованию этих результатов!<br />
<br />
В данном случае победителя выбрать трудно, потому что большинство приложений, рассмотренных здесь, имеют свои козыри. Например, в создании структурных схем трудно превзойти [[#Dia|Dia]], а [[#OpenOffice.org Draw|OOo Draw]] выигрывает благодаря своей возможности взаимодействия с другими элементами пакета OOo.<br />
<br />
Однако [[#OpenOffice.org Draw|OOo Draw]] не может импортировать SVG без дополнительного модуля, поэтому за ним остается второе место после [[#Inkscape|Inkscape]]. [[#Inkscape|Inkscape]] быстр, прост в использовании, имеет кучу функций, и более чем способен создавать высококлассные иллюстрации или простые для понимания схемы. Его интерфейс прост и эргономичен, хотя способ представления слоев стоило бы еще продумать. [[#Inkscape|Inkscape]] все еще очень активно перерабатывается, и в этом, возможно, его главный плюс.<br />
<br />
Сравните его со узкоспециализированным редактором SVG, например, [[#Sketsa|Sketsa]], и огромная разница в амбициях станет очевидна.<br />
<br />
Мир векторной графики способен на сюрпризы. Учитывая продолжающиеся попытки портировать Xara в Linux (как Open Source), интересно будет посмотреть, во что выльются эти приложения через полгода.<br />
{| align="center" border="1" cellspacing="0" cellpadding="3"<br />
!<br />
!'''Inkscape'''<br />
!'''OOo Draw'''<br />
!'''Xfig'''<br />
!'''Dia'''<br />
!'''Karbon14'''<br />
!'''Glips Graffiti'''<br />
!'''Skencil'''<br />
!'''Sketsa'''<br />
|-<br />
|'''Версия'''<br />
|0.42<br />
|2.0.1<br />
|3.2.5<br />
|0.94<br />
|0.2<br />
|1.3<br />
|0.6.16<br />
|3.3<br />
|-<br />
|'''Лицензия'''<br />
|GPL<br />
|LGPL<br />
|Custom<br />
|GPL<br />
|GPL<br />
|Apache<br />
|GPL<br />
|Proprietary<br />
|-<br />
|'''Цена'''<br />
|Free<br />
|Free<br />
|Free<br />
|Free<br />
|Free<br />
|Free<br />
|Free<br />
|$49<br />
|-<br />
|'''Инструментарий'''<br />
|GTK<br />
|GTK<br />
|X<br />
|GTK<br />
|KDE<br />
|Java<br />
|Python/Tk<br />
|Java<br />
|-<br />
|'''Платформы'''<br />
|Linux, Win, Mac<br />
|Linux, Win, Mac<br />
|Linux, Mac**<br />
|Linux<br />
|KDE<br />
|Java<br />
|Linux, Mac<br />
|Java<br />
|-<br />
|'''Поддержка шрифтов'''<br />
|All<br />
|All<br />
|Latex/PS<br />
|All<br />
|All<br />
|All<br />
|All<br />
|All<br />
|-<br />
|'''Перевод текста в кривые'''<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|V<br />
|-<br />
|'''Привязка текста к контуру'''<br />
|V<br />
|V<br />
|<br />
|<br />
|V****<br />
|<br />
|V******<br />
|<br />
|-<br />
|'''Прозрачность'''<br />
|V<br />
|V<br />
|<br />
|<br />
|V<br />
|V<br />
|<br />
|V<br />
|-<br />
|'''Смешивание/tweening'''<br />
|*<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|V<br />
|<br />
|-<br />
|'''Клонирование'''<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''Связывание объектов'''<br />
|V<br />
|V<br />
|<br />
|V<br />
|<br />
|<br />
|<br />
|V<br />
|-<br />
|'''Трансформации'''<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|V<br />
|-<br />
|'''Библиотеки'''<br />
|<br />
|<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''3D-эффекты'''<br />
|<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''SVG XML редактирование'''<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|V<br />
|-<br />
|'''Слои'''<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|<br />
|V<br />
|<br />
|-<br />
|'''Трассировка растра'''<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''Язык макросов'''<br />
|Python<br />
|StarBasic<br />
|<br />
|Python<br />
|Plugins<br />
|<br />
|<br />
|Python<br />
|-<br />
|'''''Input Входные форматы'''''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''SVG'''<br />
|V<br />
|*****<br />
|<br />
|V***<br />
|V<br />
|V<br />
|V***<br />
|V<br />
|-<br />
|'''WMF'''<br />
|V<br />
|V<br />
|<br />
|<br />
|V<br />
|<br />
|V<br />
|<br />
|-<br />
|'''Adobe'''<br />
|V<br />
|<br />
|<br />
|<br />
|V<br />
|<br />
|V<br />
|<br />
|-<br />
|'''Dia'''<br />
|V<br />
|<br />
|<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''AutoCAD DXF'''<br />
|<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''Xfig'''<br />
|<br />
|<br />
|V<br />
|V<br />
|<br />
|<br />
|V<br />
|<br />
|-<br />
|'''''Форматы вывода'''''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''EPS'''<br />
|V<br />
|<br />
|V<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|-<br />
|'''Tex/Latex'''<br />
|V<br />
|<br />
|V<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''PDF'''<br />
|V<br />
|V<br />
|V<br />
|<br />
|V<br />
|<br />
|V<br />
|<br />
|-<br />
|'''SVG'''<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|-<br />
|'''Bitmap'''<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|V<br />
|*****<br />
|V<br />
|-<br />
|'''Flash (.swf)'''<br />
|<br />
|V<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
|'''Adobe'''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|V<br />
|<br />
|-<br />
|'''WMF'''<br />
|<br />
|V<br />
|<br />
|<br />
|V<br />
|<br />
|V<br />
|}<br />
<br />
<nowiki>* с помощью экспериментального модуля ** порт для Windows – Winfig *** неполная совместимость **** только трансформируется ***** существует plug-in ****** только к ломаной кривой</nowiki><br />
<br />
[[Категория:Сравнение]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF98:Java_EELXF98:Java EE2008-12-11T09:26:38Z<p>WikiSysop: Отмена правки № 5894 участника OlosiTdelc (обсуждение)</p>
<hr />
<div>{{Цикл/Java EE}}<br />
==<font color=darkred>Struts</font>, великий и ужасный==<br />
<br />
''<font color=darkred>'''ЧАСТЬ 10'''</font> Компьютеры были придуманы, чтобы избавить человечество от рутины – так зачем делать вручную то, что можно сгенерировать автоматически? '''Александр Бабаев''' покажет, как Struts позволяет избежать монотонного кодирования приложений J2EE.''<br />
<br />
Вручную делать простые вещи хорошо: быстро, просто, понятно. Но что делать, если нужно так же быстро и просто создать нечто большое? Сайт-портал, например? Не тот портал, который Яндекс, а корпоративный – где интегрирована система хранения документов, информационная система, наша адресная книга?<br />
<br />
В PHP в этом случае приходит на помощь ''CMS''. Сладкие слова, которые обещают «в два клика» сделать вам все что угодно. Маркетинг, конечно, страшная сила, но почему так много ''CMS'' на PHP, и нет на ''Java''?<br />
<br />
Возможно, просто потому что не нужно. Место ''CMS'' в ''Java'' занимают разнообразные инструментарии разработчика, которые помогают обходить сложные и рутинные работы. В результате можно небольшими силами сделать систему, по сложности намного превосходящую то, что можно сделать «вручную».<br />
<br />
===Что включается в Struts?===<br />
<br />
''Struts'' не изобретает велосипедов. В его основе лежит шаблон «MODEl-View-Controller», который мы рассматривали в [[LXF92:Java EE|LXF92]], но с его помощью проще создать грамотное приложение, так как четко определены задачи по его созданию; проще разобраться, что необходимо написать для получения результата.<br />
<br />
Итак, ''Struts'' (будем рассматривать более простую, первую версию) содержит:<br />
<br />
*''API'' для создания обработчика запросов (менеджер, распределяющий запросы по действиям) и для создания самих действий (<font color=darkred>Actions</font>).<br />
*''API'' для создания обработчиков форм.<br />
*''API'' для работы с проверкой корректности заполнения (валидации) форм.<br />
*''Tiles''. Расширение для создания модульных страниц (что-то «вроде SSI»).<br />
*''JSP-taglib'', библиотека ''JPS''-тэгов для упрощения написания JSP-страниц.<br />
*''XML''-конфигурационные файлы, для простой и быстрой настройки всего вышеперечисленного и связи его друг с другом.<br />
<br />
Все это в предыдущих статьях мы делали вручную. Теперь настало время проделать то же самое более «технологично».<br />
<br />
===Как этим пользоваться?===<br />
<br />
Во-первых, библиотеку нужно скачать. Это можно сделать со странички http://struts.apache.org/download.cgi#struts138. После чего следует распаковать полученный файл и вытащить оттуда все JAR-архивы.<br />
<br />
В качестве примера, создадим уже знакомую телефонную книгу. Сперва каталог; в нем, как всегда, организуем подкаталоги для исходных текстов, скомпилированного кода, библиотек и JSP-файлов. Получится что-то такое:<br />
<br />
*'''libs'''<br />
**''antlr-2.7.2.jar''<br />
**''bsf-2.3.0.jar''<br />
**''commons-beanutils-1.7.0.jar''<br />
**''commonschain-1.1.jar''<br />
**''commons-digester-1.8.jar''<br />
**''commons-fileipload-1.1.1.jar''<br />
**''commons-io-1.1.jar''<br />
**''commons-logging-1.0.4.jar''<br />
**''commons-validator-1.3.1.jar''<br />
**''jstl-1.0.2.jar''<br />
**''oro-2.0.8.jar''<br />
**''standart-1.0.2.jar''<br />
**''struts-core-1.3.8.jar''<br />
**''struts-el-1.3.8.jar''<br />
**''struts-extras-1.3.8.jar''<br />
**''struts-faces-1.3.8.jar''<br />
**''struts-mailreader-dao-1.3.8.jar''<br />
**''struts-scripting-1.3.8.jar''<br />
**''struts-taglib-1.3.8.jar''<br />
**''struts-tiles-1.3.8.jar''<br />
*'''out'''<br />
*'''src'''<br />
**''MessageResources_en.properties''<br />
**''MessageResources_ru.properties''<br />
**'''ru'''<br />
*'''web'''<br />
**''index.jsp''<br />
**'''pages'''<br />
**'''WEB-INF'''<br />
<br />
Затем в каталог библиотек нужно положить JAR-файлы ''Struts''. Готово? Тогда можно приступать к кодированию.<br />
<br />
Когда запрос приходит в сервлет, он первым делом попадает в ''Struts'', который перенаправляет его в менеджер запросов (<font color=darkred>ActionServet</font>) и далее в нужное действие (<font color=darkred>Action</font>). Это происходит примерно так:<br />
<br />
Как видно, схема здорово напоминает примененную нами при создании адресной книги. Зачем тогда ''Struts''? А затем, чтобы не писать много-много однотипного кода, который повторяется из проекта в проект.<br />
<br />
===Конфигурационные файлы===<br />
<br />
Вначале научимся запускать ''Struts''. Для этого нужно перенаправить все запросы сервлету-обработчику и написать файл конфигурации. Вот<br />
простой дескриптор для простого ''Struts''-приложения:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8"?><br />
<web-app><br />
<servlet><br />
<servlet-name>action</servlet-name><br />
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class><br />
<init-param><br />
<param-name>config</param-name><br />
<param-value>/WEB-INF/struts-config.xml</param-value><br />
</init-param><br />
</servlet><br />
<servlet-mapping><br />
<servlet-name>action</servlet-name><br />
<url-pattern>*.do</url-pattern><br />
</servlet-mapping><br />
</web-app><br />
</source><br />
Видно, что все запросы <font color=darkred>*.do</font> передаются сервлету <font color=darkred>action</font>, обрабатываемому классом <font color=darkred>ActionServlet</font>. Это стандартный класс Struts, который перенаправляет запросы в действия. Ему передается конфигурационный файл '''struts-config.xml'''. Вот он:<br />
<source lang="xml"><br />
<?xml version="1.0" encoding="UTF-8" ?><br />
<struts-config><br />
<form-beans><br />
<form-bean name="addForm" type="org.apache.struts.validator.DynaValidatorForm"><br />
<form-property name="name" type="java.lang.String" initial="Name"/><br />
<form-property name="phone" type="java.lang.String" initial="1234567"/><br />
<form-property name="age" type="java.lang.Integer" initial="20"/><br />
<form-property name="comment" type="java.lang.String" initial="NoComment"/><br />
</form-bean><br />
<action-mappings><br />
<action path="/add" name="addForm" validate="true" type="ru.linuxformat.actions.Add"><br />
<forward name="form" path="/pages/Add.jsp"/><br />
<forward name="done" path="/list.do"/><br />
</action><br />
<action path="/list" type="ru.linuxformat.actions.ShowAll"><br />
<forward name="ok" path="/pages/List.jsp"/><br />
</action><br />
</action-mappings><br />
<message-resources parameter="MessageResources"/><br />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"><br />
<set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml"/><br />
</plug-in><br />
</struts-config><br />
</source><br />
В данном файле описана форма добавления контакта (<font color=darkred>form-bean</font>), с использованием стандартного класса формы с поддержкой автоматической проверки полей (<font color=darkred>DynaValidatorForm</font>).<br />
<br />
После этого описано, какие запросы в какие классы перенаправляются.<br />
<source lang="xml"><br />
<action path="/list" type="ru.linuxformat.actions.ShowAll"><br />
<forward name="ok" path="/pages/List.jsp"/><br />
</action><br />
</source><br />
В этом примере запрос <font color=darkred>/list.do</font> пойдет в класс <font color=darkred>ShowAll.Forward</font> используется внутри действия, чтобы упростить перенаправление вывода. Дальше будет понятно, как.<br />
<br />
После описания действий все становится совсем просто.Описывается файл, откуда будут браться локализованные строки, и<br />
подключается модуль, который обеспечивает простую и мощную валидацию (проверку) форм.<br />
<br />
===Действия===<br />
<br />
Перейдем к классам. Все они должны быть унаследованы от класса <font color=darkred>org.apache.struts.action.Action</font>. При этом в простейшем случае нужно переопределить только один метод, <font color=darkred>execute(…)</font>. Например, вот действие, которое показывает список контактов:<br />
<source lang="java"><br />
public class ShowAll extends Action {<br />
public ActionForward execute(ActionMapping aActionMapping,<br />
ActionForm aActionForm,<br />
HttpServletRequest aHttpServletRequest,<br />
HttpServletResponse aHttpServletResponse)<br />
throws Exception {<br />
aHttpServletRequest.setAttribute("contacts",<br />
Contacter.getInstance().getContactsSortedByName());<br />
return aActionMapping.findForward("ok");<br />
}<br />
}<br />
</source><br />
В этом действии в атрибут запроса кладется список всех контактов, после чего вызывается форвард <font color=darkred>"ok"</font> – именно он был описан чуть выше.<br />
<source lang="xml"><br />
<action path="/list" type="ru.linuxformat.actions.ShowAll"><br />
<forward name="ok" path="/pages/List.jsp"/><br />
</action><br />
</source><br />
Из описания видно, что форвард перенаправляет обработку запроса в '''List.jsp''. Посмотрим, что в нем написано:<br />
<source lang="xml"><br />
<%@ page pageEncoding="UTF-8" language="java" contentType="text/<br />
html; utf-8" %><br />
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><br />
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %><br />
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %><br />
<html:html><br />
<head><br />
…<br />
</head><br />
<body><br />
…<br />
<table border="1"><br />
<tr><br />
<td><bean:message key="AddressBook.list.name"/></td><br />
<td><bean:message key="AddressBook.list.phone"/></td><br />
<td><bean:message key="AddressBook.list.comment"/></td><br />
<td><bean:message key="AddressBook.list.age"/></td><br />
</tr><br />
<logic:iterate id="contact" type="ru.linuxformat.Contact"<br />
name="contacts" scope="request"><br />
<tr><br />
<td><%=contact.getName()%></td><br />
<td><%=contact.getPhone()%></td><br />
<td><%=contact.getComment()%></td><br />
<td><%=contact.getAge()%></td><br />
</tr><br />
</logic:iterate><br />
</table><br />
</body><br />
</html:html><br />
</source><br />
На многоточия заменены неинтересные куски кода, а интересное – в самом начале листинга (<font color=darkred>taglib</font>). Это так называемые библиотеки тэгов. Примеры можно видеть здесь же. Скажем, <font color=darkred><bean:messagekey="AddressBook.list.name"/></font> вставляет локализованную строку, соответствующую данному ключу. А <font color=darkred><logic:iterate></font> умеет итерировать по коллекциям (списки, ассоциативные массивы и так далее). В данном случае мы итерируем по атрибуту запроса <font color=darkred>contacts</font>, который мы положили туда в действии.<br />
<br />
===Формы, проверка корректности форм===<br />
<br />
Другая интересная часть – формы. Второе действие, добавление контакта, выглядит следующим образом (приведен только код метода <font color=darkred>execute</font>):<br />
<source lang="java"><br />
if (aHttpServletRequest.getParameter("name") == null) {<br />
return aActionMapping.findForward("form");<br />
} else {<br />
DynaActionForm form = (DynaActionForm) aActionForm;<br />
Contacter.getInstance().addContact(form.getString("name"), form.<br />
getString("phone"), form.getString("comment"), (Integer) form.<br />
get("age"));<br />
return aActionMapping.findForward("done");<br />
}<br />
</source><br />
Логика очень похожа на ту, что была в предыдущих статьях. Если форма не заполнена, переходим по форварду <font color=darkred>form</font>, который показывает форму для ввода. Если она заполнена (и валидирована), то контакт добавляется в список, и мы переходим на форвард <font color=darkred>done</font>. Вот и сама форма (точнее, ее основная часть):<br />
<source lang="xml"><br />
<html:form action="/add" method="post" onsubmit="return<br />
validateAddForm(this);"><br />
<table><br />
<tr><br />
<td><bean:message key="AddressBook.add.name"/>:</td><br />
<td><html:text property="name"/></td><br />
</tr><br />
…<br />
<tr><br />
<td colspan="2"><html:submit titleKey="AddressBook.add.<br />
submit"/></td><br />
</tr><br />
</table><br />
</html:form><br />
<html:javascript formName="addForm"/><br />
</source><br />
Тут интересны два момента. Во-первых, используются тэги ''Struts'' (<font color=darkred>html:…</font>), упрощающие создание компонентов формы. Во-вторых, используется скрипт валидации (<font color=darkred>onsubmit="…"</font> и <font color=darkred><html:Javascript …></font>). Он обеспечивает валидацию прямо в браузере, не отсылая запрос на сервер.<br />
<br />
Сами правила валидации задаются в файле '''validation.xml'''. Вот как это выглядит:<br />
<source lang="xml"><br />
<form-validation><br />
<formset><br />
<form name="addForm"><br />
<field property="age" depends="required,integer,intRange"><br />
<arg key="AddressBook.add.age"/><br />
<arg position="1" name="intRange" key="10"<br />
resource="false"/><br />
<arg position="2" name="intRange" key="20"<br />
resource="false"/><br />
<var><var-name>min</var-name><var-value>10</var-value></<br />
var><br />
<var><var-name>max</var-name><var-value>20</var-value></<br />
var><br />
</field><br />
</form><br />
</formset><br />
</form-validation><br />
</source><br />
Форму я создал в '''struts-config'''. Называться она должна так же. Для поля <font color=darkred>age</font> задается три правила валидации: <font color=darkred>required</font>, <font color=darkred>integer</font>, <font color=darkred>intRange</font>. Первое говорит, что поле обязательно, второе – что значение должно быть целочисленным, третье правило сообщает, что значение должно лежать в пределах от 10 до 20. В качестве параметров задаются аргументы сообщений, которые будут выводиться при ошибочном заполнении формы (<font color=darkred>arg</font>), и параметры для правил валидации (<font color=darkred>var</font>).<br />
<br />
===Локализация===<br />
<br />
Последняя часть, пока не описанная – локализация. Сообщения хранятся в так называемых properties-файлах, причем если property-файл называется '''MessageResources''', то, например, файл русской локализации должен называться '''MessageResources_ru.properties''', а английской – '''MessageResources_en.properties'''. Если нужно уточнить – например, английский язык, Америка – то получается так: '''MessageResources_en_US.properties'''.<br />
<br />
Структура файлов '''properties''' очень проста. Каждая строка (не пустая и не комментарий) состоит из двух частей, разделенных знаком равенства (<font color=darkred>=</font>). Слева – ключ, справа – значение этого ключа.<br />
<br />
Эти файлы нужно положить в каталог '''src''', и проконтролировать, чтобы они переписались туда же, куда попадают class-файлы. Плюс, для неанглийских<br />
файлов, их нужно преобразовать в ASCII-формат. Это делается утилитой ''native2ascii'' из поставки JDK. Инструкции по пользованию утилитой можно найти здесь: http://Java.sun.com/Javase/6/docs/technotes/tools/windows/native2ascii.html.<br />
<br />
После этого можно использовать в JSP вставки вида <font color=darkred><bean:message key="AddressBook.add.name"/></font>, вместо которых будет вставлена локализованная строка, соответствующая данному ключу (в примере – <font color=darkred>AddressBook.add.name</font>).<br />
<br />
===Что дальше?===<br />
<br />
''Struts'' – великолепная библиотека, позволяющая упростить разработку сложных приложений. Особенно хорошо такого рода библиотеки подходят для задач, в которых много монотонной работы: больших форм, большого количества простых действий, необходимость проверки данных, вводимых в форму, локализация.<br />
<br />
Также полезно, что используются стандартные средства: ''JSP'', ''Servlets'', да и сам ''Struts'' – самая распространенная библиотека для такого рода работ. В результате при приеме на работу, например, знание именно ''Struts'' позволяет набрать несколько дополнительных баллов.<br />
<br />
Правда, еще больше баллов дает знание ''EJB3''. Но об этом мы поговорим в следующей, заключительной статье.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF99:WordpressLXF99:Wordpress2008-12-11T09:25:32Z<p>WikiSysop: Отмена правки № 5895 участника AcellApasd (обсуждение)</p>
<hr />
<div>==10 лучших расширений для WordPress==<br />
<br />
Правду ли говорят, что лучшее – враг хорошего? Чтобы дать ответ на этот вопрос, '''Валентин Развозжаев''' решил рассмотреть десятку лучших расширений к лучшему блог-движку.<br />
<br />
В апреле 2007 года Яндекс опубликовал отчет о состоянии блогосферы российского Интернета. По его данным, общее число русскоязычных блогов достигло двух миллионов (всего в мире 76 миллионов блоггеров), каждую секунду в сетевых дневниках появляется в среднем пять новых записей, а среднестатистический блоггер – это девушка 21 года, которая живет в Москве и учится в ВУЗе. Любопытно, что интересы среднестатистической девушки-блоггера за последние несколько лет ничуть не изменились: это музыка, кино, психология, книги и секс.<br />
<br />
Хотя большинство блоггеров размещают свой дневник на одном из стандартных блог-хостингов (чаще всего http://LiveJournal.com и http://LiveInternet.ru), также растет и количество «автономных» блогов – к марту этого года оно достигло девяти тысяч. Среди движков, которыми пользуются автономные блоггеры, безоговорочно лидирует ''Wordpress'' (его доля составляет 71%, в то время как доля каждого из остальных движков – менее процента).<br />
<br />
Популярность ''Wordpress'' вполне закономерна: движок очень просто устанавливается и настраивается, поддерживает web-стандарты XHTML и CSS, позволяет выбрать тему оформления, поддерживает публикацию записей с помощью сторонних программ и сервисов. Для него разработано огромное количество расширений, способных удовлетворить все мыслимые и немыслимые потребности пользователей.<br />
<br />
Загрузить последнюю версию движка можно как с официального сайта разработчиков (http://wordpress.org/), так и с ряда других сайтов (например, http://maxsite.org/). В последнем случае вы получите полностью локализованный движок с набором предустановленных расширений, что очень удобно.<br />
<br />
Установка ''Wordpress'' очень проста. После загрузки архива распакуйте его в локальный каталог. Затем задайте настройки соединения с базой данных в файле '''wp-config-sample.php''' и переименуйте его в '''wp-config.php'''. После этого загрузите все файлы в корневой или любой другой каталог web-сервера. Затем откройте в браузере инсталляционный скрипт http://адрес_блога/wp-admin/install.php и следуйте указаниям мастера.<br />
<br />
С помощью административной панели http://адрес_блога/wp-admin/ можно задавать необходимые настройки движка, добавлять, редактировать и удалять записи, модерировать комментарии, управлять пользователями и т.д. На вкладке Плагины можно включать и отключать требуемые расширения, а также править их исходный код.<br />
<br />
Для установки расширения нужно скопировать исходные файлы в каталог http://адрес_блога/wp-content/plugins/ и затем активизировать его на вкладке Плагины. Иногда необходимо также внести изменения в файлы темы (каталог http://адрес_блога/wp-content/themes/текущая_тема/). Более подробная информация по установке расширения обычно содержится в файле '''readme.txt''' в архиве или на web-странице проекта.<br />
<br />
Наиболее полный список расширений Wordpress приведен на странице http://codex.wordpress.org/Plugins. Они разбиты по категориям: администрирование, реклама, управление комментариями, статистика, оптимизация блога в поисковых системах и т.д. В этой статье мы рассмотрим десятку наиболее интересных расширений, охватывающих почти все категории. И начнем с управления комментариями.<br />
<br />
===Комментарии===<br />
<br />
В оформлении комментариев в ''Wordpress'' есть пара недостатков, которые бросаются в глаза. Первый – при добавлении нового комментария нельзя цитировать предыдущие. Второй – комментарии располагаются не иерархически (как, например, в ''LiveJournal''), а один под другим. К счастью, и то, и другое поправимо.<br />
<br />
====1====<br />
<br />
Одним из решений первой проблемы служит расширение ''Quoter'' (http://www.damagedgoods.it/wp-plugins/quoter/). Оно может использоваться как для цитирования текста комментария, так и произвольного текста на странице.<br />
<br />
Настройки расширения (отображаемый текст, форматы даты и времени) можно задать на странице '''Настройки – Quote''' административной панели. Внешний вид формы добавления комментариев можно изменить путем редактирования файла http://адрес_блога/wp-content/themes/текущая_тема/comment.php.<br />
<br />
После внесения изменений в этот файл и активизации расширения в каждом комментарии появляется ссылка, с помощью которой можно процитировать его в ответе. Последняя на момент написания статьи версия ''Quoter'' позволяет цитировать комментарий только целиком.<br />
<br />
====2====<br />
<br />
Для решения второй проблемы подойдет расширение ''Brian’s Threaded Comments'' (http://meidell.dk/archives/2004/09/04/nested-comments/), с помощью которого можно организовать иерархию комментариев: группа связанных друг с другом комментариев будет отображаться в виде «лесенки».<br />
<br />
Подробные инструкции по установке расширения можно найти в файле '''install.txt''' в архиве программы.<br />
<br />
====3====<br />
<br />
С помощью расширения ''Show Top Commentators'' (http://www.pfadvice.com/wordpress-plugins/show-top-commentators/) можно сформировать список посетителей сайта, оставивших наибольшее количество комментариев, и вывести его на всеобщее обозрение прямо в блоге.<br />
<br />
Нужно отметить, что вместе с приятными ощущениями каждый из постоянных посетителей вашего сайта может получить дополнительную ссылку на свой блог. Для этого ему нужно лишь указать адрес своего сайта при добавлении комментария. Дополнительная ссылка на сайт, размещенная на посещаемом ресурсе, может повысить его Page Rank в Google и благоприятно сказаться на посещаемости. <br />
<br />
Настройки расширения ''Show Top Commentators'' можно задать с помощью редактора плагинов ('''Плагины > Редактор плагинов''') или путем редактирования файла '''show_top_commentators.php''' вручную. <br />
<br />
Основные настройки включают в себя:<br />
<br />
* задание периода сбора статистики, по истечении которого она обнуляется (час, день, месяц, год);<br />
* максимальное количество пользователей в списке;<br />
* исключение из статистики отдельных пользователей (например, администратора);<br />
* включение или отключение показа числа комментариев для каждого пользователя.<br />
<br />
===Статистика===<br />
<br />
Статистика знает все. Информация о самых читаемых и самых комментируемых записях, используемых посетителями браузерах, реферерах блога и его положении в поисковых системах может быть интересна не только автору дневника, но и его читателям. Между тем, стандартные блог-хостинги не предоставляют пользователям практически никакой статистики посещаемости ресурса. К счастью, в случае с ''Wordpress'' все обстоит по-другому. И сейчас мы в этом убедимся.<br />
<br />
====4====<br />
<br />
Начнем с расширения, которым можно было бы и закончить. С помощью ''Stattraq'' (http://thefunzone.awardspace.com/Wordpress/?page_id=63) можно получить исчерпывающую статистику использования блога, в которую входят следующие показатели. <br />
<br />
'''Информация о хитах.''' Под количеством хитов понимается число обращений пользователей к страницам сайта. Для каждого обращения приводится информация о дате и времени обращения, IP-адресе посетителя, реферере (ссылке, которая привела посетителя на ваш сайт) и информация об используемом браузере.<br />
<br />
'''Число пользовательских сеансов.''' Как и в предыдущем случае, для каждого сеанса приводится информация о дате и времени доступа, IP-адресе и браузере пользователя, а также о просмотренных страницах.<br />
<br />
'''Просмотренные страницы.''' Показатель представляет список наиболее популярных страниц сайта с указанием числа просмотров каждой страницы. Страницы сайта, на которых размещено более одной статьи (например, титульная страница или страницы рубрик), объединяются в один пункт списка под названием Mixed. Обычно этот пункт занимает верхнюю строчку в списке.<br />
<br />
'''Браузеры.''' Список наиболее популярных браузеров, для каждого из которых указывается общее число обращений.<br />
<br />
'''Рефереры.''' Реферер блога – это сайт, с которого посетитель перешел к вам. Выводится список рефереров блога, для каждого из которых указывается страница вашего сайта, на которую перешел пользователь.<br />
<br />
'''Ключевые слова.''' Список ключевых фраз, результаты поиска по которым в поисковых системах Google, Yahoo и MSN содержали ссылки на страницы вашего сайта, по которым пользователи и пришли к вам. Этот показатель формируется на основе предыдущего.Ключевые слова для поисковой системы Yandex пока не попадают в этот список, впрочем, ничто не мешает вам найти их самостоятельно в списке рефереров.<br />
<br />
'''Положение в поисковых системах.''' Число проиндексированных страниц блога в каждой из поисковых систем: Google, Yahoo и MSN и общее число страниц.<br />
<br />
'''IP-адреса пользователей.''' Список IP-адресов с указанием даты и времени доступа, используемого браузера и информации о просмотренных страницах для каждого IP-адреса.<br />
<br />
Статистику по каждому из этих показателей можно формировать для конкретного временного интервала (час, день, месяц, год). Например, можно получить информацию о просмотренных страницах, IP-адресах пользователей и реферерах сайта за прошедшие сутки, за определенный месяц или год. Для большинства показателей производится автоматическое построение графиков.<br />
<br />
Настройки расширения позволяют разрешить или запретить доступ к странице со статистикой незарегистрированным пользователям, а также исключить из формирования статистики визиты роботов поисковых систем и агрегаторов RSS.<br />
<br />
После установки расширения для доступа к странице со статистикой используйте адрес http://адрес_блога/wp_Stattraq/. Как правило, статистика формируется за несколько часов.<br />
<br />
====5====<br />
<br />
На основе расширения ''Stattraq'' были разработаны многие другие, среди них – ''MostWanted'' (http://boakes.org/most-wanted), с помощью которого можно получить список самых популярных статей блога. Для формирования этого списка программа использует данные о просмотренных страницах сайта за определенный период времени.<br />
<br />
Настройки расширения позволяют задать следующие параметры:<br />
<br />
* максимальный размер списка;<br />
* максимальную длину отображаемого фрагмента названия статьи;<br />
* включить или отключить вывод числа просмотров для каждой статьи;<br />
* период времени, по истечении которого статистика обнуляется (день, месяц, год);<br />
* способ определения уникальных посетителей (по IP-адресам или по пользовательским сеансам).<br />
<br />
Период времени, для которого формируется статистика, лучше задавать таким, чтобы список самых популярных статей обновлялся достаточно часто (например, раз в месяц).<br />
<br />
====6====<br />
<br />
С помощью расширения ''Most Commented'' (http://dev.wp-plugins.org/browser/most-commented/) можно получить список самых комментируемых статей блога. Для каждой статьи отображается общее количество комментариев.<br />
<br />
Настройки ''Most Commented'' позволяют задать максимальную длину списка статей, а также изменить формат вывода списка.<br />
<br />
===Борьба со спамом===<br />
<br />
Каждый, кто хотя бы раз администрировал мало-мальски посещаемый сайт, знает, что вместе с потоком отзывов от заинтересованных пользователей на ваши форумы, в гостевые и комментарии к записям рано или поздно приходит несравнимо больший поток сообщений от роботов, активно рекламирующих специальные лекарственные средства и услуги. ''Wordpress'' – не исключение из общего правила.<br />
<br />
Можно выделить три основных типа спама, возможных в ''Wordpress''.<br />
<br />
'''Спам в комментариях.''' Самый распространенный и самый неприятный тип спама. Для борьбы с ним могут использоваться средства лексического анализа сообщений или CAPTCHA (от англ. “Completely Automated Public Turing test to tell Computers and Humans Apart” – полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей). Оба способа не лишены недостатков: расширения для автоматической фильтрации часто отсеивают довольно большую часть полезных сообщений, а для CAPTCHA любого уровня сложности при желании можно написать скрипт распознавания картинки.<br />
<br />
'''Спам в трекбэках.''' «Трекбэк» (trackback) представляет собой способ дистанционного взаимодействия между различными сайтами. В соответствии с этим механизмом один из сайтов может уведомить другой о связи между некоторыми их частями, например, ассоциировать тематически сходные статьи. Для этого первый сайт посылает второму сообщение – «трекбэк пинг» (Trackback Ping). Получивший сообщение сайт отправляет подтверждение в виде XML-сообщения. В Wordpress трекбэки для каждой статьи могут отображаться рядом с комментариями.<br />
<br />
Возможны массовые нежелательные рассылки трекбэк-пинга. Проще говоря, спам. Для борьбы с ним разработан ряд расширений, большинство из которых используют самый простой способ борьбы с такого рода спамом: проверяют сайт-источник на наличие ссылки на ваш блог. Если на сайте-источнике такой ссылки нет, присланный трекбэк пинг помещается в очередь на модерирование.<br />
<br />
'''Спам в реферерах.''' Большинство пользователей получают статистику блога с помощью одного из стандартных сервисов, например, Hotlog или LiveInternet.Ru. Многие оставляют эту статистику, которая содержит и список рефереров сайта, в открытом доступе. Этим могут воспользоваться спамеры, которым достаточно запустить на сайт парутройку роботов для размещения спама в комментариях, чтобы попасть в список ваших рефереров.<br />
<br />
Следовательно, для борьбы с такого рода спамом достаточно нейтрализовать спам в комментариях.<br />
<br />
====7====<br />
<br />
Расширение ''Bad Behavior'' (http://www.homelandstupidity.us/software/bad-behavior/) производит фильтрацию спама всех типов. На основе анализа HTTP-запросов роботов и сравнения их с типичными HTTP-запросами пользователей сайта блокируются большинство сообщений нежелательного характера. Сравнение может осуществляться как непосредственно по строкам запроса, так и с использованием регулярных выражений.<br />
<br />
Проанализировать статистику работы расширения и задать его настройки можно на странице '''Настройки – Bad Behavior'''.<br />
<br />
Еще одним средством борьбы со спамом являются разнообразные генераторы CAPTCHA. Однако для изображения любого уровня сложности при желании можно написать скрипт разбора, да и для пользователей распознавать такие картинки – занятие не из приятных. Тем не менее, здесь есть и оригинальные решения, об одном из которых мы сейчас и поговорим.<br />
<br />
====8====<br />
<br />
За идею расширения ''reCaptcha'' (http://recaptcha.net/learnmore.html) его разработчикам можно смело ставить памятник. Вот в чем она состоит: пользователю предлагается разобрать фрагмент отсканированного из настоящей книги текста, состоящий из двух слов. Как известно, отсканированный текст очень плохо распознается компьютером. Поэтому разработчики ''reCpatcha'' и решили возложить эту нелегкую задачу на плечи пользователя.<br />
<br />
Но как же проверить правильность введенного пользователям ответа? Очень просто. Одно из двух слов заранее подбирается таким образом, чтобы оно хорошо распознавалось компьютером, второе – нет. Если пользователь правильно распознает первое слово, его ответ считается правильным, и результат распознавания второго слова передается на сервер.<br />
<br />
После этого второе слово повторно передается для распознавания нескольким пользователям, и по общему результату всех проверок принимается решение о правильном для него варианте. Таким образом пользователи, сами того не зная, вносят свой вклад в распознавание книг электронного архива Internet Archive (http://www.archive.org/index.php).<br />
<br />
===На десерт===<br />
<br />
При всех достоинствах движка ''Wordpress'' и автономных блогов в целом более 72% пользователей предпочитает им стандартные блог-хостинги. Причин тому множество, начиная с отсутствия специальных знаний у многих пользователей и заканчивая необходимостью платить за хостинг.<br />
<br />
Чтобы не оказаться в изоляции от основной части блогосферы, автономный блоггер может создать собственную учетную запись в ЖЖ и как-то синхронизировать его содержимое с основным блогом.<br />
<br />
Есть несколько вариантов такой синхронизации. Самый простой способ – скопировать запись в ЖЖ вручную после размещения ее в основном блоге. Однако каждый раз, когда в существующие записи блога вносятся какие-то изменения, эту нехитрую операцию придется повторять.<br />
<br />
Комментарии к записям в основном блоге и в ЖЖ также не будут связаны друг с другом. Как результат, пользователи ЖЖ не увидят комментариев, оставленных в основном блоге, а читатели основного блога – комментариев в ЖЖ. Таким образом, описанная схема не только не позволяет как следует синхронизировать блоги, но и порождает огромное количество бесполезных действий.<br />
<br />
====9====<br />
<br />
К счастью, у этой проблемы есть весьма элегантное решение. Расширение ''LJ Crossposter'' позволяет осуществить автоматическую перепубликацию («кросспостинг») записей основного блога в блог LiveJournal. Кроме этого, поддерживаются DeadJournal (http://www.deadjournal.com/) и другие платформы на основе LJ.<br />
<br />
В момент размещения записи в основном блоге расширение автоматически публикует ее в ЖЖ, а в случае изменения или удаления записи соответствующие изменения также вносятся в ЖЖ.<br />
<br />
После установки расширения на странице размещения записи появится виджет с настройками кросспостинга для каждой записи. Эти настройки позволяют включить или отключить кросспостинг записи в ЖЖ, включить или отключить комментарии к записи и задать ее видимость (публичная, только для друзей, скрытая).<br />
<br />
Остальные настройки расширения можно найти на странице '''Настройки > LiveJournal'''. Они позволяют выбрать используемую платформу (по умолчанию LiveJournal), задать имя пользователя и пароль, а также указать сообщества ЖЖ, в которые запись также может быть автоматически переопубликована вместе с публикацией в журнале.<br />
<br />
Одной из ключевых возможностей ''LJ Crossposter'' является выбор способа синхронизации комментариев в ЖЖ и основном блоге. Возможны два варианта. В первом случае комментарии не синхронизируются совсем, и в основном блоге и ЖЖ хранятся разные комментарии к одним и тем же записям.<br />
<br />
Во втором случае все комментарии хранятся в основном блоге, а ссылки просмотра комментариев и добавления нового комментария в каждой записи ЖЖ перенаправляют читателя в основной блог. Именно по такой схеме и работают многие автономные блоги, например, дневник Александра Плющева (http://plushev.com).<br />
<br />
Расширение позволяет переопубликовать в ЖЖ сразу все записи основного блога или записи из конкретных рубрик.<br />
<br />
Как уже говорилось выше, если комментарии в ЖЖ и основном блоге синхронизированы, то к каждой записи в ЖЖ добавляется ссылка на эту запись в основном блоге. Внешний вид ссылки и ее расположение можно изменить, отредактировав исходный файл расширения, но одна проблема все же остается: в ЖЖ не отображается количество комментариев к записи в основном блоге.<br />
<br />
Один из вариантов ее решения реализован разработчиками расширения ''LiveJournal Comments'' (http://a-bishop.spb.ru/archives/464). Оно формирует картинку с количеством комментариев к каждой записи с помощью HTTP-запроса к основному блогу. Для вставки рисунка в текст записи ЖЖ необходимо добавить вызов функции '''lj_comments()''' в код формирования заголовка записи в расширении ''LiveJournal Crossposter''.<br />
<br />
Для защиты содержимого блога от перепубликации на других сайтах могут использоваться различные механизмы. Одним из наиболее простых и эффективных способов является использование цифровой подписи. Под цифровой подписью здесь понимается некий набор символов (букв и цифр) или фраза естественного языка, уникальные для данного блога. После задания этого набора строка цифровой подписи вставляется в виде комментария в текст каждой записи и в ленту RSS. Дальнейший поиск по строке подписи в одной из поисковых систем позволит определить набор сайтов, на которых размещены статьи вашего блога.<br />
<br />
====10====<br />
<br />
Описанный механизм реализует расширение ''Digital Fingerprint'' (http://www.maxpower.ca/Wordpress-plugin-digital-fingerprint-detecting-content-theft/2006/09/25/). После его установки настройки можно задать на странице '''Управление > Digital Fingerprint'''. На этой странице задаются собственно цифровая подпись и ее положение в каждой записи по умолчанию (в начале записи, в конце записи, после первого абзаца). Подпись может включаться в каждую запись автоматически или вручную с помощью соответствующей кнопки на панели инструментов редактора.<br />
<br />
При выборе подписи необходимо руководствоваться следующими принципами:<br />
<br />
* Чем короче подпись, тем меньше шансов, что она будет обнаружена как людьми, так и при автоматической перепубликации записи.<br />
* Не следует использовать HTML, так как теги могут быть вырезаны при автоматической перепубликации записи.<br />
* Используйте необычные слова и фразы, которые нигде больше не встретите.<br />
* Перед использованием подписи проверьте ее уникальность с помощью известных поисковых систем.<br />
<br />
Помните, что согласно теореме о бесконечных обезьянах (http://ru.wikipedia.org/wiki/Теорема о бесконечных обезьянах), какую бы подпись вы ни выбрали, нет никаких гарантий того, что другой человек не выберет точно такую же. Поэтому стопроцентной гарантии это расширение не дает.<br />
<br />
===И напоследок===<br />
<br />
Мы представили вашему вниманию десятку лучших расширений для ''Wordpress'', но многие интересные расширения остались за рамками нашего обзора: например, ''Latest Comments'', который формирует список последних комментариев (http://maxsite.org/go/latest-comments.zip) или ''WP Admin Drop Down Menus'' (http://www.stuff.yellowswordfish.com/admin-drop-down-menus/), который выводит в панели администрирования выпадающее меню взамен традиционного. Думаю, вы сможете найти для себя еще много интересного. Удачи! '''LXF'''</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:WikiSysopОбсуждение участника:WikiSysop2008-11-14T14:07:07Z<p>WikiSysop: </p>
<hr />
<div>== Загрузка файлов ==<br />
На этом вики-сайте загрузка файлов запрещена<sup>[[Служебная:Upload|1]]</sup>. Включите, пожалуйста. --[[Участник:Lockal|Lockal]] 15:59, 10 марта 2008 (MSK)<br />
<br />
Включили, проверяйте. --[[Участник:WikiSysop|WikiSysop]] 17:10, 10 марта 2008 (MSK)<br />
: Не закачать PNG файлы. --[[Участник:Yaleks|Yaleks]] 17:11, 10 марта 2008 (MSK)<br />
:: Теперь, вроде, можно, но почему-то при попытке обратиться к странице описания генерируется 404. Буду разбираться завтра. --[[Участник:WikiSysop|WikiSysop]] 21:01, 10 марта 2008 (MSK)<br />
::: Да, это работает. Жду установки парсеров. --[[Участник:Yaleks|Yaleks]] 21:13, 10 марта 2008 (MSK)<br />
:::: Парсеры установлены --[[Участник:WikiSysop|WikiSysop]] 17:49, 11 марта 2008 (MSK)<br />
:::: А изображения можно смотреть по ссылкам вида http://wiki.linuxformat.ru/index.php?action=purge&title=Изображение:Img_81_76_2.png --[[Участник:Lockal|Lockal]] 21:23, 10 марта 2008 (MSK)<br />
::::: Теперь можно и по нормальным --[[Участник:WikiSysop|WikiSysop]] 17:49, 11 марта 2008 (MSK)<br />
<br />
А не пора ли оформить страницы Сообщество и Текущие события? --[[Участник:Guria|Guria]] 16:58, 10 марта 2008 (MSK)<br />
<br />
Киньте в [http://wiki.linuxformat.ru/index.php?title=MediaWiki:Common.js&action=edit MediaWiki:Common.js] содержимое http://wiki.pocketz.ru/wiki/MediaWiki:Common.js — это мой минимальный походный комплект для сайтов с Mediawiki. --[[Участник:Lockal|Lockal]] 18:58, 10 марта 2008 (MSK)<br />
<br />
: Просмотрел код, кинул, но что-то эффекта не вижу --[[Участник:WikiSysop|WikiSysop]] 08:33, 11 марта 2008 (MSK)<br />
<br />
Для встречающихся в статьях формул следует использовать тег <nowiki><math></nowiki> и LaTeX-разметку<sup>[[Информация для авторов|2]]</sup>. А <math>\mathrm{L\!\!^{{}_{\scriptstyle A}} \!\!\!\!\!\;\; T\!_{\displaystyle E} \! X}</math> -то отключён. Если можно, то включите ещё [http://www.mediawiki.org/wiki/Extension:Cite/Cite.php|расширение Cite] для создания сносок. --[[Участник:Lockal|Lockal]] 23:39, 10 марта 2008 (MSK)<br />
<br />
: Ага, потому что TeX'а на сервере нет. Как поставят - включу. --[[Участник:WikiSysop|WikiSysop]] 08:22, 11 марта 2008 (MSK)<br />
<br />
Попробуйте [http://mywiki.ncsa.uiuc.edu/wiki/MediaWiki_Servers#Problems_Rendering_PNG_Images вот это в качестве решения проблемы с png. --[[Участник:Lockal|Lockal]] 10:46, 14 марта 2008 (MSK)<br />
<br />
: Новые грузятся нормально, а rebuildImages Не проходит - обновляет 0 изображений --[[Участник:WikiSysop|WikiSysop]] 11:50, 14 марта 2008 (MSK)<br />
<br />
== предложение ==<br />
<br />
может стоит реорганизовать меню слева?<br />
mediawiki:sidebar<br />
----<br />
Ага, киньте, пожалуйста, в [[Mediawiki:Sidebar]]:<br />
navigation<br />
* mainpage-url|mainpage<br />
* portal-url|portal<br />
* currentevents-url|currentevents<br />
* recentchanges-url|recentchanges<br />
* randompage-url|randompage<br />
* helppage|help <br />
в [[Mediawiki:Mainpage-url]]:<br />
Добро пожаловать!<br />
в [[Mediawiki:portal-url]]:<br />
Linuxformat:Форум<br />
в [[Mediawiki:portal]]:<br />
Форум<br />
<br />
и почистите первый десяток [[Служебная:Shortpages]]. --[[Участник:Lockal|Lockal]] 17:58, 24 марта 2008 (MSK)<br />
<br />
: Это-то понятно, а чем отличается предложенный сайдбар от текущего и чем плохи текущие страницы портала? Или я то-то не так понял? --[[Участник:WikiSysop|WikiSysop]] 18:11, 24 марта 2008 (MSK)<br />
<br />
== Предметный указатель ==<br />
Предлагаю сделать внизу заглавной страницы ссылку на предметный указатель или что-то типо того. Т.е. страницу, где по-темам разбиты материалы и ссылки на них, а то бывает вроде читал что-нибудь интересное, а в каком номере не помнишь, приходится долго искать. Неудобно. :-(<br />
<br />
: А полнотекстовый поиск по wiki не помогает. В принципе, ничего против предметного указателя не имею - можно сделать :)</div>WikiSysophttp://wiki.linuxformat.ru/wiki/Linuxformat:%D0%90%D0%B2%D1%82%D0%BE%D1%80%D1%81%D0%BA%D0%BE%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%BELinuxformat:Авторское право2008-11-10T10:21:23Z<p>WikiSysop: Перенаправление на Linuxformat:Copyright</p>
<hr />
<div>#REDIRECT [[Linuxformat:Copyright]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/Linuxformat:CopyrightLinuxformat:Copyright2008-11-10T10:17:23Z<p>WikiSysop: «Linuxformat:Copyrights» переименована в «Linuxformat:Copyright»</p>
<hr />
<div>Материалы, опубликованные в Linux Format Wiki, распространяются на условиях лицензии Open Publication License v1.0, полный текст которой может быть получен по адресу: [http://opencontent.org/openpub/]. Данное соглашение позволяет добавить или модифицировать ряд его положений на усмотрение правообладателя. В связи с этим, для материалов Linux Format Wiki должны применяться следующие нормы:<br />
<br />
* Коммерческое использование материалов Linux Format Wiki без разрешения правообладателя запрещено.<br />
<br />
* Распространение существенно модифицированных версий (substantively modified versions) без разрешения правообладателя запрещено.<br />
<br />
Принимая во внимание политику российского издания Linux Format в отношении авторского права, следует заметить, что некоторые отечественные авторы могли установить для своих статей другие условия распространения. В случае необходимости, обратитесь к ним напрямую - все контакты можно получить в редакции.</div>WikiSysophttp://wiki.linuxformat.ru/wiki/CopyrightCopyright2008-11-10T10:16:08Z<p>WikiSysop: Перенаправление на Linuxformat:Авторское право</p>
<hr />
<div>#Redirect[[Linuxformat:Авторское право]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%94%D0%BE%D0%B1%D1%80%D0%BE_%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C!Добро пожаловать!2008-11-10T10:07:34Z<p>WikiSysop: </p>
<hr />
<div>На Linux Format Wiki собираются материалы, ранее опубликованные в журнале [http://www.linuxformat.ru Linux Format], а ныне выложенные редакцией в свободный доступ. При этом природа Wiki позволяет вам не только читать их, но и исправлять замеченные недочеты, вносить уточнения, актуализировать материалы в связи с выходом новых версий программ. Мы надеемся, что Linux Format Wiki станет для вас ценным источником информации по всем вопросам, касающимся Linux и свободного ПО в целом.<br />
<br />
В настоящее время сайт находится в состоянии наполнения материалами &ndash; мы планируем опубликовать на нем выпуски 2005-2007 гг. Для всех 28 номеров журнала уже нашлись люди, желающий провести их викификацию, однако, вы можете сообщить нам о своем интересе к проекту, написав письмо на info at linuxformat dot ru. В случае, если нам понадобится содействие, мы обязательно с вами свяжемся.<br />
<br />
== Выпуски, доступные в настоящее время ==<br />
Ниже перечислены номера журналов, материалы которых полностью или частично доступны в формате Wiki:<br />
<br />
* [[LXF70|LXF70 Сентябрь 2005]]<br />
* [[LXF71|LXF71 Октябрь 2005]]<br />
* [[LXF72|LXF72 Ноябрь 2005]]<br />
* [[LXF73|LXF73 Декабрь 2005]]<br />
* [[LXF76|LXF76 Февраль 2006]]<br />
* [[LXF77|LXF77 Март 2006]]<br />
* [[LXF78|LXF78 Апрель 2006]]<br />
* [[LXF79|LXF79 Май 2006]]<br />
* [[LXF80|LXF80 Июнь 2006]]<br />
* [[LXF81|LXF81 Июль 2006]]<br />
* [[LXF82|LXF82 Август 2006]]<br />
* [[LXF83|LXF83 Сентябрь 2006]]<br />
* [[LXF84|LXF84 Октябрь 2006]]<br />
* [[LXF85|LXF85 Ноябрь 2006]]<br />
* [[LXF86|LXF86 Декабрь 2006]]<br />
* [[LXF89|LXF89 Февраль 2007]]<br />
* [[LXF90|LXF90 Март 2007]]<br />
* [[LXF91|LXF91 Апрель 2007]]<br />
* [[LXF92|LXF92 Май 2007]]<br />
* [[LXF93|LXF93 Июнь 2007]]<br />
* [[LXF94|LXF94 Июль 2007]]<br />
* [[LXF95|LXF95 Август 2007]]<br />
* [[LXF96|LXF96 Сентябрь 2007]]<br />
* [[LXF97|LXF97 Октябрь 2007]]<br />
* [[LXF98|LXF98 Ноябрь 2007]]<br />
* [[LXF99|LXF99 Декабрь 2007]]<br />
<br />
Читая материалы Linux Format в Wiki, пожалуйста, помните, что исходный авторский текст мог быть изменен другими участниками, например, с целью разъяснить какое-либо положение или исправить неточность, возникшую вследствие развития описываемых в статье технологий. Условия использования материалов приведены на странице [[Linuxformat:Авторское право]].</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:LockalУчастник:Lockal2008-06-20T04:42:33Z<p>WikiSysop: «Участник:Говно» переименована в «Участник:Lockal» поверх перенаправления: откат</p>
<hr />
<div>=== Учебники ===<br />
* [[LXF70:Gnome 2.10]]<br />
<br />
{{Цикл/Perl}}<br />
* [[LXF70:Perl. Переменные и операторы]]<br />
* [[LXF70:Perl. Сортируем наш код]]<br />
* [[LXF72:Perl]]<br />
<br />
<br />
* [[LXF70:Subversion1]]<br />
* [[LXF70:Subversion2]]<br />
<br />
<br />
* [[LXF70:PHP. Загадка Монти Холла]]<br />
* [[LXF73:PHP I]]<br />
* [[LXF73:PHP II]]<br />
* [[LXF76:Учебник PHP]]<br />
* [[PHP]]<br />
* [[LXF78:Учебник PHP: MySQL 5.0 Special]]<br />
* [[LXF79:PHP]]<br />
* [[LXF80:PHP]]<br />
* [[LXF81:PHP]]<br />
<br />
{{Цикл/Gambas}}<br />
* [[LXF71:Gambas]]<br />
* [[LXF72:Gambas]]<br />
* [[LXF73:Gambas]]<br />
<br />
<br />
* [[LXF70:GIMP. Коррекция улыбки]]<br />
* [[LXF72:GIMP]]<br />
* [[LXF73:GIMP]]<br />
* [[LXF76:Учебник Gimp, часть 1]]<br />
* [[LXF76:Учебник Gimp, часть 2]]<br />
* [[LXF78:Gimp: Блики на стекле]]<br />
<br />
<br />
* [[LXF73:Автомонтирование USB]]<br />
<br />
<br />
* [[LXF73:Русификация Debian 3.1]]<br />
<br />
<br />
* [[LXF73:Локализация ПО]]<br />
<br />
<br />
* [[LXF72:Первые шаги]]<br />
* [[LXF73:Первые шаги]]<br />
* [[LXF76:Первые шаги: Writer]]<br />
* [[LXF76:Первые шаги: Impress]]<br />
* [[LXF80:первые шаги]]<br />
* [[LXF81:Firefox]]<br />
* [[LXF82:Первые шаги]]<br />
* [[LXF83:Ubuntu_for_children]]<br />
* [[LXF84:Первые шаги]]<br />
* [[LXF89:Первые шаги]]<br />
* [[LXF92:Первые шаги]]<br />
* [[LXF96:Первые шаги]]<br />
* [[LXF97:Первые шаги]]<br />
* [[LXF98:Первые_шаги]]<br />
* [[LXF99:Первые шаги]]<br />
<br />
<br />
* [[LXF76:Азбука записи]]<br />
<br />
<br />
* [[LXF76:Учебник Fuse]]<br />
<br />
<br />
* [[LXF76:Ubuntu по-русски]]<br />
* [[LXF76:Учебник Ubuntu, часть 2]]<br />
<br />
{{Цикл/Inkscape}}<br />
* [[LXF76:Учебник Inkscape, часть 1]]<br />
* [[LXF76:Учебник Inkscape, часть 2]]<br />
* [[LXF78:Inkscape. Работа с текстом]]<br />
* [[LXF79:Inkscape]]<br />
* [[LXF81:Inkscape]]<br />
* [[LXF82:Inkscape]]<br />
* [[LXF83:InkScape]]<br />
* [[LXF84:Inkscape]]<br />
* [[LXF85:Inkscape]]<br />
* [[LXF86:Inkscape]]<br />
<br />
{{Цикл/MetaPost}}<br />
* [[LXF76:MetaPost]]<br />
* [[LXF77:MetaPost]]<br />
* [[LXF78:MetaPost]]<br />
* [[LXF79:MetaPost]]<br />
* [[LXF80:MetaPost]]<br />
<br />
{{Цикл/Python}}<br />
* [[LXF76:Уроки Python, часть 2]]<br />
* [[LXF76:Разработка расширений Pyhton]]<br />
* [[LXF78:Уроки Python]]<br />
* [[LXF79:Python]]<br />
* [[LXF80:Python]]<br />
* [[LXF81:Python]]<br />
* [[LXF82:Python]]<br />
* [[LXF83:Python]]<br />
* [[LXF84:Python]]<br />
* [[LXF97:Python]]<br />
<br />
<br />
* [[LXF76:Hardcore Linux, часть 1]]<br />
* [[LXF76:Hardcore Linux, часть 2]]<br />
* [[LXF78:Мощные инструменты командной строки]] ?<br />
* [[LXF79:Hardcore Linux]]<br />
* [[LXF80:Hardcore Linux]]<br />
* [[LXF82:Hardcore Linux]]<br />
* [[LXF83:Hardcore_Linux]]<br />
* [[LXF84:Hardcore Linux]]<br />
* [[LXF89:Hardcore Linux]]<br />
* [[LXF92:Hardcore Linux]]<br />
* [[LXF94:Графическое web-приложение]]<br />
* [[LXF96:Hardcore linux:APT]]<br />
* [[LXF97:Hardcore Linux]]<br />
* [[LXF98:Hardcore Linux]]<br />
<br />
<br />
* [[LXF78:Evolution: Управляйте своей почтой]]<br />
<br />
{{Цикл/Qt/KDE}}<br />
* [[LXF78:Знакомство с Qt: первые шаги]]<br />
* [[LXF79:Qt/KDE]]<br />
* [[LXF80:Qt/KDE]]<br />
* [[LXF81:KDE]]<br />
* [[LXF82:Qt/KDE]]<br />
* [[LXF83:Qt_KDE]]<br />
* [[LXF84:Qt/KDE]]<br />
* [[LXF85:Qt/KDE]]<br />
<br />
<br />
* [[LXF78:Почему – Vim?]]<br />
<br />
<br />
* [[LXF79:Audacity]]<br />
<br />
<br />
* [[LXF79:Чистим записи]]<br />
<br />
<br />
* [[LXF79:DCOP]]<br />
<br />
{{Цикл/OOo Basic}}<br />
* [[LXF80:OOo Basic]]<br />
* [[LXF81:OOo]]<br />
* [[LXF82:OpenOffice.org]]<br />
* [[LXF83:OOo_Basic]]<br />
<br />
<br />
* [[LXF84:OpenOffice.org]]<br />
* [[LXF85:OpenOffice.org Base]]<br />
<br />
<br />
* [[LXF82:Безопасность]]<br />
* [[LXF84:Безопасность]]<br />
* [[LXF85:Безопасность]]<br />
* [[LXF86:Безопасность]]<br />
* [[LXF89:Безопасность]] 5<br />
<br />
* [[LXF80:загрузка]]<br />
<br />
{{Цикл/Unix API}}<br />
* [[LXF80:Программирование для Linux]]<br />
* [[LXF81:IPC]]<br />
* [[LXF82:Unix API]]<br />
* [[LXF83:Unix_API]]<br />
* [[LXF84:Unix API]]<br />
* [[LXF85:Unix API]]<br />
* [[LXF86:Unix]]<br />
* [[LXF89:Unix API]] 8<br />
* [[LXF90:Unix API]]<br />
* [[LXF91:Unix API]]<br />
* [[LXF92:Unix API]] 12<br />
<br />
<br />
* [[LXF80:шифрование]]<br />
<br />
<br />
* [[LXF81:WordPress]]<br />
<br />
<br />
* [[LXF81:DansGuardian]]<br />
<br />
<br />
* [[LXF81:Open-Xchange]]<br />
<br />
{{Цикл/Maxima}}<br />
* [[LXF81:Maxima]]<br />
* [[LXF82:Maxima]]<br />
* [[LXF83:MAXIMA]]<br />
* [[LXF84:Maxima]]<br />
* [[LXF85:Maxima]]<br />
* [[LXF86:Maxima]]<br />
<br />
<br />
* [[LXF81:PAW]]<br />
* [[LXF83:ROOT]]<br />
<br />
<br />
* [[LXF82:Разработка 3D-игры]]<br />
* [[LXF83:3D_Game]]<br />
* [[LXF84:Разработка 3D-игры]]<br />
* [[LXF85:Ogre]]<br />
* [[LXF86:Ogre]]<br />
<br />
{{Цикл/LaTeX}}<br />
* [[LXF82:LaTeX]]<br />
* [[LXF83:LaTex]]<br />
* [[LXF84:LaTeX]]<br />
* [[LXF85:LaTeX]]<br />
* [[LXF86:LaTeX]]<br />
* [[LXF89:LaTeX]] 6<br />
* [[LXF90:LaTeX]]<br />
* [[LXF91:LaTeX]]<br />
* [[LXF92:TeX]] 9<br />
* [[LXF94:LaTeX Программирование]]<br />
* [[LXF97:TeX]]<br />
<br />
{{Цикл/Java}}<br />
* [[LXF82:Java]]<br />
* [[LXF84:Java]]<br />
* [[LXF85:Java]]<br />
* [[LXF86:Java]]<br />
* [[LXF87/88:Java]]<br />
<br />
{{Цикл/Java EE}}<br />
* [[LXF89:Java EE]] 1<br />
* [[LXF90:JavaEE]]<br />
* [[LXF91:Java EE]]<br />
* [[LXF92:Java EE]] 4<br />
* [[LXF94:Команды и фабрики]] (серия «Java Enterprise Edition»)<br />
* [[LXF95:Java EE]]<br />
* [[LXF96:Java EE]] 8<br />
* [[LXF97:Java]]<br />
* [[LXF98:Java EE10]] 10<br />
* [[LXF99:Java EE EJB3]]<br />
<br />
<br />
* [[LXF83:HDD]]<br />
<br />
<br />
* [[LXF83:XDMCP]]<br />
<br />
<br />
* [[LXF83:WINK]]<br />
<br />
<br />
* [[LXF85:Compiz]]<br />
<br />
{{Цикл/PostgreSQL}}<br />
* [[LXF85:PostgreSQL]]<br />
* [[LXF86:Учебники:PostgreSQL]]<br />
* [[LXF89:PostgreSQL]] 4<br />
* [[LXF90:PostgreSQL]]<br />
* [[LXF91:PostgreSQL]]<br />
<br />
<br />
* [[LXF86:Wine]]<br />
<br />
<br />
* [[LXF86:Kamaelia]]<br />
<br />
{{Цикл/GTK+}}<br />
* [[LXF86:GTK]]<br />
* [[LXF89:GTK+]] 3<br />
* [[LXF90:GTK+]]<br />
* [[LXF91:GTK]]<br />
* [[LXF92:GTK+]] 6<br />
* [[LXF94:GTK+: Буфер обмена и VFS]]<br />
* [[LXF95:GTK+]]<br />
<br />
{{Цикл/Blender}}<br />
* [[LXF89:Blender]] 2<br />
* [[LXF90:Blender]]<br />
* [[LXF91:Blender]]<br />
<br />
<br />
* [[LXF90:RPM]]<br />
<br />
<br />
* [[LXF90:SugarCRM]]<br />
* [[LXF91:SugarCRM]]<br />
* [[LXF92:SugarCRM]] 3<br />
<br />
<br />
* [[LXF90:Grub]]<br />
<br />
<br />
* [[LXF91:Система]]<br />
<br />
<br />
* [[LXF91:XSLT]]<br />
<br />
{{Цикл/Mono}}<br />
* [[LXF89:Mono]]<br />
* [[LXF90:Mono]]<br />
* [[LXF91:Mono]]<br />
* [[LXF92:Mono-Мания]]<br />
* [[LXF94:Программирование для Mono]]<br />
* [[LXF95:Mono]]<br />
* [[LXF96:Mono-мания]]<br />
* [[LXF97:Mono]]<br />
* [[LXF98:Mono]]<br />
<br />
<br />
* [[LXF91:Deb]]<br />
<br />
<br />
* [[LXF92:Lm-sensors HOWTO]]<br />
<br />
{{Цикл/Cinelerra}}<br />
* [[LXF92:Cinelerra]] 1<br />
* [[LXF93:Cinelerra]]<br />
* [[LXF94:Cinelerra]]<br />
* [[LXF95:Cinelerra]]<br />
* [[LXF96:Cinelerra]] 5<br />
<br />
<br />
* [[LXF94:Обмен файлами]] (серия «Linux для новичков»)<br />
<br />
<br />
* [[LXF94:Макрос, загружающий данные]]<br />
<br />
<br />
* [[LXF94:Следим за сетью]]<br />
<br />
<br />
* [[LXF95:F-Spot]]<br />
<br />
<br />
* [[LXF95:Akelos]]<br />
<br />
<br />
* [[LXF95:Cron]]<br />
<br />
<br />
* [[LXF95:DCOP]]<br />
<br />
{{Цикл/Препринт}}<br />
* [[LXF95:Препринт]]<br />
* [[LXF96:Препринт]]<br />
* [[LXF97:Препринт]]<br />
<br />
<br />
* [[LXF96:Bash]] 1<br />
* [[LXF97:Bash]]<br />
* [[LXF98:Bash3]] 3<br />
<br />
<br />
* [[LXF96:Evolution]]<br />
<br />
<br />
* [[LXF96:Vim]]<br />
<br />
<br />
* [[LXF97:Командная строка]]<br />
<br />
<br />
* [[LXF97:GtkSourceView]]<br />
<br />
<br />
* [[LXF97:Новая серия!]]<br />
<br />
<br />
* [[LXF97:Hibernate]]<br />
<br />
<br />
* [[LXF98:KDE]]<br />
<br />
<br />
* [[LXF98:Диагностика]]<br />
<br />
<br />
* [[LXF98:Ананас3]] 2<br />
<br />
<br />
* [[LXF98:wxWidgets1]] 1<br />
* [[LXF99:wxWidgets]]<br />
<br />
<br />
* [[LXF98:Perl и C++]]<br />
<br />
<br />
* [[LXF98:Чистка DVD видео]]<br />
<br />
<br />
* [[LXF99:D-Bus]]<br />
<br />
<br />
* [[LXF99:WavPack]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:LockalОбсуждение участника:Lockal2008-06-20T04:42:12Z<p>WikiSysop: «Обсуждение участника:Говно» переименована в «Обсуждение участника:Lockal» поверх перенаправления: откат</p>
<hr />
<div>Сэр, я хоть и с опозданием (не было нета), но приступил к работе.<br />
Спасибо, конечно, за помощь, но этот номер зарегистрирован за мной.<br />
: Без проблем, хотя я начал[http://wiki.linuxformat.ru/index.php?title=LXF85&action=history] работать над номером, когда он был ещё свободен[http://wiki.linuxformat.ru/?oldid=623]. А пока я займусь другими номерами. --[[Участник:Lockal|Lockal]] 19:16, 16 марта 2008 (MSK)<br />
<br />
Не хочу показаться интервентом - могу переслать письмо от Валентина Синицына от 6 марта, где за мной утвердили 85-ый номер. --[[Участник:flagist0|flagist0]]<br />
<br />
'''LXF84''' Спасибо за статью по LaTeX, но этот номер (LXF 84) занят, и я хотел бы завершить работу над ним самостоятельно<br />
[[Участник:Skryabin yuri|Skryabin yuri]]</div>WikiSysophttp://wiki.linuxformat.ru/wiki/LXF70:Perl._%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8BLXF70:Perl. Переменные и операторы2008-06-20T04:41:58Z<p>WikiSysop: «Говно и операторы» переименована в «LXF70:Perl. Переменные и операторы» поверх перенаправления: откат</p>
<hr />
<div>{{Цикл/Perl}}<br />
<br />
__TOC__<br />
<br />
= Perl. Переменные и операторы =<br />
Часть 1. ''В «эпизоде 1» нашей серии '''Марко Фиоретти''' ('''Marco Fioretti''') объясняет основные компоненты языка Perl.''<br />
<br />
<br />
{{Врезка |<br />
Заголовок=Подсказка |<br />
Содержание='''Руководства по Perl'''<br /><br />
Perl — зрелый язык, и его пользователи имеют доступ к большому количеству различной документации. Книга Тома Кристиансена, Джона Орванта, Ларри Уолла «Программирование на Perl» (Programming Perl by Larry Wall, Jon Orwant and tom Christiansen, O'Reilly) является прекрасным началом, если вам нужна более подробная информация — к вашим услугам http://perl.oreilly.com. Для доступа к онлайновой документации, полной коллекции модулей, руководств и примеров посетите Comprehensive Perl Archive Network (http://www.cpan.org). Отдельные вопросы можно задавать в новостной группе [http://groups.google.com/group/comp.lang.perl.misc comp.lang.perl.misc].|<br />
Ширина=250px}}<br />
<br />
Языки сценариев стали так популярны потому, что ценой небольшого падения производительности они берут на себя такую скучную работу, как определение переменных, выделение памяти, возвращение её операционной системе и так далее. Придуманный в конце восьмидесятых Practical extraction and Report Language или Perl исходно предназначался для работы с большими объёмами текста. И хотя он не является самым популярным языком сценариев двадцать первого века, он остаётся лучшим инструментом для решения многих задач. Знаете ли вы, например, что Perl спас проект «Геном человека» (Human Genome Project)? Целиком эту историю можно прочитать по адресу: http://bioperl.org/GetStarted/tpj_ls_bio.html.<br />
<br />
В девяностые годы Perl получил широкое распространение, благодаря своему умению генерировать html-страницы. Сейчас эту нишу занял PHP, однако у Perl всё еще есть много поклонников, а так же большая база унаследованного кода, расширений (называемых модулями) и документации, которую легко приспособить для любых нужд.<br />
<br />
Вам вовсе не обязательно быть системным администратором или профессиональным программистом для того, чтобы получить пользу от этого языка. Perl может помочь, когда вам нужно быстро обработать текст или даже картинки. Независимо от того, находятся ли эти файлы на вашем жестком диске или в интернете, Perl обладает модулями, способными прозрачно работать и с тем, и с другим.<br />
<br />
=== Используй переменные, Люк! ===<br />
Почти все основные правила синтаксиса Perl (такие как правила обрамления строк кавычками) очень напоминают или даже идентичны правилам оболочек Unix. Документации по оболочкам существует огромное количество, она не ограничивается учебником из предыдущих выпусков Linux Format. Поэтому, так как общую информацию можно найти в других местах, в эта серия сосредоточена на специфических особенностях языка, начиная с неудобочитаемых переменных. Я нежно люблю Perl, и использую его изо дня в день для решения самых разных задач. Но я должен предупредить вас: критики говорят, что это единственный язык, код на котором выглядит одинаково до и после<br />
зашифровки. и если вы не знаете структуры программы на Perl, то так для вас и будет. Давайте рассмотрим компоненты этого языка. Первая вещь, которая раздражает новичков, когда они смотря на Perl-код — это тот факт, что все переменные имеют неалфавитный префикс. Клевещут, что из-за этого экран заполняется нечитаемым мусором. Но мне эти маркеры кажутся очень полезными, так как они сразу же сообщают о структуре соответствующей переменной и о том, что я могу сделать с нею. Вот пример:<br />
<source lang="perl">$NAMe = 'Johnny';<br />
$AGE = 33;<br />
@BOOK = ('Introduction', 'First Chapter', 'Second Chapter');<br />
%STAR_WARS_FAMILY = ('Father', 'Anakin',<br />
'Mother', 'Padme',<br />
'Male twin', 'Luke',<br />
'Female twin', 'Leia');<br />
</source><br />
Первые две переменные — это скаляры. Скаляр Perl способен содержать один кусочек информации, будь то строка, число или ссылка. Их имена всегда начинаются с символа доллара ($). Строковые скаляры всегда заключаются в единичные('), двойные(") или обратные кавычки(`), так же как и их эквиваленты из оболочек Unix, а числа, по аналогии, обходятся без кавычек.<br />
<source lang="perl"><br />
$A = 'Hello';<br />
$B = '$A Johnny!';<br />
$C = "$A Johnny!";<br />
$D = `ls /usr/bin`;<br />
</source><br />
Здесь переменная $b содержит именно то, что мы указали в коде, $C (благодаря двойным кавычкам) равняется «Hello Johnny!», а $D, поскольку для его значения использовались обратные кавычки, содержит результат выполнения команды ls /usr/bin/.<br />
<br />
Упорядоченный список скаляров, проиндексированный номерами, называется массивом и начинается с символа @. Он полезен для хранения чего-либо в последовательном порядке. Один элемент массива обозначается так: символ $, имя массива и номер элемента (начиная с 0) в квадратных скобках. В приведенном выше примере, второй элемент массива @book — это $book[1] и он равен «First Chapter».<br />
<br />
Ассоциативные массивы, или коротко говоря хэши (hash) — это последняя из основных категорий переменных языка Perl. Хэш — это группа скаляров, которые проиндексированы, или другими словам к которым можно обратиться не по номерам, а при помощи других скаляров, так называемых ключей. Другими словами, Perl позволяет сказать нам без излишних синтаксических конструкций, что в «семье звёздных войн»(STAR_WARS_FAMILY) отцом (Father) является Энакин (Anakin):$sTar_Wars_FamiLy{'Father'} = 'anakin'. Каждый ключ или значение хэша могут быть скаляром любого типа.<br />
<br />
Итак, даже самый короткий скрипт на Perl может быть заполнен символами $, @ и %. Но при этом мы можем создавать очень сложные структуры данных, используя минимальное количество префиксов, почти не заботясь об именовании, и при этом всегда понимая, каков смысл каждого кусочка. Это возможно благодаря мощной и немного опасной возможности вкладывать массивы и хэши друг в друга:<br />
<source lang="perl">%STAR_WARS_FAMILY = (<br />
'Father', {'Name', 'Anakin',<br />
'Height (cm)', 210,<br />
'jobs', ['Slave', 'Podracer pilot', 'Jedi Knight', 'Darth Vader']},<br />
'Mother', {} # другие такие же данные...<br />
);<br />
print "$STAR_WARS_FAMILY{'Father'}{'jobs'}[2]\n";<br />
</source><br />
Это хэш, в котором каждый из элементов первого уровня является в свою очередь хэшем, содержащим элементы name (имя), Height (рост) and jobs (занятия), причём значением элемента jobs является массив. Обратите внимание, как мы различаем массивы и хэши при помощи квадратных и фигурных скобок, даже если они вложены друг в друга. В результате у нас получится, что оператор print в последней строке отобразит строчку Jedi knight (Джедай).<br />
<br />
Существует одна встроенная скалярная переменная, о которой вам надо знать. иногда программисты на Perl забывают указать, какую переменную они имели ввиду, например:<br />
print if условие<br />
Эта инструкция указывает, что надо выполнять оператор print при некотором условии, но не говорит, что именно надо напечатать — значение какой переменной? В этом случае интерпретатор Perl использует текущее значение переменной по умолчанию, $_. Её значение определяются предыдущими выражениями, или она может выступать в качестве переменной цикла. Если вы помните об этой особенности, большое количество кода на Perl покажется вам гораздо понятнее.<br />
<br />
=== Помоги мне, Падме ===<br />
Perl понимает большое число разных операторов. Некоторые из них применимы только к какому-то одному классу переменных, будь то скаляры, массивы или хэши, тогда как другие изменяют свой смысл в зависимости от того, к какой переменной они относятся. В этой статье осталось место только для нескольких вариантов. Основные числовые операторы имеют тот же смысл, что и в языке C.<br />
<source lang="Perl"><br />
$A =10 * 7.5 - 16;<br />
$B = $A % 4; # деление по модулю 4<br />
</source><br />
и номера, и строки можно увеличивать при помощи оператора инкремента<br />
<source lang="Perl"><br />
$A = 4;<br />
$B = 'ab';<br />
$A++; # теперь $A равен 5...<br />
$B++; # а $B равен 'ac'!!<br />
</source><br />
Не правда ли это здорово, что буквы тоже можно инкрементировать? Вы также можете соединять строки из нескольких частей:<br />
<source lang="Perl"><br />
$FIRST_NAME = 'Luke';<br />
$LAST_NAME = 'Skywalker';<br />
$COMPLETE_NAME = $FIRST_NAME.' '.$LAST_NAME;<br />
$REPEATED_NAME = $FIRST_NAME x 3;<br />
</source><br />
Теперь $COMPLETE_NAME равняется «Luke Skywalker», a $REPEATED_NAME содержит «LukeLukeLuke».<br />
<br />
Скаляры можно сравнивать между собой многими разными способами. Давайте попробуем некоторые из них и посмотрим, что получится:<br />
<source lang="Perl"><br />
$A < $B; # число $A больше, чем число $B?<br />
$A lt $B; # строка $A располагается в словаре до $B?<br />
$A <=> $B; # какое число меньше, $A или $B?<br />
$A cmp $B; # какая строка располагается раньше, $A или $B?<br />
</source><br />
Некоторые сравнения имеют смысл, только если обе переменные являются или строками, или числами. Например, оператор 'Эта строка в алфавитном порядка стоит перед другой', всегда используется для сортировки в алфавитном порядке. Даже если одна или обе сравниваемые переменные содержат только числа, использование строковых операторов сравнения приведёт к сортировке в алфавитном порядке. Чтобы увидеть это в действии, введите следующую команду в командной строке и проверьте, какие из операторов сравнения вернут истину?.<br />
perl -e 'if ("dude" lt "hello") {print "dude!\n";} if ("dude" < "hello") {print "Hello!\n";}'<br />
Фактически только первый тест должен завершиться успешно. Его смысл таков: «Верно ли, что строки переданы в алфавитном порядке?». Во втором операторе, используя < вместо lt, мы спрашиваем Perl, правда ли что число «dude» меньше числа «hello»? Конечно, это абсурдный вопрос, и ответ на него предсказуемо непредсказуемый.<br />
<br />
Еще одна особенность Perl, о которой стоит знать — это его постоянные преобразования строк в числа и обратно, в зависимости от контекста. Они могут быть огромным подспорьем или же постоянным источником недоразумений, в зависимости от того как часто вы забываете про это.<br />
<br />
Я думаю, что на этом достаточно разговоров про скалярные операторы. Когда речь заходит об операторах, работающих с массивами, Perl может сделать многое. Приведённый ниже пример показывает, как отдельный элемент может быть добавлен к массиву, а затем удалён оттуда:<br />
<source lang="Perl"><br />
@Jedi = ("Yoda", "Obi Wan"); # несколько рыцарей-джедаев<br />
push(@Jedi, "Anakin"); # юный Энакин встаёт в строй<br />
$gone_to_the_dark_side = pop(@Jedi); # Энакин уже не джедай<br />
</source><br />
Существуют специальные операторы для работы с хэшами. Инструкции, подобные следующим, встречаются в коде на Perl очень часто:<br />
<source lang="Perl"><br />
while (($Actor, $Character) = each(%STAR_WARS_CAST));<br />
# или даже<br />
@ACTORS_ONLY = keys(%STAR_WARS_CAST);<br />
</source><br />
Первая строка будет циклически перебирать элементы хэша %STAR_WARS_CAST, каждый раз присваивая ключ очередного элемента и его значение паре скаляров $Actor и $Character, которые вы затем можете обработать, как вам захочется. Оператор key используется в том случае, когда нужно сохранить только ключи хэша в отдельном массиве и работать с ними независимо от значений.<br />
<br />
В Perl существует ещё очень много операторов, но у меня не осталось места для их описания. Однако того, что мы уже успели рассмотреть, с лихвой хватит для понимания структуры простого сценария. Свою силу и истинную ценность Perl особенно ярко проявляет в работе с массивами и хэшами.<br />
<br />
<br />
[[Категория:Учебники]]<br />
[[Категория:Первые шаги]]<br />
[[Категория:Perl]]</div>WikiSysop