Git Product home page Git Product logo

wbor-studio-dashboard's Introduction

WBOR's On-Air-Studio Dashboard

  • An in-studio dashboard for WBOR 91.1 FM, Bowdoin College's student-run radio station.
  • Runs on a little CRT monitor in the on-air studio. New features added every week!
  • Want to contribute? Get in touch here.

Core Dependencies

  • MacOS: 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)
  • MacOS: 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

Or with logging:

  • 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 (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
  • Technical:

    • 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)
    • Abstract the main loop out, so that just some data and fns are passed into it
    • Eventually, avoid all possibilities of panics (so all assertions and unwraps should be gone)
    • Maybe draw rounded rectangles with sdl_gfx later on
    • Render a text drop shadow
    • 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
    • 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?
  • Fun ideas:

    • Run the dashboard on a PVM, or an original iMac, eventually?
    • Maybe give a retro theme to everything
    • Some little Mario-type character running around the edges of the screen (like 'That Editor' by Bisqwit)
    • Different themes per each dashboard setup: wooden, garden, neon retro, frutiger aero, etc.
      • Fall: leaves + drifting clouds over the screen
      • 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

wbor-studio-dashboard's People

Contributors

caspiana1 avatar mdrxy avatar

Stargazers

PeWe79 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.