Largest Provider of Commercial Smalltalk
Cincom is one of the largest commercial providers of Smalltalk, with twice as many customers and partners as other commercial providers.

Tom Nies

Get Started

Smalltalk Meets Cubism

Posted on in Categories Smalltalk

In some ways, it’s appropriate that Mondrian is always about rectangles. Google Mondrian and the first images you’ll see are all about rectangles. Nearly all of the artwork associated with Piet Mondrian is a love affair with rectangles.

Anyway, I thought it was time to put up or shut up. I want a new question to bug Alexandre about when we cross paths in the future. So I decided to play a little. I wasn’t interested in rewriting all that Mondrian is, I just wanted to experiment a little with other polyshapes to express multiple, simultaneous attributes of the subjects that I was trying to visualize. Mostly, I was interested in playing with MeshGradients using Cairo, because I was curious if I could find an interesting problem that I could use mesh gradients with.

If you Google Cubism, you’ll see the artwork that I was inspired by. According to Wikipedia:

In cubist artworks, objects are broken up, analyzed and reassembled in an abstracted form—instead of depicting objects from one viewpoint, the artist depicts the subject from a multitude of viewpoints to represent the subject in a greater context.

That sounded exactly like what I was trying to do. I published my couple-day prototype in the Open Repository in a package called TAG-Cubist. I realized in playing with this how it’s not just about rectangles (of course), but how important layout of the per-subject graphics is. I didn’t do anything other than present them in a tiled format. I’ll leave that kind of thing to others. Here are screen captures of the four example methods I put on the Portfolio class (a Portfolio is a collection of similar drawings for a group of different subjects).

Some of the methods found in the Portfolio object, showing clockwise from noon high position include: LoC, inst var ref count, selector size, argument count and byte codes.

Some of the top-level packages found in my image, showing clockwise from noon high position include: prerequisites, defined classes and extended classes.

Classes found in the ArithmeticValue class hierarchy, showing clockwise from noon high position include: methods, inst vars, refs to globals and global refs to the class. (Attributes suggested by Bob Hartwig … thanks!).

Top-level bundles in my image, showing clockwise from noon high position include: child packages, child bundles, prerequisites, comment size, defined classes, methods of defined classes, extended classes and extension methods.

If I were to go on playing, I’d basically start to reinvent Mondrian, which is not something I’d really want to do. I might play with the way the shape is generated some more and make it more of a star graph (whereas it’s sort of a spider plot right now). And, I’d definitely figure out how to do a legend plot.