Background Pi
Background Pi was a project over the course of several years to teach basic programming in C++. The fact that the current version is 4 reveals something about its history. The fact that you cannot find previous versions also indicates how good versions one through three were.
Starting as an exercise in reading code the algorithm was found in Project Pi. It was then decided to automate the calculation of digits and Background Pi was born. With a trip down windows lane it was not long before nine byte files were being spit out with pieces of pi. It was still command line based and difficult to manage and resulted in the first rewrite.
Wanting a GUI for this application a transition from developing in Dev-C++ to Visual Studio was made. Written with MFC the new GUI allowed the entering of a range to be computed. Simple but difficult to manage because each client had to enter the range manually.
With another full rewrite version 3 rose from the ashes. This rewrite took a great period of time due to its radical changes. Not feeling comfortable with MFC, Dev-C++ returned to being the main development IDE and it was decided to learn/use the Win32 API directly instead of MFC. Visual Studio proved to still be useful with laying out the user interface and then being tweaked by hand in the resource file. Also wanting to automate the computation of digits between computers a networked solution was desired. Winsock2 became a topic of study, parented with the development of a protocol for sending ranges to be computed and returning completed digits. A simple setup was derived and worked flawlessly. The software never really caught on, but even with a handfull of computers it became apparent that storing 9 bytes in a file for each range was a bad idea. The overhead with each file was unexpected and it was decided to find a better way. Reasearch into databases began and it wasn't long before the Background Pi server was migrated to using a mySQL backend. This was great, no clients needed to be updated, no one was the wiser.
But there was a problem, a big problem. Mathematical precision errors started appearing left and right, the implementation of the algorythm could not handle some of the rounding issues with computing at 10's of thousands of digits. Unfortunatly there was no way to push updates to the version 3 clients. Thus another rewrite was needed, version 4 would have self updating. The protocol was extended and the code was modularized into dlls that could be more easily updated. At the same time the computation was fixed by using the GMP math library which could also give some performance gains with processor specific implementations. This new version was rolled out and was great because issues could be easily fixed and pushed to the clients.