hind19 (hind19) wrote,
hind19
hind19

Category:

Очередное айтишное.

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

if ( ! args.Length >= 3 )
{
  // что-то делаем
}


Когда я увидел этот забор, я впал в ступор. Минут 10 я пытался понять в чем же заключается условие. Понял*.
Потом еще минут 20 пытался понять ход мыслей человека, нагородившего это. Не понял. Все-таки индусская логика очень сильно отличается от моей.
Потом исправил и постарался забыть как страшный сон. Не получилось.

Но это работает. И даже правильно, судя пот отсутствию рекламаций за  10  лет.
Да, кстати, проект американский. У них, как я смотрю вообще  на редкость пофигистическое отношение к технике и качеству программ. Во всяком случае в b2b части. Работает и ладно.
Ну и что, что страница открывается 5 минут. Открывается же. Ну и что, что генерацию отчета можно запустить только на ночь ибо выполняется она порядка 8 часов и жрет до хренища ресурсов. Работает же.
Значит нечего лезть туда грязными руками.

Вообще, в проекте было еще много интересного. Вроде упомянутого отчета. Тоже индусы делали.
Проблема отчета была в том, что код содержал в себе кучу вложенных  друг в друга циклов (то ли 3 то ли 4) и на каждой из порядка 80000 итераций, он тащил из базы данных в оперативную паямть  одни  и те же 2 или 3 тысячи элементов. И это не считая довольно тяжелой и сложной логики обработки этих данных (еще и, даже на беглый взгляд, не очень удачно написанной). Факт был в том, что 2 одновременно запущенных разными юзерами экземпляра отчета намертво вешали сайт, так как отчеты отжирали 100% ресурсов процессора и оперативной памяти.
При этом, на "выделить время и переписать все к х..м" заказчик не соглашался. Работает же. И пофиг что ночью.  Впрочем, заказчика можно понять. С теми программистскими ресурсами, которые он был готов оплачивать, переписывание затянулось бы очень надолго. А обратились они  с одной мелкой, но весьма заковыристой проблемкой, над которой тоже пришлось изрядно посидеть пока нашел.
Тем не менее небольшим фиксом удалось сократить время формиования отчета до  20 минут, а потребление оперативной  памяти "всего" до 2 гигов на пике. Ну и убрать все это счастье в фоновый поток, чтобы юзер не пялился 20 минут на бегущий кружочек лоадера. Так себе решение, так как база постоянно растет и количество итераций - тоже, но в качестве временного - сойдет.

______________
* для непрограммистов: идея заключалась в том, чттобы проверить длину args и если она меньше 3, то что-то сделать. Т.е.  if (args.Length < 3). Получилоь же, что проверяем, если длина >= 3, то тогда инвертируем результат проверки.
Tags: $it, @Харьков
Subscribe

Recent Posts from This Journal

  • Ковидно-статистическое.

    Не хочу оказаться пророком, но если в Израиле сохранится существующая тенденция, можно будет констатировать слабую эффективность вакцинации против…

  • Немного легкоатлетического.

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

  • О поведении на дороге.

    Недавно в Москве произошло очередное резонансное ДТП. Девочка-водитель не сообразила что почем, затупила в телефон и снесла на переходе несколько…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 5 comments