April 2015

Dash, Dash Button, and Dash API

Amazon has three new entries in the Internet of Things That Buy Other Things space. Dash is a wifi-connected magic wand that uses voice recognition and a barcode scanner to replenish your stock of household consumables. Dash Button is a wifi-connected magic button that orders a specific product when pushed. Dash Replenishment Service is an API that allows anyone to give their Internet-connected device the ability to order its own consumables.

At this time, I am not the target market for this. I buy an awful lot from Amazon, but I buy bulk consumables at the local Costco, so Dash wouldn’t do much for me. And I can’t think of any single item that I buy in bulk that would merit a dedicated Dash Button. Okay, maybe ammo.

What would be fun is a Dash Reward button, which purchased a random item from your wish list. “Hey Amazon Japan, I’ve been working out really hard this week; send me a Bluray from my ‘busty cheesecake’ list.”

Dear "funny" employee,

Please do not forge scary emails from HR and accounting on April Fools Day. Nobody’s laughing.

Yeah, what he said

I won’t even try to excerpt Ace’s epic rant.

The Hugo wake-up call

"None of you seem to understand. I'm not locked in here with you. You're locked in here with me."
--- Rorschach

For the third year running, a group of people who felt that the Hugo awards for science fiction and fantasy were, shall we say, “unrepresentative of the generally popular works of the genre”, banded together and encouraged people to sign up and vote for the nominations and the awards. They even put together a suggested list of nominees.

They were mocked, belittled, libeled, and accused as a group of sharing the worst characteristics that could be identified in or attributed to any one member. A vocal group of longtime Worldcon-goers hates them with the fire of a thousand suns, and greeted their success in this year’s nominations with a promise that They Shall Not Pass. (more precisely, “I’ll vote ‘No Award’ above anyone they nominated”).

Mind you, a lot of that crowd still thinks George W. Bush stole two elections, so raging against reality is kind of their specialty.

They also have failed to think things through. For background, anyone who attended the previous year’s con or bought a supporting membership for the current year ($40) can both nominate and vote. The Worldcon community is tiny in comparison to major cons like Gencon, Dragoncon, or Comic-con, and only a small percentage of eligible voters ever vote.

The “Sad Puppies” campaigns brought a lot of longtime SF/F fans out of the woodwork, enough to significantly skew this year’s nominations towards their recommendations. In many cases, this was the direct result of people discovering for the first time that it was possible to nominate and vote for the Hugos. Worldcon is expensive, and if you weren’t in the habit of going, you’d never have known. Hell, I went to one and had no idea; they didn’t go out of their way to encourage you.

So now a lot more people know that it’s cheap and easy to participate in the Hugo awards. And unlike real politics, they can see that their votes counted. They’re likely to nominate and vote again next year, and spread the word to other formerly-unrepresented fans. A lot of the wailing and rending of garments is about the “unfairness” of organized participation by a group with a clear list of nominees, but that’s just the tip of the iceberg. They’re not an army of drones marching in lockstep to the dictates of their leaders, they’re something much worse: fans. They’ll vote for the things they like, and they like things that haven’t been winning Hugos recently.

(They also, it turns out, can vote for the location of future Worldcons. It requires a little more planning, since this year’s bids are for 2017’s con (I say Shizuoka), and the fee for voting becomes a supporting membership to that con, but if you’re going to continue nominating and voting, there’s no reason not to participate. Essentially, you pay twice as much for the first two years, and then you’re set)

Dungeon pickup artist

The new series “Is it wrong to try to pick up girls in a dungeon?” has the look of a very predictable harem comedy. Indeed, it probably is a very predictable harem comedy. Our Hero is a typical hapless loser, who’s not only in over his head, but who almost loses it on the first level of the local dungeon until he’s rescued by the girl of his dreams, a sexy swordswoman. Over the course of the first episode, we’re also introduced to his big-sisterly advisor, his cute waitress, and his (platonic) live-in busty goddess.

After watching the first one on Crunchyroll, my quick judgement is “competent but uninspired”. For amusement, hapless loser-boy is the voice of Kirito, but Haruka Tomatsu is not voicing the sexy blonde swordswoman; she’s handling the big-sister role.

It was a pleasant enough diversion while I was on the elliptical, so I’ll likely watch the second one.

Importing Bézier curves into OpenSCAD

OpenSCAD has some fairly basic 2D drawing primitives. If you can’t draw it with circles and polygons, you have to either approximate with line segments or construct your shape with unions, intersections, differences, and scalings. Or you can import DXF files, with some limitations.

Sadly, the primary limitation is “does not support things like curves/splines”, which means that any nice curves have to be rendered to lines by the converter. Adobe Illustrator won’t even make the attempt, so most people use Inkscape for this.

However, with the most recent release, there’s a way to get high-quality curves into OpenSCAD with only a modicum of pain: custom fonts. Draw up a nice shape in Illustrator or Inkscape, save it as SVG, run it through FontForge, and then call the new text() module from your SCAD file. And you don’t even need to learn to use FontForge; you just need to download a version that has Python scripting enabled, and run a script like this:

import sys
import fontforge
font = fontforge.font()
for arg in sys.argv[1:]:
	char = font.createChar(letter)
font.familyname = "testfont"

Now you just need to copy the font into the same directory as your OpenSCAD file and tell it to render a letter (first SVG file is ‘A’, etc):

use ;
	text(text="A", size=100, font="testfont");

[Updated] In order to get the placement and sizing perfect, you should set the origin of your SVG file at (0,200) with a height of 720, in a 1000x1000 document with the unit set to pixels. It will render any SVG you throw at it, but because it’s being treated as a font, it will be aligned by the baseline and capheight parameters; no doubt a more robust script could adjust those for you. If you add a print char.boundingBox() line to the script, you’ll see how FontForge has translated your dimensions. Inkscape comes with a “FontForge Glyph” template that works well; just add a second guideline at y=920, and resize the page to match the width of your drawing before saving.

[Updated: I wrote a more robust svg2ttf script that resizes and repositions each SVG file to make them work. Character tracking is off a bit, so you want to use separate text() commands for each character, and not try to render multiple characters in one string.]

As usual, set $fs and $fa to adjust the rendering quality.

And here it is in action. The item on the left is a sake cup modeled in OpenSCAD (SCAD file). The one on the right is the same shape imported into Inkscape and tweaked inside and out. (SVG files: OpenSCAD, Inkscape)


Why a sake cup? Somewhere in the 120+ pages of “when do we get our Shapeoko 3’s” on the forums was a suggestion about what sort of thing to make first. Someone mentioned a common practice among 3D printer builders of making a shot glass and toasting their success (quickly, because alcohol doesn’t work well in those plastics). A typical shot glass is hard to make with a CNC mill, between the tapered sides and the depth, so I grabbed a sake cup off the shelf and knocked together a model of it. Both the top and bottom depths are possible with my 2.5-inch YG-1 ballnose end mill (getting it perfectly centered so the two sides match will require a bit of jigging…), and as long as you ignore exotic tropical hardwoods, you can drink out of it safely.

After the toast, I’ll put some sort of finish on it, most likely CA glue.

I actually did a 3D print of the original version at the office. It came out pretty nice, but the bottom was a bit rough due to the unsupported areas, which is another reason to do this sort of thing as a two-sided CNC job.

First comment proves the point!

I love it when this happens. Someone wrote a careful, reasonable article about how it’s impossible to even mention facts that contradict the “social justice” narrative on any issue, and the first comment is from just-registered user “brutalism apologist” and reads “This is not a good article.”

If they were self-aware, they wouldn’t score so many own goals.

Quoted for truth...

"My view is that when we specifically try to change the rules to exclude the Sad Puppies, and we judge how well the changes work by how well they would have excluded the Sad Puppies given historical data, we will have some difficulty explaining to journalists that we are not doing it to exclude the Sad Puppies."
    --- J. Thomas, commenting on changing the Hugo rules at Making Light

Refusing to be eaten

"But fandom's furious identitarians succeeded where racists failed. Identitarians insist they want what I want, a world where everyone is equal. But to make that world, they attack anyone who wants equality in the wrong way. Perhaps my greatest disappointment with them is they happily use the tactics of racists and bigots--- mockery, death threats, blacklisting, and censorship."
    --- Will Shetterly

Will, it’s because they are racists and bigots, and proud of it.

Comfort food

Last time my sister and I were in Japan, one of her happiest discoveries was the nearby restaurant that served Katsu Curry Udon. Indeed, next time we’re in Kyoto, I suspect it will be at least a daily event. Sometime after, I casually suggested that one of our other mutual obsessions would work in this dish: Gyoza Curry Udon.

Gyoza curry udon

Oh yeah, that worked. I did cheat a bit, though:


I see what you did there...

SFWA proposes a method for handling the orphan-works problem, and subtly knifes their customers:

A growing percentage of e-book licensing transactions (often erroneously referred to as "sales")...

When Tor offers a “potentially award-winning” (now that several people have withdrawn from this year’s Hugo nominations, anyway) ebook for $12.99, and the paperback for $13.50, I’d like to know exactly why I should settle for a DRM-laden “licensing transaction” instead of a good old-fashioned “sale”.

For that matter, $13.50 for the paperback? Fuck that. If we get a free copy in the Hugo voting packet, I’ll read it. Otherwise, there are plenty of other good SF books to read; I can wait until this one drops to a reasonable price.

Cory Doctorow is a liar and a bigot

In the past I’ve found Cory Doctorow vaguely amusing as a gullible technophile and leftist shill, but this is bald-faced lying. Also libel.

"The 'Puppies' are a coalition of right-wing and white-supremacist groups who pushed a slate of ideologically pure nominees onto the Hugo Award ballot, complaining that you could no longer judge books by their covers, and that science fiction had changed to reflect the world since the 1970s."
    --- Cory Doctorow, lying son-of-a-bitch

This is what he thinks of SF fans who like books he doesn’t like. It would cause me to stop buying his books if I’d ever started.


Goddess of the Hearth
If you had to hang out with a Greek deity, I’d go with Hestia. She never married, just cooked food, lit fireplaces, took care of travelers, and basically just chilled out at home. All-around cool lady.
    -- The Greek God Family Tree
Hestia, Dungeon Pickup Goddess

While the show is apparently ripping through the source material, it’s managing to do so in an entertaining and amusing way, and this Hestia is clearly the patron goddess of Tumblr, Pixiv, Yandere, and anywhere else that cheesecake fan-art is accepted.

How I learned to juggle

It was the summer of 1981, and I was hanging out with my dad at a cottage in Bear Lake, Michigan. I was a little bored one afternoon, flipping through the latest issue of Omni magazine, and came across this:

Omni august 1981

Four pictures, a very small amount of text, and three tennis balls. In retrospect, I shouldn’t have been standing at the top of a hill, though…

My first rings were carved from an old oil painting with a jigsaw, by a family friend; they were sort-of round. I think my first clubs were Jugglebug, picked up at a game shop in the Lane Ave Shopping Center in Columbus, Ohio. I became a fair 3-ball trick juggler, but never really had the patience to get serious; in college I taught my friend Andrew the basics, and he later ran off to tour with a pro for a while. (this Andrew, I think; we fell out of contact decades ago, but it looks like the right guy. I should ping him)

“Need a clue, take a clue,
 got a clue, leave a clue”