Android, Firefox OS, Mozilla, Reenact

Reenact Now Available for Android

I’ve increased the audience for Reenact (an app for reenacting photos) by 100,000% by porting it from Firefox OS to Android.


It took me about ten evenings to go from “I don’t even know what language Android apps are written in” to submitting the .apk to the Google PlayTM store. I’d like to thank Stack Overflow, the Android developer docs, and Android Studio’s autocomplete.

Reenact for Android, like Reenact for Firefox OS, is open-source; the complete source for both apps is available on GitHub. Also like the Firefox OS app, Reenact for Android is free and ad-free. Just think: if even just 10% of all 1 billion Android users install Reenact, I’d have $0!

In addition to making Reenact available on Android, I’ve launched, a home for the app. If you try out Reenact, send your photo to to get it included in the photo gallery on

You can install Reenact on Google Play or directly from Try it out and let me know how it works on your device!

Firefox OS, Life, Mozilla, Reenact

A visual refresh for Reenact

After I released Reenact (an app for reenacting photos) last week, Joen Asmussen graciously offered to provide some professional design guidance. I could never say no to design help, and in almost no time at all, Joen put together a new look for Reenact. I love it, and it has given me extra motivation to get working on Reenact for Android.

This new look is now live on the Firefox Marketplace and will hopefully be making an appearance on other platforms soon. Thanks, Joen!






Firefox OS, JavaScript, Mozilla, Open Source, Programming, Software, Web Applications

Introducing Reenact: an app for reenacting photos

Here’s an idea that I’ve been thinking about for a long time: a camera app for your phone that helps you reenact old photos, like those seen in Ze Frank’s “Young Me Now Me” project. For example, this picture that my wife took with her brother, sister, and childhood friend:


Reenacting photographs from your youth, taking pregnancy belly progression pictures, saving a daily selfie to show off your beard growth: all of these are situations where you want to match angles and positions with an old photo. A specialized camera app could be of considerable assistance, so I’ve developed one for Firefox OS. It’s called Reenact.

The app’s opening screen is simply a launchpad for choosing your original photo.


The photo picker in this case is handled by any apps that have registered themselves as able to provide a photo, so these screens come from whichever app the user chooses to use for browsing their photos.



The camera screen of the app begins by showing the original photo at full opacity.


The photo then will continually fade out and back in, allowing you to match up your current pose to the old photo.


Take your shot and then compare the two photos before saving. The thumbs-up icon saves the shot, or you can go back and try again.


Reenact can either save your new photo as its own file or create a side-by-side composite of the original and new photos.


And finally, you get a choice to either share this photo or reenact another shot.




If you’re running Firefox OS 2.5 or later, you can install Reenact from the Firefox OS Marketplace, and the source is available on GitHub. I used Firefox OS as a proving ground for the concept, but now that I’ve seen that the idea works, I’ll be investigating writing Android and iOS versions as well.

What do you think? Let me know in the comments.

Life, Woodworking

What’s Old is New Again… and Then Old Again


My father-in-law built this hutch in the 1980s, and after being used as a bookshelf for twenty years, it sat unused in a rabbit shed. My wife asked me to repair it and refinish it.


Here’s the main problem: one of the legs broke and had been replaced by a piece of scrap. Such an elegant solution!


The damage hiding beneath the scrap.


The back panels were in pretty bad shape. The bottom section was literally held together with tape…


…so I removed it.


Very carefully, I cut out the broken leg. I believe this is also how a doctor repairs a broken leg.



I used the leg on the other side to trace a template onto the new wood.


A handsaw and a coping saw took care of the cuts.



The bottom shelf sits inside a dado, so I had to add that to the new piece.


I hand-cut the dado because my table saw was covered in boxes, since I was reorganizing the garage during this project.




You can hardly tell where the new wood starts and the old wood ends!


Copious amounts of wood filler took care of the screw holes and the gaps between the two pieces.


After sanding, it was all smooth and continuous.


I took the top panel off of the back too because it was water-damaged, and since I was going to replace the bottom panel, I could just replace them both with a single sheet of plywood.


I sanded the entire hutch until the finish was gone. This is my least favorite part of any refinishing project.


The new birch plywood back panel.


Ready for paint. Oh no, paint? Yes paint. I wouldn’t have used non-matching wood plus wood filler if it wasn’t going to be painted anyway.


My wife says this color is popular right now. (I believe its official name is “57 Chevy Bel Air Seafoam.”) She asked that I use chalk paint to get the “old” look; this paint should wear more easily than regular paint and begin to look even more distressed as we use the hutch.



The repaired corner. Imperceptible. Undetectable.


I reused the old hardware, since we were going for an old look anyway.


Oops. I probably should have checked that the doors lined up before screwing them back on. Maybe that’s why one had been taken off. I ended up filling the screw holes for one set of hinges and rehanging the door 1/8″ higher.


With arms wide open.


The finished product. I have a “huntch” that this hutch is ready for another thirty years of use.

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.