What is a stateless user interface?
blog.ezyang.com
blog.ezyang.com
I'm not a hugely experienced Haskeller, so I've almost certainly made 'classic mistakes', but as a system it is so unstable that I couldn't really commit to any large projects, which is a shame, because I really, really rate Haskell as a language.
In stepped F#, and although not as nice a language Haskell, the tooling works. It would be great to see this resolved once and for all.
(I know this because they kept following up with me a few times, until I finally got around to giving it a try.)
We need a computer-assisted predicate-oriented language. This will become the only UI we need.
Beautifully succinct and widely applicable. It is a gem, thank you.
- Auto-completion is best when you start with arguments (as opposed to a function or predicate).
Use fish shell
What's tickling my brain at the moment is the idea that these complex apps might be better as languages first, just shipping with thousands of well-organized example scripts that cover all the bread and butter - in the same way that synthesizers moved towards being preset-centric over time, to the point where one of the big features of new VST plugins is the content they ship with and the ease of browsing it.
Let me configure two or more copies of the move tool, one configured for layers and one for selections. Let me give them different icons and let me position it in a custom toolbox.
Don't make me do the equivalent of swapping bits on a multi-bit screwdriver. I'm not a mobile handyman trying to save space and weight in a portable toolbox; I can afford to replicate the handle and shaft for each bit.
Ah, finally found it. You have to click on the little docking triangle on some specific Tool Options dialog for a given tool. It is in this docking-related menu that a command is found to bring up the Tool Options Menu! I think I didn't notice it before because it's totally "off topic" for docking. (Why would a semantically important feature be found under a little docking triangle?) It is this Tool Options Menu which has the preset management commands.
If you right click anywhere on the Tool Options, you get context menu with one-button context menu which says "Tool Options". When you click that button, it just disappears: there you are in Tool Options as before! Right clicking on a Tool Options object would be the obvious place to have the Tool Options Menu. Then the preset stuff would be more discoverable.
If you want this worked on, you should contribute to the project. Not saying you need to learn how to actually code on Gimp, but just to add your voice to the mix.
i can easily see that reducing state implies reducing the number of steps a user takes to solve a problem (since each step implies some state somewhere).
what i can't see is how it implies that we must implement a new feature. this seems to be the real driver behind solving the "revision pinning" problem in the article - the fact that it is preventing state from changing unexpectedly seems to be coincidental based on what the user actually desires. and actually the solution adds more state - pinned version numbers (or repo hashes, or URLs etc...)
personally when approaching these problems i try thinking about things like "what features are needed to solve the user problems?" and "how can the interface for features as simple as possible?". it seems a lot simpler as an approach, more intuitive, and can be extended to be made more useful (e.g. "how do i make feedback as clear as possible?"). some of these questions are very complicated to answer, especially since they might involve things like user's mood or past experiences... i think that just shows that this is a complicated problem space.
minimising statefulness feels sort of "necessary" rather than "sufficient", and only in some cases. i'd be curious if there is any proof or reasoning to show that it has desirable properties beyond the clear connection to reducing needless user interactions.
ps: the idea is that the state is made explicit, so the user knows where and what to diagnose.
The only other environment that manages to achieve this (and better) is smalltalk.
So every action that user can take in the UI has clear correspondence in valid change of the application state.
Also, this would affect composability. If the state of the application of composed of smaller elements, the UI should be composable too.
So just be defining the application state (this perhaps includes edited document in editors), and possible transitions (which is a category), one should get a skeleton of how UI would behave.