Header Images

April 25, 2012

Decided to put up some header images today to make the blog a bit more human and a bit less programmer. These are photos I took in the summer of 2005 in the High Tatra mountains on the border between Slovakia and Poland. The images were once on a sub-domain of my old site (reconstructivism.net), but that one no longer exists and I’ll be buggered if I’m going to put it all up somewhere else. Here however are some of the ones I liked best available for download again.

Read the rest of this entry »

Dear Mr. Spielberg,

most of what they tried to teach me during gymnasium Latin classes has long since evaporated from my memory. I no longer remember how to conjugate verbs and I’ve forgotten the bulk of my meagre vocabulary. Luckily though we also often discussed Roman and Greek history, religion and mythology which imprints itself onto one’s psyche with far greater ease. One of the stories from Greek mythology that most affected me concerned the brothers Kleobis and Biton, who were the sons of a priestess to Hera. One day, their mother was scheduled to perform a ritual at a temple and the oxen that were supposed to pull the cart were delayed. Kleobis and Biton pulled the cart instead with near super-human strength and endurance. So impressed was their mother that she asked Hera to award her sons the greatest of gifts a God can give a mortal. The following morning Kleobis and Biton were found dead in their room, they had died a painless death in their sleep, at the prime of their lives.

It cannot be reasonably denied that your work has had a major impact on modern cinema and you’ve certainly directed some of the most innovative and ambitious films that have graced the silver screen. Nobody’s track record is flawless and neither should it be. You —like every other human being— needs to be given the latitude to make new mistakes and gratitude once you’ve made them, so that all of us can be the better for it.

That being said, there are times when one must tread extra carefully because the subject matter in question is not yours alone. When you decided to turn The Adventures of Tintin into a full length film, you should have realised that this story belonged not just to you, but to all of us. What you have done amounts to nothing less than pillaging. The dissolution of a comic book series that so many of us have come to love from early childhood. There is no excuse for this. No rationalisation that could possibly mitigate the magnitude of this crime.

Mr. Spielberg, please stop making movies before you mutilate your legacy beyond recognition.

I’m often struck by how even the most straightforward and standard interfaces are cumbersome to get right. I know, I know, I’m the first to admit I don’t get stuff right all that often, especially not at the first go, but hear me out. Imagine the following object:

It’s something which is used often in hardware control panels, but less often in software UI. Most notably, when it is used in software it’s mostly when the software is specifically designed to mimic hardware, such as audio mixing boards. This is actually a shame, because a dial provides a number of benefits over linear sliders. For one, it is potentially infinite. You can keep turning it and turning it all the while changing the value. This is not possible with a linear slider. Also, the farther away the mouse is from the dial, the more accurate the control becomes, as the angle between two adjacent pixels is much smaller from the dial’s point of view:

The angle α is larger than β because the green pixels are closer to the dial than the blue pixels. So as users we can adjust how much effect a radial mouse displacement has simply by moving the cursor towards or away from the dial. Although one could implement a similar effect in linear sliders (the further away the mouse from the slider, the less the effect of a mouse translation), it would not be anywhere near as intuitive and controllable as the native behaviour of the dial.

But I came here to complain about boring interfaces, and a tuning dial is not boring, even though you might feel it is annoying. The boring bit comes in when we need to make the dial behaviour customizable. Is the value limited to some domain? If yes, what is this domain? What is the range of a single full turn? And so on and so forth. Simply putting all these values on a window would certainly allow users to adjust the dial and I’d bet a lot of programs simply take this approach and leave it at that.

But there’s a problem, some user settings depend on other user settings, which means not all possible values result in valid states, allow me to elaborate. The minimum limit should not be equal to or higher than the maximum limit and —conversely— the maximum limit should not be equal to or less than the minimum limit. How do we enforce this rule? Take some time to think about how you would encode this constraint.

Read the rest of this entry »

Book Reviews

April 8, 2012

In case anyone is looking for a book to read, allow me to review some of the books I recently finished.

Read the rest of this entry »

Different people have different ideas on what constitutes programming. The Assembly coder will scoff at the C coder for using high level function calls, the C coder will belittle the C++ coder for using classes, the C++ coder will deride the C# coder for not managing her own memory and the C# coder will mock the VBscript coder simply because she can. In my experience a lot of programmers seem to consider those who use older or more primitive languages as ascetic sadomasochists who waste their time and effort doing things that could be automated, while at the same time ridicule those who use newer or more high-level languages for toying around with ‘fake’ programming.

My own definition of programming would only include a single constraint; execution. Anybody involved in any job that ultimately creates instructions that are executed by a computer, machine or even biological entity, can be said to be programming. This results in some interesting, and perhaps counter-intuitive, consequences. For example, the writing of pseudo-code does not count as programming, because no machine will execute the instructions. Until of course someone writes a compiler for pseudo-code, at which point it will suddenly become programming.

Every now and again I come across someone who feels that Grasshopper is not a programming language. The main reason for this seems to be the fact that one does not write textual source code when using Grasshopper, rather instructions are combined in a visual fashion using primarily the mouse rather than the keyboard.  The user ayg011 on the Grasshopper forum recently took this position with a vengeance:

“Out of experience I can tell you that the problem you have would be solved via your own skill and intelligence in a matter of seconds, rather then clumsily relying on somebody else to write some code ‘packaged’ as a component, and ultimately restricting your capacity to explore novel design solutions in an intelligent way.


Its merely a toy for students and hobbyists. If you are just starting out, invest your time more wisely and learn something which can be used over the entire life cycle of project. It’s so versatile that you essentially have unlimited potential and all operations remain fully in your control, or put in another way; you’re not restricted by the idiosyncrasies of another programmer who’s ‘components’ might be totally unsuitable for a novel idea you may want to explore therefore killling it.” [link]

His point is somewhat novel in that he doesn’t so much focus on the textual vs. visual, but instead focuses on the fact that all operations in Grasshopper come in a pre-packaged form; as ready-made components. ayg011 seems to feel this limits the designer:

“True originality comes from the freedom of expression; GC allows this, where as preconfigured ‘components’ in GH have an intrinsic limitation.” [link]

To me, this signals a profound misunderstanding of what programming is. Unless you’re Charles Babbage, it is difficult to make the claim that you are truly programming from the ground up and not being limited in any way by what other programmers have done before you. I would defend the position that there is no difference —none whatsoever— between this algorithm:

public Vector3d VectorFunc(Vector3d A, Vector3d B)
  return A + B;

And this one:


Whatever language you are programming in, you will always be initially limited by the SDK that other programmers have put together for you. If you have access to fine-grained operation (vector addition for example) you can always extend the SDK with your own functions as you see fit. Just like you can always write a novel story using a 26 character alphabet, you can always write a novel algorithm using a limited number of basic functions. This is what’s known as universality in computational theory.

ayg011 has a further objection, one with which I find myself far more aligned:

“My main concern is that the close-ended style of GH is going to trigger a generation of designers to plan their creativity around components they know exist in the software (so a tower becomes this identikit style of architecture that ‘twists’, or has a hexagonal parametric skin etc), rather then seeing it as a tool to realise whatever their imagination can think of (the beauty and strength of GC)” [link]

This is indeed a fundamental problem that faces us all. The easier it becomes to achieve something, the higher the likelihood that someone will achieve it without fully understanding it or without having an actual need to do it. Both are deplorable outcomes. It strikes me as a poor solution though to complicate the software to ensure only those with ‘true grit’ will be able to make headway.

This is a problem caused by easy-to-use software, but it is a problem that must be solved by better education. As an employee of a CAD firm, my job is to make it easier and easier for my users to construct the geometry they want. As a teacher at a university or college, it is your job to make sure that new tools are used sagely.