Saturday, 17 March 2018

Porting Inversion part 2

Looking towards TCR from Euston
Things have progressed and I think it’s time to write up and highlight a few items.

Choices of what to port

There are some things which I have chosen to abandon for now. These include my Inversion.Web.Razor extensions in inversion-razor, and the ConfigurationHelper and Pipeline models for service containers in Inversion.Extensibility.

In the case of the Razor extensions, I think I will need to rewrite this entirely in light of the AspNetCore support for Razor. I’d much rather be integrated with that than remain off-piste with Antaris RazorEngine.

Regarding ConfigurationHelper and Pipeline interfaces, the configuration options are so starkly different in .Net Standard, and so much easier to deal with, that there’s no point having a shim to pull configuration from a database etc when the new methods are so much more accessible.

Publishing to NuGet

I’m not sure which sociopath designed the web UI for NuGet, but they need their head examining; they’re clearly insane. It’s not quite as bad as the Visual Studio interface though, at least.

Having fought through the various stuff it puts in your way to prevent you getting a clean package uploaded, the various repos - inversion-dev, inversion-data, inversion-data and inversion-messaging - have been made available. The assemblies that make up those repos are available separately in order to keep project tech hierarchies segregated, e.g. Inversion.Data base library is separate to Inversion.Data.AmazonSQS which is separate to Inversion.Data.Redis etc. Don’t cross the streams unless you have to.

The versions are in the 1.0.x range and the references of child packages to their parents are currently set to 1.0.* as I was pretty shocked how stupid the management of minor versions was in the NuGet CLI. Anyway, working now.

GitHub organisation

The main libraries are now under the newly formed inversion-org GitHub organisation -

Guy, Rob and myself are owners.

Here you will find:

The main Inversion library hasn’t moved yet but this will be its home in the future. You can still find it here:

Other libraries, such as Inversion.Ultrastructure will also be moved into the organisation shortly.

Adding Travis automation

Some Travis automation has been added to build and publish the NuGet packages, which it does sort of blindly as it doesn’t check first if the version already exists and so seeks forgiveness rather than permission when it fails to upload. I suppose there might be ways to automate incrementing the patch number on the .csproj file, but at the moment it is manual.

Things to do next:

  • add unit tests (with automation for commit status updates)
  • test the libraries work!
  • create basic application that uses the libraries via NuGet and can be deployed as a container

Sunday, 4 March 2018

5 - 8 Rooms - Angina P

IDM, minimalist d’n’b

8 Rooms - Angina P

I think I first came across Ulla’s work on MySpace, a very long time ago. It was during the period when musicians in the same network would find you and then in response you would place hastily photoshopped “thanks for the add!” messages on their boards, carrying band and EP names, and it was all one nice music party, plus a bunch of emos and the worst CSS in the world. I fucking miss MySpace.

Anyway, I found some of her tracks via MySpace and some via (yes, really) which carried “Tokyo 6pm” into my ears and I was lost instantly.

In truth, I’ve already reviewed this album, although I can’t remember exactly who it was for (maybe for her label, Notochord?) It was providing a soundbite synopsis that pretty much said that this is crystal-sharp IDM and complete headphone-fuel. I meant it back then and I still mean it today.

There’s space here - open and modern like stark and hard white-grey architecture - but it’s a space filled with details that are reminiscent of Japanese technical design and wonderful emotive sweeps. Framing this is a real perfectionist focus on complex layers of accurately scattered percussion. These combine to make this one of my favourite albums, let alone IDM, providing what I generally term “coding music”. This describes tracks that for years I hadn’t identified a genre for, but eventually worked out were something along the lines of tech-step jungle and complex, minimalist drum’n’bass.

“Destroy you, with my robots”

Three of the tracks are remixes and are extremely high quality, making wonderful companions of the originals and blending right on in with the whole album. Semiomime’s remix of “Known Issues” makes me think we might be related as they know exactly what sort of drums I like.


  • Glitter - this was my ringtone for ages until I hit the Mirror’s Edge soundtrack by Solar Fields
  • Known Issues (Semiomime remix)

Thursday, 1 March 2018

Porting Inversion

Aldgate somewhere

Just recently I have been porting the Inversion libraries over to .Net Standard, such that they will be able to support the existing set of behavioural applications that make up the image delivery part of the Digital Library Cloud Service (see

To do this I received some initial help from Robert Stiff (@UatecUK) to prove that the basics would work in the new execution environment, since it is vaguely exotic, having been based around the Reactive Extensions for .Net. Once we had ported the OWIN-based hello-world website across, I was convinced that I would be able to port across almost the entire application.

Last weekend I set about taking the ported versions of the libraries in, giving them some basic metadata and publishing them to NuGet as .Net Standard 2.0 packages (and yes, I have Guy’s explicit permission to do this). This included the new web code that Robert and myself tested the proof of concept with which has been added as the Inversion.Web.AspNetCore package.

Next, I ported and published the libraries in Inversion.Data ( into separate NuGet packages. This means that the different storage dependencies will remain separate in a target application.

Inversion.Extensibility ( was ported and published next, with a separate package for Inversion.Extensibility.Web.

Finally, I ported Inversion.Messaging ( and packaged it separately, just as I had done for Inversion.Data.

It should be noted that each of these repositories has a separate "dotnetcore" branch for this code.

Things to do next:

  • add unit tests
  • add Travis CI scripting to build, pack and publish to NuGet
  • test the libraries work when imported!