Why do you document your trips like this?

I do this for myself. As a side effect, it's sometimes useful for other people, but to be clear, I do this for myself, not for you. It isn't optimized for viewing by random strangers or friends and family. If I was optimizing for that, I'd cut out a lot of pictures and maybe some of the commentary as well. I know it's too long and cluttered and uncurated.

There are a few reasons for this:

How do I build this website?

I've heard this question or varients a few times, so I'll answer it here.
What software do you use to make these pages?
How do you record your trips?


Generating the HTML

I write all my own code and write this site in raw HTML. But I also have a lot of python scripts that take care of some of the grunt work like putting all the pictures from a day into a page for the day, generate thumbnails, recode videos, etc. Unfortunately, that code can't do minor reordering to put like pictures together, add captions, figure out the best places to break lines, add headings, etc. That stuff usually takes me a day or two to add / clean up. Also unfortunately, my code sometimes makes mistakes like treating videos imported from an iPhone as if the phone wasn't lying to me about video aspect ratio for example. So I usually have some stuff to manually redo and that also takes a bunch of time.

Navigating during rides

Google Maps on Android for navigation

I like Google Maps for navigation. I find it consistently has the most accurate street data and estimates for how long a ride will take. If it won't route me through, probably the road is closed. It rarely takes me to closed gates, at least compared to the alternatives I've tried. A painful thing about Google Maps on Android is that it is such a poor shadow of Google Maps on Desktop. You can't drag the route around. You can't go back to an earlier route. It's so easy to lose your route. Not easy to explore alternatives.

I usually plan my routes on Desktop. Change all implicit route drags to explicit waypoints (because the Android app doesn't replicate those), then send the route to my phone. On the phone, I load the route, then save it to my phone "desktop" so I can get it back again when (not if) I lose it by accidentally hitting the back button or having the phone just close the app, e.g. overnight while charging.

Always start the route "from my current location" rather than from a waypoint. Google won't start navigation if you are too far from the initial waypoint.

I have 3D printed a phone cradle for my motorcycles. This cradle has an integrated wireless charger so I can leave Google Maps running all day and still have some battery left. It also lets me easily grab the phone for a picture and drop it back in the cradle, sometimes while riding. Especially when taking videos while driving, it's important to be able to easily replace the phone with one hand.

OSMAND on Android for navigation

OSMAND has some really good map data based on Open Street Maps, but it's inconsistent and the route calculation is slow and often makes some poor choices. That said, it does work, even where there is no network connection. It's a good backup to Google Maps, but when they disagree, go with Google Maps,... unless you don't like unpaved roads. Google will route you on an unpaved road where OSMAND will respect your wishes. OTOH sometimes a couple of km of good quality dirt road is a lot better than the 100 km alternative detour.

I like to keep both OSMAND and Google Maps up for comparison. You know what they say: "When you have one thermometer, you know the temperature, but when you have two thermometers, you have the beginnings of a distribution." When OSMAND and Google agree, I have comfort. When they disagree, the situation warrants a closer look.

Recording GPS track logs

I like the Android app OSMAND for offline mapping and GPS recording. It is very reliable and seems to keep recording even when the OSMAND app crashes. At the end of the day, I download the GPX file to my laptop.

Google Maps location history also provides a log of where I went if I had navigation up all day. But I don't know how to download a high resolution track log from Google Maps. Nevertheless, it's really nice to have a redundant copy of my route when *stuff happens*.

Processing GPS track logs

I wrote a python script that reads a GPX file and generates a set of drawing commands to draw the route on top of a map captured from a Google Maps screenshot. That program also draws circles on the map everywhere I have a picture with LAT,LGN in its JPG EXIF data. That program also analyzes the track log to figure out where I stopped and for how long. The stats from those processed track logs are super useful for understanding how I ride solo and in groups. With the stats, I can reliably plan future trips that aren't too long and stressful. Especially important when planning rides with friends and family.

Other utilities

picture to map URL

jpg2gps.py
img_name_to_google_maps_url.py
Something I use all the time is a script that given a picture file name, finds the picture, extracts the GPS location info, and launches a web browser to that location on Google Maps. This answers the question, "Where was I when I took this picture?" Oh, that was the view from behind hotel xyz. Or, that was just after crossing the border into Hungary.

rotate.py

Rotates images and video.

extract_vid.py

A crude video editor that just extracts a chunk from the middle of a video (i.e. trims off the beginning and end).

media_time.py

sort-by-media-time.py
Gets the UTC time of a media file (jpg, png, mp4, etc). It knows about various media sources like old Android phones, newer Android phones, some iPhones, screenshots, photos, videos, etc. It's remarkably difficult to sort a bunch of screenshot, photo and video files into temporal order. This makes my best guess.

push-fuz-moto.py

Pushes the local copy of my website to the server.

rename_screenshot.py

Renames a screenshot from local time to a command-line supplied timezone offset UTC time since the png file format doesn't allow for storage of capture time and the filename isn't consistent across various versions of Android.

shrink-video.py

Recodes huge videos into something that my webserver can afford to serve. Reduces frame size and increases compression as specified.

process_track_log.py

Analyzes a GPX tracklog and outputs an HTML table of breaks and rides and annotates a map image file.

build-trip.py

Makes a first draft of a site for a multi-day trip generating top.html and all the per-day nn.html files while making all the thumbnails and recoding the videos.

muck_lat_lon.py

Takes a set of lat,lgn,comment tuples and generates a google maps URL for a trip and a GPX file for OSMAND. Also outputs text with degrees-minute-seconds format for brain-damaged programs --- I'm looking at you Garmin.

make-calendar.py

Makes a calendar.png file for the weeks containing the trip.

list_all_pics.py

Finds inconsistencies in my website, missing symlinks on the server, unreferenced files, missing files, etc.

Will you share?

If you want any of this code, I'm happy to share, but it's not coded to production standards and may be more confusing that useful, still it might help, but only if you are already competant enough to have written it yourself. Just email me and I'll send you whatever you want.

Also, everything on this site is available Attribution 4.0 International (CC BY 4.0) but I don't care if you do the attribution part. Creative Commons doesn't have a license that allows unlimited reuse and remixing without attribution, but that's what I mean.

  You are free to:
    Share — copy and redistribute the material in any medium or format
    Adapt — remix, transform, and build upon the material for any purpose, even commercially.
  I, the licensor will not and cannot revoke these freedoms as long as you follow the license terms.
  There are no license terms.