-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
32 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,41 +1,58 @@ | ||
# WBOR's On-Air-Studio Dashboard | ||
|
||
- An in-studio dashboard for [WBOR 91.1 FM](https://wbor.org/), Bowdoin College's student-run radio station. | ||
- Runs on a little CRT monitor in the on-air studio. New features added every week! | ||
- Runs on a little CRT monitor in the on-air studio. New features added (almost) every week! | ||
- Want to contribute? [Get in touch here.](https://wbor.org/contact) | ||
|
||
## Core Dependencies | ||
## Dependencies | ||
|
||
For a quick and easy macOS dependency install, assuming you have [homebrew](https://brew.sh/) installed, run: | ||
|
||
```zsh | ||
brew install rust sdl2 sdl2_image sdl2_ttf | ||
``` | ||
|
||
### [Rust](https://www.rust-lang.org/) | ||
|
||
- MacOS: `brew install rust` | ||
- macOS ([homebrew](https://brew.sh/)): `brew install rust` | ||
- Fedora: `sudo dnf install rust cargo` | ||
- Debian: `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh` (`apt-get` only has an outdated version of the toolchain) | ||
|
||
### [SDL](https://www.libsdl.org/) | ||
|
||
- MacOS: `brew install sdl2 sdl2_image sdl2_ttf` | ||
- macOS ([homebrew](https://brew.sh/)): `brew install sdl2 sdl2_image sdl2_ttf` | ||
- Fedora: `sudo dnf install SDL2-devel SDL2_image-devel SDL2_ttf-devel` | ||
- Debian: `sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev` | ||
|
||
## Build and Run | ||
|
||
- `cargo run --release` | ||
First, make sure you've cloned this repo to your machine via: | ||
|
||
```zsh | ||
git clone https://github.com/WBOR-91-1-FM/wbor-studio-dashboard.git && cd wbor-studio-dashboard | ||
``` | ||
|
||
Next, assuming you've installed the required [dependencies](#dependencies), run: | ||
|
||
Or with logging: | ||
```zsh | ||
cargo run --release | ||
``` | ||
|
||
- `RUST_LOG=wbor-studio-dashboard cargo run --release` | ||
Or, with logging enabled: | ||
|
||
``` | ||
RUST_LOG=wbor-studio-dashboard cargo run --release | ||
``` | ||
|
||
## TODO | ||
|
||
- Features: | ||
- DJ tips popping up now and then (like a video game loading screen) | ||
- Display streaming server online status (determined by whether it pings?) address is: 161.35.248.7 | ||
- User interaction with the dashboard via the [Stream Deck](https://timothycrosley.github.io/streamdeck-ui/) (toggle display elements, scroll through texts, block a text sender, etc.) | ||
- Finish the background image (vary it based on the theme?) | ||
- Show the album history on the bookshelf | ||
- Display streaming server online status (determined by whether it pings?) | ||
|
||
- Technical: | ||
- Make a small window that shows the dashboard uptime (don't use `chrono::Duration`, since that will limit the uptime to some number of weeks) | ||
- Continuous deployment | ||
- When an error happens, make it print a message on screen that says that they should reach out to the tech director, `[email protected]` (make a log of the error on disk too) | ||
- Crop all Spinitron photos 1:1 square | ||
- Maybe put the bounding box definition one layer out (with the parent) | ||
|
@@ -46,15 +63,13 @@ Or with logging: | |
- Set more rendering hints later on, if needed (beyond just the scale quality) | ||
- Figure out how to do pixel-size-independent-rendering (use `sdl_canvas.set_scale` for that?) | ||
- For logging, write the current spin to a file once it updates | ||
- Make a little script on the Pi to clear the message history every 2 weeks - or maybe do it from within the dashboard - checking the date via modulus? | ||
- Use the max durations of Spinitron spins to reduce the number of API calls | ||
- Clear Twilio message history every 2 weeks - or maybe do it from within the dashboard - checking the date via modulus? Ideally through our server. | ||
- Reduce the number of API calls to Spinitron - down the road have our campus messenging server talk with the Pi? | ||
- Maybe make a custom OpenGL renderer (may be more performant). Tricky parts would be text rendering, and keping everything safe. Perhaps Vulkan instead? Or something more general? | ||
- Make some functions const | ||
- Use SDL3 bindings | ||
- Make a small window that shows the dashboard uptime (don't use `chrono::Duration`, since that will limit the uptime to some number of weeks) | ||
- Investigate the occasionally high CPU usage on the Pi (like 300%!) | ||
- Could multiple update rates per window be useful? | ||
- CD to Pi? | ||
- Format all debug types with `<varname>:?` when possible | ||
|
||
- Fun ideas: | ||
|
@@ -66,12 +81,5 @@ Or with logging: | |
- Summer: shining run rays | ||
- Spring: occasional rain with sun | ||
- Winter: snow | ||
- Make Nathan Fielder pop up sometimes (at a random time, for a random amount of time, saying something random, e.g. "Hey. I'm proud of you"). Same with the scary face (make that one window which picks one of those at random times). | ||
- Avoid screen burn-in somehow on non-dynamic parts of the screen (ideas below): | ||
- Shut off at night (or just for a few hours) | ||
- Screensavers | ||
- Layout swap (move screen elements around with a rapid or smooth animation) (do once every 15 minutes or so?) | ||
- Theme swap (instant or gradual) (based on things like weather, season, time of day, holiday, simple dark/light mode for day/night) | ||
- Use a PVM/BVM (they have less burn-in) | ||
|
||
## Troubleshooting | ||
|
||
## Troubleshooting |