7770
С недавних пор на стенде, где наше отделение фирмы хранит почётные регалии и дипломы, появилась скульптура в стиле киберпанк-модерн, названная «Памятник багу». Скульптура состоит из половины системника с материнкой, в которую до середины вбиты канцелярские ножницы. Ножницы вогнаны в бедную плату с такой силой, что их концы пробили тонкий корпус системника и вышли с другой стороны.
На открытии этой скульптуры шеф пояснил, что композиция прислана нам анонимным доброжелателем, который обнаружил баг в нашем коде. Этот баг уничтожил все труды пользователя за день, доброжелатель не успел сдать свою работу, и его организация заплатила своему заказчику один миллион долларов неустойки.
Разумеется, EULA прикрывает нас со всех сторон, и организация не имеет к нашей фирме никаких претензий. Но так уж получилось, что организация эта оказывает некоторые услуги нашему отделению, и в её распоряжении есть личные данные каждого из работников. «Поэтому они вежливо просят нас: не могли бы мы, пожалуйста, уделять больше сил тестированию?» — промурлыкал шеф, поглаживая рукоять ножниц.
Качество продукта мгновенно возросло.
7769
Лет десять назад программеры из космической отрасли смотрели в сторону OpenGL для быстрого вывода на экран тридцати индикаторов-столбиков. Выслал им пример, как для этого юзать API винды. Тогда у них ничего не отказывало.
Сейчас же, видать, в Росавиакосмос пришло более «продвинутое» поколение. Больше не спрашивают — тренируются на запусках ракет.
7764
На горячей передовой компьютерных технологий в конце девяностых была BeOS. Операционка была шикарная, работала быстро, выглядела на то время весьма стильно. С точки зрения начинающего программиста её API был гимном простоты, красоты и разумности, в отличие от виндового, с которым мне впоследствии пришлось столкнуться.
Вместе с операционкой поставлялась книга документации этого самого гениального API в HTML-формате — так называемая BeBook. Книга была подробна, грамотно спроектирована, неплохо оформлена и пестрела интересными примерами кода. Вдруг выяснилось, что примеры, приведённые в книге, временами не то что падают с ошибками, но даже и не компилируются. Компилятор ругается на что-то, чего в исходном коде просто нет! Ещё веселее становится, если набрать этот же самый пример вручную: он без проблем компилируется и запускается.
Вдумчивое курение всего, что только можно, подсказало, где собака порылась. BeOS изначально работала в кодировке UTF-8, и в этой же кодировке была написана вся документация. Но поставляющиеся с BeOS шрифты не содержали абсолютно всех прописанных в UTF-8 символов. Так вот, там и сям в BeBook попадались эти самые UTF-символы, которые ничем не отображались, поэтому с точки зрения пользователя в любом вьюере или текстовом редакторе выглядели пустым местом. Но значения-то своего они при этом не теряли! Компилятор, неожиданно натыкаясь на непонятную пакость, считающую себя символом, естественно, начинал безбожно ругаться.
Некомпилирующиеся примеры из официального руководства программиста я никогда не забуду.
7762
Зимняя сессия на заочном факультете. Пара по алгоритмам программирования. Препод ушла на совещание, оставив меня за старшего.
Пишем прогу на Object Pascal в среде Delphi 7. Одногруппник подзывает меня со словами, что у него не работает прога. Мол, по-английски не шпрехаю, глянь сам.
begin
var i, z:integer;
begin
forI:=0to5do
forJ:=0to5do
begin
z:=z+SrnToLnr(StreengGrid1.Ceiis[I,J]),
end;
end.
end;
У меня глаз чуть не выпал от такого «кода».
7760
Готовлю серверную начинку для сайта, размещённого на маломощном виртуальном хосте. Обычно пишу на Java, но в данном случае конфигурация слабовата для поддержки сервлетов, и я решил написать нечто достаточное для начала тестирования в формате CGI. Простота написания скриптов порадовала, но время было уже позднее.
Лежу я в полудрёме и думаю: «Скрипты — это здорово. Кода мало, компилировать не надо, тестятся прекрасно. Но вот хлынут посетители на сайт — и что тогда? Сервлеты-то постоянно в память загружены и мгновенно обслуживают запросы, а скрипт — его же каждый раз с жёсткого диска загрузить надо, да сопутствующие утилиты и библиотеки, да всякие прочие накладные расходы…»
Тут в засыпающее сознание поступает вполне конкретный физиологический позыв. Но кодинг не отпускает: «Вот взять хотя бы посещение туалета по малой нужде. Если ты встал с кровати, прогулялся до белого друга, выполнил все прочие формальности — это CGI. Батюшки, это сколько же накладных расходов! А вот сервлет — это другое дело. Его можно сравнить с ситуацией, когда ты, скажем, в памперсе или в скафандре, как космонавт. Поступил сигнал — сразу пошёл ответный процесс… Не-е-ет!»
В общем, бежал быстро и успел реализовать позыв в формате CGI. Может, оно и сурово, и с некоторой задержкой во времени, зато надёжно и гигиенично.
7758
У нас в банке шесть лет назад начальник отдела программирования выставил для проверки на пустую дату в платёжных документах 11 ноября 1911 года… Скотина.
А какая-то сволочь, не разобравшись в камментах, три года назад обновила программу и убрала проверку на пустую дату по веку, оставив только по году… Падла.
Вчера у нас был ад и холокост. У тысяч клиентов, решивших отправить платёжки через банк-клиент, программа выдала fatal error и завершилась, а платёж подвис в воздухе. С самого утра телефоны разрывались. Я-то не программист, но я сижу с этими скотами в одной комнате! Так вот, одна из этих сволочей по-быстрому накатала патчик, но не проверила его и воткнула в автообновление для всех клиентов. Патчик при установке вешал программу-сетапер. Начали звонить ещё и те, кто платежей не производил, но решил обновить программу.
Мозг кипит от звонков, начальство периодически заходит и орёт на всех, не разбираясь, программисты или сисопы. В коридоре — толпа клиентов, жаждущих крови. По телефонам уже звонят в соседние отделы, просят принести трубку сюда и ударить ею в голову.
Трижды одиннадцатого трижды проклятые три программиста с интервалом в три года попортили нам тройное количество нервов, а обед задержали на три часа. Кое-кто лишится премии и, возможно, пройдёт сеанс терморектального криптоанализа. Проверяйте свой код, товарищи.
7756
Будни российской софт-компании.
— Ты не поверишь! Нам тут предлагают свой код тестить.
— Не, ты что! Это же инцест получится!
— Ну… Смотря как воспринимать свой код: как своё детище или как продолжение себя. Если как продолжение себя, то вообще онанизм выходит.
7747
Из спецификации на выполнение задания:
If user cannot be registered for some weird reasons, we need to redirect him somewhere or show him something…
7730
Работаю программистом во всем известной фирме. Заходит как-то паренёк из поддержки и говорит: мол, так и так, вот номер бага, хоть убей, но клиенты жалуются. Я его пытался вразумить, что это всё железо, а код работает, но он настоял.
Завёл код для кнопки «Обновление данных». Всё правильно, но новые данные коду достать не получится: они подаются оттуда, куда коду нельзя соваться. Позвал старшего разработчика. Говорю, нужно менять архитектуру программы, чтобы получать обновлённые данные. Старший долго молчал и смотрел стеклянными глазами в монитор, думая о своём. Минут через пять он вернулся в наш мир и молвил: «Через неделю у нас сдача новой версии, а тут работы на месяц… Но если нету кнопки, то нету и проблемы».
Теперь все, кто пользуются нашей программой, должны закрывать GUI и открывать заново, чтобы получить данные. Конечно, накладно, зато старший получил премию за успешно сданный проект в срок.
7704
На школьной олимпиаде по информатике в 1997 году, учась тогда в одиннадцатом классе, я решал задачу по вычислению площади полумесяца. Были даны координаты центров и радиусы двух частично пересекающихся окружностей; нужно было найти площадь фигуры, образованной вычитанием одного круга из другого. Сейчас-то я понимаю, что задача решается аналитически за десять минут через интегралы, но тогда интегралов я не знал. Поэтому прога на QBasic рисовала обе окружности на экране, заливала нужную область жёлтым цветом и тупо считала количество жёлтых пикселей.
Занял первое место. Особо хвалили не только за правильное решение, но и за красочную иллюстрацию.