bash.im ithappens.me zadolba.li

Индийский код

11014

Спонсор слоупочтинга

Я хочу поблагодарить неизвестного индуса за обновление нашей основной почтовой программы — 1.18.0.36.

Огромное тебе спасибо, неизвестный индус, написавший столь замечательный релиз рабочей программы оператора! Благодаря тебе мы вынуждены проводить выдачу отправлений с наложенным платежом в таком оригинальном варианте: сначала провести посылочку по компьютеру, рассчитаться, а после уже провести ввод наложки. Действительно, механизм, действовавший ранее, неправилен и мерзок, ибо экономит время.

Именно благодаря тебе, друг мой, у нас до сих пор нормально не работает выдача нескольких переводов одному человеку. Но что тебе, индусу, до дел простых смертных, которые устали по десять-двадцать раз вводить одни и те же данные (паспорт, кем и когда выдан, код подразделения), пытаясь уложиться в несоразмерно малый лимит текстбокса?

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

Спасибо, индус. Чтоб тебе икалось!

10946

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

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

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

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

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

10912

Поправки на суровую реальность

Ещё месяц назад я был идеалистом, писал о том, какой кривой код я нашёл на спиртзаводе. После этого я нашёл код гения. Полностью в косвенной адресации, всё работает, занимая вдвое меньше памяти (к слову, в промышленности 128 КБ оперативы — суровая реальность, а 256 КБ стоят уже втрое больше, а это уже полторы тонны зелени), всё красиво, напоминает безумства из фильмов, но ни хрена не понятно. Да и как отлаживать — тоже неизвестно.

Сегодня я вернулся с объекта, сварил 15 тонн кваса и понял, как и что делается.

Перед отъездом на мой первый объект в моём коде разобраться мог даже электрик (да-да, язык релейной логики поймёт любой из здешних, надо минут пятнадцать, чтобы разобраться): везде комменты, всё разбито на отдельные ветки, в каждой из которых одно действие…

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

Прощай, красивый идеалистичный код! Привет, Франкенштейн! Люди, я создал монстра, я один из вас…

10874

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

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

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

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

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

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

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

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

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

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

10820

Так писал мудрец Обфусций

Я раньше думал, что так только на Баше бывает. Ну, или на Хабре.

Попался мне по долгу службы исходник от спиртзавода для французских контроллеров с немецким названием в среде разработки «Единство».

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

Вместо понятного и рекомендуемого для логики языка LAD используется язык структурного текста, в котором из конструкций IF — THEN — ELSEIF строится монстр, который уместился бы всего-то на двух понятных ветках релейной логики.

Все переменные имеют названия s_ed, st_ed, s_ed_o, t_q и не имеют комментариев. Комменты вообще скупы и непонятны по всему телу программы.

Развязка? Это не студент и даже не джуниор, а человек с многолетним опытом работы и запуска. Вот тут уже воистину страшно.

10752

Пока рак на горе не свистит

В школьные годы был у меня товарищ, который сейчас удивительным образом учится в Бауманке. Парень поражал меня время от времени своими «программизмами». Как и большинство школьников, мы изучали Паскаль, и время от времени этот субъект звонил мне, чтобы посоветоваться, потому что программирование у него шло крайне туго.

Как-то раз после особенно долгого, почти часового объяснения, как написать какие-то 200 строчек кода с использованием модуля Graph, я сдался и попросил прислать код на почту. Открываю .pas, читаю начало кода:

program graphblabla;
if 4 > 3 then
BEGIN

Мне понадобилось минут пять, чтобы перевести дух.

10565

DOM на миллион квартир

Захотелось в рамках выходного R&D, дабы не рисовать и не придумывать расположение тестовых объектов, взять информацию из ныне популярной браузерной игры с зелёными кристаллами — той, что сделана наподобие аналога 13-летней давности.

Нахожу, открываю, цепляю Огнелисом десяток изображений, которые грузит флешевый ролик, и заталкиваю в спрайт, попутно прикидывая оптимальный формат хранения. Понимая, что надо бы выдернуть всё и разом, запускаю Хром, иду на тот же сайт и погружаюсь в мысли о несовершенстве мира и грядущем апокалипсисе. Тормозит страшно, FPS чуть меньше единицы, i7 моей машины на коленях молит о пощаде. Я привык, конечно, что любая зараза нынче насилует всю тройку нормальных браузеров, но не до такой же степени!

Медленно отхожу от ужаса, на ощупь открывая вкладку загружаемых ресурсов. У меня начинает шевелиться растительность даже там, где её быть не должно: в списке примерно 1300 загружаемых файлов. Худо-бедно сохраняю всё это безобразие, открываю. Каждый уголок, градиент, бордюр, фон, объект, кнопка — отдельным PNG-файлом от 2 до 3000 пикселей по одной стороне. Видимо, для тех, кого не впечатлил список файлов, также прилагается файл с JSON-массивом всех объектов игрового мира с их идентификаторами, свойствами и прочей прелестью. Мир 1000×1000 клеток, на экране при минимальном зуме присутствует фрагмент 25×15. Оптимизация? Не, не слышали.

Вы всё ещё хотите видеть плавную анимацию на своих пятиядерных сотовых телефонах? Смею вас расстроить: вам нужно в прошлое, лет на десять назад.

10499

Загончик новомодных кодировок

Звонит мне посреди рабочего дня товарищ и в панике сообщает, что у него весь сайт, вплоть до БД, на Windows-1251, а AJAX выводит текстовые файлы ромбиками — в UTF-8. Начинаю ему рассказывать, как это лечить, и вдруг он говорит:

— Окйе, я понял, более слов не надо, сейчас всё сам сделаю.

Перезванивает через час:

— Решил проблему!
— Как?
— Неважно. А ты не знаешь, как высоту фрейма перехватить?

10414

Незаменимые люди есть

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

У моей начальницы во владении есть ещё одна организация. В организации стоит древний комп, на нем 95 винда и база на Фокспро 2.6. И, конечно же, недоумения начальства: «А на фига тут что-то менять, работает же!»

Итак, из этой конторы увольняется заведующая, и на её место берут нового человека. Соответственно, во всех документах нужна новая фамилия. Начальство говорит: «Сделай!» Казалось бы, что сложного — новую фамилию в справочник с сотрудниками вбить? А вот фигу: справочника такого нет и в помине. Я иду к Гуглу и начинаю терроризировать по аське знакомых настоящих программистов. Мне говорят: «Открывай REP-файлы, там найдёшь формы всех документов и поменяешь подписи». Всё просмотрела — фигу! Нету. Стала открывать в редакторе все файлы в порядке очереди и таки нашла эту фамилию в одном из файлов с расширением PRG, записанную прямо в программный код.

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