Чтение онлайн

на главную - закладки

Жанры

Шрифт:

Итак, я переформулировал свою проблему. Очевидно, что нужно было (1)добавить поддержку SMTP forwarding в родовой драйвер,(2) сделать это режимом по умолчанию, (3)выбросить все остальные режимы доставки, особенно возможности доставки в файл и доставки в стандартный выходной поток.

Некоторе время я не решался делать шаг 3, чтобы не подводить пользователей, зависящих от альтернативных методов доставки. Теоретически, чтобы получить тот же самый эффект они могли переключиться на использование.forward файлов или их не sendmail'овские эквиваленты. Практически, такой переход мог вызвать проблемы.

Однако, когда я решился на этот шаг, он принес много пользы. Значительная часть кода драйвера исчезла, конфигурация заметно упростилась,стало не нужно заботиться об MDA, пользовательском mailbox'e, поддержке блокировки файлов операционной системой.

К тому же исчез единственный способ потерять почту. Если у вас определена доставка почты в файл, а диск оказывается переполненным, то почту вы теряете. Это не может случиться при SMTP forwarding, так как SMTP listener не вернет OK, до тех пор пока сообщение не будет доставлено или отложено для более поздней доставки.

Также улучшилась производительность (хотя при единичном запуске вы бы этого не заметили). Другое незначительное улучшение заключалось в том, что справочная система (manual page) стала короче.

Позже, мне пришлось добавить доставку через локальный MDA определенный пользователем, для того чтобы справиться с некоторыми ситуациями связанными с динамическим SLIP'ом. Однако, я нашел для этого более простой способ.

Какой же из этого можно сделать вывод? Не колебайтесь выбрасывать устаревшие особенности, если вы можете сделать это без потери эффективности. Антуан де Сент– Экзюпери – человек, который был летчиком и авиаконструктором, сказал:

13. Совершенство в разработке достигается не тогда, когда нечего добавить, а тогда когда нечего убрать.

Если ваш код становится одновременно и лучше и проще, вы поступаете правильно. В процессе разработки fetchmail приобрел свое собственное лицо, отличное от старого popclient'a.

Наступило время для смены имени. Новый дизайн больше походил на двойственный sendmail, чем старый popclient. Итак, через два месяца я переименовал его в fetchmail.

7. Fetchmail расширяется

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

Программа работала хорошо, потому что я использовал ее каждый день, и часто прислушивался к моим бета-тестерам. Я вдруг осознал, что это не просто тривиальная хаккерская задача, которая может быть полезна разве лишь нескольким людям. У меня была программа нужная каждому хаккеру, имеющему UNIX-машину и SLIP/PPP соединение. Благодаря использованию SMPT-forwarding, эта программа могла бы стать «убийцей категории», т. е. программой, которая настолько плотно заполняет свою нишу,что все остальные оказываются просто забытыми.

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

У Эндрю Таненбаума была идея построить простую UNIX-подобную систему для 386 машины, чтобы использовать ее как обучающий инструмент. Линус Торвальдс использовал идеи Minix, прежде чем Эндрю понял, что из них может получиться.

Этот проект вырос в нечто значительноое. Используя этот же способ (только в гораздо меньшем масштабе), я позаимствовал идеи у Карла Харриса и Гарри Хочхейзера. Вряд ли кого-нибудь из нас можно назвать гением. Однако, обычно научная, инженерная и промышленная разработка совершается не гениями, хаккерами.

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

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

Я реализовал эту особенность частично потому, что об этом просили пользователи, а частично потому, что это помогло обнаружить ошибки в single-drop. Мне пришлось обобщить проблему адресации. Усилия себя оправдали. Изучение RFC 822 заняло у меня очень много времени, так как пришлось изучить множество несвязанных меджу собой деталей.

Multidrop-адрессация была замечательным решением. Вот что я из нее вынес:

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

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

15. Когда вы разрабатываете gateway software, старайтесь не вмешиваться в поток данных, пока вас к этому не вынудят.

Если бы я не стал следовать этому правилу, поддержка 8-битового MIME, стала бы очень трудной. А так мне просто пришлось прочитать RFC 1652.

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

Поделиться:
Популярные книги

На пути к цели

Иванов Тимофей
5. Полуварвар
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
На пути к цели

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Кодекс Охотника XXVIII

Винокуров Юрий
28. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника XXVIII

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Охотника. Книга XXXIX

Сапфир Олег
39. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIX

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Двойник короля 20

Скабер Артемий
20. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 20

Последний Герой. Том 2

Дамиров Рафаэль
2. Последний герой
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Последний Герой. Том 2

Бояръ-Аниме. Газлайтер. Том 30

Володин Григорий Григорьевич
30. История Телепата
Фантастика:
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 30

Ветер и искры. Тетралогия

Пехов Алексей Юрьевич
Ветер и искры
Фантастика:
фэнтези
9.45
рейтинг книги
Ветер и искры. Тетралогия

Мажор. Дилогия.

Соколов Вячеслав Иванович
Фантастика:
боевая фантастика
8.05
рейтинг книги
Мажор. Дилогия.

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Я Гордый часть 7

Машуков Тимур
7. Стальные яйца
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Я Гордый часть 7

Эволюционер из трущоб. Том 7

Панарин Антон
7. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 7