Herewith the 3000-year history of alternative medicine in 30 seconds:

1000 BCE: “Eat this root.”

100 CE: “That root’s heathen, don’t eat it. Say this prayer.”

1800 CE: “That prayer is superstition, don’t say it. Drink this snake-oil.”

1900 CE: “That snake-oil is phony, don’t drink it. Take this pill.”

2002 CE: “That pill is artificial, don’t take it. Eat this root.”

— from the always-useful randi.org

A Kitten For Lawyer


Red Cat Ramen, episode 11

Kittens! First we flash back to the secret origin of our leader cats, and then Human-chan finds a stray and brings it to the experts, who fill her head with useful information. She won’t need it for long, though, because the kitten quickly finds a person. Then there’s a crisis of confidence as Our Noodle Tiger can’t seem to produce the new style adequately, until the boss walks by and spots her never-sharpened noodle cleaver.

Verdict: one more and we’re done. I’m going to miss it.

Cosplay Harem, episode 11

This week, The Big Payoff. Our Cuddly Noob and Our Reborn Pro share the crowd and A Good Time Was Had By All… until Nagomi got a good look at Our Suspiciously Similar Senpai. Now they’re rivals.

Our Hot Teacher gets paid off as well, first with a gut punch from Our Busty-Besty Elf Gal-Pal, and then with a look into just how oblivious Our Cosplay Couple is.

Verdict: At least three genuine LoL moments. Worth it.

Dungeon People, episode 10

Our Dungeon Wallflower Clay has no idea what to do on her day off, so she resumes her search for Her Missing Daddy by eavesdropping in the monster break room until she hears the voice that had earlier referred to her as “the wind-slicer’s daughter”. The new information she obtains muddies the waters, leaving her no closer to finding out what happened to him.

Also, goblins grow like weeds.

Dungeon Chibis, fin

As we wrap up, A Moment Of Clarity leads Our Chastened Hero to visit Crush-chan in the middle of the night to kneel before her pajama-clad cuteness and… apologize for being a thoughtless dick about the whole dungeon thing. As a bonus, he finally calls her by her first name, without even a -chan.

Anyway, after eight minutes of that, it’s back to the dungeon, and back to what Kaito finally realizes he should have been doing all along: hunting rare slimes on the noob levels, like the ones that got him the chibis in the first place. And after a montage of slaughter, they steal Our Dying Princess out of the hospital and…

By The Power Of Chibi, You Shall Be (Partially) Healed!

Verdict: fresh off their victory, Kaito finally tries to confess to Crush-chan, only to be cock-blocked by Her Hot Mom; note the train suggestively going into the station as they part. They kinda include The Quest For Daddy in the final scene, as a hint at their shared long-term goal.

(It’s been bothering me all season: why does Kaito have a safe next to his bed?)

Earth: Final Bye-Bye season 2?

Announced. I’m kind-of curious what they’ll put in the recap episode, and if it will make any sense at all.

There’s basically no fan-art of this one, so here’s some from the very tiny selection of Tama pics:

Okay, that’s a little over the top…

Not only do the weekly pages in Jibun Techō planners include phase of the moon, they color-code the hours by the approximate time of sunrise and sunset throughout the year. If you’re in Tokyo, anyway.

Combined with the weather, mood, and meals icons scattered across the columns, I think it makes the page much too busy.

(do they also sell night-planners for vampires, with the daylight hours colored red?)

Mid-week miscellany


Blogging’s going to be light-to-nonexistent next week, for business reasons.

Labor of Love?

I did not have a brand-new Negima! online RPG with microtransactions on my Bingo card. It doesn’t sound like a gotta-poké-em-all game…

Core competencies!

There are days when it’s quite clear that the people pasting English onto product pictures at Amazon have no idea what the words mean.

Anime adaptations we need…

…based on how this season has gone: Elf With Bikini And Machine Gun.

(from the author of the novels Cat Planet Cuties was based on)

If you mindlessly smash clay pots to music…

…is that Terracotta In A Fugue, To D Minor?

(…or are you just in a Zelda game?)

“Bird, go!”


Dungeon Chibis, episode 11

Famous. Last. Words. Our Hero And His Adventure Gals (Minus One) plunge deeper into the dungeon in search of the rumored elixir, but he overdoes it, and exhaustion and desperation lead to poor decision-making.

Pro tip: when even your semi-slave chibis tell you to take the day off, the correct response is not “we’ll just check out the next floor real quick”. Getting gang-banged-up by a stampede of wild porkers leaves him in Darwin’s Waiting Room, and if Our Chibi Heroines hadn’t leveled up and gobbled a bunch of crystals, he’d have pulled his last train. Even then, his survival depends on mouth-to-mouth delivery of healing potions, which Our Dismayed Slightly-Gay Chibi Devil Shota is not allowed to participate in. Of course it turns into a kissing competition, which Our Popular Hero’s in no condition to appreciate or be squicked out about.

Verdict: one more week to save the princess, and they really keep making a fuss about Crush-chan’s Missing Daddy…

Pom-Pom Girls, episode 10

What if they gave a beach episode and nobody dressed for the occasion? Sure, they were there to cheer for a beach volleyball team, but we’re not watching this for the NPCs. Ditto for the advancing drama involving characters who’ve basically shown up twice all season.

Verdict: they didn’t put in the work to make me care about NPC Mean Girl’s confession or penance. Besides, whatever’s gone wrong, it’ll get fixed next episode; that’s just how they roll.

Fun with packages

That Amazon package that was delayed six days by UPS, then retroactively delivered to someone’s loading dock by FedEx? Showed up Saturday morning with the original UPS sticker, but Amazon tracking’s still loading data from another universe. Explains a lot about their logistics problems, really.

This is why we can’t have nice things…

I was tinkering with my PDF::Cairo continuous-calendar script with an eye to porting it to Python to use my updated box/paper libraries and Reportlab (even though that’s a regression for font support), so I tested out various options, and none of the Japanese fonts worked.

They were fine a few days ago, and “nothing’s changed”… except that Homebrew upgraded Cairo from 1.18.0 to 1.18.2, and the PDF file size dropped from ~14K to ~4K. Which means that CJK font embedding broke. This is probably the fault of the person who updated the Homebrew recipe without reading the updated dependencies, but I reverted to 1.18.0 (which is now quite annoying to do) and pinned it there for now.

Wait, what was I doing again?

By the way, this is a cool little JavaScript app that puts a dynamic continuous calendar in your browser. It’s not really useful, since it stores your annotations in browser local storage, but it’s fast and stable.

And the reason I was stealing calendar code…

…was to make these: Jibun Techō B6 Slim monthly and project pages.

Because my shiny new Japanese day-planner doesn’t start until November, so I cloned the design with PDF::Cairo and made pages for September and October. I haven’t made the weekly page layout yet, because it’s less useful to me; outside of work I don’t have a lot of appointments, and at work it’s all in Outlook.

The basic idea is that there are three separate booklets: Idea, which is just graph paper; Diary, which you replace every year; and Life, which is filled with hopes and dreams and stories and family and pets and a whole bunch of other shit I’d never use. I’m going to replace it with another graph-paper booklet.

I’m actually surprised that they release the first-time-customer kit in August, but make you wait until November to start using it. I can understand that for recurring customers, but why not just print a few extra pages that can be manually slipped into place? So I did it myself; the paper’s not as good, but the layout matches.

(to no great surprise, Utsutsu-chan is by far the most popular character for fan-art; sorry, Hajime)

Shaved idols


Red Cat Ramen, episode 10

There’s hints of a very slow-burn romance between Human-chan and Our Allergic Handyman, but that’s not going to go anywhere this season. Instead, we get a look into the skritchable underbelly of the idol industry, as Waitress Kitty’s deep dark secret is finally revealed. Extra credit for making the plastic-surgery victim look just wrong.

(this is not her secret…)

Cosplay Harem, episode 10

I like Nagomi’s instincts. When faced with a loss of audience to Her One True Rival, she immediately reaches for a powerful weapon: the zipper on her skirt. Despite the bountiful cheesecake on display, most of the battle is actually in their heads, with both she and Our Hot Teacher reviewing their shared history and rediscovering The Joy Of (Busty) Cosplay. The whiplash of being faced with two goddesses holds the crowd long enough for Our Cuddly Noob to get fully dressed and make her (busty) debut, as Teacher rushes to get back into her civvies so she can watch. A brief reaction shot suggests that she’s going to get cornered by her former partner, Our Helpful (busty) Elf Maiden, for showing up out of nowhere like that.

Verdict: good clean fun, and hopefully now we can work the (not-busty) tsuntail back into the story.

Dungeon People, episode 9

It’s cosplay week in the dungeon, as Our Dungeon Mistress renegotiates her contract with the kingdom and convinces Our Dress-Up Darling Clay to wear a maid costume. Not having much non-dungeon life experience, she thoroughly misunderstands the king’s reaction to the sight of a strong cute maid.

Verdict: they’re really enjoying the just-missed-it fan-service dodges. I’d be annoyed if it weren’t otherwise fun to watch.

Dear Amazon,

First you told me that my guaranteed-Friday package would not arrive until the 12th, and was “delayed in transit” (somewhere; it had not yet been handed off to a non-Amazon carrier). Then you rewrote history and declared that it was “left on the dock” at 9:30 AM and signed for by “L. Keil”. Two claims that come as quite a surprise to me, since I have neither a dock nor a Keil.

The original Friday notice had a UPS tracking ID, but the replacement timeline has it delivered by FedEx. What will reality be tomorrow?

Pr0n and Virtue (signals)


“My AIs are up here!”

WIRED has the vapors over third-party auth services like Google, Apple, Patreon, X, Line, etc, being used to… authenticate to web sites; specifically, the sort that paste heads onto naked bodies. I’m sure they tried to blame Elon Musk, but reluctantly had to admit that X’s auth wasn’t the only one being used.

So, nothing to see here. Literally; it’s like the folks at WIRED and Ars have never heard the phrase “pics or it didn’t happen”. 😁

I’m sure there’s a ToS issue in there somewhere, but they seem to be particularly upset at the idea of teenage boys using the sites to generate imaginary nudes of their female classmates, demonstrating that they’ve never met a teenage boy.

“What’s holding back America’s move to electric cars?”

asks Slashdot, quoting The Verge’s transportation editor.

Answer: electric cars.

See also “winter”, “spontaneous combustion”.

UC2P: the testining

Building a test suite for a PDF generator requires some way of validating what ends up in the binary output file. For PDF::Cairo, I supplied a reference PDF file and used Poppler’s pdftocairo to render to PNG for comparison. Unfortunately, what this really ended up testing was the underlying libraries rather than my code, which is why the CPAN automated tests keep breaking.

For this script, my testing can be limited to determining that known text ends up in the correct region of the page, at the correct size, and it doesn’t have to be precise. It turns out that Poppler’s pdftotext extraction utility has a -tsv option that reports the bounding box of each word on every page, which will suffice.

Once that’s in place, I think I’ve got everything compatible as far back as Python 3.9.x and Reportlab 3.6.x, and for the regular test suite I can just dump the internal state object to compare to a reference version stored in Configparser format.

But I still think I’ll work on page-styling first.

Elixir or Bust!


Dungeon Chibis, episode 10

This week, we get the backstory of Our Junior Adventure Gals, with a dramatic reveal of a typical anime vaguely-described fatal illness where everything looks fine right up to the end. There is no cure, but there are Internet rumors about a Very Rare Dungeon Drop, an elixir that can cure anything, so that’s why they became adventurers. Now the gang has a mission and the clock is ticking, since she’s supposed to be dead by New Years and we got a shot of cute girls wearing Santa suits. Also, we only have two more episodes.

Verdict: will they find it in time, even with Our Hero’s power to stumble over rare drops? Will Crush-chan’s Missing Daddy be involved? Will they do it all next week and spend the last episode on fan-service? Let’s find out!

Pom-Pom Gals, episode 9

As has become typical for this show, last week’s cliffhanger crisis was resolved effortlessly, like cheers in the rain. But first we had to spend most of the episode watching them stumble around sadly, wondering if they’d ever get the band back together.

Verdict: the cuteness of the character designs is really all that’s holding the show together at this point.

In other news,

Cosplay Harem: The Mobile Game launches Tuesday.

In other other news,

Senko-san is also getting a game this week. Pretty sure this one won’t be always-online with micro-transactions. Pretty sure. Okay, mostly sure.

UC2P best intentions…

I tried to see how much work it would be to run the script under older versions of Python. I’ve identified at least three syntax changes and an API change, and the way the Python interpreter works, I can’t be sure those are all the bad spots unless I build a full test suite that exercises all the code. Which is another project epicycle.

Oh, well. Maybe move that idea down the to-do list.

(and have I mentioned just how much I enjoy searching multiple web pages to find clear module explanations and example code? and how much more fun it is when the language and libraries are moving targets with changing APIs?)

The Return Of Queen Lustalotte


Red Cat Ramen, episode 9

Human-chan has broken through the last barrier to full acceptance at the shop: Waitress Kitty not only called her by her first name, but shortened it and added a -chan.

Cosplay Harem, episode 9

I wasn’t sure how they were going to set it up, but I fully expected Our Hot Teacher to end up in her sexy succubus costume this week, and not only does she deliver, she mentors Our Crushed Heroine as both teacher and idol, learning a few things about herself in the process. Meanwhile, Our Goofball Mean-Girl Pro struts her stuff and works the crowd, but it turns out her 2D crush bears a striking resemblance to someone we know…

With the costume and confidence crises resolved, it’s time for Our Heroine to suit up and start the show, but how can they keep the crowd from leaving while she’s changing? Next week, Battle Of The Legendary Cosplay Queens.

Verdict: this is better than it has any right to be. And I’m not just talking about Teacher’s barely-there succubus outfit.

Molesting Magical Girls continues to have a lot of success running promotions at cafés with themed drinks and snacks. I think this show should should do the same, and their first offering should be the Lust-A-Latte, in honor of Our Hot Teacher’s favorite character.

Earth: Final Bye-Bye, episode 8

I’m not sure whether I lost the plot or they did. The lengthy revelation about the local god seemed utterly out of place in the middle of a battle where dozens of spear-carriers have already died and Our Boring-Bath Catgirl was barely rescued in time.

Verdict: this is either a highlight reel from a book that explains everything in immense detail, or a faithful adaptation of a complete clusterfuck.

Dungeon People, episode 8

“Do you have a floor preference?”

"Yeah, I would like a floor."

“No, I mean, what level?”

"Beginner."

(classical reference)

This week, Our Intrepid Explorer is given the chance to design a new version of dungeon level five, which not only exposes her to some practical design issues, but to the secret of why they really lock the door to the boss room. She also learns that spirits do not respect your personal space; in another kind of show, that would have been a major buy-the-bluray scene. If we’re lucky, fan-artists will pick up the ball and run with it.

Verdict: low-key fun, as usual.

(Lily remains my favorite dungeon pick-up)

Wow, that’s actually novel

Typical Nigerian money-scam email, but the person seeking my assistance in “processing” the fund has an Arabic name in the body of the message and a Korean name in the headers (“트라피스트수녀원” = “Trappist Monastery”. It has also been stripped down to the essence of the scam, not bothering to mention the source of the money or even what country the bank is in that’s holding it. I particularly enjoyed this phrasing:

“I am reaching out to you for a sincere collaboration in partnership to actualize this potential.”

Totally legit, I’m telling you.

UC2P progress

I’ve cleaned up the code and documentation, added error-checking in all the useful places, tested a number of edge cases, embedded my font and set up a well-defined font search path, packaged it with Poetry, etc. What I haven’t done yet is implement any page styles other than the old Enscript Gaudy, or support for defining them.

Which isn’t a problem for me, since I’ve been using Gaudy since the Eighties, but the point of making this a real project was to make something useful for people other than just me. 😁

Enscript’s flexible page-layout system was based on template files written in raw PostScript, which doesn’t translate well into PDF, so I need to convert the box-splitting and text layout code into a mini-language that can be loaded from the config file, which is a classic project epicycle. For now, I’ll define a minimal framework for style code and just eval() it; that will let me make progress on supporting multiple styles without taking time out to write a parser.

The second priority on my to-do list is testing the actual version dependencies against what Poetry baked into the install. I think I used some 3.12-specific syntax for f-strings, but if I change those, it should run in a much older version of Python with a much older version of Reportlab. Which would be sociable of me.

Third priority is to flesh out the documentation for the included box-manipulation library, which I ported over from PDF::Cairo; this will be necessary for the box-related operators.

I miss Perl’s in-place POD documentation, which is so much nicer than the Python culture of API dumps that sometimes link to web pages; you can put real documentation into docstrings alongside your code, but for some reason almost nobody does.

(I think it’s the same mindset that led the NetPBM clowns to change --help output to say “go read the manpage, dipshit”, and then make the manpages a deprecated optional install that just contain “go read our website, you troglodyte”)

Umbrella Academy, season 4


TL/DR, in the style of an isekai title: Obviously Cobbled Together From Footage Intended For More Episodes, The Contractual-Obligation Season That Would Have Been Merely Bad Was Reduced To A Steaming Pile Of Crap.

Longer review: the most entertaining characters from the earlier seasons, Klaus, Five, and Dad, are forced to play against their strengths, making room for Diego’s other family’s Indian soap-opera drama and El Page’s increasingly-hard-to-swallow cosplay. Seriously, she’s so focused on “acting like a stereotypical male” that she often forgets to act the character, and she looks and sounds awful; it is distracting in every one of her scenes.

With only six episodes to set up and dispose of an even-bigger-than-ever-before catastrophe, the story is a complete mess. Characters and plot points are placed on the board at random, then removed without any inconvenient “story advancement” or “character growth”. And the ending is a classic down-in-flames.

Verdict: I feel sorry for the actors who tried hard to make it work. Not for the writers or director; someone wrote this self-indulgent garbage, and someone put it on screen. For instance, 90% of the character development for completely-new-characters Gene and Jean is their country dance scene set to Cher’s “Gypsies, Tramps, and Thieves”, and the rest is the fact that their names are Gene and Jean.

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