Написал я как-то небольшой сервер для автоматической проверки домашних заданий по C++, выполняемых первым курсом родного университета. Описывать то, что и как он делал, долго и скучно — достаточно сказать, что у этого сервера был почтовый ящик, на который ему приходили команды. Обработанную почту он удалял сразу; сообщения неизвестной природы он тоже должен был убивать. С этого же ящика сервер рассылал результаты тестирования студентам и сообщения об ошибках мне.
Изначально сервер работал на ноутбуке автора в виртуальной машине. По истечении испытательного срока сервер, доказавший свою самостоятельность и профпригодность, был отпущен в свободное плавание на постоянно включённый компьютер во внутренней университетской сети.
В один прекрасный момент чудесно искривлённые руки одного из студентов случайно нашли баг в логике сервера. В своё время этот баг даже имел статус фичи, поэтому из сервера удален не был. Но всего не предусмотришь — в результате на мой почтовый ящик посыпались сообщения об ошибке тестирования.
Самую первую ошибку я сделал тогда, когда не предусмотрел специального сообщения, которое должно было останавливать сервер. Что ж, оставался единственный способ — сменить пароль на почтовом ящике. Где-то через час до меня дошло, где может быть ошибка, а ещё минут через пятнадцать я исправил злополучный глюк. Что ж, подумал я, на этот раз обошлось, и сервер можно включать обратно. Меняю пароль на старый — и, разумеется, совершаю вторую ошибку.
Любой айтишник знает, что приличный сервер даже в случае отсутствия соединения с внешним миром должен продолжать работать, работать и работать. Мой сервер думал так же, и когда ему наконец открыли дорогу во внешний мир, он поспешил обрадовать меня двумя тысячами идентичных сообщений об ошибке тестирования.
Что такое десять одинаковых сообщений в секунду? Конечно же, спам, даже если все письма идут на один и тот же адрес. По этой причине почтовый ящик сервера был довольно быстро заблокирован. Ошибку в коде сервера я исправил, а в адрес поддержки почтового сервиса написал письмо, в котором изложил причины столь неприличного поведения и пообещал исправиться. Ящик разблокировали быстро, и процесс тестирования продолжился.
Во время майских праздников я заметил, что хотя студенты и слали запросы на тестирование, сервер ничего не делал. Пришлось пообещать разобраться после праздников. Каково же было моё удивление, когда во вторник я обнаружил, что сервер «забанен» админами университета! Выяснилось, что третью ошибку я совершил совсем давно: увлечённый созданием тестов для домашних заданий, я забыл проверить функциональность удаления сообщений неизвестной природы. Результатом было то, что сервер со скоростью 500 килобайт в секунду скачивал с почтового ящика одно и то же письмо и больше ничем не занимался. Чтобы не иметь проблем с администрацией почтового сервиса, админы университета закрыли доступ «проблемному» пользователю. По иронии судьбы письмо, спровоцировавшее это поведение, было ответом службы поддержки почтового сервиса на мои разъяснения по поводу предыдущего происшествия.
Программисты, тестируйте свои программы и протоколы тщательно, не забывайте о mock-объектах и всегда оставляйте себе возможность «повернуть рубильник», даже находясь на другом краю света.
На металлургическом заводе в Донецкой области установили новую систему управления доменной печью. Объект сложный, куча параметров. В качестве метода реализации мозга САУ выбрали нечёткую логику. В задачу системы входила доставка исходных материалов (руда, известняк, топливо, кислород) и выгрузка готовой продукции. Всё оборудование монтировали и пусконалаживали инженеры фирмы-производителя, местные только консультировали.
Уже под конец пусконаладочных работ, когда система уже была полностью настроена, слили расплавленный металл в ковш и повезли к месту разливки. Но нечёткая логика что-то себе решила прооптимизировать и справиться с задачей побыстрее: ковш с полусотней тонн расплавленного металла она опрокинула прямо посреди цеха.
«Умную» систему быстренько сняли и поставили привычную, на релейной логике.
Как я всегда шучу, с компьютером я могу сделать две вещи: включить и выключить. На самом деле всё, конечно, не столь безнадёжно, и реальный мой уровень где-то между «уверенный пользователь» и «пользователь сомневающийся», но страшные сообщения об ошибках меня вгоняют в панику.
Захотелось тут перекинуть фотографии с мобильника на ноутбук. На ноуте установлена Виста, чья глючность уже давно стала притчей во языцех. Блютуса на компе нет, но в наличии имеется съёмный передатчик. Так как за время пользования Вистой я уяснила, что большинство девайсов начинают на ней работать без отдельной установки драйверов, без колебаний вставляю «свисток» в USB-порт и жду коннекта. На моё удивление приспособление отказывается работать, хотя года два назад всё функционировало как часы. Ну, думаю, мало ли что могло произойти — система три года не переустанавливалась.
Достаю прилагающийся к передатчику диск, начинаю устанавливать BlueSoleil. На старый комп с XP она встала без проблем и до сих пор работала. В процессе установки выскакивает сообщение, что, мол, система не может распознать, кем же эти драйвера были выпущены. Так как Виста у меня на немецком, да к тому же лицензионная, а диск привезён из России и неизвестно кем нарезан, спокойно жму «Установить, несмотря ни на что» и жду. Процесс заканчивается, открывается окно нужной проги... и синий экран смерти.
Спокойно перезагружаюсь, чтобы тут же удалить установленное. Не тут-то было — через полминуты после появления на мониторе обоев я опять наблюдаю «синюю смерть». Совершенно не понимая, что вообще происходит, повторяю действие. То же самое. Потихоньку до меня начинает доходить, что эта самая BlueSoleil запускается одновременно со стартом Windows.
Лезем на форум — там предлагают войти в safe mode и удалить программу. Делаю, как сказано — в процессе загрузки экран из чёрного опять переходит в синий. Следующая мысль — после загрузки в течение тридцати секунд убрать BlueSoleil из автозагрузки. Начинаю играть с ноутом в бег наперегонки. На автоматическом старте стоят антивирь, подключение к инету, аська и скайп, и это всё чрезвычайно тормозит систему. Где-то на пятой попытке я оказалась быстрее несчастной BlueSoleil. Дальше — проще: все файлы деинсталлируются, ребут, Виста счастлива — и я вместе с ней.
И вот сижу, как волк из анекдота: «И чего полез? Все равно ж читать не умею». Рядом с передатчиком лежит адаптер для MicroSD — на него уж точно драйвер не нужен.
1995 год. Провинциальный вуз. Вычислительный центр радиотехнического факультета. Два пятикурсника из тех продвинутых, которым посчастливилось подрабатывать в этом самом ВЦ техниками-админами, сидят в «помещении для избранных», куда даже не все преподаватели отваживаются зайти без стука, отделённом стеклянной перегородкой от компов для простых смертных. Здесь серверы и самые крутые компы.
Один из этих пятикурсников запускает руку за системник и в пылу спора непроизвольно щёлкает переключателем «110 V/220 V» на блоке питания. Спорят они о том, что именно сгорит в блоке питания, если оставить переключатель в положении «110 V» и нажать кнопку на морде системника. Вбегает третий пятикурсник и сообщает, что препод, которому они задолжали курсовик, находится в прекрасном расположении духа. Все трое срываются и выбегают.
Входит преподаватель, в ведении которого находится этот самый ВЦ, Гуру с большой буквы. Он тут властелин. Он очень хороший человек. Это он привил всем любовь и уважение к Novell NetWare. Но сейчас он угрюм, потому что только что трое «раздолбая пятикурсных» едва не сшибли его у входной двери, а ведь у него в руках была любимая Toshiba аж на 486-м!
Преподаватель садится за этот самый комп. Щелчок кнопки, хлопок, дымок... Паяльником пришлось поработать выигравшему спор.
Сижу работаю. В браузере открыто много вкладок. Заходит сотрудница с рабочим вопросом, бросает взгляд на монитор и в ходе беседы спрашивает:
— А ты, я погляжу, на сайтах знакомств сидишь?
В недоумении смотрю на браузер. В неактивных вкладках подряд идут «Знакомств...», «Знакомств...», «Знакомств...» Открываю одну из вкладок — там много кода и шапка «Знакомство с Android».
Прочитал историю «Поспешишь — пакет насмешишь». После финальной фразы про дома и самолёты я вспомнил, как в 2002 году был в аэропорту Нижневартовска. Под написанным краской транспарантом «Идёт посадка на рейсы» была прикручена ЖК-панель. На панели красовалась единственная белая надпись:
Driver NETWORK.VXD not found. You must reinstall Windows.
Честное слово, никогда не боялся летать до 2002 года.
Отдел разработки софта. Всё на линуксе. Работаем через эмулятор — все сервера в другом здании. Вчера подключили новый сервер, установили всё, что надо для жизни. Запускаю полный билд продукта и ухожу на обед. После обеда сразу пара заседаний — возвращаюсь на рабочему месту лишь к концу дня. Звонит начальник сетевой группы и недобрым голосом просит зайти.
— Слушай, на твой IP за сегодня пришло 97% процентов трафика вашего здания. Кроме тебя, там ещё 150 человек работают. Ты в курсе, что начальство за скачивание с интернета с работниками делает? — Мужики, ничего не качал, на месте вообще полдня не был. — Давай проверять.
Проверяем — весь трафик с нового линуксовского сервера.
— Что ты с него качал? — Ничего, только билд запустил через эмулятор. — Давай смотреть.
Запускаем эмулятор. Продукт построен, больше ничего нет. Запускаем трафик-анализатор, сидим думаем. Через пять минут в окне эмулятора начинает бегать какой-то скринсейвер. Смотрим. Через пару минут, сдерживая нецензурные выражения, прошу показать окно аналайзера. Так и есть — трафик зашкаливает. Тяжело вздохнув, коллега приступает к написанию мыла группе линукс-админов.
Читаю сегодня список закупок, что наши маленькие программята прислали. Перед тем как подписываться, пробегаю глазами список и где-то посередине спотыкаюсь. Читаю:
В девяностых повадилась наша районная АТС подвисать: снимаешь трубку, а там ни гудка, ни шумов, — ничего. Лечилось просто: подачей фазы из розетки на любой из телефонных проводов. Истошный звонок телефона — и гудок есть!
Методику применять я перестал после того, как сгорела защита у чёрного «Курьера», который я предварительно забыл отключить от телефонной сети.