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

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

473

Точное моделирование

В свое время был начальником отдела разработок в студии %studioname%. Делали браузерные игры. Дано: вероятность попадания в противника из лука (в процентах). Написать: скрипт, который бы выдавал — было ли попадание или нет.

Как в таких случаях действует обычный Coder Sapiens, если нет особых требований? Генерит случайное число от нуля до ста и проверяет, меньше оно вероятности или нет.

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

367

Собрать по кирпичику

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

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

$res = $DB->getData($query); //считывает данные с ДБ и загоняет в пронумерованный массив

$data = new array();

foreach ($res as $key=>$value)

{

if (!$data[$key])

$data[$key] = $value;

};

Все это вместо простого $data = $res;

Что имел ввиду кодер, родивший это чудо, так и осталось загадкой.

365

Какое страшное самоубийство!..

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

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

До нас дошло, что надо делать механизм обхода динамического препятствия, поскольку наша модель данных была построена так, что на одной клетке два существа поместиться не могли. Ходы они делали тоже поочередно, поэтому взаимный телепорт друг на друга тоже был невозможен. Решили пойти "индийским способом" - один из встречных превращался в случайный элемент ландшафта, через который можно было пройти, а после перехода деревце или пенек превращались обратно в кролика или льва и шли по своим делам.

В таком виде мы и представили программу преподавателю.

Кто ж знал, что программа подкинет нам такой сюрприз!

На узкой горной тропе встретились неудовлетворенный желудочно ТБаран и неудовлетворенный сексуально ТСлон. Как объекты для удовлетворения своих потребностей они друг друга совершенно не интересовали, поэтому представляли друг для друга просто препятствие. Всемогущий Рандом решил, что в этот раз слону придется полежать немного в качестве элемента интерьера, а баран пойдет дальше. Скрипт бодро превратил ТСлона в квадратный метр свежей зеленой травы, радостный ТБаран сожрал ее, навалил кучу и там же рухнул спать. Несчастного слона поминали всей бригадой, включая преподавателя.

265

Изобретатель велосипедов - 2

В процессе работы над проектом на С# нарвался на следующее:

DateSelect.Value = (DateTime.Now.Month.ToString().Length > 1 ? DateTime.Now.Month.ToString() : "0" + DateTime.Now.Month) + "/" + (DateTime.Now.Day.ToString().Length > 1 ? DateTime.Now.Day.ToString() : "0" + DateTime.Now.Day) + "/" + DateTime.Now.Year.ToString().Remove(0, 2);

До сих пор не понял, чем этому человеку не понравилось

DateSelect.Value = DateTime.Now.ToString("MM/dd/yy");

249

Ну а вдруг?

Копаясь в глубинах скрипта, написанного неизвестными кодерами

для имитации нажатий с клавиатуры, наткнулся на гениальный код:

integer i

while (i!=1)

Desktop.Typekeys("")

i--

if i==12

Desktop.TypeKeys("<#Plus>")

Так сказать, перестраховался человек... А вдруг когда-нибудь да станет i равно 12?

207

Это было неописуемо!

Как-то раз писал свой собственный фрэймворк на PHP. Разработал архитектуру. Запрограммировал основные компоненты. Все протестировал - работает замечательно. И тут, значит, приходит заказ - написать CMS для простенького сайта. Решил поднять на этом самом фрэймворке. Все было замечательно, но в одном месте потребовалось обратиться на самый низкий уровень за значением, в результате чего родилась вот такая, поражающая своей информативностью, строчка кода:

$result = $cur_obj->values->value->value->get_value();

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

$result = $cur_obj->values->value->value->get_value(); // ЫЫЫЫЫ!!! =8]

Так и сдал, заказчику.

Если кто будет поддерживать сайт и встретит это творение, знай брат, я не специально...

205

Альтернатива

В процессе портирования некой программы с Visual Basic, нашел гениальную альтернативу оператору !

Select Case bln_Сменить_направление_вращения

Case True

bln_Сменить_направление_вращения = False

Case False

bln_Сменить_направление_вращения = True

End Select

179

Ненависть к переменной

Разбираю код, встречаю строчку:

if (isset($rssRow)) unset($rssRow);

Читаю код дальше.

Четыре строчки, в которых работа с $rssRow не ведется, опять:

if (isset($rssRow)) unset($rssRow);

Это называется "Да умри же ты!!!"?

156

Порождение изначального хаоса

Занимался я пару лет назад поддержкой одной CMS, написанной на PHP в течении лет 4-5 несколькими сменявшими один другого программистами.

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

Посмотрел. Файл по сути является ядром CMS - принимает данные от пользователя из админской части, хитро распихивает их по куче XML-файлов и просто текстовых файлов, что-то кладет в реляционную базу, предварительно проверив права доступа и так далее. Взгляд останавливается на 4х строках:

// TODO: фигня какая-то написана

$respondent = $respondent;

global $preLoadExternals;

$preLoadExternals = .....;

Комментарий имеет логический смысл. Первая строка - чтоб точно запомнил, да. Вторая - оно и так исполнялось только в global scope. Третья - строка длиной в пару килобайт с несколькими закрывающимися скобками в конце, после чего $preLoadExternals далее в скрипте нигде не используется.

И такой фигни на три тысячи строк

Да, действительно. Стоит ли бояться, что исходники попадут в чужие руки, если сами разобраться не можем.

58

Javшутинг

/** The Constant NUMBER_3. */

public static final int NUMBER_3 = 3;

/** The Constant NUMBER_4. */

public static final int NUMBER_4 = 4;

/** The Constant NUMBER_5. */

public static final int NUMBER_5 = 5;

/** The Constant NUMBER_6. */

public static final int NUMBER_6 = 6;

/** The Constant NUMBER_6. */

public static final int NUMBER_7 = 7;

Насяльника обещала всех уволитьма за это...