Ariane-5G - как потерять миллионы всего за 40 секунд. Компьютер убийца.
HTML-код
- Опубликовано: 31 май 2024
- Привет друзья. В этом видео мы расскажем историю ещё одного компьютера убийцы, на этот раз ошибка в коде уничтожила только технику. Но вот стоимость этой аварии была просто огромной.
- Заходите в наш магазин и покупайте DIY-электронику, а также все для 3-д печати! У нас нет донатов и это реальный способ поддержать канал, чтобы мы и дальше радовали вас новыми видосами!
amperka.ru/?...
Краткое содержание:
00:00 Интро
00:42 Ariane-5
01:38 Запуск Ariane-5
02:27 Расследование аварии
04:04 Виды ИНС
06:36 Хитрости предстартовой подготовки
07:45 Навигация в новой ракете
08:17 Где спряталась ошибка
09:59 Повторяем ошибку на современной системе
11:04 Выводы
Музыка:
filmmusic.io/song/6838-darkties
filmmusic.io/song/7412-cyborg...
filmmusic.io/song/6866-pumpki...
filmmusic.io/song/5717-terrib...
filmmusic.io/song/4656-flower... - Наука
Проц с ядром:
- системная ошибка, оверхед пула, кернел паник! Помогите!
Логгер:
- я просто запишу это, ок
Логгер: чувак с камерой из мемов
У логгера так то больше и нет задач, кроме как записывания состояния машины
Покрывайте код тестами. Покрывайте код тестов тестами. Покрывайте код тестов тестов тестами... (спустя несколько тысяч итераций) * переполнение стека *
:)
Жиза)))))
Стэка мозга
Сюда нельзя вставить изображение, но думаю что все видели картинки из серии «unit tests passed, integration failed». И здесь тоже, отдельно взятые тесты не помогли бы совсем, от слова «никак». А так, вообще говоря, если для тестов нужны свои тесты, то все эти тесты написаны неправильно.
Кстати я вот буквально недавно думал что чем больше ты масштабируешь и уточняешь тесты, тем больше они начинают походить на копию приложения, которое покрывается тестами. Потому что я уже не знаю что сложнее - эндпоинты на беке который я тестирую, или интерсепторы которые я всё больше усложняю в сайпресе.
Эту историю читал лет 12 назад, в каком-то компьютерном журнале. Заголовок был, что-то "Самая дорогая программная ошибка". Спасибо, освежил память.
Жду когда ты соберёшь процессор. В оном из роликов ты обещал попробовать.
Спасибо за 300 лайков.
+
+
Согласен но у меня видео вышло 15 мин назад а твой комментарий 20 мин назад. Как?
На макетке из транзисторов?
Как он тебе его соберет
Отличный выпуск
Выпуски на ракетную тематику усиливают желание увидеть новую ракету в вашем исполнении
мне во время просмотра пришло письмо от гикбрейнса!
Неее пусть соберут генератор водорода кислорода работающий на солнечных Панелях.
Тоже программист и такие ситуации случаются очень часто: когда видишь ошибку и понимаешь, что код на все 100% должен работать правильно, но он почему-то этого не делает.
А почему такая уверенность, что он должен работать? Вы же помните, что у вас 16-bit и есть пределы. Если посмотреть на ситуацию в целом со стороны, то я бы никогда не посчитал полностью универсальным код, который рассчитан для работы при отклонениях не на все 360x180 градусов. Я бы добавил туда комментарий: # проверь штатный угол отклонения ракеты перед переносом кода.
Ладно бы ещё величина переменной была бесконечной: например, высота орбиты в метрах, тут уж точно можно только взять некоторый запас, дальше которого ракета физически улететь не сможет, и записать в комментарии в коде, что при переносе его на новую ракету нужно проверять, не увеличить ли битность переменной согласно новым техническим характеристикам.
@@Red.Igroman_bot.2.0 комментарии наше всё
@@Red.Igroman_bot.2.0 Вы явно НЕ программист. Во первых - вы уже знаете проблему, поэтому и советуете. Во вторых - проблема не в коде, а в отказе от тестов перед запуском. В третьих - вот код ошибки( переполнение в E_BH - для справки)
P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S * ((1.0/C_M_LSB_BH) * G_M_INFO_DERIVE(T_ALG.E_BH)))
G_M_INFO_DERIVE(T_ALG.E_BH)) - именно та функция которая брала 64 бита вещественного и превращала в 16 бит со знаком действительное.
Кстати - если вы не в курсе, то весь этот код не использовался вообще. Тоесть в 5-й версии, он не был нужен.
Кстати норм заход для рекламы курсов тестировщиков был бы (:
Или для KSP 2
Любишь смотреть рекламу? 🤦🏻♂️
@@Hbyh66_ug67 Нет, просто отмечает подходящее для неё место в шуточной форме
5:20 вместо МегаГерц (MHz) написано МиллиГерц (mHz). Монтажеру привет.
мощный проц)) надежный как швейцарские часы))
1:29 лайк за KSP)
Как раз собирался это писать. Лайк.
Ну, это просто супер! Рассказ про чью-то маленькую ошибку, которая обошлась очень дорого, и Антон на первых же кадрах говорит - знакомьтесь, Ариан-5, а показывает - Ариан-6 !!!
Браво! )
16 бит хватит каждому
Ну что, битами померяемся?🤣
Мне и 8 заголову
а 512 битный процессор в 83 году на ВМФ СССР не хочешь?
@@gACZXC6ASDASD юзаю 4x битный 😎👍
@@user-su4is5je7y а поподробнее можно?
Ошибку устранили... вместе с тем, кто её допустил)
Мне кажется, такое только в нашей необъятной практикуют. Там все таки человеческий фактор сработал. Много, очень много людей допустило ошибку...
У боинга вроде была история, когда была плавающая проблема в софте, которая отлавливалась только в полете, создавая очень стремную ситуацию для всех кто на борту. Её долго не могли пофиксить.
В конце концов организовали демо полет для инженеров, которые бысренько пофиксили её, когда почуствовали на себе ее последствия)
Надеюсь, устранили окончательно, т.е. сделали возможной работу на любых углах отклонения вплоть до 180° (просто потому что здесь физически существует предел этого параметра)? А то окажется, что следующая ракета летит ещё круче и переменная снова не рассчитана на такие значения.
7:40 аааааааа! Кто так строит? Лёха ты же инжинер.
он так видит.
@@Rodogor_Hoenhaym но это не оправдание. Строить надо по нормальному.
@@user-sm9ro4zd2b нормальный инженёр, нормально построил.
Да ладно гироскопов побольше и как струна полетит)
@@robert1330 это гиродины.
Мне аж захотелось в KSP поиграть
да кстати
Мне тоже
Как у классика поётся: нельзя обосраться, но мы обосрались...
Очень здорово, что не просто рассказал, но и наглядно показал как ведёт себя эта "особенность" в компиляторе.
"Покрывайте свой код тестами", самое важное в этом видео.
Все ведь тестами не покрыть, производительность упадет. Там и так овер дофига параметров нужно вычислять.
@@ZALMAN_AKILOV вообще то здесь речь идет об интеграционном тестировании, которое выполняется перед релизом продукта, а не проверках в рантайме. Они никак не влияют на производительность, потому что существуют отдельно от продукта.
@@ZALMAN_AKILOV Производительность упадёт... гм... во время тестирования. Какая неожиданность
@@Uni-Coder спасибо огромное, учту в будущем, а то пишу и не тестирую совсем, вот я дэбил
не экономьте на быдлокодерах
А меня научили: перед делением в коде проверь знаменатель на ноль, даже если нуля там не будет никогда в жизни. А вот если не проверишь - то ноль обязательно проскочит.
А это не сильно нагрузит систему?
@@rawil6751 деление грузит намного сильнее, чем проверка условия
Угу, а потом окажется, что не ноль, но достаточно малое число в знаменателе -- тоже даёт переполнение. И твоя проверка была ни о чём.
Полностью корректная работа с ошибками возможна только при реализации подсистемы обработки исключений (типа try-throw-catch). Более простые варианты всегда имеют грабли или сильно неэффективны, а если расширять функциональность до полного подавления граблей, то в итоге почти та же схема обработки по сути и получится.
@@dmitryvodolazsky проверять double на ноль - надо быть альтернативно одаренным. А когда среднее или СКО считаешь - вполне рабочая схема. И не надо к мелочам докапываться, я указал принцип: даже там где нуля быть не должно, он может появиться
ахахах) Даже если знаменатель - константа, отличная от 0?
Вот это я понимаю дебагинг кода)
Интересный контент. Спасибо за выпуск. Не знал про такую аварию.
Классный выпуск, почаще бы такое, очень интересно
Спасибо за видео! Было очень интересно)
Выпуск просто огонь, амперкины вы как всегда отличная команда.
Кадры из ксп вставил, это мы одобряем
Ксп это что ? Подскажи если не сложно. Поиск по фото херню выдает индийскую. Не смотрел, интересно.
@@Vlad_BY Игра Kerbal space program
Ещё один рассказ, где все произошло из-за переполнения переменной. Топ1 баг!
А как весело отлавливать такие ошибки. Спасибо производителям потребительского железа за вагон оперативки. Можно без зазрения совести везде использовать double
@@user-bo7yz7wb1h однажды и дабл может переполниться :-Р
@@user-bo7yz7wb1h а потом калькулятор гиг ОЗУ жрёт
Спасибо за видео.Коммент в поддержку!
5:21 - MHZ..., а не миллиГерц
Мегагерц
Мхз мегагерц
Отличный видос жду еще таких)
нужно подобные ошибки в курс собирать и преподавать в университете, с более подробным разбором, а курс назвать, как не стать говнокодером
неплохо неплохо)) KSP одобряем)
Только вот в этом примере, поведение при переполнении это скорее особенность поведения языка, а не процессора. Точнее даже компиляторат
Попробуй тот же раст, и там будет совсем все по другому
даже в C# для проверки переполнения есть `checked`
@@INshadow08 ещё один недоязык
Я один подумал что 5G это то самое 5G?
Ага
Да 😂
За KSP респект конечно
Интересно Ариан 6 :) тоже сразу запустят с полезным грузом "Ну всё-же работало на 5 версии".
Ура! Компьютер убийца продолжается!
Спасибо! Теперь есть то что смотреть перед сном
Я на кружке делаю всяких роботов на конкурсы.
Мне дали задание: перенести программу с одного робота с какой-то штукой на подобие радара на другого. Я перенёс без изменений, ведь на моём она работала нормально. Но я не учёл, что у меня стоит Ардуино Уно, а там- Мини. Естественно там по-другому были воткнуты провода. Я включаю робота с новой программой, начинаю им управлять. Левая и правая гусеница работали нормально. Потом я начинаю вращать"Радар"... Робот начал хрустеть и передачу на радаре разломало к чёрту.
Вот ещё один урок: всегда проверяйте пины на платах, пожалуйста.
Думал сначала, про аппарат для лучевой терапии расскажешь, про ракету не слышал ранее, благодарю.
уже было )
оп, на 5 минуте Амперка говорит 12-33 мегагерц а обозначил в ролике как mHz, то есть милигерцы. Ай-яй-яй, вот из-за таких вот мелочей ракеты и разбиваются. ))))
Блин. Точно. Столько раз смотрел и не видел...
Безусловно лайк!
классный разбор.
2:03 дорогой же фейерверк вышел.
Очень интересно 👍
Можем спать спокойно, Арнольд грохнул Скайнет )
Поправка: Скайнет выбрал не тот тип переменной и грохнулся сам.
@@chaoskrl В этой вселенной Скайнет сделал харакири)
@@ssh7437 Этот точно сам развалился. Имел фатальный недостаток и кучу мелких багов.
@@ssh7437 Не, мой батя в конце 70-х это предсказывал. Только, поскольку был глубоко советским человеком, смотрел на это под другим углом, что мол "маленькая штучка моё" постепенно одерживала верх над идеей коммунизма.
@@ssh7437 да он и цитировал эту фразу "маленькая штучка моё" из какой-то советской классики. В этих "окнах" я так понял, что это лженаука какая-то, но у СССР были и чисто объективные причины, чтобы развалиться... Например, гиперцентрализация, которая сейчас и у ГОРФ есть.
Подскажите пожалуйста кадры из какого фильма использовались в моменте с 9:13
Вся суть ошибки
Машины должны быть безопасны для человека.
Переполнение буфера для переменной:
Машины должны убивать человека!
Беспилотные такси - игра в рулетку(с одним боевым патроном)
Леха, мы не эту ракету ждали! Но всеравно интересно. Есть ещё идеи по вжмванию после большого П?
Лехина ракета обошлась дешевле…
А если не видно разницы..)
Из-за казалосьбы такой мелочи. Познавательно 😊👍
Технобайки. Лучшая рубрика 👍👍👍👍👍❗❗❗❗👍👍❗❗❗
Читал байки про программистов еще во времена FIDOnet в районе 1996-2000 годов. Эта история там была. И еще несколько историй, в которых ошибки программистов привели к различным потерям. Найти бы тот текстик...
огонь выпуск
Лайк за нарезку из KSP)) порадовал
Спасибо за ксп амперка!... Кстати для ксп есть адд-он Kos он добавляет возможность программировать корабли на бэйсике
Чтоб "Протон" совершил подобный кульбит, так серьёзно не заморачивались - хватило пару штифтов спилить при установке датчиков угловой скорости ))
1:33 ksp
инфа стухла лет 20 тому назад. расскажи про новые баги-убийцы!
При использовании С++ можно включить что при даунсазинге автомачтиески проверяются границы и выдается эксепшн
Привет создателям софта для Боинг 737MAX
Там нету так таковой ошибки, код работает так как написан без багов, там как бы сказать... Недоработка.
@@Noname-fl4cf От этого только страшнее. 2 самолета упало, погибло 315 человек.
Там другое - там знак обратной связи поменялся на противоположный, и девайс ушел носом в землю, а должен был наоборот. Все-таки программерам таких вещей ДОЛЖНЫ читать основы ТАР, даже если это индусы.
@@alexlinde6695 там просто был неисправен датчик угла атаки, а великие программисты из боинга не учли ситуацию что он может быть неисправен и давать неверные данные. При этом ПО брало данные только с 1го датчика, даже если остальные были исправны.
Датчик показывал что нос задрат - ПО пыталось его опустить, хотя это было не так. А пилоты не предприняли неправильные действия по устранению проблемы + это был в обоих случаях взлет и как следствие низкая высота
круто , продолжай.....
Так в чем был баг? Это из разряда - пришел баг с работы домой, весь грустный грустный. Жена спрашивает его, что случилось, дорогой? А баг и отвечает - ты прикинь, эти уроды что придумали... Издали какие то документы... Теперь я не баг... Я фича..
Статический анализатор кода мог бы найти эту ошибку
Так у нас почти так же недавно ракету угробили при запуске с Восточного. Код ориентации исправно работал на Байконуре десятки лет. А запустили с восточного - стал крутить ракету не в ту сторону. Детская ошибка в коде стоила много лямов.
запуск...
установка тяги двигателей 80...
высота: 1000 м
Ошибка совместимости!
Переполнение переменной!
Диагностика
установка положение ракеты: 90*
Аварийное завершение работы 1 модуля...
Аварийное завершение работы 2 модуля...
7:40 Бедные кербонафты, остались на орбите Кербина навсегда.
! Ждём от Амперки - сборка простого процессора на простых транзисторах !
Ну,если франция,то Ариан,а не эриан :) у французов все по-человечески.
legacy код - он такой. когда его писали были свои ТЗ и ограничения, т.е. условия, в которых он работает.
может ввести в заблуждение, что он будет всегда работать во всех условиях, если он долго эксплуатировался и всегда работал корректно (в пределах условий ТЗ).
на эти грабли многие наступают.
Вот что значит говнокод на 500 миллиардов зелёных!
1.Ракета 💥
2.Ученые😵
3.Увидели говнокод 🗿
При том что программист наверняка сделал всё по тз. Там наверное так и написано было "нужно 16 бит". Вот к чему приводит, когда люди делают отдельную часть и им не дают даже думать где и как она будет находится в большом проекте. А ведь к этому стремится наше общество. Каждая пчёлка делает свою маленькую работу не понимая куда весь рой движется. Что то политикой запахло. Ну да ладно.
Технобайки это конечно хорошо, но где рука терминатора? А где законченный проект робота с Интро? Обещали закончить.
А вообще может устроите конкурс кто лучше сделает данного робота?(награду естественно вам придумать)
Ну так C и С++ не контролируют неявное преобразование типа, оно всё равно будет сведено к явному на этапе компиляции, разве что для отдельных случаев будет выдан варнинг у некоторых компиляторов в некоторых случаях (также из-за перегрузки функций C++ рекомендуется следить за типом операндов операций и аргументов функций вручную, иначе может быть вызвана не та функция с тем же именем). Явное преобразование - обычная операция в C и С++, её корректность не контролируется ни во время компиляции, ни во время исполнения. Переполнение - не совсем корректный термин для операции преобразования плавающего в целое. У плавающего своё переполнение, у целого своё. Конкретно при преобразовании double в uint16, вначале произойдёт преобразование в самое длинное целое (long например), а затем старшие биты будут просто отброшены. Вообще именно так (отброс старших битов) и может завершится самая обычная операция с целым (мультипликативная, аддитивная). И в стандарте многих языков это не является ошибкой! Целочисленное переполнение часто не контролируется вообще. Можно настроить компилятор на генерацию исключения отдельно. (В тоже время плавающее переполнение - всегда ошибка.) Есть ещё способ преобразовать плавающее в целое - изъятие мантиссы с отбросом экспоненты по маске в побитовой операции из союза (union) в составе double и 64-битного целого. Но такой способ не является универсальным, ибо нужно точно знать низкоуровневый формат плавающего, а он в стандарте языка не задан и варьируется у ЭВМ. Здесь вообще невозможно переполнение, по сути - это тот же отброс битов.
Поэтому для корректного преобразования рекомендуется воспользоваться функциями, часто самописными, чтобы гарантировать обработку ошибок.
Что же до неконтролируемости целочисленного переполнения, то оно бывает и полезно. А именно - такое поведение в мультипликативной операции есть по сути аж две операции подряд - умножение и остаток от деления на (длину максимального целого + 1). И в 32-битных генераторах псевдослучайных чисел формула R[i]=(R[i-1]*M)%L сокращается до R[i]=R[i-1]*M, где R[] - последовательность псевдослучайных целых, M - множитель последовательности, L - длина цикла последовательности (константы L и M подбираются особо и зависят друг от друга, для L=2^31 существует не так много приемлемых M, одно из которых, 65539, даёт в прошлом весьма распространённый алгоритм RANDU).
Интересно)
Крутое видео я тебя смотрю уже 2 года так держать
11:00 Чтобы компилятор выдавал предупреждения о "стремных" преобразованиях, нужно включить расширенные предупреждения в части преобразований. В gcc за это отвечает опция -Wconversion . В данном случае gcc честно предупреждает, что здесь результат преобразования может оказаться неожиданным.
Да и вообще стоит включать -Wextra и -pedantic для пущей строгости. )
мне вообще интересно зачем он gcc использовал, есть же прям предназначеный для винды msvc...
Было бы символичнее, если бы не поместившееся число затёрло адрес возврата на стеке
Аххаах видос серьёзный но геймплей где балуются в KSP
Ничего не понятно. Но очень интересно 😀спасибо
Привет из Ялты у меня такая же футболка ))))))
Очень странно, почему они не использовали MISRA.
Решили, что авось пронесёт?
Одного не понимать - у компутера должна была быть изначальная информация о траектории и при получении неверной информации за короткий промежуток времени посчитать ее верной с учетом скорости массы и инерции?
Сдается этих параметров в принципе не было... как и многих других...
4:10 Я не видел не разу не на одном смартфоне ни одного гироскопа, только датчики притяжения.
1:30 KSP привет)
... и используйте правильные инструменты разработки с зависимыми типами ,верификацией кода и проч. :)
я когда переписываю свою программу часто использую куски кода старой, как итог надо переписывать еще раз
в этом замешен ИИ или иллюминаты... стоп... они же заодно!
«Техника попала на тот свет»! Новое слово Амперки в теологии ))
лайк за Kerbal Space Programm ))))
А зачем Kerbal space program на задний план лепить? Кто не знает, загуглите, это может перевернуть вашу жизнь)
То чувство когда смотришь это видео в перерыве между написанием тестов)
О Лёха вернулся
Расскажи как падают самолеты с четырехкратным резервированием вычислительных блоков. Из за плохих контактов.
Или из за чего происходят аварии под управлением автопилотов.
Симуляцию делали в Кербал?)
О! та история про ускоритель!
Громкое название - "Компьютер - убийца"
Ну так дело было не в бобине...
Тут скорее "Инженеры - тупицы".
Кликбейт) Но вообще я бы сказала, что мне всё равно очень нравится рубрика, ибо меня мотивирует, что другие прогеры и инженеры тож косячат) Помогает не впадать в депрессняк, если у меня что-то не получается
Собственно, к счастью, по-другому компьютеры пока убивать не могут
@@IreneRadix ну нееееее ruclips.net/video/d3ENbjUTv0I/видео.html и ruclips.net/video/G-TdIFOHcWY/видео.html
@@AmperkaRuOfficial , смотрела. Там тоже ошибки программистов, хотя последствия страшнее
P.S. Естественно, программировать что-то важное типа компов на самолётах, ракетах, медицинских приборах и.т.п. я не пойду
Не по колокольчику а по зову сердца)))
1:55 - физика ksp)))
Кто понял тот понял...
кэрбал спэйс программм!!!8:00
Вот почему мне запуски любых ракет кажется как начало 3 мировой...
Так переполнение это же основа вычитания через сложение обратным кодом, там еще и флаг есть переполнения для тех кому надо
Ещё очень интересный компьютер-убийца - первопричина катастрофы ИЛ-76 на Камчатке в 1996 году. Там штурман по ошибке ввёл 153 широту вместо 53. Насколько я помню детальный отчёт, компьютер не сообщил об ошибочном вводе, а просто проглотил ведущую единицу, не выводя её на дисплей, так как не хватало разрядности. В результате у штурмана не было возможности визуально проконтролировать такой ошибочный ввод. Навигационная система также не проверила широту на правильность, и повела самолёт не туда.
ну, если программа позволила ввести широту 153град, то респект кодерам ...