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 way 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 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 an 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).

Monday, November 13, 2017

October Cycling

Up to 14984.7, 998.5, 213.1 = 138.5 + 3.5 miles off-meter + 90.3 on the usual cycling holiday = 232.3 (YTD 1939 miles), again, better than I'd been doing most of the summer, with the excuse of a pub crawl around the Stour valley helping. More windy than wet, this month, and continuing mild.

Clearly a busy throughfare

For once, I went through the weird country between Dedham and Stoke-by-Nayland, rather than going around up to Hadleigh, and reminded myself of why I rarely take that route -- crossing the B1068, the road becomes almost disused, and is a long grind of a mile or so on uphill on a decaying surface.

Thursday, October 05, 2017

September Cycling

Up to 14846.2, 998.5, 213.1 = 139.9 + 55.6 + 7.5 miles off-meter == 203 (YTD 1707 miles), better than I'd been doing most of the summer, and in a month where the weather was bad enough that I got severely soaked a couple of times -- but also a month in which I did actually find space for one ride just-for-fun, even if that one ended up dodging showers all the way.

Thursday, August 31, 2017

August Cycling

Up to 14706.3, 942.9, 213.1 = 19.4 + 160.7 + 6.8 == 186.9 (YTD 1504 miles), slightly less than last month, with the weather staying less than summery up to almost the end of the month (and an unusually hot dry Bank Holiday Monday). The basic 4x40 miles/week commute was the backbone, with some side trips on the other bikes, mostly business, only one being a "stretch my legs on a summer afternoon" leisure ride.

Wednesday, August 02, 2017

July Cycling

Up to 14686.9, 782.2, 206.3 = 0 + 143.9 + 43.4 = 187.3 (YTD 1317 miles), in a month where the summer weather ended early, and where rides on holiday being instead of, rather than in addition to, the miles I normally commute in a week.

Peddars Way

As you can tell from the photo, the weather was already on the way downhill in the second week of the month, leading up to our driving home in the rain on St Swithin's Day.