Приходит как-то описание критической ошибки: пользователь пытается открыть документ (внутри программы), а вместо этого намертво падает SQL-сервер целой налоговой инспекции. Протестировал всё — ошибки не обнаружил, а потому попросил выслать мне бэкап базы данных пользователя. Просматривая базу, наткнулся на несколько замечательных строк в таблице «Причины списания бланков и акцизных марок»:
съели мыши и крысы
залили чернилами и хлоркой
проверка!
причина неизвестна (а я все знаю!) неправда
достали очень-очень
потешились и хватит
продали налево
куда-то делись
Потом я нашёл ошибку в базе — некорректное число в одном из системных полей. Как выяснилось позже, это одна добрая девочка-инспектор решила «списать из накладной партию в десять тысяч акцизных марок», но не смогла пройти через три уровня защиты от дурака и полезла в базу данных руками. Мораль: прокачанный пользователь бывает хуже ламера.
* * *
Писали как-то раз с коллегами план работ на месяц (шеф болеет гриппом, его нет). Одним словом, «Запорожские казаки пишут письмо турецкому султану». Взяли написанный шефом план на прошлый месяц и стали его переделывать. Под возгласы типа «Фигасе! А это тут ещё откуда?», «А что означает эта хрень?» и «Вау, да мы уже на месяц со сроками опоздали…» и дружный ржач всей команды рождался официальный документ, который определял нашу (и не только) зарплату на ближайшие два месяца. Мораль: программисты должны только кодить.
* * *
Пришло описание проблемы: медленно строятся отчёты. Формирование отчёта идёт в два этапа: построение отчёта в программе и рендеринг в Crystal Reports (длится в шесть раз дольше построения — специально замерял). Постановка задачи: «Отчёт по акцизным маркам по ХХХ области за год должен выводиться в течение не более 15 минут!» Объём файла отчёта — около 12 МБ. Тестируем похожий отчёт (81 МБ) на P4-3000, 1 ГБ DDR, результат — за 15 минут построилось (ещё только построилось — не рендерилось!) чуть больше 10% отчёта. Я в шоке. Спрашиваю: а что у них за суперкомпьютеры, если они хотят вывести отчёт за 15 минут? Шеф в ответ протягивает бумажку, на которой ровным почерком выведено: «Сeleron-600 / 128MB PC100 / …» Мне просто интересно, как у них ещё WinXP SP2 работает на таких машинах. По мне, уместнее было бы ставить задачу вывода отчёта хотя бы за две недели, но никак не за 15 минут. Мораль: своевременный апгрейд — залог спокойного сна программиста.
#9085: Я кулхацкер или где?
13:00 29.04.2012, IT happens
Пришло описание проблемы от заказчика: «При регистрации заявления о возврате бланков, у которых длина серии 3 знака, появляется ошибка, приведенная в приложении 1». Чтобы исправить проблему в коде, решил повторить ситуацию и проверить, откуда растут ноги у этой ошибки.
Попытался в программе оприходовать бланки с серией в три символа — нельзя, поле ввода серии рассчитано на два. Я кулхацкер или где? Оприходовал бланк с серией «ЫЫ», после чего руками в базе данных поменял значение на «ЫЫЫ».
Попытался в программе реализовать данный бланк — нельзя, бланки с ошибочной серией даже не отображаются в списках выбора. Я кулхацкер или где? Поменял серию бланка назад на «ЫЫ», реализовал, после чего снова руками в базе данных поменял серию на «ЫЫЫ».
Попытался в программе зарегистрировать заявление о возврате — нельзя, бланк опять не отображается из-за неверной серии.
В программе такой косяк сделать нельзя — там более девяти контролей стоит, которые отсекают все попытки накосячить; даже если поломать базу руками, всё равно ничего не получится. Подумал было, что заказчик так хитро издевается, но передо мной лежат два скриншота, где у них выбран кривой бланк и на экране ошибка. Как, как они это сделали?
Криволапый пользователь с лёгкостью порвёт систему, которую не смог поиметь матёрый хакер, и даже не поймёт при этом, что он натворил и как его угораздило.
#9086: Прости нас, Юра!
13:00 29.04.2012, IT happens
Несколько комментариев из кода:
{ оставим это до лучших времен… }
// Юра, извини
// … вот это нигде не используется, но на всякий случай… ^_^
#region ХХХ — пока неясно, где это юзается — уже ясно
// ХХХ: изменения в данном запросе, помеченные как -=#death#=-, исправляют ошибку, которая не совсем есть, работают неизвестно как и приводят неизвестно к чему. Теоретически всё абсолютно корректно, но на практике это нашими учёными богословами ещё не доказано.
// ну и изврат…
// предотвращая возможные вопросы: делаю поддержку XXX на уровне YYY, а не на уровне ZZZ из-за лени
#9087: Полярные проблемы
13:00 29.04.2012, IT happens
Работаю в большой организации в IT-отделе. Время от времени настраиваю домашние машины сотрудников на работе — и время терять не надо с выходом на дом, и все необходимое (софт и запчасти) под рукой.