News for hackers. Stuff that matters.
Re:Command line interfaces are reified UIs by jasode on Friday November 03, 2017 @01:13PM (#15620713)
>There is, after all, no fundamental reason a GUI could not be designed with the goal of reification of interaction in mind; it’s just that it is rarely done in practice.

If we have to search for an underlying reason, it's that most GUI interactions by most end users don't need reification and therefore, that code is not put in.

If the GUI has obvious needs for reification, the programmers account for it. Two examples that come to mind are computer chess games, and software audio workstations.

Many computer users who are comfortable with UNIX command line will nevertheless "move chess pieces" by clicking and dragging the piece from one square to another. However, virtually all chess programs still record the algebraic chessboard notation of each move and the players can see the tally of moves scrolling on the side of the board.

The other example has music producers mixing a song. They will adjust the sliders/faders of volume panning and the software will record their moves. It's known in the trade as "mix automation". When the song is played back, the software makes the sliders mimic the same moves. The automation in "reified" into a time graph[1] such that one can move the nodes around to fine tune the movements more precisely than the fingers did in real time.

As for other GUI applications like typical business data entry screens, etc... most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc do not include a macro recorder in the default event loop. Therefore, to "reify" the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to "record" the button presses into a timeline. Programmers won't do this unless there's a customer need for it. (E.g. Photoshop lets you reify the GUI as "actions" for later playback")

[1] example yellow line graphs the fader or knob changes: http://cdm.link/app/uploads/2014/06/logicmixing-640x399.jpg

Re:Command line interfaces are reified UIs by b0rsuk on Friday November 03, 2017 @07:35PM (#15622973)
Chess:

  *  The interface is typically NOT optimized for keyboard.
Typing E4D5 is not optimized. You need to look at a square in the middle, then look which row it is, and which column it is. I've implemented a better one for a similar game (Jungle). You press a character key to highlight one of your pieces, and the game essentially highlights legal moves by displaying alphanumeric chars on tiles. Instead of 4 keypresses, you have 2. In Chess it could be like this: 1-8 selects a pawn, b/B one of bishops, r/R - rooks, k/K - knights, q - queen, i - king. Then another character depending on what shows up where you want to move.

  *  People who play realtime chess (one example is Kung Fu Chess)do use keyboard
certainly those playing in tournaments.

E4-D5 notation is optimized for recording games, not for playing.

Re:Command line interfaces are reified UIs by hutzlibu on Saturday November 04, 2017 @12:49AM (#15623850)
"E4-D5 notation is optimized for recording games, not for playing"

depends on the type of player. Every serious hobby player can do it that way. They learned it.

But for casual players it is not the way to go, I agree.

Re:Command line interfaces are reified UIs by kybernetikos on Friday November 03, 2017 @01:26PM (#15620800)
Paint.net is another example of an application that reifies its actions with a nice 'history' window that shows the semantic actions that the user has performed and allows you to jump back to earlier points in your history of editing the file. GIMP does something similar, it seems particularly common in image editing programs.
Re:Command line interfaces are reified UIs by SilasX on Friday November 03, 2017 @07:23PM (#15622902)
Ditto for AutoCAD -- I loved seeing how the equivalent CLI command appeared in the log as I was using the GUI to draw.
Re:Command line interfaces are reified UIs by colllectorof on Friday November 03, 2017 @08:18PM (#15623113)
I was thinking about this just a few days ago. This seems like a much better way of teaching people shortcuts than a 20-page cheat-sheet or even "hints" in various menus. No UI clutter, no effort. The program just tells you how to do the same thing in another way. The more you do the "thing", the more likely you are to notice those tips and try out the shortcuts.

I don't think Paint.NET or GIMP do quite what you've described though. They show a history of action, but they don't show commands.

Re:Command line interfaces are reified UIs by diggan on Saturday November 04, 2017 @02:16AM (#15624034)
Now I don't have lots of experience with Blender, but I do remember that Blender when hovering a button shows the Title of the interaction, but also a description, shortcut AND the equivalent python code you can run in the terminal to achieve that action. That's pretty awesome.

Here is a example: https://i.imgur.com/NNFruMx.jpg

Re:Command line interfaces are reified UIs by TeMPOraL on Saturday November 04, 2017 @06:55AM (#15624515)
Related: Emacs does that too. If you invoke a command through M-x that has a keyboard binding available, it will tell you about it in the minibuffer.
Re:Command line interfaces are reified UIs by evancox10 on Friday November 03, 2017 @10:13PM (#15623467)
You also see this in chip design EDA tools, at least the good ones. Not only will they record the equivalent CLI command that affects the "data", but some will also record the commands that solely affect the GUI! (e.g. resize window)
Re:Command line interfaces are reified UIs by seanmcdirmid on Friday November 03, 2017 @10:25PM (#15623499)
That reminds me of more extreme work like Bret Victor’s drawing dynamic visualization demo, where drawing commands are reified and can be manipulated/abstracted in place. I saw Dan Ingals do this with some of his work, but can’t find a link ATM.

https://vimeo.com/66085662

Re:Command line interfaces are reified UIs by int_19h on Friday November 03, 2017 @09:58PM (#15623436)
It's a common technique for document-centric editors in general, because it's usually also the best way to implement multi-step undo. Once you have the steps recorded anyway for that purpose, surfacing them in UI is straightforward.
Re:Command line interfaces are reified UIs by agumonkey on Friday November 03, 2017 @05:54PM (#15622445)
one day people will have DAG based programs where history has even less importance
Re:Command line interfaces are reified UIs by timthelion on Friday November 03, 2017 @06:52PM (#15622753)
I'm curios what you mean by this. I've been working on some software called textgraph [1] (not yet ready for use, and now internally renamed gradesta ) for a couple of years now, so anything with "graph" in it makes my ears perk up.

[1] http://timothy.hobbs.cz/tg/tg.html

Re:Command line interfaces are reified UIs by agumonkey on Friday November 03, 2017 @07:04PM (#15622809)
the paint.net stacked history is similar to what was used in 3D studio max in the 90s. It was "cool" but too linear (it's a stack after all).

Other software like Houdini or Maya (or NR Shake) used DAG (acyclic graph) of operations to create an output scene/image. There the history isnt linear it's a bit of a multiverse, you can disconnect part of the graph, try new things, reconnect. Everything is there.

Re:Command line interfaces are reified UIs by icebraining on Saturday November 04, 2017 @06:22AM (#15624439)
Like a modern version control system?
Re:Command line interfaces are reified UIs by agumonkey on Saturday November 04, 2017 @07:33AM (#15624589)
It's the same underlying structure, replace commit by different kinds of operations.
Re:Command line interfaces are reified UIs by pcmaffey on Friday November 03, 2017 @01:30PM (#15620828)
The browser?

Though as you mention, many developers nowadays don't see the need for history, and so are putting application/webpage state somewhere other than the router. This IMO is short-sighted, as it undermines the transparency of a user's actions on the web. And plays into the walled-garden effect many of these same developers will lament in the loss of the "open web".

Re:Command line interfaces are reified UIs by horsawlarway on Friday November 03, 2017 @05:04PM (#15622191)
I don't agree that we've lost this ability by moving state to the client or JS (since it seems you're really bitching about single page JS apps).

There are several ways to capture that state, and the nice thing is that the browser allows sites to either opt in or out depending on their requirements.

See: Insights, FullStory, or any other event hooking library.

We can also play back those actions using the very nice WebDriver apis available in modern browsers.

There is zero reason to assume that we've lost reification simply because we've moved away from an approach that requires at least one RTT in latency before updating what the user sees.

Re:Command line interfaces are reified UIs by b0rsuk on Friday November 03, 2017 @07:45PM (#15623015)
I think if you use JS your website has broken history by default and you need to go an extra mile (or use a nice framework) to remedy this. And there are things like infinite scrolling pages. And then you find yourself arguing with the developer why it should be fixed ("Yeah ? But nobody uses history anyway.")
Re:Command line interfaces are reified UIs by firethief on Friday November 03, 2017 @08:57PM (#15623251)
If you use C your program has broken history by default and you need to go an extra mile (or use a nice framework) to remedy this. I guess the difference is that in C world, we've more or less standardised on a few nice frameworks (Qt, GTK, etc).
Re:Command line interfaces are reified UIs by pcmaffey on Friday November 03, 2017 @05:21PM (#15622279)
Unless you sync app state with the router, then you cannot "Enter a command / url" => "Output a state / action".
Re:Command line interfaces are reified UIs by horsawlarway on Saturday November 04, 2017 @04:59PM (#15626875)
I'm sorry, but that's incorrect.

It's not something most users do, so if your argument is "Reification is not on by default for all users" then sure.

But that's a meaningless statement. Most users don't want that ability, or aren't willing to spend the 10 minutes it takes to configure.

Otherwise, you absolutely can enter commands and output state: https://sites.google.com/a/chromium.org/chromedriver/downloa...

Further, there are a HOST of tools that make this process very easy, complete with replay solutions, detailed logging, real time monitoring and all sorts of other fantastic, modern tools.

Just because you choose not to use them doesn't mean they don't exist. Sorry your understanding of web dev is out of date...

Re:Command line interfaces are reified UIs by pcmaffey on Saturday November 04, 2017 @06:46PM (#15627257)
Users don't enter urls into browsers?
Re:Command line interfaces are reified UIs by kalleboo on Friday November 03, 2017 @11:59PM (#15623699)
> most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc do not include a macro recorder in the default event loop. Therefore, to "reify" the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to "record" the button presses into a timeline. Programmers won't do this unless there's a customer need for it. (E.g. Photoshop lets you reify the GUI as "actions" for later playback")

In the MacOS System 7 days when Apple was still pushing AppleEvents/AppleScript heavily, a good portion of Mac software would let you record your actions in them through the AppleScript Script Editor (they would emit the AppleEvent equivalents of your GUI actions), generating an AppleScript which you could then edit. It was a fantastic system. It's still there in macOS X, but it's rarely supported/used now.

Re:Command line interfaces are reified UIs by btbuildem on Friday November 03, 2017 @02:02PM (#15621073)
Well, with this narrow definition of reification, you could say that any UNDO mechanism basically implements it.
Re:Command line interfaces are reified UIs by weberc2 on Friday November 03, 2017 @01:15PM (#15620728)
Both of the GUI toolkits I've worked with (GTK and Qt) have a concept of "Actions" which can be (and frequently are) mapped to a menu item and a keyboard shortcut and sometimes a CLI flag; isn't this an example of reification, or am I misunderstanding the concept?
Re:Command line interfaces are reified UIs by jasode on Friday November 03, 2017 @01:18PM (#15620746)
I don't know about GTK but in Qt, those are not recorded into a "timeline".
Re:Command line interfaces are reified UIs by weberc2 on Friday November 03, 2017 @01:36PM (#15620876)
Sure, but is that implied by "reify"? My understanding is that they are reified and thus it is possible to make a timeline from them. CLI commands are only recorded into a timeline because of shell history, after all--if you call a CLI from a different mechanism, does it become not-reified?
Re:Command line interfaces are reified UIs by digi_owl on Friday November 03, 2017 @02:29PM (#15621287)
The underlying commands can still be logged.

Hell, often it is useful to launch a X11 program via a terminal as they will dump useful messages that way.

And said output can also be captured in logs elsewhere.

One example of such would be SMPlayer. This is a Qt based media player that wrap MPlayer (and more recently the MPlayer fork MPV). But you can still access the MPlayer CLI output by either launching SMPlayer from a terminal, or going opening the log window from one of its menus.

Re:Command line interfaces are reified UIs by weberc2 on Friday November 03, 2017 @03:11PM (#15621556)
To be clear, this was my point--because of the "action" mechanism, it's trivial to make a timeline.
Re:Command line interfaces are reified UIs by alkonaut on Friday November 03, 2017 @05:50PM (#15622419)
The undo stack of any document oriented application is that timeline? Typically if you hover the undo button it says "Undo add frob" and if you undo that, you can see the next item. It's also common to be able to drop it down and see the whole undo stack and undo to an arbitrary point in it.

Since this has been par for the course for for as long as I remember, I take it that's not what's discussed here...

Re:Command line interfaces are reified UIs by majewsky on Sunday November 05, 2017 @09:10AM (#15629440)
Many apps (or app windows) have actions, but not undo stacks. Undo stacks are typically only used in app windows that display a document of some sort, and then the stack is limited to actions on the document. Have fun trying to revert the last 10 app configuration changes.
Re:Command line interfaces are reified UIs by alkonaut on Sunday November 05, 2017 @12:06PM (#15630295)
Right - the undo stack is always for a "document" of some kind, and more importantly a single user view of a document. Multiple documents can be used (with a single or separate undo stacks) and a settings object can in theory also be viewed as a document although this is rarely the case.

A manager once asked for full undo in a GUI for a shared db. That's not possible...

My point was that if actions are dependent and undoable then they form a stack. If everything can be undone then all that you are affecting (including view state, config, ...) has simply become part of the document.

In the app I'm developing I'm distinguishing "actions" as being what a shortcut/button/menu item represents and "commands" as being document modifications.

Actions aren't necessarily undoable ("quit" is an example) but most actions end up as being commands, and those commands form the undo stack. Actions handle availability (enable/disable) etc. I think this is a fairly standard pattern for document based applications.

Re:Command line interfaces are reified UIs by betenoire on Friday November 03, 2017 @01:48PM (#15620973)
Your examples are good, but most users don't _need_ reification for CLI tools either. But at least it's an option when they do.
Re:Command line interfaces are reified UIs by b0rsuk on Friday November 03, 2017 @07:47PM (#15623024)
Reification is always there for the (rare?) cases you need it. With GUI, there's no such option, and it's hard to notice something that has always been missing.