ProgressGrid – Fragmentation Tool Inspired Progress Visualization for Cincom® ObjectStudio® and Cincom® VisualWorks®
In the past, I experimented with using two robotic lawnmowers to cut my lawn. They were fun to watch as the mowers quietly whirred under battery power, zigzagging across the yard and following their built-in algorithm for area coverage. A favorite joke was when my wife would ask me to do something while I was observing my mowers autonomously going about their work. I would mock annoyance and state, “Can’t you see I’m cutting the grass?!” Then we would both laugh. They were fun to watch. I mean they were FUN to watch—they drew you in. Literally cars would sometimes stop in the street and sit for minutes transfixed while watching the mowers. I think they wanted to see where the mowers would go next or what would happen if they collided.
So that brings me to a point—having something useful or informative and interesting to watch can be a good thing. One such thing is a defragmenter for defragging your hard drive. You have probably seen one; it has a window full of small squares: red for fragmented, some other color to tell you it is in progress and green to tell you that area of the hard drive is no longer fragmented. Sometimes the squares change in patterns as files that are spread across areas of the disk are cleaned up. Much like the robotic mowers, the defragmenter is made to start and walk away while it does its work; but also like the robotic mowers, sometimes you are drawn in to watch—even just for a bit.
So the defrag tool was my inspiration to make something else useful—a progress Window in Smalltalk. Here is the progress window in its initial state. Each square represents a unit of work. Each unit of work is represented by a key. The key can be simply an integer or a symbol. In the picture below, there are 908 squares.
Here is an example of the tool in progress. Green squares are completed units of work and orange squares are in-progress units of work. You will not have more than one orange square for linear single thread execution of work; however, for multiple threads, or for using Polycephaly, you can have many. Polycephaly is our solution to leveraging multi-core and grid computing with simple concurrency. One goal was to make this progress useful and attractive for progress using Polycephaly.
Next up: ProgressGrid implementation.