Survivor: Northeastern is a club at Northeastern that conducts an on-campus season of CBS's TV show "Survivor". I played in season 3 of this amazing club, and have been helping produce the show for others ever since.
This golang application aims to aid in collecting player weekly schedules and calculating the best time for tribals, challenges, etc.
I've been interested in learning go for quite some time. I decided to start this project with the challenge of using nothing but golang for the entire application. No external database, no third-party libraries - just what the language allows for and natively supports.
I wanted this project to be a holistic experience of golang, so for persistent data storage I tried to stay away from traditional method. I decided upon a simple file storage system.
All player data is stored in individual files titled {{player_name}}.survive
.
The contents include seven 16-bit, 4-character hex-encoded numbers separated by a colon.
Each bit represents a half-hour increment, and each block indicated a day of the week (Sunday - 0, Saturday - 6).
Historical availability is stored on previous lines. The "current" availability
is on the last line of the file.
0:0:0:0:0:0:0 # Open availability
200:0:0:0:0:0:0
200:ffff:0:0:0:0:0 # "Fully booked" on Monday
200:100:100:0:0:0:0
ffff:ffff:ffff:ffff:ffff:ffff:ffff # Indicates NO free time
ffff:467:ffff:ffff:a4b6:ffff:addd # Current Availability program will reference
After compiling the go binary, go build main.go
, starting the application is
as simple as running the produced binary.
The binary will look for a conf
file in the same directory. If found, the game
will initialize itself.
The conf
file is simple a newline-separated list of player names, like so:
Josh
Mike
Mary
Ralph
Upon initialization, the conf file will be renamed to conf.processed
. In addition,
survive files for each player will be initialized. Keep all of these files in the same
directory as the binary, as these files store necessary information to keep the game
persistent.
If all goes well, you will be greeted with a similar looking screen in your web browser
Player can individually interact with their schedules by visiting the homepage
and clicking their name, or visiting http://{{server-root}}/edit/{{player-name}}
The club logistics manager can visit http://{{server-root}}/manage
to see
aggregated player schedules.