Kick off summer with seven programs to stay in shape

Marco Fioretti follows up his post on open source scuba-diving applications with these apps that will help you keep track of an array of sports and fitness data this summer.

My previous blog post introduced a few FOSS applications for scuba diving. This week, as promised, I present other FOSS programs, specifically written for one or more of (at least) these other sports: body building, fitness, cycling, diving, running and backpacking. All of them can be modified or configured in many ways without any "real" programming skills -- that is, without needs to change C/C++ source code and recompile everything.

Body building and fitness

BBCalc (BodyBuilding Calculators) is a spartan graphic calculator, written in Python and PyGTK. It calculates things like Ideal Body Measurements, Body Mass Index, and Body Fat Estimator for non-athletes. More importantly, BBCalc will tell you your One-Rep Maximum, that is the maximum weight you may lift in a single repetition for a given exercise.

The Diary of Hercules is a good complement for BBCalc. Rather than as a specialized calculator, it is mostly useful as a training planner and diary for bodybuilders and fitness enthusiasts. The Diary requires Python, wxPython and SQLite, all available as binary packages on most Gnu/Linux distributions.


Cycling is aimed to both amateur and professional cyclists. With Cycling you can define circuits and store data about your training program. There are fields for length, duration, weather conditions and average speed for any circuit you keep in the database.

CycleAtlas is a more sophisticated, multiplatform Java application for building cycling tracks and then programming, or analysing, your rides. With CycleAtlas, you can build custom tracks from pre-existing images of scanned maps, or from digital maps fetched in real time from WMS servers. You can either draw the tracks manually or overlap GPS track data on those images. The result can then be exported to Garmin Edges devices.

When it comes to analysis, CycleAtlas can store data about each single part of each ride. Should you want to be so precise (or masochist...), you may see in 100-meter-steps variables like partial distance, partial time, time difference, and the heart rate measured by your monitor during that ride.

Running and backpacking

PHP Running Management or phpRunMan, is a set of PHP pages for runners, which can also be used as a vanilla logbook for backpacking trips. The code of phpRunMan will run on any LAMP server configured to use the GD graphic libraries.

A phpRunMan "run" may be anything from a training session or family stroll to an actual race or long-distance hike, and is defined as a list of segments and times. You can enter the intermediate times of each run or specify the number of laps. Above all, you can add your own comments to each segment.

The software will use all this information to give you statistics for distance and speed average, time/km values and projection of running times for different distances. Separate statistics and tables are available for yearly or monthly averages, as well as for each single run.

The multi-sport assistants: SportsTracker and pdr/pdx


SportsTracker is a Java 7 application for recording activities in any sport. The easiest way to install it is via Java WebStart, following the instructions on the website.

With this program, you can create your own categories of sports, with specific activities (e.g., training, race, etc.) for each of them.

SportsTracker provides good overviews of your exercises. If you have a heart rate monitor, you can import its data and then use the graphical interface to create your own statistics. The calendar, instead, is the right place for writing training plans or reminders of coming competitions.

Everything SportsTracker collects or calculates is stored in XML files, which are relatively easy to hack and process as you wish, if you know a bit of shell scripting.


The pdr/pdx duo may be the least user-friendly entry in this post, but it's also the most flexible.

The Personal Data Recorder and Personal Data eXpert can collect and evaluate "mostly numeric" personal data of any kind, to show how they evolve over time. According to the home page, this software was originally developed to record health data like blood pressure, sugar levels, heart rate and medications.

Due to their structure, however, and to the fact that every data item can also be commented with text, the tools in this package can calculate and log whatever you want to register. Including, and that's why they're mentioned here, training sessions and statistics for any sport. You may also load data from XML files.

pdr/pdx can use those raw data to create reports and graphs in every format you probably care about: HTML, XML, LATEX, RTF, ASCII, CSV, SVG, EPS, FIG and PNG.

Pdr/pdx has only two (actually three) flaws, so to speak. One, which for many people is not a flaw but a feature, is that it is a command line tool. You can tell pdr/pdx what you want either via a Lisp-like programming language, or at an interactive prompt.

The second one is that it has so many features to play with, especially through scripts, that if you get caught by them you'll forget exercises and spend the whole afternoon hacking.

Here's one example to explain what I mean: you can input data in the pdr/pdx database also by sending them with a Tweet or email. "This enables mobile phones as very flexible data sources", says the website, and I can't but agree. Actually, I'll do more: if you are a gym manager, this pdr/pdx feature may be a good foundation for building your very own "social training management system" for all the members of your gym.

The last "flaw", if you can call it a flaw, of pdr/pdx is the one honestly mentioned in the home page of this software: it will not do anything by default (that's why it's so flexible) so you should come to it with "some concrete ideas about what you want to see". Fair enough, if you ask me. Especially if no other tool already provides "what you want to see".

Happy training and hacking!