1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
---
title: "Team 6 - Project Leaguer: Sprint 2 Retrospective"
author: [ Nathaniel Foy, Guntas Grewal, Tomer Kimia, Andrew Murrell, Luke Shumaker, Davis Webb ]
---
# Tasks
The "size" is using the modified Fibonacci scale. A '1' is expected
to take less than an hour. A '3' is expected to take 3-6 hours. A
'5' should take the better part of a day or two. An 8 should take
several days.
+---------------------------------------------------------+------+------------+----+
| Tasks Implemented and Working | Size | Person\* | US |
+=========================================================+======+============+====+
| [Implement Anti-spam measures](#anti-spam) | 2 | Davis | 2 |
+---------------------------------------------------------+------+------------+----+
| [Implement Teammate Rating System (peer review view)] | 5 | Guntas | 3 |
| (#peer-review) | | | |
+---------------------------------------------------------+------+------------+----+
| [Design/Code Scoring/Pairing Algorithms and Procedures] | 5 | D+F+A | 3 |
| (#pair-alg) | | | |
+---------------------------------------------------------+------+------------+----+
| [Implement game-type specific and tournament | 8 | L+A+G | 4 |
| specific settings and preferences] (#setting-and-pref) | | | |
+---------------------------------------------------------+------+------------+----+
| [Retrieve data from Riot Games (TM) API ](#riot-api) | 3 | Foy | 5 |
+---------------------------------------------------------+------+------------+----+
| [Parse Riot data and attach to scoring subsystem] | 5 | Davis | 5 |
| (#parse-riot) | | | |
+---------------------------------------------------------+------+------------+----+
| [Teach Andrew and Tomer AJAX ](#teach-ajax) | 2 | Luke | 6 |
+---------------------------------------------------------+------+------------+----+
| [Make pages auto-update with AJAX](#ajax) | 5 | T+A | 6 |
+---------------------------------------------------------+------+------------+----+
| [Setting up a Tournament View for matches and tree] | 5 | Tomer | 7 |
| (#match-gui) | | | |
+---------------------------------------------------------+------+------------+----+
| [Increase Usability](#usability) | 3 | All-L | 8 |
+---------------------------------------------------------+------+------------+----+
| [Develop comprehensive data storage for s&p&other] | 5 | L+A | 9 |
| (#data-storage) | | | |
+---------------------------------------------------------+------+------------+----+
| [Create Player Profile Pages](#profile) | 2 | Tomer | 10 |
+---------------------------------------------------------+------+------------+----+
| [Gravatar Integration](#gravatar) | 2 | Foy | 10 |
+---------------------------------------------------------+------+------------+----+
+---------------------------------------------------------+------+------------+----+
| Tasks Implemented and Not Working Well | Size | Person\* | US |
+=========================================================+======+============+====+
| [Not Applicable](#all-or-nothing) | 0 | --- | 0 |
+---------------------------------------------------------+------+------------+----+
+---------------------------------------------------------+------+------------+----+
| Tasks Not Implemented | Size | Person\* | US |
+=========================================================+======+============+====+
| [Email Verification Option](#email-varify) | 5 | Luke | 2 |
+---------------------------------------------------------+------+------------+----+
| [Project Leaguer Logo](#logo) | spike| D+G | 8 |
+---------------------------------------------------------+------+------------+----+
| [Define Specific Unit Tests for Security] | 3 | All | 1 |
| (#security-test) | | | |
+---------------------------------------------------------+------+------------+----+
# Implemented and working
## Implement Anti-spam measures {#anti-spam}
To handle potential spam problems, Project Leaguer has implemented Simple Captcha
on the user sign up page. Users must enter the correct code corresponding with
Simple Captcha's generated image when registering. Usernames must also be unique.
E-mail verification has been pushed to Sprint 3.
## Implement Teammate Rating System (peer review view) {#peer-review}
This sprint covered both the database framework and actual implementation of the
peer review rating system. Peer review was accomplished with both server-side
processing and client-side manipulation of the DOM via a floating tactile dragable
info-box interface.
## Design/Code Scoring/Pairing Algorithms and Procedures {#pair-alg}
Several scoring algorithms were considered for demonstration purposes for this
sprint and eventually a modified fibonachi peer review system was chosen as the
most fair system. This was the only scoring algorithm implemented in this sprint.
A single-elimination pairing algorithm was chosen for similar reasons (as well
as for simplicity in SVG generation).
## Implement game-type specific and tournament specific settings and preferences
{#setting-and-pref}
The input for settings and preferences for creating tournaments are displayed
dynamically in both the substance of the content and form in which it is displayed.
## Retrieve data from Riot Games (TM) API {#riot-api}
Grabbing League of Legends user and match data from Riot's servers has been
implemented using their newly available API. A developer key is necessary in
order to retrieve data from their servers. We currently are using Davis's to do
so. Information is grabbed with HTTParty.get and the correct url. A hash of
information is stored this way. Grabbing information for a user requires the
user's League of Legends summoner's name or summoner id. Our current developer
key is limited to utilizing 10 pulls per 10 seconds.
## Parse Riot data and attach to scoring subsystem {#parse-riot}
We successfully parse the data we recieve from the Riot servers. The information
is stored in a JSON hash which we separate based on the information we want (like
kills, deaths, etc). One issue with our current pull method is that it can exceed
the pull limit that is on our current development key. To fix this, we are planning
on implementing a remote user id to link users Leaguer information to their Riot
information.
## Teach Andrew and Tomer AJAX {#teach-ajax}
Luke instructed Tomer on his AJAX tasks, but most of Andrew's were deferred to
sprint 3 and he focused his efforts elsewhere.
## Make pages auto-update with AJAX {#ajax}
AJAX was used in tournament and match views to update the tournament progress bar
and manage input options for tournament flow but still needs to be implemented
across the website in other areas.
## Setting up a Tournament View for matches and tree {#match-gui}
A new system was set-up so that matches are created from the trunk (final match) to
the most out matches, and teams are inserted into matches starting at the leaves and
and filling up the trunk. Any number of teams is now supported. A lot of log-based
math was used to write the rails-generated SVG, and a lot of arithmetic was done to
calculate the relative proportions.
## Increase Usability {#usability}
Project Leaguer has many new features that have increased usability. AJAX
integration, tournament visuals (ready bar, match trees), Gravatar images,
and Riot API integration all contribute towards an easier and more automatic
web interface available for our users to utilize.
## Develop comprehensive data storage for s&p&other{#data-storage}
Settings and Preferences (those options specific to tournaments of a game type
or a specific tournament, respectively) are handled through a single
TournamentPreference SQL (ActiveRecord) interface.
## Create Player Profile Pages {#profile}
Player Profile Pages successfully list important and useful user information.
Player username, e-mail, relationship status, and recent tournament information
are all listed on a user's profile page. Gravatar images are also shown here.
Users can also edit their pages.
## Gravatar Integration {#gravatar}
Gravatar images are fetched from the gravatar website. A user's e-mail is used to
generate a hash key and that key is used to grab their gravatar image from a url.
If their e-mail is not recognized by Gravatar, then we have a wide number of
optionable default images to use. We currently use a mystery man default. It's
also possible to utilize a number of other image options, such as sizing.
# Implemented but not working well
## Not Applicable {#all-or-nothing}
Everything we implemented was implemented well, or else we didn't implement it.
# Not implemented
## Email Verification Option {#email-verify}
This was not implemented for lack of time. Luke probably would have been able to
implement it with his time constraints if he wasn't busy frequently assisting
other members with various problems. In the end, the email verification was also
simply a low priority.
## Project Leaguer Logo {#logo}
The Project Leaguer Logo was discussed before the sprint started. We decided we
would follow up on any opportunities to explore creating a Leauger Logo, but this
simply did not happen. We greatly want one, but it's still just a low priority
extra feature.
## Define Specific Unit Tests for Security {#security-test}
# How to improve
1. We can better document our code with proper commentation and indentation. The
team has run into issues where we've become confused with our own code and wasted
time reviewing code.
2. Our commits slowed to a halt the week before spring break. In this upcoming
sprint we plan to take a stronger initiative and take a running start rather than
a last lap dash.
3. We can more carefully push and merge. We ran into a couple issues where team
members broke each others work. These mistakes cost a lot of time to fix.
|