written on Friday, March 9, 2012
Категорично злюся і матюкаюся, коли юнікс-вей розуміють у вузькому сенсі — як реалізацію у вигляді запуску локальних процесів, які спілкуються текстом через пайпи. Такою хуйнею займаються виключно червоноглазі догматики, які дрочать на сакральне знання певних ключів і параметрів якоїсь утиліти та інтові значення кодів повернення. Гірші за юнікс-догматиків — тільки релігійно-мракобісні дебіли, які махають руками, б'ються лобом об підлогу і не розуміють, що Ісус був атеїстом і боровся з цим самим мракобіссям жеручих пісок сенднігерів єбучих дві тисячі років тому.
У реалізації юнікс-вею в її кондовому сорокарічної давності вигляді є дохуя проблем, через які її засунули глибоко в надра чорно-зеленого терміналу для задротів і програмістів. Створювати на кожне чихання десяток процесів і вибудовувати їх у пайп — ніхуя не ефективно. У нашому хайлоаденому вебі не можна створювати купу процесів при обробці кожного запиту. Особливі естети, які володіють таємним знанням правильного написання сішного коду, вміють юзати 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" []
Все, що потрібно кондовому юніксу — можливість дуже просто відправляти повідомлення без навантаження користувача купою концептів, типу "шляхів", "інтерфейсів". Щось просте, як пайп, але яке відправляє повідомлення замість створення процесу. Щось, що задовольняє вимоги безпеки та зберігає структуру повідомлення без іксемельних конфігів і бінарного формату.