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
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
Groovy, Programming, Smart Home, SmartThings

Programming My House: Multi-Circuit 3-Way Switches

I’ve been outfitting my home with “smart home” devices: light switches that I can turn on my with phone (or voice, via Amazon’s Alexa), hinges that report when doors open and close, and motion sensors that report activity around the house.

Smart House. Original house photo by Jameslwoodward: https://commons.wikimedia.org/wiki/File:Ellen_H._Swallow_Richards_House_Boston_MA_01.jpg

I use Samsung’s SmartThings hub, which provides access to a handful of official “SmartApps” — pre-written automations for smart devices. The best thing about SmartThings though is that I’m not limited to the official apps; I can now write programs for my own house.

Today, I wrote my first program in order to eliminate a major annoyance in our house. When it was built, the owners must have loved light switches; rooms as small as our pantry (about 5′ x 8′) have two overhead lights with two separate switches that we will never turn on independently of each other. After replacing both switches with smart switches, I was able to write a 40-line Groovy script that links those two switches, effectively combining both lights and making each switch part of a 3-way-switch setup.

Achieving this with wires would have required cutting holes in the wall and hours of rewiring and drywall repair, but once the SmartApp was written, I was able to attach it to three different sets of lights in our home in about 60 seconds.

I’ve submitted my SmartApp for inclusion in the general SmartThings marketplace, but until then, if you want to use it yourself, you can grab the text on GitHub and install it for your own devices via the SmartThings Web IDE.

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, Maker, 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