Kingdom Hall Specific Branch for PTZ Camera Control


It was requested that, in addition to the generic version of the Camera Control app, I also provide the Kingdom Hall specific variant of the app. So, here it is: You can download the source or download the app/installer for MacOS or Windows respectively.

The main difference in the two branches of the app are the presets. In the normal version the presets are all just numbered buttons. The Kingdom Hall specific one uses various icons I created to show the general use cases for a meeting at a Kingdom Hall of Jehovah’s Witnesses.

You can still find the standard version of the app on it’s Github page:

KH Camera Control on Github:

Camera Control on Github:

PTZ Camera Control App

I was recently part of a team responsible for installing PTZ (pan, tilt, zoom) cameras at our local congregation. After looking long and hard for a quality and affordable solution, we ended up with two cameras from PTZOptics. One of the key features we needed in a PTZ camera was the IP stream and control. While the hardware for these cameras is great, the software left a lot to be desired.

The provided software was free and open source. That’s great, but it was a very old html and javascript app, all written with tables and inline css and javascript. In addition it was very buggy, some things as simple as typos meant entire features of the camera were rendered broken. So, I got started looking through the code and at first was just going to fix and clean up what they had provided. After spending some time with it I decided it would be worth it to completely start from scratch.

CameraControlThe base functionality of the camera is controlled through a series of urls passed over IP to a CGI script installed in the camera itself. This meant all I had to do was send a url with whatever parameters it called for to the camera’s IP address on the local network. I ended up doing this with jQuery and AJAX requests. The basic UI was built on top of Bootstrap overlaid with custom images and design for all the buttons and pieces of the interface. Rewriting the app also gave me a chance to implement some features the original didn’t have, like a kind of auto-pan function, and saving settings to HTMLs local storage for quick easy setup.

Once everything was in place I realized it could fairly easily be converted into an actual desktop app. Rather than using a web browser to access it, including all the clutter and overhead that comes with, I could have it run in it’s own window and keep the desktop much cleaner. I had never used Electron before but I had heard of it and knew that Github Inc. had built their Atom editor using it. Basically, it packages up web technologies (HTML, Javascript, and CSS) into native OSX, Windows, and Linux apps. After reading through some of the basic docs and going through the starter project I was pretty certain I could use it to build my web app into a desktop app.

A few terminal commands later I had a native Mac OSX version of my web app. This meant I could give it an icon, have it startup with the computer like I needed to, and keep it contained in it’s own small window. Probably my favorite part was designing the icon; I think it turned out pretty good. Once I had a basic app working I continued to tweak it until it felt solid. The last thing I did was to open source the project so anyone else in need of some better software for the PTZOptics cameras would have something more than the buggy old stuff to work with. If you’re interested in the code you can find it over at Github available under the GPL 3.0 license.


Added compiled, ready-to-use, release version of the app for both Mac OSX and Windows. You can get’em at GitHub here.

Open REST API for Trivia Questions

Just finished the first draft of a new open API I’ve been working on for access to trivia questions. If you want to signup for an account (all free and open, remember) you can then make calls to retrieve questions, tags, and categories. You can also post your own questions if you’ve got ’em.

Here’s a sample call to retrieve 20 Jeopardy style questions at an offset (basically pages) of 2:


Here’s the response (all responses are JSON):

[ { "id":"106", "user_key":"1", "style":"standard", "difficulty":"0", "category":"Firefly", "question":"From what facility did the ship's doctor Simon rescue his sister River from?", "answer":"Mental", "tags":"sci-fi,pop-culture,western,firefly,serenity,tv,movies", "meta":"", "image":null, "reference":null, "datecreated":"2015-07-21 23:31:43", "datemodified":"2015-07-27 16:39:07" }, { "id":"107", "user_key":"1", "style":"standard", "difficulty":"0", "category":"Firefly", "question":"Simon and River's father had this occupation.", "answer":"Doctor", "tags":"sci-fi,pop-culture,western,firefly,serenity,tv,movies", "meta":"", "image":null, "reference":null, "datecreated":"2015-07-21 23:31:43", "datemodified":"2015-07-27 16:39:07" } ]

For more details on how to use the API check out the homepage:

From Idea to App in One Week

I recently had an idea for an app. Something to help keep score while playing basketball. Great, not really a big deal, should be able to do this in a day or so. So, it took about a week once all was said and done, after which it sat in the Apple App Store queue for longer than it took to actually create.

The first thing I did was put together some rough designs in Photoshop. Initially I was thinking it would just be an iPad app, but after talking to some other people I decided to add the iPhone version too. This bit set me back a few more days, thanks to those gaul-dern Adaptive Layouts.

Setting up the basic mechanics of the app was pretty straight forward, plus buttons add points, minus buttons take away points. Two teams, the classic red vs. blue. Each with their own score controls. I really wanted to make the scoring process quick and easy, with big buttons you can easily see and press while actually playing basketball. I imagine the player keeping score would run over to the sidelines to quickly add points or check the score.

From there I realized I wanted to add a game countdown timer to help fill out the app feature set. Just a timer wouldn’t be very useful during a game, but a timer with beeps for the last ten seconds and a final game over buzzer would make everything better. So, that’s what I did.

Once I had all the code in place I could add the iPhone version. I had yet to use the Adaptive Layouts in xcode for iOS 8. I really wish I could use CSS. Adaptive Layouts sound great on paper, but in practice, they don’t really seem to be made for graphically unique and complex interfaces. Also, Interface Builder sometimes seems to randomly adjust things that I thought were already set. It’s a very frustrating experience using one single storyboard for both iPhone (in all it’s crazy sizes) and iPad (so much easier).

Thinking I was going to use the same design for both iPad (my original design) and all iPhone sizes turned out to be a mistake. It ended up being easier and a better UI/UX once I decided to do a separate, streamlined design for iPhones. This meant choosing a compact width device Size Class and disabling pretty much everything and recreating them with different graphics for the compact width devices. It was frustrating but I think made for a much better app in the end.

All in all, I learned a lot about Adaptive Layouts and Size Classes. Things that will definitely help with future projects. I feel like I made a pretty good app given it’s limited use case and the time put into it.

Big Update to my Game Buzzer iPhone App

I’ve been working hard on adding new features to my connected game buzzer app for iPhone. It’s been on the app store for a little over a year now and I really haven’t done much with it. Once I started the update process, it quickly became much more of a complete overhaul.

There were so many things I wanted to do that just adding them felt like just as much work as redesigning completely, so, that’s what I did. It may have taken me a bit longer than I wanted it to, but I think it’s totally worth it now that it’s finished.

Now that the updated app’s submitted to Apple, I need to turn my attention toward marketing efforts and that means the website for the app. Making an app is not simply making an app.

Once it’s all done, the new app site will be here.