Team 254 Presents: Cheesy Arena

Cheesy Arena is an alternative field management system for off-season events, scrimmages, and practices. You saw it in action at Chezy Champs, and now we’re releasing it for all teams to use!

Check out the README, source code, and binaries at https://github.com/Team254/cheesy-arena, and watch a brief video overview here.

Key features for participants and spectators:

  • Minimally invasive overlays
  • No-lag goal/pedestal lighting and realtime scoring
  • Team stack lights and sevent-segment display are replaced by an LCD screen, which shows team info before the match and the realtime scores and timer during the match
  • Smooth-scrolling rankings display
  • Direct publishing of schedule, results, and rankings to The Blue Alliance

Key features for scorekeepers:

  • Runs on Windows, Mac OS X, and Linux
  • No install prerequisites
  • No “pre-start” – hardware is configured automatically and in the background
  • Flexible and quick match schedule generation
  • Streamlined realtime score entry
  • Reports, results, and logs can be viewed from any computer

Questions, comments, bug reports, or feature requests? Post here or file an issue on GitHub.

1 Like

This is amazing.

That is all I have to say.

1 Like

Incredible.

Will be there support for changing the game? Say if a person wants to use Cheesy Arena but its before the ‘official’ of version of Cheesy Arena is released, will we be be able to edit the templates and have the overlays auto generated?

As far as I can decipher from the code, the game specific scoring system (the truss and catch) are hardcoded into the audience template file.

We plan on using this at CCC later this month. Can’t wait!

Yes, the game is hardcoded. My intention is to release a new version for every game, ideally in advance of any events that want to use it.

With modern source control, it’s way easier to branch and have multiple releases that you can cherry-pick improvements to, than it is to templatize the system to work with any game.

Awesome. Plain awesome. Thanks!

This is amazing (sounds like a broken record, but totally deserved).

Question. When you say “Automatic download of recent accomplishments (needs better TBA API)” in the TODO page, what enhancements are you looking for in the TBA API? I’d be willing to help add them.

You must spread some Reputation around before giving it to Pat Fairbank again.

Awesome work Pat.

1 Like

Thanks for offering to help. The issue is that there isn’t really an easy way to get the awards for all of the teams attending an event. My understanding is that I’d have to:

  1. Make an Event Request to get the list of teams for my event
  2. For each team, make one or more Team Events Requests to find out what events they went to recently
  3. For each team and event, make a Team Event Awards Request to get the list of awards the team won

That’s probably well over 100 requests for a medium-sized event.

What I want to end up with is a list of awards won by the teams attending my event in the current season and the previous, grouped by team. To get this, I’d prefer to make a number of API calls that is O(1) with respect to the number of teams and the events they have each gone to.

Does that make sense?

Thank you for releasing this! Very happy to try this out.

Very impressive! Huge thank you to everyone involved. Great to see it’s written in Go as well :smiley:

Yeah, that makes sense. I’ll add it to my TBA todo list

Given my boss is making a push to use Go in our code base…

Pat, how’d you like implementing a real web service in Go? Any things you found worked well and things that didn’t?

This is absolutely fantastic. I’m not a programmer by any means, but I can tell that a ton of effort went into this, and even just from the CC webcast, it looked incredible.

Thank you for working so hard on this and for sharing it with the community. I really hope some of the pieces of Cheesy Arena transition into meaningful changes to the systems used in regulation competition.

It seems that every couple years you earn a giant cookie. Great work, Pat!

-Nick

It was an amazing experience. Go is very well suited to this sort of thing – HTTP handling is built in and easy, network communication is a breeze, and performance is awesome (Cheesy Arena uses only 1-2% of the CPU even when running a match). Built-in unit testing and single-binary deployment are also huge plusses.

This was the first project I’ve used Go for so I struggled a lot with the non-object-orientedness and how to organize the code and minimize repetition. The final result isn’t ideal and I need to keep working on it – all the code is in the same “main” package, there’s a lot of shared global variables, and the WebSocket handlers are more repetitive than I’d like.

Overall, though, I’d highly recommend Go for any web service work.

According to the “What programmers say vs. what they mean” translation table below, I believe the expression you are looking for is “It’s a ‘Complex structure’”.

All kidding aside, we look forward to using Cheesy Arena at CCC next weekend. Let’s hope we can use it as skillfully as it was used at CC.

Thanks again Pat, and your team, for making this and sharing it!

4 Likes

Wow, looks great! I have one question: What is the protocol for feeding video to the audience display? This is my team’s first time setting up any kind of fms software and we are unaware.

Thanks!

In addition, is there a document that outlines all the hardware used at Chezy Champs? How many computers, router, etc.?

Thanks again for all the hard work.