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

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

4671

Компилятор с травмой мозга

Знаете ли вы, что такое компилятор с травмой мозга? О, вы не знаете, что это такое, если не использовали C-компилятор для микроконтроллеров Microchip от некоей якобы высокотехнологичной фирмы.

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

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

4640

Ресурс-перетрах

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

Откопал в архивах исходники, немного украсил интерфейс, начал смотреть, куда бы свистелки прикрутить. Одним из основных модулей программы являлся враппер для класcов .NET-фреймворка IO.BinaryReader и IO.BinaryWriter, который превращал двоичный файл во внутренние данные програмы и наоборот. Называлось это чудо техники clsResEx, а прокоментировано было следующим образом:

' clsResEx (RESource EXtender), расширитель ресурных файлов

Следующая строка, видимо, была добавлена где-то в середине процесса написания кода:

' возможно, правильнее: clsReSex — перетрахиватель ресурсных файлов

И верно: переписать clsReSex оказалось гораздо проще, чем разбираться в нём, не говоря уже о том, что новый вариант работал почти вдвое быстрее и весил в три раза меньше вместе с свистелками (анимированными прогресс-барами).

4617

Фундамента много не бывает

Прислали от одной госконторы-монополиста программку для учёта и создания всероссийской базы кое-каких данных. Программа даже не сетапится, а просто запускается экзешником. Собственно, делает простое: из заполненных табличек формирует XML-файл. Сама программа весит полметра. Но, блин, чтобы её запустить, надо установить .NET-фреймворк 3.5, который весит 240 метров и загружает проц чуть ли не на 100%. И как после такого назвать человека, что писал этот код? Индусы нервно курят в сторонке и завидуют.

4593

Лицом по пальме

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

char t = malloc(SIZE);

if (t == NULL)

return 0xFFFUUU;

if (...)

return !(PALM += 0xFACE);

Парня приняли, но с наказом больше так не шутить.

4565

Желтее жёлтого

Администрируйте Sharepoint. Вам никогда не будет скучно, и каждый день вы будете узнавать что-то новое. Вы познаете дао гугления и научитесь читать мануалы и форумы на таких языках, о существовании которых ранее и не подозревали. Вы узнаете о новых видах логики, начнёте в них разбираться и строить выводы на их основе. После того, как вы настроите Service Level Dashboard, установка Gentoo покажется вам плёвым делом, а после того, как напишете веб-часть, любая открытая CMS, даже если она создана в качестве курсовой работы студентом-индусом, покажется вам верхом логичного и структурированного программирования.

Вы не застали Советский Союз? Вам не хватает бюрократии? Общайтесь с программистами 1С! Ознакомившись со списком требований к изменению одного параметра в одном скрипте, вы поймёте, что Sharepoint — самая логичная система в мире, а серверная группа — самая лёгкая на подъём. Вы думаете, что вам тяжело живётся, приходится много работать, от вас слишком многого хотят и нечётко формулируют требования? Поговорите со специалистами по 1С, и вы поймёте, что хуже всего им, а вы — зажравшийся буржуй, не подвластный дрессировке, заставляющий их страдать!

4555

Вербально-логический незачёт

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

* * *

Задал он лабораторку: напиши, говорит, архиватор, чтобы мы файл зажали ARJ, RAR и твоим архиватором, и твой оказался бы в полтора раза меньше. Мы, конечно, прошли Хаффмана к тому времени, но чтобы так с разбегу коммерческие решения переплюнуть... Я припух, но апеллировать к здравому смыслу было бесполезно.

Выкрутились! «Архиватор» создавал «архив» весом примерно в 10% от исходного файла и закидывал всё на сетевой диск — с глаз подальше. При «разархивации» исходник тупо возвращался на место, если «архив» не модифицировался. На приёме препод-садист искорёжил «архив» и был доволен сообщением «archive corrupt».

* * *

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

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

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

* * *

Последнюю историю рассказали мне сокурсники. Постановка задачи: препод в микрофон говорит что-то типа «два плюс два», программа должна распознать, сосчитать и вывести на экран ответ.

Народ сделал так: программа пишет бред с микрофона в wav-файл, шлёт его по сети в общагу, где на «серверной стороне» сидит человек, который файл этот слушает и ответ пишет, а иногда для правдоподобности ошибку распознавания шлёт.

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

4514

Мы играли, мы играли, наши пальчики устали

Играю в браузерную игрушку: пятые «Герои», только онлайн. Те же расы, прокачка, магия, артефакты, дуэли, групповые бои, убийство толп монстров, — короче, жутко нравится. Деньги зарабатываются так: вводишь код, через час получаешь наличность и возможность ввести код опять. 500 монет в час — заработок небольшой, но стабильный. Что ещё надо герою на достройку замка? Ещё можно купить ресурсов и с прибылью в 4 монетки продавать на предприятия по производству артефактов. От Москвы, где стоит сервер, я далеко, и продать ресурсы можно только ночью, иначе живущие в ста метрах от дата-центра на стомегабитной выделенке продадут быстрее. Короче, только геморрой наживать.

Пару месяцев назад админы срезали количество денег с ввода кодов на 40%. Дескать, хотите играть часто и интересно — закиньте настоящих денег. Я студент, денег на сытный обед не каждый день хватает, не то что на игрушку. Погоревал я три дня. Как жить дальше? Денег нет, но ведь есть мозг! Полез изучать JavaScript.

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

Теперь я знаю JavaScript, пишу для знакомых ботов для голосования и прочие мелкие браузерные удобства. Кто-то тут ещё не верит, что игры развивают?

4503

Бета-капелла

Если бы наш гендир был Лоренцо Медичи, а наш отдел программирования — Микеланджело с соучениками, заказ на роспись Сикстинской капеллы выглядел бы так.

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

— Там краски нужны специфические...

— Возьмёте у маляров, они дешевле. В пятницу проверю!

4488

Офисная забава «триста точек на дюйм»

Как-то давно набрёл в сети на довольно интересный инструмент под названием AutoIT: язык программирования, что-то типа VBS, только проще, заточенный на автоматизацию мышиных и клавиатурных нажатий. Написав пару инсталляторов, я решил поприкалываться и написать пару программок-шуток, например, «кукушку», которая каждый час отбивает склянки, открывая и закрывая CD-ROM и воспроизводя птичий крик. Поприкалывался, подсовывая эти програмки на компы коллег, посмеялся и забыл. С тех пор скрипты на Автоите завсегда стояли у нас на боевом дежурстве: если пользователь обращался с тривиальной проблемой, решаемой в пару кликов, ему просто говорили, какой скрипт запустить, чтобы всё работало нормально. И вот однажды звонок:

— У меня принтер не печатает.

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

— Не работает ваша программа. Никакого сообщения она не выдала, и вообще компьютер теперь себя странно ведёт.

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

— Смотрите, что он мне выдаёт.

Смотрю и непроизвольно начинаю смеяться. После отправки документа на печать вижу сообщение якобы от операционной системы: «Извините, принтер не готов. У вас есть карандаш?» Оказывается, я перепутал скрипты и дал пользователю один из своих приколов. С тех пор все шутки я храню отдельно.

4487

Щелчок по лбу

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

Намётанный глаз сразу выхватил из текста анализа «CRITICAL_OBJECT_TERMINATION» (причину падения), «MODULE_NAME: smss» (тот самый critical object, что и вызвал BSoD) и «PROCESS_NAME: Clicker.exe» (кто этот самый объект прихлопнул). Уже хотел закрыть вкладку, так как этот случай меня не интересовал, но решил пролистать ответы:

Эксперт: «PROCESS_NAME: Clicker.exe». Что за кликер?

Новичок: Моя программа.

Эксперт: Ещё подсказки нужны?