Alek�ei Matiu�hkin

сделано с умом



Индикатор прогресса

Friday, 20 Oct 2023 Tags: 2023bikes

Более двадцати лет назад мне довелось работать в средних размеров аутсорсной компании в Ленинграде. Нам нравилось именоваться «Remote Facility of Great American Company». Мы все пришли из фриланса и не сильно напрягались, поддерживая несколько крупных заокеанских проектов. Команда была очень дружной и слаженной, поэтому американцы находились в состоянии перманентного удовлетворения при минимальных затратах.

Много веселого случилось за те три года, которые я там проработал. Мне довелось торговать десятичными знаками π оптом, мы брались за все задачи, которые перед нами вставали, писали на незнакомом ассемблере без документации, сами рисовали своей конторе неофициальный сайт и пили пиво декалитрами, не отрываясь от установки с дисков MSDN бета-версии первого InderDev’а.

Бывали и казусы. Однажды я чуть не выставил контору на среднегодовую зарплату инженера. Дело было так.

Все мало-мальски значимые процессы, занимавшиеся обработкой данных, запускались на мейнфрейме заказчика. Подключение по ssh, мучительный переход в нужный каталог на VAX/VMS, ed s.sh → hohup sh s.sh &. Обратная связь была среднего качества, коаксиал под Атлантикой не был эталоном надежности (вспоминается, как какие-то норвежские рабочие с буровой разворотили его к херам и потом три дня между половиной Европы и США интернета не было вовсе). В какой-то очередной раз мне потребовалось знать, что удаленный процесс не подох, не помню уж деталей, но оно могло упереться рогом в какой-то запрос и узомбиться, или типа того.

Я сделал спиннер. Руками. В 1997 году. На удаленном шелле. Если вы думаете, что это — тривиальная задача, что до такой идеи додумался бы и школьник (и воплотил за три минуты) — я вас ненавижу, не могу сейчас разговаривать, все, пока, бан. Это был прорыв! Гигантский шаг вперед для всего человечества. В общем, я придумал спиннер.

Имплементация была проста: внутри цикла я проходил по символам \ | / - и выводил в консольку «^H», затирая предыдущую позицию и выплевывая следующую. Оно крутилось! Как живое! Я запустил скрипт, откинулся на спинку стула и принялся созерцать эту идиллию.

Спустя примерно час пришел наш сисадмин. У него было такое лицо, что трое из пятерых, сидевших в комнате, ушли курить, причем среди них был и некурящий дизайнер.

Серж обвел взглядом комнату и каменным голосом, роняя слова, как двухпудовые гири в артезианскую скважину, спросил:
— Кто качает что?

Интернет, особенно межатлантический, в 1997 не был безлимитным. Он был, сука, очень хорошо лимитирован. За последний час мы выбрали двухнедельную норму нашего тарифа, что и узнал вышедший перекусить сисадмин сразу из трех источников: пейджер нашей системы («необычная активность»), пейджер нашего провайдера («гляньте там, а то у вас через пару часов карета отыквится») — и, конечно, пейджер нашего генерального с лаконичным («сержбля»). Серж примчался в офис так не попробовав десерт.

Увидев, что на всех мониторах — приветливые черно-зеленые консоли, никаких браузеров и прочих вгетов, Серж напрягся. Мы повыключали все, то только можно — но трафик не уменьшался. Мы знали, как дорого нам обходится чуть ли не каждый байтик — и без нужды ничего туда-сюда не гоняли. Наконец, остался запущенным только мой удаленный процесс — и тут меня осенило.

ssh — это не только ценный крипт. Каждый мой сраный символ оборачивался в полноценный пакет. Когда я прикидывал, что на примерно миллион операций я вышлю не более мегабайта — я просчитался минимум в 36 раз (hmac-sha1). И это бы было еще ничего, но между этими событиями случался хендшейк (согласно установленному при разборе полетов), потому что чертова Вакса как-то по-своему интерпретировала «^H».

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

Каждый раз, когда я потом в разговоре с шефом упоминал «удаленный процесс», он менялся в лице и чеканил:
— Только без спиннеров!


  ¦