May 2019

Home again

Back from Japan, slowly unpacking. Mentally, physically, and electronically. Pleased to report that this survived the trip; I had to remove her from her very large and well-designed box in order to fit everything into my suitcases, but I managed to protect her from all harm.

For future reference, while flying business class allows you to check 70-pound bags with no fee, at least one of the Japanese inter-city luggage transport services has a hard limit of 25 kilograms per bag, which left us scrambling to redistribute dense items, of which we’d purchased plenty.

Finished watching Irozuku on the flight home. Terrific series, and I’m glad that of all the ways to screw up the ending, they chose “none of the above”.

Now, time for more Felbinac!

Random phone pics

My brain’s not up to sorting through all our pictures yet, so here’s a quick assortment of things I snapped with my phone.

Pixiv artist Taiki

Taiki only posted a handful of images on Pixiv, and stopped several years ago. Looks like he’s only active on twitter these days.

Give me a sign!

…or just remove both signs, and we can share the bath…


First item in the release notes for Ghostscript 9.27:

Version 9.27 (2019-04-04)

IMPORTANT: It is our intention, within the next 12 months (ideally sooner, in time for the next release) to make SAFER the default mode of operation.

I only suggested this 27 freaking years ago.

More iphone pics

Here’s a few from my sister, who made more use of her phone camera than I did. She had my old Canon G15 as well, but is used to using her iPhone 8, particularly the portrait mode. I think she took about the same number of pictures with each, where I split my time between the Sony A6500 and a new Sony WX800 compact superzoom (yes, I’m weak…).

I think if we hadn’t both been battling bad knees, I’d have spent a lot more time shooting with the A6500, and even used the longer lens that I brought along, but instead I left it in the hotel unless we were going someplace special (like Ise and Himeji), and just carried the WX800. Not the same quality or ISO range, but tiny and lightweight, with a surprisingly useful 30x optical zoom range.

(yes, my next doctor visit is going to be all about the knees)

Unrelated, while I’ve been holding off on upgrading my iPhone 6 Plus, Apple’s kind of forcing the issue by increasing the memory footprint of all their frameworks. Pretty much every time an app gets upgraded, it gets piggier, to the point that there’s not enough memory to leave something running in the background, like the Sony app that lets my cameras pull GPS from the phone. Whenever I switched between apps, they had to relaunch, which wasted a lot of time.

I’m not a fan of the notched buttonless overpriced face-scanning heavy new models with battery life no better than my 6 Plus, but switching to Android isn’t really an option if you’re tied into the Apple ecosystem (even if you avoid their shitcloud as much as possible).


Morning Kittens

Classic Morning Musume clip that I had a sudden urge to find again…

Hanaroku teppanyaki restaurant

Apple Maps is still pretty awful in Japan, so we never used it, but Google Maps had a habit of losing track of our position and facing just often enough to repeatedly send us a few blocks out of our way. It was also pretty terrible at recommending nearby restaurants. But it got it right once, and that’s what matters.

In Kyoto, in the basement of the Hotel Kanra, lies the home of what may be the finest meal we’ve ever eaten, Hanaroku. The menu is short, with only three courses and a handful of a la carte options, plus a separate daily special. The drinks menu is more elaborate, but both are seasonal, with the saké flights paired to the food. Preparation and presentation are exquisite, and the staff is quite friendly.

Not only will we go again, we did. We couldn’t stop thinking about the wagyu, so we went back another night and just ordered it a la carte with a full bottle of Kagura.

PDF::Cairo lives!

After a few more epicycles (and a two-week vacation in Japan), I have about 95% compatibility with PDF::API2::Lite, covering pretty much everything I’ve used in my scripts over the years, so that they work with a two-line change. Along the way, I learned just enough about fontconfig to coax it into finding my real Adobe core fonts based on their legacy PostScript names; I’ll need to figure out the substitution crap for any system that only has free equivalents installed, of course, but that’s for when I clean it up and add a test suite before releasing to the world.

As a bonus, my most recent epicycle was calculating the exact values of ascender, descender, and xheight for non-exotic fonts, which is more useful than the font designer’s opinion when you want to precisely position the top edge of a string (as in, say, a calendar; I was able to completely rip out the unreliable hackwork from the PDF::API2::Lite version).

Currently missing: skew transformations (matrix math), elliptical arcs (matrix math), full Cairo path support (new feature), Pango layouts (major new feature), rendering JPG/PNG/GIF/etc (under-documented API calls…), and a PDF::API2 compatibility method for cjkfont (requires messy fc-match tinkering, and I’ve never used it…).

And I just thought of another epicycle! A lot of my grid-based PDF scripts make use of a little box-manipulation library I wrote years ago, that does things like ISO folds, centering, cropping, etc, and recently I started going over the API to clean it up and improve its functionality. Then I realized: I only use this for PDFs, and I’ve already copied the big paper-size library into PDF::Cairo, so why not just make it PDF::Cairo::Box? One-stop shopping, and it will make my calendar generator even cleaner!

5/10 Update

Basic test/install done for the packages; need a lot more test code before I can release. Revised Box module really cleans up the calendar script. Played with Pango just enough to learn that it’s fragile and quirky and expensive to load, but has potential when you need real text layout; couldn’t get vertical text out of it, though, and the feature request for furigana support has been open since 2005.

If I have any working brain cells tonight, I think I’ll work on tests for the matrix transforms to get skews and arcs working correctly. Maybe take a first crack at image methods.


Well, that wasn’t so bad. Got skew transforms to work, and got PNG images to load, scale, and display correctly. I may punt and use ImageMagick’s convert CLI utility to handle other image formats. There is a Perl ImageMagick library, but I’ve never been able to get it to work correctly with a perlbrew-built Perl on a Mac, and just calling convert is easier.

5/12 Update

The last item missing for full PDF::API2::Lite compatibility is the stripped-down version of the textstart/textend functionality that I’ve never used. Adding the full API2 version of this would be more complicated and less useful than integrating Pango layouts, despite the latter’s significant startup time and entertaining quirks (such as Pango’s two completely different integer units, both of which are referred to as “Pango units” in the documentation: 1/1024pt for general positioning, 1/10000em for vertical positioning of glyphs).

As a bonus, because PDF::API2 is mostly pure-Perl, PDF::Cairo is about five times faster, similar to the speedup I got the time I converted one of my scripts to use the abandoned Haru library.


I feel sorry for fan artists who want to draw Grea but can’t figure out how to attach dat phat tail, particularly when making NSFW images (which is why there are so few in this set…).


Filevault, unvaulted

Even though I ended up having to work while in Japan, I didn’t pack my work laptop, a 15-inch MacBook Pro with all kinds of corporate IP goodness on it. I just took my little 12-inch MacBook, with all kinds of personal goodness on it. So I backed it up three times, encrypted the SSD with Filevault, and took along an encrypted backup drive that I stored in a separate bag.

In theory, between modern CPUs and modern SSDs, the penalty for full-disk encryption should be pretty small. This is sadly untrue for the 12-inch MacBook, even with a Core i7; I could cope with the N% I/O slowdown, but it rippled through the system, causing other things to either slow down or get a touch flaky. The most visible culprit was kernel_task chewing up a lot of CPU, which generally indicates thermal throttling, but the temperature sensors reported all-is-well, so I’m guessing something about Filevault was setting it off. APFS was also getting really sluggish after a few days, requiring reboots.

Now that I’m safely home and more or less caught up on life, I made three backups and turned Filevault off. Currently the system’s grinding away rebuilding the Spotlight indexes (cache-like stuff is skipped in the encryption/decryption process), and kernel_task is nowhere in sight.

Dear Amazon,

There is no way to report a delivery failure on your web site. Your so-called help page, Find a missing package that shows as delivered basically says “look around, maybe it will turn up”, and “wait 36 hours, just in case”.

What it does not say is what to do after 36 hours.

I had three packages scheduled for delivery on Sunday. Two of them were oversized, and were brought to my front door, at precisely the time recorded on the USPS tracking page. The third, purportedly delivered at the same time into the locked mailbox across the street, wasn’t there.

The USPS web site has a form for reporting missing packages, but it only promises that they’ll respond to the ticket in a few days. And, sure enough, all I got was a voicemail saying “hey, our driver scanned it as delivered into your mailbox, so if you don’t see it, tell Amazon it was lost”. He left a callback number, but didn’t answer, and his voicemail is full. No surprise there.

Going back to the Amazon help page, it turns out that if you scroll down from the useless help message and redundant video, there’s a ‘Contact Us’ button that opens a chat session with someone in India. He didn’t seem surprised to learn that USPS lost a package, refunded it, and threw in an extra $5 for the inconvenience.

I wouldn’t be surprised to learn that it ended up in someone else’s mailbox, but because people do things like go to work, I can’t just go door-to-door asking about it and expect results. Nothing expensive or time-critical, just Yet Another Reason I wish Amazon didn’t use USPS.


In the middle of my vacation, this song got stuck in my head somehow. I’m pretty sure it wasn’t the usual problem of a muzak version playing somewhere, although I suppose it could have been a reaction to two completely different retail chains abusing “The Battle Hymn of the Republic” (Yodobashi Camera, which I already knew about, and Daikoku Drug Store, which I discovered while stocking up on Felbinac).

Someone should really remake this with vocaloids…


This is the crest of my samurai clan.


The cats at Cat Café Nekokaigi are a bit less organized about their cuddling, but they provided a pleasant, calming experience during our vacation, and we learned about the seductive powers of bonito flakes. Pics later.

OMC: Yūno Ohara

I suspect Yūno Ohara 大原 優乃 (twitter, blog) has gone partially blind from the number of camera flashes aimed her way since she turned eighteen. Many of her fans are probably going blind, too…

Note that I finally got around to updating my scripts to handle resizing landscape-orientation pics automatically, so I’ll be including more of them in future 2D and 3D cheesecake sets.


Pixiv: GranBlue Fantasy

It hasn’t yet reached the scale of Kancolle, the holy grail of shipgirls, but the mobile game and money-sink GranBlue Fantasy is a quite healthy source of cheesecake. And the anime spinoff is on Crunchyroll and Amazon Prime, with a second season in the works.


Third Zenni specs

After a decent experience with buying glasses from Zenni, I decided to pick up a pair of dedicated computer glasses, with blue-blocking lenses and a prescription optimized for “arm’s length”.

I picked a pair of $7 frames, blue-blocking lenses, and their mid-range coating, and adjusted my distance prescription by rounding up the NV-ADD to .0/.5 and adding half of that to the SPH value. With shipping, they came to $45, and arrived in a week.

They work great.

Pixiv artist ‘mocha’

Mocha is a relatively prolific creator of detailed non-cheesecake scenes, often set in places that have been abandoned or reclaimed by nature.

But not always…


New mail server…

Delivery is slower than the one with windows, but it’s more secure.

Preliminary release of PDF::Cairo

Here. Needs a full test suite and a bunch of examples before I throw it up on Github/CPAN, but I’m pretty happy with the functionality.

I think if I were exploring another scripting language, I’d look for Cairo and FreeType support, and then I’d port this module over. A bit of work up front, but less hassle than dealing with the quirks and limitations of another implementation.

Stripped of comments and documentation, it’s just about 1,500 lines of code, half of which is in the main PDF::Cairo package. Quite a bit of it is PDF::API2 compatibility, which I could jettison when porting to another language, so it would be pretty quick.

Usage is quite straightforward:

use PDF::Cairo qw(cm);
$pdf = PDF::Cairo->new(
    file => "output.pdf",
    paper => "a4",
    landscape => 1,
$font = $pdf->loadfont('Times-Bold');
$pdf->move(cm(2), cm(4));
$pdf->setfont($font, 32);
$image = $pdf->loadimage("logo.png");
$pdf->showimage($image, cm(5), cm(5),
    scale => 0.5, rotate => 45);

Honestly, the thing that took the longest was dredging up the schoolboy trig to get it to rotate images from the lower-left corner instead of the upper-left. Cairo’s inverted coordinate system makes sense on-screen, not so much in print.

I was very selective about what I pulled in from Pango. It’s a peculiar library that simultaneously gives you more control over text layout while removing control over font selection. You can precisely position each glyph in a Unicode string, but have no idea what it will look like on the page. Some of this it inherits from Fontconfig, which is a giant hairy mess of XML configuration files, but they’ve layered their own clunky parser on top of that.

For instance, on my Mac, I have four styles of the typeface family Hoefler Text installed: Regular, Italic, Black, and Black Italic. Using the Fontconfig tool fc-match, I can select them with the string ‘Hoefler Text’ optionally followed by ‘:bold’, ‘:italic’, or ‘:bold:italic’. Using Pango’s pango-list tool, I discover that the correct incantation there is to request ‘Hoefler Text Small-Caps’, with the words ‘Bold’ and ‘Italic’ optionally added in that order after ‘Text’.

Leave out the ‘Small-Caps’, and I get Verdana (well, technically I get Hoefler Text Ornaments, which then falls back to Verdana because that font doesn’t actually have any alphanumeric characters in it). Use it, and I get the right font, but without small caps. Try to request real small caps (which it has), using the variant='smallcaps' attribute, and I still don’t get small caps (despite the documentation, I’m not sure that works at all). I have no idea how to fix this, or if it’s even possible.

I made the Pango support optional, because it takes a full two seconds to initialize the first layout on my laptop. By comparison, my calendar generator takes less than a second to create a 10-year, 59-page calendar.

Obnoxious Bug!

Unfortunately, while I was porting one of my other old scripts to use as an example, libfreetype segfaulted in FT_Set_Transform. Didn’t matter what font I loaded, there was just something about that script that triggered it.

After some painstaking debugging, it looks like I have two workarounds. First, render the text as a Pango layout, which avoids calling Freetype directly from Cairo. Second, use the create_for_stream() method to initialize the PDF surface and explicitly save the file at the end, rather than use the standard create() method that takes a file name up front and auto-saves when the script exits. That last bit seems to be where the bug is being triggered.

Ironically, this is how my PDF::API2 compatibility methods work, so a direct port of the old script works fine, and it doesn’t crash until I try to update it to use what seemed to be the recommended method (pun intended).

For now, I’ve commented out the use of create(), and added an explicit write() method to dump the PDF file to disk. I’ll test again when Homebrew catches up to the current Cairo release.

5/17 Update

I’ve refreshed the tarball about a dozen times now, as I add examples and come across bugs and little niggling issues in the APIs. I’ve pretty much rewritten half of the Box module as I’ve started using it more aggressively in simplifying the calculations in my examples.

I’d say that I’m just about ready to stick a fork in it, write the test cases, and release, but then I thought of another epicycle: rendering SVG files as vectors. Currently, the only way to import existing graphical data is as fonts with FreeType or bitmapped images with Imagemagick’s convert tool.

I’ve used the custom font trick before to load illustrations into a program that didn’t support them, but I’d rather import SVG directly. Because ImageMagick supports rasterizing vector formats, I can already place an SVG into a PDF, but only as a bitmap.

But it turns out that librsvg is already designed to do exactly what I want: render an SVG into a Cairo context. There’s just not a maintained Perl module that links to it. I can’t say that I’ve always wanted to figure out how to write XS glue, but since my needs are very simple, I think I can dodge that bullet and create a simple API with SWIG.

Looking at the RSVG API, I think all I really need to do is:

  1. Pass a filename to rsvg_handle_new_from_file(), save the result.

  2. Pass that to rsvg_handle_render_cairo() along with a Cairo handle.

  3. Profit!

I’m not even sure I need rsvg_handle_free(); the memory should be reclaimed when the Perl variables go out of scope, or worst case, when the script exits.

Never mind…

It looks like SWIG is not going to be easier than XS. Oh, well.

3D cheesecake 15

At this rate, I’ll never run out of cheesecake to post. Can’t say that’s a bad thing. Names when I get a chance.


Girls’ Frontline

Like girls with guns? How about robot gun-girls? Trigger warnings galore!


Thanko: Blue Light Special

Get two, so you can cosplay Doc Ock in bed:

Pixiv: Work illustrations

[Back over the net to you, Brickmuppet!]

Mixed in with the fan artists at Pixiv are a lot of pros, posting excerpts from the various games, manga, and light novels they do work for. Browsing the 仕事絵 tag is a good way to find quality cheesecake.


APFS considered harmful…

…or at least “not ready for prime time”.

It seems I wasn’t quite correct in my assessment of why my MacBook was sluggish. Full-disk encryption was indeed having a visible effect on performance, but even after turning it back off, I’ve still been seeing some pretty awful performance… after a few days of uptime.

There are two primary symptoms, both connected to filesystem performance: first, Time Machine backups take progressively longer each time (no matter how much data is being backed up), until it starts reporting that a typical 300MB backup will take more than an hour; and second, image-heavy web sites start loading very slowly, with JPEGs showing up ‘blocky’ while they’re rendering. If I don’t reboot when I detect these two issues (usually after about four days of uptime), then I’ll start having difficulty mounting and unmounting external devices and network volumes, and Disk Utility will show a SPoD. I’ve had to disable automatic backups, because I can’t put it to sleep until they finish (Time Machine will cheerfully corrupt your backup history if you disconnect from the file server while it’s running).

My recent vacation makes it difficult to be sure, since I turned the MacBook off after every use, instead of my usual “leave it up until it crashes”, but I think this is specific to the OS 10.14.4 release.

With all the problems they’re having with hardware and software, it seems the old cliché about “there’s no I in TEAM” could be rewritten as “there’s no QA in APPLE”.

Related, when I do reboot, the first thing I do is open top in a Terminal window and wait a minute or two until the load drops from ~50 to under 5; then I kick off a backup and start working.


After a lot more testing, it seems that APFS is only responsible for about a third of the slowdown. The rest is coming from the TCP stack. Rebooting is still the only fix; I’ve tried switching between wired and wireless, changing out the USB-C ethernet adapter (I have like five brands of them, between home and office), manually resetting the interfaces, etc, etc.

If I work completely offline, local I/O still slows down over a few days, but if I’m online, network I/O gets worse faster. Still a problem after the 10.14.5 update, and I’m thinking it’s specific to the 12-inch MacBook hardware, since I don’t see it at all on the 15-inch MacBook Pro that’s usually on the other side of the kitchen table.

A Thousand Words…

Naughty words, that is.

PDF::Cairo example output

I’ve been adding example code to PDF::Cairo. Here’s the output from what I’ve got so far:

  • 2019 Progressive Calendar, a much-cleaner version of the script I wrote in March.

  • Box-slicing test, not actually useful for anything.

  • Image-loading test, ditto. (new! improved! fixed translate/rotate/scale order to get rid of skew)

  • Inkle drafting grid, planning tool for Inkle weaving. Reimplemented from here, using my Box library and polygons rather than my hand-tuned, impossible-to-debug component method. About 12x larger output, but Cairo isn’t a PDF library, it’s a library that can output PDF, so you don’t get as close to the metal.

  • Isometric drawing pad, mixes my Box library with a bit of trig to clean up the grid layout.

  • Kanji practice sheet, currently blank; I plan to add a second example that fills it in with selected characters in a pen font, grayed-out so you can draw on top of them. It’ll be much cleaner than the version I wrote ~14 years ago.

  • Sample Pango layout, showing the use of its markup. Now includes glyph outline support.

  • Japanese report paper.

  • Kyokuto-ish notepad sheets.

  • NEW! Glyph outlines, including manually processing the drawing operators.

  • New! Traveller hex grid. Unlike my 15-year-old sec2pdf script, which I threw together over a weekend when I discovered how terrible the existing Traveller mapping tools were, this one actually centers the grid correctly on the page. (seriously, before sec2pdf, the way to create a PDF Traveller map was to run a DOS program that spat out an import script for an obscure 2D free CAD program, then let it run for 10-20 minutes; these days it’s a lot better, although the border definition method I came up with is still in use)

Does. Not. Work.

Not only is it rather difficult to hold a katana in this position, what would you actually do with it from there? You can’t swing, you can’t block, you can’t thrust, and if you hold the position for very long, you’ll get a cramp. About the best outcome you can hope for is shaving your own cheekbones.

Pixiv: Yuri

The 百合 tag at Pixiv starts at “two girls in picture”, passes through “friendship” and “obvious attraction” on the way to “making out”, and ends up at “hardcore lesbian pr0n”. That last one is generally not canon for the characters depicted, even the ones also tagged 百合夫婦, “yuri married couple”.


Dear Waze,

One of these things is not like the others…

At least this one is obviously wrong, unlike the time I asked it to take me to the Embassy Suites SFO, and eventually discovered that there are two of them, about ten minutes apart…

Kitten Pile!

Okay, these kittens are technically adults, and one of them’s almost 30, but when you’ve got a few decades on them…




No relation to him, this Yanni (王馨瑶) is a popular model and actress from Guangdong.

And a real cutie, yep.



Almost to the weekend…

This is how I felt when we were going up inside Himeji Castle. Except there were no signs saying how many flights of stairs were left…

裏口 = rear entrance
ガンバレ!! = GO FOR IT!!
もう一息 = just a little more effort

Epicycles: poster-making

So, as I prepare to inflict PDF::Cairo on the world, I’ve been sensibilizing the documentation and adding example code. My latest effort was dusting off my 15-year-old Traveller sector map generator and cleaning up the hex-grid calculations to use my Box library and the regular-polygon method I recently added. Works great.

Then I had an idea for Yet Another Epicycle: tiling a large image across multiple pages. I did this by hand in the original sec2pdf script, splitting sector maps across 4 or 16 pages, but it would be cool to render the entire sector once and then simply ‘cut out’ the pieces I need for each page. It would also get rid of a lot of special-case code for handling things that are partially outside of the current page.

I tried it out by hand, and it worked great. I drew a big box on a recording surface that was 17x22, and replayed it four times onto 8.5x11 pages with different offsets. Not lightning fast, since you end up rendering the entire drawing N+1 times, but it worked.

For that very simple example.

Unfortunately, it looks like there’s internal state that doesn’t get reset completely, so that when I integrated it into the module and told it to make a really big hex grid, only the first replay was 100% successful. The rest were incomplete (one row/column of hexes, with no text labels). It didn’t matter what order I replayed them in.

Cairo apparently has scripting surfaces and proxy surfaces in recent versions, but no one has updated the Perl module to expose those, and I’m not sure they’d help (scripting surfaces are basically a debugging tool that writes to disk and gets replayed with a standalone CLI tool).

I still want to do it, so I may simply add a simple-minded recording of my API calls and do a high-level replay. Even more overhead than using a recording surface (especially for things like loading fonts and images), but then I’ll know it can be replayed more than once.

Meanwhile, the recording()/replay() methods work at least once, so I’m leaving them in for now.


Wow, that was an easy fix. After walking away for a few hours, I went back and added a single cairo_surface_flush() right before each set_source_surface() call. Renders perfectly, as many times as I want. See?; I just need to tweak the clipping regions a bit, to capture the overlap between pages.

Performance is actually pretty good, now that I have something to measure: it took only 28% longer to generate the drawing and replay it four times on different pages. Output size was 146% larger than generating the same drawing on a single large sheet, but that’s a small price to pay for the convenience.

If I were really going to revive sec2pdf (and I might, but not this weekend!), what I’d do to get the most efficient output is use a recording to draw all of the sector-wide elements (regional borders, X-boat routes, etc) and replay them onto the individual pages, after drawing each page’s grid but before adding text and system data. That would significantly reduce the amount of wasted drawing outside each page’s boundaries, and only repeat the elements that might appear on multiple pages.

There’s an app for that…

Man, Obama must be kicking himself for not having thought of this one

PDF::Cairo unleashed!

On Github now, and up for review on PrePAN.

I made sure to install it and run the examples at least once on a different OS. 😁


Looks like if I mix Image::CairoSVG with the Recording surface support I added recently, I can get most simple SVG files to render correctly. It’s pretty simple-minded, not supporting text or filters, but I can live with that. And there’s not much to it, so I could enhance it and send a pull request.

Thanko: “what a loser!”

One thing that struck me as I browsed the many goofy products that Thanko sells is the hint of sneering contempt in a lot of their product photography:

For instance, The Lonely Guy Wine Chiller:

And the Fat Slob Food Warmer:

Compare and contrast to The Dorkiest Umbrella Ever, where the guy can’t help but look ridiculous but is out doing something, and the girl actually looks kinda cute in it:

Now, it’s possible I’m reading too much into it. The “fat slob” model shows up in a lot of product photos and videos, and seems to be comfortable with how he’s used, but marketing pictures tell a story, and these stories show how the company views the customer. Add a girl to the wine-chiller photo, and Our Hero would be having a successful date; add some more guys to the food-warmer pic and put a nice spread of finger foods on it, and Our Hero would be hosting a Superbowl party.

3D cheesecake 16

Maybe I’ll catch up on names on Memorial Day. Non-traditional, I know, but…


Dear Perl maintainers,

Many years ago, I took the advice of the perlunicode manpage and defined a custom regular-expression class for identifying strings that only have kana and not kanji with the \p{...} construct:

sub InKana {
	return <<END;

This (and all the other methods in the docs) stopped working somewhere between 5.20.2 and 5.28.0, and there is not even the slightest hint anywhere as to why.

Why? Because there is now a predefined InKana class, not equivalent to the above definition, and the above code is simply ignored. You have to change the name to something, anything else; I chose InHirakata, and my code started working again.

And that’s an hour of my life I want back.

Bug filed; RT #134146.


Tomomi Morisaki steps up with a simple, clean approach to cosplaying Reiwa-chan:


Pixiv: Belfast (Azur Lane)

If I had to pick a favorite shipgirl, and perhaps I just did, it would be Belfast from Azur Lane, a light cruiser with big guns. And a maid costume.

And she’s almost never, ever safe for work.


“No, no, you’re supposed to hit Xenia!”

Got texts this morning from hometown family members, reporting all-is-well from the Dayton-area ‘tornado outbreak’.

“Hero Wanted…”

”…apply within.”

A Certain Scientific Pokemon…

Thanko: Electric Snuggie

The penguin is in the picture so you know what it looks like when you’re waddling around the house in your wearable kotatsu. This is one of the rare Thanko products that actually looks like a good idea, if it works (and doesn’t, y’know, catch on fire, as many cheap electric blankets are prone to doing these days).

The Rise of the Udon Hero

Clearly Nissin is missing the opportunity for a new round of tanuki soba commercials…

There are actually more of these. With a final twist.


I spoke too soon. In the words of Londo Mollari, “there are more of you!”.

PDF::Cairo progress

No complaints on PrePAN, and I’ve done a lot of cleanup, bug-fixing, and documentation, along with creating an ugly-but-useful new example. Testing the various features together has shaken out several bugs and identified some missing API features that I’ve added.

I figure I’ll poke at it some more over the weekend, then create a 1.02 tarball and officially release it on CPAN.

Biden’s new campaign slogan…

How else would you respond to accusations of inappropriate treatment of young girls?

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