#9558: Прикинься шлангом
12:15 13.07.2012, IT happens
Году в двухтысячном писал систему управления RAID-контроллером. Контроллер попался солидный — железка с форм-фактором CD-ROM, управляемая через COM-порт. Софт этот повёз на выставку в Тайбэй этакий клерк-администратор от IT, по доброй традиции ни хрена не понимающий ни в софте, ни в железе, ни в IT вообще. Кому же ещё можно доверить руководить программистами?
Софт, естественно, не заработал. За последующие 13 часов было выполнено следующее:
— скачан и установлен Visual C++;
— скачаны и откомпилированы исходники софта;
— скачан, откомпилирован и запущен самопальный дебаггер RAID-команд;
— проведена отладка всего софта.
И всё это, заметьте, сделал человек, который отличал клавиатуру от пылесоса главным образом по количеству кнопок.
Я настропалился кидать в асю команды типа «F7 → Alt+O → смотрим последнюю строку» или «мышь на текст comStatus → Ctrl+F9 — что выдало?». Работа под конец шла довольно быстро; создавалось впечатление, что багу всё же найдем.
Финал был сплошным разочарованием. Наш клерк забыл воткнуть шланг от COM-порта в контроллер.
#9559: Оскорбление корпоративной этики
12:45 13.07.2012, IT happens
Лежит у меня 40-мегабайтный хард от WD с серийником 0000016. Года три назад была у него обнаружена интересная привычка: всуе обругаешь WD — не включается неделю, потом нормально. До следующего оскорбления корпоративной этики.
Наводки? Нет, он лежал на дощечке, так как компьютер был занят комбо-приводом под 5,25" и 3,5" дискеты. Единственное соединение — шлейф и питание от БП. БП работает до сих пор без нареканий. Обитатели дома? Нет, диск стоял в сторонке, пыль никто не протирал.
Единственное объяснение — мистика. Винт старый, из первой партии. От возраста у него настолько ослабли некоторые контакты, что поддерживались только квантовой связью, намоленной радостными мотивированными сотрудниками завода в первый день работы, и при её ослаблении он «глох». Мысли о том, что компания плоха, преобразовывались в радиоволны и улавливались чем-то в устройстве, внося помехи в нежные квантовые связи. Они нарушались, хард вис.
Может, вся суть «мистики» и «эффекта присутствия» в плохих контактах и маломощных резонансных наводках, «ремонтирующих» их?
#9560: Жизнь, Вселенная, индусы и всё такое
12:45 13.07.2012, IT happens
Последних лет десять я занимаюсь SAP. Практически вся прикладная часть системы доступна разработчикам конечного пользователя в исходных кодах. Язык программирования ABAP/4, правда, несколько специфический. Говорят, похож на Кобол. Если сравнивать с популярными ныне языками, то у меня он более всего ассоциируется с Бейсиком.
Есть в ABAP два вида подпрограмм: формы и функции. Форма имеет локальную область видимости (хотя её можно вызвать извне, но тогда нужно указать имя главной программы, в которой размещён код формы). Функции имеют глобальную область видимости, но должны быть обязательно приписаны к какой-нибудь группе функций. SAP может поставляется в разной комплектации. Набор установленных компонент (и, соответственно, доступных групп функций) может отличаться. Из-за этого имя вызываемой функции передаётся как литерал и, если оно указано неправильно или в системе не установлен компонент, содержащий нужную группу функций, выяснится это только в процессе вызова. Разработчики различных модулей вынуждены делить между собой общее пространство имён функций, а также других объектов. Наверное, они как-то координируют имена всех создаваемых функций. Но, скажем так, у них с этим есть некоторые трудности, потому очень часто в разных модулях есть функции, выполняющие схожие действия, а имя функции содержит посторонние символы. К слову, у конечного пользователя тоже есть возможность разрабатывать свои функции. И чтобы хотя бы устранить проблемы с пересечением имён с объектами клиентов, SAP не создаёт свои объекты с именами, начинающимися на букву Z — такие имена зарезервированы для разработчиков конечного пользователя, а клиентам не рекомендует создавать объекты, начинающиеся не на букву Z.
Конкретный пример. Во многих случаях необходимо определить количество дней в данном месяце (ну или последнюю дату в данном месяце). Похоже, что для каждого модуля SAP разработчики пишут эту функцию отдельно, причём не по одному разу. Беглый поиск дал сорок два различных варианта от SAP плюс ещё, конечно, ZMONTH_LAST_DATA — вариант от разработчиков конечного пользователя. Система SAP изначально немецкая, но индусский код попадается и тут. Вот несколько примеров.