Outbreak Labs

I can do anything I want to. And so can you.

Marathon client library for .NET

Today I've published my C# client library for Marathon, a container orchestration platform for Mesos and DC/OS.  The API coverage is extremely minimal at this time, exposing only the functionality I need in my other projects, but you may find it useful too.

Get the source code on GitHub or download the package on NuGet.

Simplify your configuration with ConfigureAll

I've been using the new Options pattern for configuration in my .net core apps. I like it, but got tired of having to write lines like  


every time I added a new configuration class. I've written a library called ConfigureAll to address this inconvenience. With this library, you can add an attribute to your configuration classes indicating their configuration key, like 

    public class FrobOptions
        public string TestValue { get; set; }

then just call

services.ConfigureAll(this.GetType().GetTypeInfo().Assembly, Configuration);

once, instead of having to configure each type individually. For more information, see the GitHub page: https://github.com/SapientGuardian/SapientGuardian.ConfigureAll

BaseNEncodings.Net Retargeted to .NET Standard 1.1

I've been a long-time user of the WallF BaseNEncodings.Net library. It's the only library I'm aware of that was explicitly built to RFC 4648. I submitted a pull request to retarget the library to netstandard1.1, but received no response from the author. While I had hoped the project were still maintained, that seems not to be the case. To that end, I have forked the library and republished it. The new repo is https://github.com/SapientGuardian/BaseNEncodings.Net. Happy Encoding!

Live Patching of Cisco Webex to Stop the Popup

The company I work for recently started using Cisco WebEx, an online collaboration application. It's been configured with a rather annoying behavior - upon completion of every meeting, it launches our company web page in my browser. This is, of course, the last thing anyone would want to do after the conclusion of their meeting.

After diplomacy with the IT department failed, my first attempt at stopping this was to patch the WebEx binaries to remove the offending routine. This was successful, but the module was overwritten by some sort of auto-update process after a few days of use.

To avoid having the patch inadvertently removed, I developed a small Windows service that waits for WebEx to be launched and patches it in memory to remove the code that spawns the popup.

I have uploaded the source code to the service at https://github.com/SapientGuardian/WebExPopupKiller for anyone curious as to how to write such a thing.

New release and location for .NET Core port of MySQLConnector/Net

Back in October, I released a port of MySQL Connector targeting dnxcore50 (at the time, this was the moniker for .NET Core). It had just enough functionality to do what I needed, had no running tests, and didn't conform to the expected interfaces of new data providers - so it couldn't slot in to any ORMs. I upgraded it to target netstandard 1.5 when RC2 came out, but didn't do much with it other than that.

Over the past two days, I've had contributions to get CI builds running through AppVeyor and a large PR that retargeted to netstandard 1.3, which meant it could be built for other platforms too. Builds are now automated and on NuGet. The open source machine is working!

The repo has been relocated to https://github.com/SapientGuardian/mysql-connector-net-netstandard

LibPacketGremlin is Open Source!

The full source code to LibPacketGremlin is now publicly available, including all of the wireless decryption work that I've posted about in 2014. It is also available as a NuGet package, for use in your own software. My hope is that other developers will want to contribute to this project, but even if they don't, having this code in the public domain will allow me to release some of the other projects I've been working on that use it as a base.

EasyNetQ on CoreCLR / DNXCore50, removing port of Protobuf-net

Disappointed with the seeming disinterest of the official RabbitMQ team in supporting CoreCLR, I was pleased to see that someone had gone and done it themselves. The logical next step once we've got the base RabbitMQ client available is to port EasyNetQ. I've done just that: https://github.com/SapientGuardian/EasyNetQ

I'm also pleased to note that there's an alpha build of Protobuf-net that's at least as good as the one I had going, so I've removed my fork from github so as not to confuse anyone into thinking it had value at this point.