Генерация «трафки™» или распределение по весам
Дима Смирнов применил интересное решение для генерации «трафок» на «Блоговаре»:
$rb = str_pad (decbin (mt_rand (0,64)),6,"0", STR_PAD_LEFT);
$herb = (int) strpos ($rb, "1");Смысл в том, что каждое следующее значение должно выпадать с вдвое меньшей вероятностью, чем предыдущее. Пока я спал, мне пришло в голову довольно забавное решение на ту же тему. Оно быстрее примерно на 30%, не обладает ограничением на размер и точнее вычисляет вероятности (у Димы «трафка» не выпадает с вероятностью примерно 52%), но не решает задачу полностью. Кто скажет в чём разница, не запуская код?
for ($i = 5; $i && mt_rand(0, 1); --$i);«Опера» ищут траву или «мне это подкинули»
Давайте я вам всю мощь «Оперы» (последней) покажу? А то тут некоторые товарищи user.js для обнаружения «трафки™» начали придумывать. Тем не менее, JavaScript тут не нужен, хватит и CSS. Ведь у «Оперы», наряду с пользовательскими JavaScript, есть и пользовательские CSS. Так что, просто подключаем к «Опере» следующий код и следим за индикатором в левом верхнем углу экрана (рассказывать как подключать я не буду и другим не советую — пусть это будет фильтром).
a[href*="blogowar.ru/soldier"] img[src*="blogowar.ru/herbs"]
{
position: fixed; top: 4px; left: 4px; z-index:5000;
background-image: url(http://blogowar.ru/favicon.ico);
background-position: 50%;
background-repeat: no-repeat;
background-color: #eee;
display: block;
width: 25px; height: 25px;
}Склонный к полноте друг поддержит в трудный год
Очень притча понравилась, правдивая:
Голодные волки встретили в лесу зайца и собрались его съесть, а заяц им говорит:
— Погодите, мной вы сильно не насытитесь, а я могу вас привести к стаду овец
Волки решили не есть зайца и пошли за ним. Идут, а голод мучает все сильнее, они значит спрашивают:
— Долго еще идти?
Заяц им отвечает:
— Вот, сразу за горой, которая перед нами
Начали подниматься на гору, но не совладали волки с голодом, набросились на зайцаи съели. Наестца не наелись, голод мучает, но соблазна перед глазами более нет.
Поднялись на гору и видят стадо овец.
Сытно отобедали, и тут один значит говорит:
—Как-то нехорошо с зайцем получилось
Другой:
— Да уж, пойдемте, останки что ли захороним?
Вернулись, похоронили зайца, поставили камень на могилку и думают, что же написать:
— «Другу зайцу» — не пойдет, не поймут, зачем друзья его съели
— «Врагу зайцу» — тоже не пойдет, какой же он враг, когда привел их к стаду овец
Думали, думали, и написали — «нашему консультанту и партнёру — зайцу»
ECMAScript 4 people
В ECMAScript 4 (JavaScript2 будет основан на этом языке)
Проблематику все понимают? Если нет, то хотя бы попробуйте сложить 0.1 и 0.7, умножить сумму на десять и округлить вниз в любом языке, который поддерживает числа с плавающей точкой. В языке, где числа с плавающей точкой представляются в соответствии со стандартом IEEE 754 (что у вас есть под рукой? JavaScript, Perl, PHP, MySQL) вы получите число 7. Почему так происходит — тема отдельного разговора, вкратце — дело в представлении числа с плавающей точкой на машинном уровне (на самом деле результатом данной суммы, в данном случае, с точки зрения такой реализации, будет 0.7999999999999999, а не 0.8) .
Decimal — специальный тип (чаще всего можно встретить его в СУБД), который позволяет манипулировать числами с фиксированной точкой. Зафиксировав точку, можно перейти к такому хранению числа, где таких погрешностей не будет.
В EMCAScript 4 (а так же в языках, на нём основанных — ActionScript 3 и JavaScript 2) есть два способа объявить число как decimal:
{
use decimal;
var a = 0.1; // a — decimal
var b = 0.2; // b — decimal
var c = a + b; // c — decimal (0.3)
}
var a = 0.1m; // a — decimal
var b = 0.2m; // b — decimal
var c = a + b; // c == 0.3mСуффикс «m» пришёл из «C#» и расшифровывается как «money» («деньги»). В остальных языках программирования проблему обходят, работая с целыми числами. Перед выводом их просто делят на 100.