At the end of 2020 I voluteered to help with an interesting project to do with Net Control for radio communications during emergency response. This subject was being discussed in a topic in the amateur radio JS8Call group on Groups.io.
The assistance that was requested was the development of a desktop software application that would communicate with JS8Call by way of its application programming interface (API) and manage call signs to keep track of all the people who were participating in the Net.
I was a software developer for my whole work career but my area of technical expertise is in the area of embedded systems where I would concentrate my efforts on things like the lower level interface to hardware such as GPS, inertial measurement systems and optical sensors and let others deal with the user interface.
I had already done quite a bit of experimenting with the JS8Call API so I somewhat bravely offered to pitch in and see what could be done. That started a six day marathon of coding and testing working with Gordon Gibby who is the creator of the overall net control concept to use JS8Call.
The end result ended up better than I expected and a first trial was conducted on December 31. I was not able to participate personally but I understand that it was a success.
I think that my choice of tools that I used to do this project is interesting and is my primary motivation for writing this project summary. The rest of this page is a bit long and you should quit reading right here if you are not interested!
I have developed a number of Node.js based applications that run on my server for home automation and these do things like scrape websites to get weather information lightning detection reports. I also have an application that processes images from my outdoor security camera and uses machine learning techniques to look for objects in the images and report them to me if there are any.
Those applications are all terminal based (a.k.a command line) applications with the only user interface being what you type in and then read printed out on the screen. They mostly run unattended except to maybe check on them once in a while.
I have tried to create desktop applications with Python in the past and there are a number of ways to do that such as wxPython, PyQT, Tkinter, etc, but I have never been very happy with the result and always gave up before I finished anything.
About a year ago after having a lot of success with Node.js on my server I started looking into what was available for creating user interfaces to develop a desktop application. I found that there were a number of ways to do that but they all seemed to use a web browser for that which really didn’t appeal to me. I did discover Electron which is a way to bundle Node.js and the Chromium web browser into an application and there are many interesting examples of that such as the Atom editor developed by Github and Microsoft’s Visual Studio Code. I have tried the Electron "getting started" tutorial a couple of times but there is a big gap between doing that and actually writing an application so I never really got anywhere!
So back to the end of December, 2020. There is nothing like a project with a short term timeline to help make decisions and focus on the requirements!
My code that I had already written to use the JS8Call API was with Node.js so I gave Electron a good hard look again and this time quickly got past the conceptual problems I was having before (also there is more information available now). Next was to decide on how to display the data and interact with it. I knew that it should be in some kind of data table format and so I started looking for a solution for that.
I got an immediate thumbs up and after that it was just a matter of getting all the under the hood plumbing in place which was great because that is more my area of expertise as I said before.
Here is a screenshot of the final application that we ended up with and it can run under Windows 10, MacOS and Linux:
Here are links to information about some of the things I talked about:
The discussion on Groups.io - https://groups.io/g/js8call/topic/net_communications_using_js8/79148254
Gordon’s document on Net Control - https://qsl.net/nf4rc/2021/ProposedNetCheckInProtocolV100.pdf
JS8Call - http://js8call.com/
Node.js - https://nodejs.org/en/about/
Electron - https://www.electronjs.org/
Tabulator.js - http://tabulator.info/
Download the application (Windows version) - https://www.rocketmanrc.com/downloads/NetControlJS8v005-win32-x64.zip
This is an Open Source project and in fact the source code is bundled in the application available by means of the download link above. If anyone is interested in looking at the source or working with it, send me note via the contact page and I will point you in the right direction.