“I’d be delighted to live in a country where happily married gay couples had closets full of assault weapons.”

— Instapundit

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

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.

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:

#!/usr/bin/python
import sys
import fontforge
font = fontforge.font()
letter=65
for arg in sys.argv[1:]:
	char = font.createChar(letter)
	char.importOutlines(arg)
	letter+=1
font.familyname = "testfont"
font.generate('testfont.ttf')

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 ;
rotate_extrude() 
	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)

Sakecup

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.

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.

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)

Yeah, what he said


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

Dear "funny" employee,


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

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.”

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