Skip to content

👨🏼‍💻 Projects

If you are using this material for a course, a project is a good way to put in to practice all of the various tools, methods and concepts we have looked at previously. This section will get into what makes for a good project in either a course context.

This is where you get to play!

You can either write your own proposal, which is hopefully relevant to what you normally work with/are interested in, or you can get some inspiration from the list.

What makes for a good real-time project?

Below you will find a few questions to ask yourself when determining either how to write your own proposal or picking a pre-existing one.

  • Which concepts from the previously seen material do you think are relevant to your project and why?
  • Can the system eventually (end goal) take in sensor data, such as images from a camera or sound from a microphone, and keep a real-time processing rate?
  • Can the system be manipulated by a user through a GUI?
  • Can the system be optimized by preprocessing your data?
  • How do you adapt to your chosen/available platform?
  • Which libraries are available for this problem?
  • How fast can you get to your minimum viable product?
  • Which steps would you take from there and why?
  • How did you determine which parts of your system to optimize?
  • Is there room to add more features to your system?

How to create real time systems

  • Start with a simple prototype.
  • Identify your components.
  • Create your first prototype as a single threaded correct implementation.
  • Start with simple, reproducible data. If you are working with sound, load a single file.
  • Implement testing (preferably automated) to avoid any regressions. Regressions are likely to occur when optimizing.
  • Start ingesting real-time data from a sensor or getting user interaction.
  • Profile and optimize in a loop.
  • Optionally, add more features and optimize.
  • Optionally, if you are using machine learning, is there anything you could do to optmize your model as a preprocessing step?

Components

Given how easy it is to include libraries in Rust projects, Rust has a relatively small standard library. Instead a de-facto standard library emerges through a pseudo-democratic process driven by usage statistics and GitHub stars. A list of these de-facto standard crates can be found on the blessed website.

Additionally, there's a set of overview sites tracking the state of Rust's nascent ecosystem. These have the "Arewe____yet" form. Examples like Arewelearningyet can also be found in AreWeRustYet.

An additional list of libraries and frameworks you might find useful for doing a project -
rayon
ultraviolet
egui
winit
wonnx
tch
burn
cv
time
chrono
hifitime