For the benefit of the community, and so that Buck can get a wider response from other members I'm posting relevant portions of an email to me on the subject. Buck, I also replied this to you in an email; I'm just copy and pasting from the mail that I sent back to you. I cut out some portions of the email for personal information purposes and just left what is relevant for my response
Originally Posted by BuckNekkid
Good Morning Sam,
"Thanks" for the great suggestions on what I want to do. It's like you were in my head, LOL! The last programming I did was in binaary, assembly, and Commodore Basic back in the 80's, probably older than you are.
How hard would it be to write a program to do all of this in say, Debian? DO you know anyone who could help me?
You were spot on in my thinking. I want the "program" to only work with my "customers". I don't charge anything for the data, as it's being used by ham radio operators in the NOAA SkyWarn weather alert program. The whole purpose is to give those groups information about their local Emergency Responders they can program into their radio scanners and hear what the fire and police units are doing or reporting as of bad weather. Without the "software" the website would not let them in, in any way to see the data that is there. The "customers" could not add or change the data, that would be to me. They would just have to e-mail me with the correction or addition.
And here is my response ----------------------------------
I'm going to go out on a limb here and make some recommendations based on personal experience. How the server presents the data to the client and how the client does the authentication I'll leave up to you. Here's some stuff to get you started though.
I'm not sure I can help you to the degree you require however I can give you a point in the right direction. If you have never done programming before then you'll need to learn that. One language I recommend which is relatively easy is Python and a great language for beginners. Here's an MIT opencourseware course on how to learn Python which has Video Lectures.
There's also a good course on Python from Udacity which teaches python and the process for building a search engine. This will help to introduce some web concepts to you and allow you to offer your data as a service using Python.
You can obtain python in a couple of ways. If you're on Linux you can simply install it from a software repository. If you're on Windows you can use the official Python website.
There's also good Python documentation.
MySQL with Python
In addition to that, I would recommend a MySQL database as your backend. You can google around and find MySQL support for Python. I googled for "python mysql" and found the following package. Additionally, you can look up "MySQL tutorial" or "how do I create a database in MySQL", etc.
I googled "mysql-python tutorial" and found the following article on how to use it.
Python as a secure service
You'll want to utilize secure connections with the server (i.e. https) so I googled "python https" and found a decent write up in just using a few short lines of code.
Since you are creating a secure connection between just the client software and the server (i.e. you're not serving the data publicly with a web browser) I recommend you create your own certificate authority and digitally sign your own certificates. This way communication is secure and you don't have to waste money on buying a certificate. For that purpose there is a great article listed here.
Just remember that you need to install your certificate authority public cert in /etc/ssl/
on the server and the client needs to have the public certificate itself to communicate.
Client side options
If you're developing the client software for Ubuntu or Debian (or any Gnome based Linux) I recommend you develop the application using "quickly" assuming you need to use a GUI for your clients.
Windows and other platforms
If your clients are Windows machines, I would say that you should develop using something like Qt because you can develop the application for all 3 major platforms (Windows Mac and Linux). Though you would need to learn some C++ for this which there are good tutorials and books on the subject. Just google around for them. You're required to open source the application unless you pay for a commercial license though. Which can be a draw back given a limited budget and assuming you don't want this to be open source.
Though, an easy to learn cross platform language is Pascal (no, it's not dead yet) which you can develop a http client app for Windows. Lazarus is an open source IDE for freepascal and if you already learned Python it's not that big of a step to also learn Pascal.
Windows Automated Installer
If you wish to create an installer for your application then I recommend NSIS (Nullsoft Scriptable Install System).
There's a great IDE for NSIS called HM NIS Edit. You can see the page here. It comes with a wizard to initially generate an install script.
If you don't need a GUI
You could simply write a python script (and only distribute the pyd which is compiled python binary) that when opened by the user the first time they need to enter some information (which is emailed to you by the Python script) so that you can set up the server keys. And then when the user opens subsequent times it will automatically download the latest data based on arguments using optargs or some other Python argument library. This way you don't need to care what platform is being used you can just communicate using Python. This would require Python to be installed on the client machine.
Other client side information
I just briefly touched software and languages you could use. For creating a hash you could take some RAM information and processor information and create a hash from it. On a Linux system, for example, you could create a hash on /proc/cpuinfo and use that as part of the authentication. Or you could just take certain parts of that file and hash it and use it as a code. Basically, the hash can be anything you want. If you're using python as a client side language you could google "hardware info python" or the same with any language.
Basically I made some assumptions and created a scenario for which you could launch the development of your software. This doesn't mean you have to take my advice. There are other ways of doing it. But handling the details and particulars could take me hours to explain what you *could* do or what *I would* do. This entails gathering specifications on the technologies used, the goals of the project, etc. etc. That I'll leave up to you since it's your project. I have limited time on my hands so if you're stuck somewhere ask in the LQ forums rather than messaging me directly. There's plenty of people on LQ like me who would be able to answer your questions even better than I can.
And here is the end of my response ----------------------------------
I forgot to add on to Python as a secure service. Here's an example of a server in Python actually serving arbitrary secure content.