7780
Доводили до ума и запускали простенькую систему электронных заказов, стыкующую веб-сайт и 1С. Скрипт на сайте при формировании заказа создавал письмо, которое ловил и обрабатывал скрипт в 1С, создавая соответствующий документ. При тестировании выяснилось, что внешне идентичные автоматическим, но созданные вручную письма скрипт категорически отказывается рассматривать.
Автор скриптов оперативно доступен не был, поэтому начали копать. Дело дошло до пошаговой отладки и попытки понять, почему две строки «Заказ» и «Зaказ» (проверялся заголовок письма, дабы не реагировать на спам) система считает различными.
Выяснили только при побайтном сравнении. В формируемой скриптом строке одна из букв «а» была латинской — по задумке автора скрипта это должно было отсечь спам, в заголовке которого могло случайно оказаться это слово. А ведь не надо было выпендриваться и писать заголовок тестового письма вручную — достаточно было скопировать…
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 и открывать заново, чтобы получить данные. Конечно, накладно, зато старший получил премию за успешно сданный проект в срок.