K Cartlidge

C#/DotNet. Go. Node. Python/Flask. Elixir.

DotNet projects

I've developed with C# since 2001; it's my bread and butter. Most stuff is either enterprise or commercially sensitive, but I do have some open source projects.

My NuGet packages are available here.


Simple, efficient, and tested DotNet Core database migrations supporting multiple database technologies (by simple provider plugins - currently MySQL/MariaDB and Postgres).

Source - NuGet


Generate a DotNet (C#/EF Core) data access repository project from a Postgres database.


Commit List

Get a nice readable commit summary for multiple repos over the last x number of days, optionally filtered by author.



Easy argument parsing for .Net applications (Core 3 or later). Uses fluent-style declarations for strongly-typed options (compulsory or not) and boolean flags, and has built-in help text rendering.

Source - NuGet


Implementation of a generic GapBuffer. For it's ideal use cases, this can be up to 1,500 times faster than a List.


Generic Markov chains

Simple pattern 'learning' with Markov chains. After repeated 'repeatable' events, it is able to generate more of those repeatable events that follow a similar frequency pattern. Useful for things like generating English-looking random text or making the best chess move after training across chess game histories.



Extract structure from any text using a generic lexer.

Source - NuGet

Interface implementation locator

Fetches all current-assembly implementations of a given interface dynamically without needing full-blown IOC containers.


Mob Time

A mobbing or meeting timer (also fine for Pomodoro) for the Windows desktop. There is also a direct download from the latest Release build within the repository.

Source - Release

Filesystem change checker

A polling-based alternative to the DotNet framework's file watchers - this isn’t subject to the double-hit issues caused by programs like Notepad hitting a file twice (once for the content, then again for the file attributes).