Покрывайте код тестами. Покрывайте код тестов тестами. Покрывайте код тестов тестов тестами... (спустя несколько тысяч итераций) * переполнение стека *
Сюда нельзя вставить изображение, но думаю что все видели картинки из серии «unit tests passed, integration failed». И здесь тоже, отдельно взятые тесты не помогли бы совсем, от слова «никак». А так, вообще говоря, если для тестов нужны свои тесты, то все эти тесты написаны неправильно.
Кстати я вот буквально недавно думал что чем больше ты масштабируешь и уточняешь тесты, тем больше они начинают походить на копию приложения, которое покрывается тестами. Потому что я уже не знаю что сложнее - эндпоинты на беке который я тестирую, или интерсепторы которые я всё больше усложняю в сайпресе.
Тоже программист и такие ситуации случаются очень часто: когда видишь ошибку и понимаешь, что код на все 100% должен работать правильно, но он почему-то этого не делает.
А почему такая уверенность, что он должен работать? Вы же помните, что у вас 16-bit и есть пределы. Если посмотреть на ситуацию в целом со стороны, то я бы никогда не посчитал полностью универсальным код, который рассчитан для работы при отклонениях не на все 360x180 градусов. Я бы добавил туда комментарий: # проверь штатный угол отклонения ракеты перед переносом кода. Ладно бы ещё величина переменной была бесконечной: например, высота орбиты в метрах, тут уж точно можно только взять некоторый запас, дальше которого ракета физически улететь не сможет, и записать в комментарии в коде, что при переносе его на новую ракету нужно проверять, не увеличить ли битность переменной согласно новым техническим характеристикам.
@@_Goodless Вы явно НЕ программист. Во первых - вы уже знаете проблему, поэтому и советуете. Во вторых - проблема не в коде, а в отказе от тестов перед запуском. В третьих - вот код ошибки( переполнение в 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-й версии, он не был нужен.
Ну, это просто супер! Рассказ про чью-то маленькую ошибку, которая обошлась очень дорого, и Антон на первых же кадрах говорит - знакомьтесь, Ариан-5, а показывает - Ариан-6 !!! Браво! )
У боинга вроде была история, когда была плавающая проблема в софте, которая отлавливалась только в полете, создавая очень стремную ситуацию для всех кто на борту. Её долго не могли пофиксить. В конце концов организовали демо полет для инженеров, которые бысренько пофиксили её, когда почуствовали на себе ее последствия)
Надеюсь, устранили окончательно, т.е. сделали возможной работу на любых углах отклонения вплоть до 180° (просто потому что здесь физически существует предел этого параметра)? А то окажется, что следующая ракета летит ещё круче и переменная снова не рассчитана на такие значения.
@@jetspaser5935 к сожалению, нет. Компания боинг частенько практикует такое, когда кто-то заявляет о сбоях и о другой информации, которую не должен знать мир (Чтобы не начались суды и разбирательства).
@@ZALMAN_AKILOV вообще то здесь речь идет об интеграционном тестировании, которое выполняется перед релизом продукта, а не проверках в рантайме. Они никак не влияют на производительность, потому что существуют отдельно от продукта.
А меня научили: перед делением в коде проверь знаменатель на ноль, даже если нуля там не будет никогда в жизни. А вот если не проверишь - то ноль обязательно проскочит.
Угу, а потом окажется, что не ноль, но достаточно малое число в знаменателе -- тоже даёт переполнение. И твоя проверка была ни о чём. Полностью корректная работа с ошибками возможна только при реализации подсистемы обработки исключений (типа try-throw-catch). Более простые варианты всегда имеют грабли или сильно неэффективны, а если расширять функциональность до полного подавления граблей, то в итоге почти та же схема обработки по сути и получится.
@@dmitryvodolazsky проверять double на ноль - надо быть альтернативно одаренным. А когда среднее или СКО считаешь - вполне рабочая схема. И не надо к мелочам докапываться, я указал принцип: даже там где нуля быть не должно, он может появиться
Я на кружке делаю всяких роботов на конкурсы. Мне дали задание: перенести программу с одного робота с какой-то штукой на подобие радара на другого. Я перенёс без изменений, ведь на моём она работала нормально. Но я не учёл, что у меня стоит Ардуино Уно, а там- Мини. Естественно там по-другому были воткнуты провода. Я включаю робота с новой программой, начинаю им управлять. Левая и правая гусеница работали нормально. Потом я начинаю вращать"Радар"... Робот начал хрустеть и передачу на радаре разломало к чёрту. Вот ещё один урок: всегда проверяйте пины на платах, пожалуйста.
Только вот в этом примере, поведение при переполнении это скорее особенность поведения языка, а не процессора. Точнее даже компиляторат Попробуй тот же раст, и там будет совсем все по другому
А как весело отлавливать такие ошибки. Спасибо производителям потребительского железа за вагон оперативки. Можно без зазрения совести везде использовать double
Так в чем был баг? Это из разряда - пришел баг с работы домой, весь грустный грустный. Жена спрашивает его, что случилось, дорогой? А баг и отвечает - ты прикинь, эти уроды что придумали... Издали какие то документы... Теперь я не баг... Я фича..
@@ssh7437 Не, мой батя в конце 70-х это предсказывал. Только, поскольку был глубоко советским человеком, смотрел на это под другим углом, что мол "маленькая штучка моё" постепенно одерживала верх над идеей коммунизма.
@@ssh7437 да он и цитировал эту фразу "маленькая штучка моё" из какой-то советской классики. В этих "окнах" я так понял, что это лженаука какая-то, но у СССР были и чисто объективные причины, чтобы развалиться... Например, гиперцентрализация, которая сейчас и у ГОРФ есть.
11:00 Чтобы компилятор выдавал предупреждения о "стремных" преобразованиях, нужно включить расширенные предупреждения в части преобразований. В gcc за это отвечает опция -Wconversion . В данном случае gcc честно предупреждает, что здесь результат преобразования может оказаться неожиданным. Да и вообще стоит включать -Wextra и -pedantic для пущей строгости. )
Там другое - там знак обратной связи поменялся на противоположный, и девайс ушел носом в землю, а должен был наоборот. Все-таки программерам таких вещей ДОЛЖНЫ читать основы ТАР, даже если это индусы.
@@alexlinde6695 там просто был неисправен датчик угла атаки, а великие программисты из боинга не учли ситуацию что он может быть неисправен и давать неверные данные. При этом ПО брало данные только с 1го датчика, даже если остальные были исправны. Датчик показывал что нос задрат - ПО пыталось его опустить, хотя это было не так. А пилоты не предприняли неправильные действия по устранению проблемы + это был в обоих случаях взлет и как следствие низкая высота
legacy код - он такой. когда его писали были свои ТЗ и ограничения, т.е. условия, в которых он работает. может ввести в заблуждение, что он будет всегда работать во всех условиях, если он долго эксплуатировался и всегда работал корректно (в пределах условий ТЗ). на эти грабли многие наступают.
Читал байки про программистов еще во времена FIDOnet в районе 1996-2000 годов. Эта история там была. И еще несколько историй, в которых ошибки программистов привели к различным потерям. Найти бы тот текстик...
оп, на 5 минуте Амперка говорит 12-33 мегагерц а обозначил в ролике как mHz, то есть милигерцы. Ай-яй-яй, вот из-за таких вот мелочей ракеты и разбиваются. ))))
Технобайки это конечно хорошо, но где рука терминатора? А где законченный проект робота с Интро? Обещали закончить. А вообще может устроите конкурс кто лучше сделает данного робота?(награду естественно вам придумать)
Одного не понимать - у компутера должна была быть изначальная информация о траектории и при получении неверной информации за короткий промежуток времени посчитать ее верной с учетом скорости массы и инерции? Сдается этих параметров в принципе не было... как и многих других...
Так у нас почти так же недавно ракету угробили при запуске с Восточного. Код ориентации исправно работал на Байконуре десятки лет. А запустили с восточного - стал крутить ракету не в ту сторону. Детская ошибка в коде стоила много лямов.
запуск... установка тяги двигателей 80... высота: 1000 м Ошибка совместимости! Переполнение переменной! Диагностика установка положение ракеты: 90* Аварийное завершение работы 1 модуля... Аварийное завершение работы 2 модуля...
Ну так 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:45 >Но самое интересное, среди обломков нашли две инерциальные системы навигации. В них хранились логи с траекторией, которая еще не успела улететь на землю. простите, но я так и не понял эту фразу. что означает "логи с траекторией, которая еще не успела улететь на землю"? аналог черного ящика они нашли?
Это как после CodeVisionAVR (в нём переменная INT подразумевает 16 бит) , перешёл на PIC CCS , я бился головой о стену три дня , думая почему не работает программа ....Оказалось что в пик ссs нужно указывать INT8 или INT16...А если не указал то она инт8 )))))))) Этого нигде не было написано .
После того, как первый раз столкнулся с бардаком с размерами дефолтных int итд, взял себе привычку всегда явно с размером указывать, а в тех редких случаях, где именно максимум процессорного слова надо выжать - обвешивать if'ами под разные случаи. Чуть больше писанины, но зато насколько целее нервы! :)
Кликбейт) Но вообще я бы сказала, что мне всё равно очень нравится рубрика, ибо меня мотивирует, что другие прогеры и инженеры тож косячат) Помогает не впадать в депрессняк, если у меня что-то не получается
@@AmperkaRuOfficial , смотрела. Там тоже ошибки программистов, хотя последствия страшнее P.S. Естественно, программировать что-то важное типа компов на самолётах, ракетах, медицинских приборах и.т.п. я не пойду
Ещё очень интересный компьютер-убийца - первопричина катастрофы ИЛ-76 на Камчатке в 1996 году. Там штурман по ошибке ввёл 153 широту вместо 53. Насколько я помню детальный отчёт, компьютер не сообщил об ошибочном вводе, а просто проглотил ведущую единицу, не выводя её на дисплей, так как не хватало разрядности. В результате у штурмана не было возможности визуально проконтролировать такой ошибочный ввод. Навигационная система также не проверила широту на правильность, и повела самолёт не туда.
Эту историю читал лет 12 назад, в каком-то компьютерном журнале. Заголовок был, что-то "Самая дорогая программная ошибка". Спасибо, освежил память.
Проц с ядром:
- системная ошибка, оверхед пула, кернел паник! Помогите!
Логгер:
- я просто запишу это, ок
Логгер: чувак с камерой из мемов
У логгера так то больше и нет задач, кроме как записывания состояния машины
Отличный выпуск
Выпуски на ракетную тематику усиливают желание увидеть новую ракету в вашем исполнении
мне во время просмотра пришло письмо от гикбрейнса!
Неее пусть соберут генератор водорода кислорода работающий на солнечных Панелях.
Покрывайте код тестами. Покрывайте код тестов тестами. Покрывайте код тестов тестов тестами... (спустя несколько тысяч итераций) * переполнение стека *
:)
Жиза)))))
Стэка мозга
Сюда нельзя вставить изображение, но думаю что все видели картинки из серии «unit tests passed, integration failed». И здесь тоже, отдельно взятые тесты не помогли бы совсем, от слова «никак». А так, вообще говоря, если для тестов нужны свои тесты, то все эти тесты написаны неправильно.
Кстати я вот буквально недавно думал что чем больше ты масштабируешь и уточняешь тесты, тем больше они начинают походить на копию приложения, которое покрывается тестами. Потому что я уже не знаю что сложнее - эндпоинты на беке который я тестирую, или интерсепторы которые я всё больше усложняю в сайпресе.
Жду когда ты соберёшь процессор. В оном из роликов ты обещал попробовать.
Спасибо за 300 лайков.
+
+
Согласен но у меня видео вышло 15 мин назад а твой комментарий 20 мин назад. Как?
На макетке из транзисторов?
Как он тебе его соберет
Тоже программист и такие ситуации случаются очень часто: когда видишь ошибку и понимаешь, что код на все 100% должен работать правильно, но он почему-то этого не делает.
А почему такая уверенность, что он должен работать? Вы же помните, что у вас 16-bit и есть пределы. Если посмотреть на ситуацию в целом со стороны, то я бы никогда не посчитал полностью универсальным код, который рассчитан для работы при отклонениях не на все 360x180 градусов. Я бы добавил туда комментарий: # проверь штатный угол отклонения ракеты перед переносом кода.
Ладно бы ещё величина переменной была бесконечной: например, высота орбиты в метрах, тут уж точно можно только взять некоторый запас, дальше которого ракета физически улететь не сможет, и записать в комментарии в коде, что при переносе его на новую ракету нужно проверять, не увеличить ли битность переменной согласно новым техническим характеристикам.
@@_Goodless комментарии наше всё
@@_Goodless Вы явно НЕ программист. Во первых - вы уже знаете проблему, поэтому и советуете. Во вторых - проблема не в коде, а в отказе от тестов перед запуском. В третьих - вот код ошибки( переполнение в 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-й версии, он не был нужен.
Ну, это просто супер! Рассказ про чью-то маленькую ошибку, которая обошлась очень дорого, и Антон на первых же кадрах говорит - знакомьтесь, Ариан-5, а показывает - Ариан-6 !!!
Браво! )
Кстати норм заход для рекламы курсов тестировщиков был бы (:
Или для KSP 2
Любишь смотреть рекламу? 🤦🏻♂️
@@Hbyh66_ug67 Нет, просто отмечает подходящее для неё место в шуточной форме
Очень здорово, что не просто рассказал, но и наглядно показал как ведёт себя эта "особенность" в компиляторе.
5:20 вместо МегаГерц (MHz) написано МиллиГерц (mHz). Монтажеру привет.
мощный проц)) надежный как швейцарские часы))
Ошибку устранили... вместе с тем, кто её допустил)
Мне кажется, такое только в нашей необъятной практикуют. Там все таки человеческий фактор сработал. Много, очень много людей допустило ошибку...
У боинга вроде была история, когда была плавающая проблема в софте, которая отлавливалась только в полете, создавая очень стремную ситуацию для всех кто на борту. Её долго не могли пофиксить.
В конце концов организовали демо полет для инженеров, которые бысренько пофиксили её, когда почуствовали на себе ее последствия)
Надеюсь, устранили окончательно, т.е. сделали возможной работу на любых углах отклонения вплоть до 180° (просто потому что здесь физически существует предел этого параметра)? А то окажется, что следующая ракета летит ещё круче и переменная снова не рассчитана на такие значения.
@@jetspaser5935 к сожалению, нет. Компания боинг частенько практикует такое, когда кто-то заявляет о сбоях и о другой информации, которую не должен знать мир (Чтобы не начались суды и разбирательства).
7:40 аааааааа! Кто так строит? Лёха ты же инжинер.
он так видит.
@@Rodogor_Hoenhaym но это не оправдание. Строить надо по нормальному.
@@ДжекПиронович нормальный инженёр, нормально построил.
Да ладно гироскопов побольше и как струна полетит)
@@robert1330 это гиродины.
1:29 лайк за KSP)
Как раз собирался это писать. Лайк.
Как у классика поётся: нельзя обосраться, но мы обосрались...
"Покрывайте свой код тестами", самое важное в этом видео.
Все ведь тестами не покрыть, производительность упадет. Там и так овер дофига параметров нужно вычислять.
@@ZALMAN_AKILOV вообще то здесь речь идет об интеграционном тестировании, которое выполняется перед релизом продукта, а не проверках в рантайме. Они никак не влияют на производительность, потому что существуют отдельно от продукта.
@@ZALMAN_AKILOV Производительность упадёт... гм... во время тестирования. Какая неожиданность
@@Uni-Coder спасибо огромное, учту в будущем, а то пишу и не тестирую совсем, вот я дэбил
не экономьте на быдлокодерах
16 бит хватит каждому
Ну что, битами померяемся?🤣
Мне и 8 заголову
а 512 битный процессор в 83 году на ВМФ СССР не хочешь?
@@gACZXC6ASDASD юзаю 4x битный 😎👍
@@СашаИванов-у2ц3с а поподробнее можно?
А меня научили: перед делением в коде проверь знаменатель на ноль, даже если нуля там не будет никогда в жизни. А вот если не проверишь - то ноль обязательно проскочит.
А это не сильно нагрузит систему?
@@rawil6751 деление грузит намного сильнее, чем проверка условия
Угу, а потом окажется, что не ноль, но достаточно малое число в знаменателе -- тоже даёт переполнение. И твоя проверка была ни о чём.
Полностью корректная работа с ошибками возможна только при реализации подсистемы обработки исключений (типа try-throw-catch). Более простые варианты всегда имеют грабли или сильно неэффективны, а если расширять функциональность до полного подавления граблей, то в итоге почти та же схема обработки по сути и получится.
@@dmitryvodolazsky проверять double на ноль - надо быть альтернативно одаренным. А когда среднее или СКО считаешь - вполне рабочая схема. И не надо к мелочам докапываться, я указал принцип: даже там где нуля быть не должно, он может появиться
ахахах) Даже если знаменатель - константа, отличная от 0?
Мне аж захотелось в KSP поиграть
да кстати
Мне тоже
Ура! Компьютер убийца продолжается!
Вот это я понимаю дебагинг кода)
Классный выпуск, почаще бы такое, очень интересно
Я на кружке делаю всяких роботов на конкурсы.
Мне дали задание: перенести программу с одного робота с какой-то штукой на подобие радара на другого. Я перенёс без изменений, ведь на моём она работала нормально. Но я не учёл, что у меня стоит Ардуино Уно, а там- Мини. Естественно там по-другому были воткнуты провода. Я включаю робота с новой программой, начинаю им управлять. Левая и правая гусеница работали нормально. Потом я начинаю вращать"Радар"... Робот начал хрустеть и передачу на радаре разломало к чёрту.
Вот ещё один урок: всегда проверяйте пины на платах, пожалуйста.
Вся суть ошибки
Машины должны быть безопасны для человека.
Переполнение буфера для переменной:
Машины должны убивать человека!
Беспилотные такси - игра в рулетку(с одним боевым патроном)
Только вот в этом примере, поведение при переполнении это скорее особенность поведения языка, а не процессора. Точнее даже компиляторат
Попробуй тот же раст, и там будет совсем все по другому
даже в C# для проверки переполнения есть `checked`
@@INshadow08 ещё один недоязык
Ещё один рассказ, где все произошло из-за переполнения переменной. Топ1 баг!
А как весело отлавливать такие ошибки. Спасибо производителям потребительского железа за вагон оперативки. Можно без зазрения совести везде использовать double
@@Евгений-п1л1ъ однажды и дабл может переполниться :-Р
@@Евгений-п1л1ъ а потом калькулятор гиг ОЗУ жрёт
Так в чем был баг? Это из разряда - пришел баг с работы домой, весь грустный грустный. Жена спрашивает его, что случилось, дорогой? А баг и отвечает - ты прикинь, эти уроды что придумали... Издали какие то документы... Теперь я не баг... Я фича..
Спасибо! Теперь есть то что смотреть перед сном
Интересно Ариан 6 :) тоже сразу запустят с полезным грузом "Ну всё-же работало на 5 версии".
2:03 дорогой же фейерверк вышел.
Интересный контент. Спасибо за выпуск. Не знал про такую аварию.
неплохо неплохо)) KSP одобряем)
Кадры из ксп вставил, это мы одобряем
Ксп это что ? Подскажи если не сложно. Поиск по фото херню выдает индийскую. Не смотрел, интересно.
@@Vlad_BY Игра Kerbal space program
5:21 - MHZ..., а не миллиГерц
Мегагерц
Мхз мегагерц
Можем спать спокойно, Арнольд грохнул Скайнет )
Поправка: Скайнет выбрал не тот тип переменной и грохнулся сам.
@@chaoskrl В этой вселенной Скайнет сделал харакири)
@@ssh7437 Этот точно сам развалился. Имел фатальный недостаток и кучу мелких багов.
@@ssh7437 Не, мой батя в конце 70-х это предсказывал. Только, поскольку был глубоко советским человеком, смотрел на это под другим углом, что мол "маленькая штучка моё" постепенно одерживала верх над идеей коммунизма.
@@ssh7437 да он и цитировал эту фразу "маленькая штучка моё" из какой-то советской классики. В этих "окнах" я так понял, что это лженаука какая-то, но у СССР были и чисто объективные причины, чтобы развалиться... Например, гиперцентрализация, которая сейчас и у ГОРФ есть.
Выпуск просто огонь, амперкины вы как всегда отличная команда.
Подскажите пожалуйста кадры из какого фильма использовались в моменте с 9:13
нужно подобные ошибки в курс собирать и преподавать в университете, с более подробным разбором, а курс назвать, как не стать говнокодером
Спасибо за видео.Коммент в поддержку!
11:00 Чтобы компилятор выдавал предупреждения о "стремных" преобразованиях, нужно включить расширенные предупреждения в части преобразований. В gcc за это отвечает опция -Wconversion . В данном случае gcc честно предупреждает, что здесь результат преобразования может оказаться неожиданным.
Да и вообще стоит включать -Wextra и -pedantic для пущей строгости. )
мне вообще интересно зачем он gcc использовал, есть же прям предназначеный для винды msvc...
1:55 - физика ksp)))
Кто понял тот понял...
Отличный видос жду еще таких)
7:40 Бедные кербонафты, остались на орбите Кербина навсегда.
Привет создателям софта для Боинг 737MAX
Там нету так таковой ошибки, код работает так как написан без багов, там как бы сказать... Недоработка.
@@Noname-fl4cf От этого только страшнее. 2 самолета упало, погибло 315 человек.
Там другое - там знак обратной связи поменялся на противоположный, и девайс ушел носом в землю, а должен был наоборот. Все-таки программерам таких вещей ДОЛЖНЫ читать основы ТАР, даже если это индусы.
@@alexlinde6695 там просто был неисправен датчик угла атаки, а великие программисты из боинга не учли ситуацию что он может быть неисправен и давать неверные данные. При этом ПО брало данные только с 1го датчика, даже если остальные были исправны.
Датчик показывал что нос задрат - ПО пыталось его опустить, хотя это было не так. А пилоты не предприняли неправильные действия по устранению проблемы + это был в обоих случаях взлет и как следствие низкая высота
За KSP респект конечно
legacy код - он такой. когда его писали были свои ТЗ и ограничения, т.е. условия, в которых он работает.
может ввести в заблуждение, что он будет всегда работать во всех условиях, если он долго эксплуатировался и всегда работал корректно (в пределах условий ТЗ).
на эти грабли многие наступают.
4:10 Я не видел не разу не на одном смартфоне ни одного гироскопа, только датчики притяжения.
Спасибо за видео! Было очень интересно)
! Ждём от Амперки - сборка простого процессора на простых транзисторах !
Читал байки про программистов еще во времена FIDOnet в районе 1996-2000 годов. Эта история там была. И еще несколько историй, в которых ошибки программистов привели к различным потерям. Найти бы тот текстик...
Спасибо за ксп амперка!... Кстати для ксп есть адд-он Kos он добавляет возможность программировать корабли на бэйсике
Чтоб "Протон" совершил подобный кульбит, так серьёзно не заморачивались - хватило пару штифтов спилить при установке датчиков угловой скорости ))
Лехина ракета обошлась дешевле…
А если не видно разницы..)
Статический анализатор кода мог бы найти эту ошибку
оп, на 5 минуте Амперка говорит 12-33 мегагерц а обозначил в ролике как mHz, то есть милигерцы. Ай-яй-яй, вот из-за таких вот мелочей ракеты и разбиваются. ))))
Блин. Точно. Столько раз смотрел и не видел...
Лайк за нарезку из KSP)) порадовал
Технобайки. Лучшая рубрика 👍👍👍👍👍❗❗❗❗👍👍❗❗❗
Технобайки это конечно хорошо, но где рука терминатора? А где законченный проект робота с Интро? Обещали закончить.
А вообще может устроите конкурс кто лучше сделает данного робота?(награду естественно вам придумать)
Одного не понимать - у компутера должна была быть изначальная информация о траектории и при получении неверной информации за короткий промежуток времени посчитать ее верной с учетом скорости массы и инерции?
Сдается этих параметров в принципе не было... как и многих других...
Вот что бывает, когда за работу берётся программист, а не программист-инженер
Так у нас почти так же недавно ракету угробили при запуске с Восточного. Код ориентации исправно работал на Байконуре десятки лет. А запустили с восточного - стал крутить ракету не в ту сторону. Детская ошибка в коде стоила много лямов.
произошел шиндовс хас стоппед воркинг!!!
Очень странно, почему они не использовали MISRA.
Решили, что авось пронесёт?
Крутое видео я тебя смотрю уже 2 года так держать
запуск...
установка тяги двигателей 80...
высота: 1000 м
Ошибка совместимости!
Переполнение переменной!
Диагностика
установка положение ракеты: 90*
Аварийное завершение работы 1 модуля...
Аварийное завершение работы 2 модуля...
Вот почему мне запуски любых ракет кажется как начало 3 мировой...
Ну так 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).
5:11 mHz это миллигерцы, а не мега, как вы могли так накосячить в надписи то
Думал сначала, про аппарат для лучевой терапии расскажешь, про ракету не слышал ранее, благодарю.
уже было )
Леха, мы не эту ракету ждали! Но всеравно интересно. Есть ещё идеи по вжмванию после большого П?
2:45
>Но самое интересное, среди обломков нашли две инерциальные системы навигации. В них хранились логи с траекторией, которая еще не успела улететь на землю.
простите, но я так и не понял эту фразу. что означает "логи с траекторией, которая еще не успела улететь на землю"?
аналог черного ящика они нашли?
Скорее всего просто память с сохранившимися логами.
Там если почить источники, посмотреть фото, видео много частей той ракеты хорошо сохранились.
Имеется в виду, что по логам ракета ещё не улетела так как система ориентации дала сбой и больше не писала нечего в логи. Как то так я понял.
Скорее всего там записана траектория до момента взрыва ракеты, а до взрыва, ракета ещё не падала (летела) на землю.
Было бы символичнее, если бы не поместившееся число затёрло адрес возврата на стеке
кэрбал спэйс программм!!!8:00
Аххаах видос серьёзный но геймплей где балуются в KSP
Безусловно лайк!
«Техника попала на тот свет»! Новое слово Амперки в теологии ))
Что за игра на 6:50?
Серьёзно?
При использовании С++ можно включить что при даунсазинге автомачтиески проверяются границы и выдается эксепшн
7:00 Я на эту игру залип.
Кербал Спейс програм название
Ну,если франция,то Ариан,а не эриан :) у французов все по-человечески.
Это как после CodeVisionAVR (в нём переменная INT подразумевает 16 бит) , перешёл на PIC CCS , я бился головой о стену три дня , думая почему не работает программа ....Оказалось что в пик ссs нужно указывать INT8 или INT16...А если не указал то она инт8 )))))))) Этого нигде не было написано .
После того, как первый раз столкнулся с бардаком с размерами дефолтных int итд, взял себе привычку всегда явно с размером указывать, а в тех редких случаях, где именно максимум процессорного слова надо выжать - обвешивать if'ами под разные случаи. Чуть больше писанины, но зато насколько целее нервы! :)
То чувство когда смотришь это видео в перерыве между написанием тестов)
Не по колокольчику а по зову сердца)))
О Лёха вернулся
Из-за казалосьбы такой мелочи. Познавательно 😊👍
лайк, но видеоряд отвлекает и вообще бессмысленно вставлен 🤔
Вспомнил фразу Шепарда из Call of Duty: modern warfare, я потерял миллионы, всего за несколько минут
Где видео про float?
А они автопилоты на машины ставят. )
Человек всё равно глючнее. Уж слишком у него был безалаберный программист, лепил "как получается" и "из того что было".
инфа стухла лет 20 тому назад. расскажи про новые баги-убийцы!
7:32 что за симулятор?
Kerbal space program.
Ну упала и упала - кто не летает тот не падает.
Разрабатывайте сначала тесты, а потом код :) Test driven development
4:09 это что, эмулятор сыча с телефоном в качестве гироскопа?
Громкое название - "Компьютер - убийца"
Ну так дело было не в бобине...
Тут скорее "Инженеры - тупицы".
Кликбейт) Но вообще я бы сказала, что мне всё равно очень нравится рубрика, ибо меня мотивирует, что другие прогеры и инженеры тож косячат) Помогает не впадать в депрессняк, если у меня что-то не получается
Собственно, к счастью, по-другому компьютеры пока убивать не могут
@@IreneRadix ну нееееее ruclips.net/video/d3ENbjUTv0I/видео.html и ruclips.net/video/G-TdIFOHcWY/видео.html
@@AmperkaRuOfficial , смотрела. Там тоже ошибки программистов, хотя последствия страшнее
P.S. Естественно, программировать что-то важное типа компов на самолётах, ракетах, медицинских приборах и.т.п. я не пойду
1:33 ksp
"Ракета против Лехи. The phantom pain"
Ещё очень интересный компьютер-убийца - первопричина катастрофы ИЛ-76 на Камчатке в 1996 году. Там штурман по ошибке ввёл 153 широту вместо 53. Насколько я помню детальный отчёт, компьютер не сообщил об ошибочном вводе, а просто проглотил ведущую единицу, не выводя её на дисплей, так как не хватало разрядности. В результате у штурмана не было возможности визуально проконтролировать такой ошибочный ввод. Навигационная система также не проверила широту на правильность, и повела самолёт не туда.
ну, если программа позволила ввести широту 153град, то респект кодерам ...
9:20, что за фильм, не могу название вспомнить?
Армагеддон
Похожа на знаменитую ошибку в ракетных комплексах ПВО "Пэтриот".
ну и 737МАХ
Я уже где то слышал похожее, тоже о ракете, но не Ariane-5G, да и страна другая.
Протон М ёб..лся летом 13 года, с глонасами на борту.