Git Product home page Git Product logo

sledge's Introduction

Sledge 2.0

HackRU's Submission and Judging Platform

Test and Deploy Dev Server Test and Deploy Prod Server

Development

For all developers, take a look at our Wiki.

Sledge is currently being completely rewritten from scratch, so development is happening rapidly and changes are constantly being made to the codebase. And if you are new, welcome! We have a great team and a wealth of information for you. To get started, take a look at the First Time Setup page on our Wiki.

Other

  • You can view the code for the final release of Sledge v1 here.

sledge's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

sledge's Issues

Organize apps

App components are different than other components in that they are the toplevel component on the page. This does not really justify them being separated out as they are, especially now that Sledge is a singleton and no longer managed by the App component.

It also doesn't really make sense to prevent JSX from being used. This PR should also change the extension to tsx.

Some code isn't readable

A lot of code was written quickly to get ready for HackRU and should be cleaned up before architects have to deal with it.

Add judging analytics

Create a page modeled after src/client/apps/OverallRatingsApp.tsx called JudgingAnalysis.tsx. You should use the recharts library to display:

  • A bar chart displaying for each judge their total number of hacks judged
  • A histogram representing the distribution of the total number of hacks judged by each judge

Feel free to adjust details to your taste or comment on this issue with any questions/concerns.

Give backround color to selected submissions in Ranking UI

When ranking submissions, give a background color to submissions that have been ranked.

This will involved editing the src/client/components/RankingForm.tsx and src/client/global.scss.

The following SQL can be used to initialize a ranking assignment after schema.sql has been run.

BEGIN;
INSERT INTO Track(id, name) VALUES(1, "Default Track");
INSERT INTO Judge(id, name) VALUES(1, "Default Judge");
INSERT INTO Prize(id, name) VALUES(1, "Default Prize");
INSERT INTO Submission(id, name, trackId, location, active) VALUES(1, "Hack 1", 1, 1, 1);
INSERT INTO Submission(id, name, trackId, location, active) VALUES(2, "Hack 2", 1, 2, 1);
INSERT INTO Submission(id, name, trackId, location, active) VALUES(3, "Hack 3", 1, 3, 1);
INSERT INTO Submission(id, name, trackId, location, active) VALUES(4, "Hack 4", 1, 4, 1);
INSERT INTO Submission(id, name, trackId, location, active) VALUES(5, "Hack 5", 1, 5, 1);
INSERT INTO Assignment(id, judgeId, priority, type, active) VALUES(1, 1, 1, 2, 1);
INSERT INTO RankingAssignment(id, assignmentId, prizeId) VALUES(1, 1, 1);
INSERT INTO Ranking(rankingAssignmentId, submissionId) VALUES(1, 1);
INSERT INTO Ranking(rankingAssignmentId, submissionId) VALUES(1, 2);
INSERT INTO Ranking(rankingAssignmentId, submissionId) VALUES(1, 3);
INSERT INTO Ranking(rankingAssignmentId, submissionId) VALUES(1, 4);
INSERT INTO Ranking(rankingAssignmentId, submissionId) VALUES(1, 5);
UPDATE Status SET phase=2;
COMMIT;

Streamline import process

Right now, the process to import from Devpost is a bit manual and esoteric. We should move toward automating this better (more details needed).

Add judging timer

Modify src/client/apps/JudgeApp.ts to display a button titled "Start Judging" when loadAssignment is called. When clicked, the button should display the usual assignment displayed by loadAssignment, but it should also display and start a timer. When the judge is finished with the assignment, the timer should be stopped.

The JSX for the button and timer can be added in src/client/components/JudgePage.tsx.


For the server to monitor each judge's timer, it will have to be notified of when the timers start and stop. Therefore, two new requests need to be implemented: StartTimerRequest.ts and StopTimerRequest.ts. These can be modeled after any request in src/server, such as src/server/GetObjectsRequest.ts. These new timer requests will have to modify data in the database for each judge, so I will help out with this.

Finally, for the admin to view the timers, src/client/components/AdminPage.tsx and src/server/GetJudgesRequest.js will have to be modified.


There is a lot to do, so this may feel overwhelming. I would start with the first section above, and before working on the new requests, I would just declare and call empty methods where they will be sent (e.g., sendStartTimerRequest and sendStopTimerRequest). That way, you will have all the functionality visible by the judges done.

Add tests to DoubleEndedQueue

Add tests to ensure correct behavior of the class in src/shared/DoubleEndedQueue.ts. You should create a file src/shared/DoubleEndedQueue.test.ts similar to other test files like PrizeBiasMatrix.test.ts. Open an issue if you find any bugs.

Add User Documentation

While it's really easy to get the server to start, it's a little unclear what to do after the server runs.

May be have an index page that explains where to go?

Don't allow updates to the elapsed time if editing scores

Currently, the elapsed time value is submitted in submitrating/rankingassignment in JudgeApp.ts. This is called whenever the submit button is pressed on the Judging Page. Therefore, if a judge goes back and updates a score they gave to a particular hack, the old elapsed time value will be updated in the database. We want to make sure that that doesn't happen.

README.md

Looks like you are missing a couple things from the template:

  • Examples
  • ToDo's
  • Language Used
  • Style Guide

Reduce the likelihood of ties in overall

Overall scoring tends to result in very close numeric ratings for the top hacks. There's a few features we should implement to mitigate this:

  • Comparative Ratings for Overall
  • Focus judges on highly rated submissions

Create page to track judge progress

Perhaps on the same page as #18, allow judge progress to be monitored for purposes such as determining which judges are going (too) slowly.

A timer, as proposed—though locally only—in #42, could be used.

Build process is a pain

Right now the build process leaves a lot to be desired. We should be making better use of gulp, project references and our build systems. The init.js nonsense is really a massive pain, but that probably won't go away anytime soon. I suspect some of the loading issues during f18 was due to this.

As of now there's no way to minimize javascript/css or switch between debug and deploy builds.

slack table channel creation scripts

since we have an online event, judges wont be able to walk up to tables and ask people questions. in lieu of that, we're going to have table channels in slack where judges can ask a hackers questions, which will correspond to the table number assigned in devpost.

we need some one to create a script that uses the slack api and creates N slack channels named "judging table n". you can test it out by using your own test slack workspace slack documentation

Create page to analyze overall scores

I would like to create an /analyze page providing various ways of looking at the scoring data to choose a winner. This would use the GetFullScoresRequest to get all the data and display them in various graphs or tables that can be tabbed through. To start, I would like graphs and charts to show, by location, the average overall scores.

I want to provide some sort of judge normalization before averaging, and give users the option of which normalization to use with the "raw average" being the default. Some ideas are "Simple Normalize" or divide by the judge's average score, "Average StdDev", or average standard deviations from the judge's mean scores and "Linear Normalized" whereas the judge's highest ranked gets a 1, lowest ranked a 0 and in between are spread out within that range. Normalization is still low priority, but I don't think this would be too hard to implement.

For data visualization we should implement some sort of D3.js compatibility layer, but for now BillboardJS + react-billboardjs should be fine.

Priority is getting bar chart for average rating scores.

Replace judge and admin synchronization system with request system

Through the use of SynchronizeGlobal and SynchronizeJudge the Sledge server shares the necessary data between the client and server.

This works fine for SynchronizeGlobal since this data rarely changes and will often be accessed. Since this information rarely changes (at least when many are connected to the server), so generating a blob representing all the data and sending to all clients each change is not a big deal.

For admins and judges however, this information changes fairly often.

What we need is to:

  • Remove admin sync functionality from SynchronizeJudge
  • Replace admin sync functionality with its own events
  • Remove SynchronizeJudge and related events

The functionality that replaces SynchronizeJudge will depend on decisions made in #13

Create and test function to calculate average scores from response data

Create and test the calculateAverages function in src/client/Statistics.ts. The function has been documented with a description.

The description for GetFullScoresResponseData is in src/shared/GetFullScoresRequestTypes.ts. You should go through the assignments array and consider only assignments where type===ASSIGNMENT_TYPE_RATING and active===0. The rating property should be in the range 0 to 1.

After, create a file Statistics.test.ts with a few test cases to show it works correctly. Watch out for floating point approximation errors in testing.

Static submission page

Render static page containing text fields and dropdowns used by teams to submit.
Deep: Track dropdown and Links
Jason: Descriptions, name, Technology stack

Add link to devpost on project card

right now we import the names of projects and table numbers from dev post and i think the summaries too, however for the online hackathon we may need a few extra things since the judges wont be in person. We definitely need to also add a link to see the project on devpost, since the hackers will be required to also put a demo video on devpost for judges to watch.

Other things may be interesting to add but this is the main thing I'm looking for.

add/audit automated testing and CI

add back some tests with a testing framework like jest and add in travis ci to make sure people can't commit buggy code on pull requests.

also eric I may be confused, so please be gentle.

Local timer for judging submissions

(suggested at demo)

We should have a timer on the screen whenever the judge is scoring a submission, so they do not run over their time. This can be local (for instance, it's fine if it resets on refresh).

The time to score a submission should be configurable somehow.

Redesign the UI: Landing Page

Currently the UI for sledge is extremely bare bones and does not look appealing. The admin page can stay as it is for now but the pages that judges view has to be redesigned.

Create category endpoints

These are under /admin route

  • POST /admin/category/create
  • DELETE /admin/category/delete
  • PATCH /admin/category/:categoryID
  • GET /admin/category
  • GET /admin/category/:categoryID

No deadline for this!

Add login functionality

We need a way for judges to login and prove that they are judges. The plan is to have a login page where judges can select who they are and enter a numeric code (like TOTP) given to them by an admin. If they enter the correct code they receive a secret token (stored in localstorage) which will be used by judge.html to log them in.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.