After a few years of forgetting to go to Leonhard’s, a café just up the corner and around the bend from our house, I’ve started dropping in again, from time to time. As I did today. Where I encountered their lovely new menu, a menu so lovely that it changes the entire character of the place. Watercolour illustrations are by the talented Bayside by Sam.

Detail from Leonhard's new menu

🗓️
Leonhard's  •  Design  •  Watercolour

After a lifetime of combative relationships with gasoline-powered lawnmowers (and, by times, those that would force me to use them), I cannot do sufficient justice to the joy I have found in this cordless electric one.

At $368 from Home Depot, it’s in the same price range as its belching cousins. But it needs neither gas nor oil (nor some alchemical combination of the two; I’m looking at you Lawnboy), and starting it is a simple push of a button rather than an arm-wrenching pull of a rope.

Our lawn is mowed. The Ryobi 40180 is folded up in the mudroom, ready for its next call-out. I am happy. Who would have ever thought.

🗓️
Ryobi  •  Lawnmower  •  Home Depot  •  Batteries

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.

🗓️

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.

Instagram • YouTube • Vimeo • ORCID • OpenStreetMap • Internet Archive • PEI.art • Drupal • Github.