enchant.js | Fundamentals


We’ve entered Phase Two of my game programming course, and to help support this phase, I’m putting together enchant.js | Fundamentals.

While currently not as interactive nor as descriptive as what I developed for Phase One, I’m hoping these incremental examples will make it easy for those new to programming to grok some fundamental techniques and concepts.

Again, feedback is appreciated.

Goodbye NURBS. Hello Printy.


The photo above was snapped at my local Target store yesterday. It tells me two things:

  • The era of NURBSy design has ended.
  • We have entered the era of printy design.

NURBSy design is what I call the aesthetic that has dominated product design over last couple decades. As soon as CAD tool companies introduced NURBS into their modeling products, we started to see products using NURBS everywhere. Need a handle for a kitchen strainer? Make it interesting by NURBSing it. Need a headlight? Make it interesting by NURBSing it. Etc. The availability of NURBS modeling tools led to its widespread and almost indiscriminate adoption, not the other way around. While this might be understandable, it must also be recognized that this is a fairly arbitrary approach to form.

Now, 3D printing is all the rage, and those engaged in making 3D printed design artifacts seem to be gravitating toward a common “faceted/fractally/spiderwebby” aesthetic. The aesthetic is ostensibly driven by the current limitations of 3D printing technology: the raw materials used in making prints are expensive and not that strong. The limited vocabulary of solutions that is emerging is striking. It’s as though referencing something that references 3D printing is more important than finding a really good or original solution. Or not. The main point here is that there is an emerging 3D printing aesthetic that is very identifiable.

To me, what’s most interesting about the objects in the photo above—and what leads me to think that we are now in the era of printy design—is that they were (as far as I was able to tell) not 3D printed. The form is simply a reference to a new and hip technology. Some might say that it’s a sign of the times.

This “sign of the times” approach to form isn’t exactly new in design. One of the things you should get from Corbu’s Towards a New Architecture is that he was actually much more interested in building a home that evokes the machine than in “building a machine for living in.” In a graduate design seminar a lot of years ago, the insightful Charles Owen referred to this kind of thinking among Modernists as “functionalistic” design. Evoking (and not necessarily signifying) functionality was more important than being functional. The aesthetic is the message. We can see this *-istic approach to form in the mid-century streamlining trend in the USA as well. There’s no compelling reason for a toaster to be streamlined, but many were. Lather, rinse, repeat.

What makes NURBSy and printy design different from functionalistic and streamlinistic design is that they reflect developments in design technology rather than developments from another field. I don’t really know what the significance of this is. The cynic in me has me thinking about isolationism, tribalism, and narcissism; the optimist is mumbling something about design discipline maturity and confidence but is otherwise silent.

In any case, what I am sure of is that all of this underscores the need for more dialog about the meaning of form in design. There is some, but we need a lot more.

Changing Processing’s Look and Feel


The Java Look and Feel that Processing uses by default on Linux can get a bit wonky. Depending on the GTK theme you are using, menubars can actually become unusable!

Where’s the menu?

You can change the Look and Feel to something that works by editing the file:


Be sure that Processing is not running when you do this. To use the standard Swing Metal Look and Feel, change the lines that read:



Metalized menubar

Metal may not be pretty, but it seems to be pretty robust!

Note that because Processing uses its own JRE, it will ignore LnF and other settings you may have configured for your default JRE.