Directness and liveness in the morphic user interface construction environment

Directness and liveness in the morphic user interface construction environment, John H. Maloney and Randall B. Smith, 1995.

Morphic is a user interface construction environment that strives to embody directness and liveness. Directness means a user interface designer can initiate the process of examining or changing the attributes, structure, and behavior of user interface components by pointing at their graphical representations directly. Liveness means the user interface is always active and reactive-objects respond to user actions, animations run, layout happens, and information displays update continuously. Four implementation techniques work together to support directness and liveness in Morphic: structural reification, layout reification, ubiquitous animation, and live editing.

Morphic was developed in Self and then adopted by Squeak. Reading this paper makes Squeak more interesting to click around in!

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

screenshots?

i realize it was written in 1995, but has no one done anything with this since then?

Squeak

As the original most mentions, I believe this is actively developed in recent versions of Squeak.

Squeak Morphic

Maloney ported it to Squeak, but Smalltalk-80 does not directly support many Self language features such as instance-specific slots and methods and multiple inheritance. Squeak Morphic feels relatively awkward to program in for this and other reasons.

For example, object explorers in Squeak are not as powerful as Self's outliners, the submorph menu is not present, nor the core sampler tool, and an extra package is needed to represent non-Morph objects within Squeak Morphic (MorphicWrappers, definitely worth a look). Graphical layout is also tricky to get right - the interfaces for it are not intuitive and somewhat "magical".

There are the eToys and (cleaner) Tweak projects but those are more designed for educational programming environments rather than the Morphic ideal per se.

There was a project in my language Slate to combine the features of Morphic with those of CLIM but we couldn't get the compiler project going, leaving it too slow to run the UI. :( So I've spent time recently on a similar project in Squeak to add CLIM-style abstractions to the UI-building toolkit. Maybe I'll be able to port more Self tools over in the process.

Presenting Squeak

Cool. Squeak seems like a nice foundation to put a CLIMish presentation system on top of. I'd enjoy playing with that so please post a note when you have something!

Sadly I'm too much of a CLOStrophobe to get into regular CLIM.

Screenshots

Screenshots are included in the Self tutorial here: http://research.sun.com/self/release_4.0/Self-4.0/Tutorial/.

Self also runs on OS X now (most recent release 4.3 supports x86). There is also a slower non-official VM for Linux-x86. If you jiggle it just right during the build, I've heard that it even works on Cygwin under X11.

Related: Self & Sketchpad

On the direct-manipulation theme we've also had past coverage of Self and Sketchpad.

(Interesting that the Sketchpad thesis didn't draw any comments. It's not to be missed!)

see also the Gadgets toolkit on Oberon System 3

"...Directness means a user interface designer can initiate the process of examining or changing the attributes, structure, and behavior of user interface components by pointing at their graphical representations directly. Liveness means the user interface is always active and reactive-objects respond to user actions..." Sounds a lot like working with Oberon System 3's Gadgets GUI toolkit.

  • Johannes Leon Marais, Design and Implementation of a Component Architecture for Oberon (PostScript)
  • J. Gutknecht, Oberon, Gadgets and Some Archetypal Aspects of Persistent Objects (abstract | PostScript)

One critical difference being in "animations run, layout happens, and information displays update continuously", since in oberon multi-tasking is done by having a central loop broadcast events to handler procedures (controllers) installed in each frame (view). This gives the appearance of multitasking for interactive work, but in fact it's single-threaded. (The BlueBottle System addresses this via "active objects", which look to me like Actors.)

Live editing

Over the years I've been playing with designing a live user interface such as in Self. The current implementation is in Ruby - you can find information about it here: http://www.mike-austin.com/inertia/index.html It's not rocket science, but the user experience is a little tricky to get right. I'm surprised that there aren't more projects out there focusing on this.

Live editing

I'm currently working on live editing in the context of my SuperGlue language (presented @ ECOOP 2006). I actually did a demo of a SuperGlue program undergoing live editing at ECOOP, but I'm currently re-doing the prototype to add more features/improve the language/etc. I've also been doing IDE technology for Scala (incremental lexing, parsing, type checking) ad we are thinking about taking this one step forward and somehow supporting live editing (difficult, but not impossible, in a statically typed imperative language).

It is nice that I'm not alone in this area. Live editing has the potential of drastically improving the programmer experience, so it is strange that more people aren't working on it. You might also want to take a look at Subtext (Jonathan Edwards).