Challenge Overview
Project Overview
TopCoder is implementing a Web-based Arena by using Web Socket protocol, AngularJS Framework (http://angularjs.org, http://docs.angularjs.org/guide) and Bootstrap 3 (http://getbootstrap.com/getting-started).
The frontend application is using AngularJS Framework (http://angularjs.org, http://docs.angularjs.org/guide) and Bootstrap 3 (http://getbootstrap.com/getting-started), and using web socket protocol to exchange data with backend web socket listener.
The backend web socket listener is ready for exchanging messages over web socket protocol.
Competition Task Overview
We have implemented the Login and Logout functionality, the code can be found at cloudspokes/arena-web.
For this contest, we are going to implement the contest registration process and enter contest flow
Contest Registration Process
Similar like in arena applet, when the registration phase for a SRM is open, member can register for the SRM. When clicking the register button, a popup dialog will be displayed to show the Registration Terms, if I Agree button is clicked, it will register to the current logon user, and show success for failed message.
We'd like to mimic same process.
Since the Active Contests Widget is not ready yet, you can hardcode the Register button with a fixed round id for testing.
When Register button is clicked, a com.topcoder.netCommon.contestantMessages.request.RegisterInfoRequest will be sent.
a com.topcoder.netCommon.contestantMessages.response.PopUpGenericResponse will be returned, like following
(com.topcoder.netCommon.contestantMessages.response.PopUpGenericResponse) [title = Event Registration, msg = Test SRM - Test SRM Round
starts at 2014-04-07 09:40:00.0 and is open for registration. Agree to the terms below to register.
Registration Terms:
Test Terms
, type1 = 0, type2 = 0, data = [I Agree, I Disagree], surveyQuestions = null, surveyMessage = null, o = 13672, ]
we will show the Registration Terms in the popup similar as the following.
If I Agree button is clicked, it will send com.topcoder.netCommon.contestantMessages.request.RegisterRequest
and for responses, it will return a com.topcoder.netCommon.contestantMessages.response.PopUpGenericResponse, sample data is like
(com.topcoder.netCommon.contestantMessages.response.PopUpGenericResponse) [title = Event Registration, msg = Registration is not open.
, type1 = 2, type2 = 1, data = null, surveyQuestions = null, surveyMessage = null, o = null, ]
(com.topcoder.netCommon.contestantMessages.response.PopUpGenericResponse) [title = Event Registration, msg = You have successfully reg
istered for the match., type1 = 2, type2 = 1, data = null, surveyQuestions = null, surveyMessage = null, o = null, ]
For verification, you should consider different cases when registering, like before or after registration phase, during registration etc.
You can check the https://github.com/cloudspokes/app/blob/master/src/main/com/topcoder/server/processor/Processor.java, registerInfo and register methods for general process flow.
Enter Contest
After registration phase, but before coding phase, a room assign program will be run to assign registrants with rooms, an com.topcoder.netCommon.contestantMessages.response.EnableRoundResponse will be recieved.
after that, members can enter into SRM to get himself/herself prepared. Following requests needs to be sent, after clicking the Enter button.
- com.topcoder.netCommon.contestantMessages.request.MoveRequest
- com.topcoder.netCommon.contestantMessages.request.EnterRequest
- com.topcoder.netCommon.contestantMessages.request.EnterRoundRequest
After that, user will be moved to the contest page.
Where to setup the Arena Web
You are expected to have your own environment to setup web arena, Linux environment is perferred.
for backend, an Arena VM will be allocated to each competitor, to setup SRM contests datas.
Winner Responsibility
Winner will be responsible to:
1. Merge with the UI, it will be ready in final fix phase.
2. Create pull request in final fix phase for merging.
About Code Base
For the code under /home/apps/dev directory, some are hosted in internal svn repositories, some are hosted in private repositories in github.
You can check Source Code Management For TopCoder Competition Engine - TopCoder Wiki
For SVN Access, please send request to support@topcoder.com, For github access, please post your github account in forum to ask PM to grant you access.
Arena VMBefore asking your own VM, you need to have a public key on your profile before asking for the VM.
You can find more details on how to generate a key http://apps.topcoder.com/wiki/display/projects/Generate+SSH+Key and how to connect using it http://apps.topcoder.com/wiki/display/projects/Connect+Using+SSH+Key.
To use the Arena VM, please follow http://apps.topcoder.com/wiki/display/docs/Competition+Engine+VM+Setup
Currently, we moved several main projects to github, please check http://apps.topcoder.com/wiki/display/~fireice/Source+Code+Management+For+TopCoder+Competition+Engine
If you want to have local access to github, please create your own github account, and ask access in forum.
Specific HTML/CSS/JavaScript Requirements:
HTML/CSS Requirements:
- Your HTML code must be valid HTML5 and follow best practices
- Validate your code - reviewers may accept minor validation errors, but please comment your reason for any validation errors. Use the validators listed in the scorecard.
- Use CSS to space out objects, not clear/transparent images (GIFs or PNGs) and use proper structural CSS to layout your page. Only use table tags for tables of data/information and not for page layout.
- No inline CSS styles - all styles must be placed in an external style-sheet.
- Use semantically correct tags - use H tags for headers, etc. Use strong and em tags instead of bold and italic tags.
- Element and Attribute names should be in lowercase and use a "-" or camel naming to separate multiple-word classes (i.e.. "main-content", or "mainContent)
- Label all CSS, JavaScript, or HTML hacks with explanations so others will understand.
- Your code must render properly in all browsers listed in the scorecard in both Mac and PC environments.
JavaScript Requirements:
- jQuery
- AngularJS
- All custom javascript (written by the competitors) must pass jslint checks
Browsers Requirements:
- IE10
- IE11
- Latest Safari
- Latest Firefox
- Latest Chrome
Final Submission Guidelines
Submission Deliverables
Below is an overview of the deliverables:
- Code Changes for the solution, please include the svn revision and git commit hash
- A complete and detailed deployment document explaining how to deploy the application including configuration information.
Final Submission
For each member, the final submission should be uploaded to the Online Review Tool.
PROTOTYPE GOALS:
- We need clean documentation of the code. Please create detailed comments for the different HTML5, CSS3 and JavaScript code.
- Please note, we are expecting the HTML5 prototype to work on mobiles.
- Use CSS3 Media Queries to load different styles for each page and don't build different page for different device/layout.
- Remember, all pages should link where possible. Please help us show correct page flow.
- Please use Bootstrap 3 for css.
- Please use AngularJS framework for data binding.
- Please use angular-ui components:
1- ui-bootstrap
2- ui-router (for app structure as a state machine)
3- ui-ace or ui-codemirror (for the code editor)
4- other ui components as needed (date, calendar)
TECHNOLOGY GUIDELINES:
1. HTML5
- Provide comments on the page elements to give clear explanation of code usage. The goal is to help future developers understand the code.
- Please use clean INDENTATION for all HTML code so future developers can follow the code.
- All HTML code naming should not have any conflicts
- Make sure all HTML files pass Validation without Error/Warning.
2. CSS3
- Provide comments on the CSS code, we need CSS comments to give clear explanation of the code usage. The goal is to help future developers understand the code.
- Please use clean INDENTATION for all CSS so future developers can follow the code.
- All CSS naming should not have any conflicts
- Make sure all CSS files pass validation without Error/Warning.
3. JAVASCRIPT
- Provide comments on the JavaScript code to give clear explanation of the code usage. The goal is to help future developers understand the code and know what needs to be developer further.
- Please use clean INDENTATION for all JavaScript code so future developers can follow the code.
4. ANGULAR JS
- Angular models are plain old JavaScript objects. Use JSON objects for data binding with view.
- Data-binding is an automatic way of updating the view whenever the model changes, as well as updating the model whenever the view changes.
- Controllers are the behavior behind the DOM elements. AngularJS lets you express the behavior in a clean readable form.
- Use AngularJS Framework (http://angularjs.org, http://docs.angularjs.org/guide) to populate JSON data.
5. IMAGES
- For mobile development, images should be properly compressed while still having good visual quality.
- If possible, using background color properties, instead of repetition usage of background based image.
- Use sprites technique for the image slicing. Page reference