Юниксвей

written on Friday, March 9, 2012

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

У реализации юникс-вэя в ее кондовом сорокалетней давности виде, есть дофигище проблем из-за которых ее (релизацию) засунули глубоко в недры черно-зеленого терминала для задротов и программистов. Cоздавать на каждый чих десяток процессов и выстраивать их в пайп - нихуя не эффективно. В нашем хайлоаденом вебе нельзя создавать кучу процессов при обработке каждого запроса. Особые эстеты, обладающие тайным знанием правильного написания сишного кода, умеют юзать CGI даже в 21ом веке и это иногда даже работает быстрее всякого скриптового говна, подключенного через тридцать-три WSGI и 0-mz, но это вырожденный случай и массово так делать не получится - каждый новый процесс - это целый жырный fork(), выделение аж восьми метров под стэк и куча других страшных и тижолых действий.

Осталось понять, почему для реализации простого принципа "разделять код и гонять текстовые данные" обязательно нужно дергать сискол fork() выделять восемь метров памяти под стэк каждого процесса. Правильный ответ - не нужно. Любая сложная система, рано или поздно, либо скатывается в тот же самый unix-way, либо в жава-гейство с бинарными иксемелями и говном вроде

device = bus.get_object('org.freesmartphone.ogsmd',
    '/org/freesmartphone/GSM/Device')
device.connect_to_signal("IncomingTextMessage",
    got_sms, dbus_interface="org.freesmartphone.GSM.SMS")

(smsgate), либо просто дохнет в забвении, разлагаясь от веса и токсичности собственного оверенжинеринга (привер urllib2!).

Следование приципам юник-вэя - естественно для успешной в инженерном смысле системы. Сюда катится и весь веб, отсюда растут ноги и реста, и маркдауна и библиотеки requests. Отсюда расут всякие микрофреймворки и nosql. Разбиение на модули, упрощение и текстовый интерфейс внутри и снаружи с сохранением производительности и возможности высоконагруженных операций.

Пока фрираннеро-задроты (FSO) тридцать раза за два года переписывали код, единственным назначением которого было написать в модем одну ебучую строчку "ATD+3801231233", причем +3801231233 взять из графического интерфейса, состоящего из скролящегося пальцем списка контактов, вся целевая аудитория разбежалась по гей-клубам и понакупила айфончики. При этом, за все пять лет, в консоли так и не сделали команду "dial", а для отправи смс нужно писать (из mbus tutorial):

mdbus -s org.freesmartphone.ogsmd \
    /org/freesmartphone/GSM/Device \
    org.freesmartphone.GSM.SMS.SendMessage \
    0049987654321 "test message"  []

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

This entry was tagged gsm and unix