|
|
||
В которой описывается как программисты ищут ошибки в оставленном им по наследству коде. Или в своем коде в который не заглядывал "долгие, долгие годы" |
"у программистов ночью появляются клыки
и шерсть с узорами из двоичного кода"
Сетевой фольклорз>
***
Утро. Далеко не любимое большинством программеров время. Впрочем, Волк к этому большинству не относится. Конечно, спать по 4 часа в сутки тяжеловато. Очень сложно вытащить себя из сна по утру. Но встреча с рассветом того стоит. Хотя бы летом. А если встречать рассвет пореже, то он вообще превращается в праздник. Волк любит утро, ведь утро это отличная возможность пробежаться по холодку до работы в реальном мире, частично сменив ипостась. Так чтоб насладиться волчьим бегом. Неплохая возможность почитать в метро, этом читальном зале современного мира. И просто взглянуть на остатки природы, не до конца еще выброшенные каменными джунглями за черту города. Ведь большую часть дня, пока альтерэго бродит в цифровом мире, тело остается сидеть на стуле в душном офисе.
Как и любому программисту, Волку нужен катализатор, для облегчения смены ипостаси в несвойственное ему время. Обычно таковым является кофеин, но о вкусах не спорят, и Волк предпочитает тиамин. Итак, полумрак девелоперской, куртка на стуле, кнопка power и полуведерная кружка чая.
Глоток. Вход в систему. Еще глоток. Взгляд на контакт-лист. Gremlin уже в сети, Viaty еще нет. Еще десяток имен... Вот они друзья. Маленькие искорки на просторах сети. Все на расстоянии клика, а в реальном мире между нами подчас сотни километров. Жаль, что зачастую Волку нечего им сказать, но то, что они здесь, рядом, уже согревает душу. С утра, конечно, можно сказать "Привет", снабдив его произвольным количеством смайлов, но это слово, повторенное тысячи раз, уже надоело, как дождь коренному петербуржцу. Что сказать сегодня? Пусть будет "Конитива!"
***
На кружку легла когтистая лапа. Мысли уже в программе - вспоминаешь, что делал вчера, на чем остановился, куда повернуть сегодня. Запуск компилятора. Грациозный волчий прыжок в монитор и понеслась. И вот ты уже мчишься над потоками данных, анализируя что и как срабатывает, нанося на умозрительную карту развилки и повороты. Сегодня Волку предстоит разгадать одну загадку: почему кнопка нажатая в одном месте приводит к срабатыванию в другом, совсем неожиданном, месте. Сам Волк о своей работе говорит обычно так: "Дрессирую АТС-ки и учу телефоны звонить". На самом-то деле он стал последним строителем и постоянным смотрителем, а по совместительству и единственным живым жителем, огромного кибергорода под названием "мини-АТС MXM500". Города, состоящего из сотен строений, и пронизанного множеством магистралей и потоков данных. Человек, нажимающий кнопку на своем телефоне, даже не подозревает об этом городе. Для него телефонный аппарат - это и есть телефонная связь. Хотя возможно он смутно представляет, что где-то есть то ли здание, то ли ящик, называемый АТС. И что этот ящик и соединяет его телефон с другими телефонами. А ведь не будь этого кибергорода, и все эти ящики-домики остались бы безжизненным хламом. Касание кнопки заставляет затрепетать и ожить весь город. Цифра проносится по пересохшим руслам каналов данных, будит электроинформациооных жителей кибергорода. Они анализируют, сравнивают, передают кому-нибудь другому, преображают информацию. Иногда кладут ее на полку, а иногда оставляют себе дубликат. Так, на всякий случай. А все что не поняли, предают дальше - авось там разберутся. А когда на полке у одного из жителей скопиться достаточно цифр - он поймет, какие шлюзы открыть, чтоб по магистрали потекла совсем непонятная жителям города информация - человеческая речь. Но вот что-то пошло не так. Представьте, что вы хотите включить телевизор, а включается пылесос. Вот и сейчас произошло что-то похожее. И Волку на правах смотрителя нужно разобраться и навести порядок.
С чего б начать? Для начала пробежимся за нажатой кнопкой вдоль русла нужного потока. Так. Вот здесь инфа о нажатии кнопки нырнула в АТС, здесь мы к ней присобачили идентификатор телефона... положили на конвейер... отправили анализатору... Ага. Вот. Вот здесь мы отрабатываем команду. И что нам для этого надобно? Две полноводные реки данных несли мимо Волка свои воды. Оборотень задумчиво глядел на искрящуюся поверхность каналов. В этом месте города ощущалась какая-то неправильность. Но вот в чем она? По идее эти две реки должны быть абсолютно синхронны. Одна течет по верхнему городу - здесь Волк себя чувствует как дома, здесь им возведено и отремонтировано не одно здание. Вторая же течет по катакомбам нижнего города, куда оборотень спускается нечасто. В этом нет необходимости: предыдущие смотрители тщательно выстроили и отремонтировали его. Ведь это фундамент всего города. И пусть он местами довольно архаичен, что вызывает определенные затруднения при строительстве верхнего города, но как фундамент довольно прочен. А чтобы оба города жили и работали как единое целое и нужны две синхронных реки данных, связывающих их. А синхронность рек заключается в следующем: если в одном месте первой реки, например в метре от левого берега, водится определенная рыбешка, то в соседней реке, также в метре от берега, будет водиться другая рыбешка, однозначно взаимосвязанная с первой. В первой реке водятся идентификаторы телефонов, во второй идентификаторы абонентов в соединении. И если найти нужный нам идентификатор телефона, то можно найти соответствующий ему идентификатор абонента в соседней речке, просто отмерив тоже расстояние. И отдать этому абоненту команду. Теоретически. На практике же команду исполняет совсем другой абонент. Похоже, где-то речки потеряли синхронность - в левой рыбка уплыла в сторону, а в правой осталась на месте. Или наоборот. Но где? Увы, эти речки устроены так, что вглубь к ним не заглянешь. И потому поймать нужный момент очень тяжело.
А ведь можно было бы запустить оба косяка в одну реку. И пусть бы рыбки из разных рек плавали парами. Тут уж все бы происходило синхронно. Сказано - сделано! Перекрываем пару кранов у истоков и смотрим кто где начинает вопить, что им воду перекрыли. А теперь берем лопату и копаем отсюда... и в бесконечность. Меняем здесь, здесь, тут... В общем везде, откуда эти речки вытекают, куда впадают, где мы в них запускаем рыбку, где вылавливаем...
Волк встряхнулся и вздыбил шерсть. В мерцании искуственного света девелоперской по шерсти пробежал переливаясь узор двоичного кода. - "Как-то тут прохладно..." - Когти продолжали размеренно шелестеть по клавишам...
Черт, а здесь мы преобразуем информацию в нечто третье и используем еще в десятке другом мест. Да тут полгорода перестроить придется! Гипотенуза... В смысле, не катит. Виртуальную лопату в руки - и вперед! Закапывать недокопанное. И как апофеоз бессмысленных телодвижений открываем перекрытые вентили.
Ну что ж, будем искать! Но, черт возьми, как?! Элементарно, Ватсон, элементарно. Пишем код. Нечто вроде фильтра пропускающего через себя обе реки данных, и инспектирующих их содержимое. Мда, неказистая вещица получилась: бетонный куб, явно ассоциирующийся со станцией очистки воды. Теперь такую ассенизаторскую нужно поставить на входе и выходе каждого здания, через которые протекают обе реки. Неказисто, ну да ладно - код временный - снесем, когда не нужны станут. Пока поставим в одном здании - там где мы наткнулись на ошибку. Одна проблема: собранную инфу невозможно проанализировать изнутри города. Ну что ж, разожжем на крыше ассенизаторских сигнальные огни, и покидаем город. Уходим в большой мир. Ну как большой? Всяк побольше офисной телефонной станции. Если АТС - это город, то персональный компьютер тогда целый мир!
Дом, милый дом! Рабочий стол. Милый, домашний и уютный. Правда как и любое другое пристанище холостяка слегка захламленный. Давно собирался навести тут порядок. Ну да ладно, не досуг. Оборотень запустил дешифратор дымов, повозился минут двадцать, настраивая его на новые дымовые сигналы, и свернулся калачиком наблюдать результат. А результат озадачивал: по всему выходило что реки данных синхронны. Так в чем же дело? Волк озадачено почесал голову. Черт, как же глупо выглядит этот жест в данной ипостаси. Особенно учитывая, что сделал он это задней лапой. Чисто автоматически. Будто блох за ухом гоняешь. Естественно никакой озадаченности морде-лица данный жест не придал.
Волк встал, потянулся и вновь нырнул в суету своего электронного города. Вновь набережная двух каналов, вновь озадаченный оборотень глядит на воду. Его внимание привлекают механизмы, напоминающие колодезный журавль. С их помощью данные достаются из рек. Но, черт возьми, они разные! Похожи, но разные. Как отличается чайная ложка от столовой, или вилка для рыбы от обычной. Вроде бы всё столовые приборы, и все они предназначены для еды. Но у каждого свое назначение. Так и тут. На "аистах" есть шкала, но из-за разной конструкции это все равно, что на одном шкала в дюймах, а на другом в сантиметрах. Вот и выдергиваются разные рыбешки. Заменим второй механизм подобием первого, проверяем, и, "Вуаля! Я сварил пельмени в борще!..."
***
Двоичный код на шерсти стремительно тускнел, морда укорачивалась - оборотень покидал цифровой мир, чтоб не далее чем в полночь вновь окунуться в него, и снова заскользить по лабиринту киберспейса. Но не сейчас. Сейчас он окунется совсем в другой, чуждый ему мир - мир людей. И будет таким же как окружающие: серым и незаметным. Впрочем, нет - он слишком необычен, чтоб слиться с толпой. И это лишь отпугивает окружающих, выстраивая дополнительную стену в цитадели одиночества. Волк провел уже совсем человеческой рукой по гриве темных, с волчьей проседью, волос. У него осталось еще одно важное дело - пожелать удачи другу, остающемуся на другом конце всемирной паутины. Другу, который сейчас видимо строит очередной микромир этой бесконечной кибервселенной. Удачи, Viaty!
|
Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души"
М.Николаев "Вторжение на Землю"