<story><title>Command line interfaces are reified UIs</title><url>http://www.expressionsofchange.org/reification-of-interaction/</url></story><parent_chain><item><author>jasode</author><text>&lt;i&gt;&amp;gt;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.&lt;/i&gt;&lt;p&gt;If we have to search for an underlying reason, it&amp;#x27;s that most GUI interactions by most end users don&amp;#x27;t need reification and therefore, that code is not put in.&lt;p&gt;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.&lt;p&gt;Many computer users who are comfortable with UNIX command line will nevertheless &amp;quot;move chess pieces&amp;quot; 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.&lt;p&gt;The other example has music producers mixing a song.  They will adjust the sliders&amp;#x2F;faders of volume panning and the software will record their moves.  It&amp;#x27;s known in the trade as &amp;quot;mix automation&amp;quot;.  When the song is played back, the software makes the sliders mimic the same moves.  The automation in &amp;quot;reified&amp;quot; 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.&lt;p&gt;As for other GUI applications like typical business data entry screens, etc... most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc &lt;i&gt;do not include a macro recorder&lt;/i&gt; in the default event loop.  Therefore, to &amp;quot;reify&amp;quot; the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to &amp;quot;record&amp;quot; the button presses into a timeline.  Programmers won&amp;#x27;t do this unless there&amp;#x27;s a customer need for it.  (E.g. Photoshop lets you reify the GUI as &amp;quot;actions&amp;quot; for later playback&amp;quot;)&lt;p&gt;[1] example yellow line graphs the fader or knob changes: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;cdm.link&amp;#x2F;app&amp;#x2F;uploads&amp;#x2F;2014&amp;#x2F;06&amp;#x2F;logicmixing-640x399.jpg&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;cdm.link&amp;#x2F;app&amp;#x2F;uploads&amp;#x2F;2014&amp;#x2F;06&amp;#x2F;logicmixing-640x399.jpg&lt;/a&gt;</text></item></parent_chain><comment><author>b0rsuk</author><text>Chess:&lt;p&gt;&lt;pre&gt;&lt;code&gt;  *  The interface is typically NOT optimized for keyboard.
&lt;/code&gt;&lt;/pre&gt;
Typing E4D5 is &lt;i&gt;not&lt;/i&gt; optimized. You need to look at a square in the middle, then look which row it is, and which column it is. I&amp;#x27;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&amp;#x2F;B one of bishops, r&amp;#x2F;R - rooks, k&amp;#x2F;K - knights, q - queen, i - king. Then another character depending on what shows up where you want to move.&lt;p&gt;&lt;pre&gt;&lt;code&gt;  *  People who play realtime chess (one example is Kung Fu Chess)do use keyboard
&lt;/code&gt;&lt;/pre&gt;
certainly those playing in tournaments.&lt;p&gt;E4-D5 notation is optimized for recording games, not for playing.</text></comment>
<story><title>Command line interfaces are reified UIs</title><url>http://www.expressionsofchange.org/reification-of-interaction/</url></story><parent_chain><item><author>jasode</author><text>&lt;i&gt;&amp;gt;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.&lt;/i&gt;&lt;p&gt;If we have to search for an underlying reason, it&amp;#x27;s that most GUI interactions by most end users don&amp;#x27;t need reification and therefore, that code is not put in.&lt;p&gt;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.&lt;p&gt;Many computer users who are comfortable with UNIX command line will nevertheless &amp;quot;move chess pieces&amp;quot; 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.&lt;p&gt;The other example has music producers mixing a song.  They will adjust the sliders&amp;#x2F;faders of volume panning and the software will record their moves.  It&amp;#x27;s known in the trade as &amp;quot;mix automation&amp;quot;.  When the song is played back, the software makes the sliders mimic the same moves.  The automation in &amp;quot;reified&amp;quot; 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.&lt;p&gt;As for other GUI applications like typical business data entry screens, etc... most GUI toolkits like C# Winforms, C++ Qt, HTML buttons, etc &lt;i&gt;do not include a macro recorder&lt;/i&gt; in the default event loop.  Therefore, to &amp;quot;reify&amp;quot; the GUI in the same fashion as chess programs or the audio software requires grafting data structures and programming extra code to &amp;quot;record&amp;quot; the button presses into a timeline.  Programmers won&amp;#x27;t do this unless there&amp;#x27;s a customer need for it.  (E.g. Photoshop lets you reify the GUI as &amp;quot;actions&amp;quot; for later playback&amp;quot;)&lt;p&gt;[1] example yellow line graphs the fader or knob changes: &lt;a href=&quot;http:&amp;#x2F;&amp;#x2F;cdm.link&amp;#x2F;app&amp;#x2F;uploads&amp;#x2F;2014&amp;#x2F;06&amp;#x2F;logicmixing-640x399.jpg&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;cdm.link&amp;#x2F;app&amp;#x2F;uploads&amp;#x2F;2014&amp;#x2F;06&amp;#x2F;logicmixing-640x399.jpg&lt;/a&gt;</text></item></parent_chain><comment><author>kybernetikos</author><text>Paint.net is another example of an application that reifies its actions with a nice &amp;#x27;history&amp;#x27; 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.</text></comment>