May 2017

Cheesecake: beer


Who else could I lead off with on this one?

more...

To Infinity And Beyond


In a new photo shoot, popular bikini model Rin Tachibana breaks the lightspeed barrier with Hyper-Oppai. I guess now we know what the H in H-cup stands for.

More evidence here, and in the previous 17 collections linked to it…

Do you even Internet?


There was a time when I used to feel like I was cheating, somehow, getting paid to do things that were easy and obvious. But I kept running into people who Just Didn’t Think Right. I never developed the common “people who aren’t like me must be stupid” problem, thanks in part to dealing with a lot of secretaries who could do all sorts of things that I couldn’t, but even today, I sometimes get the urge to reach through the Internet, grab someone by the collar, and shout “but it’s right there!​”.

For instance, Scandalous Gaijin collects some quite pleasant cosplay photos, but mixed in with the cheesecake recently was a shot of a nicely old-fashioned street in Japan, with kimono-clad women in the foreground and a pagoda in the background, with the comment “Anyone knows the name of this street in kyoto? I need to check it out”. Now, if you don’t read kanji, you might not guess that the second half of the caption “もう一度 八坂の塔” is the name of the place, but when you look at the picture you can clearly read the names of two stores, “Happy Pie” and “Happy Bicycle”, and typing “happy bicycle kyoto” into Google Maps takes you to the exact spot the picture was taken from. (and if you didn’t know it was Kyoto, cut-and-pasting 八坂の塔 into Google will tell you that)

Google Image Search gets overlooked a lot, too; it would be nice if they’d sort the results chronologically, so you don’t have to search through the largest images by hand until you find something close to the original source, but generally it will at least give you some information, and often the full context it was originally posted in. The answer to “who is this goddess and where can I find more pictures of her” is generally pretty easy to find.

Even just plain Google searches seem to elude otherwise intelligent people. Just today, I’ve had two extremely intelligent, skilled co-workers email me detailed error messages and ask how to fix the problem. I paste the error into google, and *poof*, the answer emerges. At least with these two I know they can figure it out, and they’re just outsourcing their problem-solving to me so they can get back to fixing other broken things, but a lot of times it’s from people who are honestly stumped by something that could be resolved with ten seconds of cut-and-paste.

Now, the people who email me screenshots of detailed error messages, they’re beyond help…

Otaku Diversity


(via)

Dear Amazon,


Well, at least you can’t be accused of whitewashing your recommendations…

Pantry review: Barilla Ready Pasta


If you’re really desperate, and you don’t have time to boil water, this is kind of like pasta:

Except for the smell, which is the same plastic-y reek as the Uncle Ben’s Ready Rice pouches. Not, I suspect, a coincidence.

A cocktail served in big cups


In the US, asking your waitress for this particular variety of shōchū cocktail might get you arrested… unless it’s the kind of place that also sells lap dances.

It certainly sounds more appealing than the tomato flavor they offer.

(via)

Dear Wen Spencer,


Your novel Eight Million Gods is a pretty good read. I spotted the occasional spell-check-editing error of the sort that is increasingly common in the genre, whether traditionally published or indie, but none of them were severe enough to obscure the meaning or knock me out of the story.

No, that was reserved for the error that I hope was introduced by an inept editorial assistant, because your knowledge of Japan is clear enough that I’m sure you know there’s no such thing as a hundred-thousand-yen bill, and that it would be ridiculous for a young woman to carry such a thing and use it pay the cover charge at a host club.

Also, someone needs to tell your cover artist that katanas are not swung like baseball bats. And that a collage of details from random pages in the book is not the same as drawing a scene from the book.

This he tags ‘loli’?!?


I get the feeling this Tumblr user doesn’t quite grasp the concept of “tagging”, or else this is a particularly inept attempt at SEO. Gravure, yes. Sexy/セクシー, also yes. Idol? Probably not. Loli? Not a chance.

(via)

Dear Amazon,


I suppose it can’t be any worse than meeting Godzilla, but still, this wasn’t one of those obscure 75th-page recommendations, it’s currently #20 on my list, which usually suggests a fairly strong correlation, so I’m assuming you see some plot parallels here, right?

Emotional Aiz, Creepy Sagiri, Doctor Bugfix


DanSora, episode 4

In which it is revealed that Aiz once had a full range of emotions, before something as-yet-unspecified happened to her parents. Less time is spent on Lefiya’s desperate crush, but instead we get Tione going vigorously dere-dere over their pint-sized boss.

Speaking of which, I saw someone commenting that he had trouble remembering which name went with which amazon. The answer is simple: the last letter is their cup size. Tiona, DFC; Tione, boin!.

What really doesn’t work is splitting the party and having the annoying Loki annoy the annoying Bete. Their scenes advance the plot, but I just don’t enjoy the voice acting for either character.

By the way, this episode puts them about halfway through the second light novel, and it looks like book 3 wraps up the current plot. At the current pace, I’m guessing they’ll make it through book 4, at least, which includes Bell’s minotaur fight from their point of view.

How did Finn survive speaking the truth about every woman in the party? Given how slapstick they’re playing this series, I expected some sort of hysterical overreaction.

Eromanga-sensei, episode 5

Okay, so Sagiri is a creepy middle-aged man in the body of an adorable loli, Our Hero is her pimp, and they both really need to get out more. The episode improved once Elf arrived, as usual.

I don’t think Our Hero has told bookstore-chan that his little sister is Eromanga-sensei, and he seems completely oblivious to just how creepy his request was. Also, logic fail: Sagiri wants to see a wider variety of real girls so she can draw them, and bookstore-chan is a candidate because they spent animation dollars making sure the audience knew she had big bouncy ones. But Sagiri specifically wants to see her panties, which is less about reference material and more about her being an adorable little perv.

Meanwhile, she spends most of her time on the Internet, which is not exactly lacking in big boobs and panties. This reinforces the impression that her request is more personal than artistic. Maybe Our Hero needs to get her a debit card so she can subscribe to live cam shows?

Oh, almost forgot. WTF is up with the time-wasting shots of the fat jogger? Could you not find a better way to pad out the episode, like maybe animating the Elf-catch instead of showing a still?

Doctor Who, episode 10.4

Honestly, the best thing about this season is that it’s Steven Moffat’s last as showrunner. I don’t have a lot to say about this episode, except that, like the previous one, it feels like they’re just filing the serial numbers off of stories they did a few years ago and adding in a likely-disappointing season arc.

Did it occur to anyone that they just left a huge colony of murderous alien bugs on a piece of prime real estate that’s sure to be built on again soon? Also, maybe be a little less on-the-nose at casting Creepy Old Guy What Creeps At Midnight? Finally, perhaps a tiny bit of sympathy for the companion who just lost everything she owns, including the photographs the Doctor went to such lengths to create for her?

Guardians of the Galaxy 2


They should have just called it “Tiny Groot Adventures”.

The movie is 2 hours, 16 minutes, and I don’t know if that counts the multiple before/during/after-credits scenes. It definitely doesn’t count the 20 minutes of trailers I had to sit through with earplugs in. I should have just showed up 15 minutes late; the theater was pretty empty at 10:40 AM on a Monday.

Without spoiling anything, I’ll just say that I don’t think it had 136 minutes of story to tell. The celebrity cameos felt forced, Kurt Russell’s performance turned to crap when he (spoilered), and the extended dance mix of (spoiler’s) (spoiler) at the end just went on and on. I was catching Pokemon for most of it.

Also, while the Stan Lee cameo in the previous film was amusing, his first scene in this one was a bit too wink-wink-nudge-nudge, and the second was just dumb. Howard the Duck’s performance was less annoying than Stan Lee’s.

Apart from the three major cameos, nothing really threw me out of the film, and those bits were short enough that I was able to forget them and enjoy the ride. I wouldn’t go see it again, even as a matinee, and I don’t think I’ll buy the Bluray. I’ll watch it again with friends when it comes out, but just the once.

Note: yes, that’s Ben Browder. And Ving Rhames. And Michelle Yeoh. And even Michael Rosenbaum playing someone bald…

On Comey and Clinton


I’m finding it really difficult to care about Trump firing FBI Director James Comey. After going all-in for Clinton, he discovered at the 11th hour that evidence would come out that he’d acted as a partisan hack, and tried to weasel his way out of it. Claims that the timing is suspicious because of investigations into “the Russian connection” are all smoke, no gun. I’m sure that four years from now there will still be die-hard believers in this nonsense, just like there are still people who think Bush stole two elections; you can’t reason someone out of a religious position, so there’s no point in arguing with them.

As for Hillary Clinton, she wasn’t really running for President, she was trying to unlock the achievement “First Woman President”. After working hard to make Trump her opponent, her campaign didn’t actually try to beat him. Instead, they spent most of their time and money running up the score in states she couldn’t possibly lose, assuming that they had it in the bag and could afford to try to make it “historical”.

In the end, the weakest Democrat lost to the second-weakest Democrat, and since my vote didn’t even count at the county level, I am free to laugh at everybody.

Cheesecake: pocky


The pocky tag includes the pocky_kiss tag, which brings in issues of consent as well as lolis, so I had to reject quite a bit. Something about mixing symmetrical docking with phallic candy and little girls seems to appeal to fan-artists, but not so much to me.

Instead, I’ll lead off with the grown-up virgin bride who made Pocky the oral fixation for anime girls.

more...

Fumika Baba


I apologize for not having previously informed everyone of the awesomeness that is Fumika Baba. Dunno how I forgot to mention her for two years; must have been distracted by something.

For such a pretty woman, it was hard to find a picture that focused on her lively, expressive face. The photographers must also be distracted by something…

(via)

more...

Nuke and Pave


This is your brain on Gender Studies:

Given that the shift in tree squirrel demographics is a relatively recent phenomenon, this case presents a unique opportunity to question and re-theorize the ontological given of ‘otherness’ that manifests, in part, through a politics whereby animal food choices ‘[come] to stand in for both compliance and resistance to the dominant forces in [human] culture’. I, therefore, juxtapose feminist posthumanist theories and feminist food studies scholarship to demonstrate how eastern fox squirrels are subjected to gendered, racialized, and speciesist thinking in the popular news media as a result of their feeding/eating practices, their unique and unfixed spatial arrangements in the greater Los Angeles region, and the western, modernist human frame through which humans interpret these actions. I conclude by drawing out the implications of this research for the fields of animal geography and feminist geography.

(via)

Avocado’s got your number…


Old and busted: bagel-slicing injuries. New hotness: avocado-slicing injuries.

Soon after I bought my house, my then-manager came down to get my help scanning in the manual for his sailboat, for the benefit of others with the same model (the manual having become somewhat rare over the years). A California native, he decided to introduce this Midwesterner to the joys of a good ripe avocado, and as he was starting to explain the proper way to carefully cut around the edges and extract the seed, I simply cut them in half.

He stopped in mid-sentence and said, “oh, right, you have sharp knives.”

Side note: when I was migrating the blog, I checked the logs first and discovered that there are still a number of sites linking to those boat-manual scans, so I kept them online.

A series of tubes


“Dear Amazon, do I use teflon tape to attach this to my pipes?”

A Dictionary of Unspeakable Truths


In which J Refuses To Play Well With Others and Runs With Scissors. And perhaps ever-so-slightly exaggerates for effect. That’s my story and I’m sticking to it.

more...

Evil has a terrific rack…


No, I’m not talking about Jens, although she is the platonic ideal of the trope.

DanSora, episode 5

Big battle! Plot crumbs! Busty villain! Lefiya crushes! Lefiya gets jealous! Loki is 50% less annoying! Aiz shows third emotion! Cliffhanger ending that connects to main story!

I expect the next episode to be about 2/3 Aiz hitting level 6, 1/6 Loki, and 1/6 Lefiya fantasizing about how to privately reward Aiz for her latest Awesome Feat.

Eromanga-sensei, episode 6

“We’ve secretly replaced Our Heroine with the cameraman from Agent Aika; let’s see if anyone notices.”

In the opening scene, bookstore-chan’s relationship level with Our Hero is firmly established: he calls her Tomoe, she calls him Mune-kun. So, childhood-friend level of intimacy, which means she doesn’t have a chance against any of the Strange Cute Girls who’ve entered his life. Speaking of which, this episode adds another one, and There Is Conflict.

In many anime, the “buy the Bluray” hook is “uncensored nudity”. In this one, it looks like it’s “animated Elf scenes”. Last episode had the fat jogger filler, this time they just panned over stills and added some audio.

As promised, Megumi is exposed. Two different ways, with her claims of being worldly and experienced demolished as Sagiri draws her tied up and blindfolded and then strips off her panties. Sagiri has the mind of a SomethingAwful goon in the body of the season’s #1 moe-moe-fuckdoll. Honestly, I’m surprised she didn’t insist on acting out a train-groping scene.

And, yes, Fierce Rival Muramasa fits the “evil has a terrific rack…” theme.

Mai Nishida, Buckeye


(more)

Dear Doctor Who…


Now that I’m caught up to episode 10.5, I have only one question:

Will the entire season be written by interns copying scenes from their favorite episodes?

Cheesecake Champloo 5: Duos


Another trip through the leftover folder, this time selecting pictures with exactly two girls. For obvious reasons, some of these are NSFW, and hidden at the end.

more...

Dear Amazon,


I don’t like you in that way

Dear Microsoft,


The “new, improved, consistent-across-all-devices” 4-column layout in OneNote sucks shit through a straw. Having full-height columns for notebooks, sections, and pages taking up half the window is an incredible waste of space, and a horrible navigation method. It sucks on a tablet. It sucks worse on a laptop.

Who Needs Villains


So far, this season of Doctor Who has been… “unimpressive”. The set design mostly lacks imagination and scope. The stories feel like they were cribbed from better, or at least more ambitious, episodes in previous seasons. The Doctor’s monologs are being written by Captain Obvious and The Campus Socialist. The new companion got a decent intro, but has done little of note since. And as for the monster of the week, well, so far we’ve had:

  1. a puddle. (but an alien puddle)
  2. a swarm of nano-Legos.
  3. a strawman capitalist.
  4. a mama’s boy.
  5. strawman capitalism.

The ideas and characters in each episode are undeveloped. There’s no supporting cast to speak of, just the Doctor, Bill, and Nardole, and Nardole spends most of his time delivering ominous foreshadowing with the delicate grace of a firehose.

Ai’s Eyes


I think this is the first picture I’ve seen of Ai Shinozaki where the makeup artist didn’t try to de-emphasize her natural asian features.

NSFW because have you seen Ai Shinozaki?

(via)

Corpus Fun


I’m pretty sure “futanari” is not Dutch. Also “gmail”, “iphone”, “http”, “cialis”, and “jackalope”. “bewerkstelligen”, on the other hand, fits right in.

For my new random word generator, I’ve been supplementing and replacing the small language samples from Chris Pound’s site. The old ones do a pretty good job, but the new generator has built-in caching of the parsed source files, so it’s possible to use much larger samples, which gives a broader range of language-flavored words. 5,000 distinct words seems to be the perfect size for most languages.

Project Gutenberg has material in a few non-English languages, and it’s easy to grab an entire chapter of a book. Early Indo-European Online has some terrific samples, most of them easily extracted. But what looked like a gold mine was Deltacorpus: 107 different languages, all extracted with the same software and tagged for part-of-speech. And the range of languages is terrific: Korean, Yiddish, Serbian, Afrikaans, Frisian, Low Saxon, Swedish, Catalan, Haitian Creole, Irish, Kurdish, Nepali, Uzbek, Mongol, etc, each with around 900,000 terms. The PoS-tagging even made it easy to strip out things that were not native words, and generate a decent-sized random subset.

Then I tried them out in the generator, and started to see anomolies: “jpg” is not generally found in a natural language, getting a plausible Japanese name out of a Finnish data set is highly unlikely, etc. There were a number of oddballs like this, even in languages that I had to run through a romanizer, like Korean and Yiddish.

So I opened up the corpus files and started searching through them, and found a lot of things like this:

437 바로가기    PROPN   
438 =   PUNCT   
439 http    VERB    
440 :   PUNCT   
441 /   PUNCT   
442 /   PUNCT   
443 www NOUN    
444 .   PUNCT   
445 shoop   NOUN    
446 .   PUNCT   
447 co  NOUN    
448 .   PUNCT   
449 kr  INTJ    
450 /   PUNCT   
451 shop    PROPN   
452 /   PUNCT   
453 goods   NOUN    
454 /   PUNCT   
455 goods_list  NOUN    
456 .   PUNCT   
457 php NOUN    
458 ?   DET 
459 category    NOUN    
460 =   PUNCT   
461 001014  NUM 

1   우리의  ADP 
2   예제에서    NOUN    
3   content X   
4   div에   NOUN    
5   float   VERB    
6   :   PUNCT   
7   left    VERB    
8   ;   PUNCT   

Their corpus-extraction script was treating HTML as plain text, and the pages they chose to scan included gaming forums and technology review sites. Eventually I might knock together a script to decruft the original sources, but for now I’m just excluding the obvious ones and skimming through the output looking for words that don’t belong. This is generally pretty easy, because most of them are obvious in a sorted list:

binnentreedt
biologisch
biologische
bioscoop
bir
bis
bit
bitmap
bitset
blaas
blaasmuziek
blaast

Missing some of them isn’t a big problem, because the generator uses weighted-random selection for each token, and if a start token only appears once, it won’t be selected often, and there are few possible transitions. Still worth cleaning up, since they become more likely when you mix multiple language sources together.

Jun Amaki


Jun Amaki falls somewhere in the middle of the current pack of gravure models: age 21, nominal singing career, pretty enough that stylists and photographers don’t forget to include her face, but only 1 photobook and 3 DVDs so far in her four-year career. That last is a bit surprising, since she’s also 4'10" with a 95-I bustline, and falls firmly into the “loli-cute” category (referring to the face only, of course…).

And she can be quite expressive on camera:

She is featured in a group photobook coming out in a few weeks, titled If My Cat Turned Into A Cute Girl. I wonder what breed she’ll be…

more...

Level 6, Challenge, Doctor Ex Machina


DanSora 6

Newsflash: Aiz displayed a new emotion. Okay, it’s a pout, but that’s more than she’d shown in the previous series. Surprisingly, leveling up only took 1/3 of the episode, leaving time for her to pet Bell, pout over his flight-or-flight instincts, then rescue him from prum treachery. And have Loki and her senior staff discuss The Plot.

Eromanga-sensei 7

In which Fierce Rival Muramasa displays all of the emotion that she lacks as Aiz Wallenstein. Seriously, Saori Ōnishi must feel like she’s coming back to life when she switches from recording the wooden princess to this role. On a related note, am I the only one wishing for more editor-san?

Advice for Our Hero: dude, accept the confessions and go for the Type One Tenchi solution.

Doctor Who 10.6

This episode felt a lot longer than the others. Maybe it’s because it wasn’t written by interns, and actually goes somewhere. Maybe because Moffat realized we all knew who was inside the box. Maybe because Nardole got an opportunity to do more than nag. The villain still feels derivative, but at least there was some variety in the sets.

Dear Amazon,


Well, some of these might be more stimulating than the Godzilla movies you recommended for a previous “night in”

more...

Who could resist?


(via)

The Cutest Little Sister In The World


No, wait, that’s the book Our Hero is writing in Eromanga-Sensei. The porn film series debut these photos come from is actually called “My Little Sister’s Lovely Boobs Keep Popping Out”.

Which, come to think of it, sounds exactly like a late-night anime title. Maybe it comes out next season.

Anyway, Miharu Usa demonstrates her qualifications for the lead role after the jump.

more...

“Someday, you could just walk past a fez.”


The DoctorNana Asakawa: “Never gonna happen.”

more...

A clean sweep?


Over the past few weeks, a number of Doctor Who fan sites have claimed that nobody will be continuing to the next series. It’s not just Moffat and Capaldi; Missy and Bill’s actors are apparently departing as well. Nothing specific about Nardole, that I can find, but it’s generally being assumed that he’s also out.

If true, I won’t lose any sleep over Missy, but despite them not giving her much to do, Bill has been an interesting character. I’d be sorry to see her go before Pearl Mackie gets a chance to develop the character. Not my favorite companion (that would be Wilfred Mott), but she hasn’t really been given the chance.

I’m quite optimistic about incoming showrunner Chris Chibnall, though. The man responsible for the first two seasons of Torchwood and half a dozen Tennant/Smith episodes has a good grasp of the universe.

If only it were that easy…


I look forward to the Curry Catgirl flavor.

“Oh, FFS, MasterCook!”


MasterCook, currently at version 15, is still the best recipe management software around, mostly because it supports sub-recipes. Most recipe-database software maintainers will give you blank stares when you mention this, even the ones who claim to import MasterCook format; some of them don’t even know about sub-title support in ingredient lists. While the software has changed hands several times over the past 25 years, functionally it hasn’t changed much since version 6. The licensed cookbooks come and go, but OS compatibility is the most significant improvement. (disclaimer: I haven’t tested the pretty clouds in v15 yet)

There are tens of thousands of recipes on the Internet in the two major MC export formats, MXP and MX2. I recently dug up one of the biggest to play with, which is only available through The Wayback Machine.

MXP is a text file meant to be printed out in a fixed-width font, but the format is well-structured enough that it’s easy to import into other software, with some minor loss of information. If you’ve downloaded any recipes off the Internet in the past 20 years, you’ve probably seen the string “* Exported from MasterCook *”.

MX2, introduced in 1999’s MasterCook 5, is not XML. Yes, it looks like XML, and even has an external DTD schema, but trying to feed it through standard XML tools will trigger explosions visible from half a mile. If you want to work with it, your best bet is the swiss-army-knife conversion tool cb2cb. Windows-only, written in Java, and “quirky”, but it handles both MXP and MX2, as well as some other formats, and has built-in cleanup and merge support. Pity it’s not open source, because I suspect there are dozens of comments with some variation of “Oh, for fuck’s sake, MasterCook!”.

What’s wrong with the “XML” and DTD?

  1. The XML header line is invalid. This:
    <?xml version="1.0" standalone="yes" encoding="ISO-8859-1"?>
    must be changed to:
    <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
  2. The following two characters are not escaped in attributes: "&
  3. Non-printable characters in text (ASCII 2, 5, 17, 18, and 31, in particular).
  4. The mx2.dtd file supplied in every version since 1999 has obviously never been tested, because it is incorrect and incomplete, in several different ways.

Of course, anyone who knows me will correctly guess that I’ve gone to the trouble to fix all of these problems, with a Perl script that massages MX2 into proper UTF-8 XML that validates against a corrected mx2.dtd; part of that script dates back to my old cookbook project from 2002, so yes, this is the first step to reviving that. The script uses xmllint to fix the encoding and double-check that it’s valid XML. I’ve validated over 450 converted MX2 files against the corrected DTD, a total of around 120,000 recipes.

Update: When converting MXP to MX2, many of the options in cb2cb mangle the output. Best to turn them all off, and do some basic cleanup with a script like this one which splits directions on CRLF pairs and safely moves most of the non-direction text into Notes. There are still a few rare errors in the conversion process, but in my case that amounted to 4 ingredient lines in over 10,000 recipes, detected by their failure to validate during the XML conversion.

Plotstuffing, House party, WTF


DanSora 7

“No time for annoying character quirks, we’ve got a plot to advance, and the rest of the characters from the OP to introduce!”

Eromanga-sensei 8

Fierce Rival in a completely different way now Muramasa provides amusement for editor-san. Literal Fifth Wheel Guy overcomes the creepy sensation of visiting Our Hero’s home. We get to see what Sagiri’s like when she’s got the place to herself. Animation budget not quite as tight as in some previous episodes, but still some obvious skimping. New end credits to reflect a mood swing; hopefully they’ll switch back.

Doctor Who 10.7

Can we get the Monks to kill off everyone responsible for this episode? Their consent was impure. And really, really contrived.

Dear Microsoft,


Congratulations on completely destroying the sync ability of the iOS version of OneNote. Your mother must be so proud.

Update: Surprisingly, it still worked on my iPhone while being totally borked on my iPad. None of the fixes people have been suggesting in the forums (lots of people hitting this bug this week) fixed it. Failing to authenticate for sync has actually been an issue with the iPad version of OneNote for quite a while, but in the past, force-quitting the app was sufficient to fix it. It looks like a nuke-and-pave of the app is necessary but not sufficient; I’m not actually sure what eventually persuaded it to start working again, but I suspect it was the animal sacrifice.

An app whose functionality depends on reliable sync needs to sync reliably. I migrated everything over from Evernote and let my paid subscription lapse because they were ignoring the core functionality of “sync my notes between phone/laptops/tablets”. Your recent attempt to provide the (not-quite-the-) same (poor) user experience on all platforms is the sort of development diversion that cost them customers.

Oh, and if you really want to make the user experience the same, add the “Recent Notes” tab to the desktop clients. It’s one of the most useful features of the mobile clients, and completely missing on the full app. And bring the Mac client up to feature parity with Windows, maybe?

Update: Happened again on 6/6. I had to delete the app, re-download it, and then re-sync all my notebooks. WTF, MS?

Fun with Hugo themes


One of the challenges with Hugo is that, out of the box, it doesn’t do anything. Create a site, fill it with content, run the generator, and you get… nothing. You need to download or create a theme in order to actually render your content; there isn’t one built into the site-creator, although several volunteers are working on something (much the same way that usable documentation is largely a volunteer effort).

It is not immediately obvious that the theme gallery is sorted by update date, so that the farther down the list you go, the less likely they are to work. There’s a top-level set of feature tags, but they’re applied by the theme authors, and don’t include useful things like “scales beyond 100 pages”.

As part of my ongoing MasterCook molesting, I decided to take the now-sane XML files and render them to Hugo’s mix of TOML and Markdown, generating a static cookbook site with sections and categories. Having done some experimentation in response to a forum post, I knew that a site with 56,842 pages would take several minutes to build, so I grabbed the simple, clean Zen theme and fired it off.

And waited. And waited. And watched the memory usage climb to over 40GB of compressed pages.

The Hugo developers pride themselves on rendering speed, but when I checked the disk, it was taking upwards of a second to render a single content page. Looking at one of them made it obvious why: the theme designer included every content page in the dropdown menus and sidebar. It had honestly never occurred to him that someone might have more than about 8 categories with about 20 pages each. In fairness, this is a port of a Drupal theme, and the original might have had the same problem.

After modifying the templates to only use the first 20 from each category, I got the site to render in about 10 minutes. The category menu looks horrible, because I split the recipes up alphabetically into chunks of about a thousand, and the theme only allocated enough space for about 2/3 of them, with the rest covering the title field. The actual recipe rendering is excellent, including the handling of sub-recipes and referenced recipes.

I could modify the Zen theme until it did everything right, or spend several hours rebuilding a small sample site with other themes until I found one that required less work, but once you’ve built one theme from scratch, it’s just faster and easier to do that than to try to use any of the pre-built themes. Their real value is as examples of “how do you do this in Hugo”, which you can’t generally find in the documentation.

There are also quite a few working code snippets in the forums (some provided by me; problem-solving is kinda my thing, if you haven’t guessed by now), but with so much of the code under active development, any forum example more than a few months old is likely to be wrong now.

It’ll be a while before I bring the cookbook back up, since this is definitely a copious-free-time project, and not only do I have to knock together a theme and set up search (most likely Xapian Omega again, since I’m fresh on it), but also molest the recipe data and impose some consistency on categorization, tagging, and ingredient naming. Currently it has 782 distinct categories, many of which differ by only a few characters, and about 2/3 of them should really be tags instead. All of these issues should really be fixed in the MX2 files, so that they can be cleanly imported back into MasterCook, but since that’s not XML, the scripting is a little more “interesting”.

Tentatively, I’m going to start with my blog theme, since I’ve already tested it at scale (and learned that large taxonomies are a significant bottleneck). I can strip out a lot of the blog-specific stuff without much effort, I’ve already done the work to switch over to dropdown menus for categorization, so the only real trick will be embedding any referenced recipes in a hidden DIV at the bottom of each page, and setting up a print-only stylesheet that hides the nav and exposes the embedded recipes. The references are already turned into links to the appropriate recipe’s page, thanks to the builtin relref shortcode.