At the last meeting of the PEI Electric Vehicle Association there was talk of how, at some point in the future, we’ll have a “smart grid” on Prince Edward Island, with electricity rates adjusted to match supply and demand, so that, for example, our electric vehicles can charge themselves when demand is low and we’re generating “green” electricity.

There are innumerable things that have to happen before our electricity grid can support this, both regulatory and technical. The electricity meters in our houses, for example, are “dumb” meters and would have to be replaced with “smart” ones that could communicate in real time with the utility.

A lot of the talk about smart grids is based on the assumption that we need price signals to modify our behaviour; while that may be true, it ignores the fact that some people will seek greener opportunities simply from altruism.

And, it turns out, we have all the tools we need right now to build an “altruistic smart grid” ourselves.

Here’s what it might look like.

Screen shot of my Node-RED flow to turn on and off an electrical outlet based on percentage wind energy generation.

This is a computer program (technically a “Node-RED flow”), running on a tiny, inexpensive Raspberry Pi computer, that turns a Wemo power outlet on or off, depending on whether we’re generating “green” electricity on Prince Edward Island. I built it so that I could charge my mobile phone only when we’re generating green electricity.

It works by doing the following every 15 minutes:

First, it looks to see if the electrical outlet is on or off, and remembers this for later.

Next, it looks up the current state of PEI’s electricity load and generation from a system I created that returns a chunk of data that looks like this:

{
  "on-island-load": "181.66",
  "on-island-wind": "4.83",
  "on-island-fossil": "0.00",
  "wind-local": "4.83",
  "wind-export": "0.00",
  "percentage-wind": "2.66",
  "updatetime": 1562592600,
  "updatetime_human": "2019-07-08 10:30:00"
}

The “percentage-wind” figure is the percentage of PEI’s current electricity load–”how much electricity we’re all using right now”–that’s being generated from wind power.

I arbitrarily decided to call “more than 50%” green electricity.

If we’re generating more than 50% of our electricity from the wind, and the electrical outlet is off, then it gets turned on.

If we’re generating less than 50% of our electricity from the wind, and the electrical outlet is on, then it gets turned off.

The parts to assemble this–a Raspberry Pi, a Wemo outlet–cost less than $100.

Because the “smart” in this DIY altruistic smart grid are programmable, this is only the simplest version of how such a system might work: I could, for example, enhance the system to look at the current state of my phone’s battery and to override the green energy requirement if it dips too low. Or turn off the switch when the phone’s battery is fully charged.

Here’s the complete flow, ready for import into Node-RED, should you wish to try this at home.

During Question Period in the PEI Legislative Assembly on Friday came this exchange between the Leader of the Opposition, Peter Bevan-Baker, and the Minister of Health and Wellness, Hon. James Aylward:

Leader of the Opposition: Although the official opposition has stated vigorously and repeatedly that we are disappointed in the amount of money pledged in the budget to the priorities that we have brought to government, one item I personally was glad to see receive some funding was for midwifery. Many people have been advocating for the establishment of midwifery services on PEI for decades, and I believe that this is actually the first time that dedicated funding has found its way into a budget. For that, I am indeed grateful. According to the budget, this year’s allocation of $150,000 is and I quote: “to allow these services to be appropriately established consistent with current and anticipated demand.” A question to the Minister of Health and Wellness: Could you tell the House exactly what that statement means?

Mr. Aylward: Thank you very much, Mr. Speaker. As I’ve spoken several times during this session with regards to midwifery services and in the past when I was in opposition, I’m certainly looking forward to having this service provided here on Prince Edward Island. There is a process that needs to be followed. We need to ensure that when midwifery is fully operational and introduced here on Prince Edward Island that it’s just not done haphazardly. There’s consultation to be taken with, obviously, the college of physicians, the PEI Medical Society, we have to determine how it’s going to be introduced, if there’s going to be employees of Health PEI, if it’s going to be user pay. So there’s many issues around the introduction of midwifery here on Prince Edward Island. But as the Minister of Health and Wellness, I’m extremely proud that I’m going to be the minister that will finally be able to make this happen here on Prince Edward Island.

A satisfying answer. Until you get to the “if it’s going to be user pay” tucked in at the end.

The Leader of the Opposition noticed this too, and returned to address it at the end of several more questions about the details of the plans for the introduction of midwifery:

Leader of the Opposition: One of the statements made, again, in the answer I loved so much, I’m starting to love it a little bit less now – was you mentioned user-pay, could you elaborate a little bit on what you might mean by that? A user-pay for midwifery services seems like an odd statement for a health minister to say.

Mr. Aylward: Thank you very much, Mr. Speaker. Once again, as I said, we have to still go through this whole consultation process with our current health care providers. Currently on Prince Edward Island there is approximately 1,400 births annually here on Prince Edward Island and currently, as well, our compliment of health care professionals, OBGYN’s etc cetera, are more than capable of handling that number of births. Yes there is a request to have midwifery here on PEI, I’m extremely supportive of this service, I always have been and I will continue to be. But until we have all the details around how midwifery will be introduced, integrated in our health care system, it’s impossible for me to answer specifically, precisely today on how that will be rolled out. It’s a process and we’re working through that.

Leader of the Opposition: Thank you. Can I just get a confirmation though from the minister that when he used the word user-pay he’s not suggesting that for Island women to access midwifery services that they will themselves have to actually pay for that?

Mr. Aylward: Thank you very much, Mr. Speaker. Again, as I’ve said, we are working through a process currently right now and until we have all the details and we’ve had all the consultation with all the health care providers here on Prince Edward Island in, addition to the midwifery association, I can’t specifically answer that question. Thank you very much, Mr. Speaker.

Leader of the Opposition: Wow.

Wow indeed.

Later in the day the CBC reported about the exchange, under the headline P.E.I. targets early 2020 for midwifery, but Islanders may have to pay out of pocket, in part:

Among the considerations, Aylward said, is whether the services would be “user-pay” — something Bevan-Baker said he was “a little horrified” to hear.

“We have a public health service and midwifery is absolutely, in all other jurisdictions, a part of the public health service,” Bevan-Baker said.

“So even the suggestion that this would become a user-pay system where … families out-of-pocket, would have to pay for this, is quite an extraordinary thing.”

I share Bevan-Baker’s shock at the suggestion that midwifery would be even considered as a “user pay” service, both for the fact itself, and for what this suggests about how midwifery is conceived of by the government.

Midwifery is not an upgrade to business class, it’s basic health care.

There is no rationale whatsoever for classifying it as anything other than this, and to fly a trial balloon that positions it otherwise is an insult to those who have worked so tirelessly for so long to reintroduce a practice that was standard and accepted during our grandparents’ day.

I trust that the opposition will continue to make this point clear to government.

I have been a happy customer of Spotify for several years now, after flirting back and forth with Apple Music, Google Play Music and the late Rdio for several years before that. We have a family subscription, which we all three use extensively, no more so than Oliver who, for many months now has been making nightly playlists to go to sleep listening to.

Spotify has recently been promoting itself as much a podcast player as a streaming music service, and Oliver has followed the lead and has accumulated a subscription list of 1500+ podcasts in Spotify.

Last night, though, he was thinking about migrating to something else for his podcast listening: he didn’t like the fact that, although the Android Spotify app sports an “episodes” tab, the desktop player for the Mac does not, which makes tracking recently-released episodes on his Mac more challenging.

Having found a possible alternative, Oliver set out to move his list of podcasts from Spotify to a new app, and was immediately faced with a task that would have extended for several days: for each of the podcasts in Spotify he was taking the title, copying and pasting it into the new app, and subscribing there. Over and over and over. When this job threatened to take over his Friday, to the exclusion of other activities, I interceded and told him that we should simply export his list of podcasts from Spotify and import it into the new app.

How naive I was.

Spotify, it turns out, is a prison for podcasts.

Spotify takes podcasting, a system that is a marvel of decentralized openness, built on the strong and flexible (and open) foundation of RSS, and locks it inside a closed, proprietary system with no way of getting data in or out. You can’t import lists of podcasts. You can’t export lists of podcasts. You can’t add your own podcasts.

Surely, I thought, given the GDPR, there must be a way of getting Oliver’s personal information–including his podcasts–out of Spotify.

And there is, in theory: if you visit your Account page in Spotify, and then navigate to Privacy, and scroll down to the bottom, you will see a section called Download your data, full of promise.

Until you read the fine print and learn that “This can take up to 30 days to complete”:

Screen shot of the Download your data section of Spotify's Privacy page

How it’s possible to create a system that takes 30 days to assemble digital data boggles the mind, and while it may live up to the letter of the GDPR, it surely defies the spirit.

What about using the Spotify API?

Although it’s not documented, there is and endpoint that exposes the list of podcasts for a user.

Here’s how you can get at it (with the caveat, detailed below, that you are wasting your time).

Go to the Web API Console for the “Get User’s Profile” endpoint and click Get Token and then copy the cURL command on the right side (I’ve redacted Oliver’s token):

Screen shot of generating a Spotify token.

If you simply paste this cURL into the Mac command line, you’ll get back your basic account information:

{
  "birthdate" : "XXXX-XX-XX",
  "country" : "CA",
  "display_name" : "Oliver Rukavina",
  "email" : "o@ruk.ca",
  "explicit_content" : {
    "filter_enabled" : false,
    "filter_locked" : false
  },
  "external_urls" : {
    "spotify" : "https://open.spotify.com/user/12154891049"
  },
  "followers" : {
    "href" : null,
    "total" : 13
  },
  "href" : "https://api.spotify.com/v1/users/12154891049",
  "id" : "12154891049",
  "images" : [ {
    "height" : null,
    "url" : "https://profile-images.scdn.co/images/userprofile/default/6a5a73861526ed7cece0ea757ab1f043277d7ebb",
    "width" : null
  } ],
  "product" : "premium",
  "type" : "user",
  "uri" : "spotify:user:12154891049"
}

If you edit this command, however, and tack shows onto the end of the URL, replacing https://api.spotify.com/v1/me with https://api.spotify.com/v1/me/shows, you’ll get back a JSON representation of your first 20 podcast subscriptions, with each one represented by an object like this:

{
    "added_at" : "2019-03-27T02:16:27Z",
    "show" : {
      "available_markets" : [ "AD", "AE", "AR", "AT", "AU", "BE", "BG", "BH", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "SE", "SG", "SK", "SV", "TH", "TN", "TR", "TW", "US", "UY", "VN", "ZA" ],
      "copyrights" : [ ],
      "description" : "It's the Peter and Oliver podcast all grown up. ",
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/show/6bDdMX7OmjDG1u5ebEhNRX"
      },
      "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX",
      "id" : "6bDdMX7OmjDG1u5ebEhNRX",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/8beec05386bfef3e095bcdf46aafaee112d55fdb",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/4f70272b77c24c619a79486d6c88445b976151f7",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/807d9151f7fa4a0ccd96c80d0c9bc265152b6012",
        "width" : 64
      } ],
      "languages" : [ "en-US" ],
      "media_type" : "audio",
      "name" : "Oliver And Peter Podcast",
      "publisher" : "Oliver Rukavina",
      "type" : "show",
      "uri" : "spotify:show:6bDdMX7OmjDG1u5ebEhNRX"
    }
}

You may be thinking “wow, this is amazing!” until you notice that nowhere in that JSON is any information that falls outside the Spotify universe: none of the standard trappings of open podcast data–the feed URL, the website, the non-Spotify-hosted artwork–are there.

And these details also aren’t there if you follow the URL in the “href” to get all the show details:

{
  "available_markets" : [ "AD", "AE", "AR", "AT", "AU", "BE", "BG", "BH", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "SE", "SG", "SK", "SV", "TH", "TN", "TR", "TW", "US", "UY", "VN", "ZA" ],
  "copyrights" : [ ],
  "description" : "It's the Peter and Oliver podcast all grown up. ",
  "episodes" : {
    "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX/episodes?offset=0&limit=50",
    "items" : [ {
      "audio_preview_url" : "https://p.scdn.co/mp3-preview/1c405e3e511e5e7199a45b1de32f83e5f88c7e24",
      "description" : "This first episode is about Vancouver BC Canada ",
      "duration_ms" : 92624,
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/episode/79W2zHGuUttBOInh642kNR"
      },
      "href" : "https://api.spotify.com/v1/episodes/79W2zHGuUttBOInh642kNR",
      "id" : "79W2zHGuUttBOInh642kNR",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/53b71df32a85645777ba73afa2e9e738bd788534",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/2cc3d2acae39674b3c3bfdc53ae2286a692b1376",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/2f6bd66373d51f8f6f62b55997539e1554a3df4a",
        "width" : 64
      } ],
      "is_externally_hosted" : false,
      "is_playable" : true,
      "language" : "en-US",
      "name" : "Oliver and Peter Podcast episode 1",
      "release_date" : "2019-03-20",
      "release_date_precision" : "day",
      "type" : "episode",
      "uri" : "spotify:episode:79W2zHGuUttBOInh642kNR"
    }, {
      "audio_preview_url" : "https://p.scdn.co/mp3-preview/1b3548d7561908fd8b4c6625e5e4d1fdbc8198bd",
      "description" : "Episode 1 is about Vancouver BC Canada  ",
      "duration_ms" : 26958,
      "explicit" : false,
      "external_urls" : {
        "spotify" : "https://open.spotify.com/episode/5bH6wVgbHQ5aCJdthQLZrk"
      },
      "href" : "https://api.spotify.com/v1/episodes/5bH6wVgbHQ5aCJdthQLZrk",
      "id" : "5bH6wVgbHQ5aCJdthQLZrk",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/53b71df32a85645777ba73afa2e9e738bd788534",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/2cc3d2acae39674b3c3bfdc53ae2286a692b1376",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/2f6bd66373d51f8f6f62b55997539e1554a3df4a",
        "width" : 64
      } ],
      "is_externally_hosted" : false,
      "is_playable" : true,
      "language" : "en-US",
      "name" : "Oliver and Peter Podcast episode 1",
      "release_date" : "2019-03-20",
      "release_date_precision" : "day",
      "type" : "episode",
      "uri" : "spotify:episode:5bH6wVgbHQ5aCJdthQLZrk"
    } ],
    "limit" : 50,
    "next" : null,
    "offset" : 0,
    "previous" : null,
    "total" : 2
  },
  "explicit" : false,
  "external_urls" : {
    "spotify" : "https://open.spotify.com/show/6bDdMX7OmjDG1u5ebEhNRX"
  },
  "href" : "https://api.spotify.com/v1/shows/6bDdMX7OmjDG1u5ebEhNRX",
  "id" : "6bDdMX7OmjDG1u5ebEhNRX",
  "images" : [ {
    "height" : 640,
    "url" : "https://i.scdn.co/image/8beec05386bfef3e095bcdf46aafaee112d55fdb",
    "width" : 640
  }, {
    "height" : 300,
    "url" : "https://i.scdn.co/image/4f70272b77c24c619a79486d6c88445b976151f7",
    "width" : 300
  }, {
    "height" : 64,
    "url" : "https://i.scdn.co/image/807d9151f7fa4a0ccd96c80d0c9bc265152b6012",
    "width" : 64
  } ],
  "is_externally_hosted" : false,
  "languages" : [ "en-US" ],
  "media_type" : "audio",
  "name" : "Oliver And Peter Podcast",
  "publisher" : "Oliver Rukavina",
  "type" : "show",
  "uri" : "spotify:show:6bDdMX7OmjDG1u5ebEhNRX"
}

Like I said: a prison.

And there’s another problem: this is both an undocumented API call and a broken one.

In theory you should be able to specify a “limit” and an “offset” parameter to page through podcasts and retrieve them all, like:

curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=0&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=20&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=40&limit=20"
curl -X "GET" "https://api.spotify.com/v1/me/shows?offset=60&limit=20"

and so on.

But that doesn’t work.

I’m able to retrieve at most 50 podcasts (out of Oliver’s 1,986 total subscriptions). And using the Spotify web player confirms this breakage, showing a scrolling list of 50 podcasts that repeats and repeats and repeats.

Because this is an undocumented, and thus unsupported API call, it’s not like I can dial 1-800-SPOTIFY to ask for help.

But I’m not willing to give up the fight, so I forge on with this crazy, destructive nuclear option, which involves working around this bug in the undocumented API by pulling the podcasts 50 at a time, saving their name and ID, and then deleting them using another undocumented API call, so that I can then get the next 50 podcasts. And so on. Until I have them all.

(Warning: if you use this code you will be unsubscribing from all your podcasts, one by one by one).

<?php

$bearer = "INSERT THE TOKEN YOU GOT FROM THE API CONSOLE HERE";

// Open a file to write the podcast names to
$fpout = fopen("allshows.tsv", 'w');

// We're getting 1,986 podcasts, 50 at a time, and
// 1986 / 50 = 40, so we loop 40 times.
for ($show = 1 ; $show <= 40 ; $show++) {

  // Get the details of 50 podcasts from the Spotify API as JSON
  $url = 'curl -s -X "GET" "https://api.spotify.com/v1/me/shows?limit=50' .
         '" -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ' .
         $bearer .
         '"';

  $json = '';
  $fpin = popen($url, 'r');
  while(!feof($fpin)) {
    $json .= fgets($fpin, 4096);
  }
  fclose($fpin);

  // Convert the JSON into a PHP object
  $shows = json_decode($json);

  // Iterate through each of the 50 podcasts
  foreach($shows->items as $oneshow) {
    $id = $oneshow->show->id;
    $name = $oneshow->show->name;

    // Write the name and ID of the podcast into the text file opened earlier
    fwrite($fpout, $name . "\t" . $id . "\n");

    // Unsubscribe from the podcast via the Spotify API
    $url = 'curl -s -X "DELETE" "https://api.spotify.com/v1/me/shows?ids=' . $id .
           '" -H "Accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer ' .
           $bearer .
           '"';

    exec($url);
  }
}
fclose($fpout);

And even this code won’t work completely, or at least it wouldn’t work in Oliver’s case: with 905 podcasts still to extract, it simply stopped returning anything from the API call to get shows, and the web player, at this point, showed Oliver with no subscriptions at all. So perhaps the API only works for the first 1,081 podcasts?

In any case, Oliver now has a text file with 1,081 podcasts in it. Or, more accurately, the names of 1,081 podcasts in it.  But how to get the feed URLs? There’s no obvious way to do this right now, although the Listen Notes API might work. Barring that, Oliver has a lot of copying and pasting ahead of him.

In summary, let this be a warning to you: if you use Spotify as your podcast app, you are a prisoner to Spotify, and if you decide to switch to another podcast app there isn’t any way to get your data out of Spotify.

A delightful Prince Edward Island story from Clark. Like he writes, “This could have happened no where else.”

I squeezed every last drop out of my electric bicycle rental this morning before returning it, heading over the bridge to Stratford, down to the shore, back to town, out for lunch, and then home. 21 km from door to door. A beautiful, sunny day for a bicycle ride.

An annotated satellite map of my bike ride to Stratford, showing my route in red and highlighting significant features.

I found my way to the YouTube channel of Kara and Nate by way of their journey on the Trans-Siberian in 2017.

Despite their increasing popularity, and thus their increasing “today’s episode is brought to you by Audible,” they’ve kept my attention as they continue their relentless life of travel.

Their latest episode, Birthday Party in Cathay Pacific First Class, is perhaps the perfect exploration of the absurdity and delight of permanent life on the road (their happenstance hookup with a trio of jetsetters is totally the kind of thing that happens to Catherine when she travels).

Ignore the promos and enjoy the unadulterated love of constant motion.

(Postscript: after arriving back in Vietnam, Kara and Nate got in a taxi to their hotel, and their taxi was involved in a collision).

I put the rented Evox City520 electric bicycle through its paces tonight, riding out of Charlottetown on the Confederation Trail to Charlottetown Airport, and then out the Brackley Path that runs parallel to the Brackley Point Road, rejoining the trail and riding east as far as York.

Cows in York, from the Confederation Trail

The trip was 15.8 km in each direction, 31.6 km there and back. Here’s a picture of my ride, recorded as a GPX file by OsmAnd and displayed over PEI 2 meter contours.

LIDAR map showing my bike route

This is farther than I’ve ever ridden a bicycle before, and the distance was only possible (at least given my current fitness level and strength of character) because of the electric pedal assist, which I used continuously.

The Evox has 6 levels of pedal assist and an 8 speed gear system; heading downhill, with full pedal assist and in the highest gear, I was doing almost 30 km/h. My average speed, over the entire trip, was about 20 km/h.

One of the reasons I suspect I’m not a good candidate for an electric bicycle is that the heady allure of pedal assist level six, with its effortlessness and breezy speeds, is simply too great to allow me to derive a significant enough amount of fitness from the endeavour.

I got nowhere to go, really, and so I think I’d be better off sticking to the grinding effort of my trusty non-electric Palomar, sticking closer to home, and leaving batteries out of it; I think I’d end up a better person.

Which brings up another issue, the feeling of being an asshole that one experiences when you blithely pass the non-electric-riders on the trail, expending half the effort and traveling at twice the speed as they are. I’ve always had a feeling of solidarity with fellow trail riders when I’m riding unassisted, and it’s not uncommon to give a nod of the helmet or a wave of the hand when passing in the other direction; flying by on my electric jet-bike I felt like people in first class must feel when we coach passengers mope by. It wasn’t a warm feeling.

All that said, the Evoc City520 is a nice piece of kit. It’s easy to get on and off, has a low centre of gravity, and is comfortable to ride. As I mentioned earlier, it’s heavy as hell, and was a challenge to wrangle in the front door of the house to charge this evening (I think the battery is removable, but I don’t have the key to unlock it, so I had to bring the whole thing inside for the night).

Evox City 520 Bicycle

The pedal assist system is control by a simple three button toggle and a centre-mounted display:

Evox Display

The display shows speed, pedal assist level, battery level, and an odometer. I like the fact that it is integrated into the handlebar post (in the centre of the “cockpit,” as bike nerds like to say), rather than zip-tied to the handlebars like a lot of other ebike-controllers are.

Perhaps the best takeaway from this evening’s ride was the reminder of how lucky we are to have the Confederation Trail in our midst: 30 minutes from downtown Charlottetown (15 minutes on an ebike!) and you can be in the middle of the countryside, by yourself, hearing nothing but birds and tractors.

Confederation Trail east of Charlottetown toward York

I’ll do some more tooling around on the Evox tomorrow before returning it to MacQueen’s, but I think I’ve got the ebike bug out of my system for now.

When he finished high school in mid-June, Oliver transitioned to the day program at Stars for Life, an organization I believe in deeply, and from which he will derive great benefit.

The primary logistical challenge of this is that Stars for Life is located 5.5 km from our house, and I need to get Oliver there every morning and pick him up every afternoon.

Map showing route from our hour to Stars for Life.

Given that we own a car, and that I can drive, our fallback position is that I’ll simply drive him to and from.

But as we only have 12 years to become carbon neutral, it’s time to start the planning for alternatives to that, and so I’ve started out by focusing on alternative methods for the trip home.

Baseline

Heretofore I’ve driven both ways. Traffic there is usually pretty light; traffic back is slowed when encountering the mass of public servants leaving the office at 4:00 p.m., which creates some jams, but only in the Charlottetown sense of the word.

Generally I’d leave home at 3:45 p.m., arriving at Stars for life at 4:00 p.m. and arriving back home about 4:25 p.m.

  • Total Time: 40 minutes
  • Driving Distance: 11 km

Experiment One: Bus, Walk, Bus

Yesterday was the first experiment: Oliver was coming home early, and I needed to pick him up at 1:00 p.m.

I caught the 12:45 p.m. Route № 3 bus from Confederation Centre and arrived at Stars for Life exactly at 1:00 p.m.

Oliver and Ethan the Dog and I then walked down Beach Grove Road to North River Road, across North River Road to pick up the Hermitage Creek Trail, and walked along the trail to the back yard of the PEI Union of Public Sector Employees where we emerged onto University Avenue. We walked down University Avenue to the UPEI bus stop where we caught the 1:54 p.m. Route № 1 bus downtown, arriving at 2:00 p.m.

Statistics

  • Bus Fares: $6.00
  • Bus Distance: 8.6 km
  • Walking Distance: 2.8 km
  • Total Time: 75 minutes

Pros

  • Convenient bus connection, almost door-to-door on the way there, only a short wait on the way back.
  • Mostly pleasant walk along the Hermitage Creek Trail.

Cons

  • The Hermitage Creek trail has some muddy/soggy spots, and could use some maintenance.
  • Connection between the Hermitage Creek Trail and University Avenue is more “cut through a field” than an official trail.
  • Adds 35 minutes, compared to driving, to the pick up run.

Experiment Two: Bike, Bus

One of the things I was curious about is whether having an electric pedal-assist bicycle would make it more possible for me to build cycling into the trip somehow.

Oliver doesn’t have a bicycle yet, so I can only cycle to Stars for Life for the pickup, and need a way of getting the bike back home.

For today’s experiment I rented an Evox City520 electric bike from MacQueen’s for 24 hours. It wasn’t cheap, at $86 taxes-in, but it was cheaper than buying an ebike, and I plan to amortize the rental by taking it for a longer spin tonight.

I left home on foot at 3:00 p.m. heading toward Outer Limit Sports where I’d originally intended to rent the bike; along the way I phoned them to confirm they had something in stock and learned that a 24 hour rental is considered two days in their calculations, and so I’d end up spending $150 for the experiment.

So I rerouted to MacQueen’s, which has a more sensible policy, arriving at 3:20 p.m. I was in and out of MacQueen’s in 10 minutes and it took me 13 minutes to ride the 2.8 km to Stars for Life (maxing out at 30 km/h coasting down the North River Road hill down to Ellen’s Creek).

It was here that things went slightly off the rails, as the buses stopping at Stars for Life–Route № 2 going clockwise and Route № 3 going counter-clockwise–only run once an hour, and when I arrived at 3:45 p.m. the next Route № 3 bus downtown wasn’t for 45 minutes.

So we caught the 3:58 p.m. Route № 2 bus.

Getting on the bus involved a complicated ballet of son, dog, bike, and me. I tied Ethan to a stop sign while I mounted the bike on the cowcatcher and then retrieved him and Oliver and I got on, paid our fare, and sat down. It wasn’t elegant, but it worked, aided by a very patient bus driver.

We had a chance to quicken the journey when we got to the Charlottetown Mall at 4:15 p.m.–we could have transferred to Route № 1– but I wasn’t eager to repeat the ballet, so we stayed on Route № 2 for a complete clockwise-tour of Charlottetown, seeing parts of the city I didn’t know existed.

We arrived at the Grafton-Polyclinic stop at 4:45 p.m. where I repeated the ballet in reverse and we walked the block to home.

Statistics

  • Bus Fares: $4.00
  • Bus Distance: 13.6 km
  • Bicycle Rental: $86.00
  • Cycling Distance: 2.8 km
  • Total Time: 105 minutes

Pros

  • The electric bicycle was fun to ride, and made short work of the hills: it felt like nothing at all to climb the 5% grade up Beach Grove Road from Ellen’s Creek.
  • Despite the complexity of our party, we pulled off the ballet of mounting the bus without problems.

Cons

  • The electric bicycle rental was expensive (although the purchase cost would be amortized across many trips in a more permanent scheme).
  • The bike was heavy–54 pounds–and unwieldy, and so it was a lot harder to get on and off the cowcatcher than my regular bicycle.
  • Although the cowcatcher held onto the bike well, despite the pothole-ridden streets and speed bumps, I had a background fear that it would fall off and I’d be out the cost of an expensive bicycle.
  • The long bus journey home (which could be mitigated by a change in schedule that would allow a more direct return home on Route № 3).

What’s Next

There are lots more options to experiment with, including Oliver cycling (we need to figure out a trailer or basket for Ethan to make this work), repeating today’s experiment with my regular non-electric bicycle, or taking the bus there and walking all the way home.

Stay tuned; I’ll update this post as we forge on.

I’d missed this somehow: there’s now a setting in 1Password’s Android app under Filling labelled “Auto-copy one-time passwords” that does exactly that (just as the Mac version has done for a long time):

Screen shot of 1Password showing Filling settings

If you’re using two-factor authentication (and you should be: if you’re not, look it up and figure it out, or ask someone to explain it to you), using 1Password to generate your one-time passwords is light years ahead of using a standalone app like Google Authenticator, and this feature makes it double amazing.

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 /nowlook at my bio, read presentations and speeches I’ve written, or get in touch (peter@rukavina.net is the quickest way). You can subscribe to an RSS feed of posts, an RSS feed of comments, or receive a daily digests of posts by email.

Search