Life, Woodworking

I built a Minneapolis table

Earlier this year, I had an idea to build a table that is an inverted 3-D model of a metropolitan downtown. Take a bunch of 1×2 boards, cut them to scale lengths of the buildings in downtown Minneapolis, glue them together, and you’d have something like this:


Invert it, and you can see the city a little more clearly:


Each piece of wood represents half a city block between Hennepin and Portland Avenues. (The three tall ones in the middle are the IDS, Wells Fargo Center, and the Capella Tower.)

To get started, I cut a bunch of 3/4″ x 2″ stock I had laying around to the correct lengths and laid them out. (They’re miscellaneous woods, but I think oak, birch, and maple are represented.) Unfortunately, after cutting all 234 pieces of wood, I realized that my miter saw’s blade wasn’t true — it was off by about 1ยบ — so I had to re-trim the ends of all of the blocks with a different saw.

After making those cuts, I glued the adjacent blocks together. I only have about a dozen clamps, so this took about ten gluing sessions.


The next step was to drill a hole in each block pair that would accept a threaded insert.


The original plan was to just glue all of the pieces to each other, but it’s likely (a.k.a. probable) that the table would fall apart as the wood moved due to humidity. I decided to bolt each piece to the bottom of a separate piece of wood, allowing all of the wood pieces to grow and shrink without colliding with each other. The threaded inserts allowed me to disassemble and reassemble the table as many times as I needed without tearing out any screw holes.

Here’s the top with the bolt holes mapped out; for each bolt, I drilled three holes: 1 pilot hole, one countersink to hide the head, and one for the shank of the bolt to pass through. In the picture below, I’ve attached the legs, drilled all of the pilot holes, and started drilling the countersink holes. (The big board is a glue-up of five maple boards.)


Here’s a closeup of the pilot holes.


Drilling the countersink holes generated a lot of shavings.


Same step, but without the shavings.


Here was the first dry-fit. How much would you guess that this table weighs?


I procured my first belt sander in order to clean up the edges of all of those pieces. Here’s an example of a pair before: there’s some glue leakage, and the two pieces of wood aren’t exactly the same width, so they don’t line up perfectly. Also pictured: my toe.


And here’s the same piece after belt sanding. I love belt sanding.


The tabletop is attached to the base with dowels and glue. Here’s the underside of the tabletop:


After staining both top pieces, reattaching all of the “buildings” underneath, making sure they were all square to each other, gluing on the top, and adding eight coats of shellac, this is the finished product.


A comparison between an updated render and the final product. Looks like I got all of the buildings in the right place!


The view from underneath. I thought this looked neat.


And from the front.


From the first cut to the last shellac coat, it took me about 25 hours over a month of nights and weekends, and I’m very pleased with it — I really enjoy having a one-of-a-kind piece of furniture.

Open Source

Reminiscing about old code

I imported some long-forgotten CVS repositories into GitHub last night: anyInventory and Toby Web Mail (which contains the first commits I ever made to a version control system). They are nine years old and eight years old, respectively.

Those two projects were my introduction to participating in the Open Source ecosystem. It felt magical that strangers were emailing me, asking if they could help develop and translate these projects that I had previously been working on by myself, albeit in the open.

It’s painful to read some of the code, knowing how insecure it is. There aren’t any indications that I knew about XSS or database query paramaterization. That being said, the applications still work. I was able to install anyInventory on my Web server in about 90 seconds. Thank you, PHP backwards compatibility.

My commit messages were not so great back then:

“Various trivial changes”

The commit? 12 changed files with 227 additions and 195 deletions.

Here’s the Slashdot post that was the impetus for anyInventory. I left a comment suggesting that users could solve their inventory problems by just sending all of their uncatalogued junk to me, and I included my actual mailing address. Despite concerns from other users about a physical Slashdot effect, not one Slashdotter took me up on my offer. (Also note the then-requisite SCO comment at the end of the thread.)

Drew Hearle, who submitted that Slashdot post, ended up working on the anyInventory project with me for a while.

I credit the amount of time I spent on Slashdot for my stances on open source, Web standards, and pony pranks.

I wrote Toby Web Mail so that I wouldn’t have to use Outlook Express any more, and it eventually became the basis of my college senior-year independent study project, anyMail. I think, but cannot confirm, that at one point, there were Web hosts offering both Toby and anyInventory as one-click installs. The thought of this now terrifies me. (See the security section above.)

Ideas, Plugins, Programming, WordPress, Writing

Inline Preview Plugin for WordPress

Problem: When creating a post in WordPress, previewing your post in a separate tab can be slow and/or complicated.

Solution: Show the preview right next to the editor.

Screen Shot 2013-06-11 at 1.32.59 PM

Inline Preview is a plugin for WordPress that adds a zoomed out preview of the current post next to the post editor when the user clicks Preview instead of opening in a new tab.

It’s just an idea I’m playing with for streamlining the post creation process, and if it feels familiar, it’s probably because it is: through version 2.1, WordPress contained a preview iframe at the bottom of the post editing screen, but this is a more elegant implementation. Feel free to install the plugin and try it out for yourself.

Update: I’ve updated the plugin to add a close button (a translucent “X” in the upper-right of the preview) and to make the preview frame resizable by dragging its left edge. The new width of the preview is persistent each time it opens, even across pageloads.


What software is being conceived right now that, in ten years, will fundamentally alter the landscape of the Web? Who is hacking on a personal project that will eventually be used by millions of people?

Asked ten years ago, the answers to these questions would be WordPress and Matt Mullenweg & Mike Little. I’m not sure what the answer to the first question will be ten years from now, but I hope I’m a part of the second answer.


Browser Add-ons, Mozilla, Mozilla Firefox, RSS, RSS Ticker

Major RSS Ticker Update Coming: What You Need to Know

RSS Ticker has been an alternative to Web-based feed readers since 2006, displaying feed updates directly in users’ browsers. It hasn’t seen significant change in a while, but some of the internal Firefox code used by RSS Ticker has changed enough that in order for it to remain functional in Firefox 22, its entire architecture would have to change. That’s a lot of work.

RSS Ticker

I didn’t want to abandon RSS Ticker’s users (especially with the shutdown of Google Reader imminent, already leaving one less feed reading option), but I also couldn’t dedicate the time to completely rewrite the add-on and keep all of its features. So here’s what I’ve done:

RSS Ticker has been completely rewritten. This has given me the opportunity to use the knowledge I’ve gained in the last seven years of programming to improve the overall design of the ticker and to restructure the code to play nicely with the new Firefox APIs.

What hasn’t changed? RSS Ticker will still scroll your feeds in your browser. You can still choose to put it at the top or bottom of your Firefox window. You can still exclude specific feeds. You can mark as read, mark feeds as read, open in tabs, open all in tabs, etc. You can temporarily disable the ticker. You can change the ticker speed, smoothness, and direction. You can hide the ticker automatically when it’s empty.

What has changed? In order to continue supporting RSS Ticker, I’ve had to drop a number of features. Here are some things you can no longer do with RSS Ticker:

  • Manually refresh the feeds.
  • Specify how often the feeds should refresh.
  • Randomize the order of the ticker items
  • Limit the number of items per feed
  • Display items that have already been read
  • Show unread items in bold
  • Manually limit the width of ticker items
  • Customize the context menu

I know some of you liked and used these features. I’m sorry I had to remove them, but it was the choice between removing them or abandoning the add-on altogether.

A few features haven’t been removed, but they have been changed (a.k.a. “improved”):

1. All of the remaining options (six of them, down from a total of 37) are displayed inline in RSS Ticker’s section of the Add-ons Manager.

RSS Ticker Options

2. If you want to temporarily disable the ticker, just uncheck it in the View > Toolbars menu.

Disable RSS Ticker

3. To remove a feed from the ticker (but not from your bookmarks), right-click on it in the Bookmarks Manager and uncheck “Show in RSS Ticker.”

Show a feed in RSS Ticker

This new version will be available in a couple of weeks after some more testing, but if you’d like to test it early, leave your e-mail address in a comment or ping me at and I’ll send you a copy.

Browser Add-ons, Mozilla, Mozilla Firefox, OPML Support, Programming

OPML Support updated for Firefox 20

I’ve just published an update to my OPML Support Firefox extension for the first time in three years. The extension previously added an OPML button to the toolbar in the Bookmarks Manager, but as of Firefox 20, the button disappears because of a change to the way that the Bookmarks Manager’s toolbar is assembled. Version 3 of OPML Support moves the Import OPML and Export OPML options into the existing Backup/Import button’s menu.


Thanks to the OPML Support users who alerted me to the problem via email and in the comments here, since I don’t often have occasion to check whether my buttons are disappearing.

Automattic, Programming

The Plight of the Self-Taught Programmer

At each company-wide Automattic meetup, every employee is required to give a flash talk on a topic of his or her choosing. At our meetup last September, I gave a short overview of some of the programming terms I don’t pronounce correctly in my head, since I initially learned them on my own and took a guess at their pronunciation. Here are the slides from that fateful day.

The Plight of the Self-Taught Programmer: Chris Finke

a.k.a. Is it pronounced GIF or GIF?

GIF: A picture of a JIF peanut butter jar.

I say “GIF”, but apparently lots of other people pronounce it “GIF”.


Get it?

SQL: My Sequel 2. This time, it's personal.

I learned it as Ess-Cue-Ell and was very confused the first time someone asked me if I had worked with my sequel. “My sequel to what?”

/etc or Etsy?

Still not sure about this one. Thankfully, I never have to say it out loud.

C#: C Sharp or C Pound?

I remember reading a newsgroup post where someone was ridiculed for calling it “C Pound.” That someone was not me, but it could have been.

GUI: A hand covered in something gooey.

Gee-You-Eye is not as fun as the correct gooey pronunciation.

Apple's Operating System: Mackossex.

My college roommate was a diehard Apple fan and especially loved their operating system, “Mackossex” (Mac OS X).

XPI: Zippy.

Firefox extensions use a file format called XPI, pronounced “zippy”, not “ex-pee-eye.”

LaTeX is not the same as latex.

For years, I thought that LaTeX was spoken the same as latex until I heard a professor mention that he had used “layteck” to typeset his papers. In my senior year of college. Dodged a bullet there.

Egill: Not a chance.

I have a coworker from Iceland named Egill. It’s not “Ee-gill”, “egg-ill”, or “Ay-gill”. It doesn’t even have an L-sound if you say it properly, and I’ve been informed that because I’m not from Iceland, I probably can’t physically pronounce it.

Finke = Fing-key. Rhymes with inky. And slinky.

As a public service, here’s a pronunciation guide to my name.