Regular Running

As someone who’d hoped to run 1,000 miles this year (Update/Spoiler Alert: I’m going to fall about 80 miles short), I have a regular running route that I follow.

My most common run is the one I do during the week, during my lunch or some time in the afternoon, around the campus of Georgia Tech. This is a pretty popular urban ‘trail’ known as the Pi Mile and I can extend it from 5k to around 7k by running a bit longer on 10th Street, depending on the amount of time I have on any given day.

After doing some detective work using SmashRun, I determined that I’ve run this route 59 times in 2016!

I did a little bit of file conversion and “wrote” some additional code since my last mapping project, and ended up with some fun visualizations of all that data.

Here, then, are variations of a heat map of all my Pi Mile runs in 2016:

Here’s the actual source code I used myself to create all the maps above:

library(plotKML)
library(ggplot2)
library(ggmap)

# GPX files downloaded from Runkeeper
files < - dir(pattern = "\\.gpx")

# Consolidate routes in one drata frame
index <- c()
latitude <- c()
longitude <- c()
for (i in 1:length(files)) {
    
  route <- readGPX(files[i])
  location <- route$tracks[[1]][[1]]
  
  index <- c(index, rep(i, dim(location)[1]))
  latitude <- c(latitude, location$lat)
  longitude <- c(longitude, location$lon)
}
routes <- data.frame(cbind(index, latitude, longitude))

# Map the routes
ids <- unique(index)
plot(routes$longitude, routes$latitude, type="n", 
axes=FALSE, xlab="", ylab="", main="", asp=1)
for (i in 1:length(ids)) {
  currRoute <- subset(routes, index==ids[i])
  lines(currRoute$longitude, currRoute$latitude, col="#0066FF20")
}

# Plot over map of campus
GnatsMap <- qmap(location = 'Georgia Institue of Technology, Atlanta', 
zoom = 15, maptype = 'satellite', source = 'google')

GnatsMap +
  geom_path(aes(x = longitude, y = latitude, group = factor(index)), 
  colour="#1E2B6A", data = routes, alpha=0.3)

All the GPX files (which you can get from Strava) need to be in one directory when you run the script in R.

To change the color of the routes, modify this hex value:

for (i in 1:length(ids)) {
  currRoute < - subset(routes, index==ids[i])
  lines(currRoute$longitude, currRoute$latitude, col="#0066FF20")
}

To change the underlying map, change this portion:

qmap(location = 'Georgia Institue of Technology, Atlanta', zoom = 15, 
maptype = 'satellite', source = 'google')

Many thanks to the code of Saul Torres-Ortega and Frazier at UCSB.

Refer back to this PDF if you need additional help fussing with the underlying map. If the parsing of the GPX files is the issue, I’d look at the original code I borrowed.

One of the things that jumps out at me, if you look solely at the heat map (without geo data), is that the data is really noisy where/when I start my runs (upper right side). As you can imagine I’m not running across 75/85 in Midtown Atlanta, but that’s what the data shows.

Probably just the nature of tracking GPS with a phone, but the fidelity of the rest of the data seems solid. You can tell at one point when I’m choosing to run on one side of the sidewalk versus the other (lower right side, near Bobby Dodd) and the rare occasions – when I extended a 5k/7k into something more like a 10k – those are the thinner, lighter lines on 10th Street and some of the streets interior to tech’s campus (mostly left side of the map).

If you want to see another cool visualization of the same area of midtown using public running data from Strava from 2015, it’s also pretty cool.

Until next time, Run Happy!

Separated at Birth: Jürgen Klinsmann and Richard Roxburgh

Another in my continuing series.

Seperated at Birth: Jürgen Klinsmann and Richard Roxburgh

I caught a bit of Mission: Impossible 2 on cable the other night – during another USMNT loss – and the resemblance was both uncanny & apropos. You see, Roxburgh is the villain’s henchman in M:I2 and Klinsmann is the villain of U.S. soccer. ;-p

See the tale of the tape below and feel free to add your comments or point me to better instances.

  Jürgen Klinsmann Richard Roxburgh
 
Jürgen Klinsmann
Jürgen Klinsmann
Richard Roxburgh
Richard Roxburgh
DOB 30 July, 1964 23 January, 1962
Height 5′ 11 ½” 5′ 10″
Hair Accidentally Tussled Blonde Purposefully Ruffled Blonde
Eyes Blue Blue
Handsomeness “Sportingly” “Rakishly”

In Bloom

Really interesting cover of Nirvana’s “In Bloom” by Sturgill Simpson.

I’m not a fan of country music – at least not what Nashville churns out right now – but Sturgill’s combination of Randy Travis baritone (to my ear) and some Chris Isaak arrangement on this song are really something.

The song appears on his current album, A Sailor’s Guide to Earth, which is his major label debut.

I especially like how he changes the last line of each verse to “He don’t know what it means to love someone”.

It’s not often that an artist can transform a song by covering it and make it truly sound like there own. Sturgill Simpson’s cover of In Bloom does that and more.

Fantastic reinvention of an iconic track.

Happy Friday!

Six Little Birds

On April 9th the first egg appeared in a nest hidden inside a hanging plant on our porch. On May 12th the last baby bird flew the nest. In between we learned they were House Finches and that the 6 eggs would be laid roughly one day apart, hatch in around 2 weeks, and be fully grown in 2 weeks.

Our bird tenants (and their parents) stuck to the script beautifully. When I could, I snapped some shots. Please enjoy as the whole process was joyous to share with our kids, friends & family who stopped by.

One Little Egg
First day, first egg
Two Little Eggs
Second day, now two eggs
Three little eggs
Third day, three eggs
Six little eggs
Sixth day, six eggs

Six little birds

img_9272

Six little birds

All in a row
Can’t believe they snuggled down like this. Getting too big for the nest.
Last to leave the nest
His parents called & called until eventually he too flew the nest.

My Year of Running

At the outset of the year I’d made the conscious, though not publicly-stated, decision to run 1,000 miles in 2016. So here it is officially: I’m attempting to run 1,000 miles in 2016.

;-)

I have steadily increased my mileage over the past several years from 600-something in 2013 to 700+ in 2014 and finally topping 800 miles this past year. I’ve done this by running more often throughout the week and by stretching my average weekday run distance from about 5k to about 7k and my weekend run distance from 5 miles to 10k.

In January Mashable ran a post about Mark Zuckerberg and his commitment to promoting running with the seemingly-simple goal of running 1 mile per day this year. 366 miles – it’s a leap year, after all – seems like an achievable first step for most folks who either haven’t run ever or don’t run consistently.

I joined the Facebook group for his efforts the day I read the article.

I don’t normally listen to anything – music, podcasts, nothing – but another Facebook post sent by my brother-in-law motivated to share my year-to-date mileage today.

All of which is to say, I’ll likely be even more annoying about my running for the remainder of 2016. If you don’t like the beer blog updates or tweets, you’re sure to be annoyed by these.1

Until next time, I’ll see you out on the streets.

  1. If you want to see my previous attempt at being very descriptive about my running, you can check out this Google Doc, which I’d intended to be an actual book cataloging my first full year as a runner (mid-2010 to mid-2011). I ultimately got too busy and shelved the whole project, called “Around the Year in 365 miles”, mostly because I couldn’t remember how I’d felt during each run.

    A much better example of an interesting running diary/log is the excellent Poverty Creek Journal. I’m only halfway done with the prosaic poetry (non-rhyming and paragraph form), but it’s a fantastic artifact of a runner during a similar timeframe recounting how his runs carried him through a calendar year.