Ха

Со времени последнего поста прошло 4 года :)

Тестинг Catalyst::Plugin::Session::Store::DBI

Как известно, этот модуль хранит сессии в текстовых полях в base64(nfreeze($data)), что является явно избыточным, т.к. можно юзать только Storable и blob для хранения. Поэтому - небольшой тестик:

nfreeze: time: 331 sec; speed: 3021 req/sec
thaw:    time: 213 sec; speed: 4694 req/sec
encode_base64: time: 67 sec; speed: 14925 req/sec
decode_base64: time: 116 sec; speed: 8620 req/sec
STORE: time: 399 sec; speed: 2506 req/sec
GET:   time: 328 sec; speed: 3048 req/sec

В тесте разложены методы MIME::Base64 и Storable, а также - всё вместе.

Как видно, производительность base64 явно избыточна, т.ч. в большинстве случаев можно не париться по этому поводу.

t_sess.txt

Тестинг Ямла

| 1 Comment

Собсно профайлингом занималсо, заодно YAML затестил, скорость Load и Dump разных модулей.

Вот результаты:

YAML::Load:       time: 361 sec; speed:   277 req/sec
YAML::Dump:       time: 203 sec; speed:   492 req/sec
YAML::Syck::Load: time: 130 sec; speed:  7692 req/sec
YAML::Syck::Dump: time:  86 sec; speed: 11627 req/sec
YAML::XS::Load:   time: 124 sec; speed:  8064 req/sec
YAML::XS::Dump:   time: 118 sec; speed:  8474 req/sec

Для pureperl - 100к циклов, для остального - 1кк.

Кстати, у YAML::XS::Load утечки памяти сильные, по крайней мере на freebsd (7.2 и 8.0, i386 и amd64 соответственно). За лям итераций съело 1G оперативы.

t_yaml.pl

Вопреки стереотипам, YAML::Syck показал бОльшую производительность, чем YAML::XS. Плюс последний течет :) Ну а про pure perl вообще сказать нечего. Работает стабильно, но меееееееедленно.

Как пропатчить KDE под... Windows?

| 2 Comments
Серьезно :) 28 января 2009г. вышел первый релиз KDE под Windows.
Интересно, как это выглядит :)))


radeon x1400 under freebsd

Удалось полноценно заставить работать radeon x1400 под freebsd 8-current :) DRI, GL, 3D, все дела...
Надо накатить патч на drm_scatter и пропатчить дерево портов (чтобы апнуть xorg. Дерево сейчас заморожено, пока 7.1 релизят).

Подробности и ссылки на патчи тут.

Flash9 на freebsd ЗАРАБОТАЛ!

| 2 Comments

Ура! Наконец-то, свершилось! Полноценно, стабильно заработал adobe flash9 на freebsd!

В середине октября чего-то там пофиксили с compat_linux вроде как, т.о. на данный момент необходимо апнуться до 7-stable. А потом по инструкции :)

Кстати, у меня вместо linux_base-f8 - linux_base-fc4 - тоже всё прекрасно работает, как в фф2, так и в фф3.

$c->forward() возвращает истину

$c->forward() возвращает только истину. Истину в последней инстанции :)

А серьезно, он может вернуть лишь одно значение. И оно должно быть истинно. Если оно ложно - результатом будет ноль. И неважно, что вы хотели вернуть пустую строку или undef. Вернется ноль.

Массивы и хеши тоже нельзя возвращать. Т.к. получите последний элемент массива. Ссылки на них - пожалуйста. Ибо ссылка на массив истинна, даже если массив пустой.

Вот собственно и всё :) Теперь чуток примерчиков для наглядности:

sub t_zero   { 0           };
sub t_empty  { ""          };
sub t_undef  { undef       };
sub t_arr    { qw/a b c/   };
sub t_scalar { "ok"        };
sub t_arref  { [qw/a b c/] };
sub t_hashref{ {}          };

sub test {
    my ( $self, $c ) = @_;
    $c->forward('t_zero');    # 0
    $c->forward('t_empty');   # 0
    $c->forward('t_undef');   # 0
    $c->forward('t_arr');     # 'c'
    $c->forward('t_scalar');  # 'ok'
    $c->forward('t_arref');   # ['a', 'b', 'c']
    $c->forward('t_hashref'); # {}
};

rrdtool и freebsd

| 2 Comments

Всю жизнь свою юзал rrdtool из портов, и не заморачивался, и всё было хорошо. Но недавно её апнули до версии 1.3.x, и теперь она вместо libart_lgpl юзает cairo... а cairo тянет половину иксов.

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

На всякий случай выкладываю, т.к. я хз где старый порт брать.

rrdtool_1_2_23.tar.gz

Дано:

Массив длиной L, каждый элемент массива имеет вес weight (для простоты - целочисленный)

Задача:

Выбрать рандомно N элементов из массива (N < L), при этом не должно быть одинаковых элементов, и вероятность выборки каждого элемента должна быть прямо пропорциональна весу элемента.

Решение:

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

Теперь итерируем массив от начала (столько итераций, сколько нужно выбрать элементов). На каждой итерации:

  • Выбираем рандомно точку от 1 до макс. координаты $weight
  • Ищем элемент, соответствующий отрезку, содержащему эту точку
  • Меняем местами выбранный элемент с элементом, соответствующем текущей итерации - т.о. "запоминаем" его.
  • Сдвигаем начало координат (и соотв. макс. координату) на величину, равную длине отрезка выбранного элемента

Всё. Теперь N начальных элементов - и есть интересующая нас выборка. Осталось только отбросить лишнюю часть массива от N+1 до L

# @res - исходный массив
# $need_count - сколько нужно выбрать элементов
# $weight - суммарный вес всех элементов исходного массива

for (my $i=0; $i<$need_count; $i++) {
    my $w = int(rand $weight)+1; # выбираем точку на оси весов
    for (my $j=$i; $j<=$#res; $j++) { # ищем элемент, соотв. точке
        if ($res[$j]->{weight} >= $w) {
            $weight -= $res[$j]->{weight};
            ($res[$i], $res[$j]) = ($res[$j], $res[$i]) if $i != $j;
            last;
        } else {
            $w -= $res[$j]->{weight};
        }
    }
}
@res = splice(@res,0,$need_count); # обрезаем массив

Сломали DBD::mysql

| 4 Comments

Начиная с версии 4.007 сломали $dbh->{mysql_auto_reconnect}=1

В результате при потере коннекта к мускулю вместо реконнекта происходит сегфолт перла. Оч. неприятная штука :)

В версии 4.008 так и не пофиксили, хотя с ней в один день выпустили патч.

Find recent content on the main index or look in the archives to find all content.

Recent Comments

  • sosoback: спасибо, работает. read more
  • anonymous: .It spend me much money.  The method you pointed is very suitable for read more
  • anton: спасибо read more
  • Пенс: Во! Классная штука. read more
  • Валерий: Спасибо за ценную информацию. read more
  • Степан: Спасибо за инфу. Полезно. read more
  • Сергей: jackal, очень хочу с Вами пообщаться. Очень нужна Ваша консультация. read more
  • Andy: Это гениально! Спасибо! :) read more
  • jackal: Всмысле? Это ж патч. Пропатчить сорцы, и собрать апач из read more
  • Серж: И как его поставить? read more

Recent Assets

Pages

Powered by Movable Type 4.2-en