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

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

2328

Два герца

Школа-интернат. Все давно играют в World of Warcraft. Сервер московский, так что играют чаще ночью. В общаге имеется воспитатель, который патрулирует комнаты и коридоры, и за игру в три ночи наказывает нещадно. Играют все лёжа на кроватях — так видно меньше. Однако это не летний лагерь, а всё-таки школа, и выполнение домашней работы по программингу происходит в той же обстановке, на кровати с чашкой кофе/банкой энергетика/бутылкой воды.

Итак, на часах 3:30. В комнате двое играют и один пишет код к завтрашнему уроку.

— Колян, ты где там бродишь? Танковать я, что ли, должен?

— Да не парься ты, тут я, щас запинаем как ребёнка.

— Серый, напомни, у нас в шестом номере через какую конструкцию процедуру делать?

— Через while... Не, ну ты посмотри, срывается, козёл! Саня, тебе долго ещё проги набивать? Нам твой хант позарез нужен.

(под нос) Факинг Паскаль... Где я запятую пропустил? (шёпотом) Да щас зайду, убьём мы эту элитку и орду распинаем. Я вон вижу, у вас там пара орков бегает.

— Ладно, ждём тебя.

Звонит телефон:

— Элвис, не тупи, заходи в онлайн. Мы в ауте... Да-да, сделал я лит-ру, завтра спишешь. Заходи резче... Что?.. Какое ОБЖ? Какой конспект?.. Да сделаем, щас, добьём гада одного.

— Всё, добил прогу. Как часы работает! Я захожу. Ждите...

— А нам не только ОБЖ задавали...

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

2324

Истинный фейл

Кодеры под Новый год порадовали. Есть требования на дизайн некой функции, которые звучат примерно так: «The %function()% shall perform %action% when its %parameter% is true...» Автор документа опечатывается и пишет: «its %parameter% os true». Понятно, буковки „i“ и „о“ рядом. Доблестный вордовый спеллчекер не согласен с вариантом и заменяет на «its %parameter% or true».

Умница. Так лёгким движением электронов по кремнию условие превращается в чёрт знает что, оставаясь при этом вполне понимаемым. Верификаторы — люди непривередливые, на логичность им ругаться запрещено, не их ума дело, кода (якобы) не видят. Пишут пару тест-кейсов на покрытие этого условия, получают фейл и тут уже с чистой совестью открывают issue на requirement/code mismatch — всё по процедуре.

На носу католическое Рождество. Прекрасно понимая, что америкосовый интегратор скоро уйдёт на каникулы, индусский кодер торопится исправить баг, втыкает в требования, втыкает в код, видит там if(param) {}, говорит «угу, непорядок» и приводит код в соответствие с требованиями: if(param || TRUE) {}. Код по требованиям, фейлов нет, придраться не к чему.

2310

Иллюзия выбора

Учусь в универе и понемногу начинаю заниматься программированием микроконтроллеров. Дома лежит спаянная плата с программатором, на которых я и тренируюсь писать простенькие програмки на Си.

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

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

if (x == 0) cbi(PORTB, 1);

if (x == 1) cbi(PORTB, 1);

if (x == 2) cbi(PORTB, 1);

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

2299

Стыд && срам

Работаю web-программистом. Достался мне как-то проект на сопровождение, который представлял из себя форум phpBB 3 с двумя достаточно объёмными модулями. Сами модули были написаны предельно аккуратно, с использованием всех возможных стандартов и правил: XHTML, MVC, «верблюжья» нотация, адекватно названые переменные. Я искренне порадовался, что на PHP пишут не только быдлокодеры.

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









2298

Переходящая красная константа

Сижу, ковыряюсь в «1C:Бухгалтерии 7.7». Бух попросил узнать, откуда прога подтягивает территориальные условия сотрудника для отчета в ПФР. Выяснилось:

1) Для печати выводится значение переменной ТУ.

2) Переменная ТУ берёт свое значение из списка ТекущийСписокСтажа.

3) ТекущийСписокСтажа подтягивает данные из таблицы СтажСотрудников.

4) СтажСотрудников заполняется функцией глСобратьДанныеДляСЗВ2002.

5) И, наконец, функция глСобратьДанныеДляСЗВ2002 присваивает ей значение константы. Обычной константы, единой для всей базы.

Неужели нельзя писать попроще?

2296

Я устал, я ухожу

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

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

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

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

КОНТРОЛЛЕР УСТАЛ

2282

it_happened()

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

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

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

2267

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

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

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

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

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

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

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

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

2264

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

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

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

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

2255

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

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

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

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

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

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