Some choices I made:
Backend database is sqlite. Great for speed. Easy to transport the
database around (even for computer illiterate chiefs/chairs) as its a
single file and pretty much every hosting site has support in some
fashion.
Type support for things like datetime have to be agreed upon between
different languages reading the same file as its not specific in the
database itself. Also have to build your own remote support if you
wish to access it across systems. Both of these can be quite the
pain.
All of my primary applications are written in Java. Partly I'm
familiar with it and the apps can run on multiple platforms. Thought
about some of the scripting interfaces such as jython, grovvy, but
never went there yet.
The web backend is written in python. The web backend is used for
online registration/admin as well as onsite wireless results. As more
handheld 802.11 devices show up, this becomes a more used feature if
the timing van is close enough to grid. I know some people at a
previous regional ProSolo event where checking results while they were
in the staging lines. I'd be worried about my next runs but that's
just me.
Also side from scoring software, you might want to consider simple
timing as well. For one of the WW clubs, I build a super simple
little hardware device that takes timer light inputs and converts them
into timestamps and communicates that over a USB port. Think
Accucross with the timing done on a little Atmel board and no need for
DOS. The software takes care of matching time stamps and creating
times. The chip I used has 8 external interrupt pins which can
provide a course with 7 segments. We've only run a couple due to
site/cable issues. As the wireless systems become cheaper and better
tested, this is less useful but its nice for a small club that wants a
cheap timer for practices and the like. I believe the RA Wireless
systems send timestamps as well.
Also something else that was useful is simple multicast announcement
setups to announce services so clients can discover where to connect.
For us, services include the main database server (two data entry
machines for a Pro), the pro solo timer, etc.
Brett
Times were stored as doubles. Date time was used for actual date
time information like day of an event, when registration opens/closes,
etc.
Also, cached calculated result information (points, etc) in another
table so that wireless results don't have to perform the same table
lookups/processing over and over. This had a date time value as well
so that the announcer screen, that periodically probes the database,
can determine if there is new data to display. This used a date time
though a simple long would work as well.
Plus, the challenges come when you have to do PAX/RTP calculations.
Yes, you can use integer multiplication to do the calculations, but
why would you want to when even a float has enough precision to store
the values.
Yes, you do need to be careful when working with floating-point
values, but as long as you're always working within the display bounds
of 1/1000 of a second, it shouldn't be an issue since that's all the
resolution that we need to have -- at this time, at least. I can't see
a requirement to go to 1/10000 of a second resolution any time soon.
--
Glenn L. Austin, Computer Wizard and Race Car Driver <><
<http://www.austin-soft.com>
On a final note, I have stressed cross-platform here even though I
think it's something of a red herring. Mac's comprise around 8% of
the market (although probably more of the laptop market?) but I
sincerely doubt anyone is going to bring out their Mac Book Pro for
use as a T/S computer. Realistically Windows is the target platform
of choice. However, Java is a solid, common language with a LOT of
third party support and one that I think we can successfully rally
around for the relatively small core server.
On a final note, I have stressed cross-platform here even though I
think it's something of a red herring. Mac's comprise around 8% of
the market (although probably more of the laptop market?) but I
sincerely doubt anyone is going to bring out their Mac Book Pro for
use as a T/S computer. Realistically Windows is the target platform
of choice. However, Java is a solid, common language with a LOT of
third party support and one that I think we can successfully rally
around for the relatively small core server.
I think choosing to make this a Windows only app is short sited. The vast majority of embedded devices run Linux now and the new arm based net tops could turn out to be very popular with the clubs as they are dirt cheap and have all day battery life. Windows will not run on them at all. But it does bring up the question of how is this going to be licensed?
As for the question of how many computers do clubs have at events you need to ask the question are clubs bringing one computer because they only have one computer or are they bringing one computer because the software only works with one computer and that is all they are licensed for?
From a database perspective I agree that being able to handle time in the query is cleaner and easier. One question that needs to be asked is if the time format of the database is precise enough for your needs. In other words when you capture a time, store it and pull it back out again has it lost enough of it's precision that it wouldn't be usable for your needs. I had found a link to a chart comparing the precision of different databases that support time stamps and I was coming to the conclusion that most databases would not be accurate enough to use that way. The issue was that you could input a time stamp with microseconds and pull it out with microseconds but you may not get the same answer as you put in. If you guys have databases up and running some simple insert and select statements should be able to verify it. I have that link in my documentation that is on a computer that is still in storage. I will see if I can get it out this weekend.
I used datetime for real date time things like when something was
modified or a time of day when registration closes.
For run times, I use a double/float. I'm pretty sure all recent
databases have both of these formats. sqlite is 'special' in that you
can put whatever you want in any column (minus a primary int column)
which leads to the need to check all the output in case somebody
putting stuff in doesn't do it correctly.
Another downside to sqlite is that committing a transaction requires
that the entire file is written to disk before it returns okay. Small
delay but enough that the user sometimes wonders what it's doing when
using a directly connected application. Users over something like
HTTP already have a delay to deal with and won't know the difference.
So, how do we agree on a general database schema? Can we use
something like google files to provide a shared 'whiteboard'? Or
start a code repository somewhere and put ideas/docs in there?
Also Java serial port access is pretty easy with RXTX. It requires
recompilation for each platform (JNI) but you'd have to do that with
other languages as well.
Brett