bash.im ithappens.me zadolba.li

Программизмы

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 — за дополнительную плату.

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

10904

Группа любителей пластилина и турпоходов

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

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

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

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

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

Как показала практика — не у меня одного такая реакция. Прошло совсем немного времени, и встречами пользоваться практически перестали. Из-за, ёклмн, неудобства.

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

10885

Вышел месяц из тумана

Всего лишь комментарий из весьма космической программы:

if (dist > 66000)
{
// Hе попали в сферу действия Луны
// Ну и хрен с ним — считаем, что попали

}

10883

Багоумертвитель высшего разряда

Когда-то давно в одном НИИ программист, ученик самого Шуры-Буры, сказал мне:

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

Через 20 лет в том же НИИ я обучал аспирантку писать апплеты на Java. Ну чему я мог её научить? На этом языке толком не программировал, специального программистского образования у меня нет — инженер-механик я. Да и появлялся я к тому моменту в НИИ раз в неделю. Так что я долбил всего одну фразу: «Учись сидеть в отладчике и читать доки».

Девчонка ушла из НИИ работать Java-программистом. Без опыта. Брали под соусом «не будет программировать — хоть секретарша красивая у нас будет». Через год ей повысили зарплату вдвое c лишним до топовых значений аналогичных вакансий.

И до чего же всё-таки приятно, когда тебе говорят в аське:

— Спасибо, учитель!

10874

В мозгу индус всегда отыщет уголок

Уж сколько раз твердили миру,
Как вреден быдлокод;
Но только всё не впрок,
В мозгу индус
Всегда отыщет уголок.

Читал историю о Чайнике-2013 — аж перекосило, ей-богу.

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

1. Неправильное выполнение её может похерить данные на живой рабочей базе.

2. Понятие «отмена последнего действия» не предусмотрено.

3. Перед каждым запуском операции нужно делать бэкап всей базы (!) вручную (!!).

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

Софт пишется для пользователя. Он пишется так, чтобы пользователю было удобно, а не так, как было удобно накалякать пьяному индусу.

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