History

Early work

In 1994 there was a call for help from the swedish contest manager about software for supporting the contest result management for the activity contests. He had inherited an old GW-Basic program from the previous manager but that program no longer worked reliably. I answered this but before any work was done the most immediate problems were solved.

A year later a new request was sent out. I answered again and this time got the assignment to make the software work better. I never even though about upgrading the old software. Instead I started writing something new from start. Earlier the same year Borland had released it's new windows development environment Delphi. We had bought it at work and since I liked it so much I had also got a license for myself, so delphi was the natural choice.

On december 7 1995 the first user interface draft was done and was sent to Derek for review. In the software version management software I wrote the following:

Detta är version 0.0.0.0
Den har skickats till Derek för att få hans synpunkter.
Ännu är funktionaliteten begränsad till själva prorammets utseende.

Today i do not know if he got it working. I have no records of any feedback, but that could have been over the phone and even if I keep every single outgoing and many incoming mails I get I do not record whats said over the phone.

Once more he got the old software working again but during 1996 I kept working on it so that it would be ready for serious use by 1997. On 13th december 1996 version 0.5 was shipped and 15th january 1997 version 0.6. With this version only two major things were missing.

Both these points were adressed later that year, even if the EDI support was kind of minimal.

First stable release

Version 1.0 was relased 5th of January 1998. By that time I was sure enough the software was working. The previous versions had been used to produce results during 1997 and only minor problems had been found. I had also run a lot of tests with fake data to find bugs not easily found during normal use.

Even if minimal EDI support had been available for some time it was not until version 1.1 was released 16th of August 1999 EDI really became useful. It was kind of at that time internet had exploded aswell and people really started using EDI files to send in their logs. This had been a major undertaking and several thousands of new lines of code had been produced to handle this.

Modelling and code generation

Since that a lot of versions have passed but no major rewrite was done until in 2004. The internal structure had not changed since the software was new. Borland was dropping support for their database engine (BDE) which I had been using. I wanted to be able to add QSO-checking between logs and the code was kind of filled with DB code everywhere. Something had to be done.
I decided to go firebird for starters. I also decided I wanted a new DB structure and DB access classes separated from the rest of the code. To draw the DB-schema I eventually found ArgoUML. Using that tool I could do serious analysis and managed to get most of what I wanted modelled. Since it's a freeware tool nothing is perfect but the developers are active and today it's much better than when I found it.
For the DB access classes I wanted to use code generation. No acceptable tools were found to start so I started writing a XSLT transform that would read .XMI files from ArgoUML and turn into code. This very soon turned out to be a too large task. So after some additional looking I found UML-QVT. This tool takes XMI files and does an initial transform into what they call XMI-Light. That is a simpler representation of parts of UML and writing the stylesheets to produce code was now much easier.
It took a lot of work anyway to get stuff working. My family must have thought I was crazy because even during a party at my sister I brought my computer so that I could produce code while not eating... Anyway, on 4th January 2005 version 2.0 was released. The last two days I had to drop support for the new 28MHz contest which I had originally intended to support. The rules were simply too different.
After this I have had to make > 10 fix releases during 2005 due to errors. Of these the first 5 were during the first 35 days after release!

As the year proceeded the contest manager started complaining about the program beeing slow. Well, I had checked and seen no problems so what was he really talking about. In June I tried with one of his databases instead of my test data. Well, importing a log took > 3 seconds per QSO. What had happened? I started searching but did not find the reason to a start. It had to be the database itself since I could see that my code was not doing anything bad. But as always it turned out I was to blame. I had used a TIBTable component where I really should have used a TIBQuery component. That caused every single record of a updated tabel to be re-read after an insert. For each QSO stored i would get:

No wonder it was slow. there were >30000 records in that table.

This is were code generation shows its very best strengths. To change this I only needed to change the code templates in the generator and then I could regenerate all those files where the wrong component had been used. Time to fix <1 day. No bugs. Had I done this by hand in each of the 16 files where it's used I would sure enough made a typing mistake somewhere that would not have been discovered until too late, plus that it would have taken much longer to fix.

Log storage times were now down from 3 seconds per QSO to about 0.6 milliseconds per QSO. A log with ~300 QSOs that previously took 15 minutes to store would not take something like 0.2 seconds. Quite an improvement.

Lets go for 28 again

The main reason I had to drop support for 28MHz before last major release was that the rules for scoring was so different than for all other bands. In the rules for 2006 the rules have been changed to be the same so now it was time for another attempt. Once again the strength of a good database model was evident. As I started to upgrade It felt as I would have to change a million places in the code. Sure there was a lot of places to change but most of these were due to the fact that I had not been a good boy and used the database model properly. Some of these have now been changed and most of the others are marked with TODO so that I can change them later on. When so have been done it will be even easier to add more bands and sections to the contest.
The current version is 2.2.1, which has almost all of the rules of the swedish variant of the NAC implemented. The rules that are not implemented are those that are not suitable for computer checking, like if the log was sent in before the deadline.

More new bands

During 2006 there were an opening for use of the 3.4GHz band in Sweden. Coneseqently I added it aswell. There were also a few minor fixes during the year, for instance I had made a mistake when it comes to contest dates for the quarterly contest.

For the year 2007 there was only a minor change in the rules regarding yearly results. I have implemented this and also added the 70MHz band just in case. You never know when someone gets a license application through the authorities. The have actually not said it is impossible, just that they will treat it somewhat like 50MHz. You may come in with an application and they will treat it as a commercial application and grant you allocation to specific frequencies of they are not in conflict with other users.