It would be nice to have accessible, up-to-date documentation in the wiki. It can be edited by anyone, and you're invited to improve it.
Bug reports are very useful for the development of redsea.
Some guidelines for making good bug reports:
- When creating a new bug report ("issue"), be sure to include basic
information about your system:
- Operating system version
- CPU architecture
redsea --version
- Did you compile the libraries (liquid-dsp, sndfile) yourself or are they from package repositories?
- If there is an error message, please include the error message verbatim in the bug report. If it is very long, consider putting it in a file or gist instead.
- If the problem only appears with some input signal it would be very helpful to have a copy of this signal for testing. If it's cumbersome to upload then don't worry, we can find ways around it.
- Be sure to check back with GitHub afterwards to see if I've asked any clarifying questions. I may not have access to an environment similar to yours and can't necessarily reproduce the bug myself, and that's why I may have many questions at first.
- If you fixed the problem yourself, it would be helpful to hear your solution! It's possible that others will also run into similar problems.
- Please be patient with it; Redsea is a single-maintainer hobby project.
You can directly contribute to the source code via pull requests. We have a CI pipeline in place to ensure that the build works and no basic functionality breaks. So no worries. Our maintainer can help complete the PR as time allows. However, note that this is still a hobby project.
Let's face it, C++ is memory-unsafe and not the easiest language at that. But there are things we can do to make it safer and more usable for us:
- Squashed commits with clear and concise commit messages are preferred. Use force-push to update the PR branch if necessary.
- Since 1.0, we wish to have tests in repo for all new features or bugfixes. The tests
can be unit tests written in Catch2 (see
test/unit.cc
), or they can be end-to-end tests against the CLI executable itself (some Perl examples intest/cli.pl
). Perl is only used for testing; all code should pass Perl::Critic level 3. - Ideally, all test data comes from some actual radio station and the source is cited.
- C++ style is described in
.clang-format
; format-on-save is recommended. - We aim for C++14 compatibility, so unfortunately more modern features can't be used.
- We have some static analysis rules described in
.clang-tidy
. - Keep in mind redsea has a real-time requirement and it might be run on some low-end 32-bit embedded platform. Unfortunately we don't have automated tests for this.
- Try to avoid resorting to manual memory management. We have an address sanitizer in CI but currently no leak checks.
Some design philosophy:
- Each JSON line should somehow correspond to a single RDS group. But this may well change in the future, for any good reason.
- All JSON output should validate successfully against
schema.json
. - Data spread over multiple groups should be withdrawn until fully received, unless
the user specifies the
--show-partial
option. - The hex output should be compatible with RDS Spy, the (unaffiliated) Windows GUI software. (Yes, it's difficult to automate this test)
- GUI features are outside of our scope
- Preferably redsea should not create any files in the file system; instead all output should be via stdout if possible
The project uses semantic versioning.
We have a discussion section on GitHub for questions and brainstorming.