Skip to content
View sdcondon's full-sized avatar

Highlights

  • Pro

Block or report sdcondon

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
sdcondon/README.md

Hi there! 👋

I'm a professional developer from London in the UK. C# is my go-to language these days. My day job typically involves fairly standard enterprise back-end rigamarole - Web APIs, messaging, cloud platforms, databases, and such. My personal time interests tend to be a little more algorithmic in nature, as is hopefully evidenced by the repos you'll find here. Below, you will find a somewhat categorised overview of the most interesting public ones.

Testing

  • FlUnit: A .NET test framework in which tests are defined with a fluent builder. Higher base level of complexity than method-based frameworks, but makes writing succinct, expressive tests (especially parameterised tests) a breeze. No more "arrange, act, assert" comments needed to clarify your test structure, and no more awkward attribute-based test argument retrieval. I use it for all of my other projects, and while its not exactly taking over the world, download counts on NuGet suggest that at least some other people like it too:

AI and AI-adjacent

  • NuGet version (SCClassicalPlanning) SCClassicalPlanning: Basic but fully functional and documented classical planning implementations for .NET. Somewhat influenced by chapter 10 of "Artificial Intelligence: A Modern Approach" (Russell & Norvig).
  • SCFirstOrderLogic: Basic but fully functional and documented first-order logic implementations for .NET. Heavily influenced by chapters 8 and 9 of "Artificial Intelligence: A Modern Approach" (Russell & Norvig).
    • NuGet version (SCFirstOrderLogic) SCFirstOrderLogic: Defines a model for first-order logic sentences - in both raw and CNF forms. Also contains some logic for sentence creation, manipulation and formatting, as well as some data structures for term indexing. Finally, contains some abstractions for knowledge base types to implement.
    • NuGet version (SCFirstOrderLogic.ExampleDomains) SCFirstOrderLogic.ExampleDomains: A few simple first-order logic domains declared using the models found in the SCFirstOrderLogic package - for use in tests and demonstrations.
    • NuGet version (SCFirstOrderLogic.Inference.Basic) SCFirstOrderLogic.Inference.Basic: Some (very) basic inference knowledge base implementations built on the model defined by SCFirstOrderLogic. Not appropriate for use in anything resembling a production scenario, but could be useful for learning and experimentation.
  • SCPropositionalLogic: Precursor to SCFirstOrderLogic. Basic but fully functional and documented propositional logic implementations. Based on chapter 7 of "Artificial Intelligence: A Modern Approach" (Russell & Norvig).
  • SCGraphTheory: There are obviously a large number of graph theory implementations out there for .NET. None of them really grabbed me though. In particular, I think graph theory is a domain that benefits greatly from a completely separate abstractions package - and it looks like mine's the only one out there that does this. Also perhaps worth noting that one of the most popular (QuickGraph) doesn't seem to have an abstraction for vertices. Which I thought was odd. There's probably a good reason, and I didn't spend very long looking at it, but.. in the end I fancied creating my own, underpinned by a nice, simple, separate abstraction.
    • NuGet version (SCGraphTheory.Abstractions) SCGraphTheory.Abstractions: Abstractions to facilitate graph algorithms that don't depend on a particular graph representation
    • NuGet version (SCGraphTheory.AdjacencyList) SCGraphTheory.AdjacencyList: Adjacency list implementation of the interfaces in SCGraphTheory.Abstractions
    • NuGet version (SCGraphTheory.Search) SCGraphTheory.Search: Search algorithms that work against any implementation of the interfaces found in SCGraphTheory.Abstractions
  • NuGet version (SCSetTrie) SCSetTrie: A few set trie implementations for .NET. That is, data structures for the storage of sets that facilitate fast retrieval of subsets and supersets of a query term.

Graphics

  • MyOTKE: I got interested in how OpenGL worked at one point, so I made this. A very basic .NET graphics library built on top of the Open Toolkit.
  • NuGet version (SharpFontStandard.Runtimes.WindowsOnly) SharpFontStandard.Runtimes: SharpFontStandard is a managed wrapper for FreeType. For it to work, you obviously need the native libraries at runtime, which it very sensibly doesn't bundle. However, all of the other available packages that exist to provide the native libraries seem to include them as package content, which is entirely the wrong approach, and doesn't work well when the thing that needs it is a library rather than an app. So I made this, which does things the right way - by utilising NuGet's support for runtime dependencies.

I'm occasionally moved to create a gist when I come up with something intreresting that is small enough to express in gist form:

  • SqlServerDockerFile: Dockerfile for a SQL server instance built to include a database defined in a given SQL script. Created as part of demo-ing an improved (more isolated) E2E testing approach for work.
  • DacPacDockerFile: Dockerfile for a SQL server instance built to include a database defined in a given SQL project. Created as part of demo-ing an improved (more isolated) E2E testing approach for work.
  • LinqDecomposer: Uses LINQ expressions to decompose and recompose objects, storing each property in a different backing store.
  • ExtensionScripts: Basic example of using MEF and the Roslyn scripting API to create a scriptable extension system.
  • Trie: Generic prefix tree, implementing IDictionary<TKey, TValue>.
  • BlockingCollectionBatchPipeline: A simple periodic batching pipeline using BlockingCollections

Pinned Loading

  1. FlUnit FlUnit Public

    A .NET test framework in which tests are defined with a fluent builder.

    C# 1

  2. SCGraphTheory.Abstractions SCGraphTheory.Abstractions Public

    Graph theory interfaces, to allow for graph algorithms that do not depend on a particular graph representation.

    C#

  3. SCGraphTheory.AdjacencyList SCGraphTheory.AdjacencyList Public

    Adjacency list graph implementation that uses the abstractions defined in SCGraphTheory.Abstractions.

    C# 3

  4. SCFirstOrderLogic SCFirstOrderLogic Public

    Simple first-order logic implementation for .NET.

    C# 5

  5. SCClassicalPlanning SCClassicalPlanning Public

    Simple classical planning implementation for .NET.

    C# 2

  6. MyOTKE MyOTKE Public

    Basic OpenGL engine using fluent builders for strongly-typed OpenGL object wrappers.

    C#