👨🏼💻 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