Истории с тегом: программизмы

Всего историй: 896

869

Когда б вы знали, из какого сора растёт наш код, не ведая стыда

Делали один проект на Flash. После сдачи проекта и отправки исходников заказчику получили от него следующее письмо:

...И ещё немного смущает movie clip с красной надписью «Х*Й!» (дико извиняюсь). Очень хотелось бы узнать предназначение данного объекта.

Хотел бы добавить, что SWF — это декомпилируемый исходник, и, по моему мнению, комментарии с матом внутри кода, а также переменные с названиями fuck и eblan как минимум не отражают суть их назначения и, конечно же, не являются оптимальными.

Мне бы очень не хотелось, чтобы при разборе более продвинутыми пользователями нашего SWF-файла были найдены такие «оплошности».

862

Поле битвы: ОЗУ

Лабораторная по предмету «Операционные системы», тема — batch-файлы. Мы с другом выполнили все задания, ждем, когда препод соизволит их проверить. От скуки был написан virus.bat:

:A

start cmd

goto A

Результат — растущая куча окошек DOS. «Вирус» тут же был оптимизирован:

start cmd

call virus

Нет предела совершенству, и код был сжат до одной строки:

start virus

Также была написана версия с повышенной жестокостью:

start virus /REALTIME /ABOVENORMAL

call virus

Теперь каждое созданное окно начинало безудержно плодить новые окна. Компьютер печально вис через пару десятков секунд. Тут же была разработана вакцина vaccine.bat, убивавшая все окна:

taskkill /F /T /IM cmd*

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

840

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

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

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

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

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

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

832

Пикселы и перекрёстки

В начале девяностых работал я на кафедре вычислительной техники лаборантом. Помимо прочего в мои обязанности входило написание программ для лабораторных работ и тестов.

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

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

829

Дитя хаоса

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

— Почему нет проверки входного значения?

— Да какой нормальный человек, задавая время, будет писать что-либо, кроме цифр и двоеточия — особенно, если видит надпись «Введите время в формате ЧЧ:ММ»?

— Молодой человек, хороший программист должен учитывать всё! Откуда вы знаете, какой пользователь будет работать с этой программой?

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

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

819

И тебе привет!

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

Через пару часов раздался победный вопль, который известил нас о том, что программа наконец заработала. Я повернул голову, чтобы посмотреть на творение и увидел черное досовское окно с радостной строчкой «Hello World!»

817

Наших бьют!

Несколько лет назад я сильно болел известной MMORPG Lineage 2 и узнал, что существует и активно развивается open source-проект по эмуляции серверной части этой игры. Поскольку сервер был написан на Яве, которая в то время была моим любимым хобби, я не мог пройти мимо.

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

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

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

Через полминуты замечаю, что охрана явно делает что-то не так. Меня уже не пытаются убить, хотя сражение вокруг кипит. Стражников столько, что компьютер уже сильно тормозит. Внезано большая часть участников битвы умирает от особо мощного массового заклинания, благодаря чему я наконец-то получаю шанс оглядеться.

Оказалось, что ИИ охраны замка не запрещал атаковать своих союзников. Маги, пытались выдворить меня из замка, задели своей «ковровой бомбардировкой» толпу мечников. Умный ИИ знал твёрдо: кто бьёт моего друга — тот мой враг, и ему надо дать в глаз! Соблюдая этот закон, кто-то из охраны надавал по шапке атакующим меня магам, за тех вступились друзья — и понеслось.

794

Критическая ошибка — нажмите OK для увольнения

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

Хотите узнать, что такое настоящая ошибка?

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

В день приезда генерального директора.

На машину генерального директора.

В которой мирно спал кот жены генерального директора.

775

1 >> 0

Изучаю чужую БД и вижу поле (bool) IS_FEMALE. Зову товарища и восхищаюсь нетипичностью решения.

— Обычно это поле называется SEX и значение «true» закреплено за мальчиками.

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

Сам же создатель же схемы так прокомментировал этот диалог: «Логическое поле должно быть названо так, чтобы значение трактовалось однозначно — например, HAS_PENIS. Так как базу будут читать приличные люди, назвали IS_FEMALE».

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

744

Byte, но не int, зато unsigned!

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

— Слушай, а в for-цикле можно использовать что-то кроме int i?

— Можно... Наверное. Попробуй?..

— Не работает!

— Покажи, что ты там написал... Поменяй свои запятые на точки с запятой!

"Штирлиц насторожился." Тут выкрик другого парня:

— Что написать перед int, ну... это... чтобы он без минусика был?

О том, что человеку нужно ключевое слово unsigned, я догадался только после подсказки его коллеги:

— Untitled.

— Не, не работает, даже не выделяет цветом!

— Ну цветом он не выделяет, потому, что мелкомягкие всё криво написали!

— Да и вообще, замени на byte и не мучайся. — это уже третий программист.

Когда я узнал, что мне предстоит работать именно с этой троицей, я вежливо поблагодарил интервьюера и пошел домой.