There are several ways I can go in implementing the Interface for the proposed work (The Multitouch DJing Tabletop), here I take some time apart to consider them all:
a) OpenGL (THE realtime standard programming language!)
Advantages: Using OpenGL is very straightforward and its available in various forms (3d/2d Engines, various object oriented languages and so on), it is by far the most efficient way to manipulate visual forms (specially in native code). Some of the related work uses OpenGL extensively, a usefull example is the hybrid solution: Mixxx.
Disadvantages: Although it is not a disadvantage “per se” of the language, in the short time we have for developing out work, OpenGL stands as a hard language, thus having some lower development curve apart from other fast-prototyping graphic languages.
b) ActionScript (Flash, the “new” phenomena)
Advantages: Flash is the new “de facto” standard as far as in-browser graphics visualization (numerous thanks to the social webbing and phenomenas like youtube or myspace that use Flash to support the data stream). Although I’m not a fan of closed-languages (Flash is not Open Source!) it has gained some very special space in the world. One of its biggest advantages it is the fact that it crosses the bridge beetween desing-programming, very easily. So an interface developed in ActionScript can be easily given to a designer for refurnishing… which doesn’t happen that easily in OpenGL.Another advantage is the extensibility of the language, very oriented to interactive systems prototyping!
Disadvantages: As said, it is not Open Source. The official Flash Player cannot ship as part of a pure open source, or completely free operating system, as its distribution is bound to the Macromedia Licensing Program and subject to approval. Thus being its main disadvantages. Also it is NOT a fast environment as OpenGL, it is interpreted and object-oriented. It serves for smaller purposes (usually 2D and not heavily iluminated/post-processed scenes) but is suitable for interactive purposes.
c) Java Swing (interfacing with coffee beans!)
Advantages: Java speaks for Swing as far as advantages, it inherits the good stuff from the java beans! It is also an interpreted virtual.machine language, platform independent and offering one of the best Object Oriented languages mankind has conceived. Fully extensible and very flexible when it comes to coding. Swing is an interface/windows environment to Java developers and can be used easily with new standards such as the OSC (through: SwingOSC ) which comes in handy for our project. Because it draws from Java classes its power it can be highly complex (concurrency, listeners, etc…)
Disadvantages: The virtual machine forces Java to perform slower than native languages, it is not directed to interactive systems (like ActionScript is) but has expressive power to address them.
d) Pyglet (Python says: “Graphics!”)
Advantages: Python is one of those newer languages that simple does A lot, being extended with Pyglet it can easily drop graphics for smaller games or UI. The advantages come directly from Python’s expressiveness and its full portability to various systems (also been ported to Java and .NET recently). It serves as a great bridge in projects that use multiple technologies.
Disadvantages: I don’t know the level of matureness of Pyglet (simply because I’ve never worked with it), also as a not-native language Python is not as fast as the more efficient solution.
All of the proposed solutions here are software independent, this is of course a mandatory detail that we must fulfill in order to achieve maximum portability/modularity.
All solutions are open and free, except ActionScript (more details on how to use fully OpenSource tools for Flash – very soon!).