COFFE-HOWTO и тяжелая женская доля.


Как известно, нелегкая это работа – из болота тащить бегемота. А знаете, что еще труднее? Жить с программистом. Или с сисадмином-линуксоидом, разница с точки зрения рядовой, обычной жены, невелика. О тяжкой жизни программерских жен слагают стихи, поют песни и пишут книги. Одна из самых нашумевших – «Записки жены программиста» Алекса Экслера (их можно прочитать на www.exler.ru). «Спасибо за понимание, Алекс!» – мысленно благодарим мы, программерские жены, неся нелегкую ношу своей женской судьбы. Мы, нуждающиеся во внимании и понимании, мы, заслуживающие прижизненных памятников и медалей ветеранов сражений семейной жизни. Впрочем, некоторые из нас были предупреждены до замужества о том, каково быть женой программиста. И все же эти героические женщины дали согласие на предложение руки и сердца… мышки и коврика… монитора и клавиатуры даже иногда. Понять их трудно, впрочем, бытует мнение, что женщину почти всегда трудно понять,  но те, кто заранее знал, во что выльется их невинное «да» - эти женщины загадочны особенно. С другой стороны, чего не сделаешь ради любви? Да, к тому же, любовь еще и зла, как известно.

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

Со словами: «Думай, Сеня, думай», – уговаривает Алиса крокодила в фильме «Гостья из будущего». А, когда становится ясно, что крокодил ленится, Алиса грозно добавляет: «Накажу. Прогулки лишу». С мужем-программистом так не выйдет. Во-первых, думать он способен лишь над стоящей в данный момент задачей. Раз задача образования семьи уже решена, мысли обо всех вещах, связанных с семейной жизнью, уходят в прошлое, и на их место заступают мысли об актуальных программах. Программист может отвлечься от собственного творчества ненадолго и подумать о чужих программах, о краках, о лицензионном ПО, об освоении новых операционных систем, как об освоении космоса. Но подумать о желаниях жены? О том, чего хочется этому милому существу, живущему в одном с ним пространстве? Увольте! Ненужные затраты времени! А угроза лишить прогулки мужа-программера встретит только удивление: «Да мы же никуда не ходим и не собираемся идти!» Тут жена может назидательно поднять палец и сказать: «Вот об этом-то я тебе и толкую!»

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

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

Что им помогает в их многосуточной вахте? Что позволяет просиживать рабочий день, а потом бессонную ночь перед любимым «плоскарем» SONY, выстукивая пальцами чечетку по заслуженной QWERTY? Ответ прост, други мои. Кофе! Отними у программера кофе, он и дня не протянет. Можем ли мы саботировать доставку кофе к месту постоянного проживания мужа в квартире – компьютерному столу? До недавнего времени могли. Теперь – увы и ах тем из нас, кому не повезло быть замужем за линуксоидом. Жены энтишников и икспшников, а также все остальные жены могут быть временно спокойны. А вот что касается Линукса, теперь эта операционная система вполне может заменить жену и варить программисту кофе, повинуясь почти незаметным нажатиям нескольких клавиш. Безотказно, бесперебойно, не мучая программиста упреками и не требуя ласки и признания взамен. Линукс, девочки мои, составил нам серьезную конкуренцию в жизнеобеспечении мужа-программиста самой важной (не считая пива) жидкостью, топливом для мозгов.

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

Между компьютером и кофеваркой будет посредничать электронная схема, которую придется спаять тому, кто желает готовить кофе с клавиатуры. Схема будет преобразовывать напряжение 5 V в 220 V, необходимые для питания кофеварки.

ПК      = >      Схема      = >       Кофеварка

        0-5 V                    ~220 V

Первое, что придется сделать нашему молодцу –  разжиться готовым штекером DB-25, или, если ему захочется потренировать свои золотые ручки, распаять самому в соответствии со схемой подключения:

Контакт 1: Задний фронт (он же строб инвертированный).

Контакты 2-9: Шина данных.

Контакты 10: Сигнал подтверждения, появление которого вызывает необходимое прерывание.

Контакты 18-25: Земля.

Простой способ получения напряжения 0-5В с параллельного порта компьютера:

      Разъем                                                      Вывод 10 - ACK
      вид сзади                                                  Вывод  9 - D7
      Папа DB-25                                              Вывод 2 – D0
                                                                        Вывод 1 - Строб

Спецификация DB-25

<=вход  DB25    Название  
=>выход            Сигнала     Bit                   Описание
------  ----    ----    --------        ---     -----------------------------
=>       1             -Строб        C0-      Устанавливает низкий уровень при посылке на <0.5 нс
=>       2             Data 0          D0      Младший бит данных
=>       3             Data 1          D1      Младший бит данных
=>       4             Data 2          D2      Младший бит данных
=>       5             Data 3          D3      Младший бит данных
=>       6             Data 4          D4      Младший бит данных
=>       7             Data 5          D5      Младший бит данных
=>       8             Data 6          D6      Младший бит данных
=>       9             Data 7          D7      Старший бит данных
<=      10            -Ack            S6+     Импульс подтверждения ~ 5 нс
<=      11            +Busy          S7-     Занят
<=      12            +PaperEnd   S5+     Нет бумаги
<=      13            +SelectIn     S4+     Принтер выбран
=>      14            -AutoFd       C1-     Автоперевод строки
<=      15            -Error           S3+     Ошибка
=>      16            -Init             C2+     Инициализация (импульс < 50нс)
=>      17            -Select         C3-     Выбор принтера
==   18-25         Ground
 
Следующие 20-30 минут уйдут на поиски нужных деталей и сборку нижеприведенной схемы.
 

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

·         Получить разрешение на использование адресного пространства Ввода/Вывода, обратившись к ядру командой ioperm, например, ioperm (BASE, range, 1);

·         Выполнить команду out для установки напряжения 0-5В на параллельном порту: например outb (1, BASE);

·         Подождать, пока приготовится кофе. Было бы неплохо, если бы это время вводилось в командной строке.

·         Выключить кофеварку: outb (0, BASE);

·         По окончании работы на параллельный порт должна быть подана команда: ioperm (BASE, range, 0);

·         Замените BASE = 0x3bc для /dev/lp0, 0x378 для /dev/lp1, и 0x278 для /dev/lp2, range=8.

Конечно, одну и ту же вещь можно делать многими разными способами. Каждый программист – творец. Он сам знает, что и как ему писать, и чужих идей ему не надо. Но для примера здесь можно показать, как это сделал некий Тимофей Слепцов, когда ему приспичило доказать своей подруге, что он способен самостоятельно сварить кофе в самые сладкие минуты ее утреннего сна:

#include 
#include 
#include 
#include 
#include 
#define BASE 0x378
int range;
 
main(int argc, char* argv[]) {
                int ch;
                range=8;
           while ( (ch=getopt(argc,argv,"be")) != EOF)
                 switch(ch) {
                   case 'b': {
                                          ioperm(BASE,range ,1);
                                          outb(1,BASE);
                                                 }
                             break;
                   case 'e': {
                                          ioperm(BASE,range ,1);
                              outb(0,BASE);
                                                 }
                                                 break;
                   default:  {
                                          printf("Parport switcher. Moscow 2000y.\n");
                              printf("Usage: parport OPTION\n");
                              printf("Option: -b turn on device\n");
                              printf("        -e turn off device\n");
                                                 }
                                         break;
                 }
   return(0);
}

Когда программа написана, следует озаботиться созданием скрипта к новому устройству. Тот же Слепцов вполне доволен написанным им на Shelle скриптом «coffee.sh»:

#!/bin/sh
# Скрипт берет в качестве параметров кол-во чашек кофе, которое надо
# приготовить. Параметры для кофеварки Philips Comfort Plus.
ppswitch -b
case $1 in
2) sleep 4m 20s ;;
4) sleep 8m 20s ;;
esac
ppswitch -e 

Если этой программе установить setuid, может быть, удастся привить жене вкус: зная, что ей тоже разрешен доступ, она, возможно, полюбит новый способ приготовления кофе, потом полюбит Linux, потом … нет, не надо, наверное, ведь женщина-программист и так некоторым напоминает морскую свинку. Значит, решено: включаем кофеварку по crontab'у. Для особо настырных привожу тут часть crontab'а:

30 04 * * * root /usr/local/bin/coffee.sh 4

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

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

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



© Ева Морозовская



Объявления: