Monday, May 14, 2018

`dotnet build`ing Eto.Forms projects

A couple of months back, Scott Hanselman blogged about the Eto.Forms cross-platform UI toolkit for .net. I filed that away for reference, and this weekend got around to giving it a whirl.

So I took the default new F# app and made a personalized little skeleton project (standard boiler-plate for the "About..." dialog, that sort of thing), and as part of making it re-usable as such, added a trivial FAKE build script. Eto.Forms generates new-style projects, so of course that would be using the and DotNet.publish tasks...

Not so fast.

Do that and it barfs with

error : MSB4801: The task factory "CodeTaskFactory" is not supported on the .NET Core version of MSBuild.
error MSB4175: The task factory "CodeTaskFactory" could not be loaded from the assembly "C:\Program Files\dotnet\sdk\2.1.200\Microsoft.Build.Tasks.Core.dll". The task factory must return a value for the "TaskType" property.

which turns out to be a known issue (or two). Rather than sit tight and wait, I did a bit of looking around. Turns out there's a similar, closed, issue against msbuild itself, to which the resolution is to use the RoslynCodeTaskFactory as a replacement.

So, after some experimentation, here's a work-around while a fix works its way through the system; it functions by overriding the _BuildAppBundle target, so can be fitted into existing build processes without hacking any of your downloaded packages.

  1. Add the RoslynCodeTaskFactory NuGet package to each affected project (probably just the .Desktop one
  2. Get the override target file MacTemplateOverride.targets from this gist
  3. Adjust the path to your eto.platform.mac64 version (assumed 2.4.1 in default location) as needed

  4. Add <Import Project="[path to]\MacTemplateOverride.targets" /> at the end of each affected project to load the file from where you've saved it in your solution

  5. dotnet build

Wednesday, May 09, 2018

Assembly versioning is hard -- internals just keep on leaking

I've hit a couple of instances of this in recent weeks.

Assembly versioning is meant to be a strong contract, that given two distinct instances with the same version, one can be used as a drop-in replacement for the other, e.g. as a a bug-fixing patch, in all circumstances. A sufficiently strong contract, indeed, that in my experience in building commercial product with .net, our process erred on the side of caution, and bumped the build number facet of the version every commit, even if all that had changed were dependencies.

However, it doesn't always work that way.

The first instance I hit was when Mono.Cecil finally hit 0.10 final after having been in beta for years. That had indeed preserved its public contract -- but somewhere between beta-7 and final, one of the internal APIs consumed by the symbol-reading helper assemblies via InternalsVisibleTo was expanded. Consequently, if a beta version was loaded (e.g. by a tool -- in particular the NUnit3 test adapter for .net core) ahead of the final, the result was a MissingMethodException when indirectly invoking that internal path. I specify .net core here, because the lack of AppDomain isolation is what puts the tool's use of beta-6 into the pot ahead of the system under test's final.

The most recent has been with Visual Studio 2017, which also bundles an update to the F# core assembly version, and the FSharpLint MSBuild task. Here, the F# compiler's choice of generating synthetic names for compiler generated classes by tagging them with @lineNumber comes into its own -- the new file version "2018.04.25.1" includes an internal synthetic type related to event handling called Microsoft.FSharp.Control.CommonExtensions+SubscribeToObservable@1693; in the earlier "2018.01.25.1" build, the corresponding type is Microsoft.FSharp.Control.CommonExtensions+SubscribeToObservable@1741 and asking for the former when the latter is the one on offer gets you a TypeLoadException. Here, it looks like AppDomain isolation is working against us in the other direction, with different and thus incompatible builds of FSharp.Code.dll being loaded in two separate AppDomains.

Monday, April 30, 2018

April Cycling

The winter bike ended the month on 15637.3 for 17.6 miles, the summer bike on 1177.3 for 178.8 miles, a total of 196.4 miles for the month, helped by a ride to St Ives for lunch and back on the 13th (with interesting detours around the flooded bits of busway path). And despite the rainy start of the month and the rather apocalyptic forecast for today, I managed the 30 day challenge -- albeit many days just doing the 2km circuit of the village -- without getting wet. Cold at times, yes, like today, but not wet. There was even the glorious week in the second half of the month where it was well into T-shirt weather temperatures.

The mostly cold and wet weather has meant that the gardening is way behind my expected schedule, though.

Sunday, April 29, 2018

Anime roundup '18Q1

The winter season provided a number of likely prospects, even if some did fall quickly by the wayside. In the past, I know I've done my share of complaining about loose adaptations of manga (e.g. Bokurano, Planetes), and given props to nigh frame for frame ones (Aria, Mushishi), but now I can say that there are faithful adaptations that fall into the camp of "I've already read some of this; you're just presenting the same material to me, but much more slowly". The Junji Ito Collection for example. And Hoshiiro Girldrop PopTeamEpic, too.

Known adaptations aside, the top two on the list were the obvious "Cute Girls Do Outdoor Activities" titles, Yuru Camp∆ and Sora yori mo Tooi Basho.

Yuru Camp∆ aka Laid-back Camp took as its outdoor activity camping in autumn/early winter, then rounded itself off nicely, fast-forwarding to spring, and cherry blossoms in the coda -- so (brief onsen scenes aside) it keeps the characters bundled up in many layers of insulation all the time, even inside their school building. Even though I'd describe this as a "comfy" series, that would describe the mood, rather than the actual activity. Rather, in that respect, it's definitely an adventure series, in the sense of adventure being someone else being uncomfortable in some far-away land -- my nose and toes have tended to feel chilled in sympathy while watching.

One for going on a Google Earth holiday along with, and not worrying too much about the times of sunrise and sunset (e.g. there was rather too much light in the sky at 05:00 on Christmas morning, 20 minutes before the start of astronomical twilight). Overall, no Yama no Susume, but it makes an adequate substitute. I wonder what will be the next outdoor activity to fill this niche.

Sora yori mo Tooi Basho aka A Place Further Than the Universe was rather different, being more a drama, with a bunch of loners and misfits getting together to journey to Antarctica -- some just to do something out of the ordinary rut of their lives, but one to visit the place where her mother was lost some years earlier. Of course, being loners and misfits, the girls were generally more abrasive and forthright than the usual nicely mannered cute girls we see so often. All in all, a well executed drama that could so easily have become mawkish and sentimental, but took a refreshingly different route instead. I agree with what seems to be the general sentiment in terms of sales and such that this was the best of the CGDCT titles of the season.

Ongoing, I'm watching Toji no Miko. The series may just be an advertising drive for a mobage, but it has competently set up its conflicts and delivers cute quasi-magical girls sword fighting every episode. I say quasi-magical, because unlike the real deal, this series has so far been free of yuri-baiting, despite a cast that has the same gender balance as YuYuYu did. As the obvious end boss turned out just to be the mid-boss, I now have no idea where this will end up going, but I expect it to continue to have sword fights most episodes.

Continued over and dropped, Mahoutsukai no Yome. After a burst of enthusiasm to cover a chunk of the backlog, I stalled on this one. I think it's a sign of impending plot and bad experiences with same in other initially episodic series, especially as I gather it outran the manga and went for an anime-original ending. It didn't really engage on an emotional level, which, given that I can get blurry eyed over pieces of equipment requesting specific upgrades, is somewhat surprising.

From the back catalog, I picked up Koihime Musou and sequels on a recommendation that went

Unpronounceable names, 99% female cast, big eyes, colourful hair, large knockers, spear-fights, lesbians, innuendo, nudity... THAT'S MORE LIKE IT. This is why I started watching Japanese cartoons.

It started just as silly fun -- swords and a little sorcery in pseudo-Ancient China with all the major heroes and warlords being girls -- in manner that made it surprising that it was only about 10 years old, as it feels like it ought be 20-ish -- say contemporaneous with series like BurnUp/Excess -- from the style. But from the start with trivial encounters, the final season, Shin Koihime Musou - Otome Tairan surprised me by developing on the previous seasons, telling a competent Water Margin-lite Chinese-style swords and sorcery story that could have been played fairly straight, with the bouncy bristols and the nudge-nudge jokes just leavening the mix.

As a true nostalgia binge, I dug out the first Dirty Pair Flash OVA, and realised that I have been spoiled by modern anime -- low budget now is likely to look like Kemono Friends, rather than this and its use of traditional anime tics, and quaint hand-drawn computer displays. It still stands up as a comedy-thriller once expectations are recalibrated, though.

I also massively increased my intake of SHAFT by watching both seasons of Natsu no Arashi, a comedy drama set around a restaurant that steadily accumulates a staff of time-travelling ghosts from the end of the Pacific War, and other odd folk beside.

It goes in for large doses of mood whiplash, from chili-powered fruit surprises to tragic love in wartime to dealing with expiry dates when time-travelling to reverse-trap body-swap gags... Occasionally it got into a bit of a rut, with a series of episodes on the template of "one of the staff has a secret, it might get revealed" with a side of "some random thing has been forgotten, oh it turns out that it happens later in my world-line because time-travel". While it is laden with artsy tricks -- odd vignetting, random bits of photograph, interspersed gags of the form "I forget the title of this thing I'm going to describe elliptically, but the punchline was..." in completely contrasting art style -- it managed to get away with only doing one of the signature (and irritating) head tilts, and used an art-style that wasn't the generally ugly one of the *gataris or Madoka.

All it all, despite a saggy middle, it wrapped up nicely, including a very self-aware punchline at the end.

Disappointment of the season was Darling in the FranXX. One of the two titles of the season much hyped in advance (the other being Kyoto Animation's Violet Evergarden), this one because, even though it was being done by A-1 Studios, most of the significant names on the creative team are ex-Gainax hands -- so there was a hope that this anime-original series might be a "let's sneak something into the timeline between Diebuster and Gurren Lagann" romp about giant dinosaurs attacking moving sci-fi cities protected by magical girl mechas, done with the same straight-faced insanity as previous series out of the same stable.

And it turned out to have a bunch of interesting wordplay-based ideas to sprinkle around its dystopian post-apocalytpic future, with the "dinosaurs" being named in Japanese in a way that is sounded as their word for dinosaur (lit "fear dragon"), but reads as "screaming dragon" instead; and the main cast, though only having official numeric designations, have been numbered so that one way or another -- Japan having multiple names for the numbers, and occasionally borrowing from English, too -- their numbers can be read as names (so 015 becomes *-ichi-go = Ichigo, for example). This does get self-aware at times, as the Shinji-like main character (while he does all the Shinji hand mannerisms, we can distinguish him from Shinji because a) he wants to get in the robot, and b) he's not very good at it) designated 016 is named Hiro; and the horned abomination with pink hair who is designated 002 gets the name o-ni in an Anglo-Japanese mix for 0-2 (oni, or "Japanese ogre") briefly considered and discarded.

Alas, the dystopian child-soldier setting is employed primarily for the purposes of putting a bunch of teens into the Big Brother House and going for the teen relationship dorama first, with a slight mecha vs kaiju flavoured coating as afterthought. The opening narration about the Chinese jian bird that must fly as a pair, the way the mecha are piloted with boy/girl stamen/pistil pairs (the girl's hood being both the dashboard for the mech and something looking akin to some traditional Japanese bridal veil), and the "he was a normal boy until a strange girl fell on him" beginning made it pretty clear where the emphasis was going to be, and that it was going to be all about the rocky road of Zero-Two/Hiro. (Yes, that blatant.)

I guess it wasn't helped by my taking a dislike to the mains, but I put it on the shelf after the first couple of episodes and have been watching the fireworks of the inevitable red/blue battle from the outside, which has proved way more entertaining. Finding out later that, as the director's "passion project", it actually played into his fantasy of being seduced by an older delinquent girl transfer student, cements my feelings, as it seems to have evolved into a blue-pilled romance fantasy of taking a carousel-riding ho ("a hundred stamen, maybe more") and turning her into, well, not quite a housewife, but at least a life-companion, with added "power of love" power-ups for their already OP mech.

So, yes, that's quite how frustrating a series that one is.

Wednesday, April 18, 2018

Fingernail moon

The clear evening sky is showing a 53 hour old crescent moon. Not a personal record, I think, but close. Venus emerged shortly after, lower in the sky, to the north.

Sunday, April 01, 2018

March Cycling

The winter bike ended the month on 15619.7, a grand total of 137.3 miles for the month, a touch below last month, and only about half what I did last year, between fortnightly bursts of winter (start, middle and end of the month) and this year having no need to use up leave by the end of the quarter, so no cycling holiday while the weather remains dubious.

Tuesday, March 06, 2018

February cycling

The winter bike ended the month on 15482.4, a grand total of 141.7 miles for the month, twice January's figure, and almost as much as last year -- indeed, had Siberia not vomited out the "Beast from the East" at the end of the month (sub-zero days with some snow lying into the start of March), cancelling an event I would have gone to on the 28th, I would have exceeded last year's figure. While it's not yet riding for pleasure weather, the majority of the month was mild with hints of spring, and dry enough that having finally resumed my gym membership after many years' lapse, I could do my cardio/warm-up on the way there.

Thursday, February 01, 2018

F# under the covers XVI -- Constructor weirdness

Occasionally, even in F#, one needs to do OO stuff, like implementing a concrete subclass of some abstract framework type to feed into some other framework API. In my case, I recently needed to add a SerializationBinder to a BinaryFormatter to handle assembly versioning.

So of course I wrote

formatter.Binder <- { new System.Runtime.Serialization.SerializationBinder()
  with member self.BindToType (a:string, t:string) = ... }

which worked perfectly happily, but threw up a warning from Gendarme about suspicious recursion in the constructor.

So I decompiled the type to find it looked like

[StructLayout(LayoutKind.Auto, CharSet = CharSet.Auto)]
internal sealed class ReadResults@64 : SerializationBinder
 public ReadResults@64()

 public override Type BindToType(string _arg1, string _arg2)

or, as IL

.method public specialname rtspecialname 
 instance void .ctor () cil managed 
 // Method begins at RVA 0x3ce0
 // Code size 9 (0x9)
 .maxstack 8

 IL_0000: ldarg.0
 IL_0001: callvirt instance void [mscorlib]System.Runtime.Serialization.SerializationBinder::.ctor()
 IL_0006: ldarg.0
 IL_0007: pop
 IL_0008: ret

Writing the type as an explicit class, like

type UpdateBinder () =
  inherit System.Runtime.Serialization.SerializationBinder()
  override self.BindToType ...

yields exactly the same sort of IL.

Revising the class yet again as

type MonoTypeBinder (``type``:Type) =
  inherit System.Runtime.Serialization.SerializationBinder()
  override self.BindToType (_:string, _:string) =

because I only have one type of interest, did produce the expected decompiled constructor, looking like

public MonoTypeBinder(Type type)
  : this()
  this.type = type;

even though the actual IL just adds the field assignment

IL_0000: ldarg.0
 IL_0001: callvirt instance void [mscorlib]System.Runtime.Serialization.SerializationBinder::.ctor()
 IL_0006: ldarg.0
 IL_0007: pop
 IL_0008: ldarg.0
 IL_0009: ldarg.1
 IL_000a: stfld class [mscorlib]System.Type AltCover.MonoTypeBinder::'type'
 IL_000f: ret

However, now we've changed the signature, the call no longer looks like a recursion. And, for once, this is a case where the virtual call in a constructor is safe.

By contrast, a C# equivalent

class UpdateBinder : System.Runtime.Serialization.SerializationBinder
        public override Type BindToType(string a, string t)

generates a default constructor with IL that makes a non-virtual call to the base type

IL_0000: ldarg.0
  IL_0001: call instance void [mscorlib]System.Runtime.Serialization.SerializationBinder::.ctor()
  IL_0006: nop
  IL_0007: ret

and the call remains non-virtual when adding a constructor argument.

January cycling

The winter bike ended the month on 15340.7, a grand total of 71.9 miles for the year to date, or about 2/3 what I did last year. The difference is that this year I didn't feel the need to do a "get the miles in" ride on the 1st, because, apart from that, I ended up doing as many trips out to the Science Park as I had done last year. It's just that this time the rides were entirely dedicated to going out for pub lunches with former colleagues, with none of the bother of putting hours in in the office either side.

Wednesday, January 10, 2018

Anime — 2017 in review

Unfinished business from 2016 included ClassicaLoid, which vanished from the Crunchyroll roster before I got back around to it (not that they'd picked up the second season either); and the The Ancient Magus' Bride OVA, which had a poignant little digression that ultimately went nowhere, and a final few minutes of non-ending. Overall, a bit of a mess of wasted potential, as it didn't seem to know what it was actually trying to achieve.

Main course

As for things started new for the year, I did as much, if not more raiding of the archives and rewatches as I did new material.

For lack of a new JoJo, I took the opportunity to fill the Saturday Morning Cartoon slot with Mobile Fighter G Gundam, thereby making up a significant gap in my anime experience, now that I can see quite how many references to it there are in fan material.

Being in many ways Gundam in name only does help distinguish it from the other AUs -- it's not a pretty-boy series like Wing, for example; nor is the masked guy a Char (his Gundam isn't even red!). In fact my original impression was that it was more a magical girl boy series, what with the henshin scenes and all. Or, should I say, a tokusatsu/wuxia masked martial arts fighter series, what with the way that the fights were often rendered as if man-in-costume.

The story is clearly the result of some editorial interference, trying to sustain both a quest for revenge and a tournament setting which provides a lot of the gratuitous fight-of-the-week material, as well as interrupting the plot for quite a while after the midpoint.

Surprisingly, the mid-point was marked by the one fanservice episode out of nowhere, perhaps to make up a quota. Also, as a bit of a surprise, we can tell it's the future, as there are no fair-haired Scandinavians left, Allenby, with the blue hair, coming the closest out of a cast with a strange lack of anime hair colours.

For B-features, the first series I picked up was 2016's Magical Girl Raising Project, another magical girl boy series.

The series turned out to be Walmart Madoka meets Battle Royale, with the notional MC being a mostly useless limp dishrag. The fights turned out to be satisfactorily bloody, and at times quite clever, and there were enough characters that one could be happy to see take a pounding finally receiving one. Better, there was enough of a tie-it-all-up ending that it didn't feel like just a trailer for the LN series (something which I had been dreading).

Next up was Minami Kamakura Girls' Highschool Cycling Club, which was a a fairly decent "cute cycling girls doing cute cycling things" series with "School Club (survival of)" plot, rather than either pure CGDCT on the one hand, or sport on the other, and one that flew completely under the radar while it was airing. Like Yama no Susume, this was as much a PSA for cycling, with practical cycling advice (both in the story and in the post-ED live action sequences).

There was less about hill climbing technique that I would have expected, even though there was a fair amount of it involved, because Japanese terrain -- something that contrasts with Yama no Susume, as the lure of actually being on the open road with a bunch of cute Japanese girls was lower. At least with the journeys being on-road, there's a chance that some of the routes covered are actually there on Google Street-view to tour virtually, rather than it just showing the start of an mountain path.

This was also one of those series where you know you've watched too much anime because you start to recognise pieces of Japanese scenery -- major landmarks like Mt Fuji, the (Neo-)Tokyo Tower and such excluded -- from earlier titles you've seen (this one being set one town along from Tsuritama, concluding with the young ladies from the post-ED sections riding out from Kamakura to sample an Enoshima Bowl in wonderful February weather).

To the extent that there are any surprises in the series, the OP is somewhat spoilerific; OTOH, it also gives more prominence to some of the peripheral characters than they get in the show, so the level of wacky anime clich├ęs out of the 1990s is lower than one might at first fear.

Continuing with recent series, after it had started to get some surprising buzz I went to see what the deal was with Kemono Friends

On the surface, is just cute fluff, with the usual Japanese habit of turning anything into cute girls on full display -- but it's also quite clever in its handling of Bag-chan's unusual nature, compared with the other denizens of Japari Park. And as an advertisement of Japan's various zoos, with all its cute and happy animal girls, Kemono Friends was not the sort of place that one might have thought to find a sample of the cosy catastrophe genre.

This was a series that had started as a low budget, belated rescue attempt for a failing mobage but succeeded because of sensitive direction, and I think it worked well, on account of being so essentially innocent throughout.

No account of the series can be complete, though, without mention of Grape-kun, the elderly penguin who had lost his mate, but managed to brighten his final months by courting the cut-out of penguin idol Hululu that had been placed in his enclosure as part of a cross-promotion.

And next, something completely different.

There has been a fad in recent years for the isekai ("other world") story, in which a hapless Japanese teen steps in front of a truck and wakes up in a JRPG world. Youjo Senki (lit. "(Diary of a) Young Girl's War", but officially The Saga of Tanya the Evil) is a somewhat different sort of isekai, in which a Japanese sarariman gets pushed in front of a train by the worker he's just fired, is taunted for his lack of belief by "Being X" during a moment of halted time, to wake as a baby girl in a not-quite 1920 Germany.

As a veteran corporate weasel, Tanya Degurechaff is wily enough to seek a quiet life in a country that's fighting some mix of WWI and WWII; but is too magically powerful and too well versed in appropriate strategy for this kind of war, so ends up in the heat of combat -- and being tormented by Being X at every turn.

The wartime adventures of a crazy sociopathic duck-faced little girl amongst a cast of normal looking men, in her battles both mundane and spiritual, are surprisingly darkly humorous. But, being an adaptation of the start of an on-going LN, it ends roughly after the equivalent of Dunkirk, with more to come, and an on-going mundane adversary just established (called Mary Sioux (... you what? That just has to be deliberate, doesn't it?)).

Delving back a few years, I picked up Fafner Exodus on the strength of a WEG (Watched YuYuYu, Expected Madoka, Got Fafner). This is me getting on the train after the first series, plus prequel and sequel OVA/movies, but it worked well enough, even though I'm sure I missed a lot of the callbacks -- though in practice, I think that the rampant Hirai sameface would have caused about as much "Now, which of the characters is this?" even if I had started at the beginning.

The YuYuYu comparisons were easy to make even at the beginning, starting with the base of a shielded island forming a sanctuary against alien monstrosities destroying human life beyond. And then it mounted -- by the end of the first cour, the new pilots had definitely sange'd, and by the 3/4 mark we had reached mankai matsuri and "It will get better, soon."

It's was a pleasant surprise to see that, in amongst all the UNDERSTANDING (as in any post-Gundam mech show), some of the characters were prepared, when the chips were down, to kill people, as well as the Fungroids from Outer Space. And get over it, too.

All in all, even without getting some of the clear references to earlier material, it was a decent enough magitech robot show with an ending that wasn't too badly handwaving cod-mysticism -- and left a wide opening for an S3 some day. I guess it was no accident that the uber-mech, Mark Nicht, had the same colour scheme as Evangelion Unit 01.

I also watched Appleseed XIII, a series which went completely under the radar back in '11. It was a competent Appleseed pastiche, decorated with occasional sequences that seemed familiar from the manga.

To my delight, it didn't rehash the same spider-tank story that was used for the '94 OVA and every movie since; and as such is probably the best adaptation since the original OVA, for all that it is really Appleseed:SAC 2nd Gig. The spider tanks did wobble briefly onto the stage -- as a "you remember when..." --in the last episode, which did for the most part directly take from a section of the manga -- except where it went completely bananas near the end. Surprisingly that particular episode doesn't seem to have been a DVD-release special.

The machinima style of animation, especially the hybrid of calculated shading and hatching in the textures could get a bit janky at times, but the designs were all faithful to the original, albeit sans the occasional lapses of that original into SD. Sans also the various bits of fan-service from the original.

The adaptation turned down Deunan's level of cast-iron combat bitch to a low setting (it was quite erratic in the manga), and succeeded in making her a more plausible overall female, once the early bout of anime-enhanced Daddy issues died down.

Then, to finish up the year, having taken up Amazon Prime on the 30 day free trial for my Christmas shopping, I watched YuYuYu S2.

Having read the Washio Sumi LN around the time that YuYuYu was airing, the animated version that formed the first half of the series took the rather sparse (and, in the fan translation, fairly directly rendered) prose and treated it as a rough working draft, embellishing it based on a couple of years' development of the setting.

Of course that's as much to do with the LN being very light on the descriptive text, leaving a fairly blank canvas for the anime to fill in, from the ritual defences on the Great Seto Bridge to the wounds we see the girls bear -- this is not the Year 300 Hero System with fairies to take the bullet -- as well as embellishing the weapons the girls wield, and their henshin sequences as well (this was the first time I've seen a magical girl adjust her outfit mid-henshin).

With the WaSuYu section released as three movies, there was some reshuffling with episode 3 (of 6) pulling in part of chapter 5 (of 8), as well including new material in a light-hearted mood (as one might expect from a script writer who counts Seto No Hanyome and Carnival Phantasm amongst his previous credits) to move the end of chapter 4 to also be the end of episode 4 (2nd movie). Even so, the final episodes managed to cover the remaining half of the LN with only one significant SoL scene dropped out, while also expanding the battles, with Sonoko's mankai matsuri being against a bigger threat than the LN had laid out, to take advantage of the change of medium.

There then followed a one-episode recap of season 1, for the new-comers; though with the occasionally "electronic brain pancake crystal elderly"-tier nature of the Amazon subs, I'm sure that most of what was going on would be lost if you hadn't been following the whole Yusha de Aru franchise, when things went full throttle into the six episodes of sequel -- including a "what happened behind the scenes" for the S1 ending.

It was interesting in that this section was really the first time in any of the YuYuYu part of the franchise that we'd actually been privy to any of the title character's introspection.

But then things started to come tumbling down, and generally going full End of Evangelion, including spontaneously disintegrating cultists when their ritual comes to a head. And it's really no spoiler nor surprise when, the threat revealed, Yuuna punches everything into daijoubu -- or as best can be achieved in the circumstances.

The main issue I had was that, like the first series, the ending was done in a rush -- an extra episode would have let it breathe, rather than being a psychedelic kaleidoscope and a slide-show towards the end; and then it could have been great, rather than very good. I should also have twigged that Truck-kun was a Vertex long ago.

Side dishes

No, not that sort. Titter ye not!

Having started to read the translations of Legend of the Galactic Heroes that had built up on my to-be-read stack last year, I've also begun a third pass at watching the series, after having gotten distracted in the mid-teens of episodes on previous goes.

The first volume matches the substance of the first 16 episodes, though the OVA has episodes not found in the book. Things escalated very quickly at the end of the second cour with book 2 being the end of episode 28, but then seemed to drift off into being Lex Luthor's Galactic Scheming for book 3 (up to episode 35) where I'm currently parked, with books 4 and 5 still in my in-tray.

Having quite liked the first series, I also tried Gatchaman Crowds Insight but I just didn't feel it; rather than being Hajime vs the Establishment, Hajime is just part of the Establishment now, and the new characters weren't carrying it, so I dropped it at that point. The new characters are bland, and take up too much of the time; and a serious incident of UNDERSTANDING on Rui-Rui's part didn't help either.

The main new show to catch my eye for the autumn season was TWOCAR (having picked up nothing from spring or summer). Being an unusual sport, with a bonus feature of plenty of scope for girls in leathers, it was the sort of thing that had promise -- if only it had stayed concentrated on the sport, at least as much as, say Minami Kamakura GHSCC did.

In practice, it was actually quite disappointing on a 3-episode trial and drop. Not only did it seem to have opened with the big race, with the subsequent episodes being a flashback, there's way too much dorama and not enough actual competitive riding. The main character team (as much as there is one, with each episode so far being a team back-story) also have the fairly unsavoury motivation of wanting to win the prize of an entry to the Isle of Man TT because they're both hot for teacher and he left the school to compete there already.

I've also started the TV series of The Ancient Magus' Bride, and 4 episodes in, I'm finding it is very shoujo, in both the continued use of SD and otherwise exaggerated style in the comedy moments (as in Yona of the Dawn), and also in its Fifty Shades... style of the heroine being bound into service of this mysterious master as a kind of a Beauty and the Beast thing. Still, it has been going more into the "encounters with the Good Folk" territory that the OVA teased and never quite delivered on.

Considered thus as a way-more-shoujo Natsume Yuujin-cho (itself also shoujo) or Mushi-shi, it's been adequate at this point, but it's not been drawing me in (possibly due to the unfair competition from YuYuYu). I also hear, worryingly, that it has a story developing -- too many series are perfectly fine when they start as being episodic with scene setting, and then fall flat on their faces when the LOL!plot emerges about 3/4 the way through (RD Sennou Chousashitsu and Otome Youkai Zakuro being a couple of examples of this effect).

That would be bad, because it has things the apprenticeship and managing your Sleigh Beggy which are the sort of background elements that can be spun indefinitely for flavour, and the "helping the Church" could be an on-going reason to go find the mushi/youkai of the week, also without anything more than establishing the setting.

I probably haven't watched quite enough recent titles to get all the references in Animegataris, but it may be silly enough fun to give a second chance. It will depend on the ratio of whimsical out-of-folklore elements to gratuitous onsen scenes in the the all fox-girls all the time Konohana Kitan whether that one continues -- but I've only tried an episode of either so far.

And in a blast from the past, ten years on, having another go at Lucky Star, and what I found bland and somewhat tedious (or even grating in the case of Lucky Channel) in 2007 is just being pleasant fluff. I had forgotten to quite what extent "all they do is talk about food" characterised the first episode, but after five episodes (a new high-water mark), it remains the most successful pure CGDCT series for me (usually getting to the first mid-episode commercial break is a struggle). The "I buy sausage" OP is still a musical car crash, though.


Apart from rewatching AKB0048 (still as fluffy and sappy as before), I also rewatched the first half of Rozen Maiden S1 (as cute as ever), and as an experiment, started on Haruhi to see how things had changed since I obviously didn't get it in 2006.

This time I could appreciate the credits for the Adventures of Asahina Mikuru, but I was surprised at my quite visceral reaction to Haruhi when she started doing her thing in the next episode. I found that I had to skip a chunk of episode 3 (had this been a 2016 series, being watched for the first time, it would have landed with an audible "splat!" when I dropped it about 1/3 the way in to that episode), and that episode 4 (The Boredom...) was pretty boring due to having already seen (a decade before) what was being alluded to in the callbacks to the as yet unseen but internally-chronologically earlier events, and the rest of it failing as comedy. Eight years being a long time on the internet, the most amusing thing by episode 6 has been the contrast between Kyon's struggle with the club web-site and the frictionless upgrades of the Brave Clab[sic]'s.

The contrast with my re-appraisal of Lucky Star could not be greater. Clearly, I still don't get it.

Monday, January 01, 2018

December Cycling

Up to 15268.8, 998.5, 217.0 = 100.9 or 2226 miles for the year; 900 miles on the winter bike, 1000 on the summer bike, 100 on the folder, and the rest on holiday bikes. A slow month, mainly because the only times I got on my bike was to go to the pub, and on the couple of nice days in the last week, I pottered in the garden instead of putting in miles. The two snowfalls (the first of which would have been a WFH snow day if I were still working), and frequently wet and windy weather for most of the month didn't help lure me out.

Let's see what 2018 brings.

Saturday, December 16, 2017

Waning Moon

Spotted the decrescent moon at 07:50, a fine arc in the lightening sky, 46h40m from new. I think that may be a personal record.

Saturday, December 09, 2017

Announcing AltCover

Now I have time to myself, and the season doesn't lend itself to outdoor activities, I can start dusting off my various coding projects and devoting the time and energy to those that I used to expend for pay.

First off the block is AltCover, an alternative code coverage tool for .net and Mono.

This is a project I started back in the dark days in the spring of 2010, when changes in the profiling API of the new CLR 4.0 release meant that the old freeware NCover 1.5.x series no longer functioned. For some considerable while, the only FOSS alternative that worked with the new CLR (by instrumenting the code under test before execution, rather than on-the-fly) seemed to be an initial proof-of-concept on CodeProject.

At that point, I'd been looking for something non-trivial to work on that would provide the opportunity to use F# to build up my fluency in the language; and so the obvious thing to to was to re-implement from scratch and extend to cover such gaps as I found in its functionality when trying to use it as a near drop-in replacement for the now non-functional NCover version.

After some considerable interval and a failed dalliance with PartCover, including my first contribution to a real FOSS tool, but never a resolution to one real sticking problem, where it looked like JITting across assembly boundaries was causing executed lines to not appear in the coverage, I shelved my work in favour of the off-the-shelf OpenCover, where I could intermittently contribute enhancements to cover personal pain points.

Why have I dusted it off again now?

Well, for much the same reasons as before; a non-trivial project that does answer some pain-points (Mono and probably the new dotnet core amongst them) that OpenCover's necessarily intimate relationship with the runtime makes difficult. And it provides a reason to play with new toys that have grown up over the last few years, like Fake for builds, and the generous provision of CI tools to FOSS projects so people can take builds rather than having to roll their own.

Tuesday, December 05, 2017

The first day of the rest of my life

Well, that's it. I'm now no longer in employment, so that means I'm sort-of retired, now.

Damn, that's a big backlog of things I've got queued to do!

Sunday, December 03, 2017

November Cycling

Up to 15167.9, 998.5, 217.0 = 187.1 (YTD 2126 miles), with no weather stopping play breaks from the usual two commuting days a week, even despite the cold snap at the end of the month.

Amusingly, in discussion with colleagues over miles logged this year, the slow-but-steady accumulation of commuter miles through the year, combined with the disappointing summer weather, means that I've ended up ahead of many of the keen recreational cyclists who hadn't yet reached the 2000 mile mark (though that's still way, way behind those who commute almost every day and do recreational cycling on top).