bash.im ithappens.me zadolba.li

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

5171

С миру по копейке

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

Через некоторое время после запуска проекта начали замечать, что куда-то со счетов пропадают денежные средства, причём жалоб становится всё больше и больше. Целый день потратили на поиски причины, перепроверили все запросы. Ошибка повергла в смех сначала всех разработчиков, а потом и тестеров. Оказалось, в одном из немаленьких запросов напрочь отсутствовало условие WHERE. Когда кто-либо из пользователей выводил денежные средства, они списывались со счетов всех участников системы. Ущерб, естественно, был возмещён в полном объеме, а вот как такое произошло, осталось тайной.

5132

Красивой вам чалмы

Копаясь в недрах большой геодезической программы (7 МБ исходников), я наткнулся на настоящий индийский код.

Чтобы выяснить, пуста ли строка, товарищ проверяет strlen(lines) > 0. Это было бы смешно, если бы lines не была размером в 4К. То, что на каждые 4К товарищ заново открывает файл, уже как-то не удивляет. Копирование большого массива дважды при передаче его из функции вообще принимается как должное.

Да, задача стоит такая: «Ускорить хоть немного». Да какое немного — это чудо ускоряется в несколько раз простой уборкой ляпов, за которые первокурсникам нужно двойки ставить!

По слухам, автор этого чуда уже лет пять как директор собственной фирмы. Красивой вам чалмы, товарищ директор!

5053

Всё грех, всё отсечь

Так мне нравятся идеи авторов «чистилок» компа, что аж плакать хочется. Недавно поставил одну такую ради теста, так эта красавица предложила удалить:

— файл спящего режима;
— DLL-кэш винды;
— архивную копию дистрибутива;
— все пустые файлы, все лог-файлы и все db-файлы, а не только с миниатюрами.

Интересно, запускал ли хоть раз автор свою прогу у себя на компе?

4980

Археологические раскопки в Древней Индии

Итак, все ругают плохо написанный код. Давайте-ка посмотрим...

Если в коде много goto, возможно, программу перетащили с Фортрана; чем их больше, тем древнее версия.

Если в названиях идентификаторов присутствуют дикие сочетания букв, разбавленные подчёркиванием, возможно, исходно это был Фортран БЭСМ-6, где позволялись русские буквы.

Если все переменные в программе глобальные — скорее всего, программа «познакомилась» с третьей версией микрософтовского Фортрана, где надо было распихать переменные по 64-килобайтным common-блокам.

Если сишный код плохо отформатирован, скорее всего, код был знаком как с Борландом (три пробела на отступ), так и с Микрософтом (одна табуляция).

Если в коде на С++ много указателей на функции, значит, изначально код был сишным.

Если системные вызовы завёрнуты во множество вложенных «обёрток», которые просто перекладывают параметры из пустого в порожнее и ничего не делают, это годовые кольца: их столько, сколько платформ сменил продукт.

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

Если всё сказанное выше замешано в крутой коктейль с кусками вменяемого кода, значит, пытались рефакторить.

Если не используются очевидные фичи, значит, в исходном фреймворке их не было.

Если встречается эмуляция RTTI и интерпретируемого кода, в предках кода было что-то типа Клиппера.

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

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

4976

Админ и designer

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

Нужно сказать, что большинство сотрудников газеты давно уже переведено на права опытных пользователей, и я полагал, что с установкой свежезакупленной софтины админские права верстальщика уйдут в историю. Для установки потребовались полные привилегии — не проблема, для такого программного продукта это нормально. Первый запуск — и... английский интерфейс. Но устанавливалась-то русскоязычная версия! Копание в настройках и мануалах ситуации не прояснило. Запуск от имени... Ура! Это действительно русская версия! Пришла мысль перебросить файлы и ключи реестра программы от админа пользователю. Безуспешно. В спину дышит недовольный верстальщик.

Назначаю пользователю права администратора, переустанавливаю программу от его имени — кажется, языковый барьер исчез. Рано радовался: стоило вернуть пользователю обычные права, и снова мы увидели «File» вместо «Файл». Дизайнер остался админом, а у меня остался невысказанный вопрос: в какой стране это писали?

4967

Парент парента парентом об парент

Я познакомилась с настоящим индусом. Правда-правда. Этот человек:

— пишет код в кадрах кадров кадров символов — парент парента парентом об парент;

— инициализирует переменные не там, где они используются (используются в первом, инициализирутся в 20-м кадре и на другом слое, но это фигня — работает же), называет максимум в три буквы (и функции тоже);

— никогда ничего не типизирует — зачем?

— знает кучу багов флеш-плеера, которые не встречаются обычным людям, и упрямо делает так, чтобы в проекте на них опять наткнуться (как?);

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

— не форматирует код в принципе — а зачем? Между строчками может быть от одного до 15 переводов строки;

— может продублировать один и тот же код пару-тройку раз, в том числе и рядышком;

— делает вложенные функции (не забываем про отсутствие форматирования): три-четыре уровня вложенности найти в коде нетрудно.

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

4939

Индус: пробная версия

Разбираем исходники программной системы для делопроизводства: надо перевести на русский и подправить кое-где логику под местные реалии. Не будем удаляться в частности, но код натурально индийский.

Разбирали — ругались, тем более что поддержка от разработчиков по емейлу была отвратительной. Немного зауважали авторов после того, как обнаружили, что они всё-таки способны к самокритике. Один из методов, посвящённый промышленному дизайну, был назван «Indus_Design».

4932

Подайте сюда чистый канал

Пятница. Полшестого пополудни. Магазин спускает на сервис ноутбук: розовенький Dell. Душа чует неладное. Просят накатать ось по-быстрому, до шести вечера. Ладно, берём флешку с «семёркой», за восемь минут ставим — а потом начинается квест.

Идём Эксплорером на сайт Dell за драйверами — он отважно предлагает качать тамошним даунлоуд-менеджером: оно, мол, оптимальнее. Ладно, качаем. Бравый менеджер говорит, что у нас, оказывается, нету интернета. Логично: мы через прокси работаем.

Качаем Файрфокс: канал широкий, всё тянется быстро. Подкидываем ссылку — наблюдаем ту же картину. Грустно.

Тянем Оперу. Она честно начинает пытаться что-то делать, в самый ответственный момент пишет, что не может соединиться с FTP-сервером Dell, но отдаёт директ-линк на искомый драйвер, который мы тотчас же скармливаем Огнелису.

Ребята из техподдержки Dell, если вы читаете это, вы знаете, что делать с разработчиками даунлоуд-менеджера.

4924

Фантастик-копипастик

C удовольствием читаю IT happens, но заметил пару характерных тенденций. С одной стороны, часто жалуются на монструозный индусский код и блондинистых быдлокодеров; с другой стороны, не менее часто хвастаются так называемым студенческим товариществом: написать программки или раздать исходники целой группе. Неужели это одни и те же люди? Неужели никому не приходит в голову, что первое — следствие второго?