Русланокод
Mar. 19th, 2015 05:20 pmА мы, оставшиеся, очень сильно плевались, переписывая за ним его ужасный код. Код был настолько плох, что каждую строчку можно было бы показывать в фильме ужасов: Руслан тварил в каком-то своём стиле, игнорируя любые условности, правила и стандарты. Он забивал на форматирование и отступы скобок, он мешал табуляции и пробелы, заливая ими также и концы строк. Часть файлов он сохранял в win1251, а часть в utf8, а для приведения выводимых кодировок к единому виду писал конструкции с iconv. Он очень любил использовать Codeigniter, но напрочь игнорировал MVC, вписывая html-код форм прямо в контроллер, инлайном или построчно, через echo. А в этот html он инлайном же вписывал и css с js. Он никогда не выносил дублирующийся код в функции, копипастя одинаковые фекальки кода повсюду. При этом он мог написать функцию вроде этой:
private function null2unknown($data) {
if ($data == "") {
return "No Value Returned";
} else {
return $data;
}
}
которая вызывалась всего один раз. Он, в зависимости от настроения, мог использовать стандартные возможности фреймворка - а мог написать многостраничный велосипед. Он называл поля в своих таблицах "select", "order" и "group" - и да, запрос у него мог выполняться даже во вьюхе. Он вписывал логины, пароли и абсолютные пути прямо в скрипт, вынося в конфиг только свой почтовый адрес (хотя и его он тоже вписывал потом напрямую). Он никогда не выбрасывал старый и отладочный код, заботливо сохраняя его в комментариях. Он глушил warning messages собакой.
Он писал чудовищно плохо, глупо и страшно. Я уверен, что Руслан совершал любой программистский грех, который вы сможете вспомнить или придумать. Но я могу только надеяться, что у Руслана случилась гангрена ануса и рак простаты - это самое малое, что я могу пожелать ему.
Некоторые руслановы проекты мы, матерясь и плюясь, переписали начисто, некоторые пришлось рефакторить, и уже третье поколение разработчиков кусает губы до крови, занимаясь этим неблагодарным делом. Но худшее, как я думал, давно уже позади.
А сегодня всплыл один из тех сервисов, что когда-то был Русланом написан, худо-бедно запущен, и с тех пор - неприкасаем. Потребовалось немножко поменять логику. Я открыл код, ещё не зная, кем он был написан - и буквально ощутил, как от этих строк несёт говном. С трудом сдерживая рвотные позывы я рефакторил стили, чтобы хотя бы после выравнивания можно было попытаться осознать логику - и, поверьте, тот эпизод с соками говн был мне в тысячу раз менее противен.
Но вот часть работы была сделана, и я решился взглянуть на логическую часть. Минут пять я смотрел на странную конструкцию, не в силах осознать весь разврат разума, её создавшего (ЖЖ жрёт отступы, но в оригинале оно всё равно так и выглядело):
$sup_time = date("Hi",time());
switch($lang){
case 'ru':
$this->setTitle(iconv('windows-1251','utf-8','Информация о заявителе'));
if ($sup_time=="2356" || $sup_time=="2357" || $sup_time=="2358" || $sup_time=="2359" || $sup_time=="0000" || $sup_time=="0001"){
$this->load_view('support',$output);
} else {
$this->load_view('home',$output);
}
break;
case 'eng':
$this->setTitle('Payment information');
if ($sup_time=="2356" || $sup_time=="2357" || $sup_time=="2358" || $sup_time=="2359" || $sup_time=="0000" || $sup_time=="0001"){
$this->load_view('support',$output);
} else {
$this->load_view('home',$output);
}
break;
}
В этом коде ужасно всё, но самый перепиздец - это выбор view в зависимости от времени. Он берёт значение часов/минут в виде строки, и проверяет каждый из вариантов этой строки. Это чудовищное, невыносимое и смешное решение.
А потом во мне что-то хрустнуло, я умер и попал в рай, откуда и пишу этот пост, пока сорок девственных гурий услаждают мой слух игрой на контрабасе.