summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Sprint1-Retrospective.md220
-rw-r--r--doc/Sprint2-Retrospective.md215
-rw-r--r--doc/Sprint2.md103
-rw-r--r--doc/Sprint3-Retrospective.md291
-rw-r--r--doc/Sprint3.md80
-rw-r--r--doc/sprint2Retro.md12
6 files changed, 921 insertions, 0 deletions
diff --git a/doc/Sprint1-Retrospective.md b/doc/Sprint1-Retrospective.md
new file mode 100644
index 0000000..7bffde7
--- /dev/null
+++ b/doc/Sprint1-Retrospective.md
@@ -0,0 +1,220 @@
+---
+title: "Team 6 - Project Leaguer: Sprint 1 Retrospective"
+author: [ Nathaniel Foy, Guntas Grewal, Tomer Kimia, Andrew Murrell, Luke Shumaker, Davis Webb ]
+---
+
+# User Stories
+
+1) As an administrator, I would like to install and boot my own server.
+ - Alternately: As a developer, I would like a demo/testing server,
+ with a basic Rails setup.
+2) As a host/player, I would like to register and have an account.
+ - For this task, we will be creating the user registration and log
+ in capabilities for Leaguer.
+3) As a host, I would like to start a tournament.
+ - For this task, we will be creating a base tournament system for a
+ host to run.
+4) As a host/player, I would like to enter scores for players.
+ - For sprint own, the scores will be entered by hand.
+5) As an administrator, I want to specify how users become hosts.
+6) As a user I would like to see the progress of the tournament in my
+ browser.
+7) As a user, I would like a presentable homepage.
+ - For this task, we will be creating a Leaguer homepage and ensure that it
+ is pleasing to the eye and easy to navigate.
+
+# 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 |
++=========================================================+======+========+====+
+| [Learn Rails, set up Scaffolding for all Models, Views, | 8 | All | 1 |
+| Controllers](#learn-rails) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Deploy rails on Luke's server](#deploy-rails) | 3 | Luke | 1 |
++---------------------------------------------------------+------+--------+----+
+| [Create log-in system back-end (verification, cookies, | 5 | Davis | 2 |
+| and redirection)](#login-backend) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Create log-in system UI](#login-ui) | 2 | Tomer | 2 |
++---------------------------------------------------------+------+--------+----+
+| [Create Tournament Settings Page](#tourney-settings) | 3 | Guntas | 3 |
++---------------------------------------------------------+------+--------+----+
+| [Implement Tournament Registration and Tournament | 2 | Andrew | 3 |
+| Controller](#tourney-registration) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Implement match controller](#match-controller) | 3 | Dav+And| 4 |
++---------------------------------------------------------+------+--------+----+
+| [Implement permissions system over the users | 3 | Luke | 5 |
+| system](#permissions) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Create View Tournament Page](#tourney-view) | 5 | All | 6 |
++---------------------------------------------------------+------+--------+----+
+| [Create Presentable Homepage](#homepage) | 5 | Guntas | 7 |
++---------------------------------------------------------+------+--------+----+
+
+
++---------------------------------------------------------+------+--------+----+
+| Tasks Implemented and Not Working Well | Size | Person | US |
++=========================================================+======+========+====+
+| [Design and implement match score models](#match-score) | 3 | Foy | 4 |
++---------------------------------------------------------+------+--------+----+
+| [Create Admin-level Server Management Page](#srv-man) | 2 | Luke | 5 |
++---------------------------------------------------------+------+--------+----+
+
+
++---------------------------------------------------------+------+--------+----+
+| Tasks Not Implemented | Size | Person | US |
++=========================================================+======+========+====+
+| [Design/Code Scoring/Pairing Algorithms and | 5 | Foy | 3 |
+| Procedures](#score-algo) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Observe Foy Design/Code Scoring/Pairing | 2 | Dav+Foy| 3 |
+| Algorithms](#score-algo) | | | |
++---------------------------------------------------------+------+--------+----+
+| [Create a Player-level Data Entry Page/Method for | 3 | Tomer | 4 |
+| Results](#data-entry) | | | |
++---------------------------------------------------------+------+--------+----+
+
+# Implemented and working
+
+## Learn Rails {#learn-rails}
+
+Learning Rails has been a growing experience for the majority of the
+team. Some of us coming from no significant experience to being able
+to put together a relatively functional product in only three weeks
+has been an impressive journey.
+
+## Deploy Rails {#deploy-rails}
+
+The entire team became familiar with deploying Rails in our rather
+diverse working environments and successfully deployed a server
+instance located at demo.projectleaguer.net as well as on our local boxes.
+
+## Login (back-end) {#login-backend}
+
+Our login back-end successfully logs users in and our and can handle
+user registrations and first-come-first-serve uniqueness validation.
+
+## Login (UI) {#login-ui}
+
+Our login user interface successfully differentiates between logged in
+and logged out users as well as between users of different
+designations (although for the demo some of the hooks were not in
+place, this has been fixed).
+
+## Tournament settings {#tourney-settings}
+
+Tournament settings were implemented at a basic level, instituting those
+items which are similar to all tournaments, regardless of type, orginating
+from the game model.
+
+## Tournament registration {#tourney-registration}
+
+Tournament registration and the tournament contoller were completed which
+allowed users to join and participate in basic tournaments of several types.
+The tournament controller handled a variety of tournament related tasks,
+including creating and updating tournaments and validating tournament related
+operations.
+
+## Match controller {#match-controller}
+
+The Match Controller creates the separate matches for a specific tournament.
+When a tournament is started, it begins with an initial match that contains
+no players. Currently, a player must join a match by entering the specific
+tournament (by clicking the 'show' button on the tournament),
+then they must enter the match (again by clicking the 'show' button but this
+time on the match they desire to participate in) and then finally clicking
+the 'join' button. This updates the match with the user as a participant in
+the matc and then finally clicking the 'join' button. This updates the match
+with the user as a participant in the match. A match can also be destroyed
+by clicking the 'delete' button on the no longer desired match on the page.
+
+## Permissions system {#permissions}
+
+The permissions system is implemented, easy to use, and works well.
+In some places, it appears to be broken (overly-permisive), but this
+is because the relevant page doesn't hook into the permission system.
+This needs to be fixed with unit tests.
+
+## Tournament view {#tourney-view}
+The view page for tournaments contains a table that lists all on going
+tournaments for all types of games. It also lists other game attribute like
+Players per team, Teams per match, whether or not teams were randomized
+and also has links to Show, Edit, Destroy, Join a particular tournament.
+A link to create a tournament is also provided. Each of the links correspond
+to view pages which are html.erb pages that provide styles and functionality
+of each of the tournament setting features. Show, Edit, Destroy, all have
+views of their own to perform each of the above actions.
+
+## Homepage {#homepage}
+The homepage is mainly controlled by the views that are associated with each
+model and controller. The main view for the homepage is the one found in the
+layouts called application.html.erb, this view is responsible for display of
+all the headings, navigation bars, forms and containers. This view page
+contains mostly links to other view pages and yields whatever the other view
+pages have to offer. The Homepage redirects to Login, Signup, See Ongoing
+Tournaments and shows the view for those models.
+
+
+# Implemented but not working well
+
+## Match score models {#match-score}
+
+This only functioned properly for noting which team would win a match. We want
+more information to be included, such as individual player scores. We also
+only had it working where the tournament host would decide who won.
+
+## Server management {#srv-man}
+
+The server management software interface is implemented, and working
+fine. The other modules use it. However, what we didn't implement is
+an actual *page* to edit these settings. We had this task in the
+iteration because other items depended on it. Though we did not
+implement the full story, we implemented the core reason that we
+wanted it.
+
+# Not implemented
+
+## Scoring Algorithms {#score-algo}
+
+Scoring algorithms was not implemented because we did not have time for
+implementing player statistics in the first sprint. There were some
+preliminary approaches, but the task lost priority and was abandoned.
+
+## Data entry {#data-entry}
+
+It was decided to not be a priority for sprint one due to time constraints.
+Also, we want to implement data entry for League of Legends through
+Riot Games (TM)'s API for grabbing match data.
+
+# How to improve
+
+Peer reviews and testing were our biggest pitfalls.
+
+
+1. All testing was just manual, in-browser testing, rather than unit
+ tests. We really need write unit tests this iteration, as we had
+ breakages where we said "this is exactly why we need unit
+ testing." However, that happened late enough in the iteration that
+ we didn't have time to do anything about it.
+
+2. That leads us into time management. Our commit activity plotted
+ against time has humps each weak, each growing a little. That is,
+ we started slow, and ended with a lot of work. This wasn't exactly
+ poor planing, but we had a poor idea of how much time things would
+ take. We plan to fix this by front-loading this iteration instead
+ of back-loading it.
+
+3. We had the approach of "show everyone everything" with peer
+ reviews, as we anticipated that this would be nescessary for
+ everyone learning Rails. However, in effect it meant that
+ sometimes information was spread very thin, or because things were
+ being done "in the open", we didn't ever explicitly review them.
+ We plan on fixing this next iteration by committing to do very
+ specific peer reviews with just a couple members of the team.
diff --git a/doc/Sprint2-Retrospective.md b/doc/Sprint2-Retrospective.md
new file mode 100644
index 0000000..9a98ec5
--- /dev/null
+++ b/doc/Sprint2-Retrospective.md
@@ -0,0 +1,215 @@
+---
+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}
+
+Because of heavy "dog-food" style testing during the development process and
+fairly heavy rapid redesign, specific unit tests were not given a high priority
+for this sprint. The interdependency of components for tournament logic provided
+near-instant feedback when something was wrong.
+
+# 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.
diff --git a/doc/Sprint2.md b/doc/Sprint2.md
new file mode 100644
index 0000000..a823600
--- /dev/null
+++ b/doc/Sprint2.md
@@ -0,0 +1,103 @@
+---
+title: "Team 6 - Project Leaguer: Sprint 2"
+author: [ Nathaniel Foy, Guntas Grewal, Tomer Kimia, Andrew Murrell, Luke Shumaker, Davis Webb ]
+---
+
+# User Stories
+
+1) As an admin, I would like hosts/players, to have only the options
+ their group entitles them to.
+
+2) As an admin, I would like anti-spam measures for registration.
+
+3) As a player I would like to review my peers and have our
+ scores reflect these reviews.
+
+4) As a host I would like to have both game-type specific settings and
+ tournament specific preferences available when creating a new
+ tournament.
+ - These settings and preferences were moved to sprint 2 from sprint 1
+ because we did not have the API functionality for any specific game yet.
+
+5) As a host/player/spectator I would like to have Riot Games League
+ of Legends API integration for match and player statistics and results for
+ League of Legends tournaments.
+
+6) As a host/player, I would like my pages to actively update without
+ refreshing my current page.
+ - For this task, we will implement an Active Status Update system with AJAX.
+
+7) As a host/player, I would like to see an interactive tournament lobby page
+ that displays tournament and match information.
+ - This will be accomplished with dynamic graphs, trees, and status bars.
+
+8) As a host/player, I would like the Leaguer application to be more intuitive
+ and easy to use.
+
+9) As a user, I would like past tournament and player information to be
+ persistent and search-able.
+ - A working search utility should be implemented that will find specific
+ players or tournaments and return their pages.
+
+10) As a user, I would like to see Player Profile pages.
+ - For this task, we will be creating profile pages for registered users that
+ have player-specific information such as tournament history and activity.
+
+# 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.
+
++---------------------------------------------------------+------+------------+----+
+| Task Description | Size | Person\* | US |
++=========================================================+======+============+====+
+| Define Specific Unit Tests for Security | 3 | All | 1 |
++---------------------------------------------------------+------+------------+----+
+| Implement Anti-spam measures | 2 | Davis | 2 |
++---------------------------------------------------------+------+------------+----+
+| Email Verification Option | 5 | Luke | 2 |
++---------------------------------------------------------+------+------------+----+
+| Implement Teammate Rating System (peer review view) | 5 | Guntas | 3 |
++---------------------------------------------------------+------+------------+----+
+| Design/Code Scoring/Pairing Algorithms and Procedures | 5 | D+F+A | 3 |
++---------------------------------------------------------+------+------------+----+
+| Implement game-type specific and tournament | 8 | L+A+G | 4 |
+| specific settings and preferences | | | |
++---------------------------------------------------------+------+------------+----+
+| Retrieve data from Riot Games (TM) API | 3 | Foy | 5 |
++---------------------------------------------------------+------+------------+----+
+| Parse Riot data and attach to scoring subsystem | 5 | Davis | 5 |
++---------------------------------------------------------+------+------------+----+
+| Teach Andrew and Tomer AJAX | 2 | Luke | 6 |
++---------------------------------------------------------+------+------------+----+
+| Make pages auto-update with AJAX | 5 | T+A | 6 |
++---------------------------------------------------------+------+------------+----+
+| Setting up a Tournament View for matches and tree | 5 | Tomer | 7 |
++---------------------------------------------------------+------+------------+----+
+| Increase Usability | 3 | All-L | 8 |
++---------------------------------------------------------+------+------------+----+
+| Project Leaguer Logo | spike| D+G | 8 |
++---------------------------------------------------------+------+------------+----+
+| Develop comprehensive data storage for s&p&other | 5 | L+A | 9 |
++---------------------------------------------------------+------+------------+----+
+| Create Player Profile Pages | 2 | Tomer | 10 |
++---------------------------------------------------------+------+------------+----+
+| Gravitar Integration | 2 | Foy | 10 |
++---------------------------------------------------------+------+------------+----+
+| Test it | 1 | All-L | all|
++---------------------------------------------------------+------+------------+----+
+| Peer review | 1 | All | all|
++---------------------------------------------------------+------+------------+----+
+
+Total Size of Iteration: 55
+
+ D = Davis = 10
+ A = Andrew = 10
+ F = Nathaniel = 10
+ G = Guntas = 10
+ L = Luke = 11
+ T = Tomer = 10
+
+\* `+` means those members work together, `-` means exclude following members
diff --git a/doc/Sprint3-Retrospective.md b/doc/Sprint3-Retrospective.md
new file mode 100644
index 0000000..831e51c
--- /dev/null
+++ b/doc/Sprint3-Retrospective.md
@@ -0,0 +1,291 @@
+---
+title: "Team 6 - Project Leaguer: Sprint 3 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 |
++=========================================================+======+============+====+
+| [Intelligent Error Handling](#error-hand) | 3 | Andrew | 3 |
++---------------------------------------------------------+------+------------+----+
+| [Search](#search) | 5 | Tomer | 6 |
++---------------------------------------------------------+------+------------+----+
+| [Email verification](#email-verify) | 8 | Luke | 2 |
++---------------------------------------------------------+------+------------+----+
+| [Alternate Scoring and pairing methods](#alt-score-par) | 5 | G, A, D | 7,8|
++---------------------------------------------------------+------+------------+----+
+| [Asynchronous Riot Pulls](#async) | 5 | Nathaniel | 11 |
++---------------------------------------------------------+------+------------+----+
+| [Map out brackets scaffolding](#brack-scaff) | 5 | Tomer | 10 |
++---------------------------------------------------------+------+------------+----+
+| [Create braket creation and submission gui](#brack-gui) | 3 | Tomer | 10 |
++---------------------------------------------------------+------+------------+----+
+| [General Interface Cleanups](#interface-clean) | 2 | Tomer | 1 |
++---------------------------------------------------------+------+------------+----+
+| [Make it look professional](#professional) | 3 | All | 1 |
++---------------------------------------------------------+------+------------+----+
+| [Expand Peer Evaluation](#peer-expansion) | 3 | G, A, D | 7 |
++---------------------------------------------------------+------+------------+----+
+| [Private Messages](#priv-messages) | 5 | N, L | 5 |
++---------------------------------------------------------+------+------------+----+
+| [Alerts](#alerts) | 3 | Guntas | 4 |
++---------------------------------------------------------+------+------------+----+
+
+
++---------------------------------------------------------+------+------------+----+
+| Tasks Implemented and Not Working Well | Size | Person | US |
++=========================================================+======+============+====+
+| [Remote Game UserNames](#remote_user) | 3 | Davis | 12 |
++---------------------------------------------------------+------+------------+----+
+| [Tournament preference interface](#tourn-prefer) | 3 | Andrew | 9 |
++---------------------------------------------------------+------+------------+----+
+| [More types of seeded settings](#seed) | 2 | Andrew | 9 |
++---------------------------------------------------------+------+------------+----+
+| [Project Leaguer Logo](#logo) | spike| G, D | 1 |
++---------------------------------------------------------+------+------------+----+
+
+
++---------------------------------------------------------+------+------------+----+
+| Tasks Not Implemented | Size | Person | US |
++=========================================================+======+============+====+
+| [None](#success) | 0 | -- | 0 |
++---------------------------------------------------------+------+------------+----+
+
+[How to improve](#improve)
+
+# Implemented and working
+
+## Intelligent Error Handling {#error-hand}
+
+Several important cases for error redirection were handled via
+standard permissions changes and in the end only a few specific
+redirections needed to be coded directly (such as correctly handling
+redirections away from a destoryed tournament or match).
+
+## Search {#search}
+
+A basic SearchController and simple view were implemented. The search
+controller took the query, and queried the "name" columns in the user
+and tournament database tables. An "advanced" search mode allows
+filtering tournaments by game type. We would like to be able to
+search based on other parameters and settings of the tournament, and
+other user attributes.
+
+To more easily render the search results, we moved the tournament and
+player display blocks from their respective index pages to be shared,
+to display them consistently, and avoid code duplication.
+
+## Email verification {#email-verify}
+
+Email verification was (finally) implemented. It uses delayed_job
+(see [asynchronous Riot pulls](#async)) to avoid blocking the page if
+the MX isn't responding. However, email password resets are not yet
+implemented, which is the obvious use-case for verified emails.
+
+## Alternate Scoring and pairing methods {#alt-score-par}
+
+We overhaulted the entire tournament structure and introduced a
+modular/pluggable system for seeding, scheduling, sampling, and
+scoring, lovingly called the 4S-Module System. We relocated code from
+other places into these modules in the 'lib' directory including form
+HTML which is retrieved dynamically from these modules. In the case
+of sampling (retrieving and populating statistics for scoring) we
+built an intelligent system for populating available modules for a
+game-type based on the statistics needed for its scoring methods which
+replaced their manual configuration. We introduced Tournament Stages
+to accomodate a wider range of tournament types and modes and designed
+the library modules to be general enough to use results of past stages
+or player statistics to affect future ones.
+
+## More types of seeded settings {#seed}
+
+We implemented seeding for initial placement of players within a tournament as part
+of the 4S-Module System. Three seeding modules were implemented.
+
+ 1. Early bird - Team rosters are based on order of registration for
+ the tournament.
+ 2. Random - Team rosters are randomized.
+ 3. Fair Ranked - Players are distributed evenly on teams according to
+ their performance in the previous tournament stage. This method
+ only works for tournaments with multiple stages.
+
+## Asynchronous Riot Pulls {#async}
+
+Prior to this iteration, calls to the Riot Games API here hard-coded,
+and blocked the page from loading while the requests were made. We
+needed to (1) create an interface for doing this flexibly (2) make the
+calls asynchrounous to avoid blocking the page load. To perform the
+asynchronous requets, we used the "delayed_job" gem to run each
+request as a separate job process. A challenge with this was that
+most API's (including Riot Games') place an artifical limit on API
+requests within a given period of time (in the case of Riot Games, 10
+requests per 10 seconds, and 500 per 10 minutes). So the background
+job making requests must be throttled from making too many within
+several given rolling blocks of unit time. To do this, we implemented
+a ThrottledApiRequest base class that makes it simple to create
+throttled asynchronous API requests, which we used to create the
+"RiotAPI" sampling method, but is applicable in a much wider variety
+of situations.
+
+## Map out brackets scaffolding {#brack-scaff}
+
+Brackets are structures that have a users' prediction of the winners
+of a tournaments matches. Essentially, a tournament has many brackets,
+each bracket has a user that creates it, and each bracket has
+bracket-matches that correspond to the matches of the tournament the
+bracket belongs to. Bracket matches are only models, as the user
+should be able to predit all winners from a single view that belongs
+to a bracket. Brackets on the other hand have a model, controller, and
+views, so that users may create, edit, and view them.
+
+## Create braket creation and submission gui {#brack-gui}
+
+The bracket creation gui looks simple to the user, but does a lot on
+the backend. When the user presses "Make a bracket" on a tournament,
+a bracket is created based on the user, the tournament, and the
+tournament's matches. The bracket's submission GUI looks a lot like an
+elimination tournament's SVG, however the user is able to click on
+teams to advance them forward. The SVG has javascript functions that
+both advance the teams visually on the SVG, and write the user's
+prediction in a hidden form. When the user clicks submit, the
+predictions are saved in the bracket's matches.
+
+## General Interface Cleanups {#interface-clean}
+
+Project Leaguer better handled tournament interface in this iteration.
+Tournaments are listed more cleanly on the index page. Each game type
+has an icon listed with it to better identify different game types on
+the index page. Each tournament's host's gravatar is also listed on
+the index page. Creating a tournament itself is also cleaner.
+Customization categories are clearly separated and use the correct
+selection or input types for easy use.
+
+## Make it look professional {#professional}
+
+The team decided on a color scheme for Leaguer during this
+sprint. This scheme was applied to every page in the site. Since
+e-sport players often spend hours in front of screens, it was
+important to reduce eye strain by making our interface dark while
+keeping it sleek and modern. We implemented Gravatar in a few more
+spots as well, helping to distinguish between users more easily. he
+default image was changed to give each user a unique avatar even if
+they've not set one. Tournament creation and listing also received
+tune ups, with images listed with each tournament to help display its
+game type and a better creation page when creating a tournament.
+
+## Expand Peer Evaluation {#peer-expansion}
+
+We created a scoring modules for users to select the preferred scoring
+method and preferred peer evaluation for users to choose from when
+creating a tournament. The peer evaluation modules calculate the
+score correctly and grab the statistics from the submission forms. The
+skeletons for three such scoring methods namely, winnerTakesAll,
+FibonacciPeerWithBlowout, MarginalPeer, have been created. For the
+MarginalPeer we do not have a view but we do have the methods that
+would calculate the score provided the stats are in the database. For
+WinnerTakesAll and FibonacciWithPeerBlowout we do have views and data
+being collected from the interface and used to calculate score.
+
+## Private Messages {#priv-messages}
+
+Private Messsaging in Project Leaguer is possible between two
+registered users. Project Leaguer uses the gem 'Mailboxer' to achieve
+private messaging. A user is able to interact with the private
+messaging system by clicking on the "Messages" located in the header
+toolbar at the top of every page. This results in the index page,
+which lists all unread and read conversations. You can then click on a
+conversation to view all of its messages and from there you can also
+reply. Creating a new message is as simple as: click the "start a new
+conversation", list the user you wish to pm with, write the
+conversation's subject, and write the message itself.
+
+## Alerts {#alerts}
+
+The alerts system was implemented with the help of the 'Mailboxer' gem
+which is the same as the private message system. The Alert system was
+made available to anyone who had permissions to create an alert and
+all users were notified when an alert was created with a live update,
+a pop up notification which redirects to the list of alerts, in the
+navigation bar of the recieving users. The alerts icon appeared only
+when there is a new alert.
+
+# Implemented but not working well
+
+## Expand Peer Evaluation {#peer-expansion}
+
+We created scoring modules for users to select the preferred scoring
+method, including options for peer review, during tournament
+creation. We created three scoring modules: winnerTakesAll,
+FibonacciPeerWithBlowout, and MarginalPeer, two of which work. Since
+winnerTakesAll and FibonacciPeerWithBlowout demonstrated the extremes,
+the testing of MarginalPeer was considered low priority. As a whole
+the scoring modules' interface, outlined in the 4S-Module README for
+scoring was designed much better than than our implementations were
+able to show off by the end of the sprint.
+
+## Remote Game UserNames {#remote_user}
+
+Project Leaguer stores for each user and game-type a reference to a
+remote username. This allows a user to register her accounts with the
+system and for API requests to be completed for a registered
+game-type. The interface for this was only partially completed, and
+being integrated into a player's profile page directly, it only
+allowed registration of League of Legends remote usernames.
+
+## Project Leaguer Logo {#logo}
+
+While a suitable logo was created, it was deemed too unprofessional
+for use by the project at this time. The search for a more amicable
+logo remains underway.
+
+## Tournament preference interface {#tourn-prefer}
+
+Tournament Settings are handled correctly and securely, the permission
+system is robust enough to handle custom preferences, the database
+structure exists to handle them, and even the icons for adding them
+were created, however, the interface for adding them was deemed low
+priority for this sprint in comparison to the lib modules and
+permissions overhauls.
+
+# Not implemented {#success}
+
+We implemented everything we planned to, though much of it was not
+working in time for the demonstration on Tuesday.
+
+# How to improve {#improve}
+
+1. In this sprint our primary mistake was in planning. We were too
+ nonspecific in deciding what to get done and accepted too many
+ tasks as essential. We should have scaled down our efforts and
+ focused on only the most essential tasks. In the future, more time
+ will be spent on designing and planning sprints and dividing
+ workload.
+
+2. Also because of last-minute alterations and refactors, nearly
+ EVERYTHING that could have gone wrong in our presentation went
+ wrong (the wifi connectivity dropped, our presentation server on
+ demo.projectleaguer.net wasn't updating, even Andrew's window
+ manager segfaulted). Much of this could have been fixed if we
+ simply a little better prepared and had frozen our codebase a
+ specified time prior to the presentation. Realistically, things
+ would have worked phenomenally better had we another few hours to
+ prepare for the presentation. In the future when presenting to
+ potential users or stakeholders we will be sure to have a practiced
+ presentation to match the polished codebase which will then be able
+ to speak for itself.
+
+3. We can better plan our project's flow and layout. We refactored a
+ lot of code in this sprint because different methods didn't work
+ together as we thought they would. We spent a lot of time
+ reworking things that should have already been complete simply
+ because of incomptability issues; the transitions between steps in
+ our flow didn't function as we intended. Moving forward, we have
+ more time to ensure that components work together properly and are
+ tested in a more comprehensive manner.
diff --git a/doc/Sprint3.md b/doc/Sprint3.md
new file mode 100644
index 0000000..31f505e
--- /dev/null
+++ b/doc/Sprint3.md
@@ -0,0 +1,80 @@
+---
+title: "Team 6 - Project Leaguer: Sprint 3"
+author: [ Nathaniel Foy, Guntas Grewal, Tomer Kimia, Andrew Murrell, Luke Shumaker, Davis Webb ]
+---
+
+# User Stories
+
+1) As a user, I would like the web interface to look more professional and complete.
+
+2) As an admin, I would like to have an email verification system for a more secure
+ and spam free enviroment.
+
+3) As a user, I would like intelligent error handling (e.g. 404 and 403 redirection).
+
+4) As an admin, I would like to send alerts to users.
+
+5) As a user, I would like to be able to send private messages.
+
+6) As a user, I would like a working search utility.
+
+7) As a host or player, I would like customizable settings for peer evaluation and
+ scoring.
+
+8) As a host, I would like to have multiple tournament structures and types for
+ pairing and running tournaments. (e.g. Round Robin team pairings).
+
+9) As a host, I would like to have an interface for adding tournament-specific
+ preferences (e.g. Capture the Teemo).
+
+10) As a user, I would like to view and create brackets.
+
+11) As a user, I would like the Riot API to be asynchronously polled in the
+ background so League of Legends tournaments proceed automatically.
+
+12) As a player, I would like a way to enter my usernames for several different
+ remote games.
+
+
+#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.
+
++---------------------------------------------------------+------+------------+----+
+| Task Description | Size | Person | US |
++=========================================================+======+============+====+
+| Intelligent Error Handling (404 redirection) | 3 | Andrew | 3 |
++---------------------------------------------------------+------+------------+----+
+| Search | 5 | Tomer | 6 |
++---------------------------------------------------------+------+------------+----+
+| Remote Game UserNames | 3 | Davis | 12 |
++---------------------------------------------------------+------+------------+----+
+| Email verification | 8 | Luke | 2 |
++---------------------------------------------------------+------+------------+----+
+| Alternate Scoring and pairing methods | 5 | G, A, D | 7,8|
++---------------------------------------------------------+------+------------+----+
+| Tournament preference interace | 3 | Andrew | 9 |
++---------------------------------------------------------+------+------------+----+
+| More types of seeded settings | 2 | Andrew | 9 |
++---------------------------------------------------------+------+------------+----+
+| Asynchronous Riot Pulls | 5 | Nathaniel | 11 |
++---------------------------------------------------------+------+------------+----+
+| Map out brackets scaffolding | 5 | Tomer | 10 |
++---------------------------------------------------------+------+------------+----+
+| Create braket creation and submission gui | 3 | Tomer | 10 |
++---------------------------------------------------------+------+------------+----+
+| General Interface Cleanups | 2 | Tomer | 1 |
++---------------------------------------------------------+------+------------+----+
+| Make it look professional | 3 | All | 1 |
++---------------------------------------------------------+------+------------+----+
+| Expand Peer Evaluation | 3 | G, A, D | 7 |
++---------------------------------------------------------+------+------------+----+
+| Private Messages | 5 | N, L | 5 |
++---------------------------------------------------------+------+------------+----+
+| Alerts | 3 | Guntas | 4 |
++---------------------------------------------------------+------+------------+----+
+| Project Leaguer Logo | spike| G, D | 1 |
++---------------------------------------------------------+------+------------+----+
diff --git a/doc/sprint2Retro.md b/doc/sprint2Retro.md
new file mode 100644
index 0000000..1a40bac
--- /dev/null
+++ b/doc/sprint2Retro.md
@@ -0,0 +1,12 @@
+Riot API
+
+The Riot API allowed us to pull information from the Riot servers for League of Legends
+Tournaments. For sprint 2, we were able to pull the information, but not very efficiently.
+We ran into an issue where we were making too many pull requests for our Riot developer key
+which would gave us some issues.
+
+Anti-Spam
+
+For now, the only anti-spam protection that we have is a captcha at the user creation page.
+Our hopes is to implement an email verification system in order to help further protect
+Project Leaguer from spam.