bash.im ithappens.me zadolba.li
9577

О нежности и бензопилах

17 июля 2012, 07:15

Программировал я как-то мобильную игру — «захват флага». Несколько забавных эпизодов.

Потребовалось много итераций, чтобы отработать обыкновенный звук подбора бонуса. Я говорю: «Нежнее». Музыкант: «У меня тут и так стоит флейта». И вдруг меня осенило: «Поставь рояль». Банальный рояль, который стоит в MIDI-банках под номером 0. Сработало, в таком виде звук и вошёл в игру.

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

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

Была занятная ошибка: бот перепрыгивает через яму, потом падает в неё. Причина — «сено-солома»: где-то в коде я спутал «лево» и «право».

9576

ЩЗХЪ!

17 июля 2012, 07:15

Сидим на кухне сильно пьяные. В бухие головы приходит вопрос: где на клавиатуре буква «З»? Стали перебирать.

— Сейчас я всё вспомню, и она найдётся. Так, погодите. Верхний ряд: ФЫВАПРОЛДЖЭ.
— Эй, ты не прав! ФЫВАПРОЛДЖЭ — средний ряд, а верхний — ЙЦУКЕНГШЩХ!
— Значит, буква «З» в третьем ряду. Щас. ЯЧСМИТЬБЮ… И где «З»?
— Так, погодите. Давайте перебирать. ФЫВАПРОЛДЖЭ…
— Может, ФЫВАПРОЛЗДЖЭ?
— Нет, ФЫВАПРОЛДЖЭ, я точно помню.
— ЯЧСМИТЬБЮ… Где же «З»?
— ЙЦУКЕНГШЩ…
— Погодите, там есть твёрдый знак. ЙЦУКЕНГШЩХЪ?
— Может, ЙЦУКЕНГШЩЗХЪ?
— Или ЯЧЗМИТЬБЮ?
— ЙЦУКЕНГШЩЗЪ!
— Да нет же, ЙЦУКЕНГШЩЗХЪ!
— Точно, ЙЦУКЕНГШЩЗХЪ!

Тут мы замечаем, что тридцать секунд назад в комнату вошла жена. Смотрит на нас как на ненормальных и спрашивает:

— Это вы на каком языке разговаривали?

9575

Flop up

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

Стало доноситься из системника периодичное ритмичное постукивание. Сначала подумал, показалось. Но потом прислушался — звук реально есть. Откинул боковину системного блока, буквально засунул туда голову. Звук шёл от винчестера. Ну, думаю, всё, пришёл к моему винту белый пушистый северный зверёк. Звук этот я никогда не слышал, только друзья рассказывали. Но бурную фантазию было не остановить. Я живо себе представил, что произойдёт, если винт помрёт. Фиг с ними, с играми и фильмами; на нём лежат курсовики и методические материалы по некоторым предметам. Бэкап на пару болванок наиболее важного я сделал немедленно, но ситуацию это не меняло. Мне нужна была работоспособная машина для скорого завершения проектов — на носу был конец семестра.

Нужен новый винт. Лезу на сайт именитого магазина комплектующих, подбираю пару вариантов на замену. Заглядываю в бумажник — не набирается и на самый дешёвый. Смотрю на календарь — 24-е. Обычно в этих числах староста ходила в бухгалтерию за стипендией, но сейчас, как назло, бюджетников переводили на безналичный расчет. А карту я ещё не получил, поскольку не было до этого вечера нужды спешить.

На следующий день начинаю безумный квест: с утра — на пары в универ, потом в деканат, который находится в другом корпусе в другом районе города. Там расписываюсь в какой-то бумажке, и замдекана дает мне адрес отделения банка, где мне следует получить карту. Еду туда, обращаюсь в свободное окошко. Мне говорят: мол, с недавних пор мы этим не занимаемся, езжайте в другое отделение. Еду туда, выстаиваю небольшую очередь. Куча формальностей — и я наконец получаю карту. Тут же у отделения проверяю в банкомате баланс. Чудо — стипендия начислена! Снимаю нужную сумму.

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

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

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

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

9574

WM_WHY?

16 июля 2012, 07:45

В 1996 году мы с одногруппником, изучая Windows API, писали тестовые программы. Использовали предшественника C++ Builder — компилятор Borland C++ 5.0. И хотя компиляторы Borland всегда были очень шустры, на слабых машинах из-за огромного windows.h даже «Hello World!» собирался полминуты.

Мой одногруппник решил «оптимизировать» свою программу, заменив все макросы из windows.h на числовые значения: вместо WM_COMMAND в цикл сообщений вставил число 0111h, вместо WM_TIMER — 0113h, а вместо WM_CREATE — 0001h. Логика была простой: константы никогда не поменяются, значит, можно их и вбить, чтобы компилятор не трудился.

В результате программа стала совершенно нечитаемой, но скорость компиляции совершенно не возросла, ведь всё равно в программе нужно было оставить строку #include <windows.h>. Поэтому пришлось вернуть всё обратно. Конечно, мы догадались, зачем нужны эти «дурацкие» #define.

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

9573

Выполнить любой ценой

16 июля 2012, 07:45

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

— Да из-за вас интернет не работает, и сеть тоже, а за него уплачено!

Вернувшись на рабочее место, вижу, что все свитчи отключены.

— Кто?!
— По приказу ректора всё электронное оборудование на время каникул должно быть обесточено.

Долго пришлось обьяснять, что к чему.

9572

Click/clack/bang

16 июля 2012, 07:45

Небольшая фирма по производству электроники. Работаю. Мимо проходит директор и двое плохо одетых пацанов, явно чувствующих себя неуверенно. Слышу обрывок фразы: «…ну, в детстве я паял». В мозгу: click! Такой звук бывает, когда оттягиваешь рамку затвора пистолета в заднее положение.

Директор идёт обратно и по пути говорит главному инженеру: «С области пацаны. Вроде толковые. Пока посадил ДПА-3 паять». В мозгу: clack! Это когда отпускаешь рамку затвора, и под воздействием пружины он запирается.

Вокруг начинает носиться толпа народа с криками: «Бл#$ь! Плата четырёхслойная! П@&$#ц! Порвали все дорожки! Новые никто не успеет сделать! Послезавтра отправлять!» Это весьма ожидаемый bang!

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

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

Недавно начальник производства пришёл и сказал: «Тут двое пацанов на работу просятся. С области, вроде толковые». Хе-хе. Сlick! «Зови, поговорим. Как раз не успеваем SH-2 распаять».

9571

Меньше мозгов

16 июля 2012, 07:15

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

Кто мне скажет, какой смысл в простейшую релейную схему пихать контроллер ATmega128?! А контроллер не сгорел, выпаял я его, но до сих пор нигде не применил — мне и ATtiny2313 вполне хватает.

9570

Ждём в гости космических дятлов

16 июля 2012, 07:15

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

Дом построен из самых обычных на вид железобетонных плит. Впрочем, при просветке интравизором становится ясно, что если материал и имел что-то общее с железобетоном и плитами, то разве что на стадии выбора материала.

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

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

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

Дом обменивается служебной информацией с другими Домами.

Аварийный переход к полной автономии — штатный режим функционирования Дома, как и защита от неблагоприятных внешних факторов, не говоря уже об индивидуальном климат-контроле с воспроизведением, например, грозы.

99,5% времени наши Дома не тратят впустую энергию, а просто спят.

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

А все почему? Сразу были выкинуты напрочь все «современные» среды и технологии. Нам не хайвмайнд собирать, а работать надо. Был выбран компилятор с неплохой библиотекой, отвечающей нашим целям, генерирующий стабильный логичный код — разумеется, Си с «плюсами» в следовых количествах. Мы никогда не писали тест-кейсов — это пустая трата времени, если код написан очевидно. Вы же не пишете тест-кейсы для while(1)? Никогда не менялись работой — каждый должен сделать то, что умеет лучше, и суметь объяснить, как этим пользоваться. У нас никогда не было менеджера: нет бригады дармоедов — нет и работы для дармоед-контролёра.

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

Да, кстати, работает это добро (отказоустойчивая база данных, обмен данными между изолированными оконечными устройствами, восстановление после отказов любой степени критичности) на ATmega128 на 16 МГц. А прежние европейские цивилизованные разработчики, с менеджером, аджайлом и тест-кейсами, собирались переходить с PIC сразу на mini-ITX от VIA, не реализовав и четверти нашей функциональности.

9569

Принт-форс-мажор

16 июля 2012, 07:15

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

Я вставил TIFF в Ворд и спокойно нажал Ctrl+P.