Writing

Feed Software, technology, sysadmin war stories, and more.

Thursday, August 9, 2012

One million trunked radio system calls logged

I'm pleased to announce that my Super Trunking Scanner project has just recorded its millionth call a few minutes ago. That call happens to be a little joking comment by a dispatcher regarding some good-natured ribbing between officers. They're out at Intel today watching some kind of "occupy" protest.

Much has changed since this project started. At first, it was running on supremely wobbly code. I had to worry about it locking up constantly and had calls to alarm() sprinkled all throughout. It also relied on running in a shell script loop. Now, it never locks up since the root cause was identified and eliminated. Software defined radios aren't exactly simple, and it turned out that disconnecting a significant chunk of a flow graph triggers races in the way they handle locks. My solution was to never disconnect anything. This works out fine because a receiver can always be repurposed for another channel or call.

Earlier this summer, I redesigned the site with Bootstrap. This had all kinds of benefits and has resulted in a lot more attention and interest in what it is and how it works. Other people are talking to me about building local replicas for monitoring those radio systems which are near and dear to them.

Besides just a huge user interface change, there have also been a significant number of features added in the past couple of months. The most visible is the ability to add short comments to calls. If you hear something interesting happening and nobody else has "tagged" that call yet, you can sign in and leave your own little message. This lets other users skip over the relatively boring routine stuff and get to the interesting things. A little community is starting to blossom here.

Related to the call tagging is the inline glossary. Certain terms when used in a tag will automatically be annotated with a short description. This way, when you see "10851", you can hover over it to learn that it is a "stolen vehicle". You can still click on [Glossary] to get the full list of terms and other helpful info as always, naturally.

A short alert tone plays at the beginning of tagged calls. This was a user request, and it's great for listening in the background or when you're not right by the computer. This way, when you hear it, you can navigate back to your browser tab and see what was written about the call by another user.

There is also now the ability to filter calls by talkgroup. If you really don't want to hear the electric company tracking down a line fault or the streets guys running their sweepers, you don't have to. This is also good for automatically skipping those long records calls if all you want to hear is dispatch and tactical operations.

Some users would like to share calls with others. To make that easier, I added a download link to the "ops" popup -- just click on the little cog icon for a call to see it. This way, the next time something funny, amazing, or exciting happens, you can send just the MP3 around if you want.

One request I got a few times was the ability to jump to a date and time. I am happy to report that landed a few weeks back as well. If you want to visit any time since the system went online over a year ago, you no longer have to play binary search games with call IDs. Just plug in the usual details (year, month, day, hour, minute), and you'll be taken straight to that time.

I've also fixed a few bugs or "misfeatures" if you will. Before, the list would fetch a fresh set of calls every 10 seconds or so. If you were playing back older calls, it would just keep going until it caught up with the present time. While my backend systems have no problems pumping out that data to clients, it turns out that web browsers really don't like dealing with huge tables and JavaScript objects.

So, now, instead of having a "roach motel" where calls check in and never check out, it maintains a modest window both before and after your "last played" point. This happens automatically and without user interaction, so you can still just click [Play] and let it run by itself. The difference is that your browser won't start lagging badly after a couple of hours. You should be able to leave it running indefinitely now.

Sometimes, there are network issues between the client and my servers. These are better handled, and are handled transparently if at all possible. That means a request will be retried a few times, and if it succeeds, you don't need to take any action. It's only after it's given it a few honest tries over a longer period that it will give up and let you restart it if you wish.

There have also been numerous small improvements to overall responsiveness throughout. Things should seem cleaner, tighter, and quicker overall.

It's been quite a year, and I can only wonder what's due in the future. Please check it out if you haven't already. Also, if you find this sort of thing fascinating and would like to chat about building a custom system for your own interests, please get in touch.