Компания большая, народу много - 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)();} // что-то из черной магии
Один из наших программистов, оставив сервер, запущенным на ночь, обнаружил, что утром количество созданных мобов уперлось в лимит.
Это были вампиры.
На этот раз отожгли дизайнеры-скриптовики. По задумке, если некоторое время стоять в одном специальном темном месте, игроку становится страшно и за ним приходит вампир.
Проблема была в том, что скрипт реагировал и на самого вампира. Вампиру тоже становилось страшно, и за ним приходил следующий вампир. Утром в этом темном месте стояла огромная толпа вампиров и всем им было страшно.
Год назад писал тестовое задание для %companyname%. Задание было несложное: отображение дерева элементов из базы данных с использованием AJAX.
Сел ночью, написал, прикрепил резюме и отправил. В обед проснулся, сел за ноутбук - перед глазами исходный код.
alert ('Процесс секса JS,PHP и MySQL начат. Скоро будет новый бэби'); var child_name = prompt('Как Вы желаете назвать малыша?', 'Имя ребенка');
В шоке стучусь в аську менеджеру HR, та переправляет на тимлидера программистов. Извиняюсь перед ним, прошу посмотреть новую версию скрипта, а ту вообще выкинуть.
В ответ: Все нормально, чувак! Даже если с тобой не подпишут контракт - мы тебя не забудем. Давно так не ржали!
С тех пор подобные заглушки не пишу, чего и вам настоятельно желаю.