На днях на хабре встретил статью, в которой чувак написал маленькую RSS-читалку под линукс. Очень понравилась не сама читалка, а исключительный UNIX подход к решению задачи. Подробно код и описание автора смотрите тут, я же попытаюсь описать почему этот код мне так понравился.
В программирование под UNIX-лайк системы еще на их заре, сформировались определенные правила хорошего тона или даже правильней сказать философия основанная на перечне правил, на данной программе можно увидеть правильное их применение:
1. Программа должна делать мало, но хорошо. Автор решил не изобретать велосипед и не стал сам поднимать соединение с сервером и парсить XML поток. Вместо этого он использует уже написанную утилиту rsstail, которая сама решает задачи соединения и парсинга и выдает на стандартный вывод данные в простом формате ключ:значение. Таким образом программа читалки, решает не большую задачу - выжидает новое сообщение из стандартного ввода и показывает сообщение на рабочем столе.
2. Текстовый протокол передачи данных. Несмотря на то, что RSS тоже текстовый протокол передачи данных, основанный на XML, выход rsstail ключ:значение на порядок проще для анализа и к тому же намного легче читается. Утилита rsstail выводит результат своей работы в стандартный поток, пот этому ее можно использовать в конвейере rsstail | приемник , что и использует автор (очень распространенный в среде UNIX прием)
3. Использование высокоуровневых языков. Поскольку читалка является фронт-енд приложением и большую часть времени находить в ожидании данных из стандартного потока, то вполне разумно использовать скриптовые языки в данном случае Ruby. Преимущества такого подхода - понятный и сжатый код.
Программистам которые далеки от культуры UNIX наверно покажется данное решение довольно странным, т.к. в других средах чаще предпочитают писать программы "монолиты" которые выполняют весь функционал и если и используют чужой код, то как правило через библиотеки вызывая функции API. Если кому то интересно, то можете решить данную задачу полностью в одной программе и вы убедитесь насколько это решение будет трудоемким и громоздким, по сравнение с описанным примером. Если кого то заинтриговал такой подход, то почитайте Исcкуство программирования для Unix - Эрик С. Реймонд
Комментариев нет:
Отправить комментарий