Найти тему
Валентин Иванов

Охота к перемене мест. Часть 21

Через неделю Питер принёс мне компоненту TGlobe, которая позволяет работать с картами, и объяснил суть задачи. Вначале, при запуске программы пользователь видит на экране изображение земного шара, который можно вращать, нажимая клавиши стрелок или потянув влево-вправо мышью. Щёлкнув мышкой в выбранной точке, получаешь увеличенное изображение. При последовательных щелчках видишь, как появляются сначала континенты, потом страны, затем регионы и города. Начиная с определенного масштаба на карте местности появляются «линии». Реально сейсмические данные получаются следующим образом. В точке с заданными координатами в почве заглубляется заряд, а на заданной геологами линии размещаются датчики, которые будут принимать сигналы, отраженные от внутренних слоёв земли при дистанционном подрыве заряда. Каждый из датчиков записывает свою сейсмограмму на магнитную ленту. Линия получает свой номер, например, TX18456LS, который заносится в единый каталог сейсмических данных, а каждая сейсмограмма получает номер, который добавляется в конце к номеру линии.

Щёлкнув мышкой на выбранной линии на карте местности, пользователь вызывает последовательность достаточно сложных действий. Дело в том, что у пользователя может быть достаточно слабый «полевой» компьютер, который связывается по интернету с мощными серверами, хранящими базы данных сейсморазведки. По этому запросу серверная часть программы извлекает из базы данные, относящиеся к данной линии, то есть все сейсмограммы выбранной линии, и начинает их обработку. Одна сейсмограмма содержит десятки или сотни мегабайт данных, а все сейсмограммы линии имеют обьём, исчисляемый гигабайтами, но все эти гигабайты не нужны сразу и одновременно. Каждая точка сейсмограммы соответствует амплитуде и фазе волны, отраженной от слоя определённой глубины залегания. На экран нужно подать только часть сейсмограммы, отвечающую выбранной глубине просмотра, скажем, слоя глубиной в километр. При этом графический экран заполняется «змейками» от всех сейсмограмм данной линии, расположенными на некотором расстоянии друг от друга, чтобы их можно было разглядеть в нужном масштабе. Крутя колёсико мыши, мы видим подобие некоторого плавного перемещения вглубь или наоборот наверх. Для обеспечения этой кажущейся плавности серверный компьютер непрерывно подкачивает из базы данных новые и новые порции данных, сжимает их, превращая плавную линию в набор так называемых Фурье-гармоник. При этом объем передаваемых с сервера данных уменьшается более чем на порядок. Компьютер клиента принимает «пачку гармоник», делает обратное преобразование, распаковывая данные и выводит их в графическом виде на экран. Такой режим работы позволяет манипулировать огромными числовыми массивами на мощной серверной машине, а «слабая» машина клиента перерабатывает зараз лишь относительно малую пачку данных, то есть работает, по-существу, как интеллектуальный графический монитор.

Распределение обязанностей в проекте «Сейсмика» было следующим: Прамод – общее руководство, Мурад пишет серверную часть, активно используя специальный язык общения с базами данных SQL, в обиходе называемый «сиквел», а на меня возложено написание алгоритма управления (выбор параметров диалога, переключение режимов графических работ итд.), математическая обработка (прямое и обратное Фурье-преобразование данных) и самое сложное – весь графический вывод, включая операции с «Глобусом» и вывод графиков сейсмограмм. Время от времени, Сергей генерировал какие-то идеи, позволяющие оптимизировать обработку данных и, тем самым, ускорить работу программы.

Дни шли за днями, из них складывались месяцы, и на глазах постепенно складывался контур будущей программы. Каждый день я ездил через весь Сан Франциско с его немыслимыми транспортными потоками, научился лихо водить машину по местным крутым горкам, знал на память все светофоры на перекрёстках и вовремя менял полосы движения, поскольку запомнил, в каком месте и на какой полосе есть выбоины и ямы на дороге, чтобы беречь шины и не снижать скорости в опасных местах. Бог миловал – начав накапливать свой водительский опыт с нуля, я ни разу не попал в аварию. Лишь однажды какой-то пьяный водитель или под наркотиками начал обгон перед туннелем и «ошкурил мне» левый бок. Я догнал его на светофоре, сигналил ему остановиться, но он нажал на все газы и скрылся, нарушая все правила движения почти в центре города. Я успел записать его номер, сообщил в страховую компанию, и мне бесплатно отлакировали поцарапанное место. Практически каждый день по пути на работу я видел на обочинах хайвеев раздолбанные и перевёрнутые машины. А всё дело в том, что я тогда не лихачил, ездил быстро, но аккуратно. Лихачить я начал года через два, но к тому времени на счётчике были намотаны десятки тысяч миль, и я приобрёл реальный опыт вождения.

Уже через месяц после начала проекта у нас сменился менеджер. Питер уехал куда-то на Гаваи, а на его место пришёл высокий, стройный и красивый Джим Нильсен – рубаха-парень, многократный чемпион по гольфу, отслуживший в армии. У всех с ним установились очень комфортные деловые отношения. Компанией владел мистер Карлос Коллазо, родители которого слиняли с Кубы, когда там воцарился Фидель Кастро. Мы его заглаза звали «папа Карло», поскольку он был любвиобилен и чадолюбив, а детишек у него было что-то около десятка. Время от времени он устраивал «пати» (корпоративные пирушки) на природе с шашлыками и выпивкой за счёт заведения. Кроме зарплаты, нам выплачивали «бонусы» (денежные премии), а раз в году, обычно под Рождество пьянка заказывалась в небоскрёбе «Пирамида» в центре Сан-Франциско на восемьдесят втором этаже. Приходить полагалось с супругами и подругами – это способстовало сплочению внутри коллектива и установлению правильных отношений с важными клиентами. Перед этим нам каждый раз давали инструктаж: не болтать лишнего, держать язык за зубами. Мурад, в отличие от меня, тратил немало времени на совершенствование своего английского, и его уровень коммуникаций был явно выше моего. Мне было достаточно того, что меня понимали, и я понимал почти всё, если со мной говорили не слишком быстро и внятно – без китайско-мексиканского акцента. На одной из таких «накачек» Мурад сказал: «Да вы не волнуйтесь, мы сделаем вид, что плохо понимаем по-английски», на что Джим махнул на него рукой и под хохот остальных бросил: «А вам и не нужно делать вид».

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

– А это – мои ударные силы, русские программисты. Все они, конечно, шпионы и мафиози, но работники толковые.

Они довольные заржали, мы тоже вежливо поддержали начальственный юмор.

Жена отлучилась на время в туалет, потом отвела меня в сторону и с жаром начала рассказывать об увиденных ею чудесах:

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

По окончании вечеринки она снова посетила туалет. Та же самая дама сидела в уголке на своём маленьком стульчике. Она и глазом не моргнула, когда вошла клиентка, продолжая курить сигарету. Моя руки, жена удивлённо взглянуда на неё, не понимая, чем можно объяснить так резко изменившееся поведение служительницы.

– Мой рабочий день закончился, – флегматично объяснила та.

Наш обычный рабочий день выглядел следующим образом. Приходим на работу к девяти, завариваем кофеёк, обсуждаем новости. Потом работаем до 12:30 и идём на ланч. Перед уходом сдаём текущую версию проекта тестировщикам и сохраняем её в репозитории. После обеда можно почитать интернет или изучать что-либо из новых технологий программирования в ожидании ответа от тестеров. Как правило, после трёх они вываливают нам список замечаний, который может доходить до четырёх-пяти страниц. Большая часть этих замечаний касается внешнего вида дизайна или мелких опечаток, которые исправляются махом, но попадаются и такие, над которыми нужно долго думать и потом многое переделывать в коде. Чаще всего, такие замечания касаются полного контроля правильности входных данных и надёжности работы программы. Над этим, в принципе, можно работать всю жизнь.

Однажды к нам зашёл менеджер по продажам Ник Ларсен, молодой и весьма амбициозный парень – типичный американец. Он был бледен, и заплетающимся языком сообщил:

– Ребята, меня только что уволили.

Мы все сгрудились вокруг него и стали участливо расспрашивать, в чём дело?

– Ни малейшего представления.

Мы ещё немного поохали, и он исчез, а мы все стали гадать о причинах столь быстрых перемен в судьбе.

– Я думаю, – сказал более опытный Сергей, – тут одно из двух, или обе причины сразу. Во-первых, он часто разлагольствовал, что бизнес в нашей фирме ведётся неправильно, нужно делать всё не так, и сам он знает, как именно. Если эти разговоры услышал Папа Карло или они дошли до его слуха – это уже вполне достаточный повод для увольнения, поскольку он таким образом критикует работодателя, а в Америке это недопустимо. Во-вторых, у него довольно оригинальная странность. Он хвастается, что у него нет автомашины, потому что живёт он недалеко от фирмы, и всегда может приехать на велосипеде или даже на скейтборде. Я сам не раз видел его входяшим в фирму со скейтбордом подмышкой. Папа Карло даже как-то отчитал его, сказав:

– Вы не мальчишка, Вы работаете в серьёзной фирме на серьёзной должности. Если кто-то из наших ценных клиентов или даже потенциальных клиентов увидит Вас в таком мальчишеском виде, наши заказы могут упасть, а с ними упадёт и реноме всей фирмы. И потом, после гонок на этой доске или велосипеде, запах Вашего пота может отпугнуть клиентов, ведь на фирме нет специального душа для Вас.

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

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

Месяца за два до назначенного срока сдачи проекта, программа была практически готова, хорошо оттестирована, и мы работали, в основном, над «ловлей блох», улучшая и полируя то, что, на наш взгляд, и так неплохо работало. В этот момент Джим потребовал добавить в «блокнот» новую страницу с массой вспомогательных параметров, которая в зависимости от режима работы могла быть то видимой, то скрытой. Казалось бы, чисто техническая возня, но она потребовала довольно значительных переделок, потому что листание «блокнота» проходило путём последовательного перебора страниц, которые, как и в настоящем блокноте, связаны свойством соседства. Скажем, страницы в вашем блокноте пронумерованы, это значит, что пятой странице предшествует четвёртая, а следом за пятой идёт шестая. Если же вы вырвали из блокнота (спрятали) пятую, то все свойства соседства изменились, изменилась нумерация, и теперь вы с трудом вспоминаете, на какой странице нужная вам информация. Чтобы упростить эту проблему, я свойства соседства запоминал в отдельном конфигурационном файле, который до этих нововведений был статическим, то есть никогда не менялся, за исключением случая, когда впервые инсталлируется программа. Мы с Мурадом всё оттестировали. Тестеры проверили нашу работу, не нашли ничего подозрительного, и мы положили эту версию на сервер. После обеда всех программистов требует в свой кабинет Джим. Он напоминает быка, разъярённого пикадорами. В таком состоянии мы наблюдаем его впервые.

– Когда я служил в армии, – ничего хорошего не сулящим нам голосом говорит Джим, – сержант учил нас-молокососов: «Дерьмо катится с холма вниз!». Что это означает для вас? Если мистер Коллазо будет вставлять мне клизму за срыв сроков, то по «закону дерьма» я вставлю каждому из вас по двойной клизме. Ещё вчера проект работал нормально, сегодня он ломается уже при запуске и вместо глобуса показывает на экране форменную «жопу». Как вы это объясните?

Все молчали. Мы ничего не понимали, потому что на компьютерах любого из нас еще час тому назад всё работало нормально – за это поручиться мог каждый. На самом деле, все эти громы и молнии адресовались, главным образом, нам с Мурадом, потому что писали код мы, мы же и вносили и последние исправления. Прамод отвечал лишь за организацию работы, Сергей был просто консультантом, а остальные занимались другими делами. Зловещая пауза уже превысила все допустимые сроки, как вдруг у меня мелькнула мысль:

– Джим, не кипятись. Давай разберёмся. Ты скопировал себе всю последнюю версию?

– Что значит «всю»? Что ты имеешь ввиду?

– Я имею ввиду и новый конфигурационный файл?

– Зачем? Он же никогда не менялся.

– Скопируйте его, сэр, и запустите прямо сейчас.

Через двадцать секунд выражение на лице Джима меняется на удивлённое, потом на радостное. Всё работает, как часы. Мы все облегчённо вздохнули – всеразрушающее торнадо на этот раз прошло мимо, но мы почувствовали его опаляющее дыхание на своих незащищённых затылках. Тогда я брякнул:

– Может быть, мне и не следовало бы высказывать своё мнение, но делать столь значительные исправление в хорошо отлаженном проекте незадолго до его сдачи не является хорошим стилем.

Все отвели взгляды в сторону. Я грубо нарушил этикет, сделав замечание менеджеру. За это могли и с работы выгнать запросто. Конечно, не прямо сейчас, когда от меня зависит многое, а, скажем, сразу после сдачи. Но мне было наплевать: они все «эйчванщики» (имеют рабочую визу H1), то есть по сути – рабы, а у меня вид на жительство, и такую работу я могу теперь легко найти в десятках фирм.