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

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

11000

Вышиб дно и вышел вон

Четырёхъядерный проц, 2 ГБ ОЗУ, 64 ГБ флеш-памяти, экран 1920×1080. Как многие поняли, сейчас я описал смартфон известной фирмы. По характеристикам он не отстаёт от среднего ПК двух-трёхлетней давности. Да, хорошо, я принимаю, что микропроцессоры сейчас стоят копейки, что время программиста дороже. Но в итоге, следуя простой истине «нет ничего постоянней, чем временное», получается куча кода, который тупит. Да-да, несмотря на выдающиеся характеристики железа. Более того, ПО так нагружает процессор и память, что те разогревают весь смартфон до невозможности.

Один такой смартфон (не тот, чьи характеристики я описал, а модель помладше) с разогнанным на заводе процессором (зачем это сделали — непонятно) в один прекрасный день не совладал с игрушкой. Взорвался аккумулятор, не выдержав перегрева. К счастью, производители аккумулятора предусмотрели такой исход, и корпус надулся, как шарик, но не раскрылся. Однако осадок остался. В то же время обычные телефоны этой же фирмы работают без нареканий десятками лет. И от аккумулятора работают не как ноутбук, а как телефон — положенные три дня в режиме ожидания.

Так, может быть, дело не в железе, а в том, кто писал для него софт и накладывал требования, которые выполнить нереально?

10995

Вспомни, как это было

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

На тот момент я уже прекрасно знал, как устроен DOS. Из обыкновенного Паскаля выяснил, что просто в памяти затёрта запись о диске. Легко! Написал простую программку, восстанавливающую в памяти status quo, — дисковод появился.

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

10958

Блестит, поёт, не хочет ехать

Знаете, за долгое время работы программистом я усвоил одну вещь. Расскажу на примере.

У нас есть замечательный завод, который выпускает прекрасные автомобили «Запорожец». К нам приходит важный заказчик и говорит: «Хочу авто, чтобы через неделю и чтобы ездило». И вот гендиректор завода вместо того, чтобы собрать «Запорожец» из лучших деталей и отполировать его до блеска, заставляет рабочих собирать «Мерседес», учитывая, что деталей нет, запчастей нет, а есть только голый энтузиазм. В итоге через месяц (путём затягивания сроков и обещаний «завтра точно будет готово») заказчик вместо прекрасного «Запорожца» видит «Мерседес» с салоном из дерматина, вентилятором вместо кондея, аудиосистемой «Урал» вместо магнитолы, без колёс, дверей и двигателя. Подивившись на такое чудо, важный заказчик уходит к конкурентам и через неделю получает от них «Жигули», которые через несколько месяцев постепенно превращаются в «Астон Мартин».

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

10951

onTongueDown()

Пишу обработчик события onclick на Javascript. Написал, кликаю-кликаю, но чего-то не работает. Смотрю код, а там — onlick. Ну конечно не работает, событие же другое! Лизать надо!

10950

Вредоносонос

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

Повторный ребут возвращает всё на свои места. Безумно злая и уже успевшая позвонить ему пару раз («Абонент недоступен или находится…»), я нахожу его в сети. Естественно, описываю всё случившееся, получаю искреннее удивление в ответ. Списываю на сбой в системе. Запускаю снова…

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

10946

Рюшечки и геморрой в подарок

Непонятно, с какого перепугу ругают индусов и называют по-идиотски написанный код индусятиной. В конце концов, 80% кода в мире написано индусами, и этот код худо-бедно работает. Индус прост: что заказали, то и написал. Не понравилось — объяснил почему, и индус свой код переписал. Тупо и просто. А вот обратный пример.

В эпоху перехода с Win98 на WinXP пришло задание — прикрутить к нашей программе скины. Бантики-рюшечки, определяемые пользователем цвета рамочки окна и нестандартные кнопки вместо стандартных. Умный индус взял бы какой-нибудь WMShell и прикрутил к программе, глупый написал бы с нуля, но за дело взялись два гениальных и суровых русских программиста, которые регулярно тусовались на RSDN и поражали всех своей крутизной.

Рассказывать всю хронологию долго, поэтому перейдём к результату. Помимо основной программы получилось два COM-сервера. Я первый раз видел, чтоб для отрисовки кнопки надо было ходить в соседний процесс. При этом к СОМ-серверу обращались не от имени кнопки, а от имени родительского окна, формировалась некая структура, для передачи которой был написан собственный маршалинг. Рисовать через стандартные средства было в лом, поэтому перехватывались непосредственно вызовы WinAPI с помощью хакерских приблуд типа Detours. За всем этим делом следил другой СОМ-сервер, который отслеживал изменения в конфиг-файле и принудительно перерисовывал в случае чего окно приложения. Конфигурация (несколько циферок для цветов и имена файлов десятка битмапок), естественно, не могла храниться ни в текстовом, ни в INI-файле: религия не позволяла. Только XML! При этом зашитый в ОС MSXML 2.0 тоже не мог использоваться по религиозным соображениям. Только XML последней версии мог хранить сакральные цифры RGB. В результате в дистрибутив запихнули инсталлятор XML, а когда Микрософт перешёл на формат MSI, то ещё два инсталлятора Microsoft Installer — для 98 и XP. Инсталлер оброс скриптом, который определял, что и куда ставить, в зависимости от ОС и её конфигурации. Итого +30 мегов к дистрибутиву. Что показательно, кроме дефолтных скинов, ничего другого не появилось. Ценность программы определялась не рюшечками, а её прикладными свойствами.

Индус страшен, пока не придёт русский программист — бессмысленный и беспощадный. Он решит все проблемы, которых у вас не было. Причём решит таким способом, который добавит геморроя на следующие десять лет.

10945

Кофе или GTFO

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

Уговоры, шаманские танцы с бубнами, предложения вместе выпить, слёзы и упрашивания эффекта не давали. Через какое-то время мне всё же удалось зафиксировать определённую закономерность. Знакомый работал, но когда его сильно нагружали, он просто посылал всех на @#$, обижался и минут пять ни с кем не разговаривал. Потом, правда, начинал опять, но заново, и опять не доходил до нужного результата.

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

В отчаянии я пошёл на крайнюю меру: решил дать ему задачу старым, проверенным, дедовским способом. В момент, когда я уже почти обрадовался, когда он почти превзошёл себя, он опять встал со словами: «Идите на @#$!»

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

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

10944

NaN километров в час

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

И вот подцепляю блок, инвертер, ноут, прошивальщик… Сигнал тахометра получил без проблем, обороты подсчитал. А сигнал скорости? Фигня: задираю колесо, передача — поехали. И вот никак не выходит. С полчаса сижу. И тут в окно — тук-тук. Опускаю стекло. Стоит мужик.

— Не получается?

— Э-э-э, ну да. Вот, скорость снять не удаётся.

— AVR?

— Э-э-э… Да.

— Дай глянуть.

Открываю дверь, мужичок смотрит код процедуры обработки прерывания и процедуры вычисления.

— Вроде правильно. Хм… А переменную через volatile объявил?

— Точно…

В спешке по оборотам объявку-то повесил, а по скорости забыл. Вешаю — хоп, вот и скорость!

— Работает, спасибо!

— Да не за что, пока!

И уходит. Это что — нормально, да?

10918

Он и в Техасе лунолёт

Моим первым домашним компом была незабвенная «Электроника МК-61». Тоже баловался с еггогологией и «Лунолётами». Даже первый мой программистский заказ был именно на МК-61 — сделал для маминого института пару программок с очень длинными расчётами.

Естественно, набрав опыта с МК-61, я начал интересовался и другими калькуляторами. В том числе узнал и о чуде чудном, диве дивном — программируемом калькуляторе с графическим дисплеем, якобы выпускавшемся в мифической заморской фирме Texas Instruments. Сами понимаете, в конце восьмидесятых и начале девяностых завладеть такой волшебной техникой было нереально, и желание поиграть с крутым калькулятором плавно перешло в ту же группу желаний, что и мечты поймать золотую рыбку или говорящую щуку.

Прошло четверть века, мне уже сорок лет, я давно живу в США. Не так давно я почти случайно опять стал студентом — на этот раз в одном из университетов Лиги плюща. Совершенно неожиданно обнаружил, что на экзамене можно пользоваться калькулятором, но нельзя смартфоном-планшетом-ноутбуком. Но калькулятором-то можно! Как вы думаете, какая модель калькуляторов оказалась самой популярной среди студентов? Правильно — TI-84! Производства той самой Texas Instruments, чьё существование я когда-то считал чуть ли не мифом.

И вот держу я в руках программируемый калькулятор, выпущенный в XXI веке, и думаю: а не написать мне для него «Лунолёт»? Надо бы завершить круг.

10905

От индуса с любовью

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

Клиент хочет отчётность в своей программе с бюджетом в одну тысячу долларов? Не удивляйтесь, что вместо окна Ворда или отчёта в Crystal Reports появляется программное окошко Интернет-эксплодера с HTML. Клиенту я не смогу объяснить, зачем ему DLL по работе с доками за дополнительные сотни долларов (всего-то три документика распечатать)? или что ему нужно мигрировать с Офиса 2000 на более современный (двухтысячный даже программный find/replace в доке не может сделать), или что железо бы обновить неплохо было, ибо компы девяностых годов «хрюнделя» еле тянут. Сисадмин меня местный тоже не поддержит: ему работы дополнительной совсем не нужно. И потом, когда потребуются новые документы/отчёты, я буду ручками экспортить их в тот же HTML — за дополнительную плату.

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