Как же я мог так ошибиться, думал мышонок, пережевывая кактус
Кто не падал, тот не поднимается. И падений таких в моей жизни было множество, среди них и те, что были связаны с работой. Хорошо, что ни одна из тех историй не осталась черной меткой в трудовой книжке, но кое-чему я все таки научился. Например, затыкать собственноручно проделанные дыры
И нет, сегодня речь не о том, как я ошибался в людях, и не о том, как посмотрел не туда. Расскажу я об отказе воистину былинном, или epic fail в переводе.
Это было одно из первых устройств локальной противоаварийной автоматики на базе системы (или, как сейчас модно говорить, фреймворка), написанной мной где-то процентов на 50. Локальной — это значит действующей при аварийных возмущениях на одном объекте, например, линии электропередач. До тех пор на этой базе делались исключительно устройства системные, которые смотрят на целый район и в случае ахтунга дают управляющие команды на район же. Например, при аварии на Саянах отключаем нагрузку в Новосибирской энергосистеме.
Локальное же устройство может зафиксировать аварию и выдать сигнал на отключение конкретных выключателей, как правило на той же подстанции, где и стоит, либо на противоположный конец линии.
И вот такое устройство в первый же вечер после ввода в промышленную эксплуатацию сработало. Но при условиях, когда сработать в общем-то было не должно. В результате на пару часов без света остался небольшой поселок тысяч на 15 жителей. Хорошо, что дело было почти ночью, все и так спали, а круглосуточных производств там никаких не было.
Но даже авария без экономического и другого ущерба остается аварией, и начинаются разборки.
А для этого устройства я писал не только фреймворк, но и технологический алгоритм.
Вот так и получилось, что вместо того, чтобы праздновать день рождения и бороться с фантазией коллег, гадая, не преподнесут ли мне в этот раз что-нибудь стильное, но абсолютно бесполезное вроде брелка от Камаза сосуда для дыхания вина, я упаковался вместе с двумя пирогами ручной работы в машину и поехал участвовать в разборках в качестве мальчика для битья.
Это был городок на краю Галактики Алтайского края, и пара бессонных ночей на подстанции, и разгребание логов в попытках понять, что именно пошло не так. Но больше всего времени занимала канцелярская работа: написание объяснительных, дабы сохранить невинность всех причастных, включая свою собственную.
Завести рака за камень успешно удалось, но на ту подстанцию пришлось кататься еще четырежды, и пялиться в код до покраснения, и проводить тесты в лаборатории.
Оказалось, как всегда, что реальное время — оно, конечно, в системах реального времени достаточно реальное, но не совсем. Причем чем ближе система к POSIX стандартам, тем хуже. Пришлось переносить некие расчеты из основного цикла приложения в прерывание, вызываемое по таймеру, ибо только оно и вызывается гарантированно, всегда. Хотя и не всегда вовремя, но на это уже существуют нормативы задержки.
Я научился писать оправдательные записки, да так, что и комар носа не подточит. Потом этот навык пригодился, когда меня, вместо конторского юриста, посадили на анализ авторского права и лицензий, поскольку юристка даже в праве корпоративном была не очень сильна, мягко говоря.
Я открыл для себя дивный мир арифметики с фиксированной запятой. Жаль, что эта арифметика прибита к аппаратной платформе, в данном случае Intel x86, гвоздями. Ну, код-то я написал, красивый, аж не стыдно, но интересно, как коллеги теперь собираются переползать на православные процессорные архитектуры, которые x86 умеют только притворяться ценой больших потерь в производительности?
Я в очередной раз понял важность лабораторных тестов, хотя ими полностью покрыть все возможные случаи нельзя, к сожалению.
Такие вот уроки прошлого, актуальные по сей день.
Подробнее https://sacai.livejournal.com/290545.html?me...