Как стать автором
Обновить

Комментарии 26

Конечно автор — царь и Бог, но под катом хотелось бы увидеть, что-нибудь более специфичное для Unix. За статью, спасибо.
Не хотелось опускаться на уровень конкретных примеров. Но в будущих статьях обязательно что-нибудь придумаю
конкретные примеры скорее будут мешать. хоть и говорится о принципах программирования под Unix, но я думаю и для других они тоже будут полезны. А примеры для Unix могут сбить с толку.
Конкретно про юникс: как и в случае с модульностью, с простотой в юниксах — полный швах, хотя сам принцип и имеет право на жизнь.

Лучший пример принципа «Зачем нам дизайн, если можно сделать ОВЕРдизайн» — это знаменитый x.org
Я не разбираюсь в X настолько глубоко, как Julien Danjou, но для того, чтобы понять насколько там все печально достаточно подумать о том, когда Вы в последний раз использовали сетевые возможности X вместо, скажем, vnc? Кроме того, что эти сетевые возможности практически нигде не используются, они открывают забавный вектор атаки (подозреваю, что в переусложненном коде 80-х годов, который никто уже не понимает есть некоторое количество ошибок) — одной из которых долгое время являлась возможность снятия keylog-а с удаленной системы, не имея даже аккаунта на ней. С появлением xauth осталась только возможность делать keylog ЛЮБОЙ активности на десктопе (в том числе gksudo, терминала и вообще всех рутовых процессов) из-под непривилегированного пользователя.

Чтобы обойти высокую латентность и низкую пропускную способность сетевых протоколов, в конце концов появляются расширения типа MIT-SHM, которые полностью отказываются от сетевых возможностей во имя производительности, при этом все еще оставляя видимость, что все таки происходит по сети. Этого оказывается мало и появляется DRI/DRM, имеющий полный доступ к аппаратуре и физической памяти, но «для галочки» работающий как user-mode процесс.

Да и сама юзермодовость X сервера — не более, чем «потемкинская деревня» для демонстрации как все хорошо. Если углубиться в детали, оказывается что он работает от root-а, что в сочетании с довольно дурацкой юникс-безопасностью автоматически означает то же, что и kernel-mode модуль — то есть полное и ничем неограниченное доверие (даже если кому то захочется ограничить x сервер с помощью какого нибудь LSM, о которых отдельный разговор, то придется оставить R/W доступ на /dev/mem, что опять таки означает полный и ничем не ограниченный доступ к системе).

Был ли выучен урок? не думаю (зато аудиостек нативно поддерживает стриминг по сети, кроме случаев, когда он вообще не работает).

xkcd 619 появилось не на пустом месте, да
НЛО прилетело и опубликовало эту надпись здесь
почему все ругаются на сетевую составляющую иксов
Потому что она плохо себя зарекомендовала для сетевого доступа (все пользуются компрессированными vnc/rdp), и создает кучу проблем для локального доступа (уже упоминавшиеся здесь MIT-SHM и DRI как раз ОБХОДЯТ сетевую составляющую иксов, чтоб выжать производительности). Более того, давно и успешно разрабатываются всякие библиотеки, типа нотификаторов в трее, которые используют чисто локальные штуки типа d-bus. Вот и получится, что x-сервер у Вас будет на одном компьютере, а трей — будет отображаться (если будет) локально на машине с клиентом. В общем овердизайн в чистом виде.

Сетевая составляющая pulseaudio — очень хорошая фишкаНе совсем. Это наружение слоистоисти же. Слой который отвечает за вывод и микширование звука не должен знать, как к нему этот самый звук приходит. А TCP/UDP стриминг PCM звука — не совсем то, что нужно подавляющему большинству пользователей.
А у нас вот все X11 гоняют, а не vnc. Объём данных слишком большим становится только в софте, написанном с намеренным игнорированием сетевой составляющей.
Специфичного хватает в оригинальной книге. Лучше что-нибудь не специфичное и не UNIX-овое. Должно же быть отличие?
НЛО прилетело и опубликовало эту надпись здесь
В загловке используется UNIX, потому что именно так называется оригинальная книга Реймонда, откуда все эти статьи почти полностью и беруться. Книжка конечно хорошая, но в своем роде беллетристика, мне она пользы много не принесла.
Ну, виндузятники, которые не читают статью только потому, что в заголовке есть слово UNIX — сами себе злобные бакланы. Хотя пока в этом цикле статей я не увидел ничего про UNIX. Да и вещи банальные.
А примеры на Схеме отсекают s-exp'офобов от SICP. ССЗБ.
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.

Оффтоп: А у вас нет такой же бритвочки, но в PNG с прозрачностью? :)
А вы остальные 8 статей напишете в таком же стиле? Или они будут более информативные и на тему юникса?
Если честно, это имеет прямейшее отношение к UNIX, поэтому даже примеров нет :)). Да и нафиг Вам описание того, чем read() отличается от pread() и про то, чем отличается поддержка Linux'ом спецификации SUS 3 от таковой во FreeBSD и Solaris :)? Это всё достаточно просто изучается с помощью man'ов, и уж точно вряд ли кого-то заинтересует на хабре…
Вкратце содержание статьи: Исскуство погромированния на ЮНИКС для тех, кто не умеет читать по английски.
А для тех кто умеет catb.org/esr/writings/taoup/html/
К Юниксу статья отношения не имеет.

Она для всех в тему, включая Web, Windows, Unix, embedded и всякие Баду.
Хочу отметить — правила изложенные в статье — есть правила функционального программирования.
Скажем так — начальный уровень.
мне показалось, что упоминание Оккама/П.Д.О. было бы уместнее в предыдущей статье — про модульность. здесь же он ясности не добавил). в программировании нередко приходится добавлять обозначения для того, чтобы повысить ясность. сравните:

print 1 * 3

и

price_of_apples = 1
number_of_apples = 3
print price_of_apples * number_of_apples

первый пример несомненно короче. но где больше ясность?

Кроме того:
Последующее развитие логики показало, однако, что отнесение Принципа Достаточного Основания к числу логических законов лишено /достаточных/ оснований.
wiki: Принцип достаточного основания) иными словами, бритва Оккама не нужна))
Ну если весь ваш пример и есть вся программа — то первый пример лучше намного :)
А вообще очень напоминает metaleks.net/programming/the-evolution-of-a-python-programmer
А чем лучше? Мы не будем говорить про вычисления на калькуляторе, где «программа» живет лишь до получения первого результата. Давайте рассмотрим более привычную для разработчиков ситуацию ситуацию, когда программа должна использоваться и поддерживаться в течении продолжительного времени. Как это часто бывает, проходит полгода, и цены на яблоки вырастают на на 1 рубль. Этот факт нужно отразить в чудо-программе. Разумеется, предыдущего гения-программиста уже месяц, как схантил йандекс, и задачу предстоит решать другому. Что он видит? Он видит в коде две волшебные константы: что из них цена, которую нужно менять «1» или «3»? В исходнике нет ответа, поэтому он идет выяснять состояние прайса на яблоки в предыдущем периоде, проклиная всех долбаных гениев, решивших (уж не знаю чем вам этот код приглянулся) — допустим, сэкономить 10 секунд на написание 2 строчек проясняющего суть текста. :)
Вы ничего не понимаете в ясности. ООП — наше всё! :P

(let ((apples-cost 42))
  (defun apples-update-price (new-price)
    (setf apples-cost new-price))
  (defun apples-calculate-cost (&key (number 1) (discount 0))
    (when (/= discount 0)
      (error «Discount not supported yet»))
    (* apples-cost number)))

(apples-update-price 1)
(prin1 (apples-calculate-cost :number 3))
Моноширинный шрифт использовать не могу. Кармы не хватает.
а че это такое?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории