bash.im ithappens.me zadolba.li

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

4902

Не плачь, малыш, возьми пустышку

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

Тут меня осенила идея. Глупая, безумная — но терять уже нечего. Дали мы системе все файлы, которые она просила, но пустые. Шестнадцать файлов подряд. Заработало! Проект сдали, деньги получили, но осадок остался: кому-то потом это всё после нас ковырять.

4896

Легенда о двойной уникальности

Пишу скрипт на PHP. Почему-то на сервере не работает array_unique() — не удаляет дубликаты из массива. Локально — да, на сервере — не до конца. Курю мануалы, форумы — не помогает. В каком-то безысходном порыве решаю вставить в код второй array_unique(). Чудо: дубликаты удалены! Смотрю на конструкцию:

$arr = array_unique($arr);
$arr = array_unique($arr);

...и добавляю комментарий:

// कोड में टिप्पणी — यह है कि उसने क्या कहा डिबगिंग के दौरान प्रोग्रामर

Ну, чтобы легенда не умирала.

4883

Кришна с нами

И вы удивляетесь, что индийский код работает? Не надо. Причина проста: они его благословляют.

void h(ne) {return ra/rn};
//-----------------------
//Pray all your gods to
//make this work and
//be careful with
//debugging
//Abdul Rahman Krishnaswami
//------------------------

Если Кришна с нами, то и успех будет всегда. Меняем бубны на чётки — и в бой!

4813

Тяжело в учении, тяжело в бою

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

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

* * *

Переменные могут состоять либо из одной буквы, либо из одной буквы и цифры. «ts» или «t00» — ошибка синтаксиса.

* * *

Есть вот такие строки кода:
t1 = ET1/10 − t0;
output(#0, t1);

Выполняются они по факту в такой последовательности:
t1 = ET1/10;
output(#0, t1);
t1 = t1 − t0;
output(#0, t1);

* * *

ET1/10 ≠ ET1*0,1. После обнаружения этого бага я вышел из аудитории и побился об стены. Программа вела себя по-разному: то замедляла время в десять раз, то считала время как дробную величину, а не целую.

* * *

Явно заданное в коде обнуление не происходит? Надо перезапустить программу дважды. В первый раз странным образом сбрасывается пара параметров, после второго включения — все остальные.

* * *

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

4782

Не смотрите под капот

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

Прошло несколько лет. На пятом курсе на выходные я вернулся домой. Разговор с родителями зашёл о программировании, и мама сообщила мне сногсшибательную новость: мою кривую и косую программу, оказывается, используют кадровики почти всех школ города (мама работает в РОО), и её даже показывают на каких-то внутренних курсах для айтишников. Почему её полюбили кадровики? Она не требовала установки, следовательно, легко переносилась с компа на комп даже самыми тугими пользователями; имела простой и понятный интерфейс, разрабатывавшийся непосредственно при участии мамы-кадровика; считала всё быстро и правильно (не знаю, как я умудрился в том возрасте нигде не накосячить).

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

4736

Два раза проверь, один отрежь

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

Если ФлагЗаписи = 1 Тогда
[...]
// На всякий случай...
Если ФлагЗаписи = 1 Тогда
[...]
КонецЕсли;
КонецЕсли;

Коллеги, работайте на свежую голову.

4698

Вкривь, вкось и не спеша

Кажется, я знаю название софтинки из истории про сущности. Мы тоже берём файл из P-CAD, перегоняем его в *.dxf, который скармливаем простенькой старенькой софтине для генерации управляющей программы в G-кодах. Каждое действие занимает секунды три, а поворот всей модели — около десяти. Что на десктопе с Атлоном 3000+ и двумя гигами оперативки, что на ноутбуке с Core 2 Duo и четыремя гигами. Обычно обе этих машины легко вращают тяжелые солидворксовские сборки из десятков деталей. Немало удивившись, начинаем думать, как же оно всё вообще работало в начале двухтысячных. Взяли со склада старый третий «пень» с WinXP, поставили программу — никаких тормозов. В чём разница? В видеокарте. Старая и слабая дискретная видяшка на 16 метров для творения сумеречных гениев предпочтительнее, чем любая из современных встроенных.

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

4695

Пока не меркнет свет, пока горит свеча

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

Сумма = Документ.Сумма;
Если Сумма = Сумма Тогда
СуммаНовая = Сумма;
Иначе
Сумма = Сумма;
КонецЕсли;

Пока "Сообщение на экране" = "Сообщение на экране" Цикл
[...]
КонецЦикла;

Все мы хороши.

4686

Не множьте сущности

Не так давно выяснилось, что некоторые корейцы — очень даже индусы.

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

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

На софт из комплекта поставки были натравлены лучшие программисты из имеющихся. Оказалось, что при «размножении» рисунка платы только имеющая индекс (1, 1) получала нормальные координаты всех технологических элементов, а у остальных они умножались на соответствующее порядковому номеру число.