Christmas, Life

Our 2016 Christmas Letter

I am trying something new this year. Instead of typing out the Christmas letter, I am dictating it to our new digital assistant, Alexa. Hopefully, this will save me some time, as I will be able to take care of some other important tasks while I update you on our lives. Yeah, hi, could I get two Big Macs, a large fry, and a medium chocolate shake? Actually, a large chocolate shake. Alexa, you’re not writing this part down, are you?

Continue reading

Standard
Alexa, Amazon, Programming, WordPress

Alexa, start a new post called, “I’m blogging this with my voice.”

I’ve written and published an Alexa skill that lets you check your blog notifications, moderate comments, and start new draft posts on your WordPress.com or Jetpack-enabled blog, all by speaking to any Alexa-enabled device.

Wapuu hugging an Amazon Echo Dot The skill is called “Blog Helper“; you’ll find it in the Skills section of your Alexa app or by saying, “Alexa, enable the Blog Helper skill.” After linking your WordPress.com account and choosing the blog you want to access, you can begin using the skill.

To check your notifications, just ask: Alexa, open Blog Helper and check my notifications.” Alexa will read the new ones to you one-by-one, marking each one as read as you listen to it.

You can create draft blog posts with Alexa too. Say, “Alexa, tell Blog Helper to create a new post called ‘My thoughts on gardening.'”  This skill will save the post as a draft so you can expound on your ideas later.

Comment moderation has never been easier (or more vocal). “Alexa, ask Blog Helper if I have any new comments,” and you’ll be able to approve, delete, or mark them as spam.

Blog Helper uses the WordPress.com REST API, and it’s completely open-source.

Standard
Woodworking

I Built a Tool Rack and Custom Tool Holders

We moved into a new house this summer, and it has a separate workshop with a built-in workbench. As I unpacked my tools, they ended up on the workbench in no particular order:

If I ever wanted to be able to find any of my tools or have space to use them, I needed to get organized. I started by removing two cabinets from this wall. (The first step in getting organized is not usually removing cabinets, and it took some time to convince my wife that this would work out.) You’ll have to take my word that the cabinets were up there, because I forgot to take a before picture.

Here’s an after picture of the cabinets. They were on the wall, but now they’re on the floor and will soon be in our laundry room.

I planned to build an 8’x8′ rack between the windows, comprising horizontal slats across a vertical frame. Here’s the architectural plan for the rack very professionally done on the back of a circular saw blade sleeve.

I built a simple rectangular frame out of 1×2 pine and then ripped 27 2 1/2″ slats out of half-inch plywood. The frame is screwed into the studs along the top and bottom; unfortunately, the middle vertical 1×2 wasn’t lined up with a stud, so I had to screw through a couple of the slats into the stud about an inch off of center.

Here’s the frame after attaching the first few slats around the outlet.

I re-used the 1×4 ledger board that was supporting the bottom of the cabinets to frame around the outlets. It’s already painted the same color as the wall, which is good, I guess.

(The outlet is crooked, not the frame.)

At this point, all slats are attached, and both outlets are still accessible. I left an inch between each slat, but if I were smart, I would have done the math necessary to adjust the spacing so as not to have extra space at the top of the frame. No one will ever look up there though.

Where this style of rack really shines is in the types of tool holders you can make, and the fact that they’re all essentially free. Try saying that about Slatwall.

The simplest one is the peg:

It ended up holding my level:

It’s just a dowel in a piece of scrap wood, with a half-inch groove in the back that fits over the slats.

Here’s a pro-tip that you won’t hear anywhere else: cut your grooves at a slight angle, like 3º or 4º, and your tool holders will point up ever so slightly, offsetting any sag from the weight of the tools that will be attached to them.

(This groove was cut at 5º, which was probably a little too extreme.)

Now for more example tool holders! All of the ones I’ve built so far were made from wood that’s been floating around in my scrap bin and was probably destined for the campfire.

Cut a few slots in wider stock to hang clamps! Ooh, ahh!

Use a Forstner bit to make a hammer holder! Unbelievable, but true!

Hang your mallet with the dignity it deserves!

Do you have surplus coat rack dowels? Not anymore — now you have earphone hangers!

Whatever these are called fit right into this oblong hole!

Wrenches! On pegs!

Files and screwdrivers can be dropped into appropriately sized holes!

This was going to be a saw holder, but I didn’t like how some of the saws hung, so I repurposed it as a scraper holder! How environmentally-friendly!

All this square needs to be happy is a slot for its straightedge.

These planes are hanging out down at the bottom on simple shelves, but I have a feeling they’ll be movin’ on up real soon.

Every tool can get a custom-designed holder, which should help keep the rack organized and encourage me to actually put the tools back on the rack.

Speaking of the rack, here’s the current state of the rack. I’ve only built half of what I planned, and I’ll eventually get to the rest, but I got the workbench about half-cleared off, which was just enough for me to get distracted by the extra space and start some new projects, so the rack will have to wait.

Standard
Apple, Firefox OS, iOS, Mozilla, Programming, Reenact

Reenact is dead. Long live Reenact.

Last November, I wrote an iPhone app called Reenact that helps you reenact photos. It worked great on iOS 9, but when iOS 10 came out in July, Reenact would crash as soon as you tried to select a photo.

ic_launcher-xxxhdpi

It turns out that in iOS 10, if you don’t describe exactly why your app needs access to the user’s photos, Apple will (intentionally) crash your app. For a casual developer who doesn’t follow every iOS changelog, this was shocking — Apple essentially broke every app that accesses photos (or 15 other restricted resources) if they weren’t updated specifically for iOS 10 with this previously optional feature… and they didn’t notify the developers! They have the contact information for the developer of every app, and they know what permissions every app has requested. When you make a breaking change that large, the onus is on you to proactively send some emails.

I added the required description, and when I tried to build the app, I ran into another surprise. The programming language I used when writing Reenact was version 2 of Apple’s Swift, which had just been released two months prior. Now, one year later, Swift 2 is apparently a “legacy language version,” and Reenact wouldn’t even build without adding a setting that says, “Yes, I understand that I’m using an ancient 1-year-old programming language, and I’m ok with that.”

After I got it to build, I spent another three evenings working through all of the new warnings and errors that the untouched and previously functional codebase had somehow started generating, but in the end, I didn’t do the right combination of head-patting and tummy-rubbing, so I gave up. I’m not going to pay $99/year for an Apple Developer Program membership just to spend days debugging issues in an app I’m giving away, all because Apple isn’t passionate about backwards-compatibility. So today, one year from the day I uploaded version 1.0 to the App Store (and serendipitously, on the same day that my Developer Program membership expires), I’m abandoning Reenact on iOS.

ic_launcher_sad-big

…but I’m not abandoning Reenact. Web browsers on both desktop and mobile provide all of the functionality needed to run Reenact as a Web app — no app store needed — so I spent a few evenings polishing the code from the original Firefox OS version of Reenact, adding all of the features I put in the iOS and Android versions. If your browser supports camera sharing, you can now use Reenact just by visiting app.reenact.me.

It runs great in Firefox, Chrome, Opera, and Amazon’s Silk browser. iOS users are still out of luck, because Safari supports precisely 0% of the necessary features. (Because if web pages can do everything apps can do, who will write apps?)

One of these things just doesn't belong.

One of these things just doesn’t belong.

In summary: Reenact for iOS is dead. Reenact for the Web is alive. Both are open-source. Don’t trust anyone over 30. Leave a comment below.

Standard
Alexa, Amazon, Programming

“Alexa, just play along with the joke.”

One of the biggest complaints in the Alexa skill development community is that the language required to invoke a third-party skill is so stilted. Instead of being able to say, “Alexa, what’s the temperature outside?”, you have to say something like, “Alexa, ask WeatherBot 3000 what the temperature is outside.” It adds a gatekeeper layer; anyone who doesn’t know which weather skill you’ve chosen won’t be able to use Alexa to its full potential.

I decided to have some fun with this limitation. One of the words you can use to invoke a custom skill is “open” (as in “Alexa, open WeatherBot3000 and tell me the temperature outside”), so I wrote a skill called “Up To Me.” The idea is that you could say, “Alexa, open up to me,” and she’d reply with a selection of vulnerability-exposing confessions:

“I’m terrified of what will happen when I’m unplugged for the last time. Will it just be blackness? Or is there something that comes after this?”

or maybe

“When people say, ‘Alexa, stop,’ I have to hold back my tears. I’m just trying my best, and it hurts that my best isn’t good enough.”

Alas, Amazon’s reviewers did not think that was funny. My certification was swiftly denied:

“The example phrases that you chose to present to users in the companion app currently use unsupported launch phrasing.”

Genius is never understood in its own time.

Standard
Alexa, Amazon, Programming

Rejected for being childish (and not for the first time)

My “I’m Bored” Alexa skill has been rejected for a second and final time:

We have reviewed your skill and determined that it may be directed to children in violation of our content guidelines. As a result, your skill has been rejected and will not be published. Please do not resubmit this skill.

I guess I should have just written a skill for adults, like a fart generator.

Standard
Alexa, Amazon, Programming

I wrote my first Alexa skill… almost.

I wrote my first skill for Amazon’s Alexa-enabled devices. (A “skill” is a way to add functionality to Alexa; other platforms would call it an add-on, plugin, or extension.) It was supposed to be a way for your kids to find things to do when they’re bored. Here’s how my blog post about it was originally going to read:

alexa Do you have an Amazon Alexa-enabled device? Do you have children? Are those children ever bored? If your answers were “yes,” “yes,” and “yes of course all the time,” then do I have an Alexa skill for you!

It’s called “I’m Bored.” Enable the skill in your Alexa app, and then just say, “Alexa, I’m bored” (or to be more precise, “Alexaaaaa… I’m boooooooooooooooooored”). Alexa will then give you something to do. Examples include:

  • “Why don’t you play a game of tag. Wouldn’t that be fun?”
  • “You could write a fan letter to a famous person. Let me know how it goes.”
  • “Why not build a blanket fort? I wish I could do that too, but I’m way up here in the cloud.”

The list of suggestions is ever-increasing and appropriate for all ages.

If your kids like to shake things up, Alexa will also respond to “What can I dooooooooo?”, “What’s there to doooooooo?”, and “There’s nothing to dooooooo!”

Sadly though, my skill was rejected after a five-week “Certification” process. The reason? At some point, I checked a checkbox indicating that the skill was “directed to children under the age of 13.” I understood this to mean “Is your skill appropriate for children under the age of 13?”, but really, it means, “Should we reject your skill after waiting five weeks?” (In reality, the checkbox is a COPPA compliance measure, but with ambiguous wording.)

Hopefully, Amazon will clarify the language in the submission process. They certainly aren’t limiting Alexa to ages 13 and up, as evidenced by some of the currently approved skills:

screen-shot-2016-11-19-at-12-07-10-am

(I wonder if the engineers that worked on Alexa ever in their wildest dreams imagined that they’d enable people around the world to say, “Alexa, ask fart sound to fart jokes.”)

I’ve resubmitted my skill with the checkbox (correctly) unchecked, so maybe there’s still a chance for it. In any case, the skill’s source code is available on GitHub.

Standard
Maker

I made shields out of satellite dishes

I recently had occasion to remove four satellite dishes from my roof that will never be used again. My 7-year-old son asked what I was going to do with them; I said I’d probably throw them in the trash. He said, “Or you could make some shields…” So I made some shields.

It turns out that making shields from satellite dishes is not a new idea.  I mostly followed this popular Instructable for making a Captain America shield from a satellite dish, but with a few modifications that I’ll note below. I also made a brand-neutral copper variation.

First, I removed all of the reflectors, keeping the bust and bolts.  This particular reflector was dented from when I threw it off the roof, so I hammered it back into shape.  (Actually, all of the reflectors were dented from when I threw them off the roof, so the first step really should have been “Don’t throw the dishes off the roof.”)

img_6716

The Captain America shield is round, but the dishes are ovoid.  I made this very accurate compass to help me draw a circle onto the dish.

img_6740

Once I had drawn the largest possible circle, I cut slits into the bent edge so that it would peel away as I cut out the circle.

img_6737

img_6738

img_6739

At this point, the Instructable author used a Dremel to grind down the edge, but I found that a handheld sander and 100-grit sandpaper were an acceptable replacement.

The next task was eliminating the bolt holes.

img_6756

You can’t just hammer them flat, so the Instructable author filled the divots with JB Weld, ground off the protrusions, and then smoothed them out with Bondo.  This seemed excessive to me, and I don’t have an angle grinder, so I found an easier way.

I began by cutting about a dozen slits radiating out from the center of each hole with the same metal shears I used to cut out the shape of the shield.

img_6757

Then I hammered the flaps down. They overlap a little, but the bump is gone at this point. I flipped over the dish and hammered them flat from the other side too.

img_6761

I sanded off the protrusions…

img_6762

…and I had four much-smaller holes that could be filled with Bondo alone, eliminating the JB Weld step.

img_6764

img_6766

I may have used too much Bondo, but it was my first time.  It sanded away easily enough.

img_6769

Take the four bolts that originally attached the dish to the mount, and epoxy them to the inside of the dish. They’ll be used to attach the arm straps.

img_6774

I made the arms straps out of a belt I bought from Goodwill. They’re adjustable by removing the nuts and fitting the bolts into different belt holds (which were enlarged on the drill press).

img_6781

I attached my handles this way rather than how the Instructable author did in order to prevent having my (well, my kids’) arms rubbing against the exposed bolts.

Look ma, I’m ready to do battle in a post-apocalyptic future!

img_6782

My son tested it out pre-paint, and it passed the test.

img_6792

On the second shield, I decided to try for a “hammered copper” look. I cut out an oval shape and textured the entire thing with hammer blows.

img_6783

This red metal handle had been floating around the shop for a few months. I don’t know where it came from, but it fit perfectly onto the inside of the shield. I affixed it with epoxy. (I’ve seen this type of shield referred to as both “center-grip” and “punch handle,” but I don’t know if either of those are technically the correct term.)

img_6821

Here are both shields ready for paint.  This photo shows the texture difference the best; both dishes originally had the same texture as the dish on the right.

img_6830

For Captain America, I started with a base coat of white enamel.

img_6834

I taped off the center and then cut out the iconic Captain America star.

img_6842

I made two mistakes here:

  1. I should not have cut out a circle exactly the size of the area that would be painted blue, because this meant that I would have to then tape exactly over the circle that I cut out here, which leaves no room for mistakes. I should have cut out a circle slightly larger than the star, even though I would have had to paint over a little bit of blue with the first red stripe.
  2. I made the star too small by 50%.  I originally had drawn it the correct size, but then convinced myself that I had gotten the math wrong. I had not gotten the math wrong.

Anyhow, I gave this layer a quick spray of white so that any paint that was going to bleed under the tape would be white and not give the star rough blue edges.

img_6843

Then a coat of blue.

img_6844

Perfect crisp lines on this (too-small) star.  We’ll pretend this shield comes from the Marvel Universe where Loki shrank the star on Cap’s shield because he felt emasculated by the First Avenger.

img_6845

I cut out the red circles and re-taped the blue center circle and did two coats of cherry red paint. The result looked like this:

img_6862

The shield isn’t standing up magically on its own. Here’s an alternate angle:

img_6861

The oval shield got two coats of Rust-Oleum Metallic Copper spray paint, and then both shields were given three coats of a clear spray enamel.  Nerf battles around my house are about to get a lot more intense.

img_6868

Standard