Tinara reimplementation begins
The Tinara project has again been reborn with a new design, a new language, and a new philosophy. This time, I truly believe that I will be able to release an alpha version within a couple of months.
Tinara’s design has now made a fundamental departure from other “similar” systems. Tinara’s rendering engine will not be intended to be run in a realtime context (e.g. as a JACK client). This does not mean that it cannot be run in realtime – it simply means that there will be slightly longer controller latencies (probably not enough to notice during typical usage).
The upside of this design change is that the rendering engine, as well as any future rendering “agents”, can be much simpler and more flexible (and less error/crash-prone), since they will be allowed to do normal things like allocating memory, and reading/writing files, if needed. The problem of latency during audio recording will be handled later, by adding a simple headphone mix system with realtime effects to the GUI.
Tinara has also been broken cleanly into several separate components (Renderer, Core, Cache, and GUI), which will communicate via TCP sockets. Eventually, these components will also be able to use named pipes under UNIX, and perhaps DDE under Windows. The GUI has also been broken into two components – one which is binary (for display, audio output, and media capture), and one which is scripted (for controlling and quickly altering/testing/debugging the logic of the interface at runtime).
I’ve also decided that Tinara will initially be implemented in the Ruby language (with the exception of the GUI, which must be written in C/C++ in order to interface with JACK). This will allow much faster development and testing/debugging than C++. As a result, I expect to have a working prototype in a matter of weeks rather than months. Once the program logic is stable, it should be fairly trivial to re-implement the Ruby classes as C++ classes (thanks to the excellent helper classes provided by wxWidgets).
Many of the recent design decisions were either initiated or influenced by Eric S. Raymond’s excellent book “The Art of UNIX Programming”. It is available in hard-copy from several sources, and is also available online. More info can be found here:
Among the many useful design philosophies I found from the book, two of the most strongly influential have been the Rule of Optimization:
and the Rule of Separation:
For more details on the design changes, see the doc/brain_dumps file in the SVN repository.