?

Log in

No account? Create an account

;login: logout

« previous entry | next entry »
ноя. 16, 2013 | 10:28 pm

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


Ночной дозор


Джеймс Микенс — исследователь из группы распределённых систем в лаборатории Микрософта в Редмонде. Его текущее исследование фокусируется на веб-приложениях, с акцентом на разработке JavaScript-фреймворков, которые позволяют разработчикам обнаруживать и исправлять ошибки в широко распространённых веб-приложениях. Джеймс также работает над быстрыми, масштабируемыми системами хранения данных для дата-центров. Джеймс получил степень доктора философии в области компьютерных систем в университете Мичигана и диплом бакалавра компьютерных систем в ДжорджиаТек.

Как хорошо тренированный академический исследователь, я трачу кучу времени, пытаясь расширить горизонты человеческого знания. В то же время, как всякий рождённый на Юге, я втайне верю в то, что в действительности прогресс — это сказки, и я должен готовиться к концу времён, что цыплята вернутся к насестам1, а в дом войдут быстрые зомби, и медленные зомби, и вежливые зомби, которые говорят "сэр" и "мэм", но всё равно пытаются съесть твой мозг, чтобы заполучить твои умения. Когда придёт революция, я должен быть готов; таким образом, в минуты затишья, когда я не совершаю невероятные научные прорывы, я думаю о том, что я буду делать, когда прогноз погоды неотвратимо превратится в РЕКИ КРОВИ ВЕСЬ ДЕНЬ КАЖДЫЙ ДЕНЬ. Основное, о чём я размышляю, — это кто будет в моей банде, поскольку вероятность пост-апокалиптического выживания непосредственно связана с размером и качеством вашей разношёрстной стаи товарищей. Есть несколько очевидных кандидатов на приём: слесарь (для взлома дверей), эксперт-взрывотехник (на случай, если у слесаря закончатся идеи), а также человек, который сможет раздобыть, натренировать и потом метать змей в моих врагов (поскольку в мире, где нет надежды, метание змей является разумным методом разрешения споров). Все эти люди сыграют роль в моём исключительном успехе в качестве мрачного философа-главнокомандующего. Однако самой важной шишкой в моей банде будет системный программист. Человек, который способен отладить драйвер устройства или распределённую систему — это человек, которому можно доверять в гоббсовском2 кошмаре захватывающих дух масштабов: системный программист видел ужасы мира и понимает экзистенциальный ужас бытия. Системный программист писал драйверы для глючных устройств, чей микрокод был изготовлен пьяным подростком или трезвой золотой рыбкой. Системный программист трассировал сетевую проблему через восемь машин, три часовых пояса и краткий обход через страну Амишей, где проблема передавалась передним левым копытом мула по кличке Освобождение3. Системный программист читал исходники ядра, чтобы лучше постигнуть тайные пути универсума, и видел он комментарий в планировщике "РАЗВЕ ЭТО РАБОТАЕТ РЖАКА", и не ржал он, но рыдал, и отправил он патч к ядру, чтобы восстановить баланс Силы и исправить инверсию приоритетов, которая завешивала MySQL. Системный программист будет знать, что делать, когда общество рухнет, поскольку системный программист уже живёт в мире вне закона.

Слушайте, я не утверждаю, что прочие разновидности компьютерщиков бесполезны. Я даже верю в то, что у программистов на PHP есть душа (хотя и не могу это доказать). Я считаю, это круто, что спецы по базам данных продолжают пытаться усовершенствовать select-from-where, даже несмотря на то, что единственные запросы, которые не могут быть выражены через select-from-where, — это нецензурные лимерики из Кентерберийских рассказов. Некоторым образом, который я всё ещё не понял, я рад тому, что теоретики исследуют равенство между пятимерными машинами Тьюринга и Эдвардом руки-ножницы. В большинстве ситуаций дизайнеров GUI не следует принуждать к боям с трезубцем и сетью, в то время как я ору "МОДАЛЬНЫЕ ДИАЛОГИ — ЭТО НЕ СПАРТА". Я как статуя Свободы: я принимаю всякого, даже сирых и убогих и тех, кого радует Haskell. Но когда дело дрянь, мне нужны ребята для критически важных задач, мне нужен тот, кто может надеть очки ночного видения и высадиться с вертолёта на верёвке, после чего сделать не подлежащие огласке вещи, чтобы сохранить мою свободу, пока на фоне играет музыка кантри. Системщики это могут. Я могу дать ядерному хакеру правдоподобную кличку типа "Алмазная пыль" или "Молот Зевса". На контрасте, ещё никто не говорил: "Эти полупрозрачные иконки действительно полупрозрачны! ЭТО РАБОТА МОЛОТА ЗЕВСА?"

Я выбрал произвольный пример. Вам придётся поверить мне, когда я говорю, что предельно уважаю интерфейсников. Однако, когда интерфейсники отлаживают свой код, это похоже на арт-шоу или ассамблею Объединённых Наций. Тут вам и перерывы на чашку чая, и обмен остротами по французски; носить нефункциональный шарф необязательно, но приветствуется. Если интерфейсный код не работает, проблема может быть решена с использованием больших теорий, которые соотносят форму и восприятие с вашими глубоко личными чувствами по поводу овалов. Здесь будут большие дебаты по поводу социоэкономических подтекстов шрифта Helvetica Light, и в некоторый момент вам нужно будет решить, являются ли засечки дерзким выражением современности, или инструментом гегемонического подавления, которое подразумевает поддержку феодализма и некомпетентности. Является ли прижатие-и-перетаскивание менее элегантным, чем обвод-кружком-и-лёгкое-поглаживание? Эти неотложные загадки сами себя не решат. И всё же, после долгого дня отладки интерфейсного кода, всегда есть надежда и нет настоящего гнева; даже если вы опасаетесь, что ваш drop-down должен превратиться в radio button, он тем не менее сгодится до завтра, когда взойдёт солнце, славное и живое, и вдохновит вас соединить прокрутку и левый клик пикантными способами, которые вы помянёте в сонете, когда вернётесь с местного фермерского рынка.

Не таков мир системного хакера. Когда вы отлаживаете распределённую систему или ядро ОС, у вас всё в стилистике Техаса. Вы собираете несколько отменных, стоических парней — парней, которые видали, как умирают, и вы берёте кой-какие примитивные инструменты, типа компаса или рюкзака и заострённой с одного конца палки, и вы топаете в дикие места и ищете приключений, вероятно жуя при этом табак. Как системный хакер, вы должны быть готовы совершать варварские, непроизносимые поступки, отстреливать сбежавшие треды своими собственными руками, писать прямо в сетевые порты, используя telnet и старую копию RFC, которую вы нашли в Ватикане. Когда вы отлаживаете системный код, нет никаких высокоуровневых дебатов про выбор шрифта или лучшую разновидность бирюзового, потому что это Ветхий Завет, сердитый и монохромный мир, и неважно какой у вас Arial, Bold или Condensed, когда люди покрыты язвами, свирепствует чума и тирания фараона египетского. Интерфейсники узнают про ошибки в коде из встревоженного письма своего терапевта. Системщики узнают про ошибки, просыпаясь и обнаруживая, что их первенец пропал, и на стене кровью написано ETIMEDOUT.

Что такое безнадёга? Я познал это — услышь песнь мою. Безнадёга — это когда отлаживаешь драйвер для ядра, и смотришь в дамп памяти, и видишь, что указатель равен семи. В ПРИРОДЕ НЕ СУЩЕСТВУЕТ ОБОРУДОВАНИЯ С АДРЕСОМ 7. Более того, 7 — ЭТО СЛИШКОМ МАЛО, И ТОЛЬКО ЗЛОВРЕДНЫЙ КОД МОГ ПОПЫТАТЬСЯ ОБРАТИТЬСЯ К ТАКОМУ НИЗКОМУ АДРЕСУ В ПАМЯТИ. Попытки доступа к памяти по маломерным адресам без выравнивания отняли у меня десятилетия жизни. Хуже, чем смещённые маломерные адреса, только выровненные указатели на буферы невозможно большой длины. Ничто не уничтожит вечер пятницы лучше, чем последний быстрый просмотр файлов журнала и обнаружение пословно выровненного адреса буфера, длина которого равна КОЛИЧЕСТВУ ЭЛЕКТРОНОВ ВО ВСЕЛЕННОЙ. Это непреходящая грусть, поскольку попытка прочитать 2893 байт — это единственное, что признают ошибкой и демократы, и республиканцы. Это как-будто обязательная медстраховка Medicare может быть хорошей идеей, а может и не быть, но невозможно оправдать попытку прочитать всё, что существовало убиллион раз в массиве мега-убиллионного размера. Эта постоянная война за счастье и есть то, чего не понимают несистемные люди про системный мир. Ну то есть, когда алгоритм машинного обучения ошибочно распознаёт в кошке слона, на самом деле это прикольно. Вы можете напечатать картинку кота в костюме слона и добавить ироническую подпись, которая развлечёт людей с второсортным интеллектом, и вы можете отправить фотку с работы и веселиться по факту того, что фундаментально всё по-прежнему в порядке. Когда у вас есть смещённый доступ в память, не получится напечатать ничего забавного, поскольку ваша машина сдохла, и в мире теней принтеров нет. Ошибка невозможно большого буфера ещё хуже, поскольку такие ошибки зачастую скрываются за кулисами, тихо переписывая ваши данные чистым злом; если смещённый доступ к памяти похож на отморозка, сжигающего ваш дом при первой же оплошности, то ошибка переполнения буфера ведёт себя скорее как маньяк, который влезает в ваш дом, рассыпает песок на ваши простыни и зубные щётки и затем ждёт, пока вы постепенно обнаружите, что ваш мир трачен безумием. В самом деле, обычный способ обнаружения переполнения буфера — это когда ваша программа вроде бы работает нормально, а потом она пытается вывести строчку, в которой должно быть написано "Всем привет", но вместо этого она печатает "#a[5]:3!" или другой синтаксически корректный скрипт на языке Perl, и вы такие ЧТО ЗА НА... — и внезапно понимаете, что ваши чрезмерные запросы к памяти топчутся по куче как Невероятный Халк, которого попросили написать эссе на тему "Крушить вредно".

Вы можете спросить: "Зачем кому-то понадобилось писать код на гротескном языке, который даёт доступ прямо к адресам в памяти? Почему бы не использовать современный язык, где есть garbage collector, функциональное программирование и бесплатные массажи после ланча?" Ответ таков: потому что указатели реальны. Это то, что понятно железу. Кому-то приходится иметь с ними дело. Вы не может просто положить книгу по языку LISP на процессор семейства x86 и надеяться, что он научится вычислению лямбды осмотически. Отрицать существование указателей — это всё равно что, живя в древней Греции, отрицать существование кракенов и удивляться, почему ни один из ваших кораблей не достиг Марокко, или Ур-Марокко, или как оно там называлось в те времена. Указатели как кракены — реально существующие твари, с которыми нужно справляться, чтобы цивилизованное общество могло существовать. Не ошибитесь: я не хочу писать системные программы на языках типа C++. Так же, как и Некрономикон, исходный код на C++ — это грешный, тайный документ, который наполнен тайными заклятиями и запретным знанием. В 3 часа ночи, когда вы отлаживались в течение 12 часов и обнаружили virtual static friend protected volatile templated function pointer, вы хотите забыться в гибернации, и восстать оборотнем, и найти тех, кто написал стандарт С++, и принести разрушения в то, что они любят. Ну а C++ STL, с его вызывающим дислексию синтаксической пургой из двоеточий и угловых скобок, гарантирует, что если вы попытаетесь объявить любую разумную структуру данных, ваши первые семь попыток будут обречены на ошибки компилятора Вагнеровской свирепости:

Syntax error: unmatched thing in thing from std::nonstd::_ _
map<_Cyrillic, _$$$dollars>const basic_string< epic_mystery,mongoose_traits &lt; char>, __default_alloc_<casual_Fridays = maybe>>

Однажды я попытался создать list<map<int>>, и мои синтаксические ошибки заставили мертвецов ходить среди живых. Такие вещи очевидно плачевны. Таким образом, я полностью поддерживаю языки высокого уровня, в которых указатели скрыты, и типы сильны, и объявление структуры данных не требует от вас решения синтаксической головоломки, созданной злобными инопланетными тварями. Но, как говорится, если вы обнаруживаете себя пьющим мартини и пишущим программы на мусорособирающем и объектно-ориентированном Эсперанто, отдавайте себе отчёт в том, что единственная причина, по которой рабочий цикл Эсперанто работоспособен — это потому что существуют системщики, которые разменяли всякую надежду на потерю девственности на восхитительную возможность мыслить о шестнадцатеричных числах и их связях с операционными системами, железом и древними кровавыми ритуалами, которые Бьярн Страуструп проводил в Стоунхендже.

Пожалуй, наихудшее в бытии системщика то, что другие, несистемные люди думают, что понимают, какие ежедневные трагедии составляют вашу жизнь. Например, несколько недель назад я отлаживал новую сетевую файловую систему, которую создала моя исследовательская группа. Ошибка крылась в недрах компонента ядра, так что мои машины рушились впечатляющими и мстительными способами. После нескольких дней ручной перезагрузки серверов я превратился в волочащего ноги, разбитого человека, некое подобие учёной компьютерной версии Саддама Хуссейна, которого извлекли из бункера, со всклокоченной бородой, мёртвыми глазами и лихорадочными, абсурдными поисками полувоображаемых врагов. Пока я бродил по коридорам, бормоча никсоновские тирады в адрес своего кода, один из моих коллег из группы интерфейсов спросил меня, в чём моя проблема. Я описал ошибку, которая крылась среди конкурентных тредов, испорченного состояния машины и асинхронной доставки сообщений через множественные машины, и он заметил: "Да, звучит погано. Ты проверял логи на предмет ошибок?" Я сказал: "Конечно, я сделал бы это, если бы я не сломал каждую из компонент, которые нужны системе протокола для записи журнала. У меня сетевая файловая система, и я сломал сеть, и файловую систему я тоже сломал, и мои машины падают, стоит мне на них посмотреть. У МЕНЯ НЕТ ИНСТРУМЕНТОВ, ПОСКОЛЬКУ Я СЛОМАЛ СВОИ ИНСТРУМЕНТЫ С ПОМОЩЬЮ СВОИХ ИНСТРУМЕНТОВ. Моя единственная возможность получить логи — это нанять монахов, чтобы расшифровать субъективный опыт наблюдения за тем, как умирают мои машины, пока я плачу кровавыми слезами." Мой коллега, искренне пытаясь проявить сочувствие, вспомнил одну из собственных историй отладки, историю, которая по существу сводилась к операции сложения, которая была ошибочно заменена операцией умножения. Я выслушал его историю и сказал: "Слушай, я понял. Умножение не сложение. Это известно на протяжении многих лет. Однако умножение и сложение по крайней мере как-то соотносятся. Умножение похоже на сложение, только больше. Умножение — это взрослый птеродактиль, а сложение — это птенец птеродактиля. Таким образом, в твоей истории отладки твой код сбился с пути истинного, но в основе его лежит верная идея. На контрасте, не существует интуитивно понятной аналогии для протокола GRE, которой можно было бы выразить, что должен делать мой код и что он на самом деле делает. У меня была благопристойная цель превратить чтение файла в сетевую операцию, и сейчас у моих машин туберкулёз и запор. Заметна ли разница в наших бытиях? Когда ты пригласил девушку погулять, её отец оказался копом. Когда я пригласил девушку погулять, Я ОБНАРУЖИЛ, ЧТО ЕЁ ОТЕЦ — СТАЛИН".

Напоследок: я не утверждаю, что всякий должен стать системным хакером. Визуальные интерфейсы полезны. Автоматическая проверка грамотности полезна. Я рад, что люди работают над новым типом прыгающих иконок, поскольку они верят, что человечество справилось с опухолями и бездомностью и теперь живёт в мире без последствий и с многомерными спрайтами. Это восхитительно, и мне хотелось бы присоединиться к этим ребятам в XXVII веке. Но я живу здесь и сейчас, и в моём районе люди умирают на улицах. То есть, французский — это прекрасно, но никто не будет изобретать французский, если постоянно атакуют медведи. Понимаете? СИСТЕМНЫЕ ХАКЕРЫ ОТРАЖАЮТ МЕДВЕЖЬЮ УГРОЗУ. Только ценой неусыпной бдительности моих людей у вас есть свобода думать о круассанах и изысканной игре слов, в том числе о настоящем отце Людовика XIV. Итак, если вы видите меня, блуждающего по коридорам, пытающегося объяснить ошибки синхронизации сконфуженным монахам, будьте уверены, что каждый день и каждый час всё понемногу становится лучше. Для вас, но не для меня. Я всегда буду неистов при виде цифры 7, но таков путь героя.




1 перефразировка пословицы "проклятия, как цыплята, возвращаются к своим насестам", что эквивалентно нашему "что посеешь, то и пожнёшь".
2 в полном соответствии с воззрениями Т. Гоббса находящемся в состоянии "войны всех против всех", коль скоро государство мертво.
3 здесь имеет место отсылка к временам войны Севера и Юга, когда освобождённые негры считали своими по праву "40 акров и мула". Если учесть, что к амишам это не имеет никакого отношения, фантазия у автора весьма витиеватая.

Ссылка | Что скажете? | Поделиться

Comments {24}

электрокот

* * *

from: electrocat
date: ноя. 16, 2013 08:42 pm (UTC)
Ссылка

Спасибо за перевод :)

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 16, 2013 09:29 pm (UTC)
Ссылка

рад, что пригодилось :)

Свои 5 коп. | Предыстория | Развитие

Golos Ptic

* * *

from: golosptic
date: ноя. 16, 2013 11:26 pm (UTC)
Ссылка

!!!
Спасибо за перевод.
Смеялся.

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 17, 2013 10:20 am (UTC)
Ссылка

всегда пожалуйста :)

Свои 5 коп. | Предыстория | Развитие

Федор Одинцов

* * *

from: Федор Одинцов
date: ноя. 17, 2013 01:10 am (UTC)
Ссылка

Хороший русский. Спасибо. Смеялся.

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 17, 2013 10:20 am (UTC)
Ссылка

спасибо )

Свои 5 коп. | Предыстория | Развитие

Николай Иваныч

* * *

from: nivanych
date: ноя. 17, 2013 06:13 am (UTC)
Ссылка

Не согласен с автором.
Но горячо поддерживаю!

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 17, 2013 10:20 am (UTC)
Ссылка

автор имеет право на собственную интерпретацию :) ну и в образности ему не откажешь

Свои 5 коп. | Предыстория | Развитие

Очегледное - невероватное

* * *

from: real_big_shish
date: ноя. 17, 2013 11:34 am (UTC)
Ссылка

Спасибо, ржал пять раз!
даже оригинал отложен в долгую папку.

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 17, 2013 11:41 am (UTC)
Ссылка

:)

Свои 5 коп. | Предыстория | Развитие

Сын Солнца

* * *

from: sun_jr
date: ноя. 18, 2013 04:47 am (UTC)
Ссылка

Отличный перевод. Ржал как сумасшедший и рыдал кровавыми слезами одновременно. Не возражаете если я перепощу?

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 18, 2013 05:11 am (UTC)
Ссылка

всегда пожалуйста :)

Свои 5 коп. | Предыстория | Развитие

netch

* * *

from: netch
date: ноя. 18, 2013 06:45 am (UTC)
Ссылка

Потрясающий текст и отличный перевод, спасибо!

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 18, 2013 07:34 am (UTC)
Ссылка

:)

Свои 5 коп. | Предыстория | Развитие

* * *

from: mr_rm
date: ноя. 18, 2013 09:42 am (UTC)
Ссылка

Впечатляюще! Какие образы!..

Техническая поправка: "синтаксической пургой из двоеточий и угловых скобок" (angle brackets).

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 19, 2013 08:32 am (UTC)
Ссылка

Спасибо, сейчас исправлю ) Даже не знаю, чего меня переклинило, когда переводил — как-то сознание смысл исказило без моего участия.

Свои 5 коп. | Предыстория | Развитие

Maksym Shevchenko

* * *

from: r0land
date: ноя. 25, 2013 12:18 am (UTC)
Ссылка

1. Например в микроконтроллерах PIC16F87xA по адресу 0x07 вполне себе живет порт C который занимает 1 байт.
2. В C++ static и virtual - взаимоисключающие параграфы.
3. Ну естественно! Вы забыли второй параметр темплита для map.
... и наконец, какое отношение GRE имеет к файловой системе?

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: ноя. 25, 2013 08:04 am (UTC)
Ссылка

1. Речь шла явно не о микроконтроллерах
2. Если мне не изменяет зрение, это не единственная взаимоисключающая пара в этом объявлении :)
3. Это не я забыл, а автор. Я перевёл. По ссылке на оригинал можно найти e-mail автора и ему об этом сказать.

... и наконец, если файловая система сетевая и распределённая, то GRE ей может пригодиться сугубо в транспортных целях. Зависит от полёта мысли архитектора.

Свои 5 коп. | Предыстория | Развитие

Maksym Shevchenko

* * *

from: r0land
date: ноя. 25, 2013 10:23 am (UTC)
Ссылка

Неее... Микроконтроллеры это полный дзен. Особенно когда кроме тебя и создателей его не видел никто. Никакого JTAG под него на этой части суши не видел никто. Есть BSP в бинарях по какой-нибудь VxWorks.... 16 графических буферов из которых оказывается 4 вообще битовые. Неудачная прошивка заканчивается шаманством с паяльником по SMD. А полная нирвана достигается после того как выясняется что реализация malloc-а в бинарях почему-то аккуратно забита NOP-ми.

ЗЫ. Что-то у меня плоховато с фантазией как может пригодится GRE ... Правда если собирать ноды в одну сеть с помощью IpSec... Но что-то же поверх него должно бегать стандартное. Не велосипеды же городить. ;-)

Свои 5 коп. | Предыстория | Развитие

Maksym Shevchenko

* * *

from: r0land
date: ноя. 25, 2013 10:25 am (UTC)
Ссылка

Увидел его email - @microsoft.com. Тогда все понятно. ;-)

Свои 5 коп. | Предыстория | Развитие

erra

* * *

from: erra
date: ноя. 25, 2013 03:22 pm (UTC)
Ссылка

я не стал бы обобщать ) в MS таки работает много умных людей

Свои 5 коп. | Предыстория | Развитие

Maksym Shevchenko

* * *

from: r0land
date: ноя. 25, 2013 05:06 pm (UTC)
Ссылка

О нет! Я не о том. Я просто наслышан о том что у них в коде творится местами редкий бардак. Да и написание дров для винды тот еще геморой.

Я пару лет назад пробовал эмулятор драйвера джойстика написать. Через три дня плюнул и сделал эмулятор на ARM-е c gadgetfs за два часа.

Свои 5 коп. | Предыстория | Развитие

Severin Pappadeux

* * *

from: pappadeux
date: дек. 3, 2013 03:57 am (UTC)
Ссылка

> у слова Deliverance есть несколько значений

у сочетания вместе Deliverance и мула есть только одна подходящая интерпретация:

http://en.wikipedia.org/wiki/40_acres_and_a_mule

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: дек. 3, 2013 07:48 am (UTC)
Ссылка

век живи, век учись :)

Свои 5 коп. | Предыстория | Развитие