Life, Woodworking

…And Some Benches

After I finished our kitchen table, I started on two benches: one for each long side of the table. At the last minute, my wife and I decided (a.k.a., my wife decided) to include some storage areas in the benches too.

Just like with the table, I started with a design in OpenSCAD:

Screen Shot 2015-09-25 at 10.55.27 AM

(And just like with the table, the source file is on GitHub.) Both the benches and the table are actually generated by the same code, so they literally are miniature versions of the table.

I bought some 15″ pine legs from Home Depot, but I wanted an 18″ tall bench. What to do? Stretch the legs out, of course.


I cut some blocks out of 3×3 poplar and glued them to the ends of the legs.



After sanding, the transition is totally smooth. After paint, you won’t have a clue that these legs weren’t 17″ long.


I cut mortises in the bench legs to accept the apron pieces. Not all of the legs received an accidental third mortise like this one.


I cut tenons into the ends of the apron boards and added a groove to accept the panel that will act as the bottom of the storage area in each bench.


The first dry-fit. Everything fit, and the legs all mostly touched the ground.


I cut the panels to size and notched out the corners so that they’d fit around the legs. Each bench has two panels; I slid them in from the end before fitting the short sides of the apron onto the tenons.


Glue-up time: I glued all the short sides separately.


And the long sides plus stretcher.


I did two coats of paint at this step so that I could avoid a lot of taping to not get paint all over the bottom panels.


Remember what I said about how the legs would look after paint? You can’t tell that each leg has a block of poplar glued to it.


I slid the panels in from each end and glue all of the mortise and tenon joints. This is immediately after removing the clamps.


Enough about the bases, time to make the seats. I cut four pieces of 7″ 3/4″ red oak and joined them into two bench seats with biscuits.


A single bench seat.


After sanding, I rounded the edges over with a trim router.


Before staining.


After staining.


I installed some wrap-around hinges on each bench to make accessing the storage as easy as possible.


The hinges from the back. Subtle and refined.


Benches and table, together at last.


The benches fit underneath the table, exactly like a Transformer.

Our kitchen table.
Life, OpenSCAD, Woodworking

I Built a Table

Before we moved to Oregon (by the way, we moved to Oregon), we sold our kitchen table. We had bought it new a few years ago; it was expensive, but it got so thoroughly scratched and dinged up (and it couldn’t be refinished, since it was basically a plasticky veneer over fiberboard) that we didn’t want to bring it with us. So we sold it, but we didn’t buy a replacement; the plan was that after we moved, I’d build us a table that would last.

I opted for a farmhouse-style table with breadboard ends for two reasons: I had never done breadboard ends before and I wanted to try it, and also Christina liked that style best.  I designed the project in OpenSCAD first, which really helped with visualizing the joints and knowing how much wood to buy.


(The files are all on GitHub. It will even print out a cut list in the console when you render it.)


The supplies: four legs from Lowes and S3S lumber from a local lumberyard. (S3S means “surfaced three sides;” the top and bottom have been planed smooth, and one edge is smooth and square. Anything you’d get from Home Depot would be S4S, but at as much as 4x the cost.)

I chose red oak for the top, since I’m familiar with it and it was reasonably priced. It’s a nice hard wood that should stand up to the abuse that a kitchen table gets. I did splurge and get the quarter-sawn boards which cost a little more, but they display some really pretty grain patterns. Also, they don’t expand and contract as much with humidity as the flat-sawn boards do; that’s a plus.

For the apron (also known as the skirt, also known as the base, also known as “those boards under the top”), I chose poplar. I chose poplar because I asked the guy at the lumberyard what I should choose and he said poplar.


I cut the apron boards by hand because I couldn’t find the sled for my table saw. Also, you’re not a real woodworker if you use anything but hand tools. Just kidding I love power tools.


I beveled one edge of each of the table legs so that they’d fit more snugly with the corner brackets.


A couple of quick 45º cuts on the table saw gave me the corner brackets that join the apron edges together and connect the apron to the legs.


Here are all of the apron pieces cut to length and ripped to width. Take note that there are four boards in the left stack. This will be relevant later on.


I cut dadoes with my table saw in the long apron pieces to accept the stretchers (the long boards that go inside the middle of the apron). They’re called “stretchers” because they played basketball in high school.


The aforementioned dadoes.


Dado closeup. Notice how they’re great.


I decided to make the table longer than I had initially planned, and my trip back to the lumberyard yielded this 8″ wide board with a neat stripey pattern that I knew would look great as the breadboard ends. Batman’s appearance in the previous and next pictures is courtesy of my sons Gabriel and Gideon.


This is the initial fitting of the apron. I’ve said it before and I’ll say it again: I love my 90º clamps.


The stretchers were attached with screws after being fit into the aforementioned aforementioned dadoes.


This is how I cut the pocket holes in the corner brackets. I guess I could have used my pocket hole jig, but that didn’t occur to me until just now.


The glued and screwed apron. Remember how there were four stretchers in the pile earlier? When I was cutting the dadoes, I miscalculated and only cut three, so one stretcher didn’t make the team. Sorry stretcher. Maybe try out for cross-country instead.


I used threaded inserts in the legs in order to make them removable, since this table will be traveling with me for the rest of my life.


The base of the table, “base”-ically ready for paint…


…but not before I cover the screw holes with oak plugs and sand them flush. It’s the little things.


A closeup of the corner brackets. See how the beveled edge on the leg helps the fit.


Here are the boards I chose for the top, cut to length, but not yet ripped to width. Those gaps between them will disappear by the end of the process.


After ripping the boards to even widths, I cut slots for the biscuits that I used to join them together. “Biscuits” are just little cardboardy ovals, much like you might be served in a hospital cafeteria.


You can never use too many biscuits. The only reason I didn’t use more is because Oregon is in the middle of a biscuit shortage right now.


The middle of the tabletop, dry-fit. See, those gaps are starting to disappear.


This is the glue-up. The 2x4s help keep the boards flat while the pipe clamps squeeze them together. (The technical terms for the 2x4s are “cauls.” The More You Know )

Here’s a before-and-after showing how the tabletop looked immediately after being glued and then again after some light sanding. The glue disappears entirely, and the boards are so close together, you can’t easily see the seam.


Some sawdust mixed with wood glue filled any larger gaps. After sanding, you couldn’t tell that a gap had existed.


The breadboard ends need a groove (aka “mortise”) to accept the tenon (aka “thing sticking out”) from the middle of the table.  I couldn’t get my router working, so I tried to cut the mortise in the breadboard end with a drill press and Forstner bit. It technically worked, but it was a little messy.


I got my router working and used it to shave down the thickness of the tenons, which were cut out with a jigsaw.


Mortise, meet tenon. You two will be working together very closely for a long time.


This dry-fit felt so good.


These pins are what hold the breadboard end on the table. The center pin is glued in, but the outer ones just kind of float, since they need to be able to move from side to side as the wood in the table expands and contracts.


This little peg went to market…


This little peggy stayed home.


The completed table top, ready for sanding and stain.


I flipped the top over and stained the bottom as a test run (and also since the bottom needed to be stained).


The legs were painted a color called “Creamy,” which coincidentally is the same color as my actual legs.


After painting the apron, I cut slots in it with a biscuit joiner to accept the tabletop fasteners. This was done late at night by the light of the moon, which was actually just sunlight that the moon reflected. ( The More You Know )


These fasteners allow the tabletop to be attached to the apron but still move from side to side as the wood grows and shrinks throughout the year.



Here’s the top of the table after sanding but before staining.  The sanding process took about three hours and included sanding the entire top to 80, 120, 150, and 220 grits.


The top was stained with Varathane’s “Kona” stain color, but it looks more like Kailua to me.


I really like how the stain brought out the stripes in the breadboard ends.


The top after three coats of semi-gloss polyurethane. I liked the table so much at this point, I decided to replace the top of my workbench with it.






The finished product. The total materials cost was around $300, and my time invested into it was about 60 hours.

The return on that investment will be infinite: instead of just being a piece of furniture that we bought to eat at, this table is now (and will be) a part of all the memories we’ll make around it as a family.


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.