Индикатор прогресса
Friday, 20 Oct 2023
Более двадцати лет назад мне довелось работать в средних размеров аутсорсной компании в Ленинграде. Нам нравилось именоваться «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
».
Вторую часть этого процесса мы дожидались без спиннера, но со скрещенными пальцами. И еще пару недель тряслись над каждым сетевым байтом, потому что сверхлимитная связь была не просто очень дорогой, а баснословной за гранью разумного.
Каждый раз, когда я потом в разговоре с шефом упоминал «удаленный процесс», он менялся в лице и чеканил:
— Только без спиннеров!