<head>
<title>Foosball!</title>
<link rev="made" href="mailto:sgunderson@bigfoot.com" />
+ <link rel="stylesheet" type="text/css" href="foosball.css" />
<meta name="MSSmartTagsPreventParsing" content="TRUE" />
</head>
<body>
- <h1>Foosball!</h1>
+ <h1>...on a clear day, you can play foosball forever</h1>
- <h2>Add a singles result</h2>
+ <div class="box" id="addsingle">
+ <h2>Add a singles result</h2>
- <form method="post" action="add-single-result.pl">
- <table>
- <tr>
- <th>User name 1</th>
- <td><input name="username1" value="" size="10" /></td>
- </tr>
- <tr>
- <th>User name 2</th>
- <td><input name="username2" value="" size="10" /></td>
- </tr>
- <tr>
- <th>Score</th>
- <td>
- <input name="score1" value="" size="2" /> -
- <input name="score2" value="" size="2" />
- </td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" /></td>
- </tr>
- </table>
- </form>
+ <form method="post" action="add-single-result.pl">
+ <table>
+ <tr>
+ <th>Player 1:</th>
+ <td><input name="username1" value="" size="10" /></td>
+ </tr>
+ <tr>
+ <th>Player 2:</th>
+ <td><input name="username2" value="" size="10" /></td>
+ </tr>
+ <tr>
+ <th>Score:</th>
+ <td>
+ <input name="score1" value="" size="2" /> –
+ <input name="score2" value="" size="2" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><input type="submit" value="Add result" /></td>
+ </tr>
+ </table>
+ </form>
+ </div>
- <h2>Add a doubles result</h2>
+ <div class="box" id="adddouble">
+ <h2>Add a doubles result</h2>
- <form method="post" action="add-double-result.pl">
- <table>
- <tr>
- <th>Team 1 (usernames)</th>
- <td>
- <input name="team1_username1" value="" size="10" /> and
- <input name="team1_username2" value="" size="10" />
- </td>
- </tr>
- <tr>
- <th>Team 2 (usernames)</th>
- <td>
- <input name="team2_username1" value="" size="10" /> and
- <input name="team2_username2" value="" size="10" />
- </td>
- </tr>
- <tr>
- <th>Score</th>
- <td>
- <input name="score1" value="" size="2" /> -
- <input name="score2" value="" size="2" />
- </td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" /></td>
- </tr>
- </table>
- </form>
+ <form method="post" action="add-double-result.pl">
+ <table>
+ <tr>
+ <th>Team 1:</th>
+ <td>
+ <input name="team1_username1" value="" size="10" /> and
+ <input name="team1_username2" value="" size="10" />
+ </td>
+ </tr>
+ <tr>
+ <th>Team 2:</th>
+ <td>
+ <input name="team2_username1" value="" size="10" /> and
+ <input name="team2_username2" value="" size="10" />
+ </td>
+ </tr>
+ <tr>
+ <th>Score:</th>
+ <td>
+ <input name="score1" value="" size="2" /> –
+ <input name="score2" value="" size="2" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><input type="submit" value="Add result" /></td>
+ </tr>
+ </table>
+ </form>
+ </div>
+
+ <div class="box" id="assesssingle">
+ <h2>Assess a singles match</h2>
+
+ <form method="post" action="assess-single.pl">
+ <table>
+ <tr>
+ <th>Player 1:</th>
+ <td><input name="username1" value="" size="10" /></td>
+ </tr>
+ <tr>
+ <th>Player 2:</th>
+ <td><input name="username2" value="" size="10" /></td>
+ </tr>
+ <tr>
+ <td colspan="2"><input type="submit" value="Assess" /></td>
+ </tr>
+ </table>
+ </form>
+ </div>
+
+ <div class="box" id="assessdouble">
+ <h2>Assess a doubles match</h2>
- <h2>Singles score board</h2>
+ <form method="post" action="assess-double.pl">
+ <table>
+ <tr>
+ <th>Team 1:</th>
+ <td>
+ <input name="team1_username1" value="" size="10" /> and
+ <input name="team1_username2" value="" size="10" />
+ </td>
+ </tr>
+ <tr>
+ <th>Team 2:</th>
+ <td>
+ <input name="team2_username1" value="" size="10" /> and
+ <input name="team2_username2" value="" size="10" />
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"><input type="submit" value="Assess" /></td>
+ </tr>
+ </table>
+ </form>
+ </div>
- <table>
- <thead>
- <tr>
- <th>Username</th>
- <th>Rating mean</th>
- <th>Rating deviation</th>
- <th>Conservative estimate</th>
- <th>Change since yesterday</th>
- </tr>
- </thead>
- <tbody t:id="singletop">
- <tr>
- <td><t:username /></td>
- <td><t:rating /></td>
- <td><t:rd /></td>
- <td><t:lowerbound /></td>
- <td><t:trend /></td>
- </tr>
- </tbody>
- </table>
+ <div class="box" id="singleboard">
+ <h2>Singles score board</h2>
- <h2>Doubles score board</h2>
+ <table>
+ <thead>
+ <tr>
+ <th class="username">Username</th>
+ <th class="rating">Rating</th>
+ <th class="rd">RD</th>
+ <th class="numgames">Games</th>
+ <th class="lowerbound">Bound</th>
+ <th class="trend">Change</th>
+ </tr>
+ </thead>
+ <tbody t:id="singletop">
+ <tr>
+ <td class="username"><t:username /></td>
+ <td class="rating"><t:rating /></td>
+ <td class="rd"><t:rd /></td>
+ <td class="numgames"><t:numgames /></td>
+ <td class="lowerbound"><t:lowerbound /></td>
+ <td class="trend"><t:trend /></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
- <table>
- <thead>
- <tr>
- <th>Username</th>
- <th>Rating mean</th>
- <th>Rating deviation</th>
- <th>Conservative estimate</th>
- <th>Change since yesterday</th>
- </tr>
- </thead>
- <tbody t:id="doubletop">
- <tr>
- <td><t:username /></td>
- <td><t:rating /></td>
- <td><t:rd /></td>
- <td><t:lowerbound /></td>
- <td><t:trend /></td>
- </tr>
- </tbody>
- </table>
+ <div class="box" id="doubleboard">
+ <h2>Doubles score board</h2>
- <h2>Last ten games</h2>
+ <table>
+ <thead>
+ <tr>
+ <th class="username">Username</th>
+ <th class="rating">Rating</th>
+ <th class="rd">RD</th>
+ <th class="numgames">Games</th>
+ <th class="lowerbound">Bound</th>
+ <th class="trend">Change</th>
+ </tr>
+ </thead>
+ <tbody t:id="doubletop">
+ <tr>
+ <td class="username"><t:username /></td>
+ <td class="rating"><t:rating /></td>
+ <td class="rd"><t:rd /></td>
+ <td class="numgames"><t:numgames /></td>
+ <td class="lowerbound"><t:lowerbound /></td>
+ <td class="trend"><t:trend /></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
- <table>
- <thead>
- <tr>
- <th>Registered</th>
- <th>Type</th>
- <th colspan="2">Opponents</th>
- <th>Score</th>
- </tr>
- </thead>
- <tbody t:id="lastgames">
- <tr>
- <td><t:gametime /></td>
- <td><t:type /></td>
- <td><t:username1 /></td>
- <td><t:username2 /></td>
- <td><t:score1 /> – <t:score2 /></td>
- </tr>
- </tbody>
- </table>
+ <div class="box" id="lastgames">
+ <h2>Last ten games</h2>
- <h2>About the ratings</h2>
+ <table>
+ <thead>
+ <tr>
+ <th>Registered</th>
+ <th>Type</th>
+ <th colspan="2">Opponents</th>
+ <th>Score</th>
+ <th colspan="2" class="rightmost">Rating diff.</th>
+ </tr>
+ </thead>
+ <tbody t:id="lastgames">
+ <tr>
+ <td><t:gametime /></td>
+ <td><t:type /></td>
+ <td><t:username1 /></td>
+ <td><t:username2 /></td>
+ <td><t:score1 /> – <t:score2 /></td>
+ <td><t:diff1 /></td>
+ <td class="rightmost"><t:diff2 /></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <h2 style="clear: left;">About the ratings</h2>
- <p>The rating system is a modified Glicko 1 variant, adjusted for teams
- (with some ideas from Microsoft's TrueSkill system) and non-binary results.
- For those not familiar with these ratings, the most important parts are:</p>
+ <p>The rating system in use is called <em>FoosRank</em>, and is specially
+ designed for this site. It is a Bayesian rating system, inspired by
+ <a href="http://math.bu.edu/people/mg/glicko/">Glicko</a> but re-worked
+ out from scratch with a statistically sound model of non-binary results,
+ and adjusted for teams (with some ideas from Microsoft's TrueSkill
+ system). For those not familiar with Bayesian ratings, the most important
+ parts are:</p>
<ul>
<li>Your rating is a <em>statistical estimation</em> of your true skill.
It has a mean (the point estimate of your skill) and a deviation
(measuring the uncertainity of the estimate), called the RD. It is approximately
- Gaussian (actually logistic).</li>
+ Gaussian.</li>
<li>When you win or lose a game, your rating will change accordingly,
based on your score and your opponent. <em>You do not get 'points'
for winning or losing, the estimate is merely getting more accurate.</em>
you are ranked as an individual, as we do not usually play with fixed
teams.</li>
</ul>
+
+ <p>For the more technically minded, a
+ <a href="http://home.samfundet.no/~sesse/foosrank.pdf">very rough writeup
+ on the mathematics behind FoosRank</a> is available in PDF format. It is,
+ however, by no means finished.</p>
</body>
</html>