Сегодня мы в Beeline Cloud решили взглянуть на нестандартные и порой совершенно нелепые баги из мира ИТ — например, когда причиной сбоя стало чрезмерно разросшееся растение или криво уложенная плитка. Рассказываем о подобных ситуациях.

Не баг, а [действительно] фича
Компания Rogue Amoeba, специализирующаяся на разработке ПО для работы со звуком, недавно поделилась историей из 2002 года, когда ошибка в коде привела фирму к неожиданному успеху. Тогда разработчики выпустили свой первый продукт — приложение для аудиозаписи Audio Hijack. Они предложили пользователям 15-дневный пробный период, после которого требовалось купить лицензию. Первое время продажи шли вяло, но команда продолжала дорабатывать решение.
И в какой-то момент спрос на приложение начал резко расти — причем без видимой на то причины. Компания не меняла ценовую политику, не проводила дополнительных рекламных кампаний. Проверив код, инженеры обнаружили источник «удачи» — в последнее обновление закрался баг, который серьезно сократил пробный период... до 15 минут!
Так, совершенно случайно разработчики реализовали крайне эффективную стратегию продаж. Судя по всему, за две недели пользователи успевали решить все свои задачи и забывали о продукте. Но если кому-то требовалось записать или отредактировать длинную аудиодорожку «здесь и сейчас» — приходилось покупать лицензию. Глава компании признался, что эта ошибка, вероятно, спасла фирму: «Если бы не эта счастливая случайность, мы бы давно сдались и прекратили разработку. Я не преувеличиваю, когда говорю, что этот баг спас и приложение, и нашу компанию». Спустя почти четверть века Rogue Amoeba все еще успешно применяет эту модель продвижения и даже распространила ее на другие свои продукты.
Подобные случаи, когда баг превращается в «удачную фичу» с финансовой точки зрения, встречаются довольно часто — даже у независимых разработчиков. Один специалист на профильном форуме рассказал, что случайно отключил недельный пробный период для платных функций своего приложения, и продажи резко выросли. Однако нужно понимать, что продвижение ИТ-продуктов всегда связано с рисками, и такая ошибка может как помочь, так и «потопить» проект. Так, один из резидентов Hacker News поделился противоположным опытом: его команда внедрила бесплатный тариф в своем SaaS-сервисе, рассчитывая, что он даст пользователям возможность ближе познакомиться с функциональностью продукта и принять решение о покупке. В итоге пользователи оставались на бесплатной версии, а продажи платных пакетов упали.
Wi-Fi дождя
Эту историю рассказал open source-разработчик Предраг Груевский [он пишет движок запросов Trustfall]. Много лет назад, будучи студентом, он приехал на каникулы к родителям. Отец пожаловался, что с домашним интернетом происходят странные вещи: большую часть времени потери пакетов достигали 98%, но стоило пойти дождю, как Wi-Fi начинал работать стабильно. Инженер дождался непогоды (долго ждать не пришлось), чтобы убедиться в проблеме, а затем — отбросив «магическое мышление» — решил установить причину. Она оказалась как минимум интересной.
Ранее Груевский-старший настроил Wi-Fi-мост с направленными антеннами между домом и своим офисом, находившимся в двух кварталах (но в прямой видимости). Так он обеспечивал семью высокоскоростным корпоративным интернетом.
Система проработала безупречно почти десять лет, пока на соседнем участке не выросло большое дерево с раскидистыми ветвями. Когда дерево стало достаточно высоким, оно начало блокировать радиосигнал.
Однако во время дождя капли тянули вниз ветки и листву, и сигнал снова проходил беспрепятственно. Нет, Груевский не вырубил дерево, но поменял антенны, поддерживающие стандарт 802.11g, на новые — 802.11n. Технология формирования луча (beamforming), в том числе позволила фокусировать Wi-Fi-сигнал в нужном направлении, и связь стала стабильной.
Читатели, обсуждавшие эту историю, нашли интересным тот факт, что инженер первым делом не проверил возможное наличие препятствий на пути сигнала, учтивая, что в его сети имелся LOS-компонент. Впрочем, как часто бывает, очевидное решение приходит в голову последним. Также участники обсуждения поделились похожими «магическими» историями. Один из комментаторов рассказал, как связь между офисом его компании и ретрансляционной вышкой каждую ночь прерывалась ровно на десять минут. Причиной неполадки были новые натриевые газоразрядные лампы наружного освещения — во время включения они генерировали радиочастотные помехи в диапазоне 5 ГГц. Проблему решили заменой освещения на менее «шумное».
Электричество — не игрушка
Программист Алекс Йорк рассказал историю, которая произошла с ним в 2022 году. Он писал программу для распаковки GZIP-файлов и столкнулся с неожиданной ошибкой, указывающей на повреждение архива. Это было странно — ранее ничего подобного не случалось, но теперь ошибка появлялась каждые несколько минут и не исчезала даже после перезагрузки компьютера. Йорк начал искать и устранять возможные причины неполадки одну за другой. Сперва он решил, что проблема возникала из-за состояния гонки, но GZIP-компрессор не был многопоточным. Затем исключил варианты с ошибкой кодирования и повреждением данных. Однако ошибки возникали без всякой логики: то появлялись, то исчезали. Алекс стал искать менее очевидные объяснения.

Йорк даже заметил, что сбои начались с приходом жары, и попытался связать нестабильное поведение ноутбука с работой кондиционера. Возможно, воздух делался слишком сухим или, наоборот, слишком влажным, и это как-то отражалось на работе его ноутбука?
Позже к программным сбоям добавились проблемы с операционной системой, а приложения стали загружаться невероятно долго — но только если ноутбук был подключен к сети. И тогда программист предположил, что проблема должна быть связана с перепадами напряжения и электропроводкой в квартире — и точно, розетка, к которой он подключал устройство, не имела заземления. Йорк вызвал электрика, который установил новую розетку. После этого проблемы исчезли, а программа заработала без сбоев.
Стол-убийца Xbox
Разработчик Аллен Пайк историю коллеги — она про Xbox, который отказывался работать... на конкретном столе.
В прошлом его коллега был членом команды, которая разрабатывала игру для еще не вышедшей на тот момент консоли Microsoft. Разработка близилась к завершению, и QA-инженеры установили три пре-релизных Xbox, чтобы проводить на них ночные тесты. Если утром игра все еще работала, билд считался стабильным, однако одна из консолей «крашнулась». Ошибка указывала на сбой, связанный с GPU, а отладка такого бага — нетривиальная задача. Что интересно, проблема повторилась и на вторую ночь, и на третью… QA-инженеры довольно быстро нашли закономерность: сбой возникал не на конкретной приставке, а на любой, которую ставили на определенный стол. Чтобы разгадать загадку, ведущий инженер решил провести ночь в офисе.
И под утро он понял, в чем дело: первые лучи солнца пробивались через окно, падали на консоль и нагревали корпус. Этого оказалось достаточно, чтобы устройство отключалось из-за перегрева. Так, всему виной было неудачное расположение рабочего стола.
Смотрите под ноги
Инженер Патрик Томсон рассказал историю из профессиональной практики своего отца, который в 1980-х работал в Storage Technology, занимавшейся разработкой аппаратного обеспечения для хранения данных [ленточных накопителей в частности]. Эта история старая, но до сих пор известна в интернете под заголовком: «Лучшая история отладки, которую я когда-либо слышал». Одна крупная компания, использовавшая ленточные накопители Storage Technology, столкнулась с загадочной проблемой во время обработки и печати данных. Оборудование сбоило во время многочасовых сессий, и техники не могли повторить ошибку в тестовых условиях. Специалисты компании даже заменили часть компонентов, но это не помогло решить проблему. Тогда они пригласили человека, которого автор называет «экспертом с большой буквы» (The Expert).
Он остался в комнате наблюдать за процессом работы. Несколько тестов подряд закончились сбоем, но источник неисправности по-прежнему ускользал. Наконец, Эксперт заметил закономерность: ошибка возникала ровно в тот момент, когда один из сотрудников проходил по определенной алюминиевой плитке на полу, под которым проходили коммуникации.
Оказалось, что панель была слегка деформирована. Когда на нее наступали, она терлась о соседние плитки, вызывая радиочастотные помехи, которые приводили к сбоям в чувствительной оперативной памяти компьютера. Плитку заменили, и проблема больше не проявлялась.

Вообще, сбои в работе «старого железа» часто были вызваны именно физическими факторами. Так, ученые из Лос-Аламосской национальной лаборатории в США в 50–60-х годах столкнулись с необычной проблемой в работе компьютера IBM 7030 Stretch. Время от времени в памяти на магнитных сердечниках возникали ошибки, а потом так же внезапно пропадали. Инженеры сетовали на программные неполадки, но за несколько дней так и не нашли источник. А причина была следующей — память IBM 7030 Stretch для температурной стабилизации погружалась в масло. Это масло постоянно циркулировало, и в нем плавал отколовшийся кусочек припоя. Именно он время от времени вызывал кратковременный сбой памяти. Решение — замена масла.
Чужое решение непростой проблемы
Разработчик из команды Google Docs Джейкоб Войтко вспомнил, как он с коллегами устранял критический сбой, который не позволял пользователям редактировать свои документы в Google Docs без обновления странички. Причем проблема повторялась только в Chrome определенной версии. Несколько дней специалисты потратили на поиск причины, но серьезных зацепок получить не удавалось — ошибку видели, но не понимали, что с ней делать и почему она появляется. Но затем случился маленький прорыв — благодаря помощи коллеги команда убедилась, что неполадка связана с методом Math.abs(). Он должен возвращать неотрицательное число, но почему-то возвращал отрицательные значения для отрицательных входных данных.
Разработчик вышел в интернет с этим вопросом обратился к команде Google Chrome, а те перенаправили его к специалистам, занимающимся V8-движком. Те отрапортовали Войтко, что в одной из последних версий был небольшой баг в применяемых методах оптимизации, который они уже исправили — и обновление скоро выйдет. Так что Войтко с коллегами два дня безуспешно искали решение проблемы, которую уже исправили за них.
Грандиозного фикса не было, был добавлен лишь временный костыль для проверки версий браузера. Как иронизирует сам автор, единственный урок, который он усвоил из ситуации: «Такова жизнь». А читатели блога отметили, что контроль качества не только сложен, но бывает чрезмерно утомительным и стрессовым — и с неясными перспективами. Иногда QA-специалисту просто не предоставляют нужной информации или грамотной обратной связи — ему приходится почти вслепую разбираться с неполадками.
Beeline Cloud — secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.
Другие подборки об интересном и необычном в нашем блоге: