Jan D. Behrens [Fri, 14 Sep 2012 20:03:03 +0000 (22:03 +0200)]
Minor improvements to the badges generator:
- Fixed mistake int the ^6 color code (leading to wrong colors)
- Extended the playernick down-scaling for too wide nicks (now max. down-scaling is based on fontsize)
Ant Zucaro [Tue, 11 Sep 2012 02:01:54 +0000 (22:01 -0400)]
Add localized time support (on hover).
Without Javascript people will see the UTC time. With Javascript
all of those UTC times will be changed to localtime (accounting
for DST) via the epoch time of the object.
Ant Zucaro [Sat, 8 Sep 2012 18:59:00 +0000 (14:59 -0400)]
Handle the halving of weapon stats a little better.
Default PlayerWeaponStat rows to all 0 to protect for missing
accuracy data. Also halve all of the pwstat members at once
instead of checking on each loop.
Ant Zucaro [Sat, 8 Sep 2012 18:37:18 +0000 (14:37 -0400)]
Use a dummy session variable.
A little while ago I moved down the creation of the actual
DBSession() below the precondition checks to avoid unnecessary
rollback transactions. What I didn't do was check if the session
existed before using it, so when precondition checks failed I was
calling a variable that wasn't defined yet (another exception).
This adds a dummy session variable that I can check before rolling
back, avoiding more exceptions.
Ant Zucaro [Fri, 7 Sep 2012 02:41:45 +0000 (22:41 -0400)]
Halve the weapon stats if the POST request is from version 1.
Version 1 of the weapon stats submissions sent double the weapon
stats. This means that all hit, fired, max, actual, and frag data
were 2x what they should be. The fix is to check for version 1
requests and halve them accordingly. Versions >1 should not have
this problem.
Ant Zucaro [Wed, 5 Sep 2012 03:00:08 +0000 (23:00 -0400)]
Fix broken firefox. Damn you, firefox!
The latest firefox update broke the web borders. This is a
workaround. It compresses the main header by removing the
"get the game" button (not really needed). This change also
swaps out the backgrounds to match xonotic.org and a move of
the title accordingly. All in all I think it looks pretty decent!
Ant Zucaro [Sun, 2 Sep 2012 17:08:36 +0000 (13:08 -0400)]
Use relative time everywhere, but add hover with absolute time.
Use "fuzzy" dates everywhere (e.g. "an hour ago"), but allow for
a hover showing the absolute UTC time when needed. This is done
with a span and a title attribute.
Jan D. Behrens [Thu, 30 Aug 2012 10:53:34 +0000 (12:53 +0200)]
More design work on the two badge themes; also improved skin support
- More parameters that can be changed by skins
- Minimal skin: fixed gametype alignment, retuned coloring to be more modest, some redesign
- Classic skin: gametypes are now aligned to the center if less than max. gameteypes are shown, re-introduced the "no stats" stamp, also some redesign
- Some code cleanup
Jan D. Behrens [Wed, 29 Aug 2012 14:39:59 +0000 (16:39 +0200)]
A collection of smaller improvements to the badges generator
- Fixed a bug in the commandline parser
- Finally fixed the "win/loss" bug (new query, also a bit faster)
- Split up "render" and "data" parts of the code (skin.py & playerdata.py)
- Reworked overlay images for classic/minimal skin (source .xcf files included)
Jan D. Behrens [Wed, 29 Aug 2012 10:58:31 +0000 (12:58 +0200)]
Added multiple skin support and better commandline parsing
- Skins other than "classic" will be put into a subdir in the output directory (e.g. output/minimal/###.png)
- By default, "classic" and "minimal" badges are created for all players that were active in the last 6 hours
- A skin list can be passed to the program for testing (e.g. "gen_badges.py classic archer")
- The "-force" parameter enforces an update of all badges by setting delta to 2^24 hours
- The "-test" parameter limits the number of players to be considered to 200 (used for testing)
Ant Zucaro [Wed, 29 Aug 2012 02:01:12 +0000 (22:01 -0400)]
Add a cutoff date.
The cutoff date is the date before which games are not considered.
In other words, a player must play within the cutoff date range in
order to have his or her badge regenerated. This is to prevent
generating images for every single player, every single run.
Jan D. Behrens [Tue, 28 Aug 2012 12:41:22 +0000 (14:41 +0200)]
Added rudimentary skin support to badges (also moved large parts of code outside the main program)
- To select skin, run gen_badges.py with the skin name as argument (i.e. "classic" or "archer").
Ant Zucaro [Sat, 25 Aug 2012 12:17:04 +0000 (08:17 -0400)]
Add player badge batch job (via zykure).
The player badge batch job uses cairo to generate a summary
image of the given player's statistics. It can be run
periodically to maintain the "freshness" of the data. The
tricky thing with this batch job is getting cairo working
within the virtualenv - one has to install it in the machine
and then symbolically link to the ENV. This is obviously not
ideal, but it does work.
Many thanks to zykure for this well-designed image!
Jan D. Behrens [Thu, 23 Aug 2012 20:01:04 +0000 (22:01 +0200)]
Re-implemented the badges generator, now it uses the cairo API for rendering.
Rendering one image takes about 0.2 sec, including the DB queries for each player.
Ant Zucaro [Thu, 23 Aug 2012 11:40:51 +0000 (07:40 -0400)]
Wait for precondition checks before beginning the DB transaction.
SQLA's DBSession implicitly starts a PG transaction. When this
happens before the precondition checks (blank game, verified req, etc)
then an unneccesary transaction is started. Delay grabbing a new
DBSession until AFTER these checks are done prevents these useless
transactions from occurring. This means we should see little to
no ROLLBACK transactions in Munin once this is in place.
Ant Zucaro [Wed, 1 Aug 2012 11:52:19 +0000 (07:52 -0400)]
Use score-scaling Elo for non-duels.
Scale S according to the real scorefactor in non-duel games.
This eliminates the effects of people switching to the winning
or losing team at the very last second. This also avoids a
"winner take all" in DM mode, where most people would lose points.
Additionally, all players are compared to everyone else, not just
those on their own team. This makes it more fair anyway - no
averages are done over the opponent team only. You now have to
perform better overall to get more points.
Ant Zucaro [Wed, 25 Jul 2012 12:32:20 +0000 (08:32 -0400)]
Use traditional (win-based) Elo instead of score-based.
Using traditional Elo instead of score-based Elo eliminates a lot of
confusion and drama surrounding losing points when winning and
gaining points when losing. I think this is a better reflection of
what we're after - the highest ranking players have won the most.
This has an intended side-effect of encouraging ALL players to
play more, because even pros have no penalties by playing newer
players.
Ant Zucaro [Sat, 21 Jul 2012 01:59:10 +0000 (21:59 -0400)]
Don't dock Elo points if the player won.
After much debate I've included this enhancement. It prevents
losing Elo points if you've won the game. While this makes the
algorithm not *true* Elo, it prevents the negative perception
in the community. People were turning off their tracking for
fear of losing Elo points even if they won, and this hopefully
will fix that situation.
Ant Zucaro [Sat, 21 Jul 2012 00:58:02 +0000 (20:58 -0400)]
Remove +/- points display on scoreboard.
I've decided not to show the +/- elo_deltas on the scoreboard
because they are individual measures. They thus belong on a
given player's info page instead. The player_info view is the
future destination of this data (not implemented yet).
Also, I'm preventing duel matches from being processed as both
duel and dm matches. Duel really is a mode of its own, even if
Xonotic doesn't have a dedicated mode for it.
Ant Zucaro [Sat, 7 Jul 2012 01:45:23 +0000 (21:45 -0400)]
Basic support for batch processes.
Badges is the first batch process supported. It basically
sets up the pyramid environment, then iterates over the
player base and generates static HTML files showing their
high-level stats. That static HTML is then converted into
a PNG for use in forum signatures. A bash wrapper is
needed to drive the whole process via cron.
Ant Zucaro [Sat, 30 Jun 2012 10:49:07 +0000 (06:49 -0400)]
Allow player view functions to be imported.
Prefixing the real data functions with '_' prevents
them from being imported by outside applications.
At first I thought this was a feature, then I realized
that there is really no harm to exposing them if needed.
Such a need developed for player badges, so I'm exposing
the views here. More will follow.
Ant Zucaro [Wed, 20 Jun 2012 14:17:10 +0000 (10:17 -0400)]
Add elo delta tracking.
An elo delta is the amount by which a player's elo goes up
or down per match. This is useful for tracking purposes
and competitions.
The decimal formatting here is a bit hacky, and I don't like it,
but Mako refuses to do a proper format string on a decimal.Decimal.
This is even thought on the interactive command line it works! Argh.
Ant Zucaro [Mon, 18 Jun 2012 00:10:20 +0000 (20:10 -0400)]
Add favorite map support.
This commit adds a line item to the player_info page
showing the player's favorite map. This is the map
the player has played the most in the past 90 days.
A link to the map_info page of that map in included.
Ant Zucaro [Sat, 16 Jun 2012 13:44:21 +0000 (09:44 -0400)]
Integrate the damage efficiency graph in player_info.
It isn't complete yet, but it is much better than before, where
new players would have a blank graph. Now it checks that the
given player has *any* accuracy or damage based weapon usage
and shows the graph accordingly. If the player does not have
five games of either, the appropriate graph doesn't show.
The incomplete part is that I'm not setting the default
weapon to show (nex and rocket launcher). If a player plays,
say, 10 games avoiding the rocket launcher then it will still
show a blank graph b/c the rocket launcher is the default dmg
weapon shown. This will be fixed, I just need to find a good way.
Ant Zucaro [Fri, 15 Jun 2012 13:39:25 +0000 (09:39 -0400)]
Add a damage efficiency view structure.
Allow tracking of damage efficiency as well. Damage efficiency I'll
define as the amount of damage you do per hit. The higher, the
better! This is appropriate for all splash-damage weapons. Spam shots
are not included on purpose (unless they hit, of course) after
conversations with the competitive community; spam shots usually miss
and are intended for blocking routes or catching your opponent while
they are out of your direct line of sight.
Ant Zucaro [Wed, 16 May 2012 02:37:38 +0000 (22:37 -0400)]
Add initial support for JSON on map_index view.
This commit adds initial JSON support to the map_index view.
I am giving each model class a to_dict function that returns
a select number of its instance variables back in the form of
a dictionary, which can then be returned directly by a JSON
renderer. I'm not sure if this is the right way to go, but
it works for now.
I've also ripped out the main "data-calling" piece of each
view callable into a separate function so that the JSON-
enabled view callable can use it. The non-JSON one just
returns the result of that function, while the JSON one
massages the data to be able to make it fit better for
API-like consumption.
Ant Zucaro [Mon, 14 May 2012 20:55:51 +0000 (16:55 -0400)]
Make pagination a GET parameter, not part of the URL.
It was not the best idea to add the 'page' displayed to be an actual
part of the URL. It should be a GET parameter instead, which jives
a little better with my understanding of REST-like resources. This
changes all paginated views to use a GET parameter and also limits
results returned to 10 per page for performance and viewability
reasons.
Ant Zucaro [Mon, 14 May 2012 16:55:49 +0000 (12:55 -0400)]
Do not die if missing revision metadata.
The Xonotic revision metadata comes as a part of the 'R'
line in the POST. Although it isn't required, server was dying
when it was missing. I made it optional now, defaulting
that field to "unkown" when it isn't present. Note: DTG
brought this issue into the light, as they custom compile
their Xonotic, and they omit #ifdef'ing WARPZONE, which
is what prints the 'R' line in stats.
Ant Zucaro [Mon, 30 Apr 2012 01:47:58 +0000 (21:47 -0400)]
Add a toggle-able accuracy selector to the player info page.
You can choose which weapon to show accuracy stats for. The only weapons shown are those that the player has used in 5 or more games in the past 90 days. This is still a work in progress, as I don't have labels or nice hovers for the datapoints. :(
Ant Zucaro [Sun, 29 Apr 2012 16:10:14 +0000 (12:10 -0400)]
Initial version of ajax-updating of the accuracy graph.
The accuracy view needs to be changed to accommodate clicking on weapons where not enough data is supplied. Right now it results in a JS error that halts all further updates to the graph.
Don't throw an error if the number of duel ranks found is < 10.
I was using '-' as a filler in such cases, and was populating four values into a tuple. The template expected three, so in situations when I had to fall back on the filler values, I was providing one too many, leading to 'too many values to unpack' upon loading up the main page.