typechecker: (Default)
[personal profile] typechecker
Вы не знаете, по какому алгоритму постингам присваивается цифровая часть адреса? Ну, там, livejournal.com/такой-то/123456.хтмл. В факе не нашла. А интересно.

Я более ощутимо заспамлю

Date: 2005-07-01 11:10 am (UTC)
From: [identity profile] asd.livejournal.com
Давайте так, Вы прочтёте внимательно, то, что я написал , а потом будете основывать своё мнение на моих словах.

вы считаете, что под itemid имеется в виду URL itemid прошлого поста.
Ссылку на то место указанного поста, где я это сказал.

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

Черезжопность -- это характеристика не арифметического действия, а вот этого кода (попробуйте убедить меня в обратном):
    my $newmax;
    my $uid = $u->{'userid'}+0;
    return undef unless $uid;
    my $memkey = [$uid, "auc:$uid:$dom"];

    my $memmax = int(LJ::MemCache::get($memkey) || 0);

    my $rs = $dbh->do("UPDATE usercounter SET max=LAST_INSERT_ID(GREATEST(max,$memmax)+1) ".
                      "WHERE journalid=? AND area=?", undef, $uid, $dom);
    if ($rs > 0) {
        $newmax = $dbh->selectrow_array("SELECT LAST_INSERT_ID()");
        LJ::MemCache::set($memkey, $newmax);
        return $newmax;
    }

    if ($recurse) {
        # We shouldn't ever get here if all is right with the world.
        return undef;
    }

    my $qry_map = {
        # for entries:
        'log'         => "SELECT MAX(jitemid) FROM log2     WHERE journalid=?",
        'logtext'     => "SELECT MAX(jitemid) FROM logtext2 WHERE journalid=?",
        'talk_nodeid' => "SELECT MAX(nodeid)  FROM talk2    WHERE nodetype='L' AND journalid=?",
        # for comments:
        'talk'     => "SELECT MAX(jtalkid) FROM talk2     WHERE journalid=?",
        'talktext' => "SELECT MAX(jtalkid) FROM talktext2 WHERE journalid=?",
    };

    my $consider = sub {
        my @tables = @_;
        foreach my $t (@tables) {
            my $res = $u->selectrow_array($qry_map->{$t}, undef, $uid);
            $newmax = $res if $res > $newmax;
        }
    };

    # Make sure the counter table is populated for this uid/dom.
    if ($dom eq "L") {
        $consider->("log", "logtext", "talk_nodeid");
    } elsif ($dom eq "T") {
        $consider->("talk", "talktext");
    } elsif ($dom eq "M") {
        $newmax = $u->selectrow_array("SELECT MAX(modid) FROM modlog WHERE journalid=?",
                                      undef, $uid);
    } elsif ($dom eq "S") {
        $newmax = $u->selectrow_array("SELECT MAX(sessid) FROM sessions WHERE userid=?",
                                      undef, $uid);
    } elsif ($dom eq "R") {
        $newmax = $u->selectrow_array("SELECT MAX(memid) FROM memorable2 WHERE userid=?",
                                      undef, $uid);
    } elsif ($dom eq "K") {
        $newmax = $u->selectrow_array("SELECT MAX(kwid) FROM userkeywords WHERE userid=?",
                                      undef, $uid);
    } elsif ($dom eq "P") {
        my $userblobmax = $u->selectrow_array("SELECT MAX(blobid) FROM userblob WHERE journalid=? AND domain=?",
                                              undef, $uid, LJ::get_blob_domainid("phonepost"));
        my $ppemax = $u->selectrow_array("SELECT MAX(blobid) FROM phonepostentry WHERE userid=?",
                                         undef, $uid);
        $newmax = ($ppemax > $userblobmax) ? $ppemax : $userblobmax;
    } elsif ($dom eq "C") {
        my $commentmax = $u->selectrow_array("SELECT MAX(pendid) FROM pendcomments WHERE jid=?",
                                             undef, $uid);
    } else {
        die "No user counter initializer defined for area '$dom'.\n";
    }
    $newmax += 0;
    $dbh->do("INSERT IGNORE INTO usercounter (journalid, area, max) VALUES (?,?,?)",
             undef, $uid, $dom, $newmax) or return undef;

    # The 2nd invocation of the alloc_user_counter sub should do the
    # intended incrementing.
    return LJ::alloc_user_counter($u, $dom, 1);
}

From: [identity profile] dabro.livejournal.com
Простите, мне не очень нравится ваш высокомерный тон.
Если вы программист, это еще не дает вам право ёрничать, ок?
Здесь вы сказали:Каждый следующий номер заведомо больше любого существующего в 256 раз.
Это утверждение неверно. Я попыталась вычислить логически, из чего вы могли сделать такой вывод. Вот и все.

Как я вижу, мы все-таки понимаем формулу одинаково.
Следите, пожалуйста, за формулировками.

Спасибо за дискуссию, я больше отвечать не буду.

Date: 2005-07-01 11:32 am (UTC)
From: [identity profile] asd.livejournal.com
Вот там я был не прав и исправился в том самом комментарии, на который Вы отвечали.

Все-таки отвечу : )))

Date: 2005-07-01 11:42 am (UTC)
From: [identity profile] dabro.livejournal.com
хм... а знаете, почему я решила, что вы упорствуете в своем заблуждении?? : )
Из-за фразы:
А слишком, или не слишком -- это вопрос не ко мне, а совсем даже к разработчикам.
Она... неприятно намекает на мою тупость.
А фраза Тогда всё сходится. не показалась мне признанием моей правоты.

Все, кончаю занудствовать, будем дружить : )))

Будем :)

Date: 2005-07-01 12:11 pm (UTC)
From: [identity profile] asd.livejournal.com
А фраза Тогда всё сходится. не показалась мне признанием моей правоты.
Значит я недостаточно ясно выразился. Иногда такое случается.

Re: Будем :)

Date: 2005-07-01 02:08 pm (UTC)
From: [identity profile] mashaaaa.livejournal.com
Ох, я уже испугалась, что мне тут придется кости и черепа выносить. Вы уж дружите, пожалуйста, а я послушаю, мне полезно.

January 2022

S M T W T F S
       1
2345678
910111213 14 15
16 171819202122
23242526272829
30 31     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 30th, 2025 08:45 pm
Powered by Dreamwidth Studios