diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/Sprint1-Retrospective.md | 220 | ||||
-rw-r--r-- | doc/Sprint2-Retrospective.md | 215 | ||||
-rw-r--r-- | doc/Sprint2.md | 103 | ||||
-rw-r--r-- | doc/Sprint3-Retrospective.md | 291 | ||||
-rw-r--r-- | doc/Sprint3.md | 80 | ||||
-rw-r--r-- | doc/sprint2Retro.md | 12 |
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.
|