137
Отлаживаем настольное приложение: через ПЛК производства %bigcompanyname%, и их же высокоуровневый TCP-интерфейс на .net управляем роботом.
Робот - здоровая машина, если поедет не туда, мало не покажется. А координаты, куда ехать, посылаем как раз мы. Там, X, Y, Z, еще какие-то служебные параметры, и в конце этой последовательность - служебный флаг, типа, готово, двигай. И двигает. Но изредка не туда, хорошо хоть на тестовой скорости успевали останавливать.
Отлаживали недели 3, все перекопали, и чувствуем уже, вроде не у нас проблема, хотя так почти никогда и не бывает. Вызвали суппорт %bigcompanyname%. Оказалось, что "наш интерфейс не гарантирует последовательность доставки параметров" - "а почему?" - "оптимизация пакетов". На TCP. Вот так.
Посмотрел в послужной лист этой конторы, стало страшно жить. Там даже атомные электростанции есть.
134
Работаю в IT-компании, занимающейся разработкой ПО для автоматизации разных видов деятельности. В одном из программных продуктов возникла необходимость использования справочников кодов ОКВЭД в полном объеме.
У каждого кода есть наименование. Почему-то отдел разработки и аналитики посчитал, что 100 символов вполне достаточно. Реальную длину наименований они при этом проверить забыли. Соответственно, часть наименований банально не помещается, а необходимость заливки в рабочую БД уже очень актуальна.
Аналитики начали бурно думать.
"Давайте зальем то что помещается, а остальное выкинем" - т.е. выкинем из федерального справочника коды, которыми пользуются люди.
"Надо серьезно подумать над этим вопросом и серьезно рассмотреть эту возможность" - выкидывания ненужных кодов, ага.
"А потом когда поправим...", - невероятно сложный и долгий процесс!, - "...уже зальем остальное" - а потом будем кажому клиенту переставлять программу.
Это было бы смешно...
129
Делали очередной проект. Я писал исполняющую часть, боссы занимались прикладной. Сидим в столовой, обсуждаем очередные дела по проекту. Один из боссов заводит речь про ресурсы с которыми работает программа и какими они бывают. Спрашивает моего мнения.
Я, недолго думая, рассказываю что ресурсы - это конечно сильно помогает и делает все лучше, и прочее. Минут через пять начинаю понимать, что ничего не понимаю.
Оказалось, мы пять минут говорили я - о ресурсах которые вставляются в программу (иконки там разные) и для которых есть специальный редактор ресурсов, а боссы - об учете ресурсов на складах компании этой самой программой.
Когда выяснилось, что клиентская программа - это не то что обращается к серверу, а специальный договор для клиента компании, и что у слова сервис есть еще один смысл, я понял, что прикоснулся к параллельной вселенной.
Ребята, отходить от компа и понимать язык непрограммистов - это так познавательно...
119
В нашей конторе как-то думали над методами запутывания кода, при сохранении его в открытом виде.
Из всех предложенных решений верхом совершенства был признан следующий метод: имена всех переменных и функций заменяются на символы подчеркивания. А чтоб не перепуталось, каждой переменной присваивается собственное количество подчеркиваний.
То есть $attempt_no = $___, $email = $____, $login = $_____, $pass = $______, crypt() = ____() и так далее.
Представляешь себе код?
if ($____) $_____ = ____($_____);
$_______++; $____ = '';
return $_____;
Сиди и читай, если так хочется.
112
Сижу, разбираю программу по работе. Нужно немного переделать, читаю код. В коде нет ни одного комментария, читается с трудом.
Задумался, что ну ведь не сложно же написать пару слов, и всё будет понятно.
А потом вспомнил.
Не всегда всё будет понятно.
На прошлой работе как-то встретил такое в прошивке для контроллера AVR:
if (cmd[1] == RESET) // если принятая команда RESET
{((void(*)(void))0)();} // что-то из черной магии
97
Один из наших программистов, оставив сервер, запущенным на ночь, обнаружил, что утром количество созданных мобов уперлось в лимит.
Это были вампиры.
На этот раз отожгли дизайнеры-скриптовики. По задумке, если некоторое время стоять в одном специальном темном месте, игроку становится страшно и за ним приходит вампир.
Проблема была в том, что скрипт реагировал и на самого вампира. Вампиру тоже становилось страшно, и за ним приходил следующий вампир. Утром в этом темном месте стояла огромная толпа вампиров и всем им было страшно.
92
Год назад писал тестовое задание для %companyname%. Задание было несложное: отображение дерева элементов из базы данных с использованием AJAX.
Сел ночью, написал, прикрепил резюме и отправил. В обед проснулся, сел за ноутбук - перед глазами исходный код.
alert ('Процесс секса JS,PHP и MySQL начат. Скоро будет новый бэби');
var child_name = prompt('Как Вы желаете назвать малыша?', 'Имя ребенка');
В шоке стучусь в аську менеджеру HR, та переправляет на тимлидера программистов. Извиняюсь перед ним, прошу посмотреть новую версию скрипта, а ту вообще выкинуть.
В ответ:
Все нормально, чувак! Даже если с тобой не подпишут контракт - мы тебя не забудем. Давно так не ржали!
С тех пор подобные заглушки не пишу, чего и вам настоятельно желаю.
87
Компания-провайдер. Обычная история: биллинговая система, сервер, постоянно обнаруживаются мелкие недочёты, постоянно вносятся изменения.
По закону подлости в фирму удалённого системного администрирования приходит заявка:
«Здравствуйте.
Все должно работать так-то и так-то. Просьба снести соответствующие изменения. Спасибо»
Особо не задумываясь, программисты СНОСЯТ последние конфиги сервера.
Интернет умирает.
79
Позвал меня молодой товарищ - не компилится в Borlanc C++ Builder новый проект со старыми файлами. Модули исправные - только что сам компилировал.
При попытки компиляции в новом проекте даёт ошибку в глубинах wtypes.h, на строку LONGLONG int64;
Долгая медитация вывела на потрясающей по своей глубине строчку, гласящую #define __int64 int64. LONGLONG, понятное дело, где-то в wtypes определён. А wtypes совсем не в курсе, что есть на свете извращенцы, которые переопределяют int64, да ещё и таким суровым образом.
В результате сейчас юный гений сидит и мрачно делает автозамену строк вида "([\(\s])(u)?int(\d{1,2}) " -> "$1(unsigned) __int$3 ", так как в его творениях мы нашли и int8, и int16, переопределенные таким образом.
А виновник торжества сидит и с наивным видом оправдывается - "ну я ж не знал", "ну это ж было для другого писано", "и ваще, чо вы от меня хотите", "я не знал, что __intXX - стандартная конструкция" и так далее. Так что я совсем не удивлюсь, если мы реально обнаружим #define TRUE FALSE где-нибудь в глубинах его кода.
В общем, в офисе всегда должно быть две линейки - деревянная для обычных глупых ошибок и железная для подобных творений нечеловеческого гения. По пальцам больно бить.