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

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

2282

it_happened()

Пишем стрелялку. Естественно, в игровом мире куча всего стреляющего, взрывающегося, просто летающего и, самое главное, сталкивающегося.

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

После очередной итерации мой начальник задумчиво сказал, что надо было с самого начала назвать её shit_happened().

2267

Мой код — моя прелесть

Делю кабинет с новеньким парнем. Сколько я слышал приколов про параноиков, но такого не видал:

1. Никогда не подходит к окнам.

2. Никогда не оставляет кружку с чаем без присмотра. В прямом смысле — ходит с ней в туалет.

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

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

5. Возможно, это я от него заразился, но кажется, что он постоянно за мной наблюдает.

При этом, гад, кодит как бог.

2264

Месье знает толк в извращениях

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

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

Среди прочих таблиц в базе данных была таблица «sexes»: идентификатор и название, две строки. В профиле у каждого пользователя хранился идентификатор нужной строки. Интересно, предусмотрел ли что-нибудь автор на тот случай, если на ключ этой таблицы перестанет хватать четырёх байт?

2255

Умерьте аппетит

Проводил сегодня школьную олимпиаду у одиннадцатиклассников. С одним состоялся примерно такой диалог:

— Скажите, а какое ограничение по памяти? Боюсь, как бы memory limit не превысить.

— Интересно, и сколько же памяти ты хочешь занять?

— Ну, я тут запустил, программа всю доступную оперативную память забила.

Зато на тестовых примерах программка правильный ответ выдавала. А вы говорите, Виста у вас всю память сожрала. Всё познается в сравнении, дамы и господа! Надеюсь, хоть в универе его розгами приучат ресурсы экономить, раз мама, папа и преподаватель информатики не углядели.

2245

Без промедленья

Лет пять-семь назад я ещё училась в школе. На информатике мы только начали изучать Паскаль. Объясняя основы, препод сказал, что начинать программу стоит с «Program %name%». Да, подчеркнул он, это необязательный элемент, прога нормально будет работать и без этого вступления, но так «вежливей».

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

Внимательно прослушав лекцию и похмыкав в кулачок насчёт «вежливости», я тем не менее послушно начала решать задачи с «Program», поставив вместо имени слово «mora». Значение его я малость запамятовала, но это меня совершенно не смутило. Задачи были простые, что-то типа «сложи A и B и получи C», прогу я написала быстро, проверила, запустила.

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

Слово «mora», которым я нарекла программу, в переводе на русский означало «замедление, задержка». Звучит бессмысленно, но никаких других видимых проблем в коде больше не было. Посему я, не особо надеясь на успех, заменила название на что-то малозначимое и ткнула F9. Граждане, оно заработало!

Знаю, глупо, но с тех пор я всегда проверяю все названия, имена переменных и так далее на осмысленность на всех известных мне языках. Мало ли — вдруг одно из них натолкнёт комп на мысли о самоуничтожении?

2242

Преходящие истины

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

Обсуждаем, сколько же времени дать скрипту на выполнение. Шеф: «А константочку подберем такую, чтобы цикл while true do на твоей машине выполнялся... ну, пусть, секунду».

2234

Невыполнимо

Практика по информатике в институте. Занимаются студенты кто чем горазд. Несколько моих одногруппников, которые в программировании, мягко говоря, не сильны, решили «поразвлечься»: запустили Turbo Pascal и начали писать программу в стиле:

var a,b,c: integer;

begin

a:=10; b:=20;

c:=a+b;

writeln(c);

end

Написали. Запустили. Видимо, что-то не сошлось — они поковырялись там малость и позвали «консультанта», который в программировании нормально соображает. Говорят, ошибка какая-то. Он тоже посмотрел, поспрашивал, проверил — всё компилится, ошибок нет. Да и откуда там ошибки-то, в таком коде?

Пробуют ещё раз — результата программа не выдаёт. На этот момент к месту разворачивающейся баталии стянулась уже половина группы. Все смотрят и искренне пытаются понять, что не так. (За клавиатурой, напоминаю, авторы программы.) Программу модифицировали для ввода «a» и «b» с клавиатуры. Не работает: программа закрывается от первого же нажатия клавиши.

Зовут и меня. Вы уже догадались, в чём была проблема? Вот и я, поглядев на их мучения, со словами «А на выполнение её запустить вы не пробовали?» нажал Ctrl+F9 вместо упорно нажимаемых до этого Alt+F5, включавших экран просмотра результатов, которым, конечно, появиться было неоткуда.

2170

Борщ: релиз-кандидат

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

— Хочешь в бета-тесте поучаствовать?

Услышав знакомое слово, прибегаю к ней в недоумении:

— Чего? Где? Какой бета-тест? Да, хочу, конечно!

Она улыбается и говорит:

— Суп на соль попробуй, пожалуйста.

2165

Зверские байты

Суббота, середина дня. Сижу дома, делаю лабораторную. Задание несложное: программа должна из командной строки получить имя файла и удалить его. Есть лишь небольшая загвоздка: весь код должен быть на ассемблере. Ладно, наваял 66 строк кода, добавив кроме того сообщения об ошибках вроде «файл не найден» и «файл невозможно удалить». Запускаю — всё работает, ещё раз — уже не хочет. Программа упорно мне доказывает, что «файл невозможно удалить».

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

Ладно, не первый день за рулём. Запускаю отладчик и медленно, смакуя каждую команду, прогоняю код перед глазами. Вуаля, всё работает, если файл есть — удаляется, если нет — появляется сообщение об этом. Если же просто запускать программу, старая история повторяется. Ба, да исполняемый файл весит ровно 666 байт — нехорошее число преследует меня!

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

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

2020

Метафоры 2.0

Работаю на одного известного в узких кругах производителя WiMax-оборудования. Недавно апгрейдили немаленькую сеть на новую версию софта, и при этом родилась пара фраз, отражающих процесс:

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

А надеяться на то, что всё пройдет безглючно — это делить на ноль шкуру неубитого медведя.