Not for the first time, I’ve been busy working to get a new Praxis LIVE release up prior to a trip to Toronto (any local Praxis LIVE or NetBeans people want to meet up, get in touch!). Praxis LIVE build:130831 is now available for download, though not (directly) from the usual place. As readers of Geertjan’s blog may have noticed, Praxis LIVE now has its own funky new home on the web – www.praxislive.org Along with the new website, the logo and splash have been reworked (based on a capture from a GLSL shader running in the program itself, incidentally).
Still, this release is not all about good looks …
The root of the issue (33)
This release brings a major architectural revision and performance improvement in the abstract root class used for all the built-in root components. If you’re happy not to get into the technical details, you can take that as read and skip to the next section.
If you’re familiar with the underlying architecture you’ll know that Praxis LIVE uses a non-blocking messaging system. In previous versions, queued messages are processed on receipt when idling or running with the built-in processing loop. However, when being driven by an external process, such as the video renderer, messages were only processed at the beginning of each frame – there was no way for an external process to poll the queue when inactive between frames. This was not an issue in normal usage until the copy & paste and import facilities were added to the last version – it then became apparent that trying to import large graphs hit this bottleneck, with imports taking at times minutes to complete. This release fixes the issue.
In the previous version of Praxis LIVE, the video renderer would render a frame -> sleep until the next frame -> update the clock and process messages -> render the next frame. This has now changed so that the renderer renders a frame -> updates the clock to the time of the next frame and processes pending messages -> continually polls the queue until the time of next frame -> renders next frame. This not only solves the problems above, but spreads out and reduces the cost of processing messages.
Alongside all of this, the queue was enhanced to allow Runnables to be posted, and a general invokeLater() method added. This allows for the removal of one of very few places that locks were used in Praxis LIVE – processing of incoming data from hardware such as MIDI input and TinkerForge components.
All welcome to start
This release brings a new Start or Welcome page that opens each time the program starts. This currently provides a series of links to resources on the new website, as well as performing an update check to see if your version of Praxis LIVE is current. The content on this page will evolve into more of a general dashboard with links to new web content, etc. over time – similar to the Welcome page in the NetBeans IDE. It can also be switched off in the Options.
Having delved into the code in the NetBeans IDE’s welcome module to work out how to do some of this, I’ll post a blog on the technicalities sometime soon, as I couldn’t find a lot online about implementing this sort of feature.
I’ve been a fan of TinkerForge components for some time, and have finally found some more time to work on the Praxis LIVE bindings for these. This release brings additional bindings for the IO16, Linear Poti and Joystick bricklets, and the Servo brick. I’ve also improved bindings for some things that were already there.
This release also brings the ability to set the UID to <auto>, using the first correct component found – something that not only makes it a bit easier to get started, but finally allows for example patches to be shared. I’ll do a full blog post on using TinkerForge with Praxis LIVE soon – it’s a great way to work with these bricks and bricklets without needing any coding experience (though of course you can always drop down to code when you really need to).
That’s not all folks
There’s a fair bit more included in this release – check out the release notes for all the details. I’ll end with a video, but not from me this time. SubPixel is an Australian VJ who contacted the mailing list recently with some feature requests, some of which made it into this release (see, pays to ask! ) This is a video he made driving a GLSL shader through audio and various forms of animation. He shared the project with me recently, and although you won’t see it in this video, there’s also a really nice UI built using the Praxis LIVE GUI components. While he’s not the first person to share projects they’ve built with me, this was the first time I’ve looked at one and thought “How the hell did you do that?” – awesome!