X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=www%2Frating.pl;h=30951c4735c6848fe2b3b88df5b267da62cbb1c4;hb=51ea31c1dc6c87693c20bcdd2b1147359de926e4;hp=40e91656cced3c3b8d6c57ca92aae3bf44e1be4e;hpb=0ae9e34c70e35503e41d28af052c4957ca7b4f35;p=wloh diff --git a/www/rating.pl b/www/rating.pl index 40e9165..30951c4 100755 --- a/www/rating.pl +++ b/www/rating.pl @@ -10,8 +10,9 @@ use POSIX; use HTML::Entities; use utf8; use locale; -require '../config.pm'; -require '../common.pm'; +use lib qw(../include); +require 'config.pm'; +require 'common.pm'; my $dbh = DBI->connect($config::local_connstr, $config::local_username, $config::local_password) or die "connect: " . $DBI::errstr; @@ -20,78 +21,19 @@ $dbh->{RaiseError} = 1; binmode STDOUT, ':utf8'; -# Find auxillary parameters. -my %params = (); -my $q = $dbh->prepare('SELECT * FROM ratings WHERE id < 0'); -$q->execute; -while (my $ref = $q->fetchrow_hashref) { - $params{$ref->{'id'}} = $ref->{'rating'}; -} -my $match_stddev = $params{-2} * sqrt(2.0); - -print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+5m'); -POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8'); - -printf <<"EOF", $params{-3}, $match_stddev; - - - - - WLoH-rating - - - -

WLoH-rating

- -

Dette er et hobbyprosjekt fra tredjepart, og ikke en offisiell del av - Wordfeud Leage of Honour.

- -

Ratingen er dog basert på spilledata fra WLoH (takk til Lobotommy - for tilgang!), og oppdateres - hver hele time. Den er fullstendig uoffisiell, og har ingen innflytelse - på WLoH, men brukes for å estimere vinnersannsynligheter i - sannsynlighetsberegningen.

- -

Modellen kan endre seg når som helst når jeg føler for det :-) - Ikke ta ratingen alt for alvorlig, selv om den er basert på - relativt fornuftige matematiske modeller. Husk at all statistikk - sier mer om fortiden enn om framtiden.

- -

Modellparametre

- -

For de som vet litt om slikt. Det finnes også en lengre, mer detaljert - forklaring beregnet på ikke-matematikere.

- - - -

Divisjonsoversikt

- - - - - - - -EOF - my $cgi = CGI->new; my $locale = wloh_common::get_locale($cgi); + +my $aux_parms = wloh_common::get_auxillary_parameters($dbh, $locale); + +wloh_common::set_locale($locale); + my $season = wloh_common::get_max_season($dbh, $locale); # Pick up all the subdivisions' ratings. my %subdivision_ratings = (); -$q = $dbh->prepare('SELECT divisjon, avdeling, serie_id, AVG(rating) AS avg_rating FROM ratings NATURAL JOIN siste_divisjon WHERE sesong=? GROUP BY divisjon, avdeling, serie_id ORDER BY divisjon, avdeling'); -$q->execute($season); +my $q = $dbh->prepare('SELECT divisjon, avdeling, serie_id, AVG(rating) AS avg_rating FROM ratings NATURAL JOIN siste_divisjon NATURAL JOIN spiller_kultur WHERE kultur=? AND sesong=? AND NOT jukser GROUP BY divisjon, avdeling, serie_id ORDER BY divisjon, avdeling'); +$q->execute($locale, $season); while (my $ref = $q->fetchrow_hashref) { my $division = $ref->{'divisjon'}; @@ -101,41 +43,32 @@ while (my $ref = $q->fetchrow_hashref) { push @{$subdivision_ratings{$division}}, [ $id, $rating ]; } -$q = $dbh->prepare('SELECT divisjon,AVG(rating) AS avg_rating,STDDEV(rating) AS stddev_rating FROM ratings NATURAL JOIN siste_divisjon WHERE sesong=? GROUP BY divisjon ORDER BY divisjon'); -$q->execute($season); +$q = $dbh->prepare('SELECT divisjon,AVG(rating) AS avg_rating,STDDEV(rating) AS stddev_rating FROM ratings NATURAL JOIN siste_divisjon NATURAL JOIN spiller_kultur WHERE kultur=? AND sesong=? AND NOT jukser GROUP BY divisjon ORDER BY divisjon'); +$q->execute($locale, $season); + +my @divisions = (); my $i = 0; while (my $ref = $q->fetchrow_hashref) { - if (++$i % 2 == 0) { - print " \n"; - } else { - print " \n"; - } - printf " \n", $ref->{'divisjon'}; - printf " \n", $ref->{'avg_rating'}; - printf " \n", $ref->{'stddev_rating'}; + my %division = (); + $division{'#rank'} = wloh_common::get_ordinal($ref->{'divisjon'}, $locale); + $division{'#average'} = sprintf "%.1f", $ref->{'avg_rating'}; + $division{'#stddev'} = sprintf "%.1f", $ref->{'stddev_rating'}; + + my @subdivisions = (); for my $arr (@{$subdivision_ratings{$ref->{'divisjon'}}}) { my ($id, $rating) = @$arr; - printf " \n", $id, $rating; + push @subdivisions, { + '#divlink' => sprintf("%.1f", $rating), + '#divlink/href' => sprintf("http://wordfeud.aasmul.net/serie-%d", $id) + }; } - print " \n"; -} -print <<"EOF"; -
Div.SnittStd.avvik
%d.%.1f%.1f%.1f
+ $division{'subdivisions'} = \@subdivisions; -

Rankingliste

- - - - - - - - - -EOF + push @divisions, \%division; +} $q = $dbh->prepare(' SELECT * @@ -144,32 +77,36 @@ FROM ratings NATURAL JOIN siste_divisjon NATURAL JOIN spiller_kultur WHERE kultur=? +AND NOT jukser ORDER BY rating DESC'); $q->execute($locale); +my @players = (); + $i = 0; while (my $ref = $q->fetchrow_hashref) { - if (++$i % 2 == 0) { - print " \n"; - } else { - print " \n"; - } - printf " \n", $i; - printf " \n", $ref->{'id'}, HTML::Entities::encode_entities(Encode::decode_utf8($ref->{'navn'})); - printf " \n", $ref->{'rating'}; - printf " \n", $ref->{'rating_stddev'}; - printf " \n", $ref->{'serie_id'}, $ref->{'serie_navn'}; - print " \n"; -} -print "
NickRatingStd.avvikSist sett
%d.%s%.1f%.1f%s
\n"; + my %player = (); -wloh_common::output_last_sync($dbh); + $player{'#rank'} = wloh_common::get_ordinal(++$i, $locale); + $player{'#user'} = Encode::decode_utf8($ref->{'navn'}); + $player{'#user/href'} = sprintf "http://wordfeud.aasmul.net/bruker-%d", $ref->{'id'}; + $player{'#rating'} = sprintf "%.1f", $ref->{'rating'}; + $player{'#stddev'} = sprintf "%.1f", $ref->{'rating_stddev'}; + $player{'#divlink'} = $ref->{'serie_navn'}; + $player{'#divlink/href'} = sprintf "http://wordfeud.aasmul.net/serie-%d", $ref->{'serie_id'}; -print <<"EOF"; - - -EOF + push @players, \%player; +} -$match_stddev = $params{-2} * sqrt(2.0); +print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'+75m'); +wloh_common::process_template('rating', $locale, { + '#navbar' => wloh_common::get_navbar($cgi, $dbh, $locale), + 'iterations' => $aux_parms->{'num_iterations'}, + 'rating-prior-stddev' => sprintf("%.1f", $aux_parms->{'rating_prior_stddev'}), + 'match-stddev' => sprintf("%.1f", $aux_parms->{'score_stddev'} * sqrt(2.0)), + '#divisions' => XML::Template::alternate('tr/class', \@divisions, 'even', 'odd'), + '#players' => XML::Template::alternate('tr/class', \@players, 'even', 'odd'), + 'last-sync' => wloh_common::get_last_sync($dbh) +}); $dbh->rollback;