« Software and the Concurrency Revolution | Main | Discontinuous functions and C++0x »


After finishing the implementation phase of threading GC, I took a week off to rest from a cold. I expect some interesting debugging sessions, and look forward to benchmarking, profiling, and optimizing GC on multicore systems, but for now I'm moving on to other issues on my todo list.

I started this blog intending to write mostly about user interface design and the evolution of GC. Diving into threading occupied my full attention for several months, but now that that is done, it fades into the background. From the users perspective, it changes nothing in the interface. Some things are faster on newer machines, but new machines get faster all the time. That is expected. Eventually, I will be able to explore new kinds of visualization which would not have previously been possible without the speed benefits of parallel machines, enabling new functionality. But for now, the threading is just an implementation detail, transparent to the user.

Today, I'm looking at adding an option to the preferences dialog for GC4. In homage to A Short History of DragThing....

Graphing Calculator 1.0 (1993)

In designing Graphing Calculator 1.0, we would have preferred fewer preferences. Many options in the preferences dialog represent our failure as designers: we were throwing our hands up and saying 'We can't do the right thing, so we're forcing the user to make a choice." Taking the items one by one: Font Family, Font Size, and Significant Digits are reasonable items. Users know what they mean, different folks will have different preferences for these, and they are given default values so that users need not even be aware of the preferences.

3D Graph "Resolution" represents a programming failure exposing an implementation detail in the user interface. When GC graphs the function z=sin(x*y) as a 3D surface, it approximates the function by evaluating it on a square grid, 30 x 30 points by default. Ideally, GC would choose the grid automatically, making it fine enough to capture all the features of the function accurately, and coarse enough to do so quickly. However, choosing that automatically was too difficult to get right in all cases, so we made it a preference. This allows the user to explicitly trade off speed versus quality, but exposes an implementation detail which has little to do with the math being visualized.

Super/Subscript Font Size and Second Super/Subscript Size are the sizes of exponents, and exponents to exponents. At the time in 1994 some sizes of fonts were more readable than others, so this degree of control was necessary, though more complicated than we would have liked.

Assistance: Messages Below Equations. This option was simply an incorrect judgement call on Greg and my part. After our usability study in 1993, we added several messages which automatically appeared below the equation being typed in circumstances we could programmatically detect which we had observed from behind the two-way mirror watching people trying to use our software for the first time. We feared those assistance messages might become distracting and annoying, so we write them in grey on white to reduce their contrast, positioned them in the users peripheral vision, and provided a preference option to inhibit them entirely. No one ever complained about them, and in retrospect the option was unnecessary clutter.

Graphing Calculator 2.0 (1998)

In Graphing Calculator 2.0, we removed the "Assistance" preferences option. No one ever complained, or even seemed to notice. The "3D Graph: Resolution" preferences left the preferences dialog and become the resolution slider in the main window. This was necessary as GC2 allowed multiple equations, so the user needed to be able to choose the tradeoff between quality and speed separately for each equation. Net result: the prefs dialog is simpler by two items.

Graphing Calculator 3.5 (2004)

In Graphing Calculator 3.5, the Preferences Dialog became a Mac OS X Document Settings sheet. It also added the "3D Background" menu to control the backdrop for 3D views, and a help button. Sheets represent a significant UI improvement by closely tying the options to the document they affect, and distinguishing between global application preferences and document settings.

Graphing Calculator 4

In Graphing Calculator 4 (so far), I've removed the Superscript and Second Superscript options by computing them automatically as fractions of the main Font Size setting. It is tempting to reduce this even further by using the Text Menu to change the equation Font and Size.


Hi Ron, thanks for the link. I'm amused that we both appear to be heading in opposite directions!

In fact, I'm actually trying to simplify something in my preferences which has gotten a little out of hand of late... So, perhaps I'll catch up with you eventually :-)

Good luck with the multi-threading, and indeed the cold - I'm in the middle of one of those myself...

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)