Discoverability in API design

There are a handful of questions a user will (implicitly) ask when using your API:

  1. What actions can I do against this endpoint?
  2. How do I find the URLs for those actions?
  3. What information do I need to provide in order to perform this action?
  4. What permission do I need in order to perform this action.

Answering these questions can be automated. The user, and the tools they use, can discover the answers by working with the system. That is what I mean when I use the word “Discoverability.”

We missed some opportunities to answer these questions when we designed the APIs for Keystone OpenStack. I’d like to talk about how to improve on what we did there.

Continue reading

Root versus groups

If you lock down everything, you either need to hand out keys, or plan on doing everything yourself, and getting overwhelmed.

Probably the single most power ful tool in Linux land to keep people from having to be “root” is the group concept. For example, if I want people to run Docker containers, they need to be able to talk to the Docker socket. The root user can do this by virtue of its global access. However, the more limited access approach is to add a user to the docker group.

Continue reading

Fixing Playback in Musecore on Fedora 35

Recently, the playback on Musescore became distorted. It was sped up, the notes were dissonant (no that is not my writing!) and they seemed to crackle and pop.

When both systems I have exhibited the same problem, I knew it was an upgrade issue, and not my hardware.

This phenomenon seems to have occurred a few times over the years, and I tried many of the recommended fixes. What finally worked was changing the output from PulseAudio to Jack.

Continue reading