RIOT
RIOT copied to clipboard
tools: Export RDF data about features and boards
Contribution description
Building on https://github.com/RIOT-OS/RIOT/pull/20366, this generates two RDF data sets:
- A semantically accessible version of the features with their hierarchical classification. This can be visualized eg. on https://skos-play.sparna.fr/play/upload
- A list of features provided by each board compatible with the above.
Testing procedure
TBD. So far, this is experimental only.
Once this builds successfully (tooling updates required so we can install Python dependencies), the produced documentation will contain a page that shows the large feature matrix. On the long run, I think we'll need to slim that down, or provide a more interactive tool for it. (Anyone with web development skills around?)
Issues/PRs references
Builds on https://github.com/RIOT-OS/RIOT/pull/20366
Next steps
To be useful, the two RDF outputs should be combined into an HTML table before this can be considered for inclusion properly.
An illustrative screenshots of the current state of affairs:
This has a lot of useful data, with some fun preprocessing in RDF space (eg. to turn the bit widths from columns into a readable field), but terrible UX. Suggestions on that front would be highly appreciated.
Murdock results
:heavy_check_mark: PASSED
d6e9c9f59c34583488d2abdd623b8515466f43e6 makefile: Undo murdock's BOARDS override for make doc
Success | Failures | Total | Runtime |
---|---|---|---|
1 | 0 | 1 | 01m:25s |
Artifacts
I'm setting the "skip build test" label because current work is more on the documentation side than on how this may interfere with the build system. In later stages, this will need to be re-enabled.
but terrible UX. Suggestions on that front would be highly appreciated.
For a general overview, I don't think we will get rid of any huge table, maybe it could, however, be rendered as an SVG, heatmap style? For details, I'd say a simple “portfolio” (not sure this is how you would translate “Steckbrief” from German in this case) for each board as a bullet point or description list that we can add to the doc of each board would already be a step up from the current approach.
be rendered as an SVG, heatmap style?
Hovering over a cell could then summarize the row & column indices (which then also of course would be shown at the axes)
I'd love to have the portfolio. Do you happen to know an algorithm that, given a tree of identifiers and boolean properties at the leaves, finds the shortest (or a short) boolean expression that makes use of the node?
For example, for board XY it should say that it supports "all Arduino features except arduino_pwm and arduino_form_factor_foo, cortexm_svc, cortexm_check_addrs, all flash features except rwee, and these individual peripherals features". (Sure needs some natural language generation to turn the boolean expression tree into readable, and add some collapsing, but that's more straightforward). I can sure code something up, but that sounds like a problem that has been solved over and over already (and is easy once you know the name). This portfolio thing would work on both axes: Likewise, the portfolio of feature periph_pwm would say "All Atmel boards, all NXP except this-and-that" etc (but would be more sensitive to providing the right tree(s?) to group the boards by).
I can play around with the heatmap idea, but that'll either become a huge SVG thing (essentially every pixel spelled out as a rect with its own tool tip) or will be more on the JS heavy side. Maybe that can be combined with collapsing and expanding the table -- I originally had in mind that when you collapse (say) a group of boards, the cell would give a yellow "~" if it contains both yes and no cells, but maybe it can also just show a small heat map of its own, with the full heat map just being the result of collapsing the table into a 1x1 table.
I'd love to have the portfolio. Do you happen to know an algorithm that, given a tree of identifiers and boolean properties at the leaves, finds the shortest (or a short) boolean expression that makes use of the node?
This sounds way more complicated than what I had in mind. I was thinking something like this
Supported features
- Arduino features:
arduino_gpio
arduino_spi
- ...
- CPU features:
cortexm_mpu
- ...
Shortly thinking a bit more about the “shortest boolean expression” thing a bit more: I don't think I like it... It assumes that a user knows what, e.g., “all arduino” features are, while a list would explicitly spell out what is supported.
Ping?