Одна контора, торговавшая элитной мебелью и декорациями всякими, заказала мне как-то диск презентационный - каталог продукции с описаниями. Каждый товар сопровождался 3D-моделью: в отдельном окошечке должен был весело крутиться и освещаться указанный предмет. Его можно было потягать мышкой, со всех сторон рассмотреть и даже сохранить в популярных форматах. Ну, это уже для дизайнеров интерьеров.
Написал, и не удержался, чтобы не встроить туда "пасхальное яйцо". К сожалению, вызывалось оно не очень сложным образом - [Ctrl]+[клик-куда-то].
По этой нехитрой комбинации в окошечке начинал крутиться куб, на грани которого была нанесена моя брутальная морда - я тогда любил стричься налысо и вид имел устрашающий. Еще в черно-белом. С цианистым таким оттенком.
Так в тираж и запустили.
Не прошло и месяца - звонят из конторы. Ржут, как кони. Приезжай, говорят, лицом поторгуешь - один клиент обнаружил твой кубик. Возбудился страшно - хочу, говорит, такой декор в гостиную. Очень, говорит, шикарно. Постминимализм, говорит.
Сказали клиенту, что уже продали. Мол, один экземпляр был. Расстроился, бедняга.
Разговор со знакомым: - Тебе говорит о чем-нибудь число 32 767? - Ну конечно ) - А нашим программистам нет. - ? - У них на заводе линия останавливается. Они говорят, что номер заказа доходит до определённого числа и больше не работает. Ну я им говорю, посмотрите, может число какое-нибудь круглое... Да нет, говорят, 32 767.
Компания большая, народу много - 150 человек в головном офисе плюс десять филиалов, все сидят в интранете, который делаем мы с новеньким напарником: там и зарплата рассчитывается, и посещаемость, и отпуска, и многое другое, к чему бы каждый хотел бы получить доступ. Так что админский логин\пароль хранится пуще родного глазу.
Напарник в мыле, три проекта никак не даются, хоть и остались небольшие правки, а завтра ему в первый отпуск. Смотрю - улыбается, нашёл выход. Ну, думаю, молодец, в первый отпуск с чистой совестью, повезло.
На следующее утро я еле успеваю дойти до кофейного автомата, как на меня бежит сам генеральный с бешеными глазами навыкате, и по ходу бега орёт благим матом что-то типа "Да я вас, всех ***, *** так, что вы у меня в *** улетите, что вы наделали, ***!!!".
На вопрос, что же случилось, хватает за руку и тащит к компьютеру. Открывает давеча отредактированный напарником проект, открытый и официально анонсированный в сети и тычет пальцем, а там... там логин и пароль администратора домена (а это - доступ к 13 локальным серверам и 10 удалённым в регионах, доступ ко всем админкам интранета - щёлкнуло у меня в мозгу), в коде ошибки framework`a. В двух других им редактированным проектах такая-же фигня.
Оказалось, что этому герою ничего лучше не пришло в голову, как включить в web.config строчку <identity impersonate="true" userName="****\***" password="*******" />, для того чтобы писать в файлы на сервере, и при этом он умудрился сделать ошибку в написании домена, что и вызвало ошибку. Вывод ошибок он, конечно же, не закрыл.
Возвращения напарника из отпуска мы все ждали с нетерпением.
Люди - если ваша программа компилируется, это не значит что она работает!
Отлаживаем настольное приложение: через ПЛК производства %bigcompanyname%, и их же высокоуровневый TCP-интерфейс на .net управляем роботом.
Робот - здоровая машина, если поедет не туда, мало не покажется. А координаты, куда ехать, посылаем как раз мы. Там, X, Y, Z, еще какие-то служебные параметры, и в конце этой последовательность - служебный флаг, типа, готово, двигай. И двигает. Но изредка не туда, хорошо хоть на тестовой скорости успевали останавливать.
Отлаживали недели 3, все перекопали, и чувствуем уже, вроде не у нас проблема, хотя так почти никогда и не бывает. Вызвали суппорт %bigcompanyname%. Оказалось, что "наш интерфейс не гарантирует последовательность доставки параметров" - "а почему?" - "оптимизация пакетов". На TCP. Вот так.
Посмотрел в послужной лист этой конторы, стало страшно жить. Там даже атомные электростанции есть.
Работаю в IT-компании, занимающейся разработкой ПО для автоматизации разных видов деятельности. В одном из программных продуктов возникла необходимость использования справочников кодов ОКВЭД в полном объеме.
У каждого кода есть наименование. Почему-то отдел разработки и аналитики посчитал, что 100 символов вполне достаточно. Реальную длину наименований они при этом проверить забыли. Соответственно, часть наименований банально не помещается, а необходимость заливки в рабочую БД уже очень актуальна.
Аналитики начали бурно думать.
"Давайте зальем то что помещается, а остальное выкинем" - т.е. выкинем из федерального справочника коды, которыми пользуются люди.
"Надо серьезно подумать над этим вопросом и серьезно рассмотреть эту возможность" - выкидывания ненужных кодов, ага.
"А потом когда поправим...", - невероятно сложный и долгий процесс!, - "...уже зальем остальное" - а потом будем кажому клиенту переставлять программу.
Делали очередной проект. Я писал исполняющую часть, боссы занимались прикладной. Сидим в столовой, обсуждаем очередные дела по проекту. Один из боссов заводит речь про ресурсы с которыми работает программа и какими они бывают. Спрашивает моего мнения.
Я, недолго думая, рассказываю что ресурсы - это конечно сильно помогает и делает все лучше, и прочее. Минут через пять начинаю понимать, что ничего не понимаю.
Оказалось, мы пять минут говорили я - о ресурсах которые вставляются в программу (иконки там разные) и для которых есть специальный редактор ресурсов, а боссы - об учете ресурсов на складах компании этой самой программой.
Когда выяснилось, что клиентская программа - это не то что обращается к серверу, а специальный договор для клиента компании, и что у слова сервис есть еще один смысл, я понял, что прикоснулся к параллельной вселенной.
Ребята, отходить от компа и понимать язык непрограммистов - это так познавательно...
В нашей конторе как-то думали над методами запутывания кода, при сохранении его в открытом виде.
Из всех предложенных решений верхом совершенства был признан следующий метод: имена всех переменных и функций заменяются на символы подчеркивания. А чтоб не перепуталось, каждой переменной присваивается собственное количество подчеркиваний.
То есть $attempt_no = $___, $email = $____, $login = $_____, $pass = $______, crypt() = ____() и так далее.
Сижу, разбираю программу по работе. Нужно немного переделать, читаю код. В коде нет ни одного комментария, читается с трудом. Задумался, что ну ведь не сложно же написать пару слов, и всё будет понятно. А потом вспомнил.
Не всегда всё будет понятно.
На прошлой работе как-то встретил такое в прошивке для контроллера AVR:
if (cmd[1] == RESET) // если принятая команда RESET {((void(*)(void))0)();} // что-то из черной магии
Один из наших программистов, оставив сервер, запущенным на ночь, обнаружил, что утром количество созданных мобов уперлось в лимит.
Это были вампиры.
На этот раз отожгли дизайнеры-скриптовики. По задумке, если некоторое время стоять в одном специальном темном месте, игроку становится страшно и за ним приходит вампир.
Проблема была в том, что скрипт реагировал и на самого вампира. Вампиру тоже становилось страшно, и за ним приходил следующий вампир. Утром в этом темном месте стояла огромная толпа вампиров и всем им было страшно.