About The Workout Log

History | Known bugs | Updates

If you have any issues that need to be addressed, please use the "e-mail support" link in your navigation bar.

^ History:

The Workout Log began in 1996 as a hard covered red velvet book in which I wrote my personal records (PRs) and each day that I ran. I wrote in this book through 3 high school track seasons, 2 cross country seasons, and until I joined the Army in June, 1998.

Sometime in late 1999 I created a Microsoft Access database to track my workouts, and began entering my runs there. I kept up the log as I prepared for my first marathon, Paris, which was held in April of 2001. I wanted a more flexible log system, where I could print reports and search history. I wanted to set my workout type as a treadmill workout, a distance workout, a run, and I knew others might be interested in using it for walking, biking, or any other type of workout involving distance.

Soon thereafter, I finished my first (3-year) tour in the Army and began coding The Workout Log in PHP, a Linux-based web programming language that has a syntax a bit like C++, something that I had studied in school. After several weeks of hard coding, I had a login system and calendar capabilities. Several long weekends after that, I had a fairly complete system that I could be proud of, and began promoting it.

Many months went by between updates. The code was pieced together from disjoint sources, and a bit hard to manage. I pondered changing the platform to .NET, which is a Microsoft technology and something that had sparked my interest from the ACM student chapter (the "computer club") of which I was President. After I was mobilized in the Army in April 2003, I decided to go for a C#/ASP.NET port of the program. I wrote the navigation and user authentication systems, or at least used the tools provided by .NET, but a freak deletion accident caused my 30+ hours of work to disappear. After this disheartening experience, I lost interest in starting from scratch again, and committed myself to maintaining and streamlining the program in its current form.

Currently, it's in a process called "refactoring" - now that I know quite a bit more about PHP, including how to find and use the vast code libraries at my disposal, I am creating a more streamlined and easy to update and maintain program. This has had some small adverse effects (namely, bugs), but will have huge and lasting long-term benefits. As an example of the improvements, the system behind creating this page lets me type this section as a plain HTML page, which doesn't include any server-side processing. This lets me update it easily and frequently.

I enjoy tinkering with this program to make it work better. I approach it from a pragmatic perspective - I want it to run well, efficiently, and to include new technologies if they can help streamline the program or make something work better.

At the same time, I try to be very careful to track my changes and try to isolate any bugs on my own before I stop working on the program. Thankfully, I am blessed with some users who don't hesitate to let me know when something's wrong. My mother uses this program, and she usually notices when things are awry. If not, there are a few others that will drop me an email. Most times, I can get the problem fixed within a day or two, and sometimes I'll fix it right when I get the email!

One of my long-term goals for this program is to get it to the point where I can feel comfortable opening the source code to the open source community. I have a CVS (Collaborative Versioning System, a program that facilitates having multiple users updating the source code for a program at the same time) server set up, and an implementation of a web-based CVS client. Within the next year or two, I may open this CVS server to the public, take input from the open source community while allowing others to download the program and install it on their own web servers.

^ Known bugs:

- There is an issue with Internet Explorer 6.0's implementation of CSS and the width of the page. If the width isn't set to show all the width of the page, it doesn't display the content DIV. The best fix I can do for now is to size it so that it it fits well on 800x600 (which is already done). There are a few hacks out there, and I may try a few but this seems to work fine and will probably stay unless I get complaints. This bug is not present in the Opera web browser.

^ Updates:

Note: This section is intended to provide a log of bug fixes and improvements with The Workout Log program. It's fairly technical in nature.

1/4/2007

- Fixed an issue preventing the leaderboard from showing up correctly.

- Added a link to the run2007 wiki.

10/15/2004

- Per user request, limited leaderboard entries to those who have entered data in the last 45 days.
- Limited user display name to 23 characters to prevent text wrapping to multiple rows.

4/16/2004

- Removed a leftover debug mechanism that emailed a copy of each workout entry to the user.

2/24/2004

- Added this "about" page and an email support form to replace direct mailto: link in navigation bar.
- Bug fixes with dates - fixed AM not showing up in AM/PM selector, an issue causing dates to be stored improperly, and an issue with times around 0000 not being converted from 24-hour to 12-hour time properly.

2/20/2004

- More significant code improvements. You shouldn't see too much difference on the client side except a slightly more standard look and feel (for example, the banners should all be the same color and size). The benefit is that it will make updates very much easier. This is part of an ongoing process that will eventually let me add significant new functionality with minimal effort.

Code improvement details:

- Changed from DreamWeaver templates to PEAR's implementation of PHPLIB templates (the Template_PHPLIB class).
- Created a common CSS style sheet for placement instead of HTML tables. This renders perfectly on IE 6.0 and Opera 7.23, and it (minus some javascript parsing problems) validates as XHTML 1.0 on most pages.
- As an example of the level of improvement, the code required to make a new page that matches the template is down from about 280 lines to about 25 lines.

2/11/2004

- MAJOR code revisions for the Leaderboard - added some new stats including percentage of days run and an average distance field.
- Severely optimized the SQL queries for leaderboard
- Created code to output leaderboard as XML
- Implemented leaderboard listing as an XSLT transformation
- Converted Leaderboard to a class.
- Fixed mouseover Javascript event on log page. Brought back mouse over calendar date to get miles ran
- Added ability to opt out of leaderboard via user settings
- Added zipcode to user settings and database
- Added time zones and conversion algorithm for "add entry" form
- Implemented SOAP call to a web service that provides temperature in add entry form.

11/22/2003

- Added last entry and last entry distance to leaderboard.
- Switched back to one column on leaderboard to show new data
- Made the update form only submit when there are changes
- Added standalone pace calculator (a program I wrote a few months ago)
- Substantial internal code revisions to add, update, and delete record functions. Added some security features and error reporting. Automatically sends me an email when an entry fails, in order to pin down future bugs.

11/14/2003

- Split leaderboard into two columns for viewing on one page
- Reduced the code output on the log page by about 20%
- Made the calendar links take you to the entries for that day
- Added a top button to let you easily jump between calendar and entries
- The settings page will no longer submit if you haven't changed anything

These updates also brought out some major locality issues in the code that will prompt the following changes in the near future:

- Time zone settings will be added. Currently all entries default to CST.
- Unit settings will be added. You will be able to use kilometers or miles.
- Language support (Spanish) may be added as well.

11/13/2003

- The leaderboard now highlights the current user's name
- Each page now has links to the forums and support email
- Not-logged-in users can no longer access the forums
- The forum back button now correctly returns the user to the proper page
- Fixed an issue that produced an error when a user left a number-expecting (such as distance or duration) field blank
- Fixed the delete button, lined it up with the table, and added a confirmation dialog box
- Fixed a bug that added leading carriage returns to entries on update.