AutoAuth, Comment Snob, Feed Sidebar, Links Like This, Mozilla, Mozilla Add-ons, Mozilla Firefox, OPML Support, RSS Ticker, YouTube Comment Snob

My Future of Developing Firefox Add-ons

Mozilla announced today that add-ons that depend on XUL, XPCOM, or XBL will be deprecated and subsequently incompatible with future versions of Firefox:

Consequently, we have decided to deprecate add-ons that depend on XUL, XPCOM, and XBL. We don’t have a specific timeline for deprecation, but most likely it will take place within 12 to 18 months from now. We are announcing the change now so that developers can prepare and offer feedback.

In response to this announcement, I’ve taken the step of discontinuing all of my Firefox add-ons. They all depend on XUL or XPCOM, so there’s no sense in developing them for the next year only to see them become non-functional. AutoAuth, Comment Snob, Feed Sidebar, Links Like This, OPML Support, RSS Ticker, and Tab History Redux should be considered unsupported as of now. (If for any reason, you’d like to take over development of any of them, e-mail me.)

While I don’t like Mozilla’s decision (and I don’t think it’s the best thing for the future of Firefox), I understand it; there’s a lot of innovation that could happen in Web browser technology that is stifled because of a decade-old add-on model. I only hope that the strides a lighter-weight Firefox can make will outweigh the loss of the thousands of add-ons that made it as popular as it is today.

Life, Upholstery

I Conquered the Ottoman Empire

My wife and I bought an ottoman seven years ago; it was upholstered in some sort of faux leather that was immediately torn by the vacuum cleaner. Over the years, the top began to crack, and more tears appeared on the sides.

01 - Before

02 - Cracked Corner

03 - Torn Side

Buying another ottoman wasn’t in our budget, but neither was staring at the ugly cracked vinyl any longer, so we reupholstered it in some more durable microfiber fabric. Fixing furniture can seem scary, but it’s not much more than wood, foam, and fabric.

Here’s the top of the ottoman after removing the old upholstery.


I just stretched a 50″ square of microfiber underneath it, stapled in the center of each side, and then stretched and stapled along each side. We kept it simple by electing to fold the corners over instead of sewing them to fit.

05 - Bottom of Recovered Top

Tack on some cambric for that professional look and feel, and the top is done!

06 - Cambric on Top

Here’s the base of the ottoman with the drawers removed, the top unscrewed, and the old upholstery torn off.

04 - Old Cover Removed from Base

The sides were a little more complicated, but not much more than a bunch of staple-stretch-staple steps.

Stapled Side

Reupholstered base

Screw the feet back on, and it looks like a turtle on its back.


Flip it over, and here’s the finished product! We left the drawer faces alone, since they haven’t deteriorated (yet).

07 - Finished Product

Given that it’s been six years since my last adventure in upholstery, I’m pretty happy with how it turned out.

1 - Finished product

I Made a Grasshopper Pull Toy

As soon as the weather warmed up enough to move the car out of the garage, I wanted to get started on a new woodworking project, and this grasshopper pull toy project from The Wood Whisperer looked like a fun one to make for my daughter.

I started by gluing up some scrap to make the body, since I don’t have much wood around here that’s thicker than 3/4″.

2 - Glued up some scrap before planing it down to size

I planed that block down to 1 3/4″ and planed some other boards to 11/16″ and 3/8″ for the legs.

3 - Templates glued in place

I rough-cut the parts using a jigsaw:

4 - Rough-cut parts

And then sanded them down to size using a belt sander clamped to my workbench upside-down bench sander.

5 - Sanded down to size templates removed

I chamfered the edges of the body and sanded the edges of the legs to remove any sharp corners.

6 - Edges chamfered and sanded

After ordering some wheels and pegs from a hobby shop, I had a working dry-fit. I needed to modify the length of the rear axle because the wheels I bought are a little wider than the middle legs, resulting in the rear legs getting stuck on the wheel each time they went around.

7 - Dry-fit

I wanted to add some color to the grasshopper body, so I tried using some semi-transparent green stain, but it came out blotchy and very faint. If I did it again, I’d either do a glossy green paint on the body or stain the entire toy with a normal wood stain.

I originally stained the wheels green too, but my wife commented that it might look better if the wheels weren’t the same color as the grasshopper to give the illusion that the legs are moving separate from the wheels. As per usual, she was right.

8 - Finished Product

A few googly eyes and a string completes the package. It’s ready to be pulled!

9 - In motion

Google,, Mozilla

Implementing Mozilla Persona on

When I first launched as a Google Chrome extension translation platform four years ago, I used Google OpenID to authenticate users, because:

a) I didn’t want people to have to create a new username and password.


b) It made sense that Chrome extension authors and translators would already have Google accounts.

Years passed, and Google announced that they’re shutting down their OpenID support. I spent three hours following their instructions for upgrading the replacement system (“Google+ Enterprise Connect+” or something like that), and not surprisingly, it was time wasted. The instructions didn’t match up with the UIs of the pages they were referencing, so it was an exercise in futility. I’ve noticed this to be typical of Google’s developer-facing offerings.

I made the decision to drop Google and switch to Mozilla’s Persona authentication system. Persona is like those “Sign in with Twitter/Facebook/Google” buttons, except instead of being tied to a social network, it’s tied to an email address — something everyone has. My site never has access to your password, and you don’t have to remember yet another username.

In stark contrast to my experience with Google’s new auth system, Persona took less than an hour to implement. Forty-five minutes passed from when I read the first line of documentation to the first time I successfully logged in to via Persona.


If you originally signed in to with your GMail address, you won’t notice much of a difference, since Persona automatically uses Google’s newest authentication system anyway.

Mozilla does so many things to enhance the Open Web, and Persona is no exception. Developers: use it. Users: enjoy it.

3D Printing, OpenSCAD, Programming

Print your own LEGO-compatible bricks

Given that I have a 3D printer and a five-year-old son, it was inevitable that I would eventually print some LEGO-compatible bricks.1 I knew that bricks were a popular “look what I can print” demo, but after I tried out a few of the popular printable LEGO-compatible models [1] [2], I found that none of them were designed accurately enough to reliably interlock with genuine LEGO bricks, and none of the libraries included support for any shapes besides the basic rectangular brick.

To solve this problem, I’ve written a LEGO-compatible brick generator that is more feature-rich than any other. It has support for customizing the following brick aspects:

  • Length, width, and height
  • Shape: brick, tile (smooth-topped brick), wing, slope (brick with an angled face), curve (brick with a curved face), or baseplate.
  • Size: LEGO or DUPLO
  • Hollow or solid studs (the little bumps on top of the bricks)
  • Horizontal rod holes
  • Vertical axle holes
  • Notched sides on wings so that the wing can be attached to a plate.
  • Slope/curve length/angle
  • Curve style: convex or concave
  • Double-sided bricks (studs on both the top and bottom)
  • Roadways: smooth sections on the top of a brick

These characteristics can combine to create millions of unique bricks. You can generate anything from this vanilla 2×4:


to this extensively customized brick that you’ll never be able to buy from LEGO:


This assortment of bricks contains examples of all of the available customizations:


But this is still just a tiny fraction of the possible permutations.

Here are a few bricks I’ve printed. I haven’t gone crazy with customizations, mainly because what I print is dictated by what my son asks for, and he’s only been requesting wings, wings, and more wings so he can build spaceships.

The script is available on GitHub, and I’ve published it on Thingiverse as well for easy customizing. (It’s by far my most popular Thingiverse model.) Download the script, print your own bricks, and send me a photo.

1. At the request of the LEGO corporation, homemade bricks should be called “LEGO-compatible bricks,” not “LEGO bricks.” FYI.

3D Printing, Cooking, Programming

Today’s Functional Print: Letter Cookie Cutters

In today’s “delicious but still functional” news, I printed a set of letter cookie cutters as part of a Christmas present for my sister’s family. The theme for our family’s gift exchange this year was “locally made gifts,” and it doesn’t get any more local than my own desktop.


I printed the cutters in T-Glase, a semi-transparent and food-safe plastic. Printing with T-Glase was a welcome change from using ABS, since it sticks to the bare glass print bed with no additional preparation, while ABS requires a bonding agent like glue or special tape.

A set of 26 cookie cutters sells for about $12, so these five letters are worth about $2.30.


The OpenSCAD script is based on this pi cookie cutter script by Thingiverse mrbenbritton.

The script can theoretically produce a cookie cutter from any character you can type on your keyboard, although it won’t work for all characters, like those that have interior shapes, like the letter “O.” Let’s say that was left as an exercise for the reader.

The OpenSCAD script and STL file are available on GitHub.

3D Printing, Programming

Today’s Functional Print, Failure Edition: Vacuum Cleaner Wheel

In today’s “I wheely love printing” news, I tried and failed to print a replacement wheel for a Kenmore Whispertone 12.0 vacuum cleaner.


The original wheel’s clip had broken, causing the wheel to come unattached from the vacuum canister:


Replacement wheels can be bought for $9 plus shipping, but why pay almost ten dollars when I have a perfectly good wheel printer sitting on my desk?

This was perhaps my most challenging OpenSCAD reproduction yet, but I was very happy with the finished model. It follows the original very closely but uses a little less plastic:

Vacuum Wheel Model

My first print, with 0.2mm layer heights, printed successfully and fit into the rubber tread perfectly.

But unfortunately, the clips were too weak and could not survive being bent towards each other:


So I printed another wheel with 0.1mm layers to improve adhesion between layers, and I modified the clip design to be wider at the base and not have any dramatic layer size changes:

This print’s clips were much stronger — I could bend them so they were almost touching, but it was really hard to do. Sadly, when I tried to clip the wheel onto the vacuum, the clips themselves were stronger than the base they were attached to, and they burst through the back of the wheel:


Since each of these prints took eight hours, and since I’m not 100% confident that I could get a working wheel on the third print, and since my mother-in-law told me I didn’t have to do it in the first place, I abandoned this project.

If you’d like to try printing the wheel for yourself (or would just like to use the model as a basis for a different project), the OpenSCAD script and STL file are available on GitHub.