41554 blogs · [ { "id": "01a087d9-d526-7215-8b5c-1604ac3a2ed3", "title": "AI is a Race Car, Not Autopilot", "url": "https://ryansouthgate.com/ai-is-a-racecar/", "published_at": "2026-08-03T07:11:30+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604acd76af5", "title": "Self-hosting and surviving the front page of Hacker News", "url": "https://ryansouthgate.com/surviving-front-page-hacker-news/", "published_at": "2026-04-14T08:21:35+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604adc806af", "title": "Fixing qBittorrent in Docker, swallowing RAM and locking up the host", "url": "https://ryansouthgate.com/fixing-qbitorrent-in-docker-oom/", "published_at": "2026-02-24T09:46:42+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604ae7178ae", "title": "merge-pdf.app - A free, privacy-first PDF Merging tool", "url": "https://ryansouthgate.com/merge-pdfs/", "published_at": "2026-01-21T08:04:29+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604aef554bb", "title": "Goodbye Disqus - Your injected ads are horrible", "url": "https://ryansouthgate.com/goodbye-disqus/", "published_at": "2025-09-30T07:10:18+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604af18b1b3", "title": "A secure & efficient Node/npm in Docker setup for frontend development", "url": "https://ryansouthgate.com/secure-node-in-docker/", "published_at": "2025-09-22T08:04:53+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604af52f2c6", "title": "ZSA Moonlander - A keyboard review", "url": "https://ryansouthgate.com/zsa-moonlander-review/", "published_at": "2025-09-15T08:28:34+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604af987465", "title": "Cronjob vs systemd timers - how to create a systemd timer", "url": "https://ryansouthgate.com/systemd-timer/", "published_at": "2025-03-11T14:56:09+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604afb7024d", "title": "Custom C# JSON Deserialisation for Object property Types", "url": "https://ryansouthgate.com/custom-json-serialisation-for-specific-property/", "published_at": "2025-02-21T12:43:22+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b021edf1", "title": "Fixing 'cups-pki-invalid' printing error in Linux Mint/Ubuntu", "url": "https://ryansouthgate.com/cups-pki-invalid-printing-error/", "published_at": "2024-11-01T11:02:39+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b1119946", "title": "2024 - My year of the Linux desktop", "url": "https://ryansouthgate.com/2024-my-year-of-the-linux-desktop/", "published_at": "2024-09-18T08:21:39+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b18c6037", "title": "Creating Right-Click (Context Menu) actions in Linux Mint - Nemo", "url": "https://ryansouthgate.com/linux-mint-nemo-actions/", "published_at": "2024-09-14T15:02:04+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b25c81ed", "title": "F# and Home Assistant helping take the bins out on time", "url": "https://ryansouthgate.com/fsharp-homeassistant-bins/", "published_at": "2024-02-14T09:38:31+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b2f4492b", "title": "Public Key Encryption with the JavaScript Web Crypto API", "url": "https://ryansouthgate.com/javascript-cryptography/", "published_at": "2024-01-23T09:02:04+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b3b8283f", "title": "Ridiculously cheap offsite backups using rclone and AWS S3 Glacier", "url": "https://ryansouthgate.com/rclone-cheap-backups/", "published_at": "2023-10-23T13:23:19+00:00" }, { "id": "01a087d9-d526-7215-8b5c-1604b3c1f153", "title": "Reclaiming disk space for the dotnet developer", "url": "https://ryansouthgate.com/dotnet-cleaning-up-dev-machine/", "published_at": "2023-07-26T08:14:16+00:00" }, { "id": "01a087d9-d527-7077-be87-34bf9e37a17c", "title": "ASP.NET Core CORS Wildcard Subdomains", "url": "https://ryansouthgate.com/asp-net-core-cors-wildcard-subdomains/", "published_at": "2023-06-22T08:23:34+00:00" }, { "id": "01a087d9-d527-7077-be87-34bf9f316843", "title": "Visual Studio - Http Files", "url": "https://ryansouthgate.com/visual-studio-http-files/", "published_at": "2023-03-14T08:51:09+00:00" }, { "id": "01a087d9-d527-7077-be87-34bf9f3fd225", "title": "Optimising Images for the Web", "url": "https://ryansouthgate.com/optimising-images-for-the-web/", "published_at": "2023-02-27T11:44:14+00:00" }, { "id": "01a087d9-d527-7077-be87-34bf9f8789de", "title": "Disabling Controller methods in ASP.NET Core", "url": "https://ryansouthgate.com/asp-net-core-disable-controller-methods/", "published_at": "2023-02-14T13:01:17+00:00" }, { "id": "01a087d9-d527-7077-be87-34bf9ff721ee", "title": "My old laptop, is my new web server", "url": "https://ryansouthgate.com/my-old-laptop-is-my-new-web-server/", "published_at": "2023-01-23T07:09:28+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa02c0051", "title": "Back up DVDs with MakeMKV (makemkvcon) and disable auto updates on Linux", "url": "https://ryansouthgate.com/back-up-dvds-with-makemkv-makemkvcon-and-disable-auto-updates-on-linux/", "published_at": "2023-01-19T19:30:34+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa07ba339", "title": "AWS Cloud9 - No space left on device", "url": "https://ryansouthgate.com/aws-cloud9-no-space-left-on-device/", "published_at": "2022-12-18T20:41:53+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa0da367b", "title": "Goodbye Ghost, Hello Hugo", "url": "https://ryansouthgate.com/goodbye-ghost-hello-hugo/", "published_at": "2022-12-12T08:03:41+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa1877c54", "title": "ASP.NET Core Response Caching", "url": "https://ryansouthgate.com/asp.net-core-response-caching/", "published_at": "2022-11-29T08:02:04+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa18d7705", "title": "Dataflow in .NET", "url": "https://ryansouthgate.com/dataflow-in-net/", "published_at": "2021-03-25T15:02:04+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa24228a6", "title": "Keeping it Stupidly Simple!", "url": "https://ryansouthgate.com/keeping-it-stupidly-simple/", "published_at": "2021-03-24T14:07:49+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa251e4e5", "title": "How YouTube Music forced me to try F#", "url": "https://ryansouthgate.com/how-youtube-music-forced-me-to-try-f/", "published_at": "2020-12-22T13:59:23+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa263d5c9", "title": "Twit Tips #2: Sonic and Tails", "url": "https://ryansouthgate.com/twit-tips-2-sonic-and-tails/", "published_at": "2020-12-15T14:31:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa3277835", "title": "Vue.js v-hide directive, whilst keeping element's occupied space", "url": "https://ryansouthgate.com/vue-js-v-hide-element-whilst-keeping-occupied-space/", "published_at": "2020-01-30T16:15:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa3769644", "title": "EF Core - Database Auditing with \"UpdatedBy\"", "url": "https://ryansouthgate.com/ef-core-databse-auditing/", "published_at": "2019-03-18T08:36:36+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa44650c5", "title": "About", "url": "https://ryansouthgate.com/about/", "published_at": "2019-02-28T00:00:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa46a08c9", "title": "Entity Framework Core: Soft Delete", "url": "https://ryansouthgate.com/entity-framework-core-soft-delete/", "published_at": "2019-01-07T12:21:06+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa4894e88", "title": "Twit Tips #1: Parse the Time Away", "url": "https://ryansouthgate.com/twit-tips-1/", "published_at": "2018-11-16T09:52:36+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa5296a33", "title": "Building a Jekyll Site on Windows with Docker", "url": "https://ryansouthgate.com/building-a-jekyll-site-on-windows-with-docker/", "published_at": "2018-05-31T14:03:22+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa59c45e2", "title": "VueJS CSV input", "url": "https://ryansouthgate.com/vuejs-csv-input/", "published_at": "2018-04-03T11:12:51+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa620374f", "title": "9 Months and 32,000 lines of code later", "url": "https://ryansouthgate.com/9-months-and-32000-lines-of-code-later/", "published_at": "2018-02-13T15:20:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa6cff558", "title": "ASP.NET Core and Webpack - Part 2", "url": "https://ryansouthgate.com/asp-net-core-and-webpack-part-2/", "published_at": "2017-09-12T16:06:02+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa76786bf", "title": "ASP.NET Core and Webpack - Part 1", "url": "https://ryansouthgate.com/asp-net-core-and-webpack-part-1/", "published_at": "2017-08-29T14:07:54+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa84a13a9", "title": "ASP.NET Core MVC - Common Components/(Partial)Views across applications", "url": "https://ryansouthgate.com/asp-net-core-mvc-common-components-view-across-applications/", "published_at": "2017-07-21T14:10:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa934f236", "title": "Elastic Email + JavaScript - Adding a Contact (subscribing to a newsletter)", "url": "https://ryansouthgate.com/elastic-email-javascript-subscribing-newsletter/", "published_at": "2017-06-22T17:06:25+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfa9c5de76", "title": "Entity Framework Core - Custom Migrations", "url": "https://ryansouthgate.com/entity-framework-core-custom-migrations/", "published_at": "2017-05-22T14:15:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfaa42e703", "title": "Quitting my job", "url": "https://ryansouthgate.com/quitting-my-job/", "published_at": "2017-05-10T14:43:39+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfab0105bf", "title": "Aurelia - One month in...", "url": "https://ryansouthgate.com/aurelia-one-month-in/", "published_at": "2017-04-03T20:13:23+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfab01828a", "title": "AngularJS Radio Track by Directive", "url": "https://ryansouthgate.com/angularjs-radio-track-by/", "published_at": "2017-01-27T16:20:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfab719334", "title": "Angular 2 and ASP.NET Core MVC", "url": "https://ryansouthgate.com/angular2-aspnet-core-mvc/", "published_at": "2016-10-19T16:00:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfabbfcefe", "title": "AngularJS text filter (with C# string.format() syntax)", "url": "https://ryansouthgate.com/angularjs-text-filter-with-c-string-format-syntax-2/", "published_at": "2016-09-13T12:53:18+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfac422f97", "title": "Number formatting in Highcharts with Custom Tooltips", "url": "https://ryansouthgate.com/number-formatting-in-highcharts-with-custom-tooltips/", "published_at": "2016-07-20T07:36:06+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfac7f65c1", "title": "Per-Type De/Serialisation in Json.Net WebApi", "url": "https://ryansouthgate.com/per-type-de-serialisation-in-json-net-webapi/", "published_at": "2016-06-14T19:33:27+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfacd7d46a", "title": "Azure WebJobs and Dependency Injection", "url": "https://ryansouthgate.com/azure-webjobs-and-dependency-injection/", "published_at": "2016-05-10T16:01:37+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfad8359d5", "title": "$q.all() - Combining promises in AngularJS", "url": "https://ryansouthgate.com/q-all-combining-promises-in-angularjs-2/", "published_at": "2016-04-19T17:40:16+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfae4598e6", "title": "IConfiguration in .NetCore", "url": "https://ryansouthgate.com/iconfiguration-in-netcore/", "published_at": "2016-03-23T08:55:03+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfaf1d8f55", "title": "Adding Multiline text to Highcharts", "url": "https://ryansouthgate.com/adding-multiline-text-to-highcharts/", "published_at": "2016-03-15T21:44:58+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb0037fcb", "title": "C# server-side rendering with Highcharts", "url": "https://ryansouthgate.com/c-server-side-rendering-with-highcharts/", "published_at": "2016-02-11T20:07:24+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb0375b53", "title": "Read the code!", "url": "https://ryansouthgate.com/read-the-code/", "published_at": "2016-02-03T21:38:11+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb0f35d42", "title": "AngularJS putting a template in the $templateCache", "url": "https://ryansouthgate.com/angularjs-putting-a-template-in-the-templatecache/", "published_at": "2016-01-20T12:58:00+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb1255310", "title": "NDC London 2016 Review", "url": "https://ryansouthgate.com/ndc-london-2016-review/", "published_at": "2016-01-19T22:35:41+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb1915d67", "title": "Upload to Amazon S3 using AngularJS", "url": "https://ryansouthgate.com/upload-amazon-s3-using-angularjs/", "published_at": "2015-12-24T22:41:47+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb1b06567", "title": "Microsoft Future Decoded 2015 (Technical Day)", "url": "https://ryansouthgate.com/microsoft-future-decoded-2015-technical-day/", "published_at": "2015-11-19T20:54:07+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb2844b23", "title": "jPlayer directive in AngularJS", "url": "https://ryansouthgate.com/jplayer-directive-in-angularjs/", "published_at": "2015-10-12T19:35:17+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb2ccf109", "title": "Running code after a digest cycle in AngularJS", "url": "https://ryansouthgate.com/running-code-after-a-digest-cycle-in-angularjs/", "published_at": "2015-09-02T15:20:58+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb2ebe0c9", "title": "Raspberry Pi 2 - Windows 10 IoT - Getting Started", "url": "https://ryansouthgate.com/raspberry-pi-2-windows-10-iot-getting-started/", "published_at": "2015-08-24T07:00:09+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb3c3af05", "title": "Raspberry Pi - Door Sensor", "url": "https://ryansouthgate.com/raspberry-pi-door-sensor/", "published_at": "2015-08-10T06:56:50+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb482adc2", "title": "Using JavaScript to get CSS properties", "url": "https://ryansouthgate.com/using-javascript-to-get-css-properties/", "published_at": "2015-07-27T13:06:42+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb49bdecf", "title": "Gulp rimraf vs del", "url": "https://ryansouthgate.com/gulp-rimraf-vs-del/", "published_at": "2015-07-20T08:55:31+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb5999e45", "title": "Gulp Flatten", "url": "https://ryansouthgate.com/gulp-flatten/", "published_at": "2015-07-20T07:56:40+00:00" }, { "id": "01a087d9-d527-7077-be87-34bfb5d6d81f", "title": "Web Api 2 - IncludeErrorDetailPolicy", "url": "https://ryansouthgate.com/web-api-2-includeerrordetailpolicy/", "published_at": "2015-07-17T10:28:16+00:00" } ] posts Claim your blog
Back to ryansouthgate.com
Blog · corpus.blog/blogs/ryansouthgate.com/posts

ryansouthgate.com

ryansouthgate.com

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017

2016

2015