bash.im ithappens.me zadolba.li

Факапы

5849

Имитатор электрика с рубильником

1 апреля 2011, 10:00

Есть система телеавтоматики: управление вентиляцией, контроль температуры в помещении, напряжения в сети и т. п. Чтобы сэкономить, заказчик оставил старые сплит-системы, благо их ресурс ещё не выработан. Технически вопрос управления решён просто: ИК-передатчик от системы прикидывается пультом ДУ и управляет сплитом в целях регулировки температуры, а также для взбадривания после просадок и отключений питания.

В жару и после особо хитрых просадок местной электросети кондиционеры иногда подвисают и перестают реагировать на внешние раздражители. Этот вопрос решили не сильно сложнее, использовав бистабильное реле. Контроллер выдаёт импульс отключения, потом «тикает» пять минут, чтобы дать время сбросить давление компрессору, и включает сплит. Имитатор электрика с рубильником, короче говоря. Реле поставили в щиток и выход вывели на обычную розетку, поставив на всякий случай вторую рядом. Чтобы обеспечить надёжность, контроллер посадили на свой аккумулятор.

На одном из объектов контроллер по запарке включили после реле. Всё работало четыре года без сбоев: контроллер отключал кондиционеру и себе основное питание и сидел на аккумуляторе. Во время очередного цикла перезагрузки кондиционера контроллер перестал отвечать — аккумулятор накрылся, однако.

Степь. Июль. +48 в тени. Удалённый узел связи. До ближайшей приличной дороги — 40 км по грунтовке. До ближайшего диспетчерского пункта с людьми — в три раза дальше. А мораль такова: не втыкайте вилки электроприборов «лишь бы куда-нибудь», а то потом придётся рассказывать начальнику сказку про барона Мюнхгаузена и усы.

5828

Один в поле воин

30 марта 2011, 08:00

В студенчестве подрабатывал админом сети в НИИ, где писал диплом. SMTP/POP-сервер — SparcStation 1 с Солярой, по тем временам круть невиданная. Надо было добавить очередного только что подключённого пользователя из другого здания. Решил сделать прямо с его машины, через telnet-клиент. Почему-то подумалось мне тогда, что useradd — это для ламеров, сделаю-ка я, как кульный олдовый юниксоид:

# cat […] >> /etc/passwd

Пропускаю всего-то один символ «>» и не глядя жму Enter.

Шеф сначала хотел было попросту root оторвать, но обошлось. Системные аккаунты восстановили с другой такой же «копейки», переткнув пострадавший диск, но пришлось потом обходить всех юзеров, дико извиняться и регистрировать по новой.

5827

Сверхбайтовая скорость

Не так давно один из преподавателей рассказал поучительную историю из своей практики. По совместительству он является ещё и заведующим лабораторией робототехники, которая делает роботов для Росатома.

Как-то раз заказчики обратились с жалобой на изделие: когда робот едет на максимальных скоростях, вместо того чтобы разматывать за собой питающий кабель, он начинает его сматывать. Стали разбираться. Ошибка в итоге оказалась из числа классических, связанных со знаковыми величинами. Дело в том, что скорость сматывания-разматывания кабеля вычислялась из скорости движения робота, которая могла быть и отрицательной. На этом-то и погорели: на большой скорости старший разряд переменной, в которую заносилась текущая скорость, становился равен единице, и машина думала, что едет задом, со всеми вытекающими. Баг «спал» три года.

5810

Гордон и Пустота

28 марта 2011, 10:00

Персонаж истории Half-Life 2: Katamari напомнил мне случай с HL2: Episode One. В моём распоряжении был вполне лицензионный диск с игрой и достаточно слабый для 2010 года ПК. Оригинальный HL2 шёл на нём достаточно бодро и признаков недовольства не высказывал, поэтому фиолетовые полигоны в Episode One стали для меня неожиданностью. Гугл в руки, двадцать минут колдовства с настройками — и проблема, казалось бы, решена. С чувством выполненного долга я приступил к штурму Цитадели.

Иногда Гордон спотыкался на пустом месте — упирался и не хотел идти дальше. При этом невидимое препятствие можно было обойти как слева, так и справа. На радостях я не придал этому значения. На эпизоде со стеклянным лифтом стало уже значительно веселее. Герои игры спускаются вниз на эдакой платформе, а сверху падают куски металлоконструкций, которые надо отбивать гравипушкой. Не отбил — платформа разбивается, а Гордон радостно падает в бездну. Так вот, я этих металлоконструкций не видел. Совсем. Сверху падала пустота, которая тем не менее разбивала мой лифт. Загрузок через десять я это понял (уж не знаю как) и ещё пару часов занимался тем, что отбивал металлоконструкции вслепую. Ладно, где наша не пропадала — прошёл.

Ближе к концу главы с Цитаделью играть стало очень сложно: хитов мало, врагов много. Я загружался по десять раз на каждую драку и уже у самого выхода додумался простучать стены. Так и есть — вот она, родимая невидимая аптечка!

Но доконало меня не это. В следующей главе активно попёрли зомби с хэдкрабами. Где-то к середине я догадался о том, что оружие, похоже, валялось в начале локации, но я его тоже не видел. Убивать неприятелей с помощью гравипушки и всего-что-под-руку-попадётся — то ещё развлечение. К слову, на одного зомби надо всего семь-десять кирпичей.

Пора апгрейдиться — или ставить Warcraft II и не жаловаться на глюки.

5805

Пик Балмера и впадина Торвальдса

27 марта 2011, 10:00

Эта короткая, но поучительная история приключилась со мной в юности, году этак в 93-м. Пребывая в глубоко промежуточном состоянии абитуриента и проскочив в универ без экзаменов, под конец лета я приналёг на водочку. Онажды за каким-то фигом (не помню уже зачем — родителям в помощь, наверное) потребовалось мне вечером запрограммировать какой-то график.

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

Просыпаюсь утром мордой в клаве. Тем, кто спал только мордой в салате, завидую. Клава, само собой, пищит от переполнения очереди, экран забит одним символом. Фиг с ним — лезу наверх тереть мусор и натыкаюсь…

Я таки нарисовал эту сетку координат. Запустил программу — всё пашет идеально. Вот только передо мной во всём своём непередаваемом великолепии красовались двадцать два последовательных вызова LineTo и столько же вызовов MoveTo с вручную расчитанными экранными координатами — и никаких циклов.

С тех пор зарёкся кодить пьяным. Уже сколько лет прошло, а до сих пор помню и содрогаюсь…

5800

Not safe for women

Клиенты нашли проблему с отображением юзеров в админке на продакшн-сервере. Базы юзеров на продакшн- и тест-серверах разные. Нас на продакшн пускать нельзя: там люди платят деньги. Пришлось идти с представительницей клиента на тест-сервер, чтобы она показала, что именно не так.

Ищем мы пользователей, и в гриде среди большого числа всяких Mr. TestName01 LastName01 красным флагом в капсе виднеется пользователь со словом PORN во всех полях. А юзеров по политике удалять нельзя… Пришлось быстро выдумывать историю, что тестили валидацию полей и решили прикрутить словарь запрещённых слов. Идею одобрили, а с тем юзером историю замяли — пусть висит как напоминание.

5786

Задницей с разворота

25 марта 2011, 09:00

Делаю систему управления самоходной тележкой, самостоятельно объезжающей препятствия. Спереди два независимых ведущих колеса, сзади болтается поворотное. Прокосячил в алгоритме объезда: скорость поворота задаётся в радианах в секунду, а я вписал константу в градусах, как оно на мониторе отображается. Косяк всплыл при обкатке на малых скоростях. Выглядело это так: тележка неспешно подъехала к коробке, изображающей препятствие, резко крутанувшись на 360 градусов, снесла задницей коробку с дороги, после чего поехала дальше. Не хватало только возгласа: «Понаставили тут фигни!»

5783

Игра в свои ворота

Думаю, что каждый программер хоть раз в своей жизни слышал историю про американский спутник, улетевший к чертям из-за ошибки в одном байте машинного кода. Американцы американцами, а свой урок на тему «почему писать безглючный код так важно» ваш покорный слуга получил.

Будучи обычным студентом обычного вуза, мой брат Саша помимо обычных студенческих увлечений уважал две вещи: программирование и хоккей. Именно поэтому в качестве обязательной для любого студента халтуры была выбрана полставочная должность инженера-системотехника в местном ледовом дворце. Да, в нашем уездном городке была своя хоккейная команда (назовём её «ГазМяс»), которая играла хоть и не на высшем уровне, но с довольно стабильной периодичностью занимала призовые места в своём дивизионе. Тренер «ГазМяса», дядя Вася, пользовался огромным уважением в кругах болельщиков.

Сашкина работа была довольно творческой и в основном заключалась в лечении внезапно глюкнувшего электронного оборудования. Особенно любимым занятием на рабочем месте была пляска с бубном вокруг электронного табло. Монохромная светодиодная панель через пень-колоду была подключена к гордости завхоза ледового дворца, старенькому 286-му с 640 килобайтами памяти и 30-мегабайтным винчестером. Работой табло управляла писанная на Сях программка, сопровождение которой передавалось по наследству от одного инженера-системотехника к другому. Жил мой брат да не тужил, но в один прекрасный день пришёл домой сильно пьяным, а наутро подал заявление об уходе. О причинах такого поступка он рассказал мне только через десять с лишним лет, и то после очень хорошего количества совместно принятого на грудь алкоголя.

Шёл февраль, хоккейный сезон подходил к своей кульминации, и мой брателло начал было грустить по поводу будущего вынужденного отпуска, как вдруг в один прекрасный день к нему в каморку зашёл профсоюзный деятель с предложением скинуться на подарок к дню рождения дяди Васи. И тут Сашка зажёгся Идеей! Лучший подарок для тренера что? Разумеется, победа любимой команды!

Идея была простой и гениальной. Большинство очков «ГазМяс» терял, лидируя в конце матча с разницей в одну шайбу и пропуская гол за несколько секунд до конца встречи. Соответственно, если как-нибудь уменьшить время игры, то и вероятность неблагоприятного исхода была бы меньше. Помимо судьи-хронометриста, контрольный секундомер которого благополучно пылился в ящике стола, единственным источником точного времени было пресловутое табло. Идея Саши заключалась в следующем: модифицировать табло так, что если «ГазМяс» ведёт, то смена секунд происходила бы не через одну секунду реального времени, а приблизительно через 0,9 секунды. Разница для человеческого глаза во время игры практически незаметная, но для игры — довольно критическая.

В программу было внесено следующее условие:

for (i=0; i<2; i++) { // Мы не знаем, в каком порядке команды будут на табло
if (startswith(lower(team[i]), "газмяс") { // Пусть мелочь из «ГазМяса-2» тоже порадуется
teamindex = i;
}
}

if (score[teamindex] > score[1 - teamindex]) {
quantifier = 0.9;
} else {
quantifier = 1;
}

Изменения были успешно протестированы на второй команде. Наступил день рождения уважаемого тренера, по совпадению ставший и днём очередного матча «ГазМяса». Саша, предвкушая радость дяди Васи вечером, отправился сдавать последний экзамен сессии. Только вот препод попался на редкость въедливый, и освободиться брату удалось только часов в восемь, аккурат к окончанию третьего периода. В нетерпении он зашёл на трибуну и обомлел. «ГазМяс» проигрывал одну шайбу, до конца игры оставалось десять секунд. Вбрасывание, пас назад, к левому борту, в центр, бросок… Шайба вошла в ворота соперника «ГазМяса» на мгновение позже сирены. Судья покачал головой и развёл руки в стороны, показывая, что взятие ворот засчитано не будет. Сашка посмотрел на табло. Местный «ГазМяс» встречался с «ГазМясом» из другого города. Украденной десятой доли секунды не хватило до ничьей.

К счастью, о произошедшем никто не узнал, а на турнирном положении «ГазМяса» потеря двух очков так в итоге и не отразилась. Мой брат живёт и работает сейчас в Штатах, пишет программы для микроконтроллеров, которые использует NASA в своих спутниках.

5773

Раз-два-три — тринадцатый, гори!

На первом курсе дисциплину «Вычислительные системы, сети и телекоммуникации» у нас вёл преподаватель, занимавшийся IT ещё во время зарождения этого понятия. Старенький уже был дедушка, лет за семьдесят, много глупого по предмету говорил, зато демонстрировал килограммовую ячейку памяти на 64 байта (если мне память не изменяет) и рассказывал случаи из своей практики.

Они с товарищем, в то время ещё младшие научные сотрудники, делали какую-то ЭВМ для военных, занимавшую по тем временам целое помещение. День до демонстрации проекта заказчикам; в поте лица паяются схемы — всё руками, да. Запарывается схема, отвечавшая за то, чтобы в нужный момент на пульте загорались нужные лампочки, то есть за UI. Схему надо делать заново, а займёт это неделю. Что делать?

Говоря коротко, выкрутились. Проверяющие чины в назначенный день и час пришли, ознакомились с ЭВМ, посмотрели на загорающиеся во время демонстрации шайтан-машины лампочки, одобрили и проект приняли. Хитрость была в том, что пока мой будущий преподаватель объяснял, показывал и нажимал на кнопки, вместо безвременно почившей схемы в соседней комнате работал его напарник, в условленный момент замыкавший нужные провод. Вся предыдущая ночь была проведена в репетициях.