February 2021

Poorly seasoned...


Boonie Dungeon

Not watching, but spotted an interesting review of the original light novels, where someone commented that they found it rather offputting that the author kept laughing at his own jokes. That explains a lot, actually.

(and, no, most fan-artists aren’t watching this show, either)

Wet season, dry season

Yup, there’s nothing on. This season is so weak that I’ve started watching the uncensored version of High School DxD on Funimation. So far, the only two female characters without giant gag boobs are the kitten named “Kitten” and the white girl named Asia. Their figures would be spectacular for real-life high-school-age girls not named “Ai Shinozaki”, while the bowling balls the rest of the girls are attached to should leave them all crippled with pain, even with demonic powers keeping their permanently-stiff nipples at unnatural angles. Dunno how many episodes I can keep this up for…

(I had to go looking for this, because out of more than 25,000 saved Pixiv pics, I didn’t have a single one from this series)

Coming soon…

Next season, the only things that look watchable so far are That Slime Spinoff and the long-overdue Zombieland Saga: Revenge.

Unrelated, you’ll never guess what Apple did!

…unless you guess that they locked my account again with no explanation.

Surprisingly, I’ve only had to log in once on each device to restore functionality. So far.

Speaking of Evil

Remember when I canceled DirecTV in November and returned my equipment the same day, only to have them try to bill me for it at the beginning of January? Remember how I pulled out my carefully-saved receipt and read the confirmation number over the phone to a rep who confirmed that it was received and the bill would be canceled?

DirecTV doesn’t. They just tried again. Really, really glad I removed my credit card from the account before I called them last month.

30 frustrating minutes later…

It only took about five minutes of ads from a company that’s trying to rip me off for $150 to get through to a human, who agreed that yes, this should have been fixed last time, but I was talking to the wrong department, and needed to talk to the warehouse to confirm that the equipment I had a return receipt for actually arrived.

I pointed out that the fact of my receipt and its presence in her system made it Not My Problem, but she insisted that since it wasn’t a billing issue, she had to transfer me to the warehouse rep. She couldn’t give me a reference number or a direct phone number, but happily waited on hold with me to ensure I was correctly connected and the call was not dropped. Sweet time-waster for someone paid by the hour, says I.

After fifteen minutes of increasingly hard-to-understand ads, I was finally connected with someone who I could not understand at all. Not because of her accent, because approximately 50% of the voice packets were missing. Fortunately, she could hear me just fine, so I could give her my callback number. Unfortunately, it took another several minutes for her to convey the message that she couldn’t disconnect and call me back until I hung up. Yeah, whatever.

To my surprise, she actually did call me back right away on a clean line, confirm that the ticket was being escalated, and give me a reference number and approximate ETA: 10-15 business days.

Joy.

What's the nicest thing I can say about...


High School DxD

I made it farther (5 episodes) than I did with Senran Kagura (2/3), only because the fan-service was so overwhelming and badly done that it was funny, particularly the completely out-of-character stripperific ED animation. Unfortunately, that’s not enough to make the show watchable, especially given how annoying Our Hero is. But what really killed it for me was Sailor Goon showing up in episode 6; pick a direction, guys.

Apple

They’re really working hard to make Microsoft look like a well-run company with a solid operating system and decent QA. Surprisingly, so is Microsoft.

Corona-chan

The masks coming off, and I don’t mean the sneeze-guards people have been forced to wear for most of the past year.

Google/Twitter/Facebook

Well, they’re not serial killers. Pretty Sure. Okay, kinda sure. Maybe?

LinkedIn

They haven’t completely lost focus on being a professional networking tool, although they sure have buried it under a mountain of irrelevant social-network/data-harvesting/certification bullshit. And they accidentally helped a new job get me last year.

DirecTV/AT&T

Their efforts to fraudulently extract money from former customers probably aren’t felonious. If only because they have really good contract lawyers.

Democrats

They’re not all career criminals. I mean, there’s Tulsi Gabbard, who I disagree with on almost every issue but am willing to trust when it counts because she actually likes America.

And, um, give me a minute, I’m sure I’ll think of another one.

Tactical DungeonScript


Tactical Stealth Police, you say?

Pretty sure there’s no tactics involved in opening a beer.

Women In Engineering?

Wow, Japan was really ahead of the curve in getting women into STEM!

Yes, my Kindle recommendations are currently filled with old samurai and ninja books, randomly categorized.

Can you spin a good yarn?

It’s all fun and games until someone beats the weft.

Monster Manual

I’ve always suspected Javascript was an Aberration…

“Thank you for the mental picture!”

Actual headline:

Pornhub Announces ‘Biometric Technology’ to Verify Users

DNA sample optional.

Dialing It In

After tinkering with acceleration and jerk settings in both Cura and PrusaSlicer (dropping them to 1000 and 5, respectively), I kicked off a job with an estimated runtime of 22,873 seconds. Actual completion time: 23,478 seconds. 2.6% over is plenty good enough for me, so hopefully it will be pretty consistent from now on.

(the actual before/after print times were almost identical in my testing, so this is just adjusting the slicer to match the actual behavior of the printer; next step: tweaking overall speed up and down, to see if the new estimates are still in the ballpark)

Reminder: early reports are almost never true

It’s extremely common for “on-the-scene” reports of an event to be false or misleading, and the few surviving serious journalists know this, but the convenient lie will always get more coverage than the pedestrian truth. It must have sickened a CNN “journalist” to print these words about Teh Insurrection:

“Medical examiners did not find signs that the officer sustained any blunt force trauma, so investigators believe that early reports that he was fatally struck by a fire extinguisher are not true.”

Still no word on why Ashli Babbitt was shot dead by a cop.

CablePipeSnake


iStrain

Instead of incorporating any of the existing methods of fixing their long-standing problem with poor strain relief on cables, Apple patented a new one.

In other DifferentThink news, Apple has declared the word ’Asian’ out of bounds for kid-safe browsing on iPads and iPhones. No, seriously.

A Simple, Well-Made Thing

It’s a clone of a well-known and much-copied commercial product, but this folding pipe holder is correctly and cleanly adapted to 3D printing. No supports required, and the print-in-place hinge didn’t even require any break-in to work.

(and with the revised acceleration/jerk settings I mentioned yesterday, the actual print time was 99.5% of the slicer’s estimate)

I don’t currently have any fancy filament that would look cool for showing off some of my dad’s pipes, but it was refreshing to see someone do the job right.

Unlike the item I was looking at yesterday that had all kinds of curves and angles and overhangs running in all directions, forcing you to add 50% to the time and materials to support it all. It’s a complete replacement for an injection-molded part, with bits added to partially solve a problem that doesn’t come up that often. It would have been faster and easier to design something that attached to the existing part rather than replacing it, and the result would have been easier to print. Sigh.

I Speak Gcode To My Dremel, Python Edition

(script significantly updated and reformatted)

#!/usr/bin/env python3
"""
Connect to a networked Dremel 3D45 to manage print jobs and query
for job status and printer information.

Commands:
    info, status, preheat, print, cancel, pause, resume
"""

import sys
import os
import argparse
import configparser
import datetime
import requests

COMMAND = "http://%s/command"
UPLOAD = "http://%s/print_file_uploads"
WEBCAM = "http://%s:10123/?action=stream"
IPADDR = "192.168.0.1"


def api_cmd(command):
    try:
        r = requests.post(COMMAND % IPADDR, data=command, timeout=5)
        r.raise_for_status()
    except requests.exceptions.HTTPError as http_err:
        sys.exit("Printer %s (%s): %s" % (PRINTERNAME, IPADDR, http_err))
    except Exception as err:
        sys.exit("Printer %s (%s) offline or unhappy: %s" % (PRINTERNAME, IPADDR, err))
    return r.json()


def api_upload(file, jobname):
    try:
        gcode = {"print_file": (jobname, open(file, "rb").read())}
    except Exception as err:
        sys.exit("Printer %s (%s): %s" % (PRINTERNAME, IPADDR, err))
    try:
        r = requests.post(UPLOAD % IPADDR, files=gcode, timeout=300)
        r.raise_for_status()
    except HTTPError as http_err:
        sys.exit("Printer %s (%s): %s" % (PRINTERNAME, IPADDR, http_err))
    except Exception as err:
        sys.exit("Printer %s (%s) offline or unhappy: %s" % (PRINTERNAME, IPADDR, err))
    return r.json()


parser = argparse.ArgumentParser(
    description="Network utility for Dremel 3D45 printers",
    formatter_class=argparse.RawTextHelpFormatter,
    epilog="""
Requires a file ~/.pydremel containing at least one entry like this:
    [default]
    name=Autobot
    [Autobot]
    ip_address=192.168.0.200
(or you can change IPADDR at the top of the script)

* If you print the same filename twice in a row with different
  contents, the printer will remember some metadata from the first
  job, and calculate completion progress incorrectly.
""",
)
parser.add_argument(
    "-p",
    "--printer",
    default="default",
    help="named printer in your .pydremel config file",
)
parser.add_argument(
    "-r",
    "--raw",
    action="store_true",
    help="print raw JSON for info or status output",
)
parser.add_argument(
    "command",
    choices=["info", "status", "preheat", "print", "cancel", "pause", "resume"],
)
parser.add_argument("filename", nargs="?", help="gcode file to be printed")
args = parser.parse_args()

# load printer info from config unless user edited the script
if IPADDR == "192.168.0.1":
    config = configparser.RawConfigParser()
    config_file = os.path.join(os.path.expanduser("~"), ".pydremel")
    try:
        config.read(config_file)
    except:
        sys.exit("No config file ~/.pydremel")

    if args.printer == "default":
        if config.has_section("default"):
            PRINTERNAME = config.get("default", "name")
        else:
            sys.exit("No default printer in ~/.pydremel")
    else:
        PRINTERNAME = args.printer
    if config.has_section(PRINTERNAME):
        IPADDR = config.get(PRINTERNAME, "ip_address")
    else:
        sys.exit("No IP address for printer %s" % PRINTERNAME)
else:
    PRINTERNAME = "3D45"

if args.command == "info":
    s = api_cmd("GETPRINTERINFO")
    if args.raw:
        print(str(s).replace("'", '"'))
    else:
        print("%s" % s["machine_type"])
        print(
            "(SN=%s, firmware=%s, API=%s)"
            % (s["SN"], s["firmware_version"], s["api_version"])
        )
        if s["ethernet_connected"] == 1:
            print("IP Address %s (wired)" % s["ethernet_ip"])
        if s["wifi_connected"] == 1:
            print("IP Address %s (wireless)" % s["wifi_ip"])

elif args.command == "status":
    # note that 'layer' and 'fanSpeed' do not contain valid data
    s = api_cmd("GETPRINTERSTATUS")
    if args.raw:
        print(str(s).replace("'", '"'))
    else:
        if s["message"] == "success":
            print(
                "%.1f%% %s %s\n  %s/%s; %d°/%d° (chamber %d°)"
                % (
                    s["progress"],
                    datetime.timedelta(seconds=s["remaining"]),
                    s["jobname"],
                    s["status"],
                    s["jobstatus"],
                    s["temperature"],
                    s["platform_temperature"],
                    s["chamber_temperature"],
                )
            )
            # 'elaspedtime' (sic) starts counting when the nozzle
            # reaches temperature and moves to start printing, and
            # stops when jobstatus == 'completed'
            if s["totalTime"] > 0 and s["jobstatus"] == "completed":
                delta = s["elaspedtime"] - s["totalTime"]
                if abs(delta) > s["totalTime"] * 0.01:
                    print(
                        "  (estimate %s, actual %s%s (%.1f%%))"
                        % (
                            datetime.timedelta(seconds=s["totalTime"]),
                            "+" if delta > 0 else "-",
                            datetime.timedelta(seconds=abs(delta)),
                            abs(delta) / s["totalTime"] * 100
                        )
                    )

# there's no point in preheating the nozzle, since it will cool
# down by the time the auto-leveling is finished.
elif args.command == "preheat":
    s = api_cmd("PLATEHEAT")
    if s["message"] == "success":
        print("Bed heating to preset temperature (printer will beep twice)")

# jobname passed to printer cannot contain path or space characters
# and must end in '.gcode'
elif args.command == "print":
    if not args.filename:
        sys.exit("usage: %s print filename.gcode" % sys.argv[0])
    filename = args.filename
    if not os.path.isfile(filename):
        sys.exit("Error: file '%s' not found" % filename)
    jobname = os.path.basename(filename).replace(" ", "_")
    if os.path.isfile(filename):
        s = api_upload(filename, jobname)
    if s["message"] == "success":
        s = api_cmd("PRINT=%s" % jobname)
    if s["message"] == "success":
        print("Success! Watch your job print at:")
        print(WEBCAM % IPADDR)
    else:
        sys.exit("Error: couldn't print '%s': %s" % (filename, s["message"]))

# cancel will not take effect until after auto-leveling completes
elif args.command == "cancel":
    s = api_cmd("GETJOBSTATUS")
    if s["message"] == "success":
        jobname = s["jobname"]
    if jobname == "":
        print("No active job")
    else:
        s = api_cmd("CANCEL=%s" % jobname)
        if s["message"] == "success":
            print("Print job %s canceled" % jobname)
        else:
            print("Cancel failed: %s" % s["message"])

elif args.command == "pause":
    s = api_cmd("GETJOBSTATUS")
    if s["message"] == "success":
        jobname = s["jobname"]
    if jobname == "":
        print("No active job")
    else:
        s = api_cmd("PAUSE=%s" % jobname)
        if s["message"] == "success":
            print("Print job %s paused" % jobname)
        else:
            print("Pause failed: %s" % s["message"])

elif args.command == "resume":
    s = api_cmd("GETJOBSTATUS")
    if s["message"] == "success":
        jobname = s["jobname"]
    if jobname == "":
        print("No active job")
    else:
        s = api_cmd("RESUME=%s" % jobname)
        if s["message"] == "success":
            print("Print job %s resumed" % jobname)
        else:
            print("Resume failed: %s" % s["message"])

Oxy Morons in the House

Dear Dems, either they’re facts or they’re allegations. Calling them “factual allegations” kind of makes Trump’s point that you’re just blowing smoke up our asses.

Dremelizing Cura, Chainsaw Edition


Here’s a tarball of my first pass at completely overhauling these Dremel 3D45 Cura configs. In order to test them side-by-side, I changed the vendor name in all the references from “Dremel” to “DR”.

The most frustrating aspect of creating this set was that when Cura barfed on my configs, all it said in the logs was “Error when loading container: ‘int’ object is not iterable”. Nothing useful like the specific file or line number. The actual error is: machine definition files can only have values in the form {"default_value": ... } or {"value": ...}. I had copied actual values out of the material and quality files as part of my effort to maximize the use of inheritance and calculated values. And that’s a half-hour of my life I want back.

My primary motive for building these was being able to adjust acceleration, jerk, and speed, and have all the other related values get calculated relative to them. Dremel’s original configs didn’t do this, and the linked Github repo is pretty much copied directly from those, with ongoing cleanup.

My secondary motive was expanding the list of recommended quality settings. I’d added a bunch of different layer heights (0.15, 0.25, 0.35, 0.4, and adaptive), but they didn’t show up in the top-level menu; I always had to go into the custom view to select from them, and then I lost the convenient UI for infill and supports. Defining a whole new printer with custom settings fixed that, and also automatically keeps overrides (like z offset) when I switch settings.

As part of the fun, I tried to come up with names for the various quality settings that matched the scheme Dremel used. Theirs were Ultra (0.05mm), High (0.1mm), Medium (0.2mm), Low (0.3mm), and High Speed (0.34mm plus some speed overrides). I added Good (0.15mm), Okay (0.25mm), Coarse (0.35mm), Chunky (0.4mm), and Adaptive (0.05-0.35mm). All of them inherit my revised acceleration/jerk settings, so the estimated print times are within 5%.

Reduced stringing...


Flossy!

Unless you work with embroidery floss or other fine thread, you won’t have any practical use for this floss bobbin STL file. It is, however, small, flat, and requires only 1.5 grams of filament to print, making it an excellent choice for testing adhesion, elephant’s foot compensation, and top/bottom quality.

’cause rasterized is best!

The English word raster pretty much only refers to converting vectors to bitmaps (displaying text/graphics on a monitor, etc). The German word raster means “grid”, which leads to some confusion when someone says their 3D model is rasterized. I always interpret it as “has blocky pixels like Minecraft”, but they mean “sized to a specific X/Y/Z grid”.

“Asking for a friend…”

Does this picture of Mayumi Yamanaka count as Tenga cosplay?

(raise shields and disable javascript before clicking on the picture)

InDirecTV

I’ve received email and a text message informing me that DirecTV has finally acknowledged that I returned their equipment over two months ago, and it’s no longer being charged to my account. I won’t really believe it until it shows up on paper, and even then, I doubt they’ll ever send the $8 they owe me.

Reborn In Another World As A 3D Printer


I’d Rather Summon The Mazoku Musume

Lacking anything else to watch, I made it most of the way through the first season of How Not To Summon A Demon Lord. The main elf girl has ridiculous gag boobs made of pudding while the main catgirl is pure AAA-cup angst, but most of the other females are somewhere in between, which is refreshing after Highschool DxD.

It’s better than those other fan-service comedies I’ve attempted to watch recently, although Our Demon Lord’s social-anxiety freakouts get old fast. It seems to run at the usual light-novel adaptation pace of four episodes per book, which is too fast if the cast is large and there’s any non-trivial world-building. In this case it only feels slightly rushed and sparse, as if the original author hadn’t gotten around to doing those things yet in the first three books.

Note that the original title is a bit more direct: 異世界魔王と召喚少 女の奴隷魔術 = “other world demon lord and summoning-girl slave magic”. Pretty much what it says on the tin, although the Crunchyroll version restricts itself to pokies and not-quite-sexual climaxes. That said, the flatcat girl did take an offscreen finger in the last episode I watched.

Season 2 coming in April.

Cutting the strings

When I switched back from PETG to PLA and tried to print the mini traffic cone that was filled with spiders, I still got some spider-webs. Fortunately, I’ve been keeping my WIP Dremel configs in source control, and determined that I’d inadvertently deleted an important option from my top-level definition file:

"infill_before_walls": { "default_value": false }

The default inherited from fdmprinter.def.json is true, and a cone is pretty much the worst-case scenario for this, cutting across the circle from the end position of one layer to the start of the next, smaller layer. Adding this back eliminated every single bit of stringing inside the cone.

Tarball updated. Several times, actually; among other things, retraction_extra_prime_amount is something that can’t be overridden on a per-filament basis. You have to create a whole set of filament-specific quality overrides, which I generated with a script, because I’m up to 10 quality settings now. Each one contains a dozen lines of boilerplate and one actual setting line.

Which reminds me that I’m due for a rant on the fact that Cura uses three completely different file formats to store configuration information: XML, JSON, and Python’s ConfigParser (which is more-or-less Microsoft Windows INI format). Machine and extruder definitions are in JSON, quality settings and variants (like different nozzle sizes) are ConfigParser, and filament definitions are in XML. Some settings are valid in any file, some only in specific ones, and the only documentation is some help strings in fdmprinter.def.json. If there’s any good documentation, it’s not on Ultimaker’s support site or Github repo wikis.

Then there are settings that I couldn’t find in any file, including some that caused Cura to decide that all my configs had been corrupted and needed to be wiped, after I added or removed things from its directory. I let it do the reset once, to clean out a bunch of cruft; downloading filament profiles from their marketplace was a mistake, and saved custom settings are “messy”, to put it gently. Since then, I’ve kept tarball snapshots as I tinker.

Note that their contribution policy is to only accept new printer definitions from the actual manufacturer, so even if I (or the other guy) produce really awesome config files for the Dremel, they won’t merge a pull request.

Useful Cura plugins

  1. RawMouse: enables support for 3DConnexion 3D controllers. I’ve been using mine extensively with PrusaSlicer, and kinda-sorta with OpenSCAD (where it doesn’t work very well). 3d mice are worth every penny, if all your core apps support them. Cura doesn’t, and doesn’t offer a plugin in the marketplace, so this one’s on Github.

  2. Z Offset Setting: tweak the Gcode output up or down to compensate for nozzle height and material differences.

  3. Auto Orientation: try to orient models to reduce the amount of support needed to print them.

  4. Custom Printjob Naming: simple, flexible way to embed useful information in Gcode file names.

  5. Startup Optimizer: hide the cruft (dozens of printers and materials you don’t have) so Cura doesn’t try to load it all.

  6. Setting Visibility Set Creator: lets you override the standard basic/expert/advanced modes to expose only the settings you actually tinker with.

  7. Export HTML Cura Settings: only useful for A/B testing, but really useful for that. This is how I diffed two sets of Dremel configs.

  8. Barbarian Units: most STL files use millimeters as units, but every once in a while some application gives you Love American Style.

Set for the long weekend

With all the testing I’ve been doing, I’m finally running low on the Hatchbox Grey PLA, so I started to order some more, and then remembered that I’ve got five spools of Dremel PLA in assorted colors. I do need some more neutral gray for babydai koma at some point (good contrast against most thread colors), but that’s to make sets for other people; I’ve got mine.

Nearly Topless


Thickness

I renamed my Cura 0.35mm layer-height preset from Coarse to Thick, because the Custom Printjob Naming plugin tries to abbreviate quality names to their initial letters, and if I have to choose between coarse and chunky, I’ll take chunky (this is not dating advice, but it could be). That makes the full set UAHGMOLTSC, which proves that I’m CACA (Crap At Creating Acronyms).

Mal-Adaptive

It seems Cura’s adaptive layer-height mode is experimental for a good reason. I printed a folding tablet holder that’s a good test of how well you’ve dialed in your filament settings, and it had a bunch of small holes in the top flat surfaces. Why? Because Cura calculated the number of top layers required for a 0.8mm surface based on the nominal layer height of 0.2mm, but because of nearby curved elements, printed them at 0.05mm instead. Four of those doesn’t make much of a surface. The stand is fully functional, just a bit moth-eaten on top.

This explains some other minor flaws I was running into with this feature, so I’ve stripped it out of my config set for now. UHGMOLTSC.

Pixiv: Intersectionality I Can Get Behind


The images for the day are the intersection of the tags “virtual youtuber” (バーチャルYouTuber) and “ass goddess” (尻神様). This is a short NSFW set, just so I could get the joke in.

more...

"I'm sorry, did you need that?"


How Disney destroyed Star Wars, catfight edition.

Dulling the shine


One for Rick C…

Overture PLA Plus/Pro is giving me a much less shiny top surface, at least in the dark blue (love the color, by the way).

Related, while using my heat gun to de-string a print, I noticed that it did a nice job of slightly dulling the extremely shiny finish that I get on the bottom from printing on glass+hairspray. I had it set to 350°F with the fan on high, and kept moving and rotating the parts to avoid melting anything thicker than strings.

Note that this is unrelated to the use of heat guns to restore smooth plastic finishes, which involves reducing the impact of UV and oxidation damage without sanding/polishing off the surface layer.

Oh, and What was I printing? A bag clip, of course. 😁

More specifically, this stl, scaled up from this clip by a designer at Prusa. I found the original wore out too quickly when used to secure twice-folded-over coffee bags, so I scaled it up (a bit more XY, a lot more Z) and printed at 0.3mm, with 5 walls so it printed solid without any infill pattern. The (quite mild) stringing came from testing Cura’s “smart hiding” of layer-start positions with a spool of filament that’s a bit thicker than the nominal 1.75mm.

(picture is unrelated)

Don’t Be A Tool

In the grand tradition of using your 3D printer to print 3D printer accessories, quite a few people have designed little stands to hold all their 3D printer tools and published them to the various “search” sites. With few exceptions, they suck.

Common problems include:

  1. I need seven inches or more: requires at least 180mm in at least two dimensions. My printer’s build area is 255x155x170.

  2. Carve away anything that doesn’t look like an elephant: designed as a solid block of plastic with small holes for tools.

  3. If your love life requires close air support, something has gone very wrong: requires significant supports to print successfully.

  4. Hours will seem like days: all of the above contribute to ridiculous print times.

  5. Where does the third one go?: assumes specific workspace layout (wall-mount, pegboard, attaches to one model of printer, etc).

  6. One ring to rule them all: very-specifically-sized slots for every tool you could possibly need, not just the ones you actually use regularly.

There’s a pretty reasonable one designed specifically for the Dremel 3D45. Except for the part where it mounts to the right side of the printer, which isn’t where I use any of the tools.

File this one at Cults3D under “baffling” (even though it would fit nicely on my printer), because it has prominent storage for seven spare nozzles. Why? Not even “why do you need seven nozzles”, but “why do you have them all out on your workbench gathering dust in unlabeled bins?”.

Right now, I don’t want to print any of them, and I don’t want to spend the time to design my own, so my tool holder will continue to be a $5 box from Michaels. Maybe I’ll make a little organizer insert for it sometime, but honestly, I pretty much just use the scraper, flush cutters, emery boards, and a small sharp knife, and those fit on the lid of the box, with room left over for the calipers.

66%の誘惑

(classical reference)

Next time, Nancy, maybe you shouldn’t buy your souvenir pens from China…

"That's the trouble with godhood: it robs you of your finer

judgement. A deity so rarely has to pay for his mistakes!”

"​...while heroes... heroes have an infinite capacity for

stupidity! Thus are legends born!”

Pixiv: marshmallows!


Marshmallow Oppai (マシュマロおっぱい), to be precise. I can’t imagine which recently-watched anime might have inspired this theme; target-rich environment, really. The only difficulty is that roughly 80% of the available pics are either Rem or Mashu Kyrielight (the latter being basically the trope namer, Marshmallow = mashu-maro).

Rigid tool holders…

Figures that right after I rant about poorly-designed 3D printable holders for 3D printing tools, someone shows how it’s done. Minimal volume of plastic, no supports necessary, fits on a lot more printers (175x125x58mm), with generic slots. It even has nicely-rounded edges. A few points off for abusing the words “generic” and “universal” while not including a wide slot or larger round hole, but other than that, it’s an excellent piece of work. Still not going to print it, though.

Unrelated Cura plugin

Material Settings, in the marketplace. This gives you a GUI method of making additional settings filament-specific (such as material_flow for a brand that runs thick/thin), rather than having to edit the XML by hand.

Yes, the only documentation for how to do this is in a comment on a bug that was closed with “won’t fix”. And the plugin exists because its author commented on the bug and agreed it would be nice to have.

more...

Cash Leveling


“Tomorrow, we have to decide which country we want to buy”

Went through the first pass on my taxes last night, and came out better than expected. That is, the two different employers, large severance check, and stock sales (options, ESPP, RSU) were effectively balanced by the extra amount I had withheld and the amount my new job over-withheld for Social Security, etc, leaving me with my usual close-to-breaking-even little refund checks. I’ll let it bake a week in case some late paperwork or surprise changes arrive, but it looks like the money I carefully saved for potential tax payments goes into my pocket instead. And there’s a semi-annual bonus on the way.

But I’ve already said that I’m not buying a new car this year, or a new computer, or a new camera, no matter how Sony tempts me. Oh, my. Wait, this one has gigabit ethernet?!?

We haven’t finalized the dates on the re-re-re-rescheduled Japan trip, but it’s currently “three weeks in November”, with enough time in Tokyo for me to spend way too much money. Probably not on camera gear, unless I find myself in a shop full of classic Minolta lenses…

Maybe this will be the trip where we take a few overnight trips off the beaten path. I’ve already penciled in a day trip to Kamakura and a whistle-stop tour of Nagoya (mostly for the Totoro House) on the way from Tokyo to Kyoto, but Nikko and Amanohashidate would benefit from full days, and a return visit to Ise would be cool, too. My sister’s not a big fan of cable-car rides, but she might go for an overnight stay at one of the many temples on Mt. Koya.

Solo Leveling Offline

File under peculiar the fact that the first half of the Solo Leveling light novel is out today in paperback only. No Kindle edition listed at all. I’d have to wait an entire day before I could start reading it. I think I’ll hold off for a week or so to see if the ebook turns up.

Which reminds me to check up on the online comic, which was supposed to start back up this year.

Isekai: Prologue


I was not run over by a truck.

I also wasn’t shot, stabbed, electrocuted, poisoned, buried alive, eaten by wild animals, or chased off a cliff by angry bees. To be honest, I’m not entirely certain that I actually died. I only have her word for it, and she wasn’t a reliable source. Hot, though.

She said I’d have five months to learn my way around, master my powers, and forge alliances, then defeat a rampaging Demon Lord and save the world. That was ten years ago. I haven’t seen her since.

I haven’t seen anyone since. Not a human, elf, dwarf, orc, goblin, dragon, ghost, giant, sentient tree, or talking rock. Well, there was that time I ate some rather spectacularly purple berries and everything talked to me, but it went away after a few days.

Also, powers? Unless you count “not dying from hunger”, nothing’s shown up yet.

In short, no powers, no Demon Lord, no friends, no enemies, no monsters, no villages, no damsels in distress, no damsels period. Nothing but trackless wilderness and tasty-looking animals that are really hard to catch.

I am the chosen Hero.

I am alone.

I live in a cave.

I eat bugs.

Summoned To Another World To Defeat The Demon Lord, I Arrived 5,000 Years Too Early, So I’m Stuck In A Cave Eating Bugs

Promises, promises...


Q: What do you call a Biden voter crushed by student-loan debt?

A: Sucker.

Good thing, too, since if he had canceled their loans, they’d be suckers with a 1099-C on the way, promising a hefty tax bill. All those $150,000 Woke Studies degrees would become taxable income with the stroke of a pen.

(not so coincidentally, there’s a new bill in Congress to allow student loans to be discharged in bankruptcy…)

Unrelated

The Kindle version of Solo Leveling is out now.

3D Cheesecake 34: Be of good cheese...


You can tell a lot about people by which deaths they celebrate, and which they lament.

“The average liberal thinks that if we’re nice enough, we can reach an understanding with Hugo Chavez or Mahmoud Ahmadinejad, but Rush Limbaugh and Glenn Beck can’t be reasoned with.” – John Hawkins

I think a celebration of life is in order, and what’s more lively than pretty girls wearing a smile and not much else?

more...

Isekai: 1.1


It wasn’t an amazing life, but it was comfortable. I had a job, an apartment, a hobby, and even the occasional girlfriend. Okay, the job was assistant manager at a pizza joint, the apartment was upstairs, and the hobby was an obscure martial arts school on the third floor, but the nearby college was chock-full of pretty girls, which meant the restaurant was, too.

It was slow when she walked in, that mid-afternoon lull when everyone’s finished lunch and gone back to work or class. She was pretty enough that I was surprised she was alone, but when I went over to take her order, I understood: she was nuts.

Usually it takes at least a few minutes to figure out that a college girl is completely bonkers, but then, they usually don’t open the conversation with, “tomorrow you will die, and then I shall assume control of your fate”.

“I’ll be right back with our vegan menu.”

Dear Amazon,


I received two packages today. The first was a lightly-padded envelope shipped UPS, containing a nozzle, so small that it took me a while to find it. I honestly thought the envelope was empty at first.

The second was a large cardboard box containing a few token air pillows for padding, along with three Bluray discs and a cast iron griddle. Only one of the Bluray cases was damaged by the five pounds of cast iron bouncing around in the box, but it looks like the actual discs survived the experience.

Isekai: 1.2


Naturally she skipped out without paying. One moment she was eating her third tofu-and-artichoke pizza, the next she was gone. Which was odd, since I’d been checking her out every thirty seconds for the past hour. Mostly because she was a very enthusiastic eater and wasn’t wearing underwear, just a skimpy little outfit that walked the fine line between party dress and party favor.

Maybe I should have noticed that her dress had no room to hide a wallet, but the things it was hiding, barely, were a lot more interesting. She did leave a note behind that read “see you soon”, which was both promising and a bit worrying.

I checked the street outside, but there was no sign of her. I asked the three other customers if they’d seen which way she went, but they’d barely noticed she was there. It wasn’t until I got off work that I found out where she’d disappeared to: my apartment. More specifically, my shower, which she was coming out of as I walked in. Naked. Her, not me.

“You owe me $47, lady.”

“Think of it as buying me dinner first, so we can move on to the greatest night of your life. Also the last.”

Coffee spiders


Supply, Chained

I am no longer short on liquid pie. Last week I spotted a marketplace dealer whose price on Gevalia Mocha Latte k-cups was sensible, and today my monthly subscription arrived on schedule and without a surprise cancellation, so I’ve got nearly a three-month supply, with the earliest expiration date in November. I still haven’t seen it in stores, but Corona-chan was bad for variety in a lot of areas, and I think big-chain buyers are still playing it safe.

Usually I limit myself to one of these per day, and with the supply uncertain, sometimes less, but now the only thing holding me back is the calorie count. Which is reasonable (110, with two Mini-Moos), but still adds up during cold* weather.

(* for the California coast)

Continuing with my recent trend of Amazon shipping fails, one of the 36 k-cups in this shipment somehow managed to burst, spilling finely-ground coffee everywhere. Fortunately the boxes were in a sealed outer bag, but I had to open them all up and wipe down every k-cup and froth packet. There was no sign of rough handling, so I’m inclined to believe it was that way before it left the warehouse, and whatever human or robot did the packing didn’t notice or care.

Another coffee machine!

Despite money burning a hole in my pocket, I managed to keep myself to only one new toy, a Nespresso Essenza Mini espresso machine. I worked my way through the supplied variety pack of coffees, and, taken straight, I honestly can’t tell the difference between most of them. Maybe it’s just that they all seem to be darker roasts, but the high-pressure extraction method produces less-distinguishable flavors than my Aeropress.

So far they’ve all responded well to Splenda and Mini-Moos, though, and their “Fortissio Lungo” topped off with whole milk turned out quite nicely. I don’t have a milk frother or steamer, and I don’t plan to buy one any time soon; that just seems like work. I usually only buy milk for cooking and baking, and for the past year I’ve gotten into the habit of buying UHT whole milk in 8-ounce lunch-packs, to avoid supply-chain disruptions while keeping it from going bad on me.

I didn’t have any actual demitasse cups in the house, but a saké ochoko will hold an espresso shot, and the larger thick-walled ceramic guinomi set I picked up cheap at Daiso has room left over for a Moo, and holds the heat nicely.

After having lived with k-cups for a number of years, the biggest surprise with the Nespresso machine is how much, and for how long, liquid drips into its two drip pans afterwards. I’ve never had to empty a k-cup drip pan, only give it a quick rinse when I’m cleaning the kitchen.

Chicks In Chains

Coming back from a trip to the Nob Hill south of town, I was pleasantly surprised to see nearly-completed new construction at the local mall. I hadn’t known that Chik-Fil-A was coming to town, but I’d expected it to happen eventually. The hate-fueled campaign to destroy them backfired big-time, and they’ve greatly expanded their presence in California since then. They’ve been putting in stores north, south, and east of me, so it was only a matter of time before Salinas got one.

Interesting that they skipped Morgan Hill and Gilroy, especially with the big outlet mall, but maybe the timing just lined up better with the construction at my mall.

Doin’ whatever a spider kin

I’m still idly watching That Spider Show, and episode 7 was the first time I didn’t actively hate the crew of the B Ark. Well, some of them, anyway. For a few minutes.

Undocumentation

The 3D printer nozzle that arrived yesterday was for an experiment that I can’t really start yet. I’ve built up a pretty solid Cura profile for the Dremel 3D45 with the standard 0.4mm nozzle, and I thought I’d come to understand its inheritance system, but I just can’t get the damn thing to locate the correct quality profiles when I add variant nozzle sizes into the mix.

It seems to require a config file for each (material, nozzle, quality) tuple, but when I generate them with a script, it can’t find a match, and the log messages are not helpful. The only good thing is that it’s not complaining that they’re corrupt and asking to reset everything to defaults.

It would be significantly less work to just generate a completely separate config for a “3D45-0.8” model printer.

UnDirecTV

I officially no longer owe AT&T for the DirecTV equipment that I immediately returned after canceling my account. The proof is that they sent me the money I’ve been owed since November. On an $8.79 prepaid Mastercard debit card that I have to figure out a use for.

Secure By Design

I’m just going to leave this here:

“…the malicious package is said to leverage the macOS Installer JavaScript API”

I find this approximately as comforting as if they’d said, “the Installer’s PHP-based SQL interface”.

Isekai: 1.3


There is a great wisdom handed down across generations, from father to son, from brother to brother: never stick it in crazy. In this case, crazy was a natural redhead with the most lick-able freckles I’d ever seen, scattered across a very healthy figure.

“Are you planning to kill me with those?”

“Only metaphorically; I don’t know precisely how it happens, just that it’s certain, it’s tomorrow, and that if I choose, you’ll rise again to serve my needs.”

“That’s more of a double entendre than a metaphor.”

“Do you want to fuck me before you die, or not?”

I stuck it in crazy. I lost count of how many times I rose to serve her needs.

Isekai: 1.4


She was gone in the morning, leaving only a note that said we’d meet again once I was safely dead, and a huge mess in the kitchen that said she was only vaguely acquainted with the concept of cooking.

Three weeks later, I’d almost forgotten about her. I mean, she was right about it having been the greatest night of my life, but the details just seemed to slip away, like I wasn’t supposed to remember her. No one else did.

So it came as a bit of a shock to wake up with her on top of me, with the action already in progress. It was some time before I noticed that we weren’t in my apartment. Or anywhere else familiar. Or even indoors. In fact, I was lying on a slab of rock in the middle of a forest, wearing nothing but a satisfied-looking redhead.

“Welcome back from the dead, hero! Ready to save the world?”

“Is that where I get to be on top?”

“Eventually. I brought you here so that you can get ready to defeat the Demon Lord and his army. Here, I wrote everything down.”

This time I saw her vanish. Couldn’t miss it, really, since we were still attached.

Isekai: 1.5


I’d heard that bugs were a good source of protein. I’d never planned to test it, but the thing about paleo diets is that they’re the only option when you suddenly end up living paleo. My crazy redheaded kidnapper had dumped me in the middle of Outer Bumfuck Forest, completely naked and armed only with a post-it note.

What was it with this chick and notes, anyway?

This one was long on drama and short on details, but it covered the basics: Hero good, Demon Lord bad, five months until the big fight. Nothing about finding food, shelter, weapons, or pants.

With wilderness skills that would make a Cub Scout sneer, it was quite a while before I had basic survival covered and could focus on exploring my new world. And it definitely was a new world, because the first time the sky was clear at night, I discovered that the moon had a ring around it.

Which meant she wasn’t crazy, and I was dead. Back home, anyway; here, I was definitely alive, or I wouldn’t have been so cold and hungry.

(I’m up to just under 6,000 words on this, by the way; hopefully I’m not the only one amused by it)

(also, I finally found out what she is, when I hit 5,000 words)

Pod People


At 9:45 AM on Sunday, I ordered some more coffee pods from Nespresso’s web site, enough to get free shipping and the one-time $10 discount that came with my machine. They arrived at 9:45 AM on Tuesday.

I hadn’t expected that kind of service, so when I’d gone out to the grocery store, I’d bought three flavors of Peet’s and one of Gevalia (which, naturally-but-sadly, wasn’t the sort that comes with a mocha froth packet).

The sampler had told me that I was more interested in the Lungo form-factor than the Espresso, so that’s what I’d mostly ordered online. Neither Peet’s nor Gevalia sells a dedicated lungo, but all of the Peet’s seem to work fine at that size with a Moo and a Splenda or two, or sugar-free Torani and some milk. The most striking characteristic of the Gevalia pods is the fine grounds that end up in the cup; their pods are compostable rather than recyclable, and I think the caps just puncture differently when you load them. The end product tastes a bit thinner, as well, at least in the “Luminous” flavor; it does not work as a lungo pour (he says, disguising the fact that he doesn’t speak even Coffee Italian, and just means pressing the Large button instead of the Small one).

Also, it turns out the Essenza Mini has three drip trays, one of which is “my countertop”. With the Keurig, I’m used to just topping off the water reservoir while it’s still attached to the machine, rather than carrying it over to the filtered-water dispenser on the fridge (which it doesn’t fit into anyway). The Mini’s reservoir has an odd little locking system that requires you to tilt it away from the body of the unit to open the lid, which breaks the seal at the bottom.

Net result, if you try to refill it in place, it will slowly leak until it’s firmly reseated, leaving a small puddle on the counter.

By the way, browsing the Nespresso sub-reddit revealed another downside to their long-dripping pod design: mold. Not just the potential for it to form if you don’t rinse out the pod-catcher and drip trays, but the apparent inevitability of it if you go along with Nespresso’s recycling system, which involves collecting about a hundred pods at a time and sending them off in their free prepaid mailers.

The recommended way to avoid mold is to store the used pods in your freezer until you have enough to fill the mailer.

Related, I hacked on the OpenSCAD source for this pod-holder design to make a version that would fit on my 3D printer, stand up on its own, and not take 8+ hours to print, even with a 0.3mm layer height. STL file here; I might refactor the code to use the BOSL library for everything and upload it as a remix, now that Thingiverse acknowledges my existence.

One thing that Nespresso has really done better than Keurig is make the products attractive and stylish, including the consumables. People buy and make elaborate display stands because the pods are pretty.

Isekai: 1.6


With only five months until DL-Day, my priorities were simple:

  1. stay alive
  2. find people
  3. become hero
  4. save world

Hoping that she’d return with something more than fantastic sex and terrible notes, I moved into an unoccupied cave with a good view of “our” rock and easy access to fresh water, collected some pointy sticks and sharp-ish rocks, and went looking for signs of civilization.

I quickly settled into a routine of picking a direction, walking as far as I could until midday, climbing a hill or tall tree, looking around for anything, and then returning home disappointed. And usually hungry. I ate pretty much anything I found, at least once, which is how I discovered that grilled beetles tasted a bit like bacon.

Oh, yes, I had invented fire. My sensei was big on perseverance, and it turns out that if you bang enough rocks together, eventually you’ll find the kind that make sparks.

Fire was good for more than cooking, of course. It kept me warm and uneaten at night, and was sure to attract attention from the locals eventually. All I had to do was get out there and find them.

By the way…

more...

On Common Grounds


Pod Vase-ing

This Nespresso capsule holder model is almost extremely well done. It holds 30 original-type pods in a compact hexagonal shape, and significantly reduces filament use and print time by being designed to use vase mode. It’s slightly too tall to fit on my printer, which I fixed by scaling the height down, and the slots are slightly too tight to easily hold Gevalia’s compostable clone pods, which have a thicker rim.

But the real problem is that the matching slots in the separate base are slightly too tight to fit the top into. This can be worked around with careful slicing parameters, if you know about it in advance, but if you went ahead and just printed it, like I did, you’ll need to break out the hot glue.

So close.

Speaking of pods…

Target has a house brand of Nespresso clone-pods called “Archer Farms” that includes three flavors designed for a lungo pour. They’re crap.

Not the coffee, the pods. Licensed pods use a solid aluminum body with a foil cap. These use a slightly-off-spec aluminum body with foil at top and bottom, and the result is that my Essenza Mini strains to push the water through and gives up about halfway. There was nothing wrong with the coffee that made it out, but paying half the price to get half the coffee doesn’t seem like a good deal, especially if it ends up stressing the machine.

On the bright side, Target is the only retailer I’ve been in for months that had my Gevalia Mocha Latte k-cups in stock. If I didn’t already have a three-month supply, I’d have picked up a three-month supply.

A Moo by any other name…

I stopped buying Land-O-Lakes butter when they killed off the Indian and kept the Land, but I’ve still been buying Mini Moos, their single-serving half-and-half packets. Because I dislike artificial creamers, and because two Moos is only 20 calories, but mostly because it’s the only brand my local groceries stock in that form factor.

But as my Nespresso Adventures rapidly depleted my stock, I decided to go looking for a different brand, and found Carnation Half & Half tubs, in the giant industrial-family-sized package. 360 of them is a lot for one guy, but coffee isn’t the only use I put them to, and hopefully they don’t arrive with an imminent expiration date. These days, packaged meals that include “milk” or “cheese” use low-fat, low-flavor stuff to attract the masses who’ve been indoctrinated by the State Church Of Wrong Dieting, and they benefit from a little 10-calorie touchup.

Well, 11.5 from now on; Carnation decided to set their serving size at 3 tubs instead of 1, so they fall under different FDA rounding rules (see page 129), and thus each tub officially has 0.3333 grams of sugar instead of being “sugar-free”.

I just have to figure out what to call them now. Carns? Calfs? Halfs?

Unrelated, “Alexa, please stop sucking.”

J: Alexa, what time does Safeway close?

A: Safeway pharmacy on Constitution Blvd is currently closed, but will…

J: Alexa, stop. What time does the Safeway grocery store close?

A: Safeway pharmacy on Constitution Blvd is currently closed, but will…

J: Alexa, stop. What time does the nearest Safeway close?

A: Safeway pharmacy on Constitution Blvd is currently closed, but will…

J: Alexa, stop. What time does the Safeway on North Main Street close?

A: Safeway on North Main Street in Salinas is open today from 6am to 10pm.

“No, seriously, stop.”

J: Alexa, play “Sex (I’m A)”.

A: Here’s “Sex Type Thing”, by Stone Temple Pilots, on Amazon Music.

J: Alexa, stop. Play “Sex (I’m A)” by Berlin.

A: I couldn’t find sex-ima by Berlin, but here is other music by Berlin. (begins playing “The Metro”)

J: Alexa, play “Sex” by Berlin.

A: Here’s “Sex (I’m A)” by Berlin, on Amazon Music.

[Update: this one turns out to be particularly tricky: the results depend entirely on how you pronounce “A” when you ask for the song. If you pronounce it the way they do in the song (“I’m a man/I’m a goddess/…”), Alexa won’t find it, but if you carefully enunciate it as the letter “A”, it will.]

Isekai: 1.7


After a while, I’d given up waiting for her and started exploring more seriously. I hadn’t visited the cave in a few weeks, but fortunately nothing had moved in while I was gone. This trip, I’d followed a river to where it joined a bigger river, and then on to where it finally emptied into a lake. Great place for a settlement, I thought, but apparently nobody on this world agreed. If there was anybody on this world; after ten years, I had serious doubts. The fish were a nice change of diet, at least.

I’d like to think that I had a reason for coming back to the cave, but it was really just reflex. I always came back, just like I always checked out the rock she’d left me on.

Which for the first time since my arrival was occupied. From here, all I could see was white skin and red hair, but I broke my personal record for the Hundred Yard Frantic Scramble getting down there, all the while wondering whether I was more interested in wringing her neck or begging for sex. At least one part of me had already voted for the latter.

It wasn’t her. I’d come up with a lot of scenarios over the years, some naughty, some nice, some dark and bloody, but I’d never thought I’d find a different redhead.

Worse, she looked about twelve.

Down the Hatch


Costco stocks a Costco-sized jar of Hatch green chiles. They’re terrific. Unfortunately, they contain no preservatives of any kind, and once opened, will turn from green to fuzzy surprisingly quickly in the fridge. I suspect they turn to mush if you freeze them, so I won’t buy them again until I’m in a position to cook with friends in our brave new post-Covid world.

However, when I went out to Seaside to get a haircut recently, I stopped at the upscale Safeway nearby that stocks Boar’s Head lunchmeats, and discovered that they also carried a selection of Green Chile Food Company frozen burritos and quesadillas, made with Hatch chiles.

They’re quite tasty, and the quesadillas come with instructions to pan-fry them in a teaspoon of butter, which is a perfect use for my new cast-iron Bluray press.

Coffee China

I bought a set of actual demitasse cups with matching saucers, from the faux-Italian brand Le Tauci (aka Shenzhen Bosiho Technology, Ltd). They seemed like a decent product at a decent price, and they are. As a bonus, they were very well packaged, guaranteed to survive anything you threw at them (which, fortunately, did not include five pounds of cast iron).

I didn’t really read the blurb in their listing. I saw them recommended on the Nespresso sub-reddit, looked at the pictures, scanned the reviews, and plopped them into my cart. It wasn’t until I looked at their lungo cup set that I confirmed their Chinese origin. These are just the highlights:

The handle is meticulously designed for comfortable holding. No matter the coffee mug is in your hand or on your lip, you can feel the finest touch of the flavor.

【PLEASURE GAINED WHEN SAVORING INCONSISTENT TEMPERATURE】

The expresso cup has no porous to absorb moisture or odors. Make it a naturally easy-to-clean vessel to maintain the natural flavor of coffee beans.

Different Taste From What You Try

Enid Demitasse Cups Has A Sturdy Handle More Than Decoration
There is a part of concave surface between it and the wall of cup, which provides more space for your fingers to hold the cup in an easy and comfortable way.

Want to make a cup of perfect lungo shot by yourself? Suit it in the Nespresso coffee machine and you can get your drink within a few minutes!

You are the motivation for our further upgradation

I really like “upgradation”. It sounds like something you’d pay a reverse dominatrix for.

In addition to making a decent product, I tip my hat to Shenzhen Bosiho Technology for coming up with a non-ridiculous-sounding name, unlike their competitors in the coffee-cup arena, like Cuisinox, Sweese, and Huji.

By the way, JoyJolt, while equally obviously Chinese in origin, is another coffee-cup brand with an appealing name and a pretty good rep, working the double-walled-borosilicate-glass side of the street. They have an American beard for their branding, but the cups and the ad copy are definitely Made-In-China:

Top quality double walled glass coffee mug mouth blown borosilicate-glass microwave, dishwasher and oven(up to 350°F are save; not for use with metal utensils

The glass coffee/Tea mug are absolute design Smooth finish, crystal clear, beautiful addition to any cafe, restaurant, definitely to your own home

Enjoy Your Favorite Drink Never Before With The JoyJolt Aroma Double wall Glass Cups!

Isekai: 1.8


I’d found a naked redhead where I expected to find a naked redhead, but it was the wrong one. This one was just old enough to be way too young, even for a guy who’d been alone for ten years. She was also asleep or unconscious, which allowed my firm disappointment to subside to the point that it wouldn’t scare her off.

I felt only mildly dirty as I looked her over. They had to be related: same lovely face, same shaggy mane of red hair, same delightful freckles everywhere I could see without risking a felony. For a wild moment I thought that it was her, fucking with me in a way that didn’t involve actually fucking with me.

Then she sat up and screamed. In fairness, I hadn’t exactly been keeping up with my grooming.

Somewhat belatedly…

more...

Isekai: 1.9


As she curled up into a tight ball and began sobbing, I realized it wasn’t me she’d screamed at. I don’t even think she knew I was there until I reached out and lightly touched her shoulder. I’d never had much practice at comforting children, especially ones that looked exactly like a fresh, innocent, untouched, virginal, naked, budding, pure, stopstopstopstopstop.

I rebalanced my disappointed hormones and resolved to platonically comfort the little girl. It wasn’t easy, but by the time she looked up at me with startled, tear-filled eyes, it wasn’t hard, either.

“Are you okay?”

“I’m… I’m not hurt. I’m not there. And I’m not alone. I think that’s okay enough for now.”

She had the same voice, too.

“I’ve got a little food in my cave, and furs and hides that you can cover up with. It’s not much, but…”

Her eyes narrowed at the word cave, then widened at furs and hides. “Where the hell am I?!?”

“Beats me, kid; I was dumped here ten years ago by a woman who looked like a 20-year-old you, and I’ve been alone ever since.”

“Oh crap, her. I am not okay any more.”

Fun with Scrivener!

more...

Red-eye Pie


Since I now have a Keurig and a Nespresso, and a solid supply of the necessary ingredients for liquid pie (stir the froth packet + 2x Splenda + 2x Half-n-Half together into the consistency of cupcake batter, then brew 12-16 ounces with the k-cup, using the Strong button), I decided to try combining the two for this morning’s wake-up call, dropping a shot of espresso in at the end (also Gevalia, their “Luminous” flavor). This process is apparently known to coffee-speakers as a red-eye. The final result is not to be confused with a Mocha Latte Bomb; I suspect those end up being eaten straight as often as dropped into a drink.

My giant stoneware mug didn’t fit into the Essenza Mini, and I haven’t printed a replacement drip tray for it, so I used one of my new demitasse cups to transfer the shot from A to B.

“Bosmarlin” doesn’t roll off the tongue as well as the top-tier Chinese brands, but perhaps Xinhua County Huiling Trade Co., Ltd couldn’t find anyone with the Gift Of Names, although they did find someone who writes much better English than usual. Terrific mug, though, and I really like the hamon-like pattern on the rim. Also, it’s subtle in the pictures, but it’s got faux-handthrown dimpling on the outer surface, to add a bit of visual interest and texture.

10/10, would consume mass quantities again.

(I think these may be the only SFW-ish images tagged チョコぱい…)

Isekai: 1.10


She didn’t need any help getting up the path to the cave, which was probably for the best. I waited outside while she rummaged through my furs and made herself decent, and then we talked.

“How long did you sleep with her?”

We were definitely thinking of the same redhead. “It was a long time ago, and I didn’t really keep score, and are you even old enough for that conversation?”

She sighed and tried again. “Not like that, I mean sleep-as-in-sleep. How much time did you spend together, touching-but-not-that-way?”

“One night. Supposedly my last, although it wasn’t, quite.”

She looked confused, so I told her everything. Dine-and-dash, “tomorrow you die”, amazing sex (without the details), the state she left my kitchen in (with all the details, because that made her laugh, and for a moment she seemed as young as she looked), the three weeks of fuzzy memories, and finally waking up here with her on top of me, vanishing as soon as she finished.

“That bitch. I really hope I’m not her, because I’d hate to turn out to be someone that I’d turn out to hate being.”

How many real combat drops?


“Am I living in a simulation?”

If you’re banging Salma Hayek, the answer is yes. Duh.

StadiOn

This story about the implosion of Google’s in-house Stadia game-development company sounded like such a familiar clusterfuck that I found myself searching for Steve Perlman’s name.

SolarCluster

Former security company SolarWinds has blamed an intern for a leaked password associated with their massive fail, that turned out to be ‘solarwinds123’:

“a mistake that an intern made… They violated our password policies and they posted that password on an internal, on their own private Github account”

If an intern was in a position to set a password that was used by anything more sensitive than the third-floor laser printer, and you had nothing in place to enforce your ‘policy’ or detect lapses, and the thing that password gave access to was somehow Internet-accessible, your entire business model was a complete fraud.

I can think of plenty of stupid-password stories, including the time the new Core Services Group full of Senior System Administrators changed the root password on all the infrastructure servers to be the bullshit temporary password we’d been giving to every new employee for years (“iltwas” = “I Love To Work At Synopsys”), but that was so long ago that everyone on the Internet had a public IP address and Netscape still thought they had a viable business model.

Pokemon Shogun

Nintendo is promising a real open-world Pokégame, for next year. This year will just be another remake, this time of Diamond/Pearl. Both of these surprised me, because I’ve been assuming they’d just keep adding DLC to Sword/Shield; a lot less development work and a license to print money.

“I invented a thing!”

He seems to have survived the Internet’s immediate response that VW’s been selling that exact same thing for years.

What’s in a name, enscript edition?

I’ve been poking at re-implementing enscript from scratch, because the GNU clone of this ancient Adobe tool is cruftier than a cruftwyrm in a cruftstorm, tarted up with all kinds of useless crap that interferes with the core functionality of printing a damn text file.

There is no equivalent software available for any platform at this time. You can get some kind of printout from text editors, but black text on white paper in a fixed-width font is just too primitive to attract the attention of modern skittletext-loving dark-moded 20-year-olds with perfect eyesight and an addiction to running everything inside an Electron app.

I’ve got a long list of necessary and forbidden features, and a tentative implementation plan (Python3 + free version of Reportlab), but what I really need to focus on is bike-shedding the name.

Goal: clearly suggest the fundamental purpose of cleanly converting TXT to PDF in any modern fixed-width Unicode font, optionally including the implementation language as a discriminator. Continuity with the long history of the tools in Adobe’s TranScript package would be a plus, but I think that ship has sailed, wrecked, and sunk to the bottom of the ocean.

Unfortunately, I can’t find a single name that includes any of text, txt, pdf, lp, script, tran, en, etc, that isn’t either already in use by another likely-abandoned open-source package, registered to a terrorist group, or simply horrible. Assorted uses of “2” and “to” don’t improve the situation in any way. Honestly, the least-horrible options I’ve come up with so far are “pdftty” and “qenscript”. One can’t be pronounced these days without being canceled, and the other sounds like the companion app to barbiescript.

[the long-abandoned source code for the original Adobe TranScript package is visible online, by the way, but Project Athena’s ancient Trac server requires an MIT login to actually download anything; I might still have a copy somewhere from ~1992, if the files on that tape ever made it to a zip drive that made it a USB disk that made it to a NAS that made it to another NAS. Actually, I know I still have it, but I’d have to find something that can read original NeXT single-sided optical disc cartridges, and then hope they’re still functional.]

So after all that…

…it turns out that the version of “Sex (I’m A)” that Alexa will play by default is not the original version from the album Pleasure Victim. It’s a re-recording with offputting synths, Terri Nunn emphasizing her lines oddly, and some other guy taking the male role and being mixed too prominently. The simulated moaning has also been redone, really badly.

A bit of digging suggests that this is the version from the album Metro: Greatest Hits, which continues the usually-disappointing trend of Alexa choosing the most recent version of a song rather than the one I actually want to hear. Often this is a terrible live version by the wrong band, and adding “the album version of” will help, but if I have to write extremely specific incantations to safely summon a song, I might as well switch to demonology.

(for instance, I learned to add “the song” after the time I said “play chitty chitty bang bang”, and the TV turned on and started playing the movie)

Unrelated, Why isn’t this cat happier?

FFS


How many words in this headline are not stupid?

Introducing Crowdsec: A Modernized, Collaborative Massively Multiplayer Firewall for Linux

Isekai: 1.11


Everything started spinning as I unpacked her awkward sentence, and I stared in shock. It was her face. Her voice, her hair, her freckles, her everything-that-was-still-growing.

“You… she… how does that even work?!

“We’re complicated. I don’t really understand it very well myself, but I think there are about a dozen of us. It varies from time to time, and I’m certain that at least two of the ones I’ve known were the same person at different ages, but I don’t know if they were also her, or me, or…”

She shrugged apologetically. Oddly enough, that gesture gave me the confidence to say, “you’re not her; you’re… more grown up.”

I’d surprised a smile out of her. “Thanks. When I say it in my head, it sounds like wishful thinking, but for what it’s worth, you’ve seen us both from the outside, without all the complications.”

“Can you at least tell me if it was all bullshit? I know this is isn’t the world I’m from, but did I really die there, and am I really supposed to become some kind of hero and save this world?”

She closed her eyes and sighed, and when she opened them again she looked much, much older. “I’m sorry, but yeah, it’s probably true, at least in broad strokes. It’s hard to move between worlds. Moving someone else must have been a lot harder, even with a solid connection, and she wouldn’t have tried something like that without a good reason.”

“And I think she screwed up.”

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