©1996-2017 Roedy Green of Canadian Mind Products
This essay does not describe an existing computer program, just one that should exist. This essay is about a suggested student project in
Java programming. This essay gives a rough overview of how it might work. I have no source, object, specifications, file layouts or anything
else useful to implementing this project. Everything I have prepared to help you is right here.
This project outline is not like the artificial, tidy little problems you are spoon-fed in school, when all the facts you need are included, nothing extraneous is mentioned, the answer is
fully specified, along with hints to nudge you toward a single expected canonical solution. This project is much more like the real world of messy problems where it is up to you to fully the
define the end point, or a series of ever more difficult versions of this project and research the information yourself to solve them.
Everything I have to say to help you with this project is written below. I am not prepared to help you implement it; or give you any additional materials. I have too many
other projects of my own.
Though I am a programmer by profession, I don’t do people’s homework for them. That just robs them of an education.
You have my full permission to implement this project in any way you please and to keep all the profits from your endeavour.
Please do not email me about this project without reading the disclaimer above.
Every program has a different way to find out that a new version has
Unfortunately there is no standard way to check. Further, it is very common for
updates to go unnoticed or to get lost. Further, many manufacturers will notify you of
micro updates, but not of major ones, or of ones for which there is a charge.
- Some automatically install a new version.
- Some send you an email.
- Some notify you when you run the program.
- Some check for updates when you click a menu item.
- Some you must visit the vendor’s website.
- Some you must probe the PAD file.
What we need is a uniform, quick, automated way of discovering if any of
your software is out of date. It works like this. You maintain an
SQL (Standard Query Language) database on a webserver that contains the following
information about each product.
For each customer you maintain the following information:
- Product name
- Current version
- Information on how to get the new version, e.g. URL (Uniform Resource Locator),
some menu item to click etc.
- Cost of the new version.
The customer then daily runs a little program that does a lookup by ID and sends
him a list of his products that are not current. If the customer does not check in for a
few days, you send him an email with that information in human readable form. You could
also provide a web interface where the customer must provide an ID and password.
- Customer id
- salted password
- Customer name
- Customer email
- List of the software he has installed.
- List of the versions of the software he has installed.
- List of the latest versions of the software he has installed.
This leaves the question, where does the information for the product versions come
from. Here are some possibilities.
- You probe the PAD (Portable Application Description) file. PAD
files are standard XML (extensible Markup Language). It is already an
established standard format for describing programs. This is easy and automatic.
- Talk vendors into supplying PAD
- You ask vendors to send you notification, perhaps in some standard format, perhaps
a severely stripped down PAD
- You do it manually, checking a list of websites.
- You run copies of the software and check with them periodically what is
- You screen scrape with little custom bits of HTTP-GET code on the vendor’s
websites to get the version info. Unfortunately, you must write custom code for each
- You invent a computer and human-friendly screen-scrape format text file send it to
vendors to put on their websites and ask them to keep in current, e.g. a bit of
the format and hope it catches on.
The overhead on your server is almost nothing. This
means you can service a very large number of clients with just a desktop computer. The
customer does a single tiny record update and gets back a single tiny binary record. The
process of propagating the knowledge of a new version to all customers that use it can
happen in the background as a batch process.
You could finance the plan with Google Adsense ads, or with a small yearly fee.
This is a much simpler approach to the
same problem. You write a Java Web Start application. It has no central database. Every
user is responsible for configuring his own apps. It displays a JTable with 6 columns:
- The first column is a status indicator using icons.
- The second column is the name of the application.
- the third column is the current version number.
- The fourth column is the URL of a webpage that can be used to test if the version has
- The fifth marker column is a string that exists somewhere on a webpage if the
version has not changed. It would usually be the version, but it could be date, or some
text in a revision. This string can alternatively be a Java regex to search for on the page. It might be necessary to
add other criteria such the header date on a file, or the existence of some file.
- The sixth column displays the date the version last changed.
side by side
The sound like a golf ball falling into a hole is what VerCheck makes when it has finished checking all the applications and it is saving the results in the registry.
This program is primarily an exercise in using JTables. The user can fill in the app name, url and marker, add, delete,
revise, sort etc. Then the user hits a button labeled check for new
versions. The program then uses an HTTP GET to fetch each page and search it for the string. The
program must persist the data between runs, perhaps using the preferences tools or perhaps the new bundled Derby
icons used to describe applications
|Icons Used in VerCheck to Describe Applications|
||invalid, e.g. bad date, bad/missing URL|
||status not yet determined|
||In the process of contacting and checking this website|
||Could not contact website, or possibly the page is missing. Could indicate a version change.|
||Unchanged, released over a year ago|
||Unchanged, released in last year|
||Unchanged, released in last month|
||Unchanged, released in last week|
||Version has recently changed. A new version is available. The marker is out of date.|
icons used on command buttons
|Icons Used on VerCheck Command Buttons|
||add application at the spot selected|
||remove selected application|
||Check all websites for new versions|
I have written a version of this simpler version I call VerCheck. I use it to maintain the utilities page.