Дмитрий Лазарев, Кирилл Малеев
Сверлящие
Денис корпел над сайтом интернет-магазина сантехники, когда впервые услышал этот звук.
Сначала он походил на шуршание жука в картонной коробке, но быстро набрал силу, превратившись в дребезжащий визг. Кто-то из соседей целеустремленно вгрызался в стену с помощью дрели или перфоратора.
Денис поморщился. Только этого не хватало – на часах начало девятого, у него горит важный заказ, а соседи затеяли ремонт. Ни раньше, ни позже!
Обычно он работал под музыку, если нужно было интегрировать шаблон сайта, дорабатывать публичные страницы или программировать какой-нибудь простой скрипт, но сегодня судьба подкинула ему подарочек в виде неочевидного бага в чужом коде, из-за которого у клиента в самый разгар рекламной кампании намертво падал сайт. Все это означало, что работа была сверхсрочная, сложная и требующая крайней сосредоточенности.
Квартира, которую арендовал Денис, находилась в недавно сданном доме-муравейнике на окраине Питера. Этажи, словно пчелиные соты, состояли из крошечных студий, отчего шум ремонта в квартирах у въезжающих жильцов постоянно тревожил соседей – особенно в первые месяцы. Постепенно все расселились, обустроились и перестали буравить дыры в стенах, однако то и дело тому или иному требовалось повесить новую полку, картину или телевизор, и тогда в дело шел перфоратор. Звуки отлично разносились по зданию, без труда проникая сквозь тонкие бетонные перекрытия и хилую шумоизоляцию. Обычно Денис относился к этому с пониманием, но именно сейчас он предпочел бы посидеть в тишине. И надо же так совпасть, что как раз сегодня среди полутора тысяч квартир посверлить задумали именно его соседи. Закон подлости, не иначе!
Незримая дрель за стеной продолжала надрываться. Денис уткнулся в монитор, изо всех сил пытаясь сосредоточиться на задаче.
Сайт, симпатичный на первый взгляд, под капотом представлял собой помойку. Предыдущий разработчик, явно не самого высокого класса (а может, фатально ленивый), оставил после себя мешанину спагетти-кода, сваленные в кучу куски пхп-скриптов, разметки и стилей, а также несколько серьезных уязвимостей. Вместо привычного апи для обращения к базе Денис обнаружил самописные функции, в которых зияли такие дыры, что он буквально схватился за голову. Системы контроля версий не было и в помине.
Строчки с кодом, синтаксически подсвеченные средой разработки, начинали сливаться перед глазами. Он работал уже четвертый час, полностью переписав за это время запрос, из-за которого переполнялась память и падал сервер, однако с функционалом акции, по которой посетители сайта покупали наборы товаров со скидкой, до сих пор оставались проблемы. Денис в который раз запускал скрипт покупки, внимательно отсматривая данные в отладчике, но жужжание дрели за стеной здорово отвлекало.
Прошло полчаса. Он сделал перерыв на кофе в надежде, что соседский ремонт скоро завершится, но этого не случилось – напротив, шум только усилился. Отвратительное «вррррррврррррржжж», повторяющееся с небольшими перерывами, действовало на нервы. Кажется, за стеной жила молодая пара – пару раз Денис сталкивался с ними в лифте, но лиц не помнил. Помянув соседей недобрым словом, он вновь сел за компьютер.
Обеспокоенный заказчик бомбил в мессенджер: свежеоплаченная реклама, по его мнению, гнала покупателей на сайт косяками, будто рыбу на нерест, и разобраться с проблемой требовалось незамедлительно. Атакуемый пуш-уведомлениями, очередью всплывающими в углу экрана, с одной стороны, и ревом перфоратора – с другой, Денис почувствовал, что звереет. Заткнув уши пальцами, он бормотал себе под нос, проговаривая выданную отладчиком информацию, – трюк, раньше помогавший ему готовиться к экзаменам.
Визг дрели продолжал ввинчиваться в мозг. Денис злобно посмотрел на часы – время подходило к десяти. Еще немного, и он сможет на законном основании потребовать тишины. Какого хрена они там копаются? Этой пары часов с лихвой хватило бы, чтобы просверлить стену насквозь.
Поднявшись, он приложил ухо к стене в надежде разобрать, что происходит по ту сторону. В этот момент перфоратор умолк. Выждав несколько секунд, он вернулся за компьютер. Тишина стояла оглушительная.
Облегченно вздохнув, Денис вновь занялся отладкой и почти сразу наткнулся на ошибку. Сравнение переменных в условии оказалось без приведения к одному типу! Банальность, неуловимый характер которой мог объяснить лишь замыленный взгляд. Он быстро исправил код, и скидка наконец оформилась.