Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
mdrxy committed Jul 12, 2024
1 parent 26b8d85 commit bcd861c
Showing 1 changed file with 32 additions and 24 deletions.
56 changes: 32 additions & 24 deletions README.md
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)
Expand All @@ -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:
Expand All @@ -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

0 comments on commit bcd861c

Please sign in to comment.