The problem with telling laid-off journalists to Learn To Code is that $ORANGE_MAN=BAD doesn’t compile.

— J

Pixiv: school swimsuits


I’m always surprised by the prevalence of school swimsuits in anime, mostly because I never knew so many schools had pools. Not that I’m complaining, mind you. Any cake in a cheese, and all that.

more...

Comics, Sans


“Hey kids, comics!”

The complete, official version of Buck Godot: The Gallimaufry is now available for purchase.

Filed a Joplin bug

Leading digits cut off on ordered lists. Kind of annoying, but the root of the problem is that they’re using a very naive webview in all clients that has no padding, so even when things aren’t being cut off, they’re right up against the edge of the window. I’ve been manually starting each note with a DIV that sets:

font-family: monospace; font-size: 17px; line-height: 1.3em; padding-left: 16px

Photo Deathmatch: 81 pics enter, 1 pic leaves

I never made more than a cursory pass over the pictures from our 2019 Japan trip. As we’re absolutely-positively-definitely going in November, I thought now would be a good time to sort through all 1,050 of them.

I decided to be very aggressive about the weeding process, using the more-or-less standard stars/flags/keywords that are supported in Lightroom:

  1. First pass, just take out the trash: reject anything that’s out of focus, severely over/under-exposed, random misclicks, etc. If you stop to think about salvaging it, keep it. (998 left)

  2. Give every remaining picture 4 stars, then set the filters to show only pictures with exactly 4 stars.

  3. Second pass, downrank 2/3 of the pictures to 1 star. Keep going until you hit that number. (330 left)

  4. Go away for an hour/day/week, then downrank 2/3 to 2 stars. (110 left; “I am here”)

  5. Go away for an hour/day/week, then downrank 2/3 to 3 stars. (~36 left)

  6. Go away for an hour/day/week, then uprank 1/3 to 5 stars. (~12 left)

  7. Any pictures that are interesting for other reasons can be flagged or tagged with a keyword at any step, but don’t spend significant time on them. This allows you to quickly handle things that are interesting but not necessarily good.

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

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