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
3D Printing, Maker, 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