「おお〜、8年後が楽しみじゃ」
— リュウ, in アオプルコのきゅうじつNo offense, but I don’t think I want your employees coming to my house, no matter what sort of background check you run before having them deliver packages on their way home from work.
As usual, Honest Trailers is dead on in this one, but the single most painful revelation is The Barry Bobblehead.
In anime fan-art, the question is really what qualifies as wearing short shorts. When they’re not just made of body paint, they’re often either halfway to her knees or wide open in the front. For some characters this is canonical, for others it’s wishful thinking by an artist who draws with one hand in his pants. Pokemon’s Misty/Kasumi, whatever age she’s drawn at, generally falls into the latter category. And, of course, the shortness of the short shorts is often emphasized with M字開脚.
There are quite a few characters whose official costumes include short shorts. Browsing through the search results on Gelbooru, it quickly became obvious that I could just do a top-20 list of the most obvious ones, without even coming close to running out. But I’m not trying to be comprehensive, just provide an amusing diversion, so if I missed your favorite girl as I skimmed through the hundreds of pages of results, it’s not because I don’t like the way she fills out her short shorts, it’s because there were too damn many pictures of Yoko from Gurren Lagann. Not that there’s anything wrong with that. 😉
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.
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?
“No time for annoying character quirks, we’ve got a plot to advance, and the rest of the characters from the OP to introduce!”
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.
Can we get the Monks to kill off everyone responsible for this episode? Their consent was impure. And really, really contrived.
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?
<?xml version="1.0" standalone="yes" encoding="ISO-8859-1"?><?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>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.