# CubeToaster



## Yuxuibbs (Dec 26, 2016)

I have been working on something called CubeToaster for the last few weeks and I would like some help to make it better. Right now, the main thing I need help on is getting a better interface and making it easier to access (which can be solved by moving everything to a website).

*Project:* CubeToaster generates heats and score sheets for competition organizers. Score sheets (for the first round only) are sorted by heat and event so organizers don't need to manually sort them. Number of heats are determined by user input with recommendations based on number of timing stations.

*GitHub: *https://github.com/yuxuibbs/CubeToaster

*What it does right now:*

Input: JSON file from cubingUSA + JSON file generated by the program that the user is supposed to double check and change
Removes everything but name and id from "persons" and initializes heat
Reorganizes the entire JSON so that all the personal data from that person (name, id, and heat) is in the event instead just the competitor ID
Goes straight down the list of competitors for each event and assigns them a heat from 1 to number of heats (calculated based on user input with a default option based on number of timing stations in that stage)
skips making heats for FMC and big BLD because it's not necessary for most competitions (super easy to change if people do need it)

Outputs:
HTML that can be printed as 4 pages per page, sorted by event and heat number
When you try to print the HTML, it automatically does 1 table/score sheet per page
It is up to the user to open the HTML and print it correctly

txt of every competitor and the heats they are in for that competition
JSON file with user input (temporary solution until a proper UI is made)

*Major issues right now:*

Not very portable and very bad UI
ID number is incorrect (easily fixed by having users upload the excel that they would normally upload to cubecomps but that requires adding another library)
*TODO (feel free to make a pull request for these things or anything else you think might be useful):*

Disperse staff evenly throughout the heats
Split code into "make heats" and "make score sheets"
Code cleanup
Take into account psych sheet data
*Additional info for people planning to work on it:*

Test (json) files based on previous competitions are available in the Anonymizer folder
*
Constructive criticism and pull requests are welcome. 

Competition organizers: I wouldn't mind knowing how you make heats for your competitions so that I can try to make the heats more efficient. *


----------



## jfly (Dec 26, 2016)

Yuxuibbs said:


> need users to upload 2 files, select staff members (for use in the next TODO), type in number of heats or number of people in each heat they want (maybe some optional features), and they get the files that they can download for the competition



What are the 2 files you need users to upload?


----------



## Yuxuibbs (Dec 26, 2016)

jfly said:


> What are the 2 files you need users to upload?



JSON from cubingUSA and the workbook thing (xls) that is generated from cubingUSA (just to get the competitorID that will be used in cubecomps which is different from the ID in the cubingUSA JSON)

It could be condensed to just the workbook but that requires changing some code. 

If the input is always going to be from cubingUSA, the xls is always going to do ID based on first name, and cubecomps always assigns ID based on the xls input, then only the JSON is necessary.


----------



## biscuit (Dec 26, 2016)

Yuxuibbs said:


> Competition organizers: I wouldn't mind knowing how you make heats for your competitions so that I can try to make the heats more efficient.



I have a google sheets script that I use to randomly assign heats, then I go in and make some changes based on staff member allocation, and try to split up any similarly sounding names. 

I'll be interested in seeing how this works out. I'm trying to make a live results system, and the next step I had in mind was adding something like this. 

I'd try to steer clear of using the CUSA file. First off, that makes it useless for non-US comps, and as far as I understand (correct me if 'm wrong Jfly) CUSA will be going away soon..


----------



## YTCuber (Dec 29, 2016)

I tried to convert this to a website.
https://github.com/YTCuber/CubeToaster (Javascript/heatGenerator.html)
It accepts the JSON from CubingUSA and the number of timing stations, generates the number of Heats (you can change them using buttons), and generates the scoresheets.
I'm working on importing from cubecomp.de and getting the data using PHP (user only needs to tell the system the competition name).


----------



## Yuxuibbs (Dec 29, 2016)

YTCuber said:


> I tried to convert this to a website.
> https://github.com/YTCuber/CubeToaster (Javascript/heatGenerator.html)
> It accepts the JSON from CubingUSA and the number of timing stations, generates the number of Heats (you can change them using buttons), and generates the scoresheets.
> I'm working on importing from cubecomp.de and getting the data using PHP (user only needs to tell the system the competition name).



Awesome!
It's now available on https://yuxuibbs.github.io/CubeToaster/Javascript/heatGenerator.html
Obviously competitor ID's are still wrong relative to the competitor ID in cubecomps (I think CubingUSA currently does alphabetical by first name but that should change soon when cubecomps uses JSON too)
I'm going to play around with the CSS and stuff.
More ideas (I need to learn some JavaScript first):

Tell users how many competitors are registered for each event (makes it easier to figure out how many people to put in each group)
Let user override competition name (I'm using the competition name that's in the JSON right now)
Somehow incorporate the heat sheet that tells people what heat they are in


----------



## YTCuber (Dec 29, 2016)

Just implemented your ideas, and tried to style it a bit better. https://github.com/YTCuber/CubeToaster


----------

