]> git.sesse.net Git - foosball/blobdiff - www/index.pl
Adjusted initial parameters for maximum prediction power; in particular,
[foosball] / www / index.pl
index c31200a59586c5260fbadb8533cebdca7b95af64..9d439751bde488156435cfd3f898a7a9c6b8878f 100755 (executable)
@@ -10,7 +10,7 @@ my $dbh = foosball::db_connect();
 
 # Single score board (whoa, inefficient)
 my @single_top = ();
-my $q = $dbh->prepare('select username from users');
+my $q = $dbh->prepare('select username,count(*) as num_games from single_rating group by username');
 $q->execute();
 while (my $ref = $q->fetchrow_hashref) {
        my $username = $ref->{'username'};
@@ -21,22 +21,23 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @single_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
+               'numgames' => $ref->{'num_games'},
        };
 }
 @single_top = sort { $b->{'lowerbound'} <=> $a->{'lowerbound'} } @single_top;
 
 # Double score board
 my @double_top = ();
-$q = $dbh->prepare('select username from users');
+$q = $dbh->prepare('select username,count(*) as num_games from double_rating group by username');
 $q->execute();
 while (my $ref = $q->fetchrow_hashref) {
        my $username = $ref->{'username'};
@@ -47,15 +48,16 @@ while (my $ref = $q->fetchrow_hashref) {
 
        my $trend = "";
        if (defined($oldrating)) {
-               $trend = (sprintf "%+d", int($rating-$oldrating+0.5));
+               $trend = (sprintf "%+d", foosball::round($rating-$oldrating));
        }
 
        push @double_top, {
                'username' => $username,
-               'rating' => int($rating+0.5),
-               'rd' => int($rd+0.5),
-               'lowerbound' => int($rating - 3.0*$rd + 0.5),
+               'rating' => foosball::round($rating),
+               'rd' => foosball::round($rd),
+               'lowerbound' => foosball::round($rating - 3.0*$rd),
                'trend' => $trend,
+               'numgames' => $ref->{'num_games'},
        };
 }
 @double_top = sort { $b->{'lowerbound'} <=> $a->{'lowerbound'} } @double_top;
@@ -65,6 +67,7 @@ my @last_games = ();
 $q = $dbh->prepare('
 select * from (
     select
+        gametime as sort_gametime,
         to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,
         \'Double\' as type,
        team1_username1 || \' / \' || team1_username2 as username1,
@@ -91,6 +94,7 @@ select * from (
            and re.team2_username2=ra4.username
     union all
     select
+        gametime as sort_gametime,
         to_char(gametime, \'IYYY-MM-DD HH24:MI\') as gametime,
        \'Single\' as type,
        username1,
@@ -110,19 +114,19 @@ select * from (
            on re.gametime=ra2.ratetime
            and re.username2=ra2.username
 ) t1
-order by gametime desc limit 10');
+order by sort_gametime desc limit 10');
 $q->execute();
 while (my $ref = $q->fetchrow_hashref) {
        if (defined($ref->{'diff2'})) {
                $ref->{'diff1'} = sprintf "%+d / %+d",
-                       int($ref->{'diff1'} + 0.5),
-                       int($ref->{'diff2'} + 0.5);
+                       foosball::round($ref->{'diff1'}),
+                       foosball::round($ref->{'diff2'});
                $ref->{'diff2'} = sprintf "%+d / %+d",
-                       int($ref->{'diff3'} + 0.5),
-                       int($ref->{'diff4'} + 0.5);
+                       foosball::round($ref->{'diff3'}),
+                       foosball::round($ref->{'diff4'});
        } else {
-               $ref->{'diff1'} = sprintf "%+d", int($ref->{'diff1'} + 0.5);
-               $ref->{'diff2'} = sprintf "%+d", int($ref->{'diff3'} + 0.5);
+               $ref->{'diff1'} = sprintf "%+d", foosball::round($ref->{'diff1'});
+               $ref->{'diff2'} = sprintf "%+d", foosball::round($ref->{'diff3'});
        }
        push @last_games, $ref;
 }
@@ -132,8 +136,8 @@ $dbh->disconnect;
 print CGI->header(-type=>'application/xhtml+xml');
 
 my $doc = XML::Template::process_file('index.xml', {
-       '#singletop' => \@single_top,
-       '#doubletop' => \@double_top,
-       '#lastgames' => \@last_games,
+       '#singletop' => XML::Template::alternate('tr/class', \@single_top, 'odd', 'even'),
+       '#doubletop' => XML::Template::alternate('tr/class', \@double_top, 'odd', 'even'),
+       '#lastgames' => XML::Template::alternate('tr/class', \@last_games, 'odd', 'even'),
 });
 print $doc->toString;