Истории с тегом: индийский код

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

11472

but1, but2, butwhy

Наткнулся сегодня на JS одного сайта. Полторы тысячи с лишним закомментированных строк кода. Сам код вырезал, оставил только комментарии.

// Закомментировал, пока не разобрался, что и зачем. Работает и без этого.

// Это просто и легко, всё понятно

// Тут для массива картинок, состоящего из более чем одной картинки

// Разблокируем возможность листать дальше. ОК

// Размер картинки должен быть не меньше 1×1! Ну, ладно

// Смещение картинки ВЛЕВО, сцуко. На хрена?

// Это кнопки.

// Кнопка вперёд

// Кнопка назад

// Кнопка вниз? Вверх? Пауза? Плей? Какой урод это писал?

// Почему, ссука, but1, but2, but3?

// Кнопка хренпоймизачем2

// Кнопка хренпоймизачем3

// Кнопка хренпоймизачем4

// Ещё одна хренпойминахуа. Валидола мне.

// Это явно для костыля ниже

// Это хрень закомментирована не мной, и не написано зачем

// и что это значит. Подозреваю, что это костыль.

// Но мы зачем-то блокируем возможность листать в этом костыле

// Тут количество фоток уменьшаем на три. Почему на три?

// Почему не на четыре?

// А тут разблокируем возможность листать. Хм…

// Умри, ссука.

11255

Сложно — но можно?

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

Написать функцию size() для списка? Нормальные люди для этого заводят переменную, обнуляют при создании массива, инкрементируют при вставке элемента и декрементируют при удалении. Но это не по фэн-шую: мы просто пересчитаем все элементы.

Надо вычислить сумму элементов списка, но писать итератор лень. Да и зачем, если в методичке есть замечательная функция seek(i), возвращая i-й элемент? Но в списке, в отличие от массива, невозможен прямой доступ к элементу, нужно просматривать все с начала списка, поэтому сложность будет квадратичной. А можно ещё написать цикл так: for(int i = 0; i < size(); i++) S += seek[i]. Это вообще замечательно: на каждую итерацию сначала выполним size(), которая просматривает весь список, а потом ещё просмотрим с помощью seek только i первых элементов.

Но один студент переплюнул всех. У него было задание написать функцию, сравнивающую два списка как множества: истина возвращалась, если элементы в списках одинаковые, независимо от порядка следования. Он сделал цикл от 0 до size() одного списка, а туда воткнул такой же цикл для второго. Сложность алгоритма получилась О(N^4)!

11213

Файрвол от проблем

Будучи сам программистом на прямом контакте с заказчиком, очень завидую программистам в больших компаниях.

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

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

Веб-интерфейс того же банка. Регулярно нахожу у них ошибки. В одном месте у них пять символов под сумму, и «125,75» написать невозможно. Нельзя внести платёж за коммуналку, если нет долга. У меня там мизерная сумма в 23 рубля, я хочу доплатить, а оно не даёт. Да какого программа вообще контролирует, сколько я и кому плачу? Служба поддержки мне предложила несколько остроумных способов обхода этих проблем (сделать два платежа и оплатить два раза услуги банка), но не попыталась оформить какую-то заявку программистам на исправление даже после моей прямой фразы: «Девушка, может, нужно написать отчёт об ошибке?» То есть они не просто файрвол от проблем — они сами не имеют связи с разработчиками софта.

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

11170

Альтернативный орган мышления

Позавчера прислали по почте требование заменить счётчики воды. Типа, сто первое последнее китайское предупреждение, если не замените, то начислим плату по социальной норме, будто счётчиков у вас нет. Несколько удивился, потому как поменял оные счётчики ещё в феврале.

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

Эта история пробудила воспоминания о другой софтине образца 1992 года, где элементы списка помечались пробелом, а удалялись нажатием клавиши Esc. Представили? Работает скринсейвер, подходит юзер и долбит по пробелу, чтоб вернуть комп из спячки. Комп просыпается, и юзер видит, что успел отметить пару позиций в списке. На автомате жмёт Esc — и вуаля! Из списка акционеров холдинга, которым положены дивиденды, пропали несколько человек. И так несколько раз в день. Список длинный, хватились не сразу. Как без стрельбы обошлось — сам удивляюсь. Девяностые годы всё-таки.

В общем, айтишники, как софтину написали, так потом и живём. Жаловаться не на кого. Разве что на ДНК.

11093

Не жилец, но есть нюансы

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

Отучился я на специальности «Программное обеспечение ВТ и АС», но потом подался в ремонтники железа. Полученные знания потихоньку утрачивались, а новые касались совершенно других проблем. В один прекрасный момент хорошие знакомые попросили в сжатые сроки написать диплом по специальности, на которой я учился. Тема: «Сетевая реляционная БД». Отмазаться не получилось. Так как на работу отводили неделю, об изучении чего-то нового речи быть не могло: на одну пояснительную записку и плакаты ушло бы три-четыре дня. Писать предлагалось на Delphi 6. Надо отметить, что во время моего обучения на предмете «Базы данных» мы проходили досовский FoxPro 2.6, соответственно, про SQL я только слышал, а о сетевых БД знал только то, что они есть.

Поставленная задача была выполнена. Результатом стал клиент-серверный программный комплекс. Программа-сервер открывала файл MDB через ADO и ждала запросов от клиентских приложений. Клиентские приложения общались с сервером через DirectPlay (компонент DirectX, предназначенный для простой реализации сетевых игр), используя самопальный язык запросов. Получив от клиента запрос, сервер мог искать в БД данные методами FindFirst/FindNext либо создавать новые записи из полученных данных. Все запросы попадали в некое подобие FIFO-буфера, в котором происходила «сборка» фрагментированных запросов, а также отбрасывание огрызков. Контроль доступа к базе осуществлялся методами всё того же DirectPlay. Защита от одновременного редактирования записи была реализована путём добавления специального поля в корневой таблице: если значение в нём равно единице, то запись уже кто-то редактирует.

Как ни странно, весь этот кошмар работал. Тест проводили четыре добровольца. За десять минут активной манипуляции данными сбоев не было, а для диплома больше и не надо. Диплом был сдан на отлично, так как в текст программы никто не заглядывал, а на экране всё выглядело вполне пристойно.

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

Если кому это чудо попадётся — пожалуйста, не обижайтесь. Я не думал, что этим кто-то будет реально пользоваться.

11073

Сосчитай до десяти и выдохни

Нужно быть терпимее к молодым, неопытным программистам. Вот все говорят: быдлокод, быдлокод… А мой опытный сотрудник, глядя на причину найденной баги, толерантно воскликнул:

— Блин! Почему ж код такой… небезопасный?!

11058

Производственная слабость

В начале года в институте сказали, что расчётно-графические работы будут приниматься только через сайт. Идея вроде хорошая, но вот исполнение…

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

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

Я минут пятнадцать объяснял преподавателю, почему РГР послана не через сайт, а на бумажке.

11028

Сто баллов индусу

Благодарственные слова от госконтор неизвестным индусам? Позвольте сказать ещё одно.

Огромное тебе спасибо, индус, за программу рассадки учащихся на ЕГЭ в этом году. Красивый новый интерфейс неимоверно радует глаз, но куда делась функциональность? Зачем, к примеру, пункт меню «исключить кабинет из распределения в день проведения ЕГЭ», если по факту это действие приводит к невозможности рассадить школьников при достаточном количестве мест в оставшихся кабинетах? А чем отныне отличается «распределять равномерно» от «распределять по мере заполнения», мы теперь точно запомним: ничем. Абсолютно никакой разницы в результатах.

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

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 мегов к дистрибутиву. Что показательно, кроме дефолтных скинов, ничего другого не появилось. Ценность программы определялась не рюшечками, а её прикладными свойствами.

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