Looking Back: 2015

I'm going to go out on a sturdy limb and say 2015 wasn't one of my best years. It wasn't an unqualified disaster, though. Let's start at the beginning.

The year started off phone-free, because I dropped my phone down a drain in December 2013. I stubbornly tried to manage without buying a new iPhone, but I finally gave up and blew the $600 or whatever on an unlocked replacement. I'm much more careful with my phone outside, now, so I guess I grew as a person.

Read more…

A Letter to My Mother on what would have been her 81st Birthday

Dear Mum,

Today would have been your birthday. It’s been three and a half months since you died, and I thought you might like an update.

I know that of all the places you’re likely to be (and I expect you’re probably not actually anywhere, although Shirley thinks you’re in the blue jays) the Internet is the least likely, so I’m not sure why I’m posting this online. Maybe, like everything else post-mortem, it’s for me, not for you --- on account of you’re dead.

I hope being dead is working out for you. Wouldn’t it be nice if there were really a heaven, and you could be with your dad and your sister again? Maybe even your handsome first husband, who you loved so much. (I didn’t find any pictures of him in your stuff --- but there were pictures of Dad’s first wife. You were way prettier.)

Read more…

Hey! Let’s Write a WebExtension!

(This article is also posted on Mozilla Hacks.)

You might have heard about Mozilla’s WebExtensions, our implementation of a new browser extension API for writing multiprocess-compatible add-ons. Maybe you’ve been wondering what it was about, and how you could use it. Well, I’m here to help! I think MDN’s WebExtensions Docs have a pretty great definition:

WebExtensions are a new way to write Firefox extensions.

The technology is developed for cross-browser compatibility: to a large extent the API is compatible with the extension API supported by Google Chrome and Opera. Extensions written for these browsers will in most cases run in Firefox with just a few changes. The API is also fully compatible with multiprocess Firefox.

The only thing I would add is that while Mozilla is implementing most of the API that Chrome and Opera support, we’re not restricting ourselves to only that API. Where it makes sense, we will be adding new functionality and talking with other browser makers about implementing it as well. Finally, since the WebExtension API is still under development, it’s probably best if you use Firefox Nightly for this tutorial, so that you get the most up-to-date, standards-compliant behaviour. But keep in mind, this is still experimental technology — things might break!

Starting off

Okay, let’s start with a reasonably simple add-on. We’ll add a button, and when you click it, it will open up one of my favourite sites in a new tab.

Read more…

A Pocket of Calm

We don’t get a fog a lot in Toronto, and on a foggy night about a month ago the Christmas lights were particularly lovely -- dreamy and soft. I was on the way home from a meeting and thought the lights on house on a corner were so pretty, I wanted to take a picture to show the girls. I paused at the curb opposite the house, and took my phone out of my pocket. I still had my mittens on, but I needed my fingers to use the phone, so I wedged the phone in my left hand, wedged between my fingers and the fleshy base of my thumb. I used my fingertips and thumb to remove the mitten from my right hand, and as I did so the phone slipped, or my grip relaxed. For the longest second ever recorded, my phone fell toward the storm drain I had just realized I was standing above.

Read more…

ES6 Templates

One of my favourite upcoming features in ES6 is Template Strings. I’ve used JQuery’s templates in some previous code I’ve worked on, and while it was very useful in finishing the feature on time, it’s aged now and relying on third-party libraries which we don’t have time to keep up to date isn’t the best idea and so we’re in the middle of some work to remove them. So having said that, I’m quite happy to see something similar arriving in the base language, so that we can take advantage of it without having to add any extra code.

As an aside, all the code below was tested in Firefox 34, using the Scratchpad. The comments are pasted in below the code when you select it and choose the Execute » Display menu item or hit Ctrl+L (Cmd+L on Mac). I hear they also work in Chrome, but they didn’t seem to in the version I was running (39.0.2171.95), and I didn’t want to start messing with an --es-staging flag. If someone can confirm whether they work or not, I would certainly appreciate it! :)

Read more…

New Year’s Resolutions…

Well, I managed to spend New Year’s Eve lying sick on the couch, and then went to bed semi-delirious from lack of sleep at 12:08, which kind of sucked, but I’m still hopeful that 2015 will be better than 2014 was. I mean, it almost has to be, right?

Anyways, my first, and so far only, resolution is to consume less and create more. When I look back on the year, I find I have spent more of my free time than I’ld like passively consuming other people’s content instead of making new things of my own, and that kind of bothers me. I’m very glad that a large part of my job involves making things, and that has definitely been rewarding, but there are also a lot of personal projects I want to start or finish or just push forward. And it doesn’t have to be code. I’ld like to write more blog posts, to explain the things I’m doing, and why they interest me enough to spend time on.

Listening to things…

In high school and university, I used to listen to a lot of music. As I went about my day, there would continually be something on the cd player. But these days I find myself listening to podcasts1 in my spare audio time instead, and that strikes me as interesting because without meaning to I seem to have moved from (largely) mass-produced, mass-marketed entertainment to (mostly) independent, informational2 entertainment.


  1. The list, in alphabetical order, is: Accidental Tech PodcastAfter DarkBitsplittingCore IntuitionEdge CasesFear the BootIsometricJavaScript JabberLESS THAN LIVE with KATE OR DIELostcastNo Such Thing As A FishThe DiecastThe Dungeons & Dragons PodcastThe IncomparableThe Stack Exchange PodcastThe Web AheadTotal Party KillWebcomics Weekly 

  2. I’ll readily agree that most of the things I learn aren’t going to impact my life in any significant way. I’m not going to read many comics, or play many role-playing games, or do, uh, whatever QI does, but they’re still fun to listen to. :)