Истории с тегом: факапы

Всего историй: 738

12686

Двести двадцать по встречной

В старых компах с блоками питания AT клеммы втыкались прямо в кнопку «Power». Причём их было четыре, и угадать можно было разве по цвету. +220 обычно был синий. Обычно — но, как оказалось, не всегда.

В бухгалтерии собираю, подключаю, втыкаю в розетку… Бздыщ! Шнурок питания разорвало надвое, причём вдоль всей длины. Дым и вонища. Посреди этого всего шухера я сделал морду кирпичом и сказал, что всё нормально. Типа, бывает. Хотя руки ещё долго тряслись.

Хорошо хоть не сгорело ничего. Вовремя разорванный сетевой шнурок принял на себя всю мощь отечественных ампер.

12655

Где упало, там пропало

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

Потребовалось мне у очередного пациента переподключить кабели. Сдвинул я его чуть вперёд и в сторону — а он, падла, возьми и соскользни! Угол ящика выбил кусок матрицы из широкого монитора-двадцатки.

Остальная часть матрицы работает идеально до сих пор. Вот так в моём мировосприятии появилась новая трактовка термина «битые пиксели».

12577

Горим и тонем

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

Стоит отдельно отметить, что помещение, в котором располагался генератор, подстанция, компрессоры и насосы, было общим и заглублённым: траншея с бетонированными стенами и дном, перекрытая сверху металлической съёмной крышей и не изолированными друг от друга отсеками с оборудованием.

А теперь картина по минутам, как её увидел дежурный у себя на пульте.

12:00:00. Датчик температуры трансформаторной подстанции скачкообразно перескакивает с +60 °С на +176 °C. Видимо, был бракованный. Но в систему не закладывался алгоритм контроля неисправности оборудования, и, громко пискнув в колонки и подсветив на схеме красным, компьютер вырубает трансформаторную подстанцию, написав крупными буквами: «ПЕРЕГРЕВ». Дежурный немного напрягается.

12:00:02. Система видит катастрофическое падение напряжения в сети и, следуя заложенному в него алгоритму, запускает дизель-генератор. Дежурный звонит энергетикам, чтобы посмотрели, что с подстанцией. У генератора прогорает выхлопная труба, выхлоп идёт в помещение.

12:00:30. На пульте раздаётся тревожный писк, помещение с оборудованием отмечается значком и значком «пожар». Сообщение дублируется большими буквами под словом «ПЕРЕГРЕВ». Дежурный напрягается ещё сильнее.

12:00:35. Система, спасая корпоративное имущество, включает умную пожарную систему, переключая насосы в трубы пожаротушения, повышает их производительность и открывает вентили в помещение с огнём, то есть в траншею с оборудованием.

12:00:50. На пульте с тревожным писком отображается иконка о затоплении помещения с оборудованием. Под надписями «ПОЖАР» и «ПЕРЕГРЕВ» появляется ещё одна, соответствующая ситуации. Дежурный уже очень напряжён: в его инструкции ничего не написано о действиях в ситуации, когда одно и то же помещение перегрето, горит и тонет. Всё это время в траншею закачивается вода, приблизительно 10 кубометров в минуту.

12:01:10. В помещении дежурного с грустным писком на пульте появляется сообщение о неисправности пневматической системы и падении давления в воздухопроводе. Местом неисправности предательски обозначается всё то же помещение.

12:01:15. Отрубается второй компрессор. Критически падает давление воздуха. Перекрываются заслонки ресивера. Система отмечает надписью «УТЕЧКА» злосчастное помещение с оборудованием. Дежурный в панике: он не успевает обзвонить всех ответственных за выходящие из строя узлы.

12:01:42. Локальный апокалипсис продолжается. Генератор сообщает на пульт о неисправности системы забора воздуха и отрубается. К этому моменту вода достигает уровня крыши траншеи и начинает переливаться во двор. Аварийная система переходит на UPS.

12:01:45. Насосы сообщают на пульт, что без основного и аварийного питания они работать не будут, и отключаются.

12:01:46. Пожарная система сообщает на пульт, что насосы пали смертью храбрых в бою с пожаром, и врубает системы с СО. Видимо, замечательная германская программа контроля не воспринимает типы аварийных отключений других систем.

12:01:48. Из-под крыши помещения начинается бурление параллельно с резким охлаждением воды.

12:02:00. Оживает датчик температуры, видимо, окрылённый общим охлаждением помещения, и радостно заявляет на пульт: «Ща напруга будет, начальника! Подавать?» — и заискивающе мигает окошечком подтверждения оператору. Дежурный, впав в транс, давит на большую красную кнопку: отключить всё, аварийно остановить производство.


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

12562

Выдыхай, ангар, выдыхай!

Закрыли все порты на оборудовании, забыв оставить себе SSH-лазейку, а потом пришлось к серверу-аутисту два часа лететь на вертолёте и три дня ехать на верблюдах? Поверьте, это ещё не самый плохой вариант.

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

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

Дальнейшую картину происшедшего удалось восстановить по логам системы и записям камер видеонаблюдения.

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

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

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

К счастью, оставшийся после вылетевшей двери зияющий проем был достаточно большим, чтобы «взрывной волной» здание не разнесло на тряпочки и шнурочки — оно просто ухнуло, прыгнуло и покосилось, напоминая уже не сверкающую на солнце обитель мощной и красивой техники, а неказистый домик дядюшки Тыквы. Логическим финалом технотриллера стало шипение испаряющегося аммиака из порванных осколками резервуара и развороченных ударом воздуха сотен медных трубочек охладителя.

Итог — менее десяти секунд секунд от подачи команды до катастрофы, четыре миллиона евро убытков из-за уничтоженного оборудования, искалеченного здания (будут сносить и строить заново — даже фундамент дал трещины) и простоя производства, колоссальные репутационные потери фирмы-проектировщика и небольшой опыт программистам, писавшим программу контроллера. А всё из-за одного не вовремя закрытого порта.

12556

Стопроцентный фибергласс мы спрядём для вас сейчас

Три админа под окном

Пряли оптоволокно.

Старый шредер на полу

Мирно ел картон в углу.

Кот Фортран лежал на лавке

И сметаной тихо чавкал.

Тараканы на столе

Шустро ползали во мгле.

Непростое это дело —

Пряли долго, но умело.

Не без риска окосеть

Доплели большую сеть.

Тут админы подустали

И за пивом побежали,

Придавив углы сети,

Чтоб по новой не плести.

Потекло рекою пиво

(Может, ровно, может, криво),

И админы напились

Да под лавкой улеглись.

А наутро, как поднялись,

Минералкой похмелялись.

Потому что весь рассол

Программист себе вколол.

Протрезвели — и в субботу

Снова взялись за работу.

Похватав углы сети,

Снова принялись плести.

— Стопроцентный фибергласс

Мы спрядём для вас сейчас! — 

Заявил один админ

И сказал: — Адынадын!

Два других тотчас заржали,

Волокно в руках разжали…

Нити сразу расплелись

Да на землю улеглись.

И расстроились админы,

Волокно сожгли в камине…

Шредер грустно проскрипел —

Волокна он не поел.

В тусклом свете мониторов

Шли пустые разговоры:

Как теперь дебажить код,

Если пряжа не идёт?..

Волокно горит в камине,

Плачут бедные админы.

В свете их печальных глаз

И кончается рассказ.

12420

В начало константу ставить хочешь ты

Не особо давно мне надо было написать программу, суть которой в том, чтобы на основе введённых данных рассчитать некую конструкцию на заказ. Данные выводились в таблицу с последующей распечаткой на принтере.

Был там чекбокс «Монтаж». Если стоит галочка, то в таблицу вносится «Да»; если нет, то «Нет». Когда я запустил программу, то заметил, что даже если не ставить галочку, в таблицу всё равно вносится «Да».

Начал курить код, но ничего не нашёл (хотя читатели давно догадались, в чём проблема). Решил прогнать переменную через брейкпоинты, и тут я увидел…

Самое смешное, что за месяц до этого я читал про «условия Йоды» и подумал: «Ха-ха, тупые! Кому это надо?» Оказалось, надо. Конечно, проблема была в том, что я написал = вместо ==.

Не пренебрегайте случайно полученными знаниями и опытом, даже если думаете, что это всё вам не понадобится.

12358

Лавировали и выигрывали

У любого программиста, сисадмина и эникея есть свой набор айтишных баек — тут тебе и магия, и факапы, и истории о невероятной смекалке. Добавлю парочку своих.

Будучи ещё «малолетним школием», я обзавёлся компьютером. Это было восемь лет назад, и конфигурация была соответствующей. Однажды после продолжительного заруба в Day of Defeat с ботами компьютер внезапно отрубился. ПК был запаролен в BIOS, следовательно, игры на сегодня были окончены. Но я всё-таки решил попытать удачу и побрутить пароль, благо я примерно знал длину и символы пароля. Но компьютер не отозвался на кнопку включения ни в первый, ни в десятый раз.

Мне стало страшно, как и любому мальчишке, неосознанно сломавшему дорогую вещь. Я начал ковыряться в задней панели компа, проверяя все разъёмы и вставленные в них провода. Но ничего не помогло: компьютер всё так же отказывался включаться.

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

Второе происшествие случилось годом позже. Я сбросил пароль биоса и научился заходить под незапароленным «Администратором», когда «User» был под паролем. Игры продолжились, но установленный Far Cry тормозил даже на минималках — как оказалось позже, из-за отсутствия PCIe-видеокарты. Но выбить деньги на новую видюху было почти нереально, и я решил рискнуть и заняться разгоном.

Pentium D уверенно держал увеличение множителя частоты с 133 до 140 без перегрева — спасибо инженерам Intel и неизвестному сборщику за это. Но когда я по ошибке набрал вместо 145  189 и применил параметры, я с удивлением увидел тактовую частоту 4 ГГц. Far Cry летал, но недолго: перегрев делал своё дело. В итоге пришлось копить на видеокарту — на процессоре много не поиграешь.

Третья оказия случилась с моим новым ПК, купленным четыре года назад. На нём в упор не работал *nix, а я пробовал поставить и Debian, и Arch, и Ubuntu, и даже FreeBSD. Никсы либо валились на запуске графической оболочки, либо сразу после GRUB. Помучившись и вволю наплясавшись с бубном, я забил на это неблагодарное дело и поставил себе Arch на виртуалку — до сих пор пользуюсь.

И четвёртая, весьма извращённая ошибка, с которой мне пришлось бороться. Решил я сыграть в MechWarrior, но столкнулся с сотнями глюков. Перепробовав все имеющиеся патчи (игра — ещё та поделка), я решил забить на игру вместе со всеми багами и развлечься в Microsoft Flight Simulator, и подключил джойстик. После игры я его не отключил, но решил напоследок зайти в MechWarrior. Ни одного глюка. Оказалось, что игра приняла мою аудиокарту за джойстик и вешалась при проигрывании определённых звуков.

Мораль:

  1. Лавировать между багами и исправлять их надо учиться с детства.

  2. Проблема сидит там, где ты её не ищешь.

  3. Самое важное: от игр — одни неприятности.

12283

Да не довиртуализировал

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

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

12243

Ёлочка, не гори

Сижу, никого не трогаю, починяю примус. В соседней комнате жужжит комп 2009 года сборки: «корка-два» Е8500, пара гигов памяти, Радеон 4850, винт на терабайт, 450-ваттный Чифтек — и всё это в красивом акриловом корпусе. На улице собирается дождь.

Слышу краем уха, как что-то начинает трещать. Думаю, хороший дождь спустился! Чуть позже треск несколько утихает. Потом снова возобновляется, с каким-то звоном. Моргает свет, пищит упс. Решаю пройти посмотреть, что же такое происходит.

Вхожу в комнату — и наблюдаю картину открытия врат в преисподнюю: на столе в углу стоит полуоплавившийся системник с огнём над ним сантиметров в тридцать высотой, под потолком чёрная туча дыма. Пластик с компа отваливается на стол чёрными ломтями. @#$@#%$#@#$@#!

За пару минут пожар залил водой. В системнике предположительно могли уцелеть винт (несколько оплавился разъём), проц (закоптился, испытал тепловой удар, но вероятность выживания ненулевая) и кулер с передней панели; остальное спеклось и ушло в мусор. Оплавился сбоку и сзади монитор (вероятнее всего, пережил успешно); немного испорчен стол, испорчены обои и потолок, отвалилась штора и подплавился пластик на жалюзи. Ну, и сгорел и потрескался висевший над компом ночник — источник звона.

Предположительная причина сего файр-шоу — коротыш в цепях питания видяхи, который БП не почувствовал, а дальше — провода, пластик…

Сделал несколько выводов:

  1. Никогда не брать пластиковых корпусов. Только металл, только хардкор!

  2. Никогда не брать БП с большим запасом мощности без реальной на то необходимости.

  3. Завести ещё одно место для резервного копирования данных (сейчас для этих целей пыхтит сервачок, который постепенно стал несколько мощнее компа).

  4. Завести огнетушитель и задуматься о тепловых аварийных выключателях для компов (поставить в БП термопредохранители?) и датчиках дыма.

12239

Сингулярность своими руками

Создавая собственный мод к игре X²: The Threat, я задумывался над тем, что изюминкой моей модификации должны стать не только графические изыски, дотягивающие игру 2000 года до уровня почти современной графики, или, к примеру, скрипты, создающие уникальные события или миссии для игрока. Хотелось внести в игру ещё и какой-нибудь совсем уж нереальный элемент вроде черной дыры.

Обмозговав возможности виртуальной вселенной, решил создать новый тип планеты. Её можно будет разместить в одном из секторов и привязать к координатам постановки модифицированный скрипт автостыковки корабля, который будет вносить в линейное движение нарастающий дрифт. Тот, кто не справился с управлением, сообразно физике самой игры разобьётся о поверхность планеты (в данном случае — чёрной дыры).

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

Процедура внесения объектов в игру проста. Складываем модельку в папку с моделями, в INI-файле назначаем новый тип планеты (к примеру, копированием параметров взятого за основу элемента) и заменяем номер модели на свою.

Я никогда не декомпилировал ядра игр. А это возможно, и многие это делают — честь им и хвала! Мои же модификации всегда опираются больше на возможности простой подстановки или скриптового программирования.

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

Вот здесь я, собственно, и споткнулся. Забыл, что, в отличие от всех прочих объектов вселенной Х², помещаемых в игру по цепочке «INI-файл — сцена — модели в сцене», планеты помещаются иначе: INI-файл ссылается на головную модель самой планеты, к которой привязывается сцена, состоящая из нескольких слоёв: модели с текстурой ночных городов, полусферы тумана и ночного затенения, слоя облаков, слоя свечения атмосферы.

Процесс творения так меня завёл, что, прозевав вышеописанные обстоятельства, я внёс в INI-файл строку планеты а-ля Сатурн и задал головному элементу номер модели своей чёрной дыры. То, что к модели ещё прилагается неизвестная мне сцена, не остановило меня как экспериментатора.

Игра благополучно запустилась, проглотив изменения.

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

Неладное я заподозревал в момент создания объекта. Резкие броски корабля по крену и дифференту были обусловлены не то торможением программы, пропихивающей сбойный объект в математику ядра, не то заранее заданными создателями эффектами. Но через несколько секунд всё успокоилось. Забыв о том, что можно в другом секторе просто создать корабль или станцию игрока и за счёт внешнего контроля за собственностью осмотреть окружающее пространство, я решил сунуться туда сам. Разогнался, прошёл врата… Грандиозный «бабах» был ответом на мои изыски.

То, что клюкнула сцена, понятно. Но почему ядро игры вместо красивой сияющей сингулярности поставило по координатам просто чёрный шар, а заодно разнесло все рукотворные объекты сектора, для меня пока загадка. Однако, когда та же самая математическая сила разнесла в щепу и мой кораблик, а игра, продолжая правильно отрабатывать, вывела на экран надпись «The End» и корректно завершила работу, я вдруг вспомнил Оппенгеймера:

— Какая интересная физика!