Google Maps for Android has a feature that has been alternatively referred to as “Latitude” “Location History” and “Timeline” that allows me to drop a constant stream of digital breadcrumbs marking my location and to then explore that on a map.

I’ve been dropping these breadcrumbs, off and on, for 8 years, so I have a lot of data accumulated: 1.3 million breadcrumbs in total, from January 15, 2010 until today.

Visiting Google’s “Your Timeline” page in a desktop browser allows for some basic visualization and analytics for this data; here’s what my vagabonding looks like:

My Google Location History, 2010 to 2018

This is an incomplete picture of my travels because I haven’t always had an Google Maps-capable phone in my pocket and, even when I have, I haven’t always had a data plan that would allow me to gather the data. This is why you don’t see any markers in Ukraine, for example: I was carrying an old Nokia N95 on my trip there in 2012.

Google Maps also attempts to auto-correlate my travels to points of interest where I’ve stopped along the way. It’s recorded 887 of these over the years, and the same high-level overview reports on the top 10 places I’ve visited:

  1. 100 Prince Street (my house)
  2. The Guild (my office for 7 years)
  3. Charlottetown Farmer’s Market
  4. Colonel Gray Senior High School
  5. Mad Wok
  6. Sobeys
  7. Receiver Coffee
  8. Casa Mia Café
  9. Birchwood Intermediate School
  10. Queen Elizabeth Hospital

That’s my life pretty well in a nutshell.

Google’s “takeout” service allows me to export all 1.3 million geolocations into a JSON file that I can then use outside of Google Maps. And, indeed, there’s more than just geolocations in the file, as Google Maps is not only tracking nodes on the graph of my life, but edges too. For example, here’s a slice of my Friday:

{
  "locations" : [ {
    "timestampMs" : "1527896063946",
    "latitudeE7" : 462356055,
    "longitudeE7" : -631246024,
    "accuracy" : 16,
    "altitude" : -15,
    "verticalAccuracy" : 2
  }, {
    "timestampMs" : "1527896058549",
    "latitudeE7" : 462357912,
    "longitudeE7" : -631240912,
    "accuracy" : 17,
    "altitude" : -17,
    "verticalAccuracy" : 3
  }, {
    "timestampMs" : "1527895978334",
    "latitudeE7" : 462357912,
    "longitudeE7" : -631240912,
    "accuracy" : 17,
    "altitude" : -17,
    "verticalAccuracy" : 3
  }, {
    "timestampMs" : "1527895916802",
    "latitudeE7" : 462357912,
    "longitudeE7" : -631240912,
    "accuracy" : 17,
    "altitude" : -17,
    "verticalAccuracy" : 3,
    "activity" : [ {
      "timestampMs" : "1527895917135",
      "activity" : [ {
        "type" : "STILL",
        "confidence" : 100
      } ]
    } ]
  }
}

The timestamps are in milliseconds, can can be converted into human readable dates with converters like this one, which tells me that that timestamps in this slice are:

  • Fri Jun 01 2018 20:34:23
  • Fri Jun 01 2018 20:34:18
  • Fri Jun 01 2018 20:32:58
  • Fri Jun 01 2018 20:31:56

From these timestamps, Google deduced that I was “STILL” during this period. Which, indeed, I was, as I was sitting here at my office desk typing away.

Other data points are more exciting, like this one from Friday afternoon:

{
	"timestampMs": "1527874663966",
	"latitudeE7": 462356055,
	"longitudeE7": -631246024,
	"accuracy": 16,
	"altitude": -15,
	"verticalAccuracy": 2,
	"activity": [{
			"timestampMs": "1527874645435",
			"activity": [{
				"type": "TILTING",
				"confidence": 100
			}]
		},
		{
			"timestampMs": "1527874659795",
			"activity": [{
				"type": "ON_FOOT",
				"confidence": 31
			}, {
				"type": "UNKNOWN",
				"confidence": 31
			}, {
				"type": "WALKING",
				"confidence": 31
			}, {
				"type": "IN_VEHICLE",
				"confidence": 8
			}, {
				"type": "ON_BICYCLE",
				"confidence": 8
			}, {
				"type": "STILL",
				"confidence": 8
			}, {
				"type": "RUNNING",
				"confidence": 8
			}, {
				"type": "IN_ROAD_VEHICLE",
				"confidence": 8
			}, {
				"type": "IN_RAIL_VEHICLE",
				"confidence": 8
			}, {
				"type": "UNKNOWN",
				"confidence": 4
			}, {
				"type": "UNKNOWN",
				"confidence": 4
			}]
		}
	]
}

This tells me that on Friday afternoon at 2:37 p.m., Google Maps deduces with 100% confidence that I was “TILTING” (I haven’t been able to find a definition for this, but it might mean my phone was in my hand, tilted) at location 46.2356055, -63.1246024, and that I was, with 31% confidence, engaged in a foot, walking, and/or unknown activity at the time. Looking at the Google Maps rendering of my Friday afternoon, it looks like this was the return to work from coffee with a friend at Leonhard’s and the removal from my bag of my phone to plug it in.

Moving from the detailed to the broad overview, there’s a handy open source tool called location-history-visualizer that allows a higher level exploration of the complete data set: operating entirely in the browser, it accepts the Google Takeout JSON file of location history, post-processes it, and then visualizes it on a map at any scale. I had a lot of fun exploring this map, and grabbed several screen shots showing the heatmap of my life at different levels.

Here’s Charlottetown, to start with. This heat map shows 8 years of my rambles around the city:

Charlottetown Heat Map

Moving outward, here’s Prince Edward Island over the same period:

PEI Heat Map

Outward from PEI to Atlantic Canada:

Atlantic Canada Heat Map

Here’s eastern North America, which shows my frequent travels to Boston and southern New Hampshire, to family in Montreal and Ontario and Napanee, as well as a week spent in a cottage in Maine:

Eastern North America heat map

My European travels are not well-represented in the data, both because a lot that travel happened pre-2010, and because I didn’t always have data coverage on my more recent trips:

Europe heat map

Finally, a global view, a view that, like Google’s own, shows clearly that my travels haven’t taken out out a 25 degree band of latitudes running from 35ºN (Tokyo) to 60ºN (Oslo). I’ve not been anywhere near south of the equator, nor anywhere east between Croatia and Japan:

Earth heat map

Truth be told, I have been further south (to Florida, 28ºN) and further east (to Kiev, 30ºE), but didn’t drop digital breadcrumbs there.

Squirreled away on my computer I have a richer collection of geolocation data gathered from other sources–Flickr, Foursquare, Here, Plazes and Twitter–running from 2004 to the present. I’ve long thought it would be an interesting project to come of with a way to convert all of that data into a common format to allow me to view it in aggregate; this incomplete slice of my heatmap through Google’s eyes might be the inspiration I need to finally do that.

🗓️
Google Location History  •  Visualization  •  Maps  •  Heatmaps

From an interview with Nell Bang-Jensen, theatre artist and sometime PEI summer resident:

That our capitalist society places so little value on the work of literally keeping people alive is fascinating (and utterly depressing) to me.

From an interview with visual artist Pedro Reyes:

The blame always goes to whoever pulls the trigger, but we have to look at the systemic framework, like the economy of fear. Crime and the war on drugs is good business for the weapon industry. It’s a kind of manifestation of disaster capitalism.

🗓️
Capitalism  •  Nell Bang-Jensen  •  Theatre  •  Art
🗓️
Bicycles  •  Netherlands  •  Video

My friend Dave sent me a bug report tonight relating to his attempt to post a comment here that contained an emoji:

Hmm. I got this while submitting a comment. On iOS obviously. I had loaded the page without content blockers, which I seem to need to do for your comments to work.

The comment I was submitting: “I think I know this woman of whom you speak. 😉”

He attached a screen shot from his iPhone, showing the error dialog he received:

Error message on Dave's iPhone

Now, first off, this made me realize that I’d left display of detailed error messages turned on for the Drupal that runs this site; to fix that–not the source of the issue, but a good idea on a production site–I turned that off, under Development > Logging and errors.

Next, to the problem at hand: I suspected that it was Dave’s need to post a comment containing a winking face emoji (😉) that was the source of the error, and suddenly I realized the implication of the warning in my Drupal status report, heretofore ignored, about the lack of “4 byte UTF-8” support:

4 byte UTF-8 error message

It turns out that characters like emoji are represented by 4 bytes. In the case of the winking emoji, it turns out, these 4 bytes are \xF0\x9F\x98\x89, and, indeed, if you look at the error Drupal was throwing up about Dave’s comment, you can see that being flagged as an “incorrect string value.”

The solution turned out to be simple: following the helpful instructions here, I converted the MySQL database for this Drupal to support 4 byte UTF-8. There were several steps to this: first I needed to add support in MySQL by editing my my.cnf file, then I had to convert the database and its tables, and finally I had to edit my settings.php to reflect the change. Once I did this, I was able to post emoji-laced comments at will.

Go wild, Dave.

🗓️
Emoji  •  Drupal  •  UTF8MB4

My $350 contribution to Hannah Bell’s campaign last year constituted 0.8% of the Green Party’s fundraising for 2017.

🗓️
Green Party  •  Prince Edward Island  •  Politics  •  Donations

We were down at the Brass Shop tonight for the final episode of Receiver Coffee Pizza Pasta Thursday; it’s now on hiatus until October 4.

Pizza Pasta Thursday became the thing that Oliver and Catherine and I made sure to do together, once a week, all winter long; it will be missed (and looked forward to).

🗓️
Receiver Coffee  •  Pizza  •  Pasta  •  Photos

I wonder how the intimate association of raisin toast with blood donation began.

The “stick around for awhile so we can make sure you don’t faint” period after donating plasma is the only part of my life that involves raisin toast at all, yet the experience would seem incomplete without it.

🗓️

When I traded The Guild for the Parish Hall, I left behind an office with a theatre, art gallery, and full bar, but gained an office with a chapel.

Occasionally, when the mid-afternoon need for a break from work arises, I will repair there.

I may not speak directly to Jesus, but I appreciate the calm that others having done so has wrought.

🗓️

News today that the great friend and protector of the Island, Harry Baglole, has died.

STILL BEAUTY

The Island is still beautiful ….

Still
can be seen
the spruce-lined fields;
And still
the red cliff rock
joins blue and green.

And still
the quiet grandeur
of ordered farmscape
gives way
to fits
of random
Goldenrod.

That’s Harry, in Cornelius Howatt: Superstar, from 1974.

In the final chapter of that book, Last Will And Testament, The Brothers and Sisters of Cornelius Howatt codified its own demise, finishing with:

And, finally, into the care and keeping of future generations of Islanders we give, bequeath, and entrust this Island, complete with its clean water, fresh air, fertile land and beautiful countryside, to be cherished as the very precious place which it is.

Few Islanders have ever thought as much about Islandness as Harry did, and his understanding of this “very precious place” was profound; echoes of his esoteric enthusiasms will inform us for generations to come.

🗓️

The Province of Prince Edward Island announced its new Open Data Portal today in the Legislative Assembly.

I played no role in this other than as mystical spirit guide, but I’m proud to see the breadth and depth of data available there, and the flexibility the Socrata tool its based on affords for visualization.

My favourite data set so far is the Motor Vehicle Registrations from 1918, and the visualization it includes that charts registrations of cars, trucks, trailers and motorcycles vs. the Island’s population (population is the top line):

Chart of Motor Vehicle Registrations from 1918

I spent enough years working with government on wrangling data and information to know that the bureaucratic processes required to release something like this are myriad and complex, and the public servants responsible for this deserve a pat on the back.

🗓️

About This Blog

Photo of Peter RukavinaI am . I am a writer, letterpress printer, and a curious person.

To learn more about me, read my /now, look at my bio, listen to audio I’ve posted, read presentations and speeches I’ve written, see things I’ve favourited elsewhere, or get in touch (peter@rukavina.net is the quickest way).

I have been writing here since May 1999: you can explore the 25+ years of blog posts in the archive.

You can subscribe to an RSS feed of posts, an RSS feed of comments, an RSS feed of favourites elsewhere, or a podcast RSS feed that just contains audio posts. You can also receive a daily digests of posts by email. I also publish an OPML blogroll.

InstagramYouTubeVimeoORCIDOpenStreetMapInternet ArchivePEI.artDrupalGithub.