Tool Selection - fmsbeekmans/jest GitHub Wiki

Language

Our language of choice is Clojure. The reason we chose for Clojure rather than a more established language is that this project requires a rapid development cycle. REPL-based development is very suitable for this task, and since Clojure is hosted on a platform it has access to all the libraries of its host.

Platform

Given the choice for Clojure, the most suitable platform for our application is the JVM. Javascript is too limited, and Clojure on .NET misses a lot of the tools required for a succesful software development cycle.

Game Engine

Neither one of the game engines considered were suitable for our needs. MT4J is an abandoned project which was left in an uncompilable state. Getting it working would be a significant time investment. JMonkeyEngine is a complete solution but lacks multi-touch support, and is heavily focused on 3D development, while our application will be 2D. We have decided to build our own engine.

Graphics Library

For graphics, we've decided to use Quil, an idiomatic wrapper of Processing for Clojure. Quil offers rapid REPL-based development, and unlike the alternative we considered, Penumbra, it is still actively maintained and works with the latest version of Clojure.

Touch Interface

For Touch input we'll use TUIO, a generic protocol for various kinds of multi-touch devices. This allows us to test our application on more devices than just the target platform at the Gemeente Delft. The alternative, using Windows-specific libraries, did not offer us that possibility.

Gesture recognition

We briefly considered using a gesture recognition framework, and investigated using iGesture for this purpose. However, this and similar libraries have the disadvantage of only recognizing completed gestures. This, and the complexity added by a gesture recognition library far outweight the advantages of using this library. Since the gestures required for our project are not very complex, it'll be more easy to write our own gesture recognition rather than using a library.

⚠️ **GitHub.com Fallback** ⚠️