Under the Hood: Designing the j-engine

When designing software, several design constraints come into play: first, an implementation language must be chosen; second, a list of desirable features must be decided upon; third, an implementation language must be chosen; fourth, a list of desirable features must be decided upon!

Language Choice

Jesting aside, the first subset constraint is that of languages known, or feasibly learnable. In this case, the ability to display graphics as a fundamental feature was important - I immediately wrote off scripting languages such as perl or ruby. C++ was feasible, and probably more efficient speed-wise, but my recent experience with the Java graphics capabilities and GUI construction feature tipped the scales in that direction. Not only do I feel Java's API is more standardized, but its platform independence (and ease of porting to an applet for web delivery) is important.


Basically, the program instantiates a desktop panel (the familiar, "I hold a program and have a little bar with minimize, maximize, and close buttons"). The desktop panel then has menu bars and items added. Then the user can use the menus to start a new session or alter the ongoing session. Each item then has functionality associated it, so making a selection from one of the menus will trigger the appropriate event. For software with GUIs, this event model has replaced older methods of waiting for input. Those methods allowed less abstraction and were possibly less efficient -- here, a mouse click is logically linked to program functionality and occurs when triggered. A more descriptive article with useful diagrams exists. Why does this event model matter? Because of its similarity to cognitive meaning attachment.

From the File menu, you can open a new directory for viewing, or exit the engine. From the Controls menu, you can change the maximum interval between image switches (the Engine chooses randomly between that 0 and that number), or pause/restart the Engine. You can also clear the screen. Please note that changes to speed only take effect after you open a new session.

You can also use the accelerator shortcuts to perform the commands (as above - e.g. Ctrl+Alt-S).

When the program starts, it will begin to place images from the directory onto the screen, four at a time. If these images are all the same size, they should fit in a perfect quadrant pattern. If sizes vary, then the result should be an overlapping interpolation of images.

Computing Themes

For me, this program is a foray into several computing territories, besides exploring Java's capabilties.

Information Decoding

At the hardware level, computers pass information as electronic signals of differing voltage. Even at this level there must be a common standard, or one computer's 0v = logical 1 might be confused for another computer's 0v = logical 0 (because the original machine used -5v = logical 0 and the second used 5v = logical 1). Then too, there are issues of start, end, and coordinating signals. Even at this low level, standards compliance (or protocol adherance or speaking the same language) is highly relevant in order to discern meaning from noise. CDs recorded on one platform are not readable by another. Sony DVDs use a different format than their competitors. This continues at every level of computing up to the application layer. .mp3 is not .wav or .aiff. Your custom DTD xml file doesn't mean anything to someone without the definitions. GIF is not JPG. Unicode is not ASCII (Big Endian vs. Lttle Endian). In order to decode a digital file from the electronic signals up through the binary and then through the character level and finally to display it requires a large number of translations to ensure meaning. Fortunately, failure usually results in incomprehensibility, not the wrong message!

And that's why standards exist. Why the W3C exists - cross-platform/platform independant standards must exist to ensure meaning can be successfully communicated.


Central to the operation of a computer program is the set of instructions that dictate its functionality. Due to the underlying architecture of computers, every program must be -- at heart -- an ordered list of events within the machine. However, there are times when a measure of indecision, or what computer scientists call nondeterminant behaviour , is useful. This can be because a definite result is too replicatable (cryptography) or unfair (gaming).

Categories of Random


The art of code-making depends on using keys to transform a plaintext document into an encoded version. The art of code-breaking depends on finding patterns within potential keys to break down the encoding and translate the encoded documents. In a transmitted signal, recipient only needs the key to distinguish the noise from the message. Barring that, the would-be code breaker must distinguish the signal -- background noise and all -- and then translate the underlying message. Key generation that was insufficiently random led to the breaking of both the German and Japanese code systems (Enigma and Purple) -- indeed, the first programmable digital electronic computer was designed to break just such codes.

Artificial Intelligence

It is obviously a matter of great debate whether humans are truly nondeterminant creatures, or if the decisions we make are simply functions of our genetics and environment. If the latter is true, this is remarkably similar to a computer's programming functions and input. Regardless which is true in reality, so-called hard AI projects that attempt to model our intelligence require an ability to break free from the instruction-set mentality that binds them. In the field of AI, weighted possiblities and chance play a role in the computer's mimick choices. While this randomness may be a poor substitute for humanity, it is better than the alternative.


Whether referring to the gaming that involves lotteries and money or the gaming that involves tactics and units, chance is a necessity. If, for example, a slot machine's random number generator used the same sequence every time it was turned on, an observant player could come back every morning for the payoff! Similarly, if your favorite chess game or real-time strategy was easily predictable, it would be no fun to play. When it comes to simulation software -- say for modeling weather or other phenomenon -- it's also important to ensure the range of possiblities are explored. Adaptive AI as an opponent is a recent development in computer games. Ironically, in some applications, such as computer games, it may be better not to use truly random numbers, for fear players think the system is broken.

Sources of Randomness

But where can we get random? Standard pseudo-random number generators work by taking a seed number and performing a mathemetical function with the seed as input and thus producing a random number. True random numbers need to be drawn from a chaotic source in order ensure their randomness. Randonmess can come from:


Perhaps more powerfully than any other application, the advent of the windowing operating system brought juxtaposition to the fore as multitasking. Using such a system, we can now run more than one program, and interweave the time spent using each one. This alone is powerful, and quick switching between programs can easily introduce the sort of radical disparity that creates effective juxtaposition. Indeed, older games had a "boss-key" to bring up a work-related screen. Similarly, the ability to place multiple programs on one screen, side-by-side, is an even more obvious juxtaposition. While each window attempts to frame its content and let it exist in isolation, leakage inevitably occurs. Just as we only partially ignore the world around the TV to take it the programming, each window on a computer screen informs those around it to create the overall picture in the user's mind. Indeed, the sum is greater than the parts.

Hypertext Theory

If, as Barthes stated, the author is dead -- and indeed, Landow would likely confim that the arrival of hypertext guarantees it! -- then readers are left adrift to navigate the Internet-world that they inhabit. In actuality, in a hypertext, as in "real life", others have a degree of authorial control in terms of what is in the document. However, as we can always visit another site or close the browser completely, this suggests the same external possiblity of simply not playing by the would-be author's rules. In life, we constantly construct an internal narrative of events, and the same is true of the Internet. We weigh up verity, authenticity, and importance to navigate the web and choose between the possiblities presenting themselves as real, and in the end the final story is the one we create.

In the j-engine, we exercise authorial control by selecting the images to be displayed. Chosing the images that go into the melting pot undeniably controls the resulting flavour, while allowing the chance recombinations to emerge. By selecting transportation images, I have made my pictorial presentation about mechanical vehicles, but whether viewers see military vs civilian, the modern focus on mechnication, flying vs ground, or simply a panoply of vehicles, relies upon what they get out of it. And in the end, that acknowledgment of viewer control and unconscious interaction is what the j-engine is about.

© 2004 Michael Nixon and Marshall Soules
Fair Dealing Applies