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”

Field Work

When I started working for a national AV integrator in 2010, I had to fly almost every other week. It was expected that a programmer would be on-site for final commissioning, but sometimes I could get away with only flying in for the last couple of days. This pattern continued for quite a while: office for one week working on next week’s programming, then in the field the second week for commissioning. Rinse and repeat.

It didn’t always go to plan though. I also had service calls where I would be dispatched during the time I’d set aside to work on programming. So I would lose time driving to a local client, only to troubleshoot wiring issues or faulty gear. Good use of billable programmer time! This did teach me not to spend more time than necessary in the office working on offsite programming. I would try to finish as quickly as possible because I knew I couldn’t count on having the full week to work on it. I was also salaried so the expectation was: get the job done, who cares about your hours.

Then I got married. We had kids. I couldn’t be away from home quite so much, so I tried to push back on travel and opt for more remote work. My team finally got work to pay for TeamViewer licenses (that I’d been using freely for years at that point). I think the reduced amount of travel improved moral, but it did make commissioning harder. What I used to be able to turn around in a day or two started taking three, or even a full work week. Maybe not as productive as I once was, and sometimes the difference in timezone meant working long into the night. Trading one unhappiness for another.

So anyway, what sparked this post is: I just got back from a trip to Washington DC. It’s very rare for me to travel at my current company but every time I do, I’m reminded why. I lose a ton of productivity when I’m in the field.

If I’m in the office, I’m frantically trying to program 2 or 3 jobs that are all happening at the same time. It could be more, but thankfully I made 2024 The Year of NO! so a lot of programming work gets contracted out again. I’m also a team of two now, and it has helped immensely for me to regain some sanity! Haven’t recovered any time yet, but I suspect that will happen sooner now. So while I have reduced my workload, I’m constantly inundated with emails and phone calls. I’m a manager, but my team isn’t large enough for me to delegate most of the work. I’d really like to get another programmer on staff for the West coast, but that will have to be 2025 goals.

When I’m in the field, I do my best to focus on the customer in front of me. I can’t split my time like I do at the office. This means I say No! to a lot of help requests that come to me. I have to. I can’t get bogged down working on some other problem when I’m taking up a customer’s time and using their space. But just that those requests keep flooding in is still enough of a distraction, it slows down the work I’m trying to do.

This last trip spanned a weekend, and while I feel like a tool for giving up a weekend for work, I’m always amazed at how easy things are to do when I don’t have a constant interruption battle. Like, I could quickly find and fix bugs in programming because I could focus on what I was doing. It was a reminder that my time estimates have skewed over the years to include all the communications bullshit that pulls me away from getting actual work done.

I feel like we’ve done this to ourselves. There are too many communication channels now, and they’re all flooded with noise. If I could, I would mandate the following uses:

  • Email for low priority messages, task assignments, or distribution group messages (maybe not low priority in that case)
  • Teams chat for quick questions or sending documents for review
  • Teams or Zoom video for meetings (if not everyone is located in the same office)
  • Text message or phone call for urgent things

And that’s it! If I could switch to only checking email messages a handful of times throughout the day, I could recover that focus I’ve lost. And working in the field over a weekend reminded me of what could be. But that is not the culture at our company. I tend to get someone using at least 3 of those mediums to convey the same information.

I’m about to post this, and I see that WordPress has added a bunch of AI tools to the publishing checklist. I somehow feel that AI is going to make the problems I stated above worse because it’s only going to add more noise to the mountain of communication I have to sift through every Monday – Friday.

Burnt

I haven’t written a word in months because my work schedule has eaten away at my mornings and evenings. The workload has been insane since last year. I do miss writing; it’s a good outlet for maintaining my sanity.

I have ideas rattling around that I’d still like to explore, and I think this blog is still a good place to do that. But I can’t bring myself to stay on a computer any longer than I have to after putting in 12 to 14 hours everyday. I’m mentally exhausted at the end of the day, and I don’t want to spend any more time away from family either.

Our industry ebbs and flows, it always has. It’s hard to track from one year to the next when the busiest times will be. I’ve had distinct memories of suffering through March–trying to close out fiscal year business–but I’ve also had other years where end of summer turned into a death-march–trying to get things lined up for 4th quarters. The whole of 2023 was brutal and the project schedule continued right into 2024 without any let up.

I’m taking 15 minutes to write this for 3 reasons:

  1. I miss writing
  2. I’m waiting for a callback
  3. The techs I’m supporting across 3 jobs today are all busy working on something else

I do think things are getting better. I would like to spend time thinking about project planning and schedules and to figure out how to stay out of this situation, but that’s asking to fix a lot of things that are out of my control. I can only control my actions.

Thank you for reading.

Fixing Home Movies with FFmpeg

My dad converted a bunch of old taped home movies to MP4 and gave them to me for Christmas. I copied them all to my Plex server since I thought having them on-demand would be pretty cool. Unfortunately, a lot of them ended up rotated 90 degrees and–surprisingly–there’s no way to tell Plex to rotate on playback.

I kept thinking there’s got to be an easy way to fix the rotated movies so they play back correctly on my TV. And then I remembered the Swiss Army Knife of video playback tools: FFmpeg.

Continue reading “Fixing Home Movies with FFmpeg”