As part of my work with Science Olympiad, I worked on making CodeBusters become a national event for the 2018/2019 season.  While one part of the process was to define the rules, the real challenge was making it easy for all of the individual states event supervisors to be able to run the event easily.  

In the previous two years of being the event supervisor for North Carolina, I wrote almost two dozen tests by hand using Microsoft Word.  In the process we analyzed the testing results and formats as well as elicited feedback from event supervisors who administered the tests.  Based on the feedback, I tweaked the test format to make it easier to grade by putting boxes around answer spots using tables as well as standardized the format for presenting the questions so that students could clearly recognize how to approach the problems.  However the process was still manual and generating the answer key was a tedious effort to ensure that everything was in sync, especially when the test question order was randomized, and yes I did make a couple of mistakes that we caught at the last minute.  Additionally, while there was somewhat of a template to follow, the process was tedious such that it could take several hours to prepare a test with only eight questions, ensuring that everything was correct.

From this experience, it became obvious that automation was required.  In order to make it accessible, I needed to build a web application. 

Timex Datalink

One of the challenging projects that I took on was to completely disassemble the Timex Datalink Watch Operating System.  Given that all I started with was just the watch and the four downloadable applications I had to figure out a way to get inside the watch.  Given that they didn't document what processor was in the watch, nor the format of the application file, I had to take some guesses.  Based on a Timex's Indiglo patent, I guessed that they used a Motorola 6805 processor and I wrote a custom disassembler to take apart the sample apps.  After some more guesses, I ended up writing and downloading my first application to the watch from which I proceeded to learn about the memory organization.  Eventually I learned enough to determine where memory was located and write a program to dump out memory 4 bytes at a time to the display of the watch and type it into my computer.  As I learned more about the operating system and hardware I was eventually able to show 6 bytes on the display and speed up the discovery process. 

With all that information in hand, I proceeded to create a set of tools for creating and managing wristapps as well as full online documentation and an SDK for not only the original watch but the variants that followed.  The full SDK and documentation of it is online at