1

Topic: API?

Recently I've been tooling around with some Python GUI toolkits for reasons not at all related to Nions, but seeing how easy it is to create complex interfaces with such tools got me thinking of how it could be applied to Nion projects. While NWare(IMHO) is still most capable DSP software development platform I've come across, the development process is still almost entirely manual. For example, a large user interface consisting of many otherwise identical 'panels' controlling different subsections, this means large amounts of copy-paste operations and manual modification of each instance. In traditional programming, GUI or otherwise, this approach is generally avoided at all costs.

So, what *IF* there was a 3rd party application API available for the Nion products? I could see this API as actually two distinct parts: a network driver(or pandad interface) and a GUI toolkit. The former would allow applications to seamlessly integrate into Nion networks without the fuss of having to manually manage aliases. Not to knock RATC, but a native interface would be much cooler. A possible alternative to using pandad would be access to the inter-Nion protocol specification, allowing development of a cross-platform interface. Finally a GUI toolkit would allow interface applications to retain much of the look and feel of NWare/Kiosk without having to spend large amounts of time reinventing widgets. The net result would support development of large, sophisticated interfaces in a much more manageable manner.

2

Re: API?

Jason,

API?  Boy, I'd agree, it woud be nice, but what a mess in terms of how it should work.  We're not talking 'disconnected client server' stuff here, we're talking 'realtime systems' programming.  Issues like how it would work in the design-time environment vs run-time, multiple client run-time, etc.

For instance, how many programming devlopment systems are set up for things like having eight vu meters running at once?  Today, almost all of them are designed for scalable systems, which normally means disconnected, stateless clients.  IOW, kind of the opposite of real-time systems...

You're kind of hinting at issues like object reuse and inheritance, and I've also thought about those things, but haven't really wrapped my head around how I think it might (or could) work.

Then again, someday there will be NWare 2.0...

Greg

3

Re: API?

A mess? Actually I was thinking, perhaps erroneously, quite the opposite. To explain in less abstract terms, I'll use an example of a system I worked on which resulted in a rather involved user interface. It is a BGM system, so, as you might expect it is comprised of several zones. For simplicity lets say that each zone has a level, mute, and source parameter that can be adjusted by the user. There is quite a bit more to it, but this should suffice for the arguments being made.

Now the user interface has lots of little control panels for each of these zones and their associated parameters. Aside from being assigned to different zones, the control panels are essentially exactly the same. So in Nware one must copy-paste an instance for each zone and then manually assign them to the correct parameters. As you can imagine, this is a very labor intensive and error prone task. In reality, these type of operations took at least 75% of my time during development. Coming up with how to make something work was easy, it was deploying features across the many instances where they are needed which was far and away the most trying. To top it off, the result is equally difficult to maintain. Say for instance you would like to modify these panels, to add a feature or fix a problem, you must once again traverse every instance manually.

Another stumbling block is the incorporation of user data into the Nware application. By user data, I mean data that is created and changed by the user: things like presets. This should be distinct from system data such as
signal flow, low level gain staging, CobraNet bundles, etc. An example of the disadvantage of these being stored together is the resulting static nature of user data. If the user wants to add more presets than the system currently has, one has to actually modify the system and redeploy. You would also have to ensure that your modifications include the existing user data already created. Something which can be quite difficult if the modifications take a large amount of time compared to how often the user changes his data. Say you start working on some updates on day 1, the user continues to use the system making whatever changes he needs, and when you're ready on day 4 with your mods, what about the user updates made since day 1?

When revisiting this example project, and considering how to expand and improve upon it, my first reaction was to turn to the nControl product. While it made up for the processing power lacking in the Nion devices, it has the same exact shortcomings due to its programming environment. For these, and other reasons, I'm coming to the realization that if I were to approach a control-intensive project for which the nControl seems to be targeted, I would actually prefer not to use the nControl.

Obviously I can implement whatever I can dream up with the platform of my choice and use RATC, but that's really no different than any of the other network based DSP platforms available, albeit for the usual audio signal flow stuff, I think Nware is better than the rest. What would set a product apart would be the availability of an API. Not only to allow a very high level of integration, like what pandad or a pandad-like interface can supply, but also a native look and feel if the application is a GUI. With regard to GUIs, modern GUI toolkits are extremely well geared to developing UIs in a structured, modular manner. For storing data, well that's obvious, today's databases do exactly that, and very well. Coupled with a Nion API and a good dynamic programming language, it becomes rather straight forward to realize applications far beyond what can be done with nControl, and even popular control systems such as AMX or Crestron.