41554 blogs · [ { "id": "01a0874c-6916-70f6-af22-617f7bbab97b", "title": "Agentic Semantic Data Modelling in C#", "url": "https://blog.jonathanchannon.com/2026-01-12-agentic-semantic-data-modelling-csharp/", "published_at": "2026-01-12T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7ca86e31", "title": "Running C# against Ollama", "url": "https://blog.jonathanchannon.com/2026-01-09-running-csharp-against-ollama/", "published_at": "2026-01-09T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7cf2acbd", "title": "Using AI in a C# app", "url": "https://blog.jonathanchannon.com/2026-01-06-using-ai-csharp/", "published_at": "2026-01-06T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7da92a3e", "title": "Introduction to AI", "url": "https://blog.jonathanchannon.com/2025-12-23-introduction-to-ai/", "published_at": "2025-12-23T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7dd6aa99", "title": "Using Azure AD authentication for a Go API", "url": "https://blog.jonathanchannon.com/2022-01-29-azuread-golang/", "published_at": "2022-01-29T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7ed27643", "title": "Terminology Glossary", "url": "https://blog.jonathanchannon.com/2021-04-13-terminology-glossary/", "published_at": "2021-04-13T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7f5d5590", "title": "Tracing IO in .NET Core", "url": "https://blog.jonathanchannon.com/2021-01-29-tracing-io-netcore/", "published_at": "2021-01-29T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7f988874", "title": "Understanding type aliases", "url": "https://blog.jonathanchannon.com/2020-08-07-understanding-type-aliases/", "published_at": "2020-08-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f7f9ba485", "title": "Understanding F# applicatives and custom operators", "url": "https://blog.jonathanchannon.com/2020-07-17-understanding-fsharp-applicatives-custom-operators/", "published_at": "2020-07-17T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f80764295", "title": "Understanding F# map/bind", "url": "https://blog.jonathanchannon.com/2020-06-28-understanding-fsharp-map-and-bind/", "published_at": "2020-06-28T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f811a5d90", "title": "Feature Management in F#/Giraffe/ASP.NET Core", "url": "https://blog.jonathanchannon.com/2020-06-18-feature-management-fsharp/", "published_at": "2020-06-18T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8157ab9c", "title": "Goodbye NancyFX, Hello F#!", "url": "https://blog.jonathanchannon.com/2020-06-16-goodbye-nancyfx-hello-fsharp/", "published_at": "2020-06-16T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f81cb3c21", "title": "Announcing Carter", "url": "https://blog.jonathanchannon.com/2018-04-10-announcing-carter/", "published_at": "2018-04-10T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f826c00ed", "title": "Debugging .Net Core apps inside Docker container with VSCode", "url": "https://blog.jonathanchannon.com/2017-06-07-debugging-netcore-docker/", "published_at": "2017-06-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f827553e3", "title": "Using Docker with .Net Core in CI for OSS", "url": "https://blog.jonathanchannon.com/2017-05-15-using-docker-with-netcore-ci/", "published_at": "2017-05-15T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f82dc6041", "title": "Announcing Botwin", "url": "https://blog.jonathanchannon.com/2017-05-04-announcing-botwin/", "published_at": "2017-05-04T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f835b3daf", "title": "Building all and current dotnet core projects in VSCode", "url": "https://blog.jonathanchannon.com/2016-07-13-building-all-current-dotnet-core-projects-vscode/", "published_at": "2016-07-13T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f845acc5f", "title": "Porting OWIN middleware to ASP.Net Core", "url": "https://blog.jonathanchannon.com/2016-06-27-porting-owin-middleware-aspnetcore/", "published_at": "2016-06-27T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f852c726c", "title": "What is a Hypermedia client?", "url": "https://blog.jonathanchannon.com/2016-04-28-what-is-a-hypermedia-client/", "published_at": "2016-04-28T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f855dfd49", "title": "VQ Communications Funds NancyFX to run on CoreCLR", "url": "https://blog.jonathanchannon.com/2016-03-30-vq-communications-funds-coreclr-nancyfx/", "published_at": "2016-03-30T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8573c39e", "title": "Profiling a CoreCLR application with dotMemory", "url": "https://blog.jonathanchannon.com/2016-02-11-profiling-coreclr-application/", "published_at": "2016-02-11T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f859ff41a", "title": "Introducing Negotiator - a GoLang content negotiation library", "url": "https://blog.jonathanchannon.com/2015-11-16-content-negotiation-golang/", "published_at": "2015-11-16T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f85cb2cd7", "title": "Introducing PoGo - a GoLang, Twitter favourites to Pocket importer", "url": "https://blog.jonathanchannon.com/2015-10-27-introducting-pogo-golang-twitter-pocket/", "published_at": "2015-10-27T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8689c110", "title": "NancyFX and Hypermedia", "url": "https://blog.jonathanchannon.com/2015-08-07-hypermedia-and-nancyfx/", "published_at": "2015-08-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f873a9882", "title": "Cookie Authentication & CRSF with AngularJs, Owin & Mono", "url": "https://blog.jonathanchannon.com/2015-04-27-cookie-authentication-angularjs-csrf-owin-mono/", "published_at": "2015-04-27T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f875bfbfc", "title": "Running Gulp in Visual & Xamarin Studio", "url": "https://blog.jonathanchannon.com/2014-11-24-running-gulp-in-visual-xamarin-studio/", "published_at": "2014-11-24T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8852747f", "title": "Microsoft Endorsing C# as a First Class Citizen in Sublime Text", "url": "https://blog.jonathanchannon.com/2014-11-12-csharp-first-class-citizen-sublime-text/", "published_at": "2014-11-12T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8933f4f4", "title": "Nancy, ASP.Net vNext, OSX and Sublime Text", "url": "https://blog.jonathanchannon.com/2014-08-05-nancy-aspnetvnext-osx-sublime-text/", "published_at": "2014-08-05T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8a1244d1", "title": "Nancy, ASP.Net vNext, VS2014 & Azure", "url": "https://blog.jonathanchannon.com/2014-06-14-nancy-aspnet-vnext-vs2014-azure/", "published_at": "2014-06-14T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8a9dce4b", "title": "Modifying the bash prompt and adding Git completion to terminal", "url": "https://blog.jonathanchannon.com/2014-06-06-modifying-bash-adding-git-auto-completion-to-terminal/", "published_at": "2014-06-06T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8b99c356", "title": "Introducing Owin.StatelessAuth with Nancy/Angular demo", "url": "https://blog.jonathanchannon.com/2014-05-07-introducing-owin-statelessauth-with-nancy-angular-demo/", "published_at": "2014-05-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8bfde5cd", "title": "Using NodeJS and FTP with Promises", "url": "https://blog.jonathanchannon.com/2014-03-22-using-node-and-ftp-with-promises/", "published_at": "2014-03-22T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8c943454", "title": "Unit Testing with SqlException", "url": "https://blog.jonathanchannon.com/2014-01-02-unit-testing-with-sqlexception/", "published_at": "2014-01-02T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8d75d8c5", "title": "Using SQL Server with node.js", "url": "https://blog.jonathanchannon.com/2013-12-20-using-sql-server-with-nodejs/", "published_at": "2013-12-20T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8de9cf4f", "title": "Octopus XML Transformation in Services", "url": "https://blog.jonathanchannon.com/2013-11-25-octopus-xml-transformation-in-services/", "published_at": "2013-11-25T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8e0b34f9", "title": "Using Git to update YouTrack via TeamCity", "url": "https://blog.jonathanchannon.com/2013-11-07-using-git-to-update-youtrack-via-teamcity/", "published_at": "2013-11-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8ecfaea8", "title": "Running Mocha tests within Sublime Text", "url": "https://blog.jonathanchannon.com/2013-10-21-running-mocha-tests-with-sublime-text/", "published_at": "2013-10-21T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8f6505e7", "title": "Blogging with Markdown & Deploying via Git - Introducing Sandra.Snow", "url": "https://blog.jonathanchannon.com/2013-10-01-blogging-with-markdown-and-git/", "published_at": "2013-10-01T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8fc2f162", "title": "Returning multiple fake objects with FakeItEasy", "url": "https://blog.jonathanchannon.com/2013-09-20-returning-multiple-fake-objects-with-fakeiteasy/", "published_at": "2013-09-20T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f8fc74163", "title": "Enabling CORS in IISExpress", "url": "https://blog.jonathanchannon.com/2013-09-16-enabling-cors-in-iisexpress/", "published_at": "2013-09-16T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9009713d", "title": "Keeping SQL Data Organised in Integration Tests", "url": "https://blog.jonathanchannon.com/2013-09-12-keeping-sql-data-organised-in-integration-tests/", "published_at": "2013-09-12T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f90359a48", "title": "Comparing object instances with FakeItEasy", "url": "https://blog.jonathanchannon.com/2013-09-11-comparing-object-instances-with-fakeiteasy/", "published_at": "2013-09-11T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f91340dbd", "title": "Async Route Handling with Nancy", "url": "https://blog.jonathanchannon.com/2013-08-24-async-route-handling-with-nancy/", "published_at": "2013-08-24T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f921b6785", "title": "A quick look at Visual Node", "url": "https://blog.jonathanchannon.com/2013-08-22-a-quick-look-at-visual-node/", "published_at": "2013-08-22T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f92eaa1f5", "title": "Modifying files within Git history", "url": "https://blog.jonathanchannon.com/2013-07-03-modifying-files-within-git-history/", "published_at": "2013-07-03T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f92ec85f6", "title": "Why .Net should become independent!", "url": "https://blog.jonathanchannon.com/2013-05-29-why-net-should-become-independent/", "published_at": "2013-05-29T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f930dac54", "title": "Mocking HttpContext with Fake It Easy", "url": "https://blog.jonathanchannon.com/2013-04-30-mocking-httpcontext-with-fake-it-easy/", "published_at": "2013-04-30T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f93d25c91", "title": "Up & Running with TypeScript and WebStorm", "url": "https://blog.jonathanchannon.com/2013-04-17-up-running-with-typescript-and-webstorm/", "published_at": "2013-04-17T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f94551426", "title": "Using a Markdown ViewEngine with Nancy", "url": "https://blog.jonathanchannon.com/2013-04-08-using-a-markdown-viewengine-with-nancy/", "published_at": "2013-04-08T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f94ef9618", "title": "Using DateTime in C# and SQL", "url": "https://blog.jonathanchannon.com/2013-04-08-using-datetime-in-c-and-sql/", "published_at": "2013-04-08T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f95940205", "title": "The Old Development Language Switcheroo", "url": "https://blog.jonathanchannon.com/2013-04-02-the-old-development-language-switcheroo/", "published_at": "2013-04-02T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9692e1bb", "title": "The many approaches to Entity Framework", "url": "https://blog.jonathanchannon.com/2013-03-04-the-many-approaches-to-entity-framework/", "published_at": "2013-03-04T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f96f2874f", "title": "Evaluating KnockoutJS and AngularJS – Part 1", "url": "https://blog.jonathanchannon.com/2013-02-05-evaluating-knockoutjs-and-angularjs-part-1/", "published_at": "2013-02-05T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f973ab369", "title": "Evaluating KnockoutJS and AngularJS – Part 2", "url": "https://blog.jonathanchannon.com/2013-02-05-evaluating-knockoutjs-and-angularjs-part-2/", "published_at": "2013-02-05T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f97a3ef87", "title": "Using AngularJS/BackboneJS in Windows 8 JavaScript app", "url": "https://blog.jonathanchannon.com/2013-01-24-using-angularjsbackbonejs-in-windows-8-javascript-app/", "published_at": "2013-01-24T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f982081a8", "title": "JavaScript is the future…maybe!", "url": "https://blog.jonathanchannon.com/2013-01-09-javascript-is-the-future-maybe/", "published_at": "2013-01-09T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f984dfb4b", "title": "Why use NancyFX?", "url": "https://blog.jonathanchannon.com/2012-12-19-why-use-nancyfx/", "published_at": "2012-12-19T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f987f2f2e", "title": "Easily publish a NuGet package", "url": "https://blog.jonathanchannon.com/2012-12-07-easily-publish-a-nuget-package/", "published_at": "2012-12-07T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f988b9590", "title": "ASP.NET Web API Testing", "url": "https://blog.jonathanchannon.com/2012-11-29-asp-net-web-api-testing/", "published_at": "2012-11-29T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9912c73c", "title": "The For Loop is the devil in disguise", "url": "https://blog.jonathanchannon.com/2012-11-23-the-for-loop-is-the-devil-in-disguise/", "published_at": "2012-11-23T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9988f363", "title": ".gitignore not working – fixed!", "url": "https://blog.jonathanchannon.com/2012-11-18-gitignore-not-working-fixed/", "published_at": "2012-11-18T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f99f5a634", "title": "Publishing to Windows Azure from Github", "url": "https://blog.jonathanchannon.com/2012-11-06-publishing-to-windows-azure-from-github/", "published_at": "2012-11-06T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9aaa6a8a", "title": "Simple .Net Twitter,Google,Facebook Authentication", "url": "https://blog.jonathanchannon.com/2012-10-25-simple-net-twittergooglefacebook-authentication/", "published_at": "2012-10-25T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9b239c8a", "title": "Testing your application’s email logic", "url": "https://blog.jonathanchannon.com/2012-10-25-testing-your-applications-email-logic/", "published_at": "2012-10-25T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9bd1fea0", "title": "Node.js, Express, Hello World Formula 1 Style", "url": "https://blog.jonathanchannon.com/2012-10-08-node-js-express-hello-world-formula-1-style/", "published_at": "2012-10-08T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9cae5d70", "title": "Abstracting the File System", "url": "https://blog.jonathanchannon.com/2012-09-28-abstracting-the-file-system/", "published_at": "2012-09-28T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9ce2c9d6", "title": "Is OSS good for your career?", "url": "https://blog.jonathanchannon.com/2012-09-25-is-oss-good-for-your-career/", "published_at": "2012-09-25T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9dd98bdc", "title": "NancyFX, RavenDB, NerdDinner and Me", "url": "https://blog.jonathanchannon.com/2012-09-21-nancyfx-ravendb-nerddinner-and-me/", "published_at": "2012-09-21T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9e841c2a", "title": "I’ve started blogging. Why?", "url": "https://blog.jonathanchannon.com/2012-09-17-ive-started-blogging-why/", "published_at": "2012-09-17T00:00:00+00:00" }, { "id": "01a0874c-6916-70f6-af22-617f9f065b4a", "title": "Archive", "url": "https://blog.jonathanchannon.com/archive/", "published_at": null } ] posts Claim your blog
Back to blog.jonathanchannon.com
Blog · corpus.blog/blogs/blog.jonathanchannon.com/posts

blog.jonathanchannon.com

blog.jonathanchannon.com

2026

2025

2022

2021

2020

2018

2017

2016

2015

2014

2013

2012

Undated