Ariane-5G - как потерять миллионы всего за 40 секунд. Компьютер убийца.
Привет друзья. В этом видео мы расскажем историю ещё одного компьютера убийцы, на этот раз ошибка в коде уничтожила только технику. Но вот стоимость этой аварии была просто огромной.
- Заходите в наш магазин и покупайте 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 назад, в каком-то компьютерном журнале. Заголовок был, что-то "Самая дорогая программная ошибка". Спасибо, освежил память.
Тоже программист и такие ситуации случаются очень часто: когда видишь ошибку и понимаешь, что код на все 100% должен работать правильно, но он почему-то этого не делает.
А почему такая уверенность, что он должен работать? Вы же помните, что у вас 16-bit и есть пределы. Если посмотреть на ситуацию в целом со стороны, то я бы никогда не посчитал полностью универсальным код, который рассчитан для работы при отклонениях не на все 360x180 градусов. Я бы добавил туда комментарий: # проверь штатный угол отклонения ракеты перед переносом кода. Ладно бы ещё величина переменной была бесконечной: например, высота орбиты в метрах, тут уж точно можно только взять некоторый запас, дальше которого ракета физически улететь не сможет, и записать в комментарии в коде, что при переносе его на новую ракету нужно проверять, не увеличить ли битность переменной согласно новым техническим характеристикам.
@@goodless2988 комментарии наше всё
@@goodless2988 Вы явно НЕ программист. Во первых - вы уже знаете проблему, поэтому и советуете. Во вторых - проблема не в коде, а в отказе от тестов перед запуском. В третьих - вот код ошибки( переполнение в 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-й версии, он не был нужен.
Жду когда ты соберёшь процессор. В оном из роликов ты обещал попробовать. Спасибо за 300 лайков.
+
+
Согласен но у меня видео вышло 15 мин назад а твой комментарий 20 мин назад. Как?
На макетке из транзисторов?
Как он тебе его соберет
Отличный выпуск Выпуски на ракетную тематику усиливают желание увидеть новую ракету в вашем исполнении
мне во время просмотра пришло письмо от гикбрейнса!
Неее пусть соберут генератор водорода кислорода работающий на солнечных Панелях.
Кстати норм заход для рекламы курсов тестировщиков был бы (:
Или для KSP 2
Любишь смотреть рекламу? 🤦🏻♂️
@@Hbyh66_ug67 Нет, просто отмечает подходящее для неё место в шуточной форме
1:29 лайк за KSP)
Как раз собирался это писать. Лайк.
5:20 вместо МегаГерц (MHz) написано МиллиГерц (mHz). Монтажеру привет.
мощный проц)) надежный как швейцарские часы))
Ошибку устранили... вместе с тем, кто её допустил)
Мне кажется, такое только в нашей необъятной практикуют. Там все таки человеческий фактор сработал. Много, очень много людей допустило ошибку...
У боинга вроде была история, когда была плавающая проблема в софте, которая отлавливалась только в полете, создавая очень стремную ситуацию для всех кто на борту. Её долго не могли пофиксить. В конце концов организовали демо полет для инженеров, которые бысренько пофиксили её, когда почуствовали на себе ее последствия)
Надеюсь, устранили окончательно, т.е. сделали возможной работу на любых углах отклонения вплоть до 180° (просто потому что здесь физически существует предел этого параметра)? А то окажется, что следующая ракета летит ещё круче и переменная снова не рассчитана на такие значения.
7:40 аааааааа! Кто так строит? Лёха ты же инжинер.
он так видит.
@@Rodogor_Hoenhaym но это не оправдание. Строить надо по нормальному.
@@user-sm9ro4zd2b нормальный инженёр, нормально построил.
Да ладно гироскопов побольше и как струна полетит)
@@robert1330 это гиродины.
Ну, это просто супер! Рассказ про чью-то маленькую ошибку, которая обошлась очень дорого, и Антон на первых же кадрах говорит - знакомьтесь, Ариан-5, а показывает - Ариан-6 !!! Браво! )
16 бит хватит каждому
Ну что, битами померяемся?🤣
Мне и 8 заголову
а 512 битный процессор в 83 году на ВМФ СССР не хочешь?
@@gACZXC6ASDASD юзаю 4x битный 😎👍
@@user-su4is5je7y а поподробнее можно?
А меня научили: перед делением в коде проверь знаменатель на ноль, даже если нуля там не будет никогда в жизни. А вот если не проверишь - то ноль обязательно проскочит.
А это не сильно нагрузит систему?
@@rawil6751 деление грузит намного сильнее, чем проверка условия
Угу, а потом окажется, что не ноль, но достаточно малое число в знаменателе -- тоже даёт переполнение. И твоя проверка была ни о чём. Полностью корректная работа с ошибками возможна только при реализации подсистемы обработки исключений (типа try-throw-catch). Более простые варианты всегда имеют грабли или сильно неэффективны, а если расширять функциональность до полного подавления граблей, то в итоге почти та же схема обработки по сути и получится.
@@dmitryvodolazsky проверять double на ноль - надо быть альтернативно одаренным. А когда среднее или СКО считаешь - вполне рабочая схема. И не надо к мелочам докапываться, я указал принцип: даже там где нуля быть не должно, он может появиться
ахахах) Даже если знаменатель - константа, отличная от 0?
"Покрывайте свой код тестами", самое важное в этом видео.
Все ведь тестами не покрыть, производительность упадет. Там и так овер дофига параметров нужно вычислять.
@@ZALMAN_AKILOV вообще то здесь речь идет об интеграционном тестировании, которое выполняется перед релизом продукта, а не проверках в рантайме. Они никак не влияют на производительность, потому что существуют отдельно от продукта.
@@ZALMAN_AKILOV Производительность упадёт... гм... во время тестирования. Какая неожиданность
@@Uni-Coder спасибо огромное, учту в будущем, а то пишу и не тестирую совсем, вот я дэбил
не экономьте на быдлокодерах
Очень здорово, что не просто рассказал, но и наглядно показал как ведёт себя эта "особенность" в компиляторе.
Мне аж захотелось в KSP поиграть
да кстати
Мне тоже
Классный выпуск, почаще бы такое, очень интересно
Интересный контент. Спасибо за выпуск. Не знал про такую аварию.
Спасибо! Теперь есть то что смотреть перед сном
Спасибо за видео! Было очень интересно)
Вот это я понимаю дебагинг кода)
Как у классика поётся: нельзя обосраться, но мы обосрались...
неплохо неплохо)) KSP одобряем)
нужно подобные ошибки в курс собирать и преподавать в университете, с более подробным разбором, а курс назвать, как не стать говнокодером
Спасибо за видео.Коммент в поддержку!
Выпуск просто огонь, амперкины вы как всегда отличная команда.
Отличный видос жду еще таких)
Ещё один рассказ, где все произошло из-за переполнения переменной. Топ1 баг!
А как весело отлавливать такие ошибки. Спасибо производителям потребительского железа за вагон оперативки. Можно без зазрения совести везде использовать double
@@user-bo7yz7wb1h однажды и дабл может переполниться :-Р
@@user-bo7yz7wb1h а потом калькулятор гиг ОЗУ жрёт
Кадры из ксп вставил, это мы одобряем
Ксп это что ? Подскажи если не сложно. Поиск по фото херню выдает индийскую. Не смотрел, интересно.
@@Vlad_BY Игра Kerbal space program
Только вот в этом примере, поведение при переполнении это скорее особенность поведения языка, а не процессора. Точнее даже компиляторат Попробуй тот же раст, и там будет совсем все по другому
даже в C# для проверки переполнения есть `checked`
@@INshadow08 ещё один недоязык
Ура! Компьютер убийца продолжается!
За KSP респект конечно
5:21 - MHZ..., а не миллиГерц
Мегагерц
Мхз мегагерц
Безусловно лайк!
Очень интересно 👍
Интересно Ариан 6 :) тоже сразу запустят с полезным грузом "Ну всё-же работало на 5 версии".
Лайк за нарезку из KSP)) порадовал
круто , продолжай.....
Технобайки. Лучшая рубрика 👍👍👍👍👍❗❗❗❗👍👍❗❗❗
Можем спать спокойно, Арнольд грохнул Скайнет )
Поправка: Скайнет выбрал не тот тип переменной и грохнулся сам.
@@chaoskrl В этой вселенной Скайнет сделал харакири)
@@ssh7437 Этот точно сам развалился. Имел фатальный недостаток и кучу мелких багов.
@@ssh7437 Не, мой батя в конце 70-х это предсказывал. Только, поскольку был глубоко советским человеком, смотрел на это под другим углом, что мол "маленькая штучка моё" постепенно одерживала верх над идеей коммунизма.
@@ssh7437 да он и цитировал эту фразу "маленькая штучка моё" из какой-то советской классики. В этих "окнах" я так понял, что это лженаука какая-то, но у СССР были и чисто объективные причины, чтобы развалиться... Например, гиперцентрализация, которая сейчас и у ГОРФ есть.
классный разбор.
огонь выпуск
1:33 ksp
Подскажите пожалуйста кадры из какого фильма использовались в моменте с 9:13
Я один подумал что 5G это то самое 5G?
Ага
Да 😂
Я на кружке делаю всяких роботов на конкурсы. Мне дали задание: перенести программу с одного робота с какой-то штукой на подобие радара на другого. Я перенёс без изменений, ведь на моём она работала нормально. Но я не учёл, что у меня стоит Ардуино Уно, а там- Мини. Естественно там по-другому были воткнуты провода. Я включаю робота с новой программой, начинаю им управлять. Левая и правая гусеница работали нормально. Потом я начинаю вращать"Радар"... Робот начал хрустеть и передачу на радаре разломало к чёрту. Вот ещё один урок: всегда проверяйте пины на платах, пожалуйста.
Думал сначала, про аппарат для лучевой терапии расскажешь, про ракету не слышал ранее, благодарю.
уже было )
Леха, мы не эту ракету ждали! Но всеравно интересно. Есть ещё идеи по вжмванию после большого П?
Лехина ракета обошлась дешевле…
А если не видно разницы..)
Не по колокольчику а по зову сердца)))
О Лёха вернулся
2:03 дорогой же фейерверк вышел.
Привет создателям софта для Боинг 737MAX
Там нету так таковой ошибки, код работает так как написан без багов, там как бы сказать... Недоработка.
@@Noname-fl4cf От этого только страшнее. 2 самолета упало, погибло 315 человек.
Там другое - там знак обратной связи поменялся на противоположный, и девайс ушел носом в землю, а должен был наоборот. Все-таки программерам таких вещей ДОЛЖНЫ читать основы ТАР, даже если это индусы.
@@alexlinde6695 там просто был неисправен датчик угла атаки, а великие программисты из боинга не учли ситуацию что он может быть неисправен и давать неверные данные. При этом ПО брало данные только с 1го датчика, даже если остальные были исправны. Датчик показывал что нос задрат - ПО пыталось его опустить, хотя это было не так. А пилоты не предприняли неправильные действия по устранению проблемы + это был в обоих случаях взлет и как следствие низкая высота
Спасибо за ксп амперка!... Кстати для ксп есть адд-он Kos он добавляет возможность программировать корабли на бэйсике
Вся суть ошибки Машины должны быть безопасны для человека. Переполнение буфера для переменной: Машины должны убивать человека!
Беспилотные такси - игра в рулетку(с одним боевым патроном)
оп, на 5 минуте Амперка говорит 12-33 мегагерц а обозначил в ролике как mHz, то есть милигерцы. Ай-яй-яй, вот из-за таких вот мелочей ракеты и разбиваются. ))))
Блин. Точно. Столько раз смотрел и не видел...
! Ждём от Амперки - сборка простого процессора на простых транзисторах !
Где видео про float?
Из-за казалосьбы такой мелочи. Познавательно 😊👍
Интересно)
запуск... установка тяги двигателей 80... высота: 1000 м Ошибка совместимости! Переполнение переменной! Диагностика установка положение ракеты: 90* Аварийное завершение работы 1 модуля... Аварийное завершение работы 2 модуля...
я когда переписываю свою программу часто использую куски кода старой, как итог надо переписывать еще раз
Чтоб "Протон" совершил подобный кульбит, так серьёзно не заморачивались - хватило пару штифтов спилить при установке датчиков угловой скорости ))
Вот что значит говнокод на 500 миллиардов зелёных! 1.Ракета 💥 2.Ученые😵 3.Увидели говнокод 🗿
При том что программист наверняка сделал всё по тз. Там наверное так и написано было "нужно 16 бит". Вот к чему приводит, когда люди делают отдельную часть и им не дают даже думать где и как она будет находится в большом проекте. А ведь к этому стремится наше общество. Каждая пчёлка делает свою маленькую работу не понимая куда весь рой движется. Что то политикой запахло. Ну да ладно.
Симуляцию делали в Кербал?)
Ничего не понятно. Но очень интересно 😀спасибо
Статический анализатор кода мог бы найти эту ошибку
Крутое видео я тебя смотрю уже 2 года так держать
Технобайки это конечно хорошо, но где рука терминатора? А где законченный проект робота с Интро? Обещали закончить. А вообще может устроите конкурс кто лучше сделает данного робота?(награду естественно вам придумать)
лайк за Kerbal Space Programm ))))
Так у нас почти так же недавно ракету угробили при запуске с Восточного. Код ориентации исправно работал на Байконуре десятки лет. А запустили с восточного - стал крутить ракету не в ту сторону. Детская ошибка в коде стоила много лямов.
Расскажи как падают самолеты с четырехкратным резервированием вычислительных блоков. Из за плохих контактов. Или из за чего происходят аварии под управлением автопилотов.
Разве запуски не застрахованы?
«Техника попала на тот свет»! Новое слово Амперки в теологии ))
То чувство когда смотришь это видео в перерыве между написанием тестов)
Ну так 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).
legacy код - он такой. когда его писали были свои ТЗ и ограничения, т.е. условия, в которых он работает. может ввести в заблуждение, что он будет всегда работать во всех условиях, если он долго эксплуатировался и всегда работал корректно (в пределах условий ТЗ). на эти грабли многие наступают.
Очень странно, почему они не использовали MISRA. Решили, что авось пронесёт?
Было бы символичнее, если бы не поместившееся число затёрло адрес возврата на стеке
Так в чем был баг? Это из разряда - пришел баг с работы домой, весь грустный грустный. Жена спрашивает его, что случилось, дорогой? А баг и отвечает - ты прикинь, эти уроды что придумали... Издали какие то документы... Теперь я не баг... Я фича..
Леша, ты на 3d today fest поедешь?
Простите, а сколько там была тактовая частота у MC68020? От 12 до 33 МЕГАгерц (MHz) или МИЛИгерц (mHz)? Казалось бы, всего-то другой регистр - но разница 9 порядков
мегагерц
@@user-mazuta, но на 5:09 на экране отображены именно милигерцы (mHz)
инфа стухла лет 20 тому назад. расскажи про новые баги-убийцы!
лайк за KSP
При использовании С++ можно включить что при даунсазинге автомачтиески проверяются границы и выдается эксепшн
Коммент в поддержку!
11:00 Чтобы компилятор выдавал предупреждения о "стремных" преобразованиях, нужно включить расширенные предупреждения в части преобразований. В gcc за это отвечает опция -Wconversion . В данном случае gcc честно предупреждает, что здесь результат преобразования может оказаться неожиданным. Да и вообще стоит включать -Wextra и -pedantic для пущей строгости. )
мне вообще интересно зачем он gcc использовал, есть же прям предназначеный для винды msvc...
Ну,если франция,то Ариан,а не эриан :) у французов все по-человечески.
Читал байки про программистов еще во времена FIDOnet в районе 1996-2000 годов. Эта история там была. И еще несколько историй, в которых ошибки программистов привели к различным потерям. Найти бы тот текстик...
Одного не понимать - у компутера должна была быть изначальная информация о траектории и при получении неверной информации за короткий промежуток времени посчитать ее верной с учетом скорости массы и инерции? Сдается этих параметров в принципе не было... как и многих других...
Как-то сразу подумал, что ошибка из-за отсутствия тестов. Был только вопрос ошибка в железа или в совте?
Круто
Аххаах видос серьёзный но геймплей где балуются в KSP
17 Секунд, Я не первый не второй, но зато патпещик твой!!!
почаще бы такое
Громкое название - "Компьютер - убийца" Ну так дело было не в бобине... Тут скорее "Инженеры - тупицы".
Кликбейт) Но вообще я бы сказала, что мне всё равно очень нравится рубрика, ибо меня мотивирует, что другие прогеры и инженеры тож косячат) Помогает не впадать в депрессняк, если у меня что-то не получается
Собственно, к счастью, по-другому компьютеры пока убивать не могут
@@IreneRadix ну нееееее kzhead.info/sun/l5d-fsaijIasY4E/bejne.html и kzhead.info/sun/epGNlK1-hnqZipE/bejne.html
@@AmperkaRuOfficial , смотрела. Там тоже ошибки программистов, хотя последствия страшнее P.S. Естественно, программировать что-то важное типа компов на самолётах, ракетах, медицинских приборах и.т.п. я не пойду
9:20, что за фильм, не могу название вспомнить?
Армагеддон
О! та история про ускоритель!
Дорогой фейерверк ))