“I feared that the committee would decide to go with their previous decision unless I credibly pulled a full tantrum.”

— dmr@alice.UUCP

Urakata: 1.5


I had memories to go with the new body. Nothing unusual in my former line of work, but this wasn’t a job, it was going to be my life. I switched the light back off, closed my eyes, and started finding out who I was.

Name: Virginia Vesta White; for fuck’s sake, he might as well have just called me Chastity Cherry McPure.

Occupation: child; no shit.

Base of operations: Aunt Sally’s house; well, at least I didn’t have parents to deal with.

Known associates: Sally Sanders, unrelated legal guardian. Oh, great, I’m “living under the name of Sanders”; the fun just never stops. Let me guess, she’s cheerful and blonde and perky and eager to get involved with molding and shaping my future womanhood. Heh, that part could actually be fun, in the nasty way Classic Me had dealt with the other girls.

Tech level couldn’t be too bad, since I’d already found a light switch. Indoor plumbing was likely, which was good, since I’d just discovered I had a bladder the size of a teacup and desperately needed to pee. I still had plenty of Virginia’s memories to unpack, but they’d be easier to face without the risk of wetting the bed.

Joplin hack!


The CLI client for Joplin is very limited in functionality. It’s good for import, export/backup, and some very simple note-manipulation, but that’s all.

The mobile clients are mostly functional, provided you want all your notes sorted by title, created date, or updated date across all notebooks (per-notebook settings are a concept yet to be implemented on any client). The concept of dragging notes into a specific order is only supported on the desktop client.

…unless you’re willing to cheat, which I am. Using the plugin API and code cribbed from the Combine Notes plugin, I wrote a tiny little plugin that modifies the titles of the selected notes so that they are prefixed with a string of the form “001#”, replacing any existing prefix. So, if you select all the notes in a folder that you’ve arranged in a custom order, then when they replicate to a mobile client, title-sort will preserve your order.

I’d make it a lot more robust and customizable before publishing it as an official Joplin plugin, but it meets my needs, and if anyone else thinks they’d find it useful, here’s Custom Order Titling.

import joplin from 'api';
import { MenuItemLocation, SettingItemType } from "api/types";

function zeroPadding(number, length) {
  return (Array(length).join('0') + number).slice(-length);
}

joplin.plugins.register({
  onStart: async function() {
    await joplin.commands.register({
      name: "CustomOrderTitling",
      label: "Custom Order Titling",
      execute: async () => {
        const ids = await joplin.workspace.selectedNoteIds();
        const prefixRegexp = /^\d{3}# /;
        if (ids.length > 1) {
          let i = 1;
          for (const noteId of ids) {
            const note = await joplin.data.get(["notes", noteId], {
              fields: [
                "title",
              ],
            });
            let strippedTitle = note.title.replace(prefixRegexp, "");
            const newTitle = zeroPadding(i,3) + "# " + strippedTitle;
            await joplin.data.put(['notes', noteId], null, { title: newTitle });
            i = i + 1;
          }
        }
      },
    });
    await joplin.views.menuItems.create(
      "contextMenuItemconcatCustomOrderTitling",
      "CustomOrderTitling",
      MenuItemLocation.NoteListContextMenu
    );
  },
});

Two caveats:

  1. I believe that the sync works on the complete-note level, so that updating even a single field like title replicates the entire note, but only the metadata and body text, not any attachments.

  2. The order that you build up your selection of notes is the order the plugin will see them in. So, if you were to add them to the selection in random order, then the prefixes will be generated to match.

3D cheesecake: dressed & undressed


Usually glamour shoots end up somewhere in the middle, but there are plenty of good things to say about the ends.

These pictures make me sad (NSFW site! Javascript off!): the stunning Manami Hashimoto, in a tight catsuit, with a pistol. The classic M-Appeal look, and every picture is terrible. Bad makeup, bad lighting, bad framing, bad posing, bad setting, bad editing, weird angles, no life behind the eyes, etc, etc. Poor trigger discipline is just icing on the crappy cake.

This is unfortunately the norm for Manami; I can think of only a handful of shoots where the people behind the camera seemed to have any interest at all in showing her off.

Unrelated,

One out of three porch cats is smart enough to come in out of the rain. The other two deliberately go out into the rain in the hope of getting attention from me. Extra credit for Solid, who followed me all the way across the street to my mailbox, then all the way back, only to discover that I’d already put out fresh dry food for him.

Totally Unrelated,

I exported everything from Synology’s Notes app to Joplin, using this Python script and the Joplin CLI. There’s another project that tries to use the Joplin API to do it in one go, but it blew chunks on me before it ever imported anything; someone else filed a bug on it already, so I didn’t pile on with a “me, too”.

I did file a bug on this script, because it uses Pandoc to handle the HTML-to-Markdown conversion, and unless you add the multiline_tables extension, any table markup that includes a block element will simply be dropped from the output, replaced with the words “[TABLE]“.

Fortunately I caught that when I spotted a note that had five attachments and no other data. Even more fortunately, only 5 of ~200 notes were affected by this. Using the multiline-tables extension produces notes that need significant cleanup, but the alternative is potentially significant data loss.

(doing it from the CLI would have been a lot more painful if I’d had more attachments, since the CLI has only rudimentary support for that (import directory of MD files, grep for broken attachment links, loop over list of files that should have been attached to each note and add them, cleanup formatting later))

more...

Urakata: 1.4


My Whole New World was dark and fuzzy when I woke up for the first time. I fumbled around until my hands closed on a pair of glasses: big, chunky, thick-lensed things. Oh you are fucking kidding me.

Once I could focus, I saw that there wasn’t going to be any fucking for a long, long time. I was wearing flannel pajamas, the kind with built-in feet. I had a teddy bear. I had nothing going on from the neck down. I was a kid. A little kid. A sit-on-daddy’s-lap-without-making-him-squirm child.

I’d never been a child. My life started the day a Power pointed me at my first dick and showed me the ropes. Professionally, I mean; I learned about bondage on my own. I’d never been anything but an Inspirer Of Men, First Class (Succubus Division). Admittedly, I’d invented the title myself; we were just tools to them, and who names their screwdrivers? Muse was one of the things mortals called us, although they had some funny ideas about how we worked.

I found a light switch and a mirror, and started swearing. 68 inches of prime shaggy-maned redhead was just gone, and I didn’t even have my own face. I was short, skinny, and worst of all, cute. I had curly brown hair just past my shoulders, huge brown eyes, an upturned nose, and murder in my heart. I was six years old.

I was in Hell.

Turning customers into products…


I own exactly one wifi-connected wall plug. It controls the hot-water recirculation pump, so that it doesn’t just run 24x7, and it’s also Alexa-reachable if I want to turn it on mid-day.

This week, when I opened the associated app, it announced that real soon now it will require an account to continue working. Which means that WeMo wants to start collecting data about me to sell.

Which means that I’ll be e-wasting this product the moment that it demands I login for security updates or continued functionality.

Unrelated,

I installed the new version of MalwareBytes on my MacBook Air. It activated a trial of their premier service with real-time protection.

Not only did the palm-rest area of my laptop get quite warm, it caused the pyenv shim command for python to take several seconds to run. Since I use python --version to help set my shell prompt (letting me know if it’s 2, 3, or some virtualenv), this was immediately quite painful.

Suddenly I do not want to become a paying customer…

Pixiv Champloo 13


No-bake cheesecake. 😁

more...

Urakata: 1.3


The Old Man gave me one last job, promising that when it was done, my Graduation would be nothing to fear. A new life, a fresh start, A Whole New World where I wasn’t stuck in a rut, pun intended. I’d still be me, but I’d be free; out of the game, on my own, no obligations to any Powers. I really, really should have gotten the details up front.

I did the job. I very thoroughly inspired an engineer to build a new kind of bridge that would connect two competing civilizations in a way that blah-blah-blah, seriously, who cares? Dull smart guy needed an ego boost and a major push, and nothing builds ego like banging a hottie who’s way out of his league. Pro tip: if you want to make absolutely sure you’re a guy’s type, give him a quick peek when he’s about 11, then come back and nail his 30-year-old-virgin ass to the floor. Never fails.

Like I said, I was made for this job, literally. Head to toe, inside and out, every curve, every gesture, every little freckle, everything went into making me an irresistible, inspiring temptation. I was looking forward to putting it all to good use, post-Graduation.

The son of a bitch gave me a new body.

Dear Synopsys,


It’s been over twenty years since I left the company, but I don’t recall the marketing people being whiny when repeatedly cold-calling (or in this case, emailing) potential customers.

And seriously, if you’re going to contact the wrong guy at a company, don’t include sentences like this in your pitch:

“Are you open for a discussion to learn our innovated technique? It involves instrumentation…”

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