Scopes of Work

I’ve been programming professionally for 20 years, and there is one elusive document that still escapes me: the scope of work.

I have seen them… just rarely. There have been Bills of Materials wearing the SOW name tag, but open them up, and it’s just a parts list. Usually I gather scraps of information from meetings and phone calls and jot them down in a notes.txt file that lives with the other project documentation. It’s not great but it’s something, and plain text will outlive all of us.

I’ve written previously about the need for proper documentation to program “correctly,” and I stand behind those words. How can we hope to end up in the right place without a map to where we’re going?

Continue reading “Scopes of Work”

Async/Await & SIMPL+

I had a recent job where I needed to control NewTek Spark IO decoders. These little guys have a REST API that is fairly easy to use, but require HTTP, cookies, JSON parsing, etc. Perfect fit for C# instead of SIMPL! But the HttpClient class uses asynchronous calls, so getting it to play nicely with SIMPL means you have to work around the async methods since SIMPL+ won’t see them.

My first stab at writing code to control these things works, but the module throws an exception if I dispose objects too quickly. And if a device reboots, it’s hard to tell when it comes back until an exception throws. So my code needs some clean up! I’d like to write about that once I’ve had a chance to sit down and refactor it. In the meantime, I thought it would be good to do a small example of getting async/await to work with SIMPL+.

Continue reading “Async/Await & SIMPL+”

Q-SYS & Lua – Camera Presets

I think the Q-SYS ecosystem is great; they really got a lot of things right. Like all things on this blog, I’m still learning and documenting the process. Coming off a recent job, I want to share a snippet of Lua code I wrote that I found incredibly useful. Hopefully it will save you some time, too.

My first foray into Q-SYS programming was strictly audio, control being handled primarily by Crestron (via Named Controls). I still end up doing a lot of that, but have also had the joy of working in strictly Q-SYS environments too. Some things end up being easier if you fully embrace one, but often times we end up straddling between multiple control systems all trying to play nicely together.

I don’t design ’em; just program ’em!

Continue reading “Q-SYS & Lua – Camera Presets”

The Future of AV Programming: Part 7

2023 is coming to an end, and I’m so glad. This year has felt like I’ve stumbled out of one bad project right into the next. It’s been a constant battle of double-booking, short timelines, and delayed product. Everyone’s unhappy.

I thought it would be a good time to reflect on the challenges this year, but also to weave in my thoughts on where this is all headed in Part 7 of my Future of AV Programming saga.

Continue reading “The Future of AV Programming: Part 7”

Crestron + ZRC

Last time, I hinted that I wanted to explore connecting Crestron to Zoom Room Controls. I mostly run into this setup when a customer is replacing their video conference systems with Zoom rooms.

The scenario I’ll explore is: the user has a DMPS they’d like to continue using. They also want to be able to route non-computer sources to the displays once in a while (such as a cable TV box). They want to have 3 favorite channels available in Zoom. The user should have some flexibility to change the Zoom Room Controls without needing to touch the Crestron program (say they want to add another source).

Continue reading “Crestron + ZRC”