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
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, 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 been released.
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
- 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 files.
- 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 current.
- 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 product.
- 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 XML. Publish 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
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 changed.
- 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
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 labelled 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 SQL database.
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
||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
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.