mirror of
https://github.com/GoldenCheetah/GoldenCheetah.git
synced 2026-04-15 05:32:21 +00:00
initial import
This commit is contained in:
42
doc/Makefile
Normal file
42
doc/Makefile
Normal file
@@ -0,0 +1,42 @@
|
||||
|
||||
CONTENT=$(wildcard *.content)
|
||||
HTML=$(subst .content,.html,$(CONTENT))
|
||||
TARBALLS=$(wildcard gc_*.tgz)
|
||||
OTHER=logo.png sample.gp sample.png cpint.gp cpint.png gui-preview.png
|
||||
|
||||
all: $(HTML)
|
||||
.PHONY: all clean install
|
||||
|
||||
clean:
|
||||
rm -f $(HTML)
|
||||
|
||||
install:
|
||||
rsync -avz -e ssh $(HTML) $(TARBALLS) $(OTHER) \
|
||||
srhea.net:public_html/goldencheetah/
|
||||
|
||||
# ftp -u ftp://srhea@ftp.goldencheetah.org/ $(HTML) $(TARBALLS) $(OTHER)
|
||||
|
||||
contact.html: contact.content genpage.pl
|
||||
./genpage.pl "Contact Us" $< > $@
|
||||
|
||||
contrib.html: contrib.content genpage.pl
|
||||
./genpage.pl "Contributors" $< > $@
|
||||
|
||||
download.html: download.content genpage.pl
|
||||
./genpage.pl "Download" $< > $@
|
||||
|
||||
faq.html: faq.content genpage.pl
|
||||
./genpage.pl "Frequently Asked Questions" $< > $@
|
||||
|
||||
index.html: index.content genpage.pl
|
||||
./genpage.pl "Introduction" $< > $@
|
||||
|
||||
license.html: license.content genpage.pl
|
||||
./genpage.pl "License" $< > $@
|
||||
|
||||
search.html: search.content genpage.pl
|
||||
./genpage.pl "Search" $< > $@
|
||||
|
||||
users-guide.html: users-guide.content genpage.pl
|
||||
./genpage.pl "User's Guide" $< > $@
|
||||
|
||||
5
doc/contact.content
Normal file
5
doc/contact.content
Normal file
@@ -0,0 +1,5 @@
|
||||
<!-- $Id: contact.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
|
||||
|
||||
Please send all correspondence to
|
||||
<a href="mailto:info@goldencheetah.org">info@goldencheetah.org</a>.
|
||||
|
||||
18
doc/contrib.content
Normal file
18
doc/contrib.content
Normal file
@@ -0,0 +1,18 @@
|
||||
<!-- $Id: contrib.content,v 1.4 2006/09/06 04:07:18 srhea Exp $ -->
|
||||
|
||||
Sean Rhea bought a PowerTap Pro on April 20, 2006, and immediately set to
|
||||
figuring out how to use it from his Mac Powerbook without using Virtual PC.
|
||||
Within a week, he was able to download the raw data. Shortly thereafter, Russ
|
||||
Cox asked what he was up to, and the two worked together to figure out the
|
||||
packing format used. By May 4, they could reproduce the numbers given by the
|
||||
PowerTap software except for minor discrepancies in the time values. David
|
||||
Easter then pointed out how the checksum bytes in the download protocol were
|
||||
used, and Sean Rhea coded up their combined discoveries into the two
|
||||
utilities, <code>ptdl</code> and <code>ptunpk</code>.
|
||||
|
||||
<p>
|
||||
Rob Carlsen helped get the serial port version of the PowerTap Pro working
|
||||
with the Keyspan USB-to-serial adaptor. Scott Overfield helped me figure out
|
||||
that we should be using the <code>/dev/cu.*</code> devices instead of the
|
||||
<code>/dev/tty.*</code> ones.
|
||||
|
||||
12
doc/cpint.gp
Normal file
12
doc/cpint.gp
Normal file
@@ -0,0 +1,12 @@
|
||||
set title "Critical Power Output"
|
||||
set xlabel "Interval Duration (MM:SS)"
|
||||
set ylabel "Average Power (Watts)"
|
||||
set mxtics 5
|
||||
set mytics 2
|
||||
set yrange [0:]
|
||||
set xrange [0.021:120]
|
||||
set logscale x
|
||||
set xtics ("0:01.26" 0.021, "0:05" 0.08333, "0:12" 0.2, "1:00" 1, "5:00" 5, \
|
||||
"12:00" 12, "30:00" 30, "60:00" 60, "120:00" 120)
|
||||
plot 'cpint.out' noti with li lt 1
|
||||
pause -1
|
||||
BIN
doc/cpint.png
Normal file
BIN
doc/cpint.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
43
doc/download.content
Normal file
43
doc/download.content
Normal file
@@ -0,0 +1,43 @@
|
||||
<!-- $Id: download.content,v 1.6 2006/08/11 20:21:03 srhea Exp $ -->
|
||||
|
||||
Right now we're only distributing tarballs of the Golden Cheetah source.
|
||||
|
||||
<p>
|
||||
<center>
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td width="20%"><i>Date</i></td>
|
||||
<td width="25%"><i>Source</i></td>
|
||||
<td><i>Description</i></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign="top">Aug 11, 2006</td>
|
||||
<td valign="top"><a href="gc_2006-08-11.tgz">gc_2006-08-11.tgz</a></td>
|
||||
<td valign="top">ptdl now works with Keyspan USB-to-serial adaptor, after
|
||||
debugging help from Rob Carlsen.
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign="top">May 27, 2006</td>
|
||||
<td valign="top"><a href="gc_2006-05-27.tgz">gc_2006-05-27.tgz</a></td>
|
||||
<td valign="top">Adds the <code>cpint</code> program for computing critical
|
||||
power intervals and the <code>ptpk</code> program for converting from
|
||||
PowerTuned data files (see the <a href="users-guide.html">User's
|
||||
Guide</a>).</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td valign="top">May 16, 2006</td>
|
||||
<td valign="top"><a href="gc_2006-05-16.tgz">gc_2006-05-16.tgz</a></td>
|
||||
<td valign="top">The first code release, containing <code>ptdl</code> and
|
||||
<code>ptunpk</code>.</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p>
|
||||
We hope to have anonymous CVS access set up soon.
|
||||
|
||||
62
doc/faq.content
Normal file
62
doc/faq.content
Normal file
@@ -0,0 +1,62 @@
|
||||
<!-- $Id: faq.content,v 1.4 2006/07/05 16:59:56 srhea Exp $ -->
|
||||
|
||||
<p>
|
||||
<i>Why does Golden Cheetah only include command-line utilities? Where's the
|
||||
GUI?</i>
|
||||
|
||||
<p>
|
||||
Because this project is only a hobby of ours, and we haven't had time to
|
||||
finish it yet. That said, we are working on it. Here's a teaser screenshot
|
||||
to keep you interested:
|
||||
|
||||
<center>
|
||||
<img src="gui-preview.png" alt="GUI Screen Shot" align="center">
|
||||
</center>
|
||||
|
||||
<p>
|
||||
<i>Does the output of <code>ptunpk</code> exactly match that of the software
|
||||
included with the PowerTap?</i>
|
||||
|
||||
<p>
|
||||
Almost. If you run it in compatibility mode, using the <code>-c</code>
|
||||
option, it matches the PowerTap software's output exactly on everything but
|
||||
the time values, at least for the five sample rides we've tried it with.
|
||||
The times are a little off, but not by more than 0.1%, so we don't consider it
|
||||
a big deal.
|
||||
|
||||
<p>
|
||||
That said, the PowerTap software does some weird things, like converting from
|
||||
kilometers to miles by multiplying by 0.62, but then reporting the miles
|
||||
values with five digits after the decimal place. If you run
|
||||
<code>ptunpk</code> without the <code>-c</code> option, it will unpack the
|
||||
data in the way we think it should. The results mostly match up with the
|
||||
official ones, and are almost certainly identical within the range of accuracy
|
||||
of the device.
|
||||
|
||||
<p>
|
||||
<i>I've downloaded and unpacked the data. Now what do I do with it?</i>
|
||||
|
||||
<p>
|
||||
We highly recommend that you buy and read both Joe Friel's <i>The
|
||||
Cyclist's Training Bible</i> and Allen and Coggan's <i>Training and
|
||||
Racing with a Power Meter</i>. The former is the definitive book about all
|
||||
aspects of cycling training (although we think he's off his rocker in the
|
||||
chapter about diet), and the latter is the definitive book about power-based
|
||||
training.
|
||||
|
||||
<p>
|
||||
Also, if you buy either of these books through the links below, we'll get a
|
||||
referral fee in return, helping us to support this web site. Thanks!
|
||||
|
||||
<center>
|
||||
<iframe
|
||||
src="http://rcm.amazon.com/e/cm?t=goldencheetah-20&o=1&p=8&l=as1&asins=B0006JHZ7Q&fc1=000000&IS2=1<1=_blank&lc1=0000ff&bc1=000000&bg1=ffffff&f=ifr"
|
||||
style="width:120px;height:240px;" scrolling="no" marginwidth="0"
|
||||
marginheight="0" frameborder="0"></iframe>
|
||||
|
||||
<iframe
|
||||
src="http://rcm.amazon.com/e/cm?t=goldencheetah-20&o=1&p=8&l=as1&asins=1931382794&fc1=000000&IS2=1<1=_blank&lc1=0000ff&bc1=000000&bg1=ffffff&f=ifr"
|
||||
style="width:120px;height:240px;" scrolling="no" marginwidth="0"
|
||||
marginheight="0" frameborder="0"></iframe>
|
||||
</center>
|
||||
|
||||
BIN
doc/gc_2006-05-16.tgz
Normal file
BIN
doc/gc_2006-05-16.tgz
Normal file
Binary file not shown.
BIN
doc/gc_2006-05-25.tgz
Normal file
BIN
doc/gc_2006-05-25.tgz
Normal file
Binary file not shown.
BIN
doc/gc_2006-05-27.tgz
Normal file
BIN
doc/gc_2006-05-27.tgz
Normal file
Binary file not shown.
BIN
doc/gc_2006-08-11.tgz
Normal file
BIN
doc/gc_2006-08-11.tgz
Normal file
Binary file not shown.
131
doc/genpage.pl
Executable file
131
doc/genpage.pl
Executable file
@@ -0,0 +1,131 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# Copyright (c) 2001-2003 Regents of the University of California.
|
||||
# All rights reserved.
|
||||
#
|
||||
# See the file LICENSE included in this distribution for details.
|
||||
#
|
||||
# $Id: genpage.pl,v 1.3 2006/07/05 16:59:56 srhea Exp $
|
||||
|
||||
use strict;
|
||||
|
||||
my $title = shift;
|
||||
my $content_file = shift;
|
||||
open (FILE, "$content_file") or die "Could not open $content_file";
|
||||
|
||||
print<<EOF;
|
||||
<!--
|
||||
|
||||
Copyright (c) 2006 Sean C. Rhea (srhea\@srhea.net)
|
||||
All rights reserved.
|
||||
|
||||
This file was automatically generated by genpage.pl. To change it,
|
||||
please edit the content file, $content_file.
|
||||
|
||||
-->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<title>Golden Cheetah: Power for the Masses</title>
|
||||
</head>
|
||||
|
||||
<body text="#000000"
|
||||
link="#5e431b"
|
||||
vlink="#996e2d"
|
||||
alink="#000000"
|
||||
bgcolor="#ffffff">
|
||||
|
||||
<table width="95%" border="0" width="100%" cellspacing="10">
|
||||
<tr>
|
||||
|
||||
<!-- Left Column -->
|
||||
<td width="150" valign="top">
|
||||
<img src="logo.png" width="128" height="184" alt="Picture of Cheetah">
|
||||
|
||||
<p> <b><a href="index.html">Introduction</a></b>
|
||||
<br> <b><a href="users-guide.html">User's Guide</a>
|
||||
<br> <b><a href="faq.html">FAQ</a>
|
||||
<br> <b><a href="license.html">License</a></b>
|
||||
<br> <b><a href="download.html">Download</a></b>
|
||||
<br> <b><a href="contrib.html">Contributors</a></b>
|
||||
<br> <b><a href="search.html">Search</a></b>
|
||||
<br> <b><a href="cgi-bin/mailman/listinfo/golden-cheetah-users">Mailing List</a></b>
|
||||
|
||||
<p>
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-2993461533095312";
|
||||
google_ad_width = 120;
|
||||
google_ad_height = 240;
|
||||
google_ad_format = "120x240_as";
|
||||
google_ad_type = "text";
|
||||
google_ad_channel ="";
|
||||
google_color_border = "FFFFFF";
|
||||
google_color_bg = "FFFFFF";
|
||||
google_color_link = "5E431B";
|
||||
google_color_url = "996E2D";
|
||||
google_color_text = "000000";
|
||||
//--></script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
|
||||
|
||||
</td>
|
||||
<!-- End of Left Column -->
|
||||
|
||||
<!-- Right Column -->
|
||||
<td align="left" valign="top">
|
||||
<table width="100%" cellspacing="10">
|
||||
<tr align="center"><td>
|
||||
|
||||
<p>
|
||||
<p>
|
||||
<big><big><big><b><font face="arial,helvetica,sanserif">Golden
|
||||
Cheetah</font></b></big></big></big>
|
||||
<br>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Power for the Masses
|
||||
</font></big>
|
||||
<p>
|
||||
</td></tr>
|
||||
|
||||
<tr><td bgcolor="#5e431b">
|
||||
<font color="#f8d059" face="arial,helvetica,sanserif">
|
||||
<big><strong>$title</strong></big>
|
||||
</font>
|
||||
</td></tr>
|
||||
|
||||
<tr><td>
|
||||
EOF
|
||||
|
||||
my $match = "\\\$" . "Id:.* (\\d\\d\\d\\d\\/\\d\\d\\/\\d\\d "
|
||||
. "\\d\\d:\\d\\d:\\d\\d) .*\\\$";
|
||||
|
||||
my $last_mod;
|
||||
while (<FILE>) {
|
||||
|
||||
if (m/$match/) {
|
||||
$last_mod = $1;
|
||||
}
|
||||
print;
|
||||
}
|
||||
close (FILE);
|
||||
|
||||
if (defined $last_mod) {
|
||||
print "<p><hr><em>Last modified $last_mod.</em>\n";
|
||||
}
|
||||
|
||||
print<<EOF;
|
||||
|
||||
</tr></td>
|
||||
</table>
|
||||
</td>
|
||||
<!-- End of Right Column -->
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
BIN
doc/gui-preview.png
Normal file
BIN
doc/gui-preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 203 KiB |
26
doc/index.content
Normal file
26
doc/index.content
Normal file
@@ -0,0 +1,26 @@
|
||||
<!-- $Id: index.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
|
||||
|
||||
<p>
|
||||
The goal of the Golden Cheetah project is to develop a software package that:
|
||||
<ul>
|
||||
<li>Downloads ride data from power measurement devices, such as the <a
|
||||
href="http://www.cycleops.com/products/powertap.htm">CycleOps PowerTap</a>,
|
||||
the <a href="http://www.ergomo.net/Home-_14.html">ergomo</a>, the <a
|
||||
href="http://www.polarusa.com/consumer/powerkit/default.asp">Polar
|
||||
Electro</a>, and the <a href="http://www.srm.de/usa/index.html">SRM Training
|
||||
System</a><p>
|
||||
<li>Helps athletes analyze downloaded data with features akin to commercial
|
||||
power analysis software, such as <a href="http://cyclingpeaks.com/">Cycling
|
||||
Peaks</a><p>
|
||||
<li>Works on non-Microsoft Windows-based systems, such as FreeBSD, Linux, and
|
||||
Mac OS X<p>
|
||||
<li>Is available under an
|
||||
<a href="http://www.opensource.org/docs/definition.php">Open Source</a>
|
||||
license
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
In short, we believe that cyclists should be able to download their power data
|
||||
to the computer of their choice, analyze it in whatever way they see fit, and
|
||||
share their methods of analysis with others.
|
||||
|
||||
68
doc/license.content
Normal file
68
doc/license.content
Normal file
@@ -0,0 +1,68 @@
|
||||
<!-- $Id: license.content,v 1.1 2006/05/16 14:24:50 srhea Exp $ -->
|
||||
|
||||
Golden Cheetah is licensed under the
|
||||
<a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>,
|
||||
the preamble of which states:
|
||||
|
||||
<blockquote>
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
</P>
|
||||
<P>
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
</blockquote>
|
||||
|
||||
For the full text of the license, please click the link above.
|
||||
|
||||
BIN
doc/logo.jpg
Normal file
BIN
doc/logo.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
doc/logo.png
Normal file
BIN
doc/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 229 B |
8
doc/sample.gp
Normal file
8
doc/sample.gp
Normal file
@@ -0,0 +1,8 @@
|
||||
set title "May 3, 2006 16:24:04"
|
||||
set xlabel "Ride Time (minutes)"
|
||||
plot \
|
||||
"< awk '/^[^#]/ {print $1, $4}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Watts' wi li, \
|
||||
"< awk '/^[^#]/ {print $1, $7}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Heartrate' wi li, \
|
||||
"< awk '/^[^#]/ {print $1, $6}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'Cadence' wi li, \
|
||||
"< awk '/^[^#]/ {print $1, $3}' 2006_05_03_16_24_04.dat | ./smooth.pl 10" ti 'MPH' wi li
|
||||
pause -1
|
||||
BIN
doc/sample.png
Normal file
BIN
doc/sample.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
42
doc/search.content
Normal file
42
doc/search.content
Normal file
@@ -0,0 +1,42 @@
|
||||
<!-- $Id: search.content,v 1.1 2006/05/16 15:46:42 srhea Exp $ -->
|
||||
|
||||
<center>
|
||||
<!-- SiteSearch Google -->
|
||||
<form method="get" action="http://www.google.com/custom" target="_top">
|
||||
<table border="0" bgcolor="#ffffff">
|
||||
<tr><td nowrap="nowrap" valign="top" align="left" height="32">
|
||||
<a href="http://www.google.com/">
|
||||
<img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google"
|
||||
align="middle"></img></a>
|
||||
<br/>
|
||||
<input type="hidden" name="domains" value="goldencheetah.org"></input>
|
||||
<input type="text" name="q" size="60" maxlength="255" value=""></input>
|
||||
<input type="submit" name="sa" value="Search"></input>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td nowrap="nowrap">
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="radio" name="sitesearch" value="" checked="checked"></input>
|
||||
<font size="-1" color="#000000">Web</font>
|
||||
</td>
|
||||
<td>
|
||||
<input type="radio" name="sitesearch" value="goldencheetah.org"></input>
|
||||
<font size="-1" color="#000000">goldencheetah.org</font>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<input type="hidden" name="client" value="pub-2993461533095312"></input>
|
||||
<input type="hidden" name="forid" value="1"></input>
|
||||
<input type="hidden" name="ie" value="ISO-8859-1"></input>
|
||||
<input type="hidden" name="oe" value="ISO-8859-1"></input>
|
||||
<input type="hidden" name="safe" value="active"></input>
|
||||
<input type="hidden" name="cof"
|
||||
value="GALT:#008000;GL:1;DIV:#336699;VLC:663399;AH:center;BGC:FFFFFF;LBGC:336699;ALC:0000FF;LC:0000FF;T:000000;GFNT:0000FF;GIMP:0000FF;FORID:1;"></input>
|
||||
<input type="hidden" name="hl" value="en"></input>
|
||||
</td></tr></table>
|
||||
</form>
|
||||
<!-- SiteSearch Google -->
|
||||
</center>
|
||||
|
||||
222
doc/users-guide.content
Normal file
222
doc/users-guide.content
Normal file
@@ -0,0 +1,222 @@
|
||||
<!-- $Id: users-guide.content,v 1.5 2006/05/27 16:32:46 srhea Exp $ -->
|
||||
Currently, Golden Cheetah consists of several command line utilities:
|
||||
<code>ptdl</code>, which downloads ride data from a PowerTap Pro version 2.21
|
||||
cycling computer, <code>ptunpk</code>, which unpacks the raw bytes downloaded
|
||||
by <code>ptdl</code> and outputs more human-friendly ride information, and
|
||||
<code>cpint</code>, which computes your critical power (see below). All three
|
||||
are written in simple C code but have only been tested on Mac OS X so far.
|
||||
We've also written several Perl scripts to help you graph and summarize the
|
||||
data.
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Extracting the Data
|
||||
</font></big>
|
||||
<p>
|
||||
To use <code>ptdl</code>, you'll first need to install
|
||||
<a href="http://www.ftdichip.com/Drivers/VCP.htm">the drivers</a> for the
|
||||
FTDI chip the PowerTap Pro USB Downloader uses. Once these are installed, you
|
||||
should be able to just run <code>ptdl</code> without arguments:
|
||||
|
||||
<pre>
|
||||
$ ./ptdl
|
||||
Reading from /dev/tty.usbserial-3B1.
|
||||
Reading version information...done.
|
||||
Reading ride time...done.
|
||||
Writing to 2006_05_15_11_34_03.raw.
|
||||
Reading ride data..............done.
|
||||
$ head -5 2006_05_15_11_34_03.raw
|
||||
57 56 55 64 02 15
|
||||
60 06 05 0f 6b 22
|
||||
40 08 30 00 00 00
|
||||
86 0e 74 99 00 55
|
||||
81 06 77 a8 40 55
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
If everything goes well, <code>ptdl</code> will automatically detect the
|
||||
device (<code>/dev/tty.usbserial-3B1</code> in the example above), read the
|
||||
ride data from it, and write to a file named by the date and time at which the
|
||||
ride started (<code>2006_05_15_11_34_03.raw</code> in the example; the format
|
||||
is YYYY_MM_DD_hh_mm_ss.raw).
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Unpacking the Data
|
||||
</font></big>
|
||||
<p>As shown by the <code>head</code> command above, the data in this
|
||||
<code>.raw</code> file is just the raw bytes that represent your ride. To
|
||||
unpack those bytes and display them in a more human-friendly format, use
|
||||
<code>ptunpk</code>:
|
||||
|
||||
<pre>
|
||||
$ ./ptunpk 2006_05_15_11_34_03.raw
|
||||
$ head -5 2006_05_15_11_34_03.dat
|
||||
# Time Torq MPH Watts Miles Cad HR Int
|
||||
# 2006/5/15 11:34:03 1147707243
|
||||
# wheel size=2096 mm, interval=0, rec int=1
|
||||
0.021 13.1 2.450 43 0.00781 0 85 0
|
||||
0.042 13.4 5.374 97 0.00912 64 85 0
|
||||
</pre>
|
||||
|
||||
<code>ptunpk</code> takes a <code>.raw</code> file for input and writes a
|
||||
<code>.dat</code> file as output. Lines that start with an ampersand ("#") in
|
||||
this file are comments; the other lines represent measured samples. As shown
|
||||
by the first comment in the file, the columns are: time in minutes, torque in
|
||||
Newton-meters, speed in miles per hour, power in watts, distance in miles,
|
||||
cadence, heart rate, and interval number.
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Summarizing the Data
|
||||
</font></big>
|
||||
<p>
|
||||
We hope to have a graphical interface to these programs soon, but until then,
|
||||
the only summarization tools we have are command-line programs. The script
|
||||
<code>intervals.pl</code> summarizes the intervals performed in a workout:
|
||||
|
||||
<small>
|
||||
<pre>
|
||||
$ ./intervals.pl 2006_05_03_16_24_04.dat
|
||||
Power Heart Rate Cadence Speed
|
||||
Int Dur Dist Avg Max Avg Max Avg Max Avg Max
|
||||
0 77:10 19.3 213 693 134 167 82 141 16.0 27.8
|
||||
1 4:03 0.9 433 728 175 203 84 122 13.0 18.8
|
||||
2 7:23 1.0 86 502 135 179 71 141 16.0 28.2
|
||||
3 4:27 0.9 390 628 170 181 70 100 12.0 17.6
|
||||
4 8:04 0.9 60 203 130 178 50 120 18.0 30.1
|
||||
5 4:30 0.9 384 682 170 179 79 113 11.0 18.6
|
||||
6 8:51 1.1 53 245 125 176 70 141 8.0 26.6
|
||||
7 2:48 0.4 400 614 164 178 62 91 8.0 13.6
|
||||
8 7:01 1.1 46 268 128 170 71 141 12.0 28.8
|
||||
9 4:30 0.9 379 560 168 180 81 170 11.0 18.3
|
||||
10 28:46 6.5 120 409 128 179 79 141 15.0 31.0
|
||||
</pre>
|
||||
</small>
|
||||
|
||||
<p>
|
||||
In the example above, a rider performed five hill intervals, four of which
|
||||
climbed a medium size hill that took about 4-5 minutes to climb (intervals
|
||||
1, 3, 5, and 9), and one on a shorter hill that took just under 3 minutes to
|
||||
climb (interval 7).
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Graphing the Data
|
||||
</font></big>
|
||||
<p>
|
||||
For graphing the data in the ride, we use <code>smooth.pl</code> and the
|
||||
<code>gnuplot</code> program. You can use <a href="sample.gp">sample.gp</a>
|
||||
to graph the power, heart rate, cadence, and speed for the hill workout above:
|
||||
|
||||
<pre>
|
||||
$ gnuplot sample.gp
|
||||
</pre>
|
||||
|
||||
<img align="center" alt="Sample Plot" src="sample.png">
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Finding Your "Critical Power"
|
||||
</font></big>
|
||||
<p>
|
||||
Joe Friel calls the maximum average power a rider can sustain over an interval
|
||||
the rider's "critical power" for that duration. The <code>cpint</code>
|
||||
program automatically computes your critical power over all interval lengths
|
||||
using the data from all your past rides. This program looks at all the
|
||||
<code>.raw</code> files in a directory, calculating your maximum power over
|
||||
every subinterval length and storing them in a corresponding <code>.cpi</code>
|
||||
file. It then combines the data in all of the <code>.cpi</code> files to find
|
||||
your critical power over <i>all</i> subintervals of <i>all</i> your rides.
|
||||
|
||||
<pre>
|
||||
$ ls *.raw
|
||||
2006_04_28_10_48_33.raw 2006_05_10_17_08_30.raw 2006_05_18_16_32_53.raw
|
||||
2006_05_03_16_24_04.raw 2006_05_13_10_29_12.raw 2006_05_21_12_25_07.raw
|
||||
2006_05_05_10_52_05.raw 2006_05_15_11_34_03.raw 2006_05_22_18_28_47.raw
|
||||
...
|
||||
2006_05_09_09_54_29.raw 2006_05_17_16_44_35.raw
|
||||
$ ./cpint
|
||||
Compiling data for ride on Fri Apr 28 10:48:33 2006...done.
|
||||
Compiling data for ride on Sat Apr 29 10:07:48 2006...done.
|
||||
Compiling data for ride on Sun Apr 30 14:00:17 2006...done.
|
||||
...
|
||||
Compiling data for ride on Mon May 22 18:28:47 2006...done.
|
||||
0.021 1264
|
||||
0.042 1221
|
||||
0.063 1216
|
||||
...
|
||||
5.019 391
|
||||
...
|
||||
171.885 163
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Over this set of rides, the rider's maximum power is 1264 watts, achieved over
|
||||
an interval of 0.021 minutes (1.26 seconds). Over all five-minute
|
||||
subintervals, he has achieved a maximum average power of 391 watts. The
|
||||
longest ride in this set was 171.885 minutes long, and he averaged 163 watts
|
||||
over it.
|
||||
|
||||
<p>
|
||||
We can graph the output of <code>cpint</code> using <code>gnuplot</code> with
|
||||
<a href="cpint.gp">cpint.gp</a>:
|
||||
|
||||
<pre>
|
||||
$ ./cpint > cpint.out
|
||||
$ gnuplot cpint.gp
|
||||
</pre>
|
||||
|
||||
<img src="cpint.png">
|
||||
|
||||
<p>
|
||||
The first time you run <code>cpint</code> it will take a while, as it has to
|
||||
analyze all your past rides. On subsequent runs, however, it will only
|
||||
analyze new files.
|
||||
|
||||
<p><i>Training and Racing with a Power Meter</i> (see the <a
|
||||
href="faq.html">FAQ</a>) contains a table of critical powers of Cat 5 cyclists
|
||||
up through international pros at interval lengths of 5 seconds, 1 minute, 5
|
||||
minutes, and 60 minutes. Using this table and the <code>cpint</code> program,
|
||||
you can determine whether you're stronger than others in your racing category
|
||||
at each interval length and adapt your training program accordingly.
|
||||
|
||||
<p>
|
||||
<big><font face="arial,helvetica,sanserif">
|
||||
Converting Old Data
|
||||
</font></big>
|
||||
|
||||
<p>
|
||||
If you've used the PowerTuned software that comes with the PowerTap you may
|
||||
have lots of old ride data in that program that you'd like to include in your
|
||||
critical power graph. You can convert the <code>.xml</code> files that
|
||||
PowerTuned produces to <code>.raw</code> files using the <code>ptpk</code>
|
||||
program:
|
||||
|
||||
<p>
|
||||
<pre>
|
||||
$ ./ptpk 2006_04_27_00_23_28.xml
|
||||
$ head -5 2006_04_27_00_23_28.raw
|
||||
57 56 55 64 02 15
|
||||
60 06 04 7b 80 17
|
||||
40 08 30 00 00 00
|
||||
84 04 00 24 00 ff
|
||||
83 03 00 d7 00 ff
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
<code>ptpk</code> assumes the input <code>.xml</code> file was generated with
|
||||
a wheel size of 2,096 mm and a recording interval of 1. If this is not the
|
||||
case, you should specify the correct values with the <code>-w</code> and
|
||||
<code>-r</code> options.
|
||||
|
||||
<p>
|
||||
Note that the PowerTuned software computes the output speed in miles per hour
|
||||
by multiplying the measured speed in kilometers per hour by 0.62, and the
|
||||
miles per hour values in a <code>.xml</code> file are thus only accurate to
|
||||
two significant figures, even though they're printed out to three decimal
|
||||
places. Because of this limitation, the sequence <code>ptpk</code>,
|
||||
<code>ptunpk</code> is not quite the identity function; in particular, the
|
||||
wattage values from <code>ptpk</code> may only be accurate to two significant
|
||||
digits.
|
||||
|
||||
Reference in New Issue
Block a user