В Windows все наоборот: программы готовы взаимодействовать с человеком (с помощью GUI), но не со своими собратьями. В результате отсутствия разделения труда приложения обрастают гроздьями функций, размер дистрибутивов растет как на дрожжах, а новые возможности бывают далеко не всегда нужны большинству пользователей. Конечно, «монолитные» программы есть и под Linux, но общая концепция системы все-таки другая, что чувствуется в большинстве открытых разработок.
Впрочем, это не значит, что весь свободный софт жутко недружелюбен. Проблема пользовательского интерфейса решается в рамках Unix way легко и изящно: многие GUI-приложения просто являются надстройками (frontend) над консольными утилитами (backend). Например, под Linux существует несколько систем синхронизации с «Палмами» (kpilot, jpilot и т. д.), но все они являются frontend’ами над разработкой pilot-links, осуществляющей взаимодействие с КПК. Аналогичным образомработают CD-рекордеры K3b и xcdroast, а также множество других GUI-программ. Подобный подход дает серьезные преимущества: не теряя в удобстве работы по сравнению с «монолитами», мы приобретаем гибкость модульной архитектуры.
Разговор с компьютером
Наличие множества программ с доступом из командной строки создает своеобразную языковую среду, в которой очень любят работать юниксоиды. Из нескольких тысяч «слов» можно составлять «предложения», выполняющие довольно нетривиальные действия. Можно изобретать новые «слова», используя скриптовые языки (Shell, Perl, Python и др.), что позволяет расширять возможности самовыражения и упрощать работу с системой. При этом компьютер выступает в качестве очень прилежного ученика-помощника, которому достаточно один раз объяснить, как выполнять то или иное действие, и можно быть уверенным, что он все поймет и запомнит (если, конечно, вы правильно объясняли).
Меняется само отношение к работе с компьютером: оно становится более творческим, смещаясь от периодического прочесывания Интернета в поисках новой «классной программы для…» к решению конкретных задач теми средствами, которые предоставляет система. Конечно, это не значит, что софт искать совсем не приходится или что нужно все писать самому, - но зачастую такой подход оказывается быстрым и эффективным. К тому же он позволяет реализовывать весьма специфические вещи, которые практически невозможно найти в сторонних разработках. Подчеркнуть собственную индивидуальность всегда приятно, а интересная и необычная функция, сделанная своими руками, - это вам не логотип на экране мобильника, купленный за доллар у оператора.
Мы наш, мы новый? ..
При использовании свободного софта меняются не только привычки - меняется мировоззрение. Работая в среде, созданной энтузиастами, поневоле сам становишься одним из них. Найдя интересную разработку, задумываешься не только о том, как ее использовать для решения своих задач, но и о том, как можно помочь ее авторам и другим пользователям - например, реализовать нужную функцию, сообщить об ошибке или ответить на вопрос в форуме. Когда понимаешь, что ситуация под твоим контролем, что твой браузер не станет проверять, насколько лицензионно чиста твоя система, а медиаплейер не будет без твоего ведома сообщать «куда надо», какую музыку ты любишь, что нужная программа не исчезнет с лица земли только потому, что разработчик ее забросил, а исходники выложить не захотел, - начинаешь понимать, что свободный софт - это не просто громкие слова.
Практические занятия
Есть каталог с фотографиями. Требуется повернуть каждое изображение в соответствии с положением камеры при съемке (некоторые цифровые фотоаппараты записывают информацию об ориентации снимка в EXIF-данные JPEG-файлов), а также изменить размер на 800х600.
Для работы с EXIF нам потребуется пакет jhead, а для изменения размера изображений - функция convert из набора инструментов ImageMagick. Заклинание для решения всех наших проблем выглядит следующим образом:
mkdir output; for FILE in *.jpg; do jhead -autorot “$FILE“; convert “$FILE“ -resize 800x600 “output/$FILE“; done
Несмотря на то что эта длинная команда пишется в одну строчку, она представляет собой полноценную мини-программу. В ней есть даже цикл (участок между do и done), перебирающий все jpg-файлы в текущем каталоге (их имена записываются в переменную $FILE). Авторы jhead уже позаботились об автоматическом повороте картинок (достаточно указать ключ -autorot), а команда convert умеет не только преобразовывать практически любые типы графических файлов в любые другие, но и обладает недюжинными познаниями в области обработки изображений, так что изменить размер снимка для нее - пара пустяков.
Оповестить пользователя звуковым сигналом о том, что появилась связь с Интернетом.
while [ -z “`ping -c 1 computerra.ru - grep 1 received`“ ]; do sleep 1; done; aplay “`locate redalert.wav`“
В переводе на русский язык, эта строчка означает приблизительно следующее: если до сервера computerra.ru достучаться не удалось, нужно подождать одну секунду и повторить попытку; затем найти файл redalert.wav и проиграть его. При этом используются многие хитрости языка bash: обратные кавычки, перенаправление потоков ввода-вывода и неявный вызов команды test с помощью квадратных скобок, но подробный разбор синтаксиса остается за рамками данной статьи.
Статья «Заметки поселенца» описывает опыт перехода на Linux отдельно взятого пользователя, еще при жизни под Windows уличенного в пагубном пристрастии к клавиатурным интерфейсам и командной строке. Дабы несколько приблизить эту публикацию к реальной жизни, мы решили рассказать и о другом взгляде на вещи. - И.Щ.
Спорить о преимуществах и недостатках операционных систем - занятие неблагодарное, особенно если речь идет о Linux и Windows. Несмотря на все аргументы сторон, последнее слово остается за сухими цифрами статистики - а цифры эти далеко не на стороне свободной ОС. И дело здесь не в том (или не только в том), что у Windows есть какие-то явные и неоспоримые преимущества, а в том, что находятся люди - очень много людей - которых устраивает именно эта система. Есть ли основания предполагать, что эта ситуация изменится в какую-либо сторону в ближайшие годы?
Когда речь заходит о сравнении Linux и Windows, одни говорят, что Windows более дружественна к пользователю, другие утверждают, что и Linux не менее дружественна. Так что же, Windows - это некая «массовая», доступная операционная система, в то время как любой «профессионал» неизбежно должен оценить достоинства Linux? Впечатление это хоть и имеет под собой основания, по сути своей ошибочно. Есть немало профессиональных программистов, которые предпочитают именно Windows, и даже готовы долго и со знанием дела ругать «свободную ОС» и доказывать ее нежизнеспособность. С другой стороны, Linux сейчас становится все более «дружественной», и освоение многих ее дистрибутивов не представляет особой сложности даже для человека, неискушенного в программировании.
Так в чем же дело? Почему защитники Windows так любят говорить о простоте и доступности этой ОС, а сторонники Linux всегда готовы упомянуть о перспективах, открывающихся при использовании командной строки и языка bash? Есть бородатый анекдот, в котором разные операционки сравнивают с самолетами. Пересказывать его здесь я не стану, а вот метафорой воспользуюсь. Windows похожа на комфортабельный, надежный авиалайнер, в котором пользователь является пассажиром. А что же Linux? Linux не менее (или «почти не менее») комфортабельный и надежный авиалайнер, вот только пассажир в нем может при желании сесть в кресло пилота. Это главное отличие. Кто-то, быть может, скажет, что это бесспорный плюс. И будет не совсем прав.
Продолжим наше сравнение. Когда самолет попадает в воздушную яму, у пассажира есть только одна возможность - перекреститься и прочитать молитву, не слишком надеясь, что ему это поможет, но будучи твердо уверенным, что и вреда не принесет. Пилот же не может позволить себе такой роскоши. Он должен что-то предпринять, и результаты его действий могут быть катастрофическими. Человеку, как известно, свойственно ошибаться, а еще человек не любит, когда его ошибки приводят к неприятным для него последствиям. И, по-видимому, из-за этого большинство людей летает на самолетах именно в качестве пассажиров.
Так вот: компьютер для большинства пользователей - всего-навсего инструмент. Инструмент красивый, сложный и удобный, но никак не творческая мастерская. И если он действует по принципу «черного ящика», тем лучше. Хорошо, конечно, когда инструмент можно улучшать по своему усмотрению и чинить при необходимости. Вот только это еще и лишняя головная боль. Стиральную машину тоже можно починить самостоятельно, но почему-то большинство из нас предпочтет вызвать мастера.
А что же программисты? Они-то как раз и есть мастера, разве не так? Так, да не совсем. Даже для программистов компьютер нередко остается только инструментом - инструментом, которым они владеют лучше других людей. Разумеется, чем чаще человек использует какой-то инструмент, чем больше набивает руку, тем больше шанс, что он захочет как-то изменить его, подогнать под себя. Но так бывает не со всеми, и зависит это не столько от инструмента, сколько от самого человека.