Travels of Code Monkey: Final Thoughts
This is part 4 of a series describing the making of the Travels of Code Monkey project.
Technology choices
I owe a lot to Processing for allowing me to quickly sketch my ideas for this project, even with my limited graphics and animation programming experience. That being said, it’s not without its limitations. A lot of the benefit of Processing is in hiding complexity of Java and its graphics APIs. The Processing IDE rewrites your Processing code to Java code, which is then handed to a standard Java compiler. Errors from the compiler or run-time refer to that intermediate Java code rather than the original Processing code. Usually I could still locate the source of the error, but sometimes it could be a bit tricky. There’s also no debugger; it’s ‘println’-style debugging all the way.
The Processing framework can also be used from within Java code. Once a project gets to a certain level of complexity, it probably makes sense to rewrite it as Java code that calls the Processing library. I never bit the bullet and performed the step, but I would seriously consider doing so before doing much more with the current code. The Processing syntax is pretty close to Java syntax, so theoretically it should be fairly straightforward.
I also owe a big thanks to Blender, which was a huge help for the animation and video sequence editing portions of the project. Blender is a powerful tool, but its learning curve is a bit high. In particular, it can be a bit tough to get your bearings for using the Python API. For my animation export plugin, I managed to get by by looking at and stealing code from other plugins, and by looking at the individual API function documentation.
Sharing and motivation
I debated a lot whether and how much to share about this project when it was in progress. I’ve really enjoyed reading other technical works in progress, such as Shamus Young’s Procedural City series. Given that I only had a few hours here and there to work on this project, though, I was worried that I wouldn’t be able to hold people’s interest, or that someone with more time and\or expertise would get tired of waiting for me to finish the project and beat me to the punch.
I needed to share with someone though, and I ended up sharing progress updates with Hack Pittsburgh and DevHouse instead of the Internet at large. It definitely paid off to share – seeing other people get excited about the project really helped motivate me to bear down and finish it, and I had a lot of good technical feedback along the way. I tried not to subject people to too many updates so that they wouldn’t get tired of the whole thing before the final result came out.
In the end I probably wouldn’t have had all that much to fear by sharing on the Internet, and maybe I would have had that much more motivation and feedback as a result. I’ll never know for sure.
What next?
I think there’s a lot more that could be done with this style of animation, and maybe with the tools I’ve written so far. For now, I’m taking a break from this direction for a bit, but releasing the code in case anyone else would like to give it a try. It should be possible to make some interesting animations with the tools in their current state with the monkey pictures. It should also be straight-forward to extend the tools into generalized tools for opportunistic stop-motion using arbitrary objects. Some ideas for improving the tools include:
- Better matching\rendering performance. Faster is always better, and I think with a little work it should be perfectly feasible to perform real-time matching and rendering. It could then be used to create on the fly animations by again ‘driving’ the character around, or digital puppetry techniques.
- Command-line matching\rendering tool. As I was iterating on the animation, I’d often end up needing to re-render parts of a sequence, or several small sequences. It would have been nice to be able to set up a Makefile to rerender everything that needed to be rerendered, rather than having to choose individual sequences through the GUI.
- Generalize to easily support other characters. This will require a little bit of refactoring, but should be straight-forward for the most part. Right now the biggest remaining pain is that the character must be modeled separately in Processing and Blender. The ideal solution is probably to model it once in Blender, and import the model into Processing.
- Collaboration labeling. The more labeled photos that are available, the better this technique will work. It may be possible to integrate with existing photo sharing sites such as Flickr, using tags to encode what characters are present in a photo and their positions\orientations. For an example of this sort of tool, see Colr Pickr. Alternatively, an open and independent database with a web services API could store this metadata, along with links to the photos.
Feedback
I’m taking a break from this project for now, but depending on people’s interests I may make more animations and\or improve the tools.
The code is still quite rough, but if you’d like to take a look, it’s now available on github: EepEepMotion
Let me know what you think!

