Add files via upload
This commit is contained in:
1 parent
8f68026c1c
commit
9b4bf15bfc
2 files changed
+574
-132
No files matched your search
+137
-132
@@ -6,70 +6,84 @@
|
||||
"source": [
|
||||
"<div align=\"right\"><i>Peter Norvig, 23 Oct, 2017</i></div>\n",
|
||||
"\n",
|
||||
"# Bike Speed versus Grade\n",
|
||||
"# Bicycling: Speed versus Grade, Eddington Number, and H-index\n",
|
||||
"\n",
|
||||
"Like most people, I bike slower when I'm going up a steep hill than on a flat road. But how much slower?\n",
|
||||
"To answer that, I downloaded all my recorded past rides longer than 20 miles as ([bikerides20.txt](bikerides20.txt)). (I started recording using \n",
|
||||
"[Strava](https://www.strava.com/athletes/575579) in mid-2013, but didn't use it across all rides until 2015). Here I parse the file:"
|
||||
"To answer that, I downloaded all my recorded [Strava](https://www.strava.com/athletes/575579) rides longer than 25 miles as [`bikerides25.tsv`](bikerides25.tsv). Here I parse the file into a set of `Ride` structures:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%matplotlib inline\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import numpy as np\n",
|
||||
"import re\n",
|
||||
"from collections import namedtuple\n",
|
||||
"\n",
|
||||
"line = 'Ride\tThu, 8/9/2018\tBRNW\t4:58:07\t68.41 mi\t3,862 ft\t' # Sample line\n",
|
||||
"Ride = namedtuple('Ride', 'miles, feet, hours, date, title')\n",
|
||||
"\n",
|
||||
"Ride = namedtuple('Ride', 'miles, feet, kind, date, title, hours')\n",
|
||||
"def parse_ride(line: str) -> Ride:\n",
|
||||
" \"\"\"Parse a line from a Strava log file into a `Ride`. Line format is:\n",
|
||||
" Ride\tThu, 8/9/2018\tBRNW\t4:58:07\t68.41 mi\t3,862 ft\"\"\"\n",
|
||||
" _, date, title, time, mi, ft = line.strip().split('\\t')\n",
|
||||
" return Ride(number(mi), number(ft), hours(time), date, title)\n",
|
||||
"\n",
|
||||
"def parse_ride(line) -> Ride:\n",
|
||||
" \"Parse a line from a Strava datafile into a `Ride`.\"\n",
|
||||
" kind, date, title, time, mi, ft = line.strip().split('\\t')\n",
|
||||
" times = [int(t) for t in reversed(time.split(':'))]\n",
|
||||
" miles = float(mi.split()[0])\n",
|
||||
" feet = int(ft.split()[0].replace(',', ''))\n",
|
||||
" return Ride(miles, feet, kind, date, title, hours(*times))\n",
|
||||
"def number(string) -> float: return float(re.sub(r'[^0-9.]','', string))\n",
|
||||
"\n",
|
||||
"def hours(sec, min, hour=0): return sec / 3600 + min / 60 + hour\n",
|
||||
"def hours(time: str) -> float: \n",
|
||||
" \"\"\"Convert '1:30:00' to 1.5\"\"\"\n",
|
||||
" hour, min, sec = map(int, time.split(':'))\n",
|
||||
" return hour + min / 60 + sec / 3600\n",
|
||||
"\n",
|
||||
"all_rides = {parse_ride(line) for line in open('bikerides20.txt')}"
|
||||
"rides = map(parse_ride, open('bikerides25.tsv'))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I'm interested in my \"serious\" rides, so I'll focus on `rides` that are at least a marathon (26 miles) in length, and for those rides collect three vectors of numbers: miles per hour, feet climbed per mile, and total miles:"
|
||||
"A few of the rides were on stationary bikes and thus have 0 feet climbed; let's filter them out. A few others were mountain bike rides where I spent a lot of time off the bike pushing it uphill; I'll filter out rides < 8 mph:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rides = [r for r in rides if r.feet > 0 and r.miles / r.hours > 8]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Collect three vectors of numbers: miles per hour, feet climbed per mile, and miles per ride. Plot feet per mile versis miles per hour:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1037d2c88>"
|
||||
"<Figure size 432x288 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"needs_background": "light"
|
||||
},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"rides = [r for r in all_rides if r.miles > 26]\n",
|
||||
"mph = [r.miles / r.hours for r in rides]\n",
|
||||
"fpm = [r.feet / r.miles for r in rides]\n",
|
||||
"mls = [r.miles for r in rides]\n",
|
||||
@@ -81,21 +95,19 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"As expected, there is a lot of variance, but overall speeds get slower as the grade gets steeper. Just eyeballing it, it looks like a curve would be a better fit than a straight line, so I'll fit a quadratic (degree two) polynomial to the data, and make the plot prettier:"
|
||||
"As expected, there is a lot of variance, but overall speeds get slower as the grade gets steeper. Just eyeballing the scatter plot, it looks like a curve would be a better fit than a straight line, so I'll fit a quadratic (degree two) polynomial to the data, and make the plot prettier:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAykAAAJ9CAYAAAAxAj0/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xt8U3WeP/5XmqQX2jQt5VakLUXKpYoDKANyFQe5KAiK\njBfc0VFZZVTGfazzHdllcHSYZXbWndmfssP4xfmtujCusqOIymUGQRQQ5KYgRSi2pJRbbzRN07RN\n03z/iCm5nHNykpyTnCSv5+PRh5gm5/M553Paft7n8/m8P7rm5mY3iIiIiIiINCIt3hUgIiIiIiLy\nxSCFiIiIiIg0hUEKERERERFpCoMUIiIiIiLSFAYpRERERESkKQxSiIiIiIhIUxikEBERERGRpjBI\nISIiIiIiTWGQEobKykrVy7BarQlfRizOgW2hrTLYHtoqg+2hrTLYHto4PsC20FoZbA9tlaG19mCQ\nQkREREREmsIghYiIiIiINIVBChERERERaQqDFCIiIiIi0hRDvCugtERf2OdwOFQ9fizKiMU5AGwL\nLZUBsD20VAbA9tBSGQDbQwvH92JbaKcMgO2hpTKA2LaH2WyWfG/SBSmhTjgadXV1qh7fKxnKUPv4\nbAttlcH20FYZbA9tlcH20M7x2RbaKoPtoa0ytNYenO5FRERERESawiCFiIiIiIg0hUEKERERERFp\nCoMUIiIiIiLSFAYpRERERESkKQxSiIiIiIhIUxikEBERERGRpjBIISIiIiIiTWGQQkREREREmsIg\nhYiIiIiINIVBChERERERaQqDFCIiIiIi0hQGKUREREREpCkMUoiIiIiISFMYpBARERERkaYY4l0B\nIoo9i82JVUdsuNjmQmEvPVaMNaHEZIx3tYiIiIgAMEghSjkWmxMLtjei2ubqee1QfSc2zSpgoEJE\nRESawOleRClm1RGbX4ACANU2F1YdscWpRkRERET+GKQQpZiLbS7B1y+JvE5EREQUawxSiFJMYS+9\n4OsDRF4nIiIiijUGKUQpZsVYE0pN/gFJqcmzeJ6IiIhIC7hwnijFlJiM2DSrAKuO2HCpzYUBzO5F\nREREGsMghSgFlZiMWDetd7yrQURERCSI072IiIiIiEhTGKQQEREREZGmJN10L6vVmtDHdzgcqh4/\nFmXE4hwAtoWWygDYHloqA2B7aKkMgO2hheN7sS20UwbA9tBSGUBs28NsNku+N+mClFAnHI26ujpV\nj++VDGWofXy2hbbKYHtoqwy2h7bKYHto5/hsC22VwfbQVhlaaw9O9yIiIiIiIk1hkEJERERERJrC\nIIWIiIiIiDSFQQoREREREWkKgxQiIiIiItIUBilERERERKQpDFKIiIiIiEhTGKQQEREREZGmMEgh\nIiIiIiJNYZBCRERERESawiCFiIiIiIg0hUEKERERERFpCoMUIiIiIiLSFAYpRERERESkKQxSiIiI\niIhIUwzxrgBRorHYnFh1xIaLbS4U9tJjxVgTSkzGeFeLiIiIKGkwSCEKg8XmxILtjai2uXpeO1Tf\niU2zChioEBERESmE072IwrDqiM0vQAGAapsLq47Y4lQjIiIiouTDIIUoDBfbXIKvXxJ5nYiIiIjC\nxyCFKAyFvfSCrw8QeZ2IiIiIwscghSgMK8aaUGryD0hKTZ7F80RERESkjLgGKXv37sV9992HkSNH\nIi8vDxs2bAh6z5kzZ/Dggw+iuLgYhYWFmDp1Kk6dOhWH2hIBJSYjNs0qwKIhWZgyIB2LhmRx0TwR\nERGRwuKa3ctut6O8vBz3338/nnjiiaDvnz17FrNmzcJ9992HzZs3Iy8vD6dPn0Z2dnYcakvkUWIy\nYt203vGuBhEREVHSimuQMnPmTMycORMA8JOf/CTo+6tWrcKtt96KX//61z2vDR48OFbVIyIiIiKi\nONDsmpTu7m5s27YNw4cPx8KFC3Httddi+vTpePfdd+NdNSIiIiIiUpFmg5T6+nq0trbid7/7HaZP\nn4733nsPCxcuxJIlS7B9+/Z4V4+IiIiIiFSia25udse7EgBwzTXX4Le//S0WL14MALh48SJGjhyJ\ne+65B6+99lrP+x577DE0Nzfjf//3fwWPU1lZGZP6EhERERFRZMrKyiS/H9c1KVIKCgpgMBgwfPhw\nv9eHDRsmOeUr1AlHo7KyUtXjA4DVaoXZbE7oMmJxDmwLbZXB9tBWGWwPbZXB9tDG8QG2hdbKYHto\nqwyttYdmp3ulp6dj7NixQSMjZ86cQVFRUZxqRUREREREaovrSEprayuqqqoAeBbK19bW4tixY8jP\nz0dRURGWLVuGH//4x5g4cSKmTp2Kzz77DO+++67gfipERGIsNidWHbHhYpsLhb08m29ybxsiIiLt\niutIytGjRzF16lRMnToVDocDq1evxtSpU/Ev//IvAIC5c+fiP/7jP/DKK69g4sSJePXVV/HHP/4R\ns2bNime1iSiBWGxOLNjeiI1VDuy51ImNVQ4s2N4Ii80Z76oRERGRiLiOpEyZMgXNzc2S71m8eHHP\nYnoionCtOmJDtc3l91q1zYVVR2zclJOIiEijNLsmhYhICRfbXIKvXxJ5nYiIiOKPQQoRJbXCXnrB\n1weIvE5ERETxxyCFiJLairEmlJr8A5JSk2fxPBEREWmTZvdJIaLUoWb2rRKTEZtmFWDVERsutbkw\ngNm9iIiINI9BChHFlTf7lu/i9kP1ndg0q0DRQIWL5ImIiBIHp3sRUVxJZd8iIiKi1MQghYjiitm3\niIiIKBCDFCKKK2bfIiIiokAMUogorph9i4iIiAJx4TwRxRWzbxEREVEgBilEJEjNtMCBmH2LiIiI\nfDFIIaIgsUgLTERERCSGQQqRxgSOYDw8LAuvn3bEZETDSyotMEc8iIiISG0MUog0RGgE471qB7rc\nV9+zpaYdI/MNKDUZVAtYmBaYiIiI4onZvYg0RGgEwzdAAQB7lxuH6p3YWOXAgu2NsNiciteDaYGJ\niIgonhikEGmI2AiGGLV2ZmdaYCIiIoonTvci0hCxEQwpakzBYlpgIiIiiicGKUQasmKsCYfqO/2m\nfBl0wVO+fKk1BYtpgYmIiCheGKRQyonl/h/hEhrB8Gb3qm5x4mRzF+xdV9/PKVhERESUjBikUEpJ\nhP0/hEYwJhVmAbgaYHEKFhERESUzBimUUhJ9/w9OwSIiIqJUkHRBitVqTejjOxwOVY8fizJicQ5A\nZG1xrqVD8PXalo6g4yVDW8SijBq7C78+ZUTzNxfRPysNz5YbUZyt/DqZZLhWsSoD4O8qLZUBsD20\ncHwvtoV2ygDYHloqA4hte5jNZsn3Jl2QEuqEo1FXV6fq8b2SoQy1jx9pWxTlurC/IfgHfVBuhuDx\nkqEt1CzDYnPiR/saUW0zAugG0I1jzW7Vps8l8rWKZRn8XaWtMtge2jk+20JbZbA9tFWG1tqD+6RQ\nSknl/T8sNieW7G7C3K31WLK7SZFNIKWmzxERERFFKulGUoikpOr+H2olDBDbfFKNvVuIiIgodTBI\noZSTiovP1UoYILb5pFp7txAREVFq4HQvohSg1ohHKk+fIyIiIvVwJIUoBag14uGdPvfz3edh12en\nzPQ5IiIiUheDFKIUsGKsCYfqO/2mfCk14lFiMuJXw50oK+sb9bGIiIiIAAYpRCkhVRMGEBERUWJi\nkEIUgsXmxKojNlxsc6EwgTv3qZgwgIiIiBITgxQiCWql7iUiIiIicczuRSSBmxUSERERxR6DFCIJ\n3KyQiIiIKPY43YtIQiw2K0yWNS9ERERESmGQQiRBzdS9AFBjd+FH+7jmhYiIiMgXgxQiCWqn7n2p\nwim65iVWmbg4kkNaIHQf5sW7UkREFDcMUohCUDN172VHt+DrsVrzEk32Mt9OZY7LiH8d4GRwQxER\nuw/fnJiOUeY4VoyIiOKGQQpRHPXPSgMQHKgoueZFilj2suUHrMg2pomOrgR3Ko04tb2R09QoImL3\n4UsVTrwxME6VIiKiuGKQQiSixu7Cy182qToN6tlyI441u1Vb8xKKWPaynec70O4TOwWOrkilZuaG\nkRQusfuwTmSkkYiIkh+DFCIBFpsTD+5ph8Xu7nlNjQXtxdl6Vde8hCKWvaw9oG8YGIAwNTMpSew+\n7JfFLPlERKmKQQqRgFVHbH4BCqDeSIGaa15CEcpelqkH2gViDd8ARKxTmWPQYcludUefKPmIZdF7\ntpz3DhFRqmKQQiQgVUYKhLKXtXZ2Y2ttR9B7fdfJCHUqB/XS4fgVJ2rtV4dhmE6Z5BDLopfX3Rbv\nqhERUZwwSCESEItNHLUicCTHYnPim4BMS4HrZAI7ldkuO9Iyc7DlnH9ww3UqJJfQiKLVGqfKEBFR\n3DFIIRKwYqwJX1z2X5MSywXt8SR3bxjfTmVlZTP+4Yxb6HBJN/pERERE6mOQQiSgxGTE+smZeLkS\nPR31h4dlpcymh5Gsk0ml0SciIiJSF4MUIhHF2Xqsm+bZSS6aTQ9Thdji51QYfSIiIiJlMb8jkQxS\n+4KQh3ea2KIhWZgyIB2LhmT5BXEWmxNLdjdh7tZ6LNndBIvNGecaExERkVYl3UiKVeWVlmof3+Fw\nqHr8WJQRi3MAYtsW51qCs10BQG1LB6xWK2rsnt2xLzu60T8rDc+WG1GcHXqaUzK0t5fVakUegJdG\n6wF8d+7dbbBaPRtjBu4788XldqyfnCnrOgHJc62S8eeDZYTG9oj/8b3YFtopA2B7aKkMILbtYTab\nJd+bdEFKqBOORl1dnarH90qGMtQ+fqzboijXhf0Nwb8gBuVmoDmtF360z3cqWDeONbtlTwVLhvYO\n1R4vf9kUtO+Mxe7Gy5XomVInRzJcq1iUwd9V2iqD7aGd47MttFUG20NbZWitPTjdiLine truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAykAAAKACAYAAACYDjf4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3Xt4E/edL/63bMm2bGT5grkaDARzS0yJE0rLLSEXSBrS0GbThpLTpttyTjabh+6ekm3SUHoO64a0P7bbH8k+SQ+9hGzS7iltSggJoc0FEggJBkMhOBATGxkT27ItLMuyZI8lnT+MhGTN6DoajUbv1/PwJMjSfL4z37H4fuZ70/X29vpARERERESkEjnpLgAREREREVEwJilERERERKQqTFKIiIiIiEhVmKQQEREREZGqMEkhIiIiIiJVYZJCRERERESqwiSFiIiIiIhUJa1JyuHDh3H//fdj7ty5KCkpwUsvvRTy85KSEtE/GzduTFOJiYiIiIgo1fTpDO50OjFv3jysXbsWDz30UNjPz507F/L3EydO4P7778eaNWuUKiIRERERESksrUnKypUrsXLlSgDAww8/HPbz8ePHh/z99ddfx8yZM7F06VJFykdERERERMrLmDkp/f39ePnll/Gtb30r3UUhIiIiIqIUSmtPSjz++Mc/YnBwEGvXro363qamJgVKREREREREiaiuro7484xJUnbu3Im77roLY8eOjfreaCcdj6amJlmPJ8Vut8NsNjNOAlhH6o/FOlJ/LK3VkZKxWEfqj6W1OgK0d+1YR4wzWkYM9zp16hROnDjBoV5ERERERFkgI5KUnTt3YurUqbj55pvTXRQiIiIiIkqxtA736u/vR3NzMwDA6/Wira0Np06dQmlpKaZMmQIAGBgYwK5du7BhwwbodLp0FpeIiIiIiBSQ1p6UEydOYPny5Vi+fDlcLhe2bt2K5cuX48knnwy85+WXX4bT6cS6devSWFIiIiIiIlJKWntSli1bht7e3ojveeCBB/DAAw8oVCIiIiIiIkq3jJiTQkRERERE2YNJChERERERqQqTFCIiIiIiUhUmKUREREREpCpMUoiIiIiISFWYpBARERERkaowSSEiIiIiIlVJ6z4pqWK321V9PDEulyvlMbQYx491pP5YrCP1x9JSHSkZi3Wk/lha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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x10cfa0780>"
|
||||
"<Figure size 864x720 with 1 Axes>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -103,24 +115,21 @@
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def poly(X, Y, n):\n",
|
||||
" \"Best-fit degree-n polynomial for X, Y data.\"\n",
|
||||
" C = np.polyfit(X, Y, n)[::-1] # Array of coefficients, reversed\n",
|
||||
" return lambda x: sum(C[i] * x ** i for i in range(n + 1)) \n",
|
||||
"\n",
|
||||
"def show(X, Y, xlabel='Grade (feet/mile)', ylabel='Speed (mph)', fit=True): \n",
|
||||
"def show(X, Y, xlabel='Grade (feet/mile)', ylabel='Speed (mph)'): \n",
|
||||
" plt.rcParams[\"figure.figsize\"] = (12, 10)\n",
|
||||
" plt.style.use('fivethirtyeight')\n",
|
||||
" plt.scatter(X, Y)\n",
|
||||
" X1 = list(range(int(min(X)), int(max(X)) + 5))\n",
|
||||
" plt.ylabel(ylabel); plt.xlabel(xlabel)\n",
|
||||
" plt.minorticks_on()\n",
|
||||
" plt.grid(True, which='major')\n",
|
||||
" plt.grid(True, which='minor', alpha=0.4)\n",
|
||||
" if fit: \n",
|
||||
" F = poly(X, Y, 2)\n",
|
||||
" plt.plot(X1, [F(x) for x in X1], 'k-')\n",
|
||||
" plt.minorticks_on(); plt.grid(True, which='major'); plt.grid(True, which='minor', alpha=0.4)\n",
|
||||
" plt.scatter(X, Y) \n",
|
||||
" X1 = sorted(set(X))\n",
|
||||
" F = quadratic_fit(X, Y)\n",
|
||||
" plt.plot(X1, [F(x) for x in X1], 'k-')\n",
|
||||
" \n",
|
||||
"def quadratic_fit(X, Y):\n",
|
||||
" \"\"\"The quadratic function that best fits the X,Y vectors.\"\"\"\n",
|
||||
" a, b, c = np.polyfit(X, Y, 2)\n",
|
||||
" return lambda x: a * x ** 2 + b * x + c\n",
|
||||
"\n",
|
||||
"show(fpm, mph) "
|
||||
]
|
||||
},
|
||||
@@ -128,7 +137,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"So, I average a little under 14 mph when the overall route is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from around 40 or 50 ft/mile, speed falls off quickly, and by 140 ft/mile, I'm down near 8 mph. Note that 140 ft/mile is only 2.7% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flatish, then that's 8% grade on the up part.\n",
|
||||
"So, I average a little under 14 mph when the overall route is fairly flat, with a lot of variability from 12 to 16 mph, depending more on my level of effort than on the grade of the road. But from around 50 ft/mile grade speed falls off quickly: down to 12mph at 80 ft/mile; under 11 mph at 100 ft/mile; and under 9 mph at 130 ft/mile, Note that 130 ft/mile is only 2.5% grade, but if you figure a typical route is 1/3 up, 1/3 down, and 1/3 flatish, then that's 7.5% grade on the up part.\n",
|
||||
"\n",
|
||||
"# Estimating Duration\n",
|
||||
"\n",
|
||||
@@ -137,13 +146,11 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def duration(dist, climb, F=poly(fpm, mph, 2)):\n",
|
||||
"def duration(dist, climb, F=quadratic_fit(fpm, mph)):\n",
|
||||
" \"Given a distance in miles and total climb in feet, return estimated time in minutes.\"\n",
|
||||
" return 60 * dist / F(climb / dist)"
|
||||
]
|
||||
@@ -152,23 +159,21 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"For example, to get to Pescadero from La Honda, I could take the flatter [coast route](https://www.google.com/maps/dir/La+Honda,+California/Pescadero,+California/@37.2905834,-122.3896683,12z/data=!4m19!4m18!1m10!1m1!1s0x808faed4dc6265bd:0x51a109d3306a7219!2m2!1d-122.274227!2d37.3190255!3m4!1m2!1d-122.4039496!2d37.3116594!3s0x808f062b7d7585e7:0x942480c22f110b74!1m5!1m1!1s0x808f00b4b613c4c1:0x43c609077878b77!2m2!1d-122.3830152!2d37.2551636!3e1), or the shorter [creek route](https://www.google.com/maps/dir/La+Honda,+California/Pescadero,+California/@37.2905834,-122.3896683,12z/data=!4m19!4m18!1m10!1m1!1s0x808faed4dc6265bd:0x51a109d3306a7219!2m2!1d-122.274227!2d37.3190255!3m4!1m2!1d-122.3658887!2d37.2538867!3s0x808f00acf265bd43:0xb7e2a0c9ee355c3a!1m5!1m1!1s0x808f00b4b613c4c1:0x43c609077878b77!2m2!1d-122.3830152!2d37.2551636!3e1); which is faster?"
|
||||
"For example, to get to Pescadero from La Honda, I could take the flatter [coast route](https://www.google.com/maps/dir/La+Honda,+California/Pescadero,+California/@37.2905834,-122.3896683,12z/data=!4m19!4m18!1m10!1m1!1s0x808faed4dc6265bd:0x51a109d3306a7219!2m2!1d-122.274227!2d37.3190255!3m4!1m2!1d-122.4039496!2d37.3116594!3s0x808f062b7d7585e7:0x942480c22f110b74!1m5!1m1!1s0x808f00b4b613c4c1:0x43c609077878b77!2m2!1d-122.3830152!2d37.2551636!3e1) (15.7 miles, 344 ft climb), or the shorter [creek route](https://www.google.com/maps/dir/La+Honda,+California/Pescadero,+California/@37.2905834,-122.3896683,12z/data=!4m19!4m18!1m10!1m1!1s0x808faed4dc6265bd:0x51a109d3306a7219!2m2!1d-122.274227!2d37.3190255!3m4!1m2!1d-122.3658887!2d37.2538867!3s0x808f00acf265bd43:0xb7e2a0c9ee355c3a!1m5!1m1!1s0x808f00b4b613c4c1:0x43c609077878b77!2m2!1d-122.3830152!2d37.2551636!3e1) (13.5 miles, 735 ft climb); which is faster?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(68.914878773787706, 62.368854685107713)"
|
||||
"(69.15756109673171, 62.53280536304684)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -181,123 +186,123 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This suggests the coast route takes 7 or 8 minutes longer. Good to know, but other factors (like the scenery) are probably more important in making the choice.\n",
|
||||
"This suggests the shorter creek route would be about 7 minutes faster. Good to know, but other factors (like the scenery) are probably more important in making the choice.\n",
|
||||
"\n",
|
||||
"# Eddington Number\n",
|
||||
"\n",
|
||||
"> *Your [Eddington Number](https://www.triathlete.com/2011/04/training/measuring-bike-miles-eddington-number_301789) is the largest integer **e** for which you have bicycled **e** or more miles on **e** different days.*\n",
|
||||
"The physicist Sir Arthur Eddington was a pre-Strava bicyclist who favored this metric:\n",
|
||||
"\n",
|
||||
"Let's calculate mine, and see how many rides I need to take to improve it. I'm pretty sure I've done at least 50 rides of 50 miles, so:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"52"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def eddington(distances):\n",
|
||||
" return max(e for e, d in enumerate(sorted(distances, reverse=True), 1) if d >= e)\n",
|
||||
"> *Your [Eddington Number](https://www.triathlete.com/2011/04/training/measuring-bike-miles-eddington-number_301789) is the largest integer** E** for which you have bicycled** E** or more miles on** E** different days.*\n",
|
||||
"\n",
|
||||
"eddington(mls)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"So **my Eddington Number is 52**: I've done 52 rides of 52 miles or more. Let's see a plot of how far I have to go to improve this number:"
|
||||
"Let's calculate mine, and see how many rides I need to take to improve it. For various number of miles, I'll list the number of rides of at least that long that I've taken, and the *gap*—the number of additional rides I would need to reach that Eddington number."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAykAAAKSCAYAAADWEJRoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8E3X6B/DPJJmUUnpwFrBQriIgl6ByU67SItBSShJc\nFFbXVRFdcRVdXERFXJBlPWFZr996ANr0tJSrXCoioFA5FEHOCgi0HE1Lr0yS+f2RbaW2TVKaJpP2\n83699vX7MfPkyTN5CPbpzHdGyM/Pl0FERERERKQQKm8XQEREREREdCMOKUREREREpCgcUoiIiIiI\nSFE4pBARERERkaJwSCEiIiIiIkXhkEJERERERIrCIYWI6AY5OTkICQnB7NmzXX7NmjVrEBISgjVr\n1lTa3qdPH/Tp08fdJZKXLVmypNp+ExGR+3BIISKfFxIS4vR/O3fu9HaZHtWnTx+EhIR4u4xqlQ+C\nISEhiIyMhCxX/7iu7t27K/YYGrPyv1vV/a979+5V4k+ePIk333wTcXFx6N27N1q3bo2uXbsiISEB\nGzZs8MIREJEv0Hi7ACIid3n22Wdr3NexY0cPVmKXkZHh8ff0NQcPHsRnn32Ge+65x9ulUC1V931r\n1qxZlW2vvPIKUlNTERERgdGjR6NVq1bIyclBZmYmtm3bhscffxwvv/yyJ0omIh/CIYWIGoz58+d7\nu4RKOnfu7O0SFC0sLAx5eXlYvHgx4uLi0LRpU2+XRLXg6vdtzJgxePzxx3H77bdX2n7kyBHExMTg\n7bffRkJCAvr3718fZRKRj+LlXkTUKBUWFuK5555Dr169EBoaijvvvBMrVqyo8dIjADh16hRmzZqF\n8PBwtG/fHuPHj8fmzZtrjK9uTUr5+pUlS5bg0KFD0Ov16NixI9q1a4e7774be/furTbXxYsX8eij\nj6Jbt25o27Ythg8fjrVr12Lnzp0V+YDfLqU6e/YsgMqXwk2cOLFSzkOHDuGPf/wjIiIi0Lp1a9x2\n22147LHHcObMmSrvf+M6jK+++goTJ05EWFgYOnToAL1ej2PHjtX4OdSkbdu2eOSRR3D+/HmsWLHC\npdf8/nh/b+LEiVUuESt/zezZs3H69GnMnDkTnTt3RlhYGOLj43HkyBEAwOXLl/HEE0+gR48eCA0N\nxahRo/DVV185rGfjxo2IiopC+/bt0alTJ/zxj3/E6dOnq40tLS3F22+/jcjISNxyyy1o3749Ro0a\nhf/7v/+r8veuvI8TJ07EhQsXMGfOHNx6661o0aIFMjMzXfqslOLee++tMqAAQK9evRAfHw8Aje5y\nTCJyjmdSiKjRKSsrQ1xcHLKzs9GrVy/odDoUFBRg+fLl2LVrV7WvOXnyJKKionD16lWMGzcOffv2\nxenTpzFjxgyMGzeu1jUcOHAAb731Fu68807MnDkT586dQ0ZGBuLi4rBz505ERERUxObl5SEqKgpn\nz57FkCFDMHjwYFy6dAlPP/00Ro8eXSlvcHAwnn32WaxatQoFBQWVLsm58ZK3LVu24N5774XVasXk\nyZPRuXNn/Pjjj1i9ejUyMzORkZGBvn37Vql78+bN2LBhA8aNG4f7778fx44dQ1ZWFrKzs7F37160\nbNmyVp/DX//6V6xevRpvvfUWZs2ahdDQ0Fq9vjZ++eUXjB07FrfddhtmzJiBY8eOYcuWLZg8eTKy\nsrKQkJCA5s2bIz4+HhcvXkR6ejp0Oh327duHDh06VMm3bt06bN26FZMnT8aIESNw6NAhpKenY+fO\nncjKykLXrl0rYgsLCzFlyhTs378fffv2xR/+8AcAwLZt2/DXv/4V3333HVatWlXlPa5du4aoqCgE\nBQUhLi4OsiyjefPm9fYZ1UZqairOnDkDPz8/9OrVC8OHD4coirXKUR6v0fDHESKqjP8qEFGDUdNv\n14HKl6asWLEC2dnZuPvuu7F69WqoVPaTyk8++SRGjRpV7euffvppXL16FS+//DIef/zxiu2bNm3C\n9OnTa13r5s2bsXLlSsyYMaNi23//+188+eST+M9//oN//etfFdtfeuklnD17FnPmzMErr7xSsX32\n7NkYO3ZspbwhISGYP38+1q5di4KCgmovySkqKsIjjzwCSZKQnp6OkSNHVuz7+OOP8Ze//AWPPPII\ndu3aBUEQKr12/fr1SE1NRWRkZKX6Xn/9daxevRpPPPFErT6H4OBg/O1vf8O8efOwePFivP3227V6\nfW3s2rWrSv+eeOIJfPTRRxg7diwMBgOWLl1accy9e/fGyy+/jH//+9/V/t3atGkTEhMTER0dXbHt\n7bffxvPPP4958+YhNTW1Yvtzzz2H/fv348UXX8TcuXMrtpeVleG+++7Dp59+itjYWEyYMKHSexw5\ncgQGgwErV650+Qf5/Pz8agceR4YPH44RI0bU6jUPPPBApT+HhYVhxYoVNX6Hfs9kMiEjIwMqlQpj\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x10cf8b940>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Mi Rides Gap\n",
|
||||
"-- ----- ---\n",
|
||||
"52 53 -1\n",
|
||||
"53 51 2\n",
|
||||
"54 48 6\n",
|
||||
"55 46 9\n",
|
||||
"56 45 11\n",
|
||||
"57 42 15\n",
|
||||
"58 39 19\n",
|
||||
"59 34 25\n",
|
||||
"60 33 27\n",
|
||||
"61 27 34\n",
|
||||
"62 25 37\n",
|
||||
"63 23 40\n",
|
||||
"64 21 43\n",
|
||||
"65 20 45\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def edplot(distances, X):\n",
|
||||
" M = [min(X), max(X)]\n",
|
||||
" plt.plot(M, M, 'r-')\n",
|
||||
" plt.title('Eddington Number = {}'.format(eddington(distances)))\n",
|
||||
" show(X, [sum(d > x for d in distances) for x in X], fit=False,\n",
|
||||
" xlabel='Ride Distance', ylabel='Number of Rides longer than distance')\n",
|
||||
" \n",
|
||||
"edplot(mls, range(46, 81))"
|
||||
"def eddington(distances, unit):\n",
|
||||
" \"\"\"Print information on the number of rides and the Eddington gap.\"\"\"\n",
|
||||
" print(f'{unit} Rides Gap')\n",
|
||||
" print(f'-- ----- ---')\n",
|
||||
" for E in range(1, 1000):\n",
|
||||
" num_rides = sum(d >= E for d in distances)\n",
|
||||
" gap = E - num_rides\n",
|
||||
" if -1 <= gap <= 45:\n",
|
||||
" print(f'{E:2} {num_rides:2} {gap:2}')\n",
|
||||
"\n",
|
||||
"eddington(mls, 'Mi')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Here the gap between the straight line and the dotted line is my Eddington gap: the lines cross at 52 so that's my Eddington Number; at 60 miles the gap is 28, so I nneed 28 60+ mile rides to get an Eddington number of 60.\n",
|
||||
"So my **Eddington Number is 52**: I've done 53 rides of 52 miles or more, but not 53 rides of 53 miles. \n",
|
||||
"\n",
|
||||
"# Metric Eddington Number\n",
|
||||
"\n",
|
||||
"[Arthur Eddington](https://en.wikipedia.org/wiki/Arthur_Eddington) was born in 19th century England, so he used miles. You can get a bigger number using kilometers:"
|
||||
"We can also calculate the metric Eddington number:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x1038734a8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Km Rides Gap\n",
|
||||
"-- ----- ---\n",
|
||||
"75 75 0\n",
|
||||
"76 74 2\n",
|
||||
"77 73 4\n",
|
||||
"78 71 7\n",
|
||||
"79 70 9\n",
|
||||
"80 69 11\n",
|
||||
"81 66 15\n",
|
||||
"82 58 24\n",
|
||||
"83 57 26\n",
|
||||
"84 52 32\n",
|
||||
"85 51 34\n",
|
||||
"86 50 36\n",
|
||||
"87 48 39\n",
|
||||
"88 47 41\n",
|
||||
"89 46 43\n",
|
||||
"90 45 45\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"edplot([m * 1.60934 for m in mls], range(70, 101))"
|
||||
"eddington([m * 1.60934 for m in mls], 'Km')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"My metric Eddington Number is 74, and I only need 13 rides of 80 km (50 miles) to get to 80.\n",
|
||||
"My **metric Eddington Number is 75**, and I only need 11 rides of 80 km (50 miles) to get to 80.\n",
|
||||
"\n",
|
||||
"# H-Index\n",
|
||||
"\n",
|
||||
"Inspired by the [h-index](https://en.wikipedia.org/wiki/H-index) for scientific publications (and indirectly by Eddington), I invented a new h-index, or hill-index:\n",
|
||||
"Inspired by the [h-index](https://en.wikipedia.org/wiki/H-index) for scientific publications (and indirectly by Eddington's h-index-like metric), I invented a new h-index, or hill-index:\n",
|
||||
"\n",
|
||||
"> *Your **h-index** is the largest integer **h** for which you can persistently and repeatedly climb an **h** percent grade at **h** miles per hour.*\n",
|
||||
"\n",
|
||||
"My h-index is 6, because I regularly climb a 6% grade at 6 miles per hour or more, but I only occasionally climb a 7% grade at 7 mph. What's yours?"
|
||||
"My h-index is 6, because I can routinely climb a 6% grade at 6 miles per hour or more, but I only very rarely climb a 7% grade at 7 mph. What's yours?"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
@@ -316,7 +321,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.6.0"
|
||||
"version": "3.7.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
@@ -0,0 +1,437 @@
|
||||
Ride Thu, 6/14/2012 Coyote Creek Century with Juliet 8:08:15 100.07 mi 1,513 ft
|
||||
Ride Sat, 5/13/2017 Morgan Hill iCare Classic 7:27:21 100.05 mi 4,596 ft
|
||||
Ride Sat, 5/12/2018 ICare Classic, Morgan Hill 6:47:46 91.29 mi 4,160 ft
|
||||
Ride Sat, 5/6/2017 Wine Country Century 7:15:22 89.49 mi 5,246 ft
|
||||
Ride Fri, 8/10/2018 Bike Ride Northwest Day 6 6:14:18 84.70 mi 4,380 ft
|
||||
Ride Sat, 10/1/2016 Half Moon Bay overnight campout 7:30:38 80.07 mi 6,039 ft
|
||||
Ride Tue, 8/7/2018 Bike Ride Northwest Day 3 6:10:39 78.96 mi 5,092 ft
|
||||
Ride Sun, 6/15/2014 Sierra to the Sea Day 1 5:34:06 78.53 mi 4,777 ft
|
||||
Ride Sat, 4/23/2016 Wildflower Century 5:36:10 77.22 mi 4,193 ft
|
||||
Ride Mon, 6/16/2014 Sierra to the Sea Day 2 5:35:06 74.68 mi 2,451 ft
|
||||
Ride Fri, 8/12/2016 Half Moon Bay / Harvey's 73/7300 Birthday Ride 6:44:14 74.35 mi 6,610 ft
|
||||
Ride Wed, 10/14/2015 Half Moon Bay 6:07:55 72.97 mi 7,644 ft
|
||||
Ride Fri, 1/27/2017 Morning Ride 5:16:50 70.07 mi 2,539 ft
|
||||
Ride Tue, 6/17/2014 Sierra to the Sea Day 3 4:48:41 68.64 mi 825 ft
|
||||
Ride Thu, 8/9/2018 Bike Ride Northwest Day 5 4:58:07 68.41 mi 3,862 ft
|
||||
Ride Sat, 4/15/2017 Pescadero 6:13:12 68.34 mi 6,130 ft
|
||||
Ride Sun, 6/4/2017 Sequoia Challenge 6:17:25 66.52 mi 7,520 ft
|
||||
Ride Wed, 8/5/2015 08/05/2015 Palo Alto, CA 4:56:15 66.33 mi 2,054 ft
|
||||
Ride Fri, 8/28/2015 Pescadaro via OLH 5:18:51 66.01 mi 6,137 ft
|
||||
Ride Fri, 11/20/2015 Los Gatos 5:29:40 65.73 mi 5,380 ft
|
||||
Ride Sun, 6/3/2018 The Sequoia 5:58:15 64.92 mi 6,677 ft
|
||||
Ride Thu, 6/19/2014 Sierra to the Sea Day 5 4:32:55 63.69 mi 2,584 ft
|
||||
Ride Mon, 8/3/2015 08/03/2015 Palo Alto, CA 4:45:09 63.61 mi 1,877 ft
|
||||
Ride Fri, 6/10/2016 Morning Ride 4:21:38 62.84 mi 3,196 ft
|
||||
Ride Sun, 6/2/2013 Woodside Loop and Baylands 4:27:42 62.14 mi 2,169 ft
|
||||
Ride Wed, 6/12/2013 ride 4:39:46 61.39 mi 2,207 ft
|
||||
Ride Sat, 4/18/2015 Tunitas + Lobitos Creeks 5:14:38 61.27 mi 6,611 ft
|
||||
Ride Sat, 11/11/2017 Los Gatos / Bay Trail 4:26:24 60.74 mi 1,316 ft
|
||||
Ride Sun, 4/17/2016 La Honda / Skyline 5:10:41 60.35 mi 4,551 ft
|
||||
Ride Mon, 7/3/2017 Los Gatos / Bay Trail 4:25:41 60.28 mi 1,329 ft
|
||||
Ride Sat, 4/16/2016 OLH - San Gregorio - Tunitas 4:57:40 60.12 mi 4,744 ft
|
||||
Ride Sun, 1/29/2017 Los Gatos / Guadalupe / San Tomas / Bay Trails 4:33:38 60.11 mi 1,447 ft
|
||||
Ride Mon, 11/26/2018 Lunch Ride Los Gatos 4:21:35 60.03 mi 1,070 ft
|
||||
Ride Sat, 10/31/2015 Saratoga Ramble 5:01:57 59.10 mi 3,528 ft
|
||||
Ride Sat, 8/18/2018 Tour de Menlo 4:03:48 58.81 mi 2,467 ft
|
||||
Ride Sat, 4/26/2014 OLH - Tunitas Creek 5:15:26 58.69 mi 6,742 ft
|
||||
Ride Sat, 6/15/2013 Palo Alto to Santa Cruz 4:27:54 58.42 mi 4,431 ft
|
||||
Ride Sat, 10/11/2014 OLH / La Honda / Tunitas 5:05:23 58.29 mi 6,044 ft
|
||||
Ride Sat, 7/9/2016 Lunch Ride 3:50:23 58.23 mi 4,042 ft
|
||||
Ride Wed, 6/18/2014 Sierra to the Sea Day 4 4:57:53 57.64 mi 5,561 ft
|
||||
Ride Tue, 7/7/2015 07/07/2015 Palo Alto, CA 4:13:20 57.60 mi 1,280 ft
|
||||
Ride Mon, 8/6/2018 Bike Ride Northwest Day 2 4:35:48 57.58 mi 4,514 ft
|
||||
Ride Fri, 6/20/2014 Sierra to the Sea Day 6 4:33:39 56.91 mi 4,453 ft
|
||||
Ride Sat, 6/10/2017 Los Gatos / Creek Trails 3:50:24 56.28 mi 1,365 ft
|
||||
Ride Sat, 3/4/2017 Lunch Ride 3:58:25 56.26 mi 1,378 ft
|
||||
Ride Sun, 8/5/2018 Bike Ride Northwest Day 1 3:34:42 55.77 mi 1,824 ft
|
||||
Ride Sat, 8/13/2016 Petaluma - Point Reyes 4:30:12 54.75 mi 5,286 ft
|
||||
Ride Sun, 6/7/2015 Tour de Cure 3:59:47 54.65 mi 2,748 ft
|
||||
Ride Wed, 12/16/2015 Los Gatos 4:00:41 53.86 mi 2,595 ft
|
||||
Ride Fri, 6/2/2017 Morning Ride 3:57:45 53.49 mi 1,375 ft
|
||||
Ride Sun, 6/8/2014 Tour de Cure 75K 4:03:05 53.10 mi 2,596 ft
|
||||
Ride Sun, 11/6/2016 Los Gatos 3:38:28 52.49 mi 1,263 ft
|
||||
Ride Fri, 2/10/2017 Morning Ride 3:52:39 52.02 mi 1,739 ft
|
||||
Ride Sat, 2/23/2019 Crystal Springs Dam 4:02:11 51.93 mi 1,946 ft
|
||||
Ride Fri, 8/11/2017 Saratoga with Peter H 4:30:31 51.74 mi 2,871 ft
|
||||
Ride Sat, 2/4/2017 Canada Rd 3:46:34 51.66 mi 1,762 ft
|
||||
Ride Sun, 6/9/2013 Silicon Valley Tour de Cure 75K 3:58:37 51.63 mi 2,929 ft
|
||||
Ride Sun, 9/3/2017 Morning Ride 4:22:45 51.31 mi 2,526 ft
|
||||
Ride Mon, 7/27/2015 Palo Alto Cycling 3:48:23 50.93 mi 1,306 ft
|
||||
Ride Wed, 7/29/2015 07/29/2015 Palo Alto, CA 3:47:53 50.92 mi 1,873 ft
|
||||
Ride Sun, 6/26/2016 Afternoon Ride 3:16:33 50.78 mi 1,181 ft
|
||||
Ride Mon, 8/10/2015 08/10/2015 Palo Alto, CA 3:41:54 50.73 mi 1,325 ft
|
||||
Ride Sat, 10/15/2016 Los Gatos 3:28:16 50.64 mi 1,368 ft
|
||||
Ride Tue, 12/19/2017 Los Gatos 3:46:37 50.49 mi 1,929 ft
|
||||
Ride Fri, 6/28/2013 Kaffeehaus San Mateo 3:38:11 50.38 mi 1,028 ft
|
||||
Ride Thu, 10/5/2017 Big Sur 4:33:33 50.38 mi 4,528 ft
|
||||
Ride Sun, 11/20/2016 Lunch Ride 3:32:01 50.13 mi 1,847 ft
|
||||
Ride Sat, 1/13/2018 Canada to Coyote Point 3:59:24 50.09 mi 1,499 ft
|
||||
Ride Fri, 1/13/2017 Los Gatos Creek 3:52:28 50.01 mi 1,598 ft
|
||||
Ride Sun, 6/11/2017 Tour de Cure with Juliet 4:11:01 49.49 mi 2,713 ft
|
||||
Ride Sun, 9/11/2016 Santa Cruz via Mountain Charlie Rd 4:03:04 48.78 mi 3,300 ft
|
||||
Ride Sat, 7/23/2016 Morning Ride 3:30:50 48.45 mi 1,063 ft
|
||||
Ride Fri, 3/25/2016 Morning Ride 3:39:53 47.93 mi 2,438 ft
|
||||
Ride Sat, 8/20/2016 Tour de Menlo with Juliet 3:30:24 47.52 mi 2,133 ft
|
||||
Ride Sat, 8/15/2015 08/15/2015 Palo Alto, CA 3:35:03 47.12 mi 1,158 ft
|
||||
Ride Wed, 11/11/2015 Morning Ride 3:45:01 46.54 mi 2,559 ft
|
||||
Ride Fri, 7/21/2017 Morning Ride 3:35:00 46.19 mi 748 ft
|
||||
Ride Sat, 9/2/2017 Canada / Sheep Camp Trail 3:45:45 45.72 mi 2,034 ft
|
||||
Ride Mon, 1/19/2015 Canada Rd, etc. 2:57:14 45.64 mi 1,836 ft
|
||||
Ride Sun, 11/27/2016 Morning Ride 3:04:11 45.60 mi 1,378 ft
|
||||
Ride Sun, 7/2/2017 Afternoon Ride 3:10:38 45.30 mi 581 ft
|
||||
Ride Sat, 10/3/2015 Los Gatos 2:59:26 45.21 mi 1,148 ft
|
||||
Ride Sat, 7/2/2016 Morning Ride 3:23:20 45.21 mi 1,991 ft
|
||||
Ride Mon, 1/16/2017 Morning Ride 3:34:28 45.15 mi 1,434 ft
|
||||
Ride Sun, 1/15/2017 Lunch Ride 3:18:47 45.12 mi 1,873 ft
|
||||
Ride Sun, 4/9/2017 Lunch Ride 3:10:28 44.76 mi 636 ft
|
||||
Ride Sun, 10/15/2017 Los Gatos 2:51:53 44.71 mi 1,437 ft
|
||||
Ride Tue, 10/8/2013 work 3:22:55 44.58 mi 961 ft
|
||||
Ride Thu, 7/16/2015 07/16/2015 Mountain View, California 3:29:45 44.34 mi 1,339 ft
|
||||
Ride Sat, 10/28/2017 Mindego Ridge Winery 4:17:45 44.28 mi 4,331 ft
|
||||
Ride Sun, 9/2/2018 Saratoga 3:31:02 44.04 mi 1,900 ft
|
||||
Ride Fri, 9/23/2016 Los Gatos 2:53:22 43.93 mi 1,339 ft
|
||||
Ride Sat, 7/25/2015 07/25/2015 Palo Alto, California 4:02:27 43.62 mi 4,819 ft
|
||||
Ride Sat, 7/8/2017 Dumbarton / Niles 3:14:55 43.54 mi 627 ft
|
||||
Ride Sat, 6/9/2018 Kings Mountain 3:41:47 43.47 mi 3,543 ft
|
||||
Ride Fri, 3/10/2017 Morning Ride 4:13:51 43.22 mi 4,554 ft
|
||||
Ride Sat, 3/26/2016 Morning Ride 3:36:57 43.18 mi 3,173 ft
|
||||
Ride Sun, 10/18/2015 Afternoon Ride 3:00:02 43.04 mi 2,323 ft
|
||||
Ride Sat, 9/20/2014 Kings Mountain 3:26:36 43.00 mi 3,299 ft
|
||||
Ride Sat, 8/11/2018 Bike Ride Northwest Day 7 3:25:20 42.39 mi 2,241 ft
|
||||
Ride Sat, 3/18/2017 Morning Ride 3:37:01 42.29 mi 2,231 ft
|
||||
Ride Sat, 7/11/2015 07/11/2015 Walnut Creek, California 3:09:38 42.29 mi 3,284 ft
|
||||
Ride Thu, 1/22/2015 OLH, etc. 3:25:09 42.15 mi 2,957 ft
|
||||
Ride Sun, 11/9/2014 11/09/2014 Palo Alto, CA 3:24:57 42.10 mi 3,096 ft
|
||||
Ride Sun, 5/15/2016 Afternoon Ride 2:55:51 41.98 mi 1,693 ft
|
||||
Ride Sat, 3/25/2017 Morning Ride 3:37:45 41.94 mi 2,874 ft
|
||||
Ride Sun, 6/14/2015 06/14/2015 Palo Alto, CA 2:46:38 41.67 mi 1,086 ft
|
||||
Ride Sat, 7/28/2018 Coyote Hills / Dumbarton 3:25:39 41.66 mi 1,463 ft
|
||||
Ride Sun, 8/7/2016 Afternoon Ride 2:42:58 41.19 mi 1,526 ft
|
||||
Ride Sat, 2/11/2017 Morning Ride 3:19:34 41.16 mi 2,172 ft
|
||||
Ride Sun, 12/3/2017 Bay Trail 2:53:58 40.86 mi 568 ft
|
||||
Ride Mon, 5/29/2017 Morning Ride 3:52:04 40.83 mi 3,678 ft
|
||||
Ride Sat, 2/18/2017 Lunch Ride 3:01:13 40.82 mi 630 ft
|
||||
Ride Wed, 11/9/2016 Lunch Ride 2:52:06 40.82 mi 1,667 ft
|
||||
Ride Sat, 5/20/2017 Lunch Ride 3:07:43 40.82 mi 709 ft
|
||||
Ride Sat, 3/24/2018 Morning Ride 2:56:29 40.69 mi 561 ft
|
||||
Ride Sun, 11/19/2017 Belmont / Bay Trail 2:53:36 40.60 mi 453 ft
|
||||
Ride Sun, 3/26/2017 Lunch Ride 2:54:38 40.57 mi 518 ft
|
||||
Ride Sat, 5/25/2019 Crestview 3:17:16 40.56 mi 2,890 ft
|
||||
Ride Sat, 9/16/2017 Tour de Coop 3:24:53 40.55 mi 1,125 ft
|
||||
Ride Thu, 9/3/2015 Morning Ride 3:02:58 40.40 mi 1,181 ft
|
||||
Ride Sun, 2/5/2017 Morning Ride 2:53:48 40.40 mi 1,608 ft
|
||||
Ride Sun, 10/23/2016 Lunch Ride 2:41:33 40.33 mi 1,699 ft
|
||||
Ride Sat, 12/8/2018 Morning Ride 3:27:10 40.33 mi 2,300 ft
|
||||
Ride Sun, 2/12/2017 Lunch Ride 3:39:38 40.27 mi 2,717 ft
|
||||
Ride Sat, 12/2/2017 Dumbarton / Niles 2:57:48 40.26 mi 610 ft
|
||||
Ride Sun, 11/12/2017 Morning Ride 2:54:57 40.24 mi 656 ft
|
||||
Ride Sat, 11/15/2014 Kings Mountain again 3:25:14 40.18 mi 2,952 ft
|
||||
Ride Sun, 10/9/2016 Lunch Ride 2:41:06 40.14 mi 1,106 ft
|
||||
Ride Mon, 11/6/2017 Morning Ride 2:48:12 40.13 mi 509 ft
|
||||
Ride Sat, 12/17/2016 Morning Ride 3:11:31 40.10 mi 2,133 ft
|
||||
Ride Fri, 1/12/2018 Morning Ride 2:58:30 40.09 mi 427 ft
|
||||
Ride Sun, 12/18/2016 Morning Ride 3:04:01 40.03 mi 1,886 ft
|
||||
Ride Sat, 6/11/2016 Ring of Fire (Partial; Garmin troubles) 3:00:00 40.00 mi 0 ft
|
||||
Ride Sun, 1/25/2015 Canada Rd 2:45:51 39.99 mi 1,772 ft
|
||||
Ride Sat, 6/21/2014 Sierra to the Sea Day 7 3:36:53 39.77 mi 3,325 ft
|
||||
Ride Sat, 9/23/2017 Canada / Crestview 3:25:13 39.77 mi 2,444 ft
|
||||
Ride Fri, 12/27/2013 OLH to Page Mill 3:24:14 39.73 mi 3,365 ft
|
||||
Ride Sat, 4/30/2016 Ridge to Bridge 5:40:57 39.67 mi 5,377 ft
|
||||
Ride Fri, 10/30/2015 OLH - West Alpine 3:28:46 39.51 mi 4,505 ft
|
||||
Ride Sat, 9/5/2015 Ring of Fire 3:31:55 39.18 mi 3,553 ft
|
||||
Ride Wed, 8/28/2013 Train Track Crash 2:50:55 39.16 mi 928 ft
|
||||
Ride Sun, 2/22/2015 Canada Rd Plus 2:57:25 39.14 mi 1,834 ft
|
||||
Ride Sat, 4/8/2017 Lunch Ride 3:28:52 39.09 mi 3,117 ft
|
||||
Ride Sat, 11/14/2015 Morning Ride 3:09:31 39.00 mi 2,254 ft
|
||||
Ride Sun, 3/1/2015 Canada Rd 2:38:11 38.81 mi 1,856 ft
|
||||
Ride Wed, 11/22/2017 Morning Ride 2:55:22 38.77 mi 892 ft
|
||||
Ride Sat, 10/29/2016 Morning Ride 3:14:22 38.72 mi 2,201 ft
|
||||
Ride Sat, 4/6/2019 Coyote Hills / Dumbarton 2:50:52 38.71 mi 650 ft
|
||||
Ride Wed, 7/22/2015 07/22/2015 Palo Alto, CA 2:55:45 38.68 mi 627 ft
|
||||
Ride Mon, 6/22/2015 06/22/2015 Palo Alto, CA 2:51:10 38.55 mi 725 ft
|
||||
Ride Fri, 12/16/2016 Morning Ride 2:54:02 38.46 mi 1,053 ft
|
||||
Ride Sun, 10/7/2018 Westridge, Canada with Ted 3:09:25 38.29 mi 1,667 ft
|
||||
Ride Sat, 2/21/2015 Kings Mountain 3:13:05 38.21 mi 3,015 ft
|
||||
Ride Sat, 9/12/2015 Morning Ride 3:06:03 38.20 mi 3,342 ft
|
||||
Ride Sun, 2/15/2015 Canada Rd 2:35:29 38.06 mi 1,470 ft
|
||||
Ride Sun, 11/16/2014 Canada Rd 2:30:41 37.88 mi 1,548 ft
|
||||
Ride Sun, 10/5/2014 Canada Road Sunday 2:39:39 37.84 mi 1,644 ft
|
||||
Ride Mon, 11/23/2015 Home from Pigeon Point 3:29:29 37.70 mi 3,133 ft
|
||||
Ride Sat, 1/6/2018 Morning Ride 2:53:45 37.66 mi 1,503 ft
|
||||
Ride Sun, 1/7/2018 Dumbarton / Niles 2:39:17 37.64 mi 472 ft
|
||||
Ride Sun, 12/1/2013 Mt Hamilton 3:47:01 37.56 mi 4,921 ft
|
||||
Ride Sun, 3/18/2018 Lunch Ride 2:47:48 37.52 mi 827 ft
|
||||
Ride Sat, 9/22/2018 Morning Ride 2:52:01 37.45 mi 1,798 ft
|
||||
Ride Sun, 10/22/2017 Afternoon Ride 2:33:27 37.41 mi 1,024 ft
|
||||
Ride Sun, 5/4/2014 MTV-Woodside 2:41:21 37.41 mi 1,495 ft
|
||||
Ride Sat, 1/23/2016 Morning Ride 3:39:10 37.35 mi 2,949 ft
|
||||
Ride Sun, 9/16/2018 Dumbarton / Niles 2:38:41 37.26 mi 722 ft
|
||||
Ride Sun, 6/10/2018 Canada / Emerald Hills 3:21:31 37.26 mi 2,621 ft
|
||||
Ride Mon, 5/4/2015 Commute 2:43:06 37.25 mi 189 ft
|
||||
Ride Sat, 7/7/2018 Runymede Trail 3:01:51 37.07 mi 1,834 ft
|
||||
Ride Sun, 12/11/2016 Afternoon Ride 2:34:13 37.05 mi 1,463 ft
|
||||
Ride Sun, 11/29/2015 Mt Hamilton 3:40:48 37.00 mi 4,902 ft
|
||||
Ride Sat, 1/30/2016 Morning Ride 2:31:37 36.88 mi 1,345 ft
|
||||
Ride Mon, 2/18/2019 Niles 2:39:39 36.83 mi 571 ft
|
||||
Ride Sun, 1/21/2018 Alviso 2:35:58 36.82 mi 404 ft
|
||||
Ride Sat, 8/26/2017 Lunch Ride 2:41:49 36.71 mi 1,115 ft
|
||||
Ride Sat, 9/13/2014 Emerald Hills 2:55:30 36.71 mi 2,143 ft
|
||||
Ride Sun, 5/22/2016 Lunch Ride 2:12:20 36.68 mi 1,332 ft
|
||||
Ride Sat, 11/25/2017 Mt. Hamilton 3:41:22 36.65 mi 4,806 ft
|
||||
Ride Fri, 10/13/2017 Voyage 2:46:15 36.63 mi 505 ft
|
||||
Ride Tue, 5/12/2015 05/12/2015 Palo Alto, CA 2:47:15 36.54 mi 499 ft
|
||||
Ride Mon, 4/20/2015 Commute 2:57:44 36.31 mi 119 ft
|
||||
Ride Fri, 5/13/2016 Morning Ride 2:41:03 36.21 mi 456 ft
|
||||
Ride Sat, 12/3/2016 Morning Ride 3:08:37 36.20 mi 2,881 ft
|
||||
Ride Sun, 12/7/2014 12/07/2014 Palo Alto, CA 2:43:35 36.16 mi 1,569 ft
|
||||
Ride Sun, 9/30/2018 Canada 2:48:41 36.12 mi 1,480 ft
|
||||
Ride Fri, 3/30/2018 Morning Ride 2:38:07 36.11 mi 285 ft
|
||||
Ride Sun, 11/5/2017 Lunch Ride 3:24:01 35.91 mi 2,231 ft
|
||||
Ride Sun, 2/8/2015 Commute 2:28:46 35.85 mi 1,142 ft
|
||||
Ride Tue, 6/26/2018 Return from Chabot Lake with Juliet 3:21:30 35.81 mi 817 ft
|
||||
Ride Sat, 3/30/2019 Morning Ride 3:23:55 35.78 mi 2,861 ft
|
||||
Ride Sun, 11/22/2015 Pigeon Point 3:14:41 35.73 mi 3,230 ft
|
||||
Ride Mon, 9/19/2016 Sunnyvale 2:37:04 35.68 mi 745 ft
|
||||
Ride Thu, 4/9/2015 Palo Alto Cycling 2:35:47 35.51 mi 117 ft
|
||||
Ride Sun, 8/21/2016 Canada 2:20:21 35.42 mi 1,348 ft
|
||||
Ride Tue, 10/28/2014 Woodside 2:36:36 35.39 mi 1,560 ft
|
||||
Ride Sun, 1/27/2019 Crystal Springs Dam Bridge 2:28:21 35.38 mi 1,480 ft
|
||||
Ride Thu, 4/26/2018 San Mateo 2:38:26 35.31 mi 666 ft
|
||||
Ride Thu, 12/22/2016 Half Moon Bay 2:53:00 35.26 mi 2,671 ft
|
||||
Ride Tue, 6/7/2016 Los Altos 2:41:13 35.18 mi 1,070 ft
|
||||
Ride Sat, 3/15/2014 Canada - Steve 2:51:50 35.01 mi 1,607 ft
|
||||
Ride Sun, 12/6/2015 Canada Rd 2:15:05 34.67 mi 1,237 ft
|
||||
Ride Wed, 9/13/2017 Healdburg / Jimtown 2:08:03 34.45 mi 912 ft
|
||||
Ride Thu, 10/2/2014 10/02/2014 Mountain View, California 3:08:06 34.28 mi 2,864 ft
|
||||
Ride Sat, 2/1/2014 OLH to Page Mill 3:07:43 34.26 mi 3,099 ft
|
||||
Ride Sat, 10/21/2017 Pescadero 2:47:08 34.25 mi 2,556 ft
|
||||
Ride Sat, 7/30/2016 Morning Ride 2:50:15 34.19 mi 2,799 ft
|
||||
Ride Mon, 7/10/2017 Morning Ride 2:38:59 34.18 mi 984 ft
|
||||
Ride Thu, 7/31/2014 Work commute 2:36:53 34.15 mi 564 ft
|
||||
Ride Sat, 12/15/2018 Lunch Ride 2:50:19 34.10 mi 1,683 ft
|
||||
Ride Sat, 1/20/2018 Afternoon Ride 2:28:18 34.02 mi 525 ft
|
||||
Ride Sun, 12/4/2016 Morning Ride 2:29:29 34.00 mi 1,161 ft
|
||||
Ride Sat, 10/8/2016 Lunch Ride 2:25:17 33.95 mi 1,375 ft
|
||||
Ride Thu, 10/16/2014 Commute 2:40:01 33.76 mi 615 ft
|
||||
Ride Fri, 11/11/2016 OLH 2:44:59 33.69 mi 2,175 ft
|
||||
Ride Sat, 9/3/2016 Morning Ride 3:07:28 33.65 mi 2,792 ft
|
||||
Ride Sun, 4/19/2015 Canada Rd 2:23:17 33.56 mi 1,466 ft
|
||||
Ride Sat, 8/12/2017 Afternoon Ride 2:41:24 33.54 mi 633 ft
|
||||
Ride Sat, 2/14/2015 Rancho San Antonio 2:45:23 33.53 mi 2,075 ft
|
||||
Ride Sat, 2/27/2016 Morning Ride 2:47:15 33.51 mi 2,005 ft
|
||||
Ride Sun, 9/17/2017 Canada and off road 2:36:04 33.50 mi 1,772 ft
|
||||
Ride Sat, 2/24/2018 Los Altos Hills on and off road 3:10:47 33.49 mi 2,343 ft
|
||||
Ride Sun, 1/26/2014 Canada Rd 2:05:59 33.12 mi 1,446 ft
|
||||
Ride Sat, 4/27/2019 Morning Ride 2:31:48 33.04 mi 1,722 ft
|
||||
Ride Sun, 5/12/2019 Peninsula Bike Trail to Bay Trail 2:29:05 33.00 mi 846 ft
|
||||
Ride Sun, 8/20/2017 Lunch Ride 2:23:02 32.96 mi 1,407 ft
|
||||
Ride Sun, 3/6/2016 Lunch Ride 2:57:54 32.86 mi 2,566 ft
|
||||
Ride Sun, 3/5/2017 Lunch Ride 2:57:09 32.82 mi 1,713 ft
|
||||
Ride Sat, 10/21/2017 Back from Pescadero 2:36:50 32.80 mi 2,382 ft
|
||||
Ride Sat, 12/16/2017 Morning Ride 2:48:58 32.72 mi 2,320 ft
|
||||
Ride Tue, 8/23/2016 Morning Ride 2:32:15 32.61 mi 354 ft
|
||||
Ride Fri, 12/9/2016 Morning Ride 3:04:52 32.55 mi 2,365 ft
|
||||
Ride Sun, 11/1/2015 Lunch Ride 2:20:35 32.49 mi 1,553 ft
|
||||
Ride Sat, 4/14/2018 Lunch Ride 2:21:49 32.43 mi 666 ft
|
||||
Ride Fri, 1/26/2018 Morning Ride 2:23:38 32.41 mi 295 ft
|
||||
Ride Sun, 8/16/2015 08/16/2015 Palo Alto, CA 2:29:53 32.40 mi 1,650 ft
|
||||
Ride Sat, 5/9/2015 OLH 2:30:17 32.33 mi 2,788 ft
|
||||
Ride Wed, 1/31/2018 Morning Ride 3:04:15 32.28 mi 2,526 ft
|
||||
Ride Sat, 4/4/2015 Rancho San Antonio 2:55:37 32.26 mi 2,136 ft
|
||||
Ride Sat, 3/16/2019 Morning Ride 2:58:43 32.26 mi 2,316 ft
|
||||
Ride Sun, 12/27/2015 Canada Rd with Juliet 2:24:56 32.22 mi 1,491 ft
|
||||
Ride Mon, 5/18/2015 05/18/2015 Palo Alto, CA 2:24:45 32.22 mi 807 ft
|
||||
Ride Sun, 4/8/2018 Lunch Ride 2:21:54 32.18 mi 1,296 ft
|
||||
Ride Sun, 5/3/2015 Canada Rd 2:12:24 32.02 mi 1,384 ft
|
||||
Ride Wed, 6/17/2015 06/17/2015 Mountain View, California 2:13:42 32.01 mi 650 ft
|
||||
Ride Sat, 11/7/2015 Crystal Springs Part 1 2:15:00 32.00 mi 0 ft
|
||||
Ride Sun, 8/23/2015 Afternoon Ride 2:24:29 31.90 mi 2,444 ft
|
||||
Ride Sun, 4/12/2015 Palo Alto Cycling 2:01:49 31.76 mi 1,210 ft
|
||||
Ride Sun, 11/13/2016 Afternoon Ride 2:23:46 31.71 mi 1,273 ft
|
||||
Ride Fri, 10/7/2016 Morning Ride 2:26:46 31.65 mi 2,382 ft
|
||||
Ride Thu, 8/15/2013 08/15/2013 Palo Alto, CA 2:19:27 31.64 mi 555 ft
|
||||
Ride Wed, 10/30/2013 work 2:22:00 31.55 mi 995 ft
|
||||
Ride Sun, 9/18/2016 Morning Ride 2:20:46 31.48 mi 1,506 ft
|
||||
Ride Tue, 6/18/2013 work etc (headwinds) 2:03:34 31.48 mi 809 ft
|
||||
Ride Sun, 3/11/2018 Lunch Ride 2:23:14 31.42 mi 686 ft
|
||||
Ride Sat, 3/12/2016 Lunch Ride 2:10:01 31.39 mi 1,198 ft
|
||||
Ride Sun, 1/22/2017 Dumbarton 2:23:36 31.27 mi 591 ft
|
||||
Ride Sat, 9/29/2018 Kings 2:36:47 31.23 mi 1,949 ft
|
||||
Ride Sat, 3/23/2019 Morning Ride 2:33:27 31.19 mi 1,529 ft
|
||||
Ride Sat, 4/13/2019 Alviso 2:10:04 31.18 mi 397 ft
|
||||
Ride Mon, 11/10/2014 Commute 2:22:39 31.18 mi 800 ft
|
||||
Ride Mon, 5/25/2015 05/25/2015 Palo Alto, CA 2:19:26 31.14 mi 1,591 ft
|
||||
Ride Mon, 2/16/2015 Portola Valley Loop 2:09:15 31.11 mi 1,283 ft
|
||||
Ride Wed, 9/21/2016 Morning Ride 2:16:04 31.09 mi 551 ft
|
||||
Ride Sat, 3/11/2017 Afternoon Ride 2:19:05 31.04 mi 1,368 ft
|
||||
Ride Sun, 7/29/2018 Lunch Ride 2:26:56 30.92 mi 1,578 ft
|
||||
Ride Fri, 11/10/2017 Lunch Ride 2:20:46 30.92 mi 312 ft
|
||||
Ride Mon, 6/12/2017 Morning Ride 2:20:16 30.90 mi 554 ft
|
||||
Ride Thu, 12/29/2016 Morning Ride 2:13:46 30.86 mi 1,083 ft
|
||||
Ride Sat, 4/22/2017 Lunch Ride 2:21:31 30.80 mi 1,237 ft
|
||||
Ride Mon, 9/7/2015 Healdsburg 2:09:43 30.76 mi 1,037 ft
|
||||
Ride Sat, 1/14/2017 Afternoon Ride 2:12:37 30.71 mi 466 ft
|
||||
Ride Mon, 9/4/2017 Kings Mountain 2:40:57 30.69 mi 2,431 ft
|
||||
Ride Sun, 8/9/2015 08/09/2015 Palo Alto, CA 2:15:39 30.66 mi 1,348 ft
|
||||
Ride Sat, 12/12/2015 Lunch Ride 2:16:20 30.56 mi 1,434 ft
|
||||
Ride Thu, 12/28/2017 Morning Ride 2:17:38 30.54 mi 430 ft
|
||||
Ride Mon, 1/30/2017 Morning Ride 2:19:47 30.49 mi 696 ft
|
||||
Ride Sun, 8/27/2017 Lunch Ride 2:16:36 30.47 mi 774 ft
|
||||
Ride Fri, 10/12/2018 Lunch Ride 2:16:25 30.44 mi 348 ft
|
||||
Ride Mon, 6/25/2018 Chabot Lake Overnight Bike packing with Juliet 3:02:49 30.41 mi 1,250 ft
|
||||
Ride Sat, 2/28/2015 Palo Alto Cycling 2:40:24 30.37 mi 2,535 ft
|
||||
Ride Sat, 6/24/2017 Afternoon Ride 2:06:05 30.31 mi 338 ft
|
||||
Ride Tue, 6/2/2015 06/02/2015 Mountain View, California 2:09:58 30.30 mi 784 ft
|
||||
Ride Mon, 5/27/2019 Canada / Sheep camp / Water dog lake 2:37:11 30.27 mi 1,444 ft
|
||||
Ride Sat, 1/2/2016 Los Altos Hills 2:29:48 30.27 mi 1,952 ft
|
||||
Ride Fri, 6/23/2017 Morning Ride 2:17:16 30.27 mi 515 ft
|
||||
Ride Sun, 4/2/2017 Morning Ride 2:20:47 30.23 mi 407 ft
|
||||
Ride Sat, 8/25/2018 Morning Ride 2:22:42 30.22 mi 2,257 ft
|
||||
Ride Sun, 9/14/2014 09/14/2014 Palo Alto, CA 2:06:48 30.18 mi 1,204 ft
|
||||
Ride Sat, 8/19/2017 Lunch Ride 2:06:39 30.17 mi 627 ft
|
||||
Ride Sun, 3/12/2017 Morning Ride 2:18:13 30.16 mi 600 ft
|
||||
Ride Sat, 11/21/2015 Morning Ride 2:20:54 30.16 mi 1,499 ft
|
||||
Ride Wed, 10/12/2016 Morning Ride 2:19:51 30.11 mi 328 ft
|
||||
Ride Sun, 7/8/2018 Lunch Ride 2:12:19 30.04 mi 768 ft
|
||||
Ride Tue, 11/22/2016 Morning Ride 2:18:57 30.04 mi 518 ft
|
||||
Ride Wed, 3/4/2015 Commute 2:15:56 30.02 mi 1,125 ft
|
||||
Ride Sun, 3/25/2018 Dumbarton / Coyote Hills / Middle of the Bay 2:31:51 30.01 mi 709 ft
|
||||
Ride Tue, 5/31/2016 Google Bike around campus 2:30:00 30.00 mi 0 ft
|
||||
Ride Tue, 2/14/2017 Morning Ride 2:22:16 29.92 mi 463 ft
|
||||
Ride Sun, 5/31/2015 05/31/2015 Palo Alto, California 2:35:24 29.85 mi 2,568 ft
|
||||
Ride Tue, 11/1/2016 Morning Ride 2:15:55 29.78 mi 515 ft
|
||||
Ride Sun, 6/5/2016 Morning Ride 2:18:02 29.70 mi 1,293 ft
|
||||
Ride Sun, 5/26/2019 San Carlos / Bay Trail 2:17:51 29.55 mi 620 ft
|
||||
Ride Thu, 8/13/2015 08/13/2015 Palo Alto, CA 2:13:58 29.51 mi 778 ft
|
||||
Ride Sun, 7/14/2013 07/14/2013 Palo Alto, CA 2:23:07 29.34 mi 739 ft
|
||||
Ride Sun, 4/3/2016 Lunch Ride 2:03:38 29.31 mi 810 ft
|
||||
Ride Mon, 3/9/2015 Palo Alto Cycling 1:57:50 29.21 mi 115 ft
|
||||
Ride Fri, 2/23/2018 Morning Ride 2:08:28 29.21 mi 166 ft
|
||||
Ride Sat, 10/7/2017 Afternoon Ride 2:02:43 29.18 mi 394 ft
|
||||
Ride Sat, 1/17/2015 Palo Alto Cycling 2:08:38 29.06 mi 1,587 ft
|
||||
Ride Sat, 1/18/2014 Los Altos Hills 2:32:23 29.03 mi 1,918 ft
|
||||
Ride Sat, 6/20/2015 06/20/2015 Palo Alto, CA 2:06:45 28.87 mi 1,650 ft
|
||||
Ride Sun, 11/3/2013 work 2:11:08 28.74 mi 841 ft
|
||||
Ride Wed, 8/16/2017 Lunch Ride 2:15:48 28.67 mi 732 ft
|
||||
Ride Sat, 1/9/2016 Morning Ride 2:07:35 28.54 mi 1,289 ft
|
||||
Ride Sat, 9/19/2015 Los Altos Hills 2:31:24 28.51 mi 1,611 ft
|
||||
Ride Wed, 8/12/2015 08/12/2015 Palo Alto, CA 2:02:14 28.48 mi 751 ft
|
||||
Ride Sun, 7/23/2017 Morning Ride 2:57:35 28.43 mi 2,562 ft
|
||||
Ride Mon, 8/24/2015 Morning Ride 2:10:31 28.35 mi 427 ft
|
||||
Ride Wed, 6/26/2013 work 2:01:29 28.33 mi 627 ft
|
||||
Ride Sun, 4/28/2019 Arastradsero 2:29:59 28.21 mi 1,355 ft
|
||||
Ride Sun, 7/19/2015 07/19/2015 Palo Alto, CA 2:00:27 28.17 mi 1,037 ft
|
||||
Ride Fri, 12/28/2018 Lunch Ride with Juliet 2:17:33 28.10 mi 331 ft
|
||||
Ride Tue, 5/17/2016 Morning Ride 2:06:55 28.09 mi 551 ft
|
||||
Ride Wed, 10/5/2016 Morning Ride 2:10:47 28.05 mi 276 ft
|
||||
Ride Wed, 6/22/2016 Morning Ride 2:00:40 27.99 mi 374 ft
|
||||
Ride Mon, 3/16/2015 Commute 2:06:51 27.97 mi 70 ft
|
||||
Ride Sun, 2/25/2018 Lunch Ride 2:10:54 27.88 mi 958 ft
|
||||
Ride Sat, 10/27/2018 Morning Ride 2:29:13 27.88 mi 1,581 ft
|
||||
Ride Mon, 6/20/2016 Morning Ride 1:52:13 27.77 mi 531 ft
|
||||
Ride Sun, 12/2/2018 Lunch Ride 2:34:14 27.72 mi 1,506 ft
|
||||
Ride Mon, 3/19/2018 Morning Ride 2:06:35 27.62 mi 860 ft
|
||||
Ride Mon, 12/17/2018 Morning Ride 2:16:12 27.60 mi 246 ft
|
||||
Ride Sat, 10/14/2017 Afternoon Ride 2:04:53 27.52 mi 387 ft
|
||||
Ride Sat, 10/18/2014 Bikepacking Monte Bello 2:54:20 27.44 mi 2,992 ft
|
||||
Ride Sun, 4/15/2018 Morning Ride 2:17:16 27.43 mi 1,667 ft
|
||||
Ride Mon, 4/10/2017 Morning Ride 2:03:19 27.40 mi 282 ft
|
||||
Ride Tue, 5/7/2019 Lunch Ride 2:07:55 27.37 mi 820 ft
|
||||
Ride Sun, 11/25/2018 Afternoon Ride 1:56:26 27.34 mi 203 ft
|
||||
Ride Wed, 4/29/2015 Palo Alto Cycling 2:03:14 27.33 mi 75 ft
|
||||
Ride Tue, 1/17/2017 Morning Ride 2:07:17 27.30 mi 535 ft
|
||||
Ride Tue, 9/30/2014 09/30/2014 Palo Alto, CA 2:07:33 27.28 mi 636 ft
|
||||
Ride Sat, 9/17/2016 TourDeCoop.org 2:04:27 27.24 mi 479 ft
|
||||
Ride Sat, 1/12/2019 Lunch Ride 1:58:47 27.24 mi 1,079 ft
|
||||
Ride Mon, 3/30/2015 Woodside Loop 1:47:46 27.22 mi 1,081 ft
|
||||
Ride Tue, 11/17/2015 Afternoon Ride 2:04:48 27.12 mi 830 ft
|
||||
Ride Sun, 8/13/2017 Woodside Loop (Battery ran down) 2:00:00 27.00 mi 1,000 ft
|
||||
Ride Sat, 1/31/2015 Alpine Rd 2:29:26 26.98 mi 2,362 ft
|
||||
Ride Sun, 2/28/2016 Woodside Loop 1:43:34 26.93 mi 843 ft
|
||||
Ride Sun, 4/1/2018 Lunch Ride 2:30:35 26.92 mi 1,831 ft
|
||||
Workout Wed, 5/3/2017 Palo Alto Road Cycling 2:06:05 26.86 mi 1,411 ft
|
||||
Ride Fri, 9/9/2016 Morning Ride 1:56:44 26.85 mi 1,086 ft
|
||||
Ride Sun, 9/23/2018 Morning Ride 1:57:48 26.83 mi 512 ft
|
||||
Ride Sat, 10/4/2014 Woodside Loop 1:52:09 26.71 mi 1,213 ft
|
||||
Ride Thu, 5/7/2015 Commute 1:55:36 26.58 mi 68 ft
|
||||
Ride Sun, 3/24/2019 Afternoon Ride 2:42:45 26.57 mi 2,267 ft
|
||||
Ride Thu, 8/31/2017 Morning Ride 2:00:02 26.54 mi 817 ft
|
||||
Ride Sun, 4/24/2016 Afternoon Ride 1:50:08 26.53 mi 935 ft
|
||||
Ride Sun, 12/17/2017 Lunch Ride 1:50:51 26.53 mi 217 ft
|
||||
Ride Tue, 7/4/2017 Lunch Ride 1:53:04 26.50 mi 459 ft
|
||||
Ride Tue, 5/8/2018 Afternoon Ride 2:34:11 26.50 mi 1,791 ft
|
||||
Ride Tue, 5/26/2015 05/26/2015 Palo Alto, CA 2:01:47 26.50 mi 591 ft
|
||||
Ride Thu, 8/4/2016 Afternoon Ride 1:55:47 26.49 mi 659 ft
|
||||
Ride Wed, 6/8/2016 Lunch Ride 1:48:19 26.48 mi 597 ft
|
||||
Ride Sun, 9/9/2018 Lunch Ride 2:00:49 26.46 mi 479 ft
|
||||
Ride Sat, 5/21/2016 Maker Faire 1:57:14 26.44 mi 207 ft
|
||||
Ride Wed, 4/1/2015 Commute 1:55:15 26.44 mi 71 ft
|
||||
Ride Wed, 6/29/2016 Morning Ride 1:49:33 26.39 mi 561 ft
|
||||
Ride Sat, 9/9/2017 Lunch Ride 1:59:01 26.38 mi 1,112 ft
|
||||
Ride Fri, 6/3/2016 Morning Ride 1:56:57 26.38 mi 502 ft
|
||||
Ride Fri, 3/31/2017 Morning Ride 2:01:41 26.36 mi 495 ft
|
||||
Ride Sat, 12/13/2014 Westridge (up the back way; after the rain) 2:01:01 26.35 mi 1,495 ft
|
||||
Ride Sun, 4/14/2019 Huddart - Paul Hopkins 2:08:57 26.34 mi 1,601 ft
|
||||
Ride Sat, 6/29/2013 Untitled 1:48:50 26.33 mi 1,091 ft
|
||||
Ride Sat, 4/25/2015 Woodside 1:54:30 26.28 mi 1,220 ft
|
||||
Ride Tue, 1/31/2017 Morning Ride 2:01:18 26.27 mi 384 ft
|
||||
Ride Tue, 6/28/2016 Morning Ride 1:55:31 26.27 mi 571 ft
|
||||
Ride Sat, 5/19/2018 Morning Ride 2:00:24 26.25 mi 958 ft
|
||||
Ride Thu, 6/30/2016 Morning Ride 1:52:16 26.24 mi 499 ft
|
||||
Ride Sun, 2/19/2017 Afternoon Ride 1:56:46 26.23 mi 1,138 ft
|
||||
Ride Thu, 8/18/2016 Morning Ride 1:58:06 26.23 mi 712 ft
|
||||
Ride Sun, 4/20/2014 Afternoon Ride 1:52:52 26.23 mi 102 ft
|
||||
Ride Sun, 5/10/2015 Arastadero 1:48:58 26.22 mi 1,148 ft
|
||||
Ride Thu, 5/19/2016 Morning Ride 1:52:56 26.14 mi 938 ft
|
||||
Ride Mon, 12/31/2018 Morning Ride 2:00:24 26.11 mi 545 ft
|
||||
Ride Fri, 12/15/2017 Afternoon Ride 1:51:36 26.07 mi 226 ft
|
||||
Ride Sun, 1/18/2015 Palo Alto Cycling 1:38:16 26.02 mi 1,257 ft
|
||||
Ride Mon, 10/3/2016 Morning Ride 1:54:45 26.01 mi 646 ft
|
||||
Ride Tue, 7/14/2015 07/14/2015 Mountain View, California 2:02:36 25.99 mi 502 ft
|
||||
Ride Fri, 12/18/2015 Lunch Ride 1:58:57 25.93 mi 909 ft
|
||||
Ride Tue, 6/13/2017 Morning Ride 1:55:30 25.89 mi 289 ft
|
||||
Ride Mon, 8/4/2014 To the Sea 2:17:11 25.87 mi 2,080 ft
|
||||
Ride Wed, 9/25/2013 work and with kris 2:07:40 25.81 mi 593 ft
|
||||
Ride Sun, 9/13/2015 Afternoon Ride 1:49:31 25.78 mi 1,152 ft
|
||||
Ride Sun, 3/3/2019 Afternoon Ride 2:00:06 25.73 mi 390 ft
|
||||
Ride Thu, 1/26/2017 Morning Ride 1:56:09 25.67 mi 259 ft
|
||||
Ride Sun, 5/6/2018 Morning Ride 1:55:05 25.67 mi 1,148 ft
|
||||
Ride Sat, 7/29/2017 Lunch Ride 1:53:50 25.65 mi 988 ft
|
||||
Ride Wed, 8/20/2014 08/20/2014 Palo Alto, CA 1:49:35 25.61 mi 497 ft
|
||||
Ride Sat, 4/19/2014 Lunch Ride 1:49:37 25.60 mi 1,111 ft
|
||||
Ride Mon, 9/3/2018 Afternoon Ride 1:59:08 25.54 mi 331 ft
|
||||
Ride Mon, 6/2/2014 Work 1:59:33 25.51 mi 627 ft
|
||||
Ride Fri, 12/11/2015 Afternoon Ride 2:12:40 25.44 mi 1,719 ft
|
||||
Ride Fri, 2/9/2018 Morning Ride 1:56:11 25.41 mi 318 ft
|
||||
Ride Sun, 8/26/2018 Afternoon Ride 1:49:16 25.37 mi 377 ft
|
||||
Ride Sun, 7/9/2017 Afternoon Ride 1:50:30 25.36 mi 682 ft
|
||||
Ride Mon, 6/26/2017 Morning Ride 1:52:26 25.34 mi 226 ft
|
||||
Ride Fri, 9/14/2018 Lunch Ride 1:50:05 25.34 mi 541 ft
|
||||
Ride Fri, 3/1/2019 Morning Ride 2:00:23 25.34 mi 121 ft
|
||||
Ride Sun, 1/13/2019 Lunch Ride 1:51:40 25.33 mi 715 ft
|
||||
Ride Wed, 4/12/2017 Morning Ride 1:59:22 25.33 mi 686 ft
|
||||
Ride Wed, 6/14/2017 Morning Ride 1:51:32 25.33 mi 308 ft
|
||||
Ride Sat, 11/28/2015 Lunch Ride 1:43:56 25.31 mi 1,122 ft
|
||||
Ride Mon, 11/27/2017 Morning Ride 1:55:39 25.31 mi 184 ft
|
||||
Ride Fri, 11/28/2014 11/28/2014 Palo Alto, CA 1:45:13 25.30 mi 1,112 ft
|
||||
Ride Fri, 4/13/2018 Morning Ride 1:53:39 25.28 mi 344 ft
|
||||
Ride Fri, 9/15/2017 Morning Ride 1:56:55 25.28 mi 384 ft
|
||||
Ride Tue, 12/31/2013 Woodside Loop - Last Ride of the Year 1:45:28 25.27 mi 1,207 ft
|
||||
Ride Sun, 10/14/2018 Lunch Ride 2:13:13 25.23 mi 1,421 ft
|
||||
Ride Sat, 11/22/2014 Atherton to Woodside 1:43:10 25.21 mi 1,095 ft
|
||||
Ride Sat, 6/4/2016 Morning Ride 1:57:23 25.19 mi 922 ft
|
||||
Ride Mon, 8/8/2016 Morning Ride 1:52:38 25.17 mi 423 ft
|
||||
Ride Fri, 11/6/2015 Morning Ride 1:51:45 25.15 mi 538 ft
|
||||
Ride Mon, 12/18/2017 Afternoon Ride 1:52:56 25.15 mi 741 ft
|
||||
Ride Fri, 6/24/2016 Afternoon Ride 1:35:25 25.11 mi 623 ft
|
||||
Ride Sat, 6/25/2016 Afternoon Ride 1:44:43 25.10 mi 568 ft
|
||||
Ride Sat, 1/25/2014 Woodside 1:33:38 25.08 mi 1,243 ft
|
||||
Ride Tue, 4/29/2014 Woodside 1:46:03 25.08 mi 886 ft
|
||||
Ride Thu, 4/13/2017 Morning Ride 2:06:13 25.06 mi 266 ft
|
||||
Ride Sun, 6/12/2016 Morning Ride 1:49:25 25.04 mi 387 ft
|
||||
Ride Thu, 6/8/2017 Morning Ride 1:56:19 25.02 mi 285 ft
|
||||
Ride Thu, 10/13/2016 Morning Ride 1:47:30 25.02 mi 253 ft
|
||||
Ride Sun, 1/19/2014 01/19/2014 Palo Alto, CA 1:36:55 25.01 mi 1,201 ft
|
||||
Ride Mon, 9/5/2016 Afternoon Ride 1:42:56 25.00 mi 902 ft
|
||||
Ride Sat, 11/8/2014 Atherton - Woodside 1:40:51 25.00 mi 972 ft
|
||||
Ride Sun, 12/10/2017 Exercise Bike 1:30:00 25.00 mi 0 ft
|
||||
|
Reference in new issue
Block a user