О проекте | Редакция | Контакты | Авторам | Правила | RSS |  

 

 

 

Байки из прошлого: былинный отказ

 


Как же я мог так ошибиться, думал мышонок, пережевывая кактус

Кто не падал, тот не поднимается. И падений таких в моей жизни было множество, среди них и те, что были связаны с работой. Хорошо, что ни одна из тех историй не осталась черной меткой в трудовой книжке, но кое-чему я все таки научился. Например, затыкать собственноручно проделанные дыры

И нет, сегодня речь не о том, как я ошибался в людях, и не о том, как посмотрел не туда. Расскажу я об отказе воистину былинном, или epic fail в переводе.

Это было одно из первых устройств локальной противоаварийной автоматики на базе системы (или, как сейчас модно говорить, фреймворка), написанной мной где-то процентов на 50. Локальной — это значит действующей при аварийных возмущениях на одном объекте, например, линии электропередач. До тех пор на этой базе делались исключительно устройства системные, которые смотрят на целый район и в случае ахтунга дают управляющие команды на район же. Например, при аварии на Саянах отключаем нагрузку в  Новосибирской энергосистеме.

Локальное же устройство может зафиксировать аварию и выдать сигнал на отключение конкретных выключателей, как правило на той же подстанции, где и стоит, либо на противоположный конец линии.

И вот такое устройство в первый же вечер после ввода в промышленную эксплуатацию сработало. Но при условиях, когда сработать в общем-то было не должно. В результате на пару часов без света остался небольшой поселок тысяч на 15 жителей. Хорошо, что дело было почти ночью, все и так спали, а круглосуточных производств там никаких не было.

Но даже авария без экономического и другого ущерба остается аварией, и начинаются разборки.

А для этого устройства я писал не только фреймворк, но и технологический алгоритм.

Вот так и получилось, что вместо того, чтобы праздновать день рождения и бороться с фантазией коллег, гадая, не преподнесут ли мне в этот раз что-нибудь стильное, но абсолютно бесполезное вроде брелка от Камаза сосуда для дыхания вина, я упаковался вместе с двумя пирогами ручной работы в машину и поехал участвовать в разборках в качестве мальчика для битья.

Это был городок на краю Галактики Алтайского края, и пара бессонных ночей на подстанции, и разгребание логов в попытках понять, что именно пошло не так. Но больше всего времени занимала канцелярская работа: написание объяснительных, дабы сохранить невинность всех причастных, включая свою собственную.

Завести рака за камень успешно удалось, но на ту подстанцию пришлось кататься еще четырежды, и пялиться в код до покраснения, и проводить тесты в лаборатории.

Оказалось, как всегда, что реальное время — оно, конечно, в системах реального времени достаточно реальное, но не совсем. Причем чем ближе система к POSIX стандартам, тем хуже. Пришлось переносить некие расчеты из основного цикла приложения в прерывание, вызываемое по таймеру, ибо только оно и вызывается гарантированно, всегда. Хотя и не всегда вовремя, но на это уже существуют нормативы задержки.

Я научился писать оправдательные записки, да так, что и комар носа не подточит. Потом этот навык пригодился, когда меня, вместо конторского юриста, посадили на анализ авторского права и лицензий, поскольку юристка даже в праве корпоративном была не очень сильна, мягко говоря.

Я открыл для себя дивный мир арифметики с фиксированной запятой. Жаль, что эта арифметика прибита к аппаратной платформе, в данном случае Intel x86, гвоздями. Ну, код-то я написал, красивый, аж не стыдно, но интересно, как коллеги теперь собираются переползать на православные процессорные архитектуры, которые x86 умеют только притворяться ценой больших потерь в производительности?

Я в очередной раз понял важность лабораторных тестов, хотя ими полностью покрыть все возможные случаи нельзя, к сожалению.

Такие вот уроки прошлого, актуальные по сей день.

 
Сегодня в СМИ