bash.im ithappens.me zadolba.li

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

7459

Индусы узкоглазые

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

При линковке лезут конфликты. Несколько переменных одновременно определены в разных объектниках. Ладно, думаю, может, лишнее что прислали? Начинаю выкидывать объектные файлы по одному, потом по два и так далее. То не хватает чего-то для линковки, то перебор в виде означенных переменных. На третьи сутки занятий комбинаторикой не выдерживаю и через своё руководство обращаюсь к партнерам. Приходит ответ: «Установите в линкере флаг „Разрешить множественные определения“». То бишь прикажите машине игнорировать ошибку.

Никакие они не японцы. Индусы узкоглазые, блин.

7254

DROP SCRIPT

Дали мне на неделе PHP-скриптик на оптимизацию. Скриптик простенький, предназначенный для переноса информации из XML-файлов в SQL-базу, хотя и в промышленных масштабах. Только предоставленый вариант выжирал подчистую всю предоставленую ему оперативку и сдыхал, обработав пару десяков файлов из нестольких тысяч. И это должно было обслуживать сайт одного из главных государственных судов!

После полутора суток разбора скрипта решил переписать с нуля. Опитимизировать было нечего: количество запросов превышало необходимое в десять раз, база вообще не имела индексированных полей. А хуже всего то, что горе-прогеры банально не знали SQL UPDATE, и код был испещрён командами DELETE и INSERT.

7148

Распечатают, распознают, разберутся

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

Автор, наверное, приличный человек. Бывает, что возникает необходимость документ не только на печать пульнуть, но и в электронном виде получить. Экспорт имеется — как же без него? С гордым названием «Сохранить в файл». В Эксель, ага. Один символ — одна ячейка. И так несколько печатных страниц.

7147

Десять символов и один тролльфейс

Коллеги, спешу поделиться. Возможно, однажды это спасёт вам полчаса жизни.

Попросили сбросить пароль пользователя в 1С у клиента. Я далеко не спец по ней, но наивно посчитал, что справлюсь.

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

Частью желаемого пароля является фамилия юзера. Закрадывается подозрение на защиту от простого пароля. Меняю местами две буквы. Не оно. Пробую поставить 12345 — подходит. Истерически смеюсь.

Путём экспериментов выясняется: максимальная длина пароля — 10 символов, а у меня 11. Ни с клавы, ни из буфера последний символ не вводится, а просто молча отбрасывается. Чтобы это понять, надо внимательно смотреть на звёздочки. А вот при попытке логина кушаются спокойно все 11 символов и сверяются с десятисимвольным паролем.

Будьте начеку с жёлтой программой. Всем удачи — и берегите нервы.

7074

Небоскрёб на ровном месте

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

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

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

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

Вы не просто задолбали — вы практически уничтожили отрасль. Райзера с топором на вас нет.

7070

Поиписькапосчитайка

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

Видно, что код не быдлокодер писал: красиво, с чувством, толком, интонацией и документацией. Только со странностями небольшими. Автор, видимо, очень любил покурить или покушать чего весёлого. Так, например, обнаружились стандартные настройки идентификатора статьи, который был объявлен так:

// Поиписькапосчитайка *_*
$this->art_id = 0-1+11-111+101-1-101-1-101-11-1-11-111+11-1-0;

В качестве солей для хешей использовались фразы: «Потцан_с_района», «Билли Гейтс», «Пельмени», «Хочу смотреть Дом-2».

Но самое весёлое ждало меня дальше. Обнаруженные строки окунули меня в неописуемое чувство гордости за собратьев.

$желаемая_оплата = "1000 баксов";
$мне_обещали = "300 баксов";
if($желаемая_оплата != $мне_обещали) {
// Немножко индусской логики
$a = 0;
$b = 0;
$a = $b;
}

7051

32 мая

Решил сегодня после работы заскочить в отдел Сбербанка по работе с юрлицами. Отдел работает до 16:30. Так как батарея на телефоне села (вот она, характерная примета современного поколения!), я не знал, успеваю или нет.

На входе меня встретил автомат по раздаче номеров для электронной очереди, в углу которого показывалось текущее время. Я опоздал ровно на 30 минут: экран автомата сообщал, что на часах уже 16:60.

7036

Paste — конструктор, Cut — деструктор

Обоснование индусского кода, выданное очень опытным и со всех сторон классным специалистом:

— Зачем нужно модульное программирование, если есть блочное копирование?

6970

Не бейте индуса — работает, как может

PowerBuilder. Клиентская программа. Звонит пользователь, жалуется на ошибку: не все данные выгружаются. Проверяю — действительно так. Обещаю разобраться.

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

// Что за индусский код выше?

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

Дело было так: коллега увидел кривоватый код, решил подправить и, как вы уже догадались, об изменении умолчал. Вместо громоздких if он организовал всё через цикл for, но забыл внутри кусок старого кода: i = i + 1. Естественно, программа вместо выгрузки данных по всем фирмам по порядку начинала выгружать их через одну.

Я добавила коммент:

// Индусский код выше хотя бы правильно работал.