×Закрыть

50 серьезных ошибок в программировании и дизайне, которые стоили жизней, времени и денег

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

Собственно, мои исследования привели меня к мысли написать об этом книгу. Но вначале мне захотелось протестировать, насколько эта идея интересна и необходима публике. Твиттер оказался отличной площадкой для этого. Результат этого теста перед вами.

1 Элаи Херцберг попала в историю как первый человек, который погиб под колесами беспилотного автомобиля. Весной 2018 года в темное время суток машина Uber засекла преграду. В начале она подумала, что это мусор, потом — что животное, и только за пару метров поняла, что это человек.

К сожалению, машина не успела затормозить, что привело к смерти человека. Тестирование проходило на модифицированной Volvo XC90, у которой была отключена система экстренного торможения, чтобы не мешать ПО Uber управлять машиной. Не может быть два короля в одном королевстве. Задача тормозить в экстренных случаях была возложена на плечи водителя, который страховал автопилот. Он же в это время смотрел Netflix.

2 Аппарат Therac-25 стал самым резонансным случаем в истории программирования для медицинских девайсов. В силу ошибки race condition, при быстром переключении между магнитным и рентгеновским режимами работы девайса заслонка для рентгеновских лучей не успевала установиться. Из-за этого у 10 пациентов диагностировали лучевую болезнь, что привело к смерти или ампутации пораженных частей тела.

3 25 февраля 1991 года установка ПВО Patriot не смогла перехватить ракету, пущенную со стороны сил Саддама Хусейна. Ракета попала в барак солдат США, что привело к 28 смертям. Расследование показало, что 24-битные процессоры перехватчика при переводе времени совершают ошибку в 0.013 секунды каждый час. Patriot не перезагружали более 100 часов, что привело к ошибкам вычисления положения ракеты на 600 метров. Вот уж где перезагрузка спасла бы жизни.

4 В 2016 году актер Антон Ельчин был раздавлен собственной машиной при въезде домой. Антон многим запомнился как актер, сыгравший навигатора Чехова в полнометражках «Start Trek». Причиной смерти послужил неинтуитивный дизайн ручки передач, представленный Jeep в новых моделях машин.

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

5В 1992 году ошибки системы распределения маршрутов в Лондонской скорой помощи привели к смерти 30-45 человек (разброс большой, потому что не ясно, смогла ли бы скорая спасти того или иного человека). Все произошло, когда в Лондоне решили заменить людей-операторов на компьютерную систему.

В результате система была введена в эксплуатацию без нагрузочного тестирования и с 81! известным багом. Добавьте к этому еще и то, что интегратор решил сэкономить и купил дешевое оборудование, которое сломалось через пару часов после активного пользования системой. Хаос был настолько безумным, что бывали случаи, когда человек, не дождавшись скорой, умирал, его увозили в морг, и только тогда приезжала скорая.

6 1979 год. Пенсильвания чуть не стала еще одним Чернобылем, и это самый большой прецедент в истории атомной энергетики США. Внешний дизайн датчиков системы там был очень плохо продуман и был расположен по кругу комнаты. Смена, которая следила за состоянием, не заметила всех показателей, которые указывали на то, что есть утечка, и значение температуры реактора приблизилось к критическому значению. Ситуацию спасла следующая смена, которая выходила на вахту и начинала считывать показания датчиков.

Чтоб считать показатели, надо было пройти по круглой комнате и отдельно смотреть на каждый показатель во многих разных местах. Утечку нашли, реактор отключили, но еще 14 лет проводили работы по очищению территории. Это стало поводом для огромных протестных митингов и очень поменяло общественное мнение про «мирный атом».

7 1992 год, самолет под управлением опытной команды потерпел крушение возле Страсбурга. 87 из 92 человек погибли. Анализ черного ящика показал, что опытные пилоты перепутали настройки автопилота: угол и скорость снижения.

Дизайнер приборной панели очень стремился сэкономить место и расположил эти два индикатора друг возле друга. При том, что единицы измерения совершенно разные (пилоты хотели задать 3.3 градуса спуска, а задали 3300 футов в минуту). Но для экономии места оба показателя показывались как 3.3. Кому в голову придет показывать 3300 как 33?

8 Моя любимая история. Станислав Петров в 1983 году спас мир, не сделав ничего. Во время разгара холодной войны между США и СССР он служил в штабе антиракетной обороны. Так как две страны обладали атомным оружием, между ними была заключена доктрина взаимного гарантированного уничтожения. Это значило, что как только одна ракета полетит со стороны одной страны в другую, другая может ответить, как хочет. Грубо говоря — начало третьей мировой.

Станислав Петров в 1983 году как раз наблюдал за системой раннего обнаружения ракетного удара. И как же он удивился, когда увидел на экране 5 ракет, которые летели со стороны США в сторону СССР. По всем правилам Петров должен был отдать указания полномасштабного ракетного удара по США. Но, как он сказал: «У него была чуйка». Он предположил, что нападать на СССР всего лишь 5 ракетами — не логично, и решил подождать. Внезапно ракеты пропали, он сделал рапорт.

Расследование определило, что эти 5 ракет — edge case того, как лучи солнца падают на спутник на орбите Молния. Таким образом, Петров, не сделав ничего, подарил нам с вами мир, в котором мы живем. Хотя злые языки говорят, что он тогда был в стельку пьян. Но это не отменяет того, что даже будучи пьяным, ты можешь спасти миллиарды людей.

9 Пациентка Jenny (имя заменено в отчетах) погибла от обезвоживания после химиотерапии. Причина оказалась до ужаса идиотской. Дизайн медицинской системы был настолько плох, что опытные медсестры просто не заметили пункта, который говорил, что для этого пациента необходимо вводить дополнительные элементы сразу после операции.

10 Шестеро велосипедистов сошли с дистанции гонки в Осло в 2014 году. Оказалось, что велосипедисты выпили жидкость для мытья пола, решив, что это энергетик. Дизайн упаковки тоже имеет значение.

11Два солдата армии США погибли во время учений артиллерийских подразделений. Солдаты понадеялись на данные тактической системы, но не знали, что если не задать высоту цели — система считает ее равной 0. Вот тебе и рокетджамп.

121994 год, борт авиакомпании China Airlines потерпел крушение и унес жизни более чем 250 человек. При приземлении второй пилот случайно включил автопилот, который начал вносить коррективы в действия пилотов. При снижении пилоты заметили это и смогли выключить автопилот, но, к сожалению, рассинхронизация действий людей и автопилота привела к крушению. При расследовании также была найдена ошибка, патч для которой уже был написан. Борт, потерпевший крушение, был запланирован на апдейт системы сразу после окончания рейса, который, к сожалению, так и не закончился удачно.

13Knight Capital в свое время перепутали деплои и вместо тестового енва задеплоили новую версию на продакшен. Система думала, что тратятся виртуальные доллары, а на самом деле Knight потеряла 460 миллионов долларов за 45 минут. Скидывались на спасение Knight всем селом.

142015 год, грузовой самолет испанских военно-воздушных сил потерпел крушение около Севильи. Авария была вызвана ошибкой ПО и унесла жизни 4 человек. Airbus после этого случая отозвала все самолеты A400 на проверку. Проблема заключалась в новой версии софта по контролю топлива в двигателях. Система подавала топливо, но очень медленно, от чего 3 из 4 двигателей отключились.

151998 год, один из спутников Nasa, отправленный на Марс, достиг орбиты красной планеты и взорвался. Была ошибка в двух модулях ПО спутника: один ждал данные в метрической системе, а другой отдавал в имперской :) Не додебажили на 327 лямов.

16Как рассказывает SIG, один из самолетов F-14 разбился вследствие того, что случилась системная ошибка, но программист не обернул ее в catch. Это привело к полному отключению бортового компьютера. Пилот катапультировался, но самолет, конечно же, не спасли.

17Кибервойна, или взрыв, который было видно из космоса. В 1982 ЦРУ внедрило шпиона в канадскую фирму по разработке софта для газопроводных систем, потому как знало, что этот софт будет использован СССР. Программист-шпион написал методы, из-за которых в 1982 году газопроводная труба взорвалась так сильно, что взрыв можно было наблюдать из космоса. К счастью, никто, кроме оленей, не пострадал.

18Ракета Ариана 5, разработка которой стоила около 8! миллиардов долларов, должна была вывести на орбиту несколько спутников и другое оборудование. Полет ракеты завершился через 4 секунды после взлета. Она упала. Один из модулей системы попытался сконвертировать 64-битное число в 16-битное. Оно оказалось больше, чем влезало в память, и модуль завалился. Но ведь есть дублирующий модуль, которому было передано управление! На нем была та же версия ПО, которая попыталась сделать то же самое.

19Ночь живых мертвецов. 2003 год, St. Mary’s Mercy Hospital. Из-за ошибки случайно «убило» все 8500 пациентов. Система была умна, и как только пациент умирает, — она сразу оповещает все службы: от полиции до страховой. Не странно, что все немного перепугались от внезапной масакры.

201982 год, миноносец морских сил Великобритании был поражен ракетой, выпущенной из аргентинского самолета. Противоракетная система не сработала, погибло 28 человек. Во время постройки миноносца произошел взрыв и погибло два строителя. Поврежденная часть корабля была заменена частью с идентичного аргентинского корабля. Когда система обнаружила ракету, она провела проверку на свой-чужой. А так как замененная часть корабля была аргентинская, ракета была определена как своя. Кэш — это не шутки :) Противоракетная оборона не сработала, потому как ожидала, что ракета пролетит. Но нет.

211994 год, вертолет модели Chinook разбился, даже несмотря на управление очень опытным пилотом. Погибли 29 человек. Расследование очень долго пыталось скинуть всю вину на пилота, но в результате были найдены ошибки в системе управления двигателями. Также были проблемы в работе датчика высоты с одновременно включенным радио вертолета. А мне не верили, что в Samsung компанс со спотифай не работает :)

22Панама-Сити, докторам радиологам доставили новое медицинское оборудование, которое позволяло выставлять 4 блока, защищающие человека от радиации, и делать очень точные снимки. Система разрешала использовать не более 4 блоков, но доктора решили, что могут обмануть систему, если совмещать 5 блоков, с дыркой посередине. Но только никто не сказал медикам, что в зависимости от того, в какую фигуру складываются блоки — такой силы луч используется для снимков. Как результат — 10 смертей и 19 человек получили сильнейшее отравление радиацией.

23Новейший в свое время самолет F-18 «превращался в тыкву» для системы, когда пересекал зону смены часового пояса с разницей в день (к примеру, полет с Гаваев в Японию). Система не рассчитывала, что может попасть в прошлое, потому 127-миллионный самолет мог упасть в любой момент. Благо, помогал reset.

24Фобос-1, спутник СССР, был направлен на изучение Марса. В 1988 году неправильная команда, запущенная с Земли, активировала тестирующий код, который никогда не должен был бы выполниться. Это привело к тому, что спутник потерял возможность ориентироваться в космосе. У него села батарея, и он был навсегда утерян. Смешно то, что тестирующий код оказался там из-за спешки, но программисты заверили, что он никогда не выполнится. Выполнился.

25День, когда AT&T остановился. 1990 год, новый патч для свичей AT&T. Естественно, компания не может апдейтить сразу все свичи, иначе вся сеть упадет. Потому, по новой версии софта, один из свичей в Нью-Йорке начал процедуру апдейта и отправил всем ближним сообщение об этом. После апдейта загрузился и сообщил, что на месте. Так уж получилось, что, получив второе сообщение от свича из Нью-Йорка, другие свичи начинали процедуру self-testа, о чем сообщали ближайшим свичам, и отключались. При включении делали то же самое. Вся сеть AT&T каскадом завалилась на 8 часов, отключая своих пользователей от телефонов и не имея возможности обработать запросы.

261997, американский авианосец USS Yorktown остановился и отказался плыть дальше. Пришлось вызывать буксир. Оказалось, что программист ввел в базу один параметр как 0. Все остальные системы пытались пользоваться этой переменной, что вызывало деление на 0. Смешно, но система обновления базы тоже смотрела на этот параметр.

271962 год, спутник Mariner 1 внезапно полетел совсем не в ту сторону, куда ожидалось. Центру полетов пришлось самоуничтожить его над Атлантическим океаном. Расследование показало, что формула была запрограммирована неправильно, потому как у ученого, писавшего ее на доске, был плохой почерк, и программисты неправильно ее закодили :)

28Баг в ПО Toyota вызывал внезапную остановку транспорта, что привело к смерти 89 человек. Самое интересное, что когда начали расследование, эксперт заключил, что код у Toyota — совсем говно, разобраться нереально, и все держится на честном слове. Оказалось, что у Toyota использовалось около 350 ассемблерных функций, которые выполнялись при переключении операций, которые никак не синхронизировались. В определенных случаях это приводило к полной остановке автомобиля.

295 декабря 2010 года. Российский ракетоноситель Протон-М пошел на дно океана с тремя спутниками Глонасс-М. Причина — неправильная формула, которая превысила массу одного из заправленных баков на более чем полторы тонны. Как оказалось, формула была исправлена и даже была заведена в систему как изменения, запланированные для реализации. Но когда подошли сроки, многие задания закрывали как неважные. Дозакрывались. Подумайте в следующий раз, когда таску в Jira закрываете :)

30Один из самых известных блогеров Джошуа Браун взорвал в свое время интернет своими видеообзорами Теслы. И, конечно же, фанател от автопилота, пока в один день Тесла на полной скорости не врезалась в фуру. Джошуа погиб на месте. Как оказалось, машина с прицепом, ехавшая впереди Теслы, перестраивалась в другую полосу, от чего сбросила скорость. И тут в нее прилетела Тесла под управлением автопилота. Как выяснилось, Джошуа совершенно не следил за дорогой, а автопилот не заметил прицеп, и смешал его с небом. Тесла рекомендовала, что автопилот нужен для помощи водителям, но никак не замены их полностью.

31Индиана, 2003 год. Инженер, который занимался поддержкой энергооборудования сети, заметил небольшую поломку. Его прям очень раздражал звуковой сигнал, которым система оповещала о проблеме. Недолго думая, инженер отключил звук оповещения и спокойно окончил работу. Конечно же, он забыл его включить обратно и никому не сказал. После этого дерево, упавшее на линию передач в Огайо, порвало линии электропередач, отключив и соседние регионы. Система оповещения пыталась мигать красным, но звука не издавала. Результат? 55 миллионов человек без электричества. А ведь могли включить звук хотя бы через полчаса трезвона :)

327 октября 2008 года самолет, совершавший рейс Singapore — Perth, внезапно начало трясти. На самом деле нет, но все так казалось. Через 3 часа полета внезапно отключился автопилот, и пилотов засыпало ошибками. Через 5 минут капитан корабля отключил автопилот и попытался разобраться, что же случилось. Внезапно нос самолета накренился на 8.4 градуса, от чего пассажиры в салоне, которые не были пристегнуты в тот момент, встретились головой с потолком самолета. Результат — 112 человек получили ранения.

Расследование показало, что один из процессоров, которые отвечали за обнаружение критических ситуаций, внезапно выдавал неправильно значение, вероятнее всего, из-за производственного брака, но сразу же после него выдавал верное. Система, получив неправильное значение, выставляла его как неверное, но, сразу же получив верное значение, ставила предыдущее в верное. Из-за этого самолет косплеил сериал «Крутое Пике».

3314 сентября 2004 года. Без какого-либо предупреждения радиорубка управления перелетами в аэропорту Лос-Анджелеса потеряла голосовую связь с более чем 800 самолетами. Запасная система связи отвалилась через минуту после запуска.

Как оказалось, в основной системе были тики таймеров, которые начинались с самого высокого числа (2 в 32 степени). Служили они для идентификации сообщений и синхронизации. Каждое новое сообщение просто уменьшало таймер на 1. Когда же количество тиков достигло 0, оказалось, что система не может дальше продолжать отсылать сообщения. Чтобы отправить 2 в 32 степени сообщений, необходимо около 50 дней. Теперь процедура безопасности требует перезагрузку системы каждые 30 дней :)

34American Airlines допустили ошибку в разработке системы планирования отпусков для пилотов. Оказалось, что кто-то забыл поставить лимит на взятие отпусков в Рождественский период. Чем и воспользовались пилоты. Кому летать 15 000 запланированных перелетов — стало большим вопросом для компании, и пришлось торговаться. Каждый пилот, который вышел на работу в этот праздничный сезон, получил в полтора раза больше отпуска :)

35Про Хитроу вы, наверное, слышали, но там все, что только могло, пошло не так. Просто реальный пример закона Мэрфи. Но почитайте, конечно же.

36Конечно же, нельзя обойти вниманием известный баг Y2K, при котором до 2000-х программисты использовали 2 цифры для обозначения года, к примеру 97 == 1997, для экономии памяти. Никто не ожидал, что компьютеры протянут так долго. В целом журналисты прогнозировали чуть ли не апокалипсис, но с помощью фиксов, а часто и говна с палками, худо бедно к проблеме 2000 года мы подошли подготовленные, апокалипсис не случился, но попереживали знатно.

37В 2011 году более 400 заключенных были освобождены раньше срока из тюрем Калифорнии вследствие ошибки в ПО. Штат пытался освободить место в тюрьмах, где его, собственно, уже не хватало. Для выбора самых неопасных преступников был запущен скрипт, который в одной из внутренних систем брал состояние дел заключенного, и по этим делам выставлял «рейтинг опасности». Так как многие из заключенных были в различных бандах или наркокартелях, информации про них было немного, от чего скрипт решал, что заключенный не опасен. Потому 450 опасных преступников были выпущены на свободу раньше срока. А мы для этого Савченко спасали! :)

38Не баг, а раздолбайство. У меня просто истории про баги заканчиваются :) 2014 год, случай назвали Murder in the Amazon Cloud. Code Spaces была компанией, которая предоставляла разработчикам возможность создавать свои репозитории, хостить код и минимальный софт для PM.

Вся инфраструктура системы была хощена на Амазон. Нет, Cloud Space не взломали, а просто получили доступ к админке AWS. После чего начали требовать выкуп, чтоб вернуть доступ. Code Spaces постарались своими силами вернуть доступ к админке, вследствие чего захватчик начал удалять ресурсы, бакеты в S3 и так далее. Code Spaces надеялись восстановить все с бекапов, но, к сожалению, бекапы тоже управлялись все с той же консоли. От полученных травм Code Spaces так и не отошли и после недолгих разбирательств канули в Лету.

39Студент Роберт Моррис (один из сооснователей Y-combinator и вообще достаточно известная личность) в 1988 году во время обучения в Cornell University написал программу, которая впоследствие стала известна под именем Morris Worm. Сама программа была написана, как утверждал автор, для вычисления размера интернета! Червь использовал сразу несколько дырок в Unix-системах и распространялся по сети. В черве была проверка: или система уже заражена. Но Моррис был уверен, что некоторые администраторы будут обманывать червь, всегда говоря, что система заражена, поэтому в 14% случаев червь копировал сам себя.

Моррис немного промазал, и червь начинал настолько нагружать систему, что ею стало невозможно пользоваться. 7 марта 1991 года оценка ущерба от червя составляла более чем 100 миллионов долларов. Моррис получил штраф в 10 500 долларов, 400 часов общественных работ и 3 года условки. А я еще над Януковичем смеялся.

40Lockheed Martin F-35 Lightning II. Истребитель-бомбардировщик 5-го поколения, разрекламированный 26 октября 2001 года. Машина смерти в воздухе, которая должна была быть выпущена в 2008 году и стоить всего-ничего от 40 до 50 миллионов долларов.

Шел 2018 год. Самолет F-35 был использован в бою всего лишь дважды. Система управления, запланированная самолетом, настолько сложна, что пока не очень позволяет ему стрелять, получать координаты и вообще делать хоть что-то. На данный момент осталось починить всего лишь 263 высокоприоритетных бага, и тогда уже можно приступать к лабораторным тестам. Кстати, на разработку самолета потратили уже 133 миллиарда долларов. Что вы знаете про долгострои?

41Самый большой случай потери персональных данных — это, конечно же, взлом Equifax. Во фреймворке Apache Struts был обнаружен баг, который так же быстро был починен, а именно 6 марта. Баг привел к тому, что можно было выполнять так называемые RCE-атаки (remote code execution). Сразу же после фикса хакеры начали бомбить сайты в интернете в поисках затупивших админов, которые забыли обновить версию Struts. Взлом Equifax был как раз сделан с помощью этого бага.

Но есть одно «но». Взлом был сделан в середине мая. Что приводит нас к тому, что админы Equifax за два месяца не удосужились накатить патч. На секундочку, Equifax занимались кредитной историей, а значит знали вот прям самые-самые персональные данные своих пользователей. Как взлом Equifax аукнется в ближайшие годы, еще совсем неизвестно.

42Самый защищенный в свое время Windows NT.

43Сингапур, 2017 год, 15 ноября. Многие слышали, что метро в Сингапуре практически полностью автоматизировано. Шутка ли — лучшая транспортная система в мире! Но 15 ноября два поезда не договорились. Вернее, баг в системе коммуникации двух поездов привел к тому, что поезд, который подъезжал к остановке, неправильно определил поезд, который на остановке, собственно, стоял. Вместо 6-вагонного поезда, он определил его как 3-вагонный и уже на замедляющейся, но все же большой скорости влетел в мирно стоящий поезд. Итог — 29 пострадавших, но хорошо, что никто не погиб.

44Когда Steam выпустили на Linux и вы переносили папку с играми из дефолтного места, вы сильно рисковали потерять все данные из-за одного из скриптов в стиме, выполнявших команду rm -rf "$STEAMROOT/"* . Если вы переносили папку, то STEAMROOT оказывался равен пустой строчке, которая превращала все в команду rm -rf "/"* . Жертва зарепортила баг 14 января 2015 года :)

45ВВС США вообще очень любят жить на широкую ногу. Начало 2000 года ознаменовалось тем, что был запланирован гигантский проект по разработке новой ERP-системы, которая должна была заменить более чем 200 устаревших систем. И вообще сделать жизнь работников если уж не раем, то с кисельными берегами и молочными реками.

2005 год, на разработку системы было уже потрачено более чем 1 миллиард долларов. Как раз чтобы спикер ВВС США заявил, что с оценкой проекта немного промазали, и необходимо еще более чем 1.2 миллиарда, чтоб запилить четверть от запланированного объема до 2020 года. Вы только вдумайтесь в горизонт планирования IT-проекта на 20 лет вперед. Промазали они, наверное, потому, что скрам не использовали :)

46И немного о будущем! Если вы думаете, что мы пережили баг 2000 года и все дальше будет хорошо — нет :) Нас еще ждет 2038 год. Так уж случилось, что время в Unix-системах отмеряется в секундах, прошедших от 1 января 1970 года.

А именно 19 января 2038 года пройдет ровно 2 147 483 647 секунд от стартовой даты, что не влезет в обычное 32-битное число. Казалось бы, все можно починить, но вы даже не представляете, сколько в мире всего работает на легаси-системах. Собственно, меньше чем через 20 лет эта проблема затронет ну очень большое количество систем, устройств и даже структур данных, которыми мы пользуемся сейчас.

47В самолетах модели Boeing 787 Dreamliner был баг, который мог отключить подачу энергии на самолет вне зависимости от фазы, в которой самолет находился. Но только после 248 дней работы. Причина — все то же 32-битное число, которое заканчивается. Именно через 248 дней будет число сантисекунд (0,01 секунды), которое не влезет в 32-битное число и приведет к полной потере управления самолетом. К счастью, данный баг был обнаружен быстрее падения первого боинга.

481995 год, аэропорт Денвера представляет проект самой сложной в мире системы автоматической доставки багажа. Цена разработки системы — 200 млн долларов, время разработки — 2 года, реклама — бесценна. Когда систему открыли, она внезапно начала вытворять с багажом такие непотребности: выкидывала багаж, выстреливала им на ленту доставки и просто зажевывала, — что ее назвали «baggage system from hell». Телевидение и репортеры яростно смаковали картинки разодранных чемоданов, раскиданных вещей и поломанных планов на отпуск.

Доработка системы заняла 16 месяцев, что стоило аэропорту Денвера более чем 1.1 млн долларов в год. Аэропорт открылся-таки в 1995 году, но багаж доставлялся старым добрым методом рабочих, мата и тележки. Часть системы все же использовалась, но была очень дорога в эксплуатации. Ежики кололись, плакали, но продолжали заниматься любовью. По итогу, потратив 600 миллионов вместо запланированных 200, система была заброшена и отключена аж в 2005 году.

492013 год, обычный парень Крис Рейнольдс, торгующий запчастями для BMW, утром 13 июня проснулся и проверил свой счет в PayPal. Всего лишь за одну ночь бедняга Крис стал в 1000 раз богаче, чем вся человеческая цивилизация. Счет PayPal показывал ему чудесную цифру в 92 квадриллиона долларов. Естественно, в PayPal быстро нашли и исправили ошибку, вернув Криса на землю, но он сыскал не абы какую популярность и был приглашен на многие телешоу! Когда же у него спросили, что бы он сделал со всеми этими деньжищами, Крис скромно ответил, что выплатил бы государственный долг :) Жаль, только виртуальными деньгами пока не принимают.

50Считайте юбилейная! Расскажу вам байку из своего опыта. В году так 2009-м писал я с командой софт для управления сетевыми устройствами. Когда я говорю про управление — это скачивание конфигурационного файла, допустим, с роутера, изменение его и закачка обратно.

Так работало большинство устройств, но некоторые настраивались через так называемые MIB-деревья или же просто через меню по SSH-соединению. Так вот, чтобы что-то менять в устройствах по SSH, мы посылали команды: стрелка вниз, вверх, энтер. Прям как комбинации в Mortal Combat.

Цель, конечно же, была — добраться до пункта меню «Скачать файл». Собственно, комбинации подгружались с шаблонов команд в зависимости от модели сетевого устройства. Итак, история :) Пишет нам заказчик: «Я администратор в аэропорту. Пользуюсь вашим софтом и пытаюсь настроить один роутер. Но когда я пытаюсь скачать конфиг, ваше приложение перегружает главный роутер, и весь терминал аэропорта погружается в интернет-тьму. И даже пропадает связь с самолетами...». Суть до дела: был неправильный конфиг :) Но, к счастью, обошлось без жертв. Пронесло!

Дамы и господа, это было невероятное путешествие и моя первая проба пера в таком марафоне! Надеюсь, вам понравилось!

LinkedIn

77 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

потрясающая подборка! спасибо огромное за труд :)

Настоятель Собору Паризької Богоматері повідомив, що можливою причиною пожежі у храмі міг стати комп’ютерний збій
www.eurointegration.com.ua/news/2019/04/19/7095419

Про Фобос помню репортаж в программе «Время». Еще потом с пацанами думали, что это инопланетяне мешают нашему прогрессу.
Ну а knightmare — это вечная классика алго-трейдинга

В имплантируемых дефибрилляторах Medtronic нашли критическую уязвимость
itc.ua/...​kriticheskuyu-uyazvimost

п4 — сам собі злий Буратіно. Виходиш з машини — затягни ручник.

42. Самый защищенный в свое время Windows NT.

Это Win’98, которая особой защищенностью не отличалась. У NT немного не так выглядел login screen.

Очень интересно. Спасибо, невозможно было оторваться. Более детальное описание историй в виде книги — будет супер!

у большинства историй источники, мягко говоря, не достоверные

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

А тут уже был комментарий о «давайте всё автоматизируем» и получим надёжный продукт? )))

Отличная статья, благодарю.

6. 1979 год. Пенсильвания чуть не стала еще одним Чернобылем

*зануда mod_on* аварія на Чорнобильскій АЕС сталась в 1986 році.

я знаю:) просто это для сравнения масштабов. к сожалению, взрывы на атомных станциях ассоциируются именно с аварией на ЧАЭС. Просто для словца сделано, а не для информативности

Это всё макрокатастрофы. Микрокатастрофы не заметны, но от того они уносят не меньше денег и жизней. Самое страшный просчёт современности это дизайн micro USB разъёма. С ним что-то не то. Mini USB был просто разъём, который просто работал. Для Micro выбрали какие-то неправильные параметры, видимо. Проблемы с аудиоразъёмом 2.5 мм TRS ещё можно списать на подвижность наушников, но массовый выход из строя разъёмов статично заряжающихся девайсов объясним только полной негодностью дизайна. Вообще, с микро что-то не то творится. Похожая проблема с флэшками микроквадратного масштаба. Сколько стоит информация, которая теряется с них, одной за другой перестающих работать?

Когда читаешь очередной поучительный текст по сверхнавороченному фреймворку серверных приложений, всегда бросается в глаза шикарная возможность переконфигурации runtime. Когда читаешь историю очередного падения девайса на пол с высоты инженерного полёта, сразу бросается в глаза упоминание о том, что в этом печальном случае ах не случилось спасительной перезагрузки системы, иначе полёт был бы как и все нормальный свежий.
Сколько денег стоит ограничение на длину пути к файлу? Какими можно быть умниками, чтобы за полвека эволюции файловых систем не решить задачу длинных путей к длинным файлам? В итоге, у меня виндоус на одном конце, линукс на другом и нет простого механизма скопировать файл с длинным именем в директорию с длинным путём. Длинный путь разумеется задан производителем устройства и его не поменять. Вопрос не в приёмчиках, большая часть которых не работает, а в том, зачем вообще нужно колдовство для такого простого действия?
Уже лет двадцать читаю откровения успешных девелоперов о том, что их богатый спонсор не заплатит за изобретение велосипеда и запрограммирование чего-то из всего того, что в каком то виде можно где-то найти руководствуясь принципом «всё уже написано». Вопрос, если программисты не будут на работе программировать, а будут администрить чужие либы и фреймворки, то как они набьют руку, научатся программировать или хотя бы не потеряют навык? Программирование это спорт, а не образовательный процесс. Зачем нужны знатоки шахматных теорий, если они не умеет играть в шахматы? Для того чтобы, учить других тому, чего сами не умеют? Проблема информационной цивилизации в обесценивании информации. Человеку выгоднее быть жонглёром слов, чем жонглёром в цирке. Генератором псевдонаучных текстов можно запудрить мозг не только академическому издательству, но вообще кому угодно, от работодателя до заказчика и электората. Генератором рекламных ходов можно продать всё, что угодно. Завершить ритуальную продажу нужно сакральным жертвоприношением, при помощи генератора схоластики спихнув на молодого козлика вину за нерабочее состояние успешно проданного продукта.
Моё мнение о всём IT: уровень ниже плинтуса. От академиков, до кодеров. Мой прогноз: через 50 лет роботы по улицам будут таки ходить, потому что это задача специальная, но за ними будут ходить жрецы с кадилами и жезлом для перезагрузки железа. Самая массовая профессия будет называться «Dev Pope» и будет заключаться в шаманстве, колдовстве и прочих ухищрениях, включая самое главное действие — перезагрузку.

Во имя процессора, оперативной памяти и жесткого диска — reset 🙏🏾

Шутки шутками, когда я в юности писал уже достаточно сложные процедурные программы, мне стало интересно что же это такое за ООП. Тогда ещё интернет мало где был и мне кто-то дал три целых тома некоего труда по ООП. Слава центральному микропроцессору, я не запомнил ни автора ни даже языка, кажется это С++, но автор не Страуструп. Потому что этот труд вызывал у меня глубокий комплекс неполноценности перед ООП. Я не понимал о чём это. Вообще. Целых три тома. Много позже меня спасла случайная цитатка Никлауса Вирта, несколькими фразами процедурного языка описывающая основы ООП. У Никлауса Вирта была задача показать, что ООП возможно даже в процедурном языке и в контексте этой задачи объяснение выходило потрясающе лаконичным. Эйнштейн наверное не дебил был, когда говорил, что, «если вы не можете объяснить что-то шестилетнему ребёнку, то вы не знаете это сами». Эйнштейн вас умней, подумайте над этим в следующий раз, когда будете гнать с умным видом псевдонаучную пургу.

Много позже меня спасла случайная цитатка Никлауса Вирта, несколькими фразами процедурного языка описывающая основы ООП.

А интересно увидеть эту цитату.

Для меня лучшим примером «зачем нужен ООП в стиле, как в C++/BP/Delphi/etc.» стала Berkeley DB. Но сейчас этот зверь далеко не в популярных.

В цитате описывался алгоритм, ничего особенного. На определённом этапе тренировки ощущаешь, что сковывают даже языки высокого уровня, не то что фреймворки. Это же просто спорт. Причём, программирование на скорость и программирование на результат это как бег на короткие и на длинные дистанции, тоже разные навыки. Администрирование же по мануалам вообще другая профессия.
Трёхтомник кстати был не научный, эта была модная попытка стартовать людей с нулевым опытом в программировании сразу с ООП и прорекламировать оконный фреймворк, кажется что-то с СBuilder было связано, чего-то тогда такое было, как будто хотели обойти Delphi, в общем обыкновенное коммерческое конфетко, которое я бы сейчас читал как мануал, пропуская ненужное. Мне ещё запомнилась очень странная аргументация. Утверждалось, что в процедурном стиле невозможно было написать алгоритм оформления проездного билета такой, чтобы можно было пропускать некоторые поля, планируя заполнить их позже, заполнять массово и т.п. Либо автор искренне не обладал опытом в программировании, либо просто рекламный ход такой.

Сколько денег стоит ограничение на длину пути к файлу? Какими можно быть умниками, чтобы за полвека эволюции файловых систем не решить задачу длинных путей к длинным файлам?

Я несколько раз поднимал этот вопрос в дискуссиях, ответ всегда примерно один — польза 0.0001% случаев не стоит усложнения для остальных.
В результате, да, оказывается ситуация типа «не могу распаковать архив», потому что ~150 пунктов utf-16 превращаются в >255 байтов utf-8.

Ограничение полного пути в сисколле снято в Hurd. Но где тот Hurd...

0.0001%

как минимум в тысячу раз ошиблись. В моей жизни было всего каких-то 14000 дней. Один омрачённый день это порядка 0.01% моей жизни, а какова вероятность того, что человеку придётся копировать файл на собственный смартфон? Нескольких сотен таких мелких пакостей в технике достаточно для появления навязчивых мыслей о вечном.

Ну цифры от 0.1% до 0.0001% это всегда «на глаз и наугад». При копировании файла его можно переименовать, а вот при раскрытии архива, например, не всякий архиватор умеет такое.
Я-то согласен с проблемой в принципе, меня убеждать не надо :)

28 Баг в ПО Toyota вызывал внезапную остановку транспорта, что привело к смерти 89 человек. Самое интересное, что, когда начали расследование, эксперт заключил, что код у Toyota — совсем говно, разобраться нереально, и все держится на честном слове. Оказалось, что у Toyota использовалось около 350 ассемблерных функций, которые выполнялись при переключении операций, которые никак не синхронизировались. В определенных случаях это приводило к полной остановке автомобиля.

Это было не внезапная остановка, а ускорение: en.wikipedia.org/...​ration_in_Toyota_vehicles

Вот еще момент

Nearly 400 wrongful-death and personal injury cases were also privately settled by Toyota as a result of unintended acceleration

Это оно и есть

On Thursday October 24, 2013, an Oklahoma court ruled against Toyota in a case of unintended acceleration

самая первая история про Убер опять же скорее всего не ошибка программы. Согласно отчету полиции столкновение было неизбежно даже если бы управлял человек

все было бы норм, если бы не отключили вольвовскую систему экстренного торможения

все верно. Т.е. как раз система сработала лучше человека и требовала экстренного торможения. Т.е. в этом виноваты люди, отключившие другую систему www.ntsb.gov/...​rts/HWY18MH010-prelim.pdf

Все було б добре якби пішохід не порушувала ПДР

Ужасно неряшливый текст.

Как результат — 10 смертей и 19 человек получили сильнейшее отравление радиацией.

«Radiation poisoning» переводится как «острая лучевая болезнь».

то все тестери винуваті :)

Тестеры-тестеры, сами баги свои не чините ибо «некритично», а потом на нас все сваливаете

особенно если учесть, что тестеры это измерительные приборы для силы тока, вольтажа и сопротивления. :-)

Статья очень интересная. Пишите еще!

Однозначно любопытная статья, но не соглашусь с историей номер 17. На википедии убедительно развеяли миф: uk.wikipedia.org/...​зопроводу_в_Сибіру_(1982

ну да — это же википедия :-)

газоповітряного вибуху потужністю в три кілотонни бути не може

uk.wikipedia.org/...​рофа_під_Уфою#cite_note-7

потужність об’ємного вибуху могла доходити до 12 кілотонн, що можна порівняти з потужністю ядерного вибуху в Хіросімі (16 кілотонн).
Но для экономии места оба показателя показывались как 3.3. Кому в голову придет показывать 3300 как 33?

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

Раптово на ДОУ потік цікавої інфи, а не г-на :)

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

Вам нужен профессиональный редактор.
Очень нужен.

Это мне:) спасибо, когда будет готова книга она конечно же будет вычитана :)

Британский корабль всё-таки был эскадренным миноносцем, эсминцем (destroyer) и сама тема не вполне понятная с ним, но в целом подборка это чистый восторг. Спасибо :-)

Спасибо;) с этим кораблем, будь он не ладен, я вообще промазал и прочитал какую то чушь:)

Отличная подборка, спасибо, было интересно!

Спасибо, интересно!

Номер 13, Knight Capital, все было не так — они обновили N-1 сервер и не обновили один, в результате чего этот один сервер со старым кодом реагировал на поступающие сообщения странно и транслировал во внешний мир ордера, не имеющие смысл (покупаем дорого, продаем дешево). hackernoon.com/...​e-and-repeat-ae17fae780f6

спасибо:) репортов на самом деле очень много — потому я над книгой достаточно кропотливо работаю:)

внезапно отключился автопилот, и пилотов засыпало ошибками. Через 5 минут капитан корабля отключил автопилот

Щось тут неясно. Капітан вимкнув автопілот, який був уже вимкнений?

выпили жидкость для мытья пола, решив, что это энергетик

Чи це не off-topic? Адже тут не йдеться про помилки в програмному забезпеченні.

Но статья называется «50 серьезных ошибок в программировании и дизайне» И ДИЗАЙНЕ

на самом деле мне просто безумно понравилась эта история, и реддит тред который я нашел:) пускай это и просто графический дизайн:)

может это было во время тимбилдинга :-))

Цікаво, але переклад дуже кострубатий. Місцями навіть не має сенсу. Наприклад, в п. 7 «а задали 3300 фунтов в минуту» — футів, а не фунтів.... Або п. 4 — ручка перемикання передач не показує режим роботи двигуна. Вона задає режим роботи трансмісії :)
І т.д.

сорян:) полностью моя ошибка:) опять же — не воспринимайте это как годовый труд :) это все таки твиттер тред:)

ампутации зараженных частей тела

Поражённых?
Адже йдеться не про віруси чи мікробів, а про опромінювання.

Это статья на хабре, а не книга.

я вам больше скажу — это твиттер тред о чем написано в начале статьи:)

про кейс номер 20 (1982 год, миноносец морских сил Великобритании был поражен ракетой...) написан полный бред

Исследование заводят в разные дали. В книге такой информации не будет. Простите.

История сама по себе интересна как смешение ошибок планирования, управления и английского, в данном случае, авось. И достойна места в списке факапов. Если сможете её хорошо изложить многим ПМ будет интересно :)

Шел 2018 год. Самолет F-35 был использован в бою всего лишь дважды. Система управления, запланированная самолетом, настолько сложна, что пока не очень позволяет ему стрелять, получать координаты и вообще делать хоть что-то.

Это не так. Да, самолёт был всего в двух боевых вылетах, но количество тестовых вылетов просто поражает! Самолёт не выпускают по двум причинам — если из-за ошибок, или какой-то недоработки, или просто по стечению обстоятельств, самолёт собьют — он попадёт в руки кому не нужно, вторая причина — не хотят сильно светить ТТХ в боевых условиях. Чем меньше собранной информации, тем меньше шансов попасть в него ракетой из модифицированной ПВО или другого самолёта. Система управления сложная, но всё берёт на себя HUD Helmet, так что наоборот, реальное управление гораздо проще.

Он кстати уже вполне боевой даже официально релизнут. Твит тред был давнее :)

История про Ариан 5 не очень правильна в деталях — там запустился код от Ариан 4 и офигел от неправильности параметров траектории.
История про Маринер 1 потеряла 2 факта — пробема была в ракете-носителе, а не АМС Маринер (не спутник кстати) и проблема была с ошибкой в десятичной запятой.
Про перепутанные 180 и 360 при первом запуске Энергии из-за кот-х 100 тонный Полюс улетел в Тихий океан автор очевидно не слышал.

Спасибо за ваш комментарий :) это был твиттер тред, на книгу я провожу более глобальные исследования:)

А дайте первоисточник про Шеффилд потому что то что Вы написали несколько противоречит моим знаниям в области ПКР

А знаете, не дам :) как вы и я видим, что в этом твите я пожалуй забрёл не туда и данные не соответствуют реальности :)

А не дам потому что:
1. Лень
2. Не вижу смыслы отчитываться перед человеком который выискивает только ошибки:)

Отличного вам дня:)

ЭЭээээ... Ну т.е. писать про "

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

" можно. Комментировать это — нельзя. Понятно.
И я не виновать что ошибок столько что их и выискивать даже не нужно — сами в глаза бросаются.

вы совершенно правы и я еще раз вам скажу спасибо:)

Нда... Написать про Three Mile Island и не упомянуть сам Three Mile Island. Аналогично про Mars Climate Orbiter, HMS Sheffild (версия с куском корабля совсем какая то сумашедшая хотелось бы первоисточник почитать). Ну и т.д.

С куском чужой рубки у HMS Sheffild это известная шутка. Просто, ну будучи с ней знаком автор воспринял её, видимо, всерьёз. Но уже пытается исправиться.

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

я ж извинился:) это ведь оригинально не статья была а тви-тред:) в книге все будет с первоисточниками. И случая с кораблем веротянее всего не будет:)

Подписаться на комментарии