832
В начале девяностых работал я на кафедре вычислительной техники лаборантом. Помимо прочего в мои обязанности входило написание программ для лабораторных работ и тестов.
Как-то раз пришлось моделировать операционные усилители. Задача сводилась к подбору параметров настройки стенда, при которых на выходе получалось заданное значение. С точки зрения модели результат определялся решением системы двух достаточно хитрых уравнений.
В методичке советовали не маяться дурью, а решать задачу, построив графики и взяв точку их пересечения. Моя программа рисовала графики на экране с соблюдением масштаба и вместо численного решения системы находила ответ честным графическим способом: во время построения второго графика путём чтения цвета пиксела фиксировалась точка пересечения с первой кривой. Точности вполне хватало.
831
Когда я был молод и горяч, довелось мне поработать админом-эникейщиком.
Рабочий день в разгаре, я беру очередной уровень в «линейке». По законам жанра в кабинет заходит начальник — подполковник в отставке — и застаёт меня за этим недостойным занятием.
— Ты не опух ли на работе в игрушки играть?
— Вроде всё работает, проблем нет, чем ещё заниматься?
— Работать!
Вроде и не поспоришь, но меня вдруг пробирает:
— Знаете ли вы, за что платили врачам в древнем Китае?
Босс безмолвствует.
— За здоровых пациентов. В конце месяца каждый больной уменьшал жалованье доктора.
Я думал, что увольнение неизбежно, но в итоге получил солидную прибавку к окладу и внеплановый апгрейд рабочей машины.
830
В связи с расширением и модой на стандартизацию в нашей фирме было решено заводить понятные, «говорящие» логины для пользователей. После обсуждений решили остановиться на варианте «имя пользователя + первая буква фамилии».
Сегодня дописывал модуль для программы, вытягивающий из домена информацию о пользователях во внешнюю базу данных. Закончив очередной кусок кода, я запустил программу.
Внимание моё привлекла последняя учётная запись. Девушку звали Анна Литвинова.
829
В университете при проверке лабораторной работы преподаватель спрашивает студента:
— Почему нет проверки входного значения?
— Да какой нормальный человек, задавая время, будет писать что-либо, кроме цифр и двоеточия — особенно, если видит надпись «Введите время в формате ЧЧ:ММ»?
— Молодой человек, хороший программист должен учитывать всё! Откуда вы знаете, какой пользователь будет работать с этой программой?
Задумчивый голос откуда-то из глубин аудитории ставит точку:
— Ага, пользователь — это периферийное устройство хаотического ввода...
828
В далёкую эпоху всемогущего ассемблера для программирования активно использовались перфокарты. Недавно я с удивлением узнал, насколько нестандартное применение нашли им студентки.
Когда в карте пробивали отверстия, оставалось большое количество маленьких прямоугольничков. Модницы-программистки при помощь иголок и пинцетов аккуратно выкладывали картонными «битами» узоры на ногтях, а затем фиксировали рисунки лаком.
827
Сижу дома вечером, программирую потихоньку. Опера, как обычно, стучится в мейлрушный почтовый ящик и внезапно наглухо виснет. Снимаю задачу, перезапускаю, жму «принять почту» — опять подвисает. Злюсь, но времени разбираться нет — отключаю автопроверку и работаю дальше.
На следующий день прихожу с утра в офис, где в качестве почтового клиента тоже используется Опера. Та же история — браузер виснет с загрузкой машины на 100%.
Обращаю внимание на том, что сборщик почты явно спотыкается на том же самом письме. В голове мелькают версии от простейшго бага до изощренных спам-рассылок, которые через дыру в браузере запускают тяжелый джаваскрипт или, не дай Бог, системный процесс.
Истина, как всегда, оказалась где-то рядом. После трёх попыток перезапуска Оперы я убедился, что клиент скорее мёртв, чем жив, и зашёл в ящик через веб-интерфейс. Роковым письмом оказалась новостная рассылка крупной IT-конференции. Письмецо в 10 строк с полем <b>To:</b>, в котором через запятую были перечислены несколько тысяч адресатов, тянуло на 185 килобайт.
Как оказалось, Опера не висла, а медленно и печально отрисовывала километровый список — еле управлялась за минуту.
826
Как-то раз чинил компьютер у кладовщиков. После того, как машину перетащили в другое помещение, что-то случилось с видеокартой: разрешение 800x600 работает нормально, но если установить более высокое значение, то само разрешение не увеличивается, а рабочая область начинает скроллироваться при подведении мышки к краям экрана.
Оказалось, что у монитора есть встроенные динамики. Штекер кладовщики всадили в разъем видеовыхода типа «тюльпан» на видеокарте, а та посчитала, что появился ещё один монитор. Windows, в свою очередь, установила драйвера стандартного дисплея и ограничила максимальное разрешение.
825
В школьные годы, помню, проводили у нас олимпиаду по программированию. Меня, как самого продвинутого, послали на нее. В то время о VB и Delphi никто и не знал почти, поэтому программирвали на Паскале и QBasic'е. Задачи все были сложные, и очень небольшой процент людей смог сделать хоть что-то... Но я смог. Одну задачу.
Суть ее состояла в том, чтобы загрузить из текстового файла матрицу — модель лабиринта, в которой цифрами обозначались стены, пустые пространства и начальная позиция, и выяснить, есть ли из него выход. Предполагалось, что программа должна виртуально "пройти" этот лабиринт, возвращаться из тупиков и следить за тем, чтобы не войти в цикл. Я же сделал проще — нарисовал этот лабиринт на экране, в начальной позиции сделал операцию заливки, а вне границ рисунка — операцию считывания цвета с экрана. Если лабиринт замкнут, заливка не выходила за его пределы, если же выход имелся, заливка распостранялась на весь экран и оператор считывания цвета возвращал значение ее цвета.
До сих пор помню смех моего учителя, который рассказывал про офигевшие лица организаторов, открывших посмотреть текст программы и увидевших 10 банальных строк кода. За одну лишь эту задачу присудили 6 место.Вот оно — нетрадиционное мышление.
824
Сидел я за проектом, заработался до глубокой ночи (приблизительно, до трех). Сохраняю исходники, начинаю отлаживать, а прога берет и вылетает с критической ошибкой. Я, ударяясь в панику, начинаю перелопачивать код в поисках огреха, но напрасно. Немного помучившись, я случайно глянул на часы и решил, что утро ночи мудренее.
Утром, продрав глаза, я снова первым делом окинул взглядом проект и решил во что бы то ни стало определить, где же возникала ошибка. Запускаю... и все нормально. И так, и сяк — все прекрасно работает! Начинаю думать, уж не приснилось ли мне.
Ответ оказался прост. Дело было в последнее воскресенье октября. И надо же было попасть именно в три ночи. Программа, "созданная" через час после того, как ее запускают, работать не хотела...