bash.im ithappens.me zadolba.li

Мысли о вечном

877

При тестировании не пострадали люстры и фарфоровые котики

Мы давно уже собираемся со знакомыми программистами: чайку попьём, поболтаем, программку вместе напишем. На очередную встречу один из наших прибегает с флешкой и кричит: «Народ, срочно надо программу доделать!»

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

Всё шло нормально, пока кто-то не решил запустить шарик так, чтобы он, отскочив от пола, ударился об угол. После столкновения попрыгунчик начинал как-то совершенно неестественно скакать на одном месте.

Начался кропотливый двухчасовой безуспешный дебаг. Мы были столь поглощены поиском ошибки, что даже не заметили, как застенчивый, новенький в нашей компании программист тихонько куда-то отошёл и вернулся с настоящим попрыгунчиком.

Оказалось, что мячик действительно скачет настолько странно. Словами не передать, как мы радовались! С тех пор запомнили крепко: физические процессы при возможности надо тестировать вживую.

874

Недопустимо лишение владельца совочка, ведёрка и формочек

Работаю в крупной компании-интеграторе. Приходит жалоба от серьёзного заказчика: «К нам пришел IP-телефон в пакетике с полопавшимися пузырьками. Это недопустимо, так как увеличивает риск повреждения оборудования при транспортировке. Просьба разобраться!»

Реагировать как-то надо — через пять минут получаю письмо от начальника, отправленное всем сотрудникам с копией заказчику: «Кто лопал пузырьки в пакетике? Просьба впредь исключить подобные ситуации».

873

То ли аура, то ли бафф

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

Стандартный звонок в офисе: «Не отправляется на печать документ». Утро понедельника — или забыли бумагу положить, или баба Дуся слишком активно махала тряпкой, выдернув кабель. Подхожу к кабинету, заглядываю: у вас не печатает?

Да, говорит девушка, гляди! Щёлкает мышкой, смотрит на принтер — тот послушно печатает. Наслаждаюсь видом красиво округлившихся глаз, пожимаю плечами, ухожу к себе.

Спустя какое-то время звонок из другого кабинета: «Уже пять минут пытаюсь отправить почту, не уходит!»

Понедельник — день тяжелый. Иду смотреть, как на этот раз умудрились сломать почтовый клиент. Подхожу к кабинету, навстречу вылетает сотрудница: «Всё ушло! Спасибо!»

Смех смехом, но с того случая 90% вопросов решаются либо пятиминутным ожиданием, либо (после повторного звонка) словами «сейчас зайду». Не знаю, что на меня нашло, но главное, чтобы оно длилось как можно дольше!

840

Закрепляющее + слабительное

Серьёзный космический проект. Интегрируется система дифференциальных уравнений движения спутника. С точки зрения программеров — примитивное консольное приложение, которое периодически выводит в левый верхний угол экрана время, в течение которого летает спутник, и его координаты. Все данные мы сверяем с аналогичной программой, созданной в другом институте — так сказать, проверяем друг друга на вшивость.

Всё бы хорошо, но время от времени спутник «прыгает назад» во времени часов на двенадцать. При этом в каждый момент времени он по нашим расчётам находится там, где и должен быть — вроде как ошибок нет.

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

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

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

835

И целой пачки мало

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

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

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

Середина девяностых, ВВЦ, бокс по продаже компьютеров. Продавец играет в новейший 3D-шутер Creature Shock, который смотрелся по тем временам ультрасовременной диковинкой. Подходит солидно выглядящий мужчина, пару минут наблюдает за игрой, решает приобрести. Продавец предупреждает: «Эта игра на двух CD». Посетитель возмущается и требует записать игру на дискеты. Продавец повторно объясняет, что на дискетах этой игры нет и не будет. Покупатель угрожает скандалом, мотивируя отсутствием оптического привода и постулатом «клиент всегда прав».

«Хорошо, — сдаётся продавец, — несите 740 дискет и будет вам игра».

831

Так говорил Конфуций

Когда я был молод и горяч, довелось мне поработать админом-эникейщиком.

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

— Ты не опух ли на работе в игрушки играть?
— Вроде всё работает, проблем нет, чем ещё заниматься?
— Работать!

Вроде и не поспоришь, но меня вдруг пробирает:

— Знаете ли вы, за что платили врачам в древнем Китае?

Босс безмолвствует.

— За здоровых пациентов. В конце месяца каждый больной уменьшал жалованье доктора.

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

829

Дитя хаоса

В университете при проверке лабораторной работы преподаватель спрашивает студента:

— Почему нет проверки входного значения?
— Да какой нормальный человек, задавая время, будет писать что-либо, кроме цифр и двоеточия — особенно, если видит надпись «Введите время в формате ЧЧ:ММ»?
— Молодой человек, хороший программист должен учитывать всё! Откуда вы знаете, какой пользователь будет работать с этой программой?

Задумчивый голос откуда-то из глубин аудитории ставит точку:

— Ага, пользователь — это периферийное устройство хаотического ввода...

809

Дежавю

Занимаюсь фрилансом — разрабатываю всевозможные мелкие программы для автоматизации процессов.

Недавно писал скрипт, массово приглашающий в группу пользователей крупной социальной сети. Сроки были жесткие — три дня, и времени на тестирование не оставалось. После сдачи проекта в течении недели я исправлял найденные баги, каждый раз архивируя проект и отсылая заказчику.

На днях клиент написал о свеженайденной ошибке. В течении двух часов, пока я чинил программу, меня не покидало ощущение, что такую ошибку я уже видел. Озарило меня вовремя — в разговоре с клиентом я обронил фразу «у меня всё чаще появляется мысль, что вы запускаете старую версию программы».

Отсылаемые архивы я не пронумеровывал, и клиент по невнимательности запускал старый скрипт — назывались-то файлы так же.

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

800

Удивительная история простого фотолюбителя

Шесть лет назад я купил компьютер и тотчас же захотел завести свой сайт. Сказано — сделано: сначала это были три шаблонные странички на boom.ru, потом — сайтик на HTML на Народе, через пару месяцев я освоил скрипты и сделал более-менее приличного «хомяка».

Естественно, в какой-то момент мне захотелось выгрузить на сайт фотографии. Тут и начались проблемы.

Ни цифрового фотоаппарата, ни сканера у меня тогда не было. В доме нашлись лишь аналоговая видеокамера Hitachi с восьмимиллиметровой кассетой и видеокарточка с аналоговым входом. Фотографии в компьютер загонялись следующим образом: на стол кладётся фотография, перед столом на штативе устанавливается камера, подключенная напрямую к компьютеру, наводится резкость и нажимается клавиша «Snapshot» в PowerDirector.

Картинки получались, конечно, не слишком привлекательного вида — сегодняшние телефоны снимают с лучшим качеством. Разумеется, из снимков хотелось вытянуть всё, что можно. С фотошопом я не был знаком, так что единственным способом подкорректировать цвета и хоть немного «оживить» картинку для меня была кнопка «Автонастройка» в Microsoft Photo Editor, входящем в Office XP. Понятно, универсальная функция не всегда давала на выходе то, что мне хотелось бы видеть, да и на отпечатанных в ателье фотографиях с балансом белого было не всё здорово. Частенько я лицезрел на мониторе то красно-жёлтые оттенки на холодных зимних фотографиях, то какую-то зелень в небе.

Однако небольшой опыт работы с видеокамерой в то время у меня был, и я знал, что освещённость объекта напрямую влияет на то, как он будет выглядеть на экране телевизора. Решив поэксперементировать, я сделал для себя несколько открытий: оказывается, холодные зимние снимки «сканировать» лучше всего при освещении из окна, весенние — в свете лампы дневного света, а летние — включив настольную лампу прямо над фотографией! Фотографии неожиданно «заиграли», хотя, конечно, до снятых современной любительской цифровой камерой им было далеко.

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