Random Acts of Coding

Here are some mostly code projects I've done that have risen to see the light of day, more or less. I'll not bore you (or me) with the many MUD engines, aborted games, game frameworks, hex editors, data converters, scripting languages etc. etc. that are best left buried deep in some dank archive somewhere.

Juno: A Programming Language Experimentation Kit I've been experimenting with writing scripting languages for a very long time. For my latest, which was to be called Mojo, I tried to make it as generic as possible so I could use it as a starting point for other scripting language ideas. I prototyped it in JavaScript then while making an Alpha in Scala I realized that the computer language starter platform part of Mojo was actually more interesting and useful than Mojo itself.

So I called it Juno and now it is its own project. It's meant to provide a handy starting point from which anyone can build their own scripting language or experiment with ideas. Juno will provide a number of starting languages that can be use as a starting point with no need to implement the basics such as tokenizing the input string or even parsing and evaluating expressions. Sure you could use Bison or the like, but they have steep learning curves and provide no guidance as to how to execute the code once it's parsed. Juno is meant to be easier to learn and includes execution samples than can be used as foundations to build on. It does require that you learn Scala if you don't know it, but that will be more useful in the long run than learning Bison :). It's on GitHub

As Yet Unnamed XNA Game Project So I've dedicated myself to making a completed game with Microsoft's XNA Game Studio for the XBox and Windows. How will I fare? You can follow along on my blog. Yes, I'm blogging now, welcome me to the 21st century. NOTE: Microsoft as killed XNA and with it this project. Sooooo... yeah.

AiiiAn Unofficial Penny Arcade Screen Saver I've been working with Microsoft's DirectX APIs for years, since version 2, and I've created several simple game mockups using their 3D API. Then sometime in 2003 I heard that version 9 was a dramatic change to the 3D API that included vertex and pixel pipelines and shader support. Well I had to get me some of that! I also wanted to do some programming with a real physics engine, and then maybe get something out in the public with some potential recognition. Thus was born the Unofficial Penny-Arcade Screen Saver, using DirectX 9 and the ODE physics engine. It was a fun little project and got reasonably popular, though not popular enough to develop much further.

AiiiTwilightPOV I was really into these POVRay objects called isosurfaces, which are 3D structures built entirely through mathematical formulas. You could, for example, plug a Julia Fractal algorithm into an isosurface with a few parameters and have a solid seeming 3D Julia Fractal object in your scene. What was even better is that you could combine these algorithms, so toss in an algorithm for creating brick like patterns and you could have a Julia Fractal that looked like it was made of bricks.

What I wanted to do was use those self same algorithms to surface distort other objects, not just isosurfaces. I wanted to be able to make a CSG table or import a car mesh and surface distort them with an algorithm as well. So I got the POVRay C source code and created a modification that allowed just that.

The key to how it worked was in defining a function type, called 'object', that represented any type of POVRay object and could be used in any POVRay expression. You could, in effect, define a function that represented a CSG object using the format fn_CSG = function{ object{ CSG_Model } }. You could then use the fn_CSG function in any other place you could use functions, including in defining an isosurface which you could then distort in any usual way. This turned out to be pretty useful in other ways too, you could use the function of a solid model to help define a dynamic texture used to map that same model, for example.

It worked pretty well, but unfortunately it was also pretty slow. I tried a number of tricks to speed it up involving oct-trees and binary spline trees, mesh walking algorithms and such without much improvement. I talked in the POVRay forums with other experienced programers, including some who'd helped write POVRay, about optimizing it and they all pretty much said, "we've tried things similar to that, let us know if you figure it out". After some more experimentation I decided to let it rest the way it was and see if inspiration hit me. later

I plan to pick it up again when POVRay 4.0 eventually comes out with it's complete rewrite in C++

MidwayMVC While I had some free time in 2006 I decided that what was really needed in the web world was an MVC framework for small, lightweight web projects. Something not as complex or bloated as Spring, but that still offered the handy Model, View, Controller pattern for dynamic websites. Thus was created the MidwayMVC open source project.

It was fairly far along, fully functional and with a sample site up and running. Before I could promote it however I got a job and one of my first tasks was to evaluate the Beta of Struts2, which it turns out fills the same need pretty well, and with community support. This project has lain fallow ever since.

What? Why?

I'm a creative guy, and code is my medium. I'm always wanting to create worlds, games, stories... stuff. To this end I also always want to know how things work and how things can be done better; How does bump mapping work? Is query or object caching better? How do you simulate physics? Is MVC really much better than CGI style page serving? What is Cloud Computing? What's up with iOS?

On these pages are presented a selection of projects seeking to answer these questions that progressed far enough to have demonstrable results. Or, against all odds, were actually completed!

(it's worth noting that these pages are, in themselves, one of those projects)