April 2017

Caturday Morning Breakfast Serial

It’s been a while since I’ve seen someone use footage from Hyper Police and DearS. The extensive use of AsoIku came as no surprise, of course.

I don’t care for the music, but… catgirls!


Fate/stay butt


Thoroughly Random Blogging

More than usual, I mean. I’ve been playing with the static site generator Hugo as a way to move this blog and its comments out of Movable Type.

After clearing the initial hurdle of incomplete and inconsistent Open Source documentation (pro tip: if a project starts numbering versions from 0.1 instead of 1.0, it’s safe to assume that there’s no tech writer on the team), the next step is adding a theme to render your site. There’s no default theme, and half a dozen different recommended ones of varying complexity and compatibility. Short version: I’m not sure Hugo currently has layout functionality equivalent to Movable Type 2.x from 2003, much less any of the modern tools; it might, it’s just that hard to find out.

There’s some support for basic pagination, something that’s always been missing here (and which is partially responsible for the long delay when adding comments), but the built-in paginator includes a link for every page, which is pretty painful when you have 200+ pages. If I get the time, I’ll have to dust off my Go and send them a patch to make it behave sensibly with large numbers.

Rendering all ~3,800 entries (counting quotes and sidebar microblogs) and ~3,500 comments takes about 12 seconds on my laptop, but that’s still too long for iterative testing, and the OS open-file limit makes it impossible to test with the live-rebuild feature of the built-in web server.

So I wrote a quick Bash script to retrieve N random articles from Wikipedia and format them the way Hugo expects, as Markdown with TOML metadata. Why Bash? Because the official Wikipedia API for efficiently retrieving articles and their metadata using generators and continues is either broken or incomprehensible to me, since I spent two hours at it and got a never-ending list of complete and partial articles. So I just looped over the “https://en.wikipedia.org/wiki/Special:Random” URL and piped the output through Pandoc. Rather than pulling in the real metadata, I just generate dates and categories in Bash. Now I can quickly generate a small site with multiple sections and simple categorization, and it’s trivial to add more features like series, tags, authors, etc. [in fact, I did!]

(relevant only to Hugo users after the jump…)


Cheesecake: hug from behind

This search was a real trip down memory lane, and we even got a sighting of the rare double half-rims:


The Apocralypse

Y2K Apocralypse


We were all-hands-on-deck for Y2K at WebTV, with Operations, devs, and management all waiting for a scramble signal from QA if something went wrong. Since, like most businesses, we’d fixed everything we could think of well in advance, I was hanging out in a conference room with my 4x5 view camera taking pictures of whisky bottles (and a mildly-cute girl from another group who wandered in at some point; portraits only!).

Turned out there was exactly one thing that had been missed: trying to add a credit card that didn’t start being valid until 1/1/2000. This produced a legendary flaming email from Steve Perlman, which was preserved for posterity because it was a reply-all that CC’d the Remedy ticket system.

Pretty accurate, actually...

In common use, “woke” seems to be a term like “trans” that basically means “the opposite of normal”, and has the same virtue-signaling purpose, as most recently demonstrated in this pathetic example of a Stanford application essay.

So it was amusing to see the top definition on Urban Dictionary is:

"A state of perceived intellectual superiority one gains by reading The Huffington Post."

Senate Theme Song

Dear Democrats, you chose poorly.

Gangsta Samurai Girl

Rina Kawaei demonstrates the kenjutsu equivalent of holding your pistol sideways:


Jacking up the license plates...

…and changing the car.

Welcome to the first non-trivial update to this blog since 2003. Things are still in flux, but I’m officially retiring the old co-lo WebEngine server in favor of Amazon EC2. After running continuously for fourteen years, its 500MHz Pentium III (with 256MB of RAM and a giant 80GB disk!) can take a well-deserved rest.

The blog is a complete replacement as well, going from MovableType 2.64 to Hugo 0.19, with ‘responsive’ layout by Bootstrap 3.3.7. A few Perl scripts converted the export format over and cleaned it up. LetsEncrypt allowed me to move everything to SSL, which breaks a few graphics, mostly really old Youtube embeds, but cleanup can be done incrementally as I trip over them.

Comments don’t work right now, because Hugo is a static site generator. I’ve worked out how I want to do it (no, not Disqus), but it might be a week or so before it’s in place. All the old comments are linked correctly, at least.

Do I recommend Hugo? TL/DR: Not today.

Getting out of the co-lo has been on my to-do list for years, but I never got around to it, for two basic reasons:

  1. I was hung up on the idea of upgrading to newer blogging software.

  2. I didn’t feel like running the email server any more, and didn’t like the hosting packages that were compatible with MT and other non-PHP blogging tools.

In the end, I went with G-Suite (“Google Apps for Work”) for $5/month. Unlike the hundreds of vendor-specific email addresses I maintain at jgreely.com, I’ve only ever used one here, and all the other people who used to have accounts moved on during W’s first term.

Next up, working comments!


Actually, next turned out to be getting the top-quote to update randomly. The old method was a cron job that used wget to log into the MT admin page and request an index rebuild, which, given the tiny little CPU, had gotten rather slow over the years, so it only ran every 15 minutes.

The site is now published by running hugo on my laptop and rsyncing the output, it’s not feasible or sensible to update the quotes by rebuilding the entire site. So I wrote a tiny Perl script that regexes the current quotes out of all the top-level pages for the site, shuffles them, and reinserts them into those pages. It takes about half a second.

Since there are ~350 pages, there will be decent variety even if I don’t post for a few days and regenerate the set. If I wanted to get fancy, I could parse the full quotes page and shuffle that into the indexes, guaranteeing a different quote on each page (as long as the number of quotes exceeds the number of pages, which means I can add about 800 blog entries before I need to add more quotes. :-)

Are you advertising or complaining?


Alien Sex Friend

(from the NSFW game HuniePop)

Shamus didn’t precisely recommend HuniePop, but he did say that the Bejeweled-ish gameplay was far superior to the original and most of its clones, and that he felt quite uncomfortable with the dating-sim elements, particularly the “overnight date” where you play a twitch version of the puzzle to “score” with the young ladies. So, to be more precise, he did recommend it, but only to pervs who like anime-style cheesecake and hilarous simulated moaning with their match-3 puzzles.

The gameplay is engaging, and it’s completely free of the fetishes it would have if it were a real Japanese dating sim. Meet girls, impress them with your Mad Match-3 Skilz, admire the naughty pictures they send you, and giggle at the noises the voice actresses make as your score goes up and down in the twitch puzzles. There is an easy-to-apply “adult” patch if you buy it on Steam (create a file with the correct name), but all it does is unlock a few pictures that are more detailed and less appealing.

The art and voice acting are mostly quite pleasant in the dating-sim component, making the girls quite appealing. The unlockable characters are pretty easy to get, and include alien bounty hunter Celeste, catgirl Momo, and love-fairy Kyu. Once you’ve collected the whole set (pokémon joke omitted…), there’s one final secret character, and then an “unlimited” mode.

There are two major drawbacks: it only saves when you leave an area (so you can’t upgrade your stats and buy/sell things, then exit), and the Mac version stores your save file in the cache folder, which can get wiped if you upgrade the OS. This is apparently a common problem with games built on the Unity engine. So, be sure to save the contents of this directory frequently: ~/Library/Caches/unity.HuniePot.HuniePop

One from the vaults

A long time ago, in a Usenet newsgroup far, far away, in response to a post on “Top Ten Reasons Magic is Better than Sex”, I wrote:

  • Magic requires no foreplay; you can just grab a partner and start playing.
  • you can switch opponents as often as you like, and no one will mind.
  • brutally beating your partner is okay.
  • Protection really works.
  • Magic comes with a rulebook.
  • parents don’t go crazy when they catch their children playing Magic with the neighbor’s kid.
  • you don’t feel insecure if you have a little deck.
  • you can play Magic while eating a sandwich.
  • any number of people can play in a game of Magic, and everyone gets a turn.
  • if your deck just isn’t working, you can blame it on the shuffle.
  • Tom Wylie is easier to understand than Doctor Ruth.
  • when you pay for Magic, you’re guaranteed of a good time.
  • you can always get your partner to play Magic with you in public.
  • you can shuffle your deck as much as you want.
  • your partner can shuffle your deck, too.
  • when you buy Magic, you know it’s fresh from the factory.
  • when you get tired of a deck, you can make a better one.
  • your neighbors won’t mind if you watch them play Magic.
  • it’s okay to play Magic with your sister.
  • you don’t need a battery-powered shuffler, but it’s easier than using your hands.
  • you don’t have to tell your current partner about everyone you’ve ever played with.
  • if you quit playing Magic and sell all of your cards, you can probably afford sex.

(I dug this out because I found the old “recently-spotted” link where someone had translated them all into Spanish. Link was still good, to my surprise.)

Probationary Duckies

A little something to help Wonderduck through life’s trials.


Probationary Comment System: Isso

It felt lonely in here, so I got Isso working for comments. Easy to nuke-and-pave if I don’t like it, at least. The whole “Python virtualenv” experience was a real pain in the ass, though, since pip install repeatedly claimed to have installed all the dependencies, while pip list called bullshit on that.

I’ll probably have to put Monit on the server in case it crashes, but that can wait.


It’s possible to have Isso dynamically update the comment count in the article metadata block, but I just spent about an hour failing to get it to work, between Isso’s and Hugo’s overlapping limitations.

On the Isso side, you can either show the comment form or add counts to a page. They’re conflicting JavaScript includes, according to the docs. I could write my own bit of jquery to make an ajax call to retrieve the count and insert it into the page, but I thought that would be more work.

Until I ran into Hugo’s variable-scoping. When you render content in a list context, you’re really fully rendering each page in its own context and then including the results. So, inside a template, variables like $.Kind and $.URL refer to the individual article’s context, as if you were currently writing out that one article to disk. And of the two completely different ways you can set variables, one of them is strictly block-scoped, and the other is strictly page-scoped. You can’t pass either down into a partial template.

(there’s a partial-with-arguments called a shortcode, but that’s a completely different beast, and I’m not sure it is either effective or efficient to replace all your partials with shortcodes) UPDATE: completely impossible, in fact; shortcodes don’t work in template files, and partial templates don’t work in content files. They’re completely different things with completely different behaviors. You have to construct a custom dictionary and pass it into a partial template, which is butt-ugly and error-prone.

So, yeah, no comment-count on the home page at the moment.

4/12 Update

I wrote my own bitty Jquery function to use Isso’s API directly and insert the comment count on page-load. It would be nice if the API returned “0” instead of 404 errors when there aren’t any comments, though.

Loli Poppins

I refuse to apologize for what happened when the soundtrack from Mary Poppins was playing as I read Mauser’s comment about Lollygagging. Dedicated to Roman Polanski, of course.


“…and every pass I plan to make,
involves Delicious Cake.
A law, or three, won’t save young girls from me…

“Some champagne and a quaalude made the little girl go down,
the little girl go down,
the little girl go down.
But the booze, pills, and ass-rape were all felonies, I found,
so I fled the USA.”

Retirement Party!

Not mine, sadly, but the ancient NetEngine WebEngine that was dotclue.org for so many years. I pulled it from the co-lo on my way into work this morning, and its reward for fourteen years of faithful service will be a disk scrub and an e-waste bin.

By the way, for all the sometimes-deserved criticism that OpenBSD and its wranglers get, I was still running v3.3 without anyone ever successfully breaking in. I locked it down with a very small set of services, and required non-root logins with ssh keys, and Theo’s Paranoid Army took care of the rest. I applied the various security patches that came out in 2003-2004, but that’s it.

I don’t recommend not updating your server for 14 years, but you can go a lot longer between updates if you start with something designed for security.

Amusingly, I still own the even-older server that hosted munitions.com back in the days when it was shared between folks at WebTV, but I doubt I have anything left that could mount those disks to scrub them, so they’ll just get the sledgehammer treatment, and then go into the e-waste bin.

You have to be hungry to eat a donut?

Free cheesecake at Amazon!

The very, very NSFW site bakufu has a nice collection of lingerie photos collected from Amazon listings, featuring a very cute AV actress. The outfit after the jump looked particularly tasty…



After Steven Den Beste died, some of the (many!) people who were concerned about the loss of his old web sites reached out to the family to try to recover the data from his server. I was pulled in because I was physically closest when it seemed like we might need someone to go to Portland to pick up the machine.

That wasn’t necessary, but since I was the one exchanging email with his brother, I was the one who ended up with a shiny little thumb drive containing the old Chizumatic site, and between that and the Wayback Machine, managed to synthesize a complete, functional website.

I packaged it all up, sent it to my not-so-secret allies, and then… nothing. This is not a criticism or complaint; everybody’s busy, and after that one energetic weekend, I hadn’t done anything about it, either.

But now I have a brand new virtual server at Amazon, where bandwidth is silly-cheap and disk space ain’t no big deal. And I’d already figured out the Nginx config to get the old server-side includes working.

So, this may not be the official permanent home of Steven’s old web sites, but it is a home, for a welcome houseguest.


United's PR Roadmap


Dear GNU Emacs,

Why did you remove count-lines-region and make the only option count-lines-page? How is counting Control-L-delimited “pages” useful as a default behavior?

Worse, the only way to get line-count from a region is now count-words-region, but that takes extra keystrokes to avoid invoking count-words. (yes, I know there are keyboard shortcuts; there are lots of keyboard shortcuts. I’ve never trusted them to be stable)

So, more workarounds in my .emacs file to turn Emacs back into a text editor. 😡 💩 🔥

Winnie hits puberty...


Grooming An American Loli

“​…and this week Doc is playing with Julie, Gopher is playing with Vicki, and Isaac’s got a big surprise for Captain Stubing!”


Hey, at least they're not Peeps...


Cheesecake Champloo 4

A lot of the pictures that accumulate in the leftovers folder after I do a theme search on Gelbooru are rejected for facial expressions, excessively complex backgrounds, or not really being cheesecake. In general, I bias the posts toward “happy-sexy anime-style girls with simple backgrounds”, but that doesn’t mean the others aren’t any good…


"Points all her own..."

“​…sittin’ way up high”

Never mind the general babehood and the token mod-black-chick amazon in the background, check out the uplifting fashions our heroes and their captor are sporting. Paradise Island’s lingerie shops clearly feature Sufficiently Advanced Technology, enough so that I wonder if the Invisible Plane was just a spinoff product.


Curry Udon target practice

I need to order these for me and my sister, for our next trip to Japan…


I got nuthin'...

…so here’s a nice pair of melons.


Stop Words

That is, “when you hear these words, you know it’s safe to stop taking someone seriously”. In no particular order:

  • Cis
  • Male Gaze
  • Intersectional
  • Misgendering
  • (qualifier) Justice
  • Gender Binary
  • Cultural Appropriation
  • Woke
  • Mansplaining
  • Misogyny
  • Heteropatriarchy
  • Diversity
  • Rape Culture
  • Zionist
  • Manspreading
  • (whatever) Is A Social Construct
  • Whitewashing
  • Triggering
  • (made-up personal pronoun)
  • Privilege
  • (whatever) Denier
  • Disparate Impact
  • Heteronormative
  • Patriarchy
  • Fascist
  • Structural (whatever)
  • Homophobia
  • Inclusive
  • Gender Identity
  • Nazi
  • Transphobia

What did I leave out?

(note that it is possible to use some of these words and phrases in a way that is not meaningless blather, but that’s not the way to bet)


  • Sustainable
  • Organic
  • Vegan
  • Fair Trade
  • GMO-Free
  • Gluten-Free
  • (insert latest virtue-signaling buzzword here)
  • Agency
  • Problematic
  • No True Scotsman (fallacy most often committed by people who are accusing others of committing it…)
  • Ally
  • (whatever) Traitor
  • Toxic (whatever)
  • Voting Against Their Interests (which always means “voting against my interests”)
  • The Right/Wrong Side Of History

How could I have forgotten?!?

  • Dogwhistle

…and from the reliably-fucked-up virtue-signalers at boingboing

  • Heterosexism
  • Chauvinist

(linking to an article on an “SF” site that must come with a built-in fainting couch; seriously, the brief excerpt starts with this hilariously nonsensical statement: “the heterosexism goggles, which derange content via chauvinist interpretive paradigms”)

Definition of a good time

You’ve spent the past two weeks being yelled at by a user for not getting their external partner’s incoming connection to work

and you’ve had a tcpdump running for an entire week showing that no connection attempts have been made from the IP addresses the partner provided

and they schedule a conference call at a time that’s convenient for the partner’s third-world contractors

and they confirm their IP addresses in the chat but the test fails again

and your tcpdump shows them coming in from a completely different IP address

and they start to wrap up the meeting saying they’ll contact their network team who hadn’t been invited and reschedule for the next day

and you have to yell into the microphone to tell them to try again right now since you’ve just added their real IP address to the firewall

and they confirm that it works but continue talking about who’s going to do what and how they will communicate the results and who will be responsible for the next step and oh fuck who cares you stopped listening two minutes ago

and you close the multiple tickets created by the user who doesn’t understand that CC’ing the helpdesk on every email keeps creating new tickets

and the partner emails a list of 26 possible IP addresses that does not include the two they originally claimed were the only ones they use

and then they try to schedule another meeting anyway and you reject the invite twice

and you go back to bed.

…and reach for earplugs because the neighbor puts his dog out when he goes to work and it barks and whines all day long and sounds remarkably like one of your users.

Shall-Issue Open Carry


Dear Amazon,

I think you’re pushing your personal kinks a little too hard.

The New Perl Way: "You're doing it wrong"

use CGI;

“I’m sorry, Dave, I can’t do that.”

cpanm CGI

“You really shouldn’t use that any more. It’s bad for you.”

perldoc CGI

“The rationale for this decision is that CGI.pm is no longer considered good practice for developing web applications, including quick prototyping and small web scripts. There are far better, cleaner, quicker, easier, safer, more scalable, more extensible, more modern alternatives available at this point in time. These will be documented with CGI::Alternatives.”

perldoc CGI::Alternatives

No documentation found for “CGI::Alternatives”.

cpanm CGI::Alternatives
perldoc CGI::Alternatives

“Let me build this strawman that doesn’t actually make good use of CGI.pm to show you how you can easily switch to one of half a dozen different frameworks that let you use half a dozen different templating systems launched with half a dozen different embedded web servers, and replace your self-contained 100-line CGI script with half a dozen files located in half a dozen directories. For more fun, my sample code gets mangled if you try to view it as a manpage, so you really should download the raw file from CPAN.”

cpanm --uninstall CGI::Alternatives
cpanm Dancer2
perldoc Dancer2
cpanm --uninstall Dancer2
cpanm Mojolicious
perldoc Mojolicious
perldoc Mojolicious::Lite

use Mojolicious::Lite;
plugin CGI => [ '/' => "trivialscript.cgi" ];

use CGI;


Camelcide, Effectomy,and Memetical

How to tell that your new random-word generator works: feed it the text of the Jargon File and get back things that you could easily come up with real jargon definitions for…


Cheesecake: candy

Most pictures tagged “candy” involve Halloween, Valentine’s Day, and/or simulated oral sex. This tends to reduce the number of smiles, but I did my best.


"Is it okay for a perky elf to crush on a cardboard princess?"

…aka Sword Oratoria, the DanMachi spinoff (streaming on Amazon Strike, the existence of which answers the musical question “how come Crunchyroll still isn’t available on the Fire TV?”​).

The DanMachi light novels are sufficiently popular in Japan that they not only got manga and anime adaptations, but two spinoff novel/manga series, the first of which has its anime debut this season.

The author had a problem, though: Dream Girl Aiz Wallenstein has all the warmth and charm of a block of wood. A shapely block of wood that’s really good at killing monsters, but still, wood.

His solution was to make it an ensemble piece about her Familia, putting lots of emphasis on the genki half-naked amazons Tiona and Tione, and adding the insecure-but-eager elf-mage Lefiya, who really, really wants to be Aiz’s friend. Or “friend”; she has a rather active imagination.

The first two episodes are heavy on cheesecake, yuri, and foreshadowing that Something’s Up In The Dungeon, plus cameos by Bell and Hestia that establish where we are in the main story. And way too much Loki.

Oh, and Ayako Kawasumi has taken over the role of elf-senpai Riveria. Apparently the original voice actress is off dealing with health problems.

Always-Relevant Feynman Interview

The BBC keeps deleting copies of this video; hopefully this one will last for a while.

Dear Amazon,

I am not pretentious enough for this.

Also, 91% lean? Screw that.

Transspecies Heteronormative Toxic CisPrivileged Male Gaze

I feel triggered.


To each according to his needs...

The Arlo cameras I installed outside have captured plenty of neighborhood cats hanging out on my front porch, but clearly I need to put out special bait if I’m going to catch catgirls like Mizuki Hoshina…

Not a big fan of the new haircut, but that’s like complaining there’s not quite enough whipped cream on your sundae. Or on your catgirl. Or something like that.


How not to sell me a book...

If you’re a novelist, and I’ve never heard of you, the fastest way to get knocked off my maybe-read list is to include anything in parentheses or after a colon that even hints that this is not a standalone novel. Saga, Series, Trilogy, Book N, A something something, whatever.

A series title that’s significantly longer than the book title guarantees that free is too much to pay for your work. Also, price over $7 for an ebook; I’m willing to go over that for writers I like, up to a limit of $9.99, but that’s it, and only if that’s not higher than the paperback/hardcover price.

A colon followed by the words “A Novel” is a no-shit-sherlock way to guarantee that I’ll cross you off my list, except in the extremely rare case of the moronic publisher who puts it on recent Tim Powers novels. But you’re not Tim Powers.

I read a lot of SF and fantasy novels, but you need to remember that when you put your book up on Amazon, you’re not just competing with this week’s best-sellers. You’re up against decades of novels by Ray Bradbury, Gordon Dickson, Gene Wolfe, Patricia McKillip, Robin McKinley, Andre Norton, Clifford Simak, Poul Anderson, Tim Powers, Diane Duane, Lois McMaster Bujold, Vernor Vinge, C. J. Cherryh, George Alec Effinger, Barbara Hambly, Patricia Wrede, Larry Niven, Robert Heinlein, Robert Silverberg, John Varley, and Doris Piserchia, to give a partial list of whose books I’ve bought on Kindle over the past few years. And I’ve left out a lot of lower-tier names.

Admittedly, some of their publishers are imbeciles who think that a badly-OCRd thirty-year-old novel is worth $12.99 despite the easy availability of used paperbacks for $0.99 plus shipping, but enough of the stuff is out there for a decent price that I can afford to assume that your ambitiously-titled series is crap.

Update: Amazon has started showing a lot of recommendations that include a new warning label, the use of LitRPG in the subtitle. If your work is so weak that you need to call out its obscure genre in the listing, I want no part of it.

Yamato (Nadesico) Transport


Fun with Hugo shortcodes...

“You have my sword”

“​…and my axe”

(via pixiv)

I needed a proper spoiler/NSFW tag for Hugo, and then of course I needed something to hide with it…

Pictures and spoilers and smartypants

When the world was young, and this “blogging” thing was new, I maintained my site by hand, typing new content into index.html as I thought of it. Then I spent a great deal of time customizing MovableType to suit my needs, and used it for the next 14 years.

One of the common plugins was SmartyPants, which turned scruffy old typewriter quotes into pretty curved ones. As a long-time type nerd, of course I had to use it. The MT implementation was pretty good, and only rarely guessed wrong about open quotes. The one used by Hugo is, unfortunately, always wrong in a specific case that I use quite often: quotations that start with an ellipsis. For those, I’ve had to go through the archives and manually insert the Unicode zero-width space character ​ after the opening quote.

I never used MT’s web form for posting content, because, like so many other people have discovered, it’s too easy to lose an hour of work with a single mis-click or fumble-finger. Ecto was a great tool until it just stopped working one day (long after it stopped being supported), with only one quirk: at random intervals it would lose track of the UTF-8 encoding, and post garbage instead of kanji. A refresh would always fix the problem, so it was just a minor annoyance.

When it stopped working, I switched to MarsEdit, which is an excellent tool, and if I could easily connect it to Hugo, I would. As it is, I’ve gone back to running Emacs in a terminal window, with Perl/Bash scripts and Makefiles wrapped around an assortment of command-line tools.

For images, I insist on supplying proper height and width attributes so that the browser can layout the page properly while waiting for the download. Hugo can automatically insert those for pictures stored locally, but I upload them all to an S3 bucket with s3cmd, so I run them all through ImageMagick’s convert for cleanup and resizing, then Guetzli for JPEG conversion, and embed them with this shortcode:

{{ $link := (.Get "link" | default (.Get "href"))}}
{{ $me := . }}
<div align="center" style="padding:12pt">
  {{if $link}}
    <a href="{{$link}}">
    {{ range (split "src width height class title alt" " ") }}
      {{ if $me.Get . }}
        {{. | safeHTMLAttr}}="{{$me.Get .}}"
  {{if $link}}

None of the arguments are mandatory (even src, without which there’s not much point), but it will add any of the listed ones if you’ve supplied them, and allow you to add a link with either “link” or “href”. This can be embedded in the new spoiler shortcode I wrote yesterday (which relies on Bootstrap’s collapse.js):

{{ $id := substr (md5 .Inner) 0 16 }}
{{ $label := (.Get 0 | default "view/hide") }}
{{ $class := (index .Params 1 | default "") }}
<div class="collapse {{$class}}" id="collapse{{$id}}">{{ .Inner }}</div>
<p><a role="button" class="btn btn-default btn-sm"
  data-toggle="collapse" href="#collapse{{$id}}"
  aria-expanded="false" aria-controls="collapse">{{$label}}</a>

The results look like this, and yes, the picture behind the NSFW tag is NSFW:

{{< spoiler NSFW >}}
{{< blogpic 
  width="560" height="420"
  class="img-rounded img-responsive"
{{< /spoiler >}}
…well, Not Safe For Waterfowl, anyway…

It took about 30 seconds to convert my Gelbooru mass-posting script to generate shortcodes instead of HTML, so my most-recent cheesecake post was done this way. Now that I have the NSFW shortcode, I’ll likely include some racier images in the next one…

At some point I’ll pull out all my scripts and customizations into a demo blog on Github, so that I have something to point to when someone asks how to do something that is either not directly supported in Hugo (like monthly archive pages), or is just poorly documented (“damn near everything”).

So far: Doctor Who, season 10

The Return of Doctor Mysterio

Not a lot of rewatch value, but a fun Christmas special, and nice to see Nardole again.

1. The Pilot

Not a bad intro for the new companion, but the snippets-of-mystery season arc has an uncomfortable whiff of how they handled Missy in season 8, where the revelation wasn’t worth all the time spent setting it up. I spent a lot of time wondering who Bill’s step-mom was (last seen having kittens in season 3), which was distracting enough that I almost didn’t get the point behind the box of pictures.

I had to turn on closed captions to catch all of the dialogue. Also, I’d like to see the actress who played Heather in something that shows a little more emotional range. Or a little more skin. Either way, I’m good.

2. Smile

I can’t decide whether this should have been shorter or longer. Shorter, for the material as they used it; longer, if they’d actually put some real thought into it, and maybe given some personality to one of the walk-on parts. Not impressed.

3. Thin Ice

Dear Writer, if you’re going to put Profound Words into the Doctor’s mouth, could you try to make them a bit less trite? And avoid trendy buzzwords like “privilege”? Kthxbye. As for the plot, I’d rather not.

Current anime

Note: it is common in Japan to come up with a 4-mora abbreviation for just about any lengthy name, so the ridiculous mouthful Dungeon ni Deai wo Motomeru no wa Machigatte-iru darou ka quickly became DanMachi. But what do you do now that there are two spinoffs? Familia Chronicle could be trimmed to FamiCon, but that one was taken a long, long time ago, and doesn’t reference the main series. Worse, there’s just no good way to abbreviate Sword Oratoria. A bit of web-trolling suggests there’s no consensus forming, so I propose DanFami and DanSora.

DanSora episode 3

As previously discussed, this DanMachi spinoff uses Dream Girl Aiz as the wooden totem pole that more interesting characters dance around. Genki DFC Amazon Tiona and Tsundere Kyonyū Amazon Tione provide most of the fan-service, while Delusional Yuri Elf-mage Lefiya is the protagonist whose inexplicable crush on Aiz drives the action. Not the action she wants, but they’ve basically decided to replay the “I want to get stronger so I can nail the cardboard princess” theme from the original series, this time with a girl.

This episode covers the Mosterphilia event, but since everyone involved is higher-level than Bell, quickly resolves the original problem to focus on a retconned fight against a much more dangerous monster, as more buildup for the new menace (no longer just Something’s Up In The Dungeon, now it’s in town!). Lefiya powers through her pain and fear with dreams of Aiz, and is rewarded with an indirect kiss (squeeee!). Loki is less annoying than in the previous two episodes, as she does more than drunkenly fondle the girls.

Streaming only on Amazon’s new “Anime Strike” channel, which is a mixed bag. Good that I can watch it on a big screen, bad that they don’t bother to tell you when new episodes will be available. You just have to guess the schedule.

Eromanga-sensei episodes 1-4

Best thing going this season. Not without flaws, but while the episodes feel a little rushed, they’re still satisfying. And all the girls are interesting and appealing.

Streaming on Crunchyroll and Anime Strike.

Alice and Zōroku

I’ve just started on this one, and I like it quite a bit. More after I catch up.

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