Life, Woodworking

I Built a Treehouse

After we moved into our new house last month, my kids started asking for a treehouse.  I told them I’d need to see some plans before I could get started, and the next morning, I found this on my workbench:

img_6416

Fair enough.  The previous owners said that there had previously been a tree fort built in these trees, and some of the detritus was still visible:

img_6409

These trees didn’t look so hardy, but there is no shortage of other trees to choose from on our property.

img_6407

img_6139

We settled on this one. V-shaped, about 200 feet from the house, and with good views in all directions.

The most important thing to consider when building a treehouse is that the tree will move, especially in a strong wind.   To account for this, the main supports should have slots where the bolts attach the beams to the tree so that a swaying tree doesn’t tear apart the entire structure.  (You can also use special hardware like Garnier Limbs or treehouse attachment bolts.) I used 2×12 treated lumber and started by drilling holes about 5″ apart.

img_6141

Then I removed the wood between the holes to create a slot for the bolt to slide in.

img_6143

The bolt holes need to be pre-drilled, otherwise you’ll never get them in all the way. I drilled 9/16″ holes for the 3/4″ bolts.

img_6188

As long as you only put a few holes into the tree, it should be able to survive. It’s actually worse to put a bunch of small holes in a tree by using nails or screws than a few big holes for bolts, since many small holes may cause the tree to compartment that entire area, causing the wood between the small holes to rot.

img_6183

Here’s the first beam attached with two of the 10″ long 3/4″ bolts. It’s about 5′ off the ground on the left side, 8′ off the ground on the right.

img_6195

I put up the other beam and attached the joists above them to support the treehouse floor.  Here’s a side-view that shows better the shape of the tree and the main support V.

img_6202

The ladder on the ground means “Kids, don’t try and climb up there yet.”

At this point, I was able to put in the floor boards. There’s nothing complicated about this; just leave space around the trunks so that the tree has room to grow.

img_6233

img_6403

With this kind of support system, the platform will be wobbly without additional support, so I added the first of two corner supports and bolted them to the trunk near the ground.

img_6235

img_6259

The kids brought up some tools to help out.

img_6260

I started on the railing and added a second vertical V support.

img_6263

A view from behind the treehouse, looking down the hill.

img_6272

I added a ladder, built out of 2x6s. It’s steeper than a stairway but shallower than a vertical ladder.

img_6404

I trimmed off most of the floorboards, but the kids asked me to leave this one long.

img_6410

I don’t know if their original intention was to mount the disembodied head of Vader on it, but that’s what they did.

To avoid too much weight and too much work, I went with a canopy roof. If I had planned ahead, I wouldn’t have had to replace the railing posts on both sides with taller ones to support the roof, but I did not. I was able to reuse the shorter posts anyway, so the only thing I lost was a bunch of time and energy.

img_6420

I used a big PVC pipe as the peak of the roof, and I think that was probably dumb. I wanted to avoid using something that would wear out the tarp if it rubbed against it, but a sanded 2×4 probably would have been fine, and stronger too. Oh well.

The canopy is tied down using horn cleats. This worked well, but I should have planned their spacing a little better to get the roof as taut as possible.

img_6378

Time for glamour shots!

img_6423

img_6425

img_6418

And here’s a before-and-after shot, taken with Reenact, of course.

Standard
Life, OpenSCAD, Programming, Woodworking

I Built a Tilt-Out Trash Can Cabinet

I’m going on a work trip later this month, and Christina asked me if I would be able to build something to hide the kitchen trash and recycling cans before I leave (and before her mom visits). Challenge accepted!

We brainstormed and came up with a tilt-out cabinet design.  The first thing I did was model the cabinet in OpenSCAD. We hadn’t bought any garbage cans yet, so I made it customizable; I could specify any number of cans of any size, and the model would adjust and print out a cut list for me to bring to the lumberyard.

The script is available at on GitHub, and as you can see, it can even animate the tilting mechanism:

garbage-cabinet

We settled on a two-can design (one for trash and one for recycling), but we did contemplate more… grandiose… ideas.

animated

The sides and bottom of the cabinet were cut from one sheet of sanded plywood. I don’t have a track saw, so I made do with a circular saw and a straight edge.

img_6311

After making these cuts, I finally ordered a dedicated fine-tooth blade for my circular saw to avoid tearout the next time I need to cut nice wood without a table saw.  A 24-tooth blade is fine for 2x4s, but not for any visible edges on furniture.

The first thing I built was the part of the tilting door that holds the cans to make sure that the spacing and measurements were right.

img_6312

img_6314

The spacing and measurements were right.

I cut the sides and center of the cabinet and then used a biscuit joiner to cut slots that will be used to attach the top with tabletop fasteners. This is similar to how I build our kitchen table, and this cabinet will be stained and painted to match.

img_6316

I used my 90º clamps to hold the boards in place while I joined them with pocket screws.

img_6317

img_6318

Oops. It’s been a while since I’ve used pocket screws, and I forgot that it matters how long they are.

The center divider was joined with regular 2.5″ screws straight up the bottom.

img_6320

 

img_6321

This is how the cabinet bases will sit in the box. They sit closer to the center board than the side boards because the face frame will take up more space on the ends (where the board is flush with one side of the plywood) than in the middle, where the board is centered.

The face frame is 1×2″ poplar and pocket screws.  I used poplar because it’s a cheap hardwood (although not too hard), and it takes paint well. It’s the same wood I built the apron of our kitchen table out of.

img_6322

img_6313

The cabinet top is made up of three red oak boards joined with biscuits and glue. These boards were left over from last year’s table build, so it will match exactly.  When we moved in, I inherited a powerful jointer from the previous owner, so I was able to use that to square up the rough side of each board rather than using a router and a straightedge — major timesaver.

img_6326

Here’s the top, cut to length and width and then sanded smooth. My new saw blade hadn’t come yet, so I had to cut these by hand. I should probably order a new handsaw too.  It’s about 18″x33″, and sanding went a lot quicker than the 40″x84″ kitchen tabletop. I would say 83% quicker.

I stained the tabletop with Varethane’s Kona stain.

img_6327

The cabinet doors are more 1×2 poplar with a groove on the inside to accept beadboard panels.  Here’s a shot from behind after I nailed and glued the cabinet doors to the tilting bases.  In the background, you can see a mystery bag, a computer desk, my shop treadmill, and a “telephone chair” that I’m going to refinish.

img_6360

img_6350

There’s 1/8″ space around each door, but I should have left an additional 1/8″ or at least 1/16″ on the bottom to allow for the space the hinges are going to take.  It worked out in the end though, just a little closer than I would have liked.

Here’s the top after two coats of polyurethane and the cabinet after the first coat of paint (Sherwin Williams Creamy White).

img_6363

img_6375

I attached the doors with hinges at the bottom and added a stop block to each side of the middle divider so the doors can’t fall all the way open. They stop at about 40º from vertical, leaving just enough room to remove the trash cans.

img_6376

These spacers in the back ensure that the doors sit flush with the face frame. Since the hinges aren’t mortised in, they lift the fronts of the cabinet up about 3/16″, so the backs needs to be lifted accordingly.

img_6369

Tada! The handles match the arts and crafts cabinet in the next room, so this piece really brings the whole house together.

img_6370

Double tada!

After using it for a couple of days, it’s clear that I’m going to want to add some sort of soft-close mechanism. Other than that, I’m very happy with how it turned out.  It was my first time building my own cabinet doors, my first time using a jointer, and the last time I’ll ever have to see garbage cans in my kitchen.

Standard
3D Printing, Programming

Today’s Functional Print: Twist-In Shelf Supports

In today’s “shake it up baby” news, I’ve printed some hard-to-find twist-in shelf supports.

The shelves in our new living room have vertical metal tracks that don’t just accept a push-in support clip; the support must be turned 90º in order to interlock with the track. These supports aren’t sold at any of the national hardware store chains, and the only place I could find them was on another frustrated homeowner’s Shapeways account. I recreated them (and beefed them up a bit) so that I could share the model here.

img_6382

twist-in-shelf-support

The SCAD script is available on GitHub, and the part can be customized and downloaded on Thingiverse.

Standard
3D Printing, Woodworking

This is a post. It’s a post about a post.

We just moved into a new house, and the 20-year-old signpost is showing its age. It had deteriorated at the bottom, so it was no longer set in a hole and was just leaning against a tree.  I decided to restore it and make use of a gift that the previous homeowners had left us.

Here it is on my workbench awaiting some TLC.

IMG_6077

I planed the hanging board and the vertical post to clean up the faces. The horizontal post fell apart in my hands when I removed the bolts, so it went in the trash.

Here are the post and hanging board after being planed on each side.

IMG_6081

I used the wood from the old vertical post to make the new horizontal post (since the bottom 18″ was unusable, it wasn’t long enough to be reused vertically). I found an abandoned 10′ post in the backyard, so I recycled it into the new vertical post for the sign.

IMG_6092

I cut a lap joint in the post and sanded off all of the old paint. Here’s a before/after shot (taken with Reenact, of course).

IMG_6095

Here’s a shot of the lap joint in the horizontal post after I added some spar urethane to both posts.

IMG_6106

One last dry-fit before final construction:

IMG_6107

I chamfered the edges of all of the posts on the miter saw to match the original; this should help prevent water from soaking into the top of the vertical post, and it looks nice too.

IMG_6109

I removed all of the rust from the chain and eye bolts using a vinegar/salt solution followed by a water/baking soda solution. It worked way better than I expected.

IMG_6113

If I had known how well the rust removal would go, I wouldn’t have bought new bolts to join the posts.

IMG_6112

Chains attached.

IMG_6118

The previous owners of the home had bought some ceramic house-number tiles in Italy but had never been able to put them up. Rather than just gluing them to the wood, I wanted a method that would be reversible if I didn’t like the result or if I made a mistake, so I designed and printed some hold-down clips to attached the tiles to the hanging board.

IMG_6131

It was tight getting the tiny little galvanized nails tacked in without chipping the tiles, but half an hour with a nail set (actually a bolt with a concave point, since I couldn’t find my nail set) did the trick.  There is some space between the tiles and clips to allow for wood movement.

IMG_6135

I hung the numbers up and trekked down the hill to plant the post.

IMG_6136

Tada! Now the UPS driver will know where to bring our Amazon orders.

IMG_6138

Standard
3D Printing, OpenSCAD, Programming

Create LEGO-compatible Angle Plates with LEGO.scad

LEGO Angle PlateIn response to a comment here, I wrote the first OpenSCAD module for generating complex brick shapes using my LEGO.scad project.

LEGO.scad is great for creating bricks and wings of all shapes and sizes, but it isn’t suitable for making complicated shapes like angle plates. LEGO sells 90º angle plates (pictured); the new module can generate plates with orientations between 0º and 100º.

This is the default output: a 90º plate with both sides 2×2.

Here’s one with an angle of 45º and different size sides:

Here’s the underside of one with an angle of 100º, a 2×3 base, and a 4×1 overhang:

To generate your own plates, check out the LEGO.scad repository and call the angle_plate() module in OpenSCAD. Feel free to share your creations in the comments below.

Standard
PHP, Programming

Export iMessages and SMS conversations as HTML

A couple of years ago, I explained how to get instant message conversations exported out of iChat as HTML files. Now it’s 2016, and Messages has replaced iChat, and iMessages have replaced all interpersonal communication. So how do you get HTML transcripts of your iMessages and text messages? Here’s how: with my new OSX Messages Exporter script.

The script exports all of your text/iMessage conversations from Messages (including group chats) and generates HTML files for each conversation. Here’s a screenshot of the HTML file generated for a iMessage conversation between me and my brother:

Screen Shot 2016-06-20 at 10.15.35 PM

And here’s what a group conversation looks like:

Screen Shot 2016-06-20 at 10.22.55 PM

(For a look at the actual HTML, see the example.html file in the repository.)

I’ll admit that there are a number of existing solutions for exporting conversations out of Messages, but mine has some distinct advantages over them:

  1. It supports group conversations.
  2. It generates human- and machine-readable HTML.
  3. It saves all attachments.
  4. It uses contacts’ names, not just their phone numbers.
  5. I wrote it.

If you want to give it a spin, download it from GitHub and run

./messages-exporter.php --help

from the command line for the current usage instructions.

Standard
Unpredictable Image Filenames, WordPress

New WordPress Plugin: Unpredictable Image Filenames

I’ve written a new WordPress plugin to help protect uploaded images from being accessed just by guessing the URL.

Many cameras and smartphones number their images in a predictable format. For example, iPhones use the format IMG_0001.jpg. If you include IMG_0345.jpg in a blog post, an unsavory third party could start regularly trying to access IMG_0346.jpg, attempting to view the image before you publish a post containing it.

Or, maybe you have a private blog that you only allow family members to read. Not all “private blog” plugins are able to require authentication to load images from /wp-content/, so the same unsavory third party could just start guessing URLs like /wp-content/uploads/2016/05/IMG_0001.jpg, hoping to eventually get a hit. 9,999 requests would enumerate every possible image from an iPhone for each month, almost definitely allowing an unauthorized person access to your photos.

The Unpredictable Image Filenames plugin for WordPress renames image files to a sufficiently unguessable name when you upload them. For example, IMG_0345.jpg could end up as 334AB1E8-28AB-4BE1-882D-3C112E95F055.jpg, and IMG_0346.jpg could be renamed A67C9CF9-0BB5-4FB4-AD03-DCB294F853EC.jpg. Try and guess that!

You can install Unpredictable Image Filenames from your WordPress admin plugins screen, download it from the .org plugins directory, or view the source on GitHub.

Standard
3D Printing, Programming

Today’s Functional Print: Baby Gate Support

In today’s “No, don’t go up there” news, I’ve printed a custom baby gate support.

IMG_4384

Based on a design by Thingiverse user Printed_Solid, this support allows a pressure gate to be used against a post without attaching a wall cup, which would leave a permanent screw hole. I updated the original design to have longer and thicker corners to prevent strong children from pulling it off of the post, and the entire part is customizable to fit your specific post.

The SCAD script is available on GitHub, and the part can be customized and downloaded on Thingiverse.

Standard