Читаем Клиент и саппорт. Разработчик и заказчик. Программист и программа. Вести с фронтов. полностью

Приехал. Включаю. Наметанный взгляд замечает кратковременное включение всех трех индикаторов на клавиатуре. Система не грузится, монитор пустой. Краткое нажатие на Power выключает компьютер. Подключаю монитор с соседнего места - работает! Но система почему-то грузится из сети, а не с винта. Порядок загрузки верный.

Разгадка оказалась проста - объем HDD определился как 0 МБ. Какова вероятность того, что во всем отделении, где около 30 рабочих мест, в одно и то же время умрут винт (SATA, более-менее устойчивый к слабым скачкам напряжения) и монитор, оба стоящие на одном рабочем месте?…

Наука мне на будущее - всегда предполагать, что одновременно могут случиться две совсем не зависящие друг от друга гадости.

#1381: Потоковый эксплойт

12:00 28.10.2009, IT happens

Обучаясь на первом курсе, попал я на зачете по программированию к преподавателю нестрогому, но весьма вольно понимающему задания из листка «к зачету». В итоге моя программа была забракована, хотя и работала правильно, и соответствовала заданию. После этого мне было выдано новое задание: написать прогу, складывающую две вводимые строки в одну без использования кошерных функций.

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

cin» SumString;

cout «"Сумма строк: " «SumString;

На экране же это выглядело так:

» Это полов «Enter»

» ина строки «Enter»

» Сумма строк: Это половина строки

» Press any key to continue…

Пока препод в ведомости не расписался, нажимать на Any Key я не давал.

#1382: Опилки пяти микрофарад

14:00 28.10.2009, IT happens

Работал как-то с отцом - надо было автоматизировать научную установку. Захожу к нему и вижу жуткую картину: на разобранном компе он усердно елозит напильником по плате сопряжения с установкой.

В легком офигении спрашиваю:

- Пап, ты что вообще делаешь?

- Там конденсатор я один впаял, у него характеристики близкие, но мне надо меньше - я его объем уменьшаю, пока не получится то, что надо.

И что вы думаете? Получил он нужную характеристику с заданной точностью, маминым маникюрным лаком капнул на место спила - все заработало. Представляю, сколько возни было бы в западной лаборатории - я с ними работал, насмотрелся.

Горжусь отцом! Старая гвардия не сдается.

#1383: Счастливой отладки!

12:00 29.10.2009, IT happens

Однажды мне довелось «подхватывать» проект на C++, оставшийся от одного программиста, уволенного несправедливо (по его личному мнению). Впрочем, проект был почти завершен, и мне оставалось лишь немного дописать интерфейс, провести тестирование, отладку и сдать все заказчику.

Как обычно, сроки поджимают, а я все никак не могу разделаться с «ловлей блох»: приложение то работает нормально, то вдруг начинает глючить и вылетать на ровном месте. Как выяснилось, периодически возникало std::exception, но отследить, откуда оно бралось, у меня никак не получалось: казалось, что таинственная ошибка присутствует буквально всюду, при этом появляясь далеко не при каждом запуске.

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

Дома первым делом в надежде на чудо запускаю экзешник - вылетает, сволочь. Ладно, запускаю полную компиляцию и иду чистить картошку. Возвращаюсь - ошибка!

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

#include «cfdc.h»

Гугление результата не дает; просто комментирую эту строку и компилирую заново - успешно! Запускаю - программа работает как часы.

Придя в понедельник на работу, первым делом я решил глянуть, что же это за таинственная библиотека. Код ее оказался настолько же лаконичным, насколько садистским:

#ifndef CFDC_H

#define CFDC_H

#include «cstdlib»

#include «exceptio.h»

#define return if (std::random(1000) «2) throw std::exception(); else return

//Счастливой отладки!

#endif

Надо ли говорить, что наш проект использовал в одном незначительном месте стандартный генератор случайных чисел, а вызываемый при инициализации std::randomize() успешно заметал любые следы?…

#1384: Укротитель сверхзвуковых грызунов

12:00 29.10.2009, IT happens

Перейти на страницу:

Похожие книги