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

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

3306

Исходники нараспашку

Спасибо незнакомым добрым людям,

Что в сей угрюмый копирайта век

Исходников рабочих не жалеют,

Спасая от провала мой проект.

Спасибо вам, коллеги-программисты,

Всем тем, кто тоже за открытый код.

Без вас нам, молодым специалистам,

Значительно б прибавилось забот.

Спасибо тем «компьютерным поэтам»,

Кому нетрудно комментарии вписать.

Что код работает — спасибо и на этом,

Но так ещё ведь можно и понять,

Прочесть, обдумать, вникнуть, научиться,

Ваш программистский опыт перенять,

И с ним ещё быстрее развиваться,

И что-то новое, полезное создать.

Мы, программисты — творческие люди.

Творец творца всегда поддержит и поймёт.

Давайте ж помогать друг другу будем,

Пусть будет он всегда — открытый код!

3277

Init, redirect, overflow

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

Примерный диалог с девушкой из техподдержки (с комментариями):

— Здравствуйте, %providername%, оператор %girlname%. # init-пакет

— Здравствуйте, это ваш абонент %companyname%. # reply с авторизацией

Соедините, пожалуйста, с техническим специалистом. # запрос на redirect на нужный сервис

— Что у вас случилось? # отказ в redirect из-за запроса без комментария

— Проблемы с интернетом на вашей стороне. Соедините, пожалуйста, с техническим специалистом. # повтор запроса на redirect на нужный сервис с комментарием в начале

— Что у вас случилось? # отказ в redirect из-за несоответствия комментария шаблону. шаблонная схема, значит, буфер ограничен

— У нас не пингуется ничего дальше вашего третьего хопа по данным traceroute. # пакет с данными, содержащий ссылки на внешние источники информации

(Пятисекундная пауза.) Переключаю... # buffer overflow

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

3271

Накося, выкуси

Заказчик письменно наехал из-за не появивишегося в репорте сервера «обязательного тега», значение для которого... не предоставила программа заказчика. Поле пусто, потому что пусто (генератор так решил), но тег-то обязателен — выньте да положьте. Отфутболили подачу к аналитикам. Полученный ответ заставил разработчиков где-то даже почувствовать себя отмщёнными: «При отсутствии во входных данных нужного значения ставить строковое значение „N/A“». Тут и спокойное «на, возьми», и ехидное «накося, выкуси», да и направление просматриватся тоже достаточно чёткое.

3263

Программирование в храме уединения

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

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

3253

Погоди, Сатана

1999 год, лето, утро. Я, молодой специалист, пишу прогу для микроконтроллера. После ассемблирования и линковки объем BIN-файла получается 666 байт. Заливаю. Не работает. Курю документацию, смотрю в код.

Вечер. От мануалов болит голова. Когда закрываю глаза, на тёмном фоне проступают белые mov и jmp, они гоняются друг за дружкой и пытаются укусить меня за нос. Контроллер не работает.

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

— Не работает! — сказал я.

— Паца-а-ан! — сказал Программист.

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

Обед, я у Программиста. У него бегающий взгляд и пепельница, наполовину забитая окурками.

— Попозже зайди — буркнул программист.

— А-а-а, б#я! — подумал я и удалился.

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

Завтра зайди! — рыкнул Величайший.

— У-у-у, б#я! — подумал я и пошёл домой.

День третий, утро. Я у Программиста. Он, похоже, не спал. Глаза красные и какие-то шальные.

— @#$ %&*#@! #%$#@$#@!!! — сказал Величайший.

Я забрал макет. Я впал в когнитивный диссонанс. Я зашёл к себе, выкурил подряд две сигареты, дописал в конце проги одну-единственную команду nop. Прога стала весить 667 байт.

Ассемблер.

Линковщик.

Программатор.

Макет.

Питание на борту.

Всё работает.

А вы говорите: материализм, материализм... Фигня ваш материализм, коллеги!

3247

Зелёнка против запретов

Время сессии. Курсовой проект делается в последний момент. В программе упорно отображаются красные иконки некорректной операции, но иначе не получается. Выход найден быстро: Ресторатор, замена красных иконок зелёными, патч на 70 килобайт успешно накатывается на институтскую машину. Курсовой сдан!

3237

Гладкая сталь точёного манипулятора

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

— А ты, я погляжу, на сайтах знакомств сидишь?

В недоумении смотрю на браузер. В неактивных вкладках подряд идут «Знакомств...», «Знакомств...», «Знакомств...»

Открываю одну из вкладок — там много кода и шапка «Знакомство с Android».

3190

Студент спит — скрипт идёт

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

Снится мне квадратная матрица для светодиодов 16 на 16 ячеек какого-то непонятного серо-графитного цвета. При подходе к последней ячейке (i, j) матрица разрастается в стороны и увеличивается в замкнутом цикле. «А ведь хорошо, — думаю, — что i++; j++; не забыл вписать — так ведь и поспать можно, пока матрица считается. А считаться она будет долго...»

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

3187

Если вдуматься, ноль нам совсем не нужен

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

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

(SETQ

PROEB NIL

PROEBAL NIL

PROEBAN NIL

PROEBEM NIL

...

Ну и как объяснить хихикающим казахам и багровому от стыда начальнику, что функция проверки начинается с обнуления баллов за линии проекционной связи для точки B и связанных с ней отрезков AL, AN, EM?

Вам смешно, а меня премии лишили.

3173

Небольшими порциями

Работала давным-давно в отделе автоматизации девочка-программист — ваяла на FoxPro программки по обработке данных. Однажды увидел я кусочек кода, призванного убрать в каждой записи базы данных лишние пробелы слева от фамилии. Код выглядел примерно так:

scan 'цикл по базе

if(at(a.fieldname,” ”)) 'если в первой позиции пробел,

replace a.fieldname with substr(a.fieldname, 2) 'то исключаем первый символ

endif

endscan

Код убирал в каждой записи один пробел слева. «А что, если слева будет 17 пробелов?» — спрашиваю. Девочка потупила взор и поняла, что придётся запускать программу 17 раз.

Каково же было её удивление, когда я показал ей свой код, вернее, одну команду, которая может убрать хоть 17, хоть 30 пробелов и слева, и справа:

replace all a.fieldname with alltrim(a.fieldname)