<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>ryansouthgate.com</title><link>https://ryansouthgate.com/</link><description>Recent content on ryansouthgate.com</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 14 Apr 2026 08:21:35 +0000</lastBuildDate><atom:link href="https://ryansouthgate.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Self-hosting and surviving the front page of Hacker News</title><link>https://ryansouthgate.com/surviving-front-page-hacker-news/</link><pubDate>Tue, 14 Apr 2026 08:21:35 +0000</pubDate><guid>https://ryansouthgate.com/surviving-front-page-hacker-news/</guid><description>IntroLast October, my post &amp;ldquo;Why I Ditched Disqus for My Blog&amp;rdquo; unexpectedly reached the #1 spot on Hacker News - and stayed on the front page for more than 11 hours. Overnight, a blog I usually run quietly from an old laptop-turned-server at home was under the kind of scrutiny I never prepared for. For context, a couple of years ago, I migrated from Ghost to Hugo, and started self-hosting in a truly DIY way - a setup that could reliably handle my modest regular traffic.</description></item><item><title>Fixing qBittorrent in Docker, swallowing RAM and locking up the host</title><link>https://ryansouthgate.com/fixing-qbitorrent-in-docker-oom/</link><pubDate>Tue, 24 Feb 2026 09:46:42 +0000</pubDate><guid>https://ryansouthgate.com/fixing-qbitorrent-in-docker-oom/</guid><description>IntroI&amp;rsquo;ve had qBittorrent running happily in Docker for over a year now, using the linuxserver/qbittorrent image. I run the docker container and others on an Ubuntu Server host. Recently, the host regularly becomes unresponsive. SSH doesn&amp;rsquo;t work, and the only way to recover is to power cycle the server (running on a small NUC).
The symptoms were: RAM usage would climb and climb, the server would become sluggish, and then it would completely lock up.</description></item><item><title>merge-pdf.app - A free, privacy-first PDF Merging tool</title><link>https://ryansouthgate.com/merge-pdfs/</link><pubDate>Wed, 21 Jan 2026 08:04:29 +0000</pubDate><guid>https://ryansouthgate.com/merge-pdfs/</guid><description>Privacy-First PDF Merging: Why I Built merge-pdf.appWe’ve all been there. You have three different PDFs, maybe a cover letter, a CV, and some certifications - and you need them in one single file. The &amp;ldquo;old&amp;rdquo; way to do this usually involved searching for &amp;ldquo;Merge PDF&amp;rdquo; on Google, clicking the first link, and uploading your sensitive documents to a random server in the cloud. You get your file back, but at what cost?</description></item><item><title>Goodbye Disqus - Your injected ads are horrible</title><link>https://ryansouthgate.com/goodbye-disqus/</link><pubDate>Tue, 30 Sep 2025 07:10:18 +0000</pubDate><guid>https://ryansouthgate.com/goodbye-disqus/</guid><description>IntroThis will be a short and sweet post. I&amp;rsquo;m not big on goodbyes.
Disqus started showing ads for their &amp;ldquo;free&amp;rdquo; tier comments system a few years back. At the time, the communication they sent out via email, seemed quite laid-back and had the tone of &amp;ldquo;don&amp;rsquo;t worry about it, it&amp;rsquo;s not a big thing&amp;rdquo;. Which in part led me to almost forget it happened.
At the time, the disqus comments system looked quite smart and sleek.</description></item><item><title>A secure &amp; efficient Node/npm in Docker setup for frontend development</title><link>https://ryansouthgate.com/secure-node-in-docker/</link><pubDate>Mon, 22 Sep 2025 08:04:53 +0000</pubDate><guid>https://ryansouthgate.com/secure-node-in-docker/</guid><description>IntroI&amp;rsquo;ve been searching for a secure and efficient Node in Docker setup for a little while now. And I think I&amp;rsquo;ve found it!
A couple of years ago, I&amp;rsquo;d install the latest LTS version of Node/npm on my Windows machine and be done with it. In my day job, I could be working on one of 4 different front end projects, and have my own front end projects I&amp;rsquo;d work on in my spare time.</description></item><item><title>ZSA Moonlander - A keyboard review</title><link>https://ryansouthgate.com/zsa-moonlander-review/</link><pubDate>Mon, 15 Sep 2025 08:28:34 +0000</pubDate><guid>https://ryansouthgate.com/zsa-moonlander-review/</guid><description>IntroIn Jan 2024, I&amp;rsquo;d had enough. Upon finishing a day of coding my wrists would start to ache and I&amp;rsquo;d feel a tightness in my ribs, shoulders and upper back. I&amp;rsquo;d recently turned 35 and my body isn&amp;rsquo;t as adaptable as it was 10 years ago. Where I could sit on a cheap office chair and use the computer for hours on end, and feel no ill effects. Time has moved on and my body is not as accomodating as it once was.</description></item><item><title>Cronjob vs systemd timers - how to create a systemd timer</title><link>https://ryansouthgate.com/systemd-timer/</link><pubDate>Tue, 11 Mar 2025 14:56:09 +0000</pubDate><guid>https://ryansouthgate.com/systemd-timer/</guid><description>IntroI&amp;rsquo;ve been using cronjobs for a long time. More recently I&amp;rsquo;ve been testing systemd-timers as they allow dependency management, so I don&amp;rsquo;t have to check (in the script I&amp;rsquo;m running) to see if certain services are up/running before my scripts can do their work.
In this post I&amp;rsquo;m going to demonstrate how to create a simple systemd timer service which runs a script on a schedule
A quick comparison with CronI&amp;rsquo;m all for learning to use new tools.</description></item><item><title>Custom C# JSON Deserialisation for Object property Types</title><link>https://ryansouthgate.com/custom-json-serialisation-for-specific-property/</link><pubDate>Fri, 21 Feb 2025 12:43:22 +0000</pubDate><guid>https://ryansouthgate.com/custom-json-serialisation-for-specific-property/</guid><description>IntroductionRecently I&amp;rsquo;ve had to work with a data model in C# that the team I&amp;rsquo;m on doesn&amp;rsquo;t own. We are using System.Text.Json for our Serialisation/Deserialisation needs. The Data model we are using has multiple classes with a object properties, and it&amp;rsquo;s difficult to work with.
Using System.Text.Json we could customise the conversion for all properties where the type is object, but that is too far-reaching and might cause an unwanted impact on other classes/objects in the heirarchy which you don&amp;rsquo;t want to touch.</description></item><item><title>Fixing 'cups-pki-invalid' printing error in Linux Mint/Ubuntu</title><link>https://ryansouthgate.com/cups-pki-invalid-printing-error/</link><pubDate>Fri, 01 Nov 2024 11:02:39 +0000</pubDate><guid>https://ryansouthgate.com/cups-pki-invalid-printing-error/</guid><description>Today on my Linux Mint install (21.2) I got the error cups-pki-invalid when trying to print a document. In this short blog post, we&amp;rsquo;re going to fix it, without having to remove/re-install printers.
A quick Google search shows that this is likely due to an expired certificate, but we knew that anyway with &amp;ldquo;pki&amp;rdquo; in the error code, didn&amp;rsquo;t we?
Why this certificate doesn&amp;rsquo;t re-gen (or have a longer expiry) is unknown to me, but it is what it is, and we&amp;rsquo;ll fix the error.</description></item><item><title>2024 - My year of the Linux desktop</title><link>https://ryansouthgate.com/2024-my-year-of-the-linux-desktop/</link><pubDate>Wed, 18 Sep 2024 08:21:39 +0000</pubDate><guid>https://ryansouthgate.com/2024-my-year-of-the-linux-desktop/</guid><description>I&amp;rsquo;ve been a Windows user since first using a mouse. Windows 10 will be the last version of Windows I&amp;rsquo;ll daily drive, and here&amp;rsquo;s why&amp;hellip;
IntroductionMy first operating system was Windows 3.1 - when my uncle gave us a computer he no longer needed. From that point on, he helped me keep up to date with the latest versions of Windows (with hardware upgrades to match). Over the years, Windows has been a constant in my life, I&amp;rsquo;ve used pretty much every desktop version of Windows, and most Windows Server OS too.</description></item><item><title>Creating Right-Click (Context Menu) actions in Linux Mint - Nemo</title><link>https://ryansouthgate.com/linux-mint-nemo-actions/</link><pubDate>Sat, 14 Sep 2024 15:02:04 +0000</pubDate><guid>https://ryansouthgate.com/linux-mint-nemo-actions/</guid><description>This is a short and sweet post about creating Nemo Actions in Linux Mint.
Since moving from Windows 10 and daily-driving Linux Mint. There&amp;rsquo;s been few things I&amp;rsquo;ve missed. However, one small feature of the Windows file explorer I&amp;rsquo;ve been missing has been the &amp;ldquo;Copy Full Path&amp;rdquo; when you select a file, hold shift and right click.
This small feature copies the full path of the file to your clipboard. And I&amp;rsquo;ve just come to realise how much I miss it.</description></item><item><title>F# and Home Assistant helping take the bins out on time</title><link>https://ryansouthgate.com/fsharp-homeassistant-bins/</link><pubDate>Wed, 14 Feb 2024 09:38:31 +0000</pubDate><guid>https://ryansouthgate.com/fsharp-homeassistant-bins/</guid><description>In this post I&amp;rsquo;m going to demonstrate how I use F# to retrieve data from a website (HTML), parse and expose it to Home Assistant which allows me to receive weekly notifictions on when to take my bins out for collection by my council.
This isn&amp;rsquo;t going to be a waste of time! (expect more bin puns)
The ProblemI&amp;rsquo;ve not got the best memory&amp;hellip; Every week (on a Thursday) my local council (Coventry City Council) empty our (and our street&amp;rsquo;s) bins into a refuse truck.</description></item><item><title>Public Key Encryption with the JavaScript Web Crypto API</title><link>https://ryansouthgate.com/javascript-cryptography/</link><pubDate>Tue, 23 Jan 2024 09:02:04 +0000</pubDate><guid>https://ryansouthgate.com/javascript-cryptography/</guid><description>In this post I&amp;rsquo;m going to show you how to implement Public Key Encryption in the browser with standardised APIs in JavaScript. These APIs have been implemented by the browser, so there is no need to reference and use any other JavaScript libraries.
Browsers standardising on APIs and being made available to developers means we&amp;rsquo;re able to use battle-tested, trusted encryption code. And let&amp;rsquo;s be honest, we wouldn&amp;rsquo;t want to write that ourselves, would we?</description></item><item><title>Ridiculously cheap offsite backups using rclone and AWS S3 Glacier</title><link>https://ryansouthgate.com/rclone-cheap-backups/</link><pubDate>Mon, 23 Oct 2023 13:23:19 +0000</pubDate><guid>https://ryansouthgate.com/rclone-cheap-backups/</guid><description>In this post I&amp;rsquo;m going to show you how to achieve massive savings for data backup. With a small amount of setup effort (and scripting), you can get tons of storage space, to use as an off-site backup, for a very very reasonable price.
Having built my own NAS (Network Attached Storage) device a couple of years ago, and storing more and more files on it (along with tons of media), it&amp;rsquo;s never been a better time to ensure that important files (documents, photos, music, videos etc) are backed up offsite.</description></item><item><title>Reclaiming disk space for the dotnet developer</title><link>https://ryansouthgate.com/dotnet-cleaning-up-dev-machine/</link><pubDate>Wed, 26 Jul 2023 08:14:16 +0000</pubDate><guid>https://ryansouthgate.com/dotnet-cleaning-up-dev-machine/</guid><description>This is a short and sweet post, reminding myself (and you too) of a few ways to reclaim Drive space on your development machine. As a dotnet developer, we have to install a few tools and SDKs. Packages we use (through NuGet or Packet) are downloaded/cached locally and don&amp;rsquo;t get cleaned up. Below are a few steps which help reclaim some of that space. Most of these are windows-centric, however some can also be used on Linux machines too.</description></item><item><title>ASP.NET Core CORS Wildcard Subdomains</title><link>https://ryansouthgate.com/asp-net-core-cors-wildcard-subdomains/</link><pubDate>Thu, 22 Jun 2023 08:23:34 +0000</pubDate><guid>https://ryansouthgate.com/asp-net-core-cors-wildcard-subdomains/</guid><description>This post will demonstrate how to setup wildcard subdomains for your CORS config in ASP.NET Core
The SituationRecently, a company I work for has been exploring the idea of starting a SaaS business model. Without going too far into the details on this, essentially they are offering a Platform for their users (with their own branding/subdomain).
The backend is written in ASP.NET Core. There&amp;rsquo;s lots of Terraform which sets up the environments/services in AWS etc.</description></item><item><title>Visual Studio - Http Files</title><link>https://ryansouthgate.com/visual-studio-http-files/</link><pubDate>Tue, 14 Mar 2023 08:51:09 +0000</pubDate><guid>https://ryansouthgate.com/visual-studio-http-files/</guid><description>IntroWant to run a GET/POST/PUT request from inside Visual Studio 2022? Now you can, using .http files.
These are very simple text files with the extension .http. They allow you to declaratively build a HTTP request which can be executed by the IDE.
It&amp;rsquo;s really simple&amp;hellip;create a new file in your Solution/Project, for example endpoints-to-test.http and paste the following code:
### Do a GET on my homepage GET https://ryansouthgate.com Your IDE should look like this:</description></item><item><title>Optimising Images for the Web</title><link>https://ryansouthgate.com/optimising-images-for-the-web/</link><pubDate>Mon, 27 Feb 2023 11:44:14 +0000</pubDate><guid>https://ryansouthgate.com/optimising-images-for-the-web/</guid><description>IntroI&amp;rsquo;ve recently moved my blog from Ghost to Hugo. Previously, I was using the hosted version of Ghost, where they manage everything for you and collect a tidy sum for the trouble. You can read more about the reasons for my switch here. Now I&amp;rsquo;m self hosting this blog on a laptop in my house, I&amp;rsquo;m more concerned about bandwidth and traffic. I don&amp;rsquo;t have the fastest internet connection in the world (I&amp;rsquo;m not yet on Fibre).</description></item><item><title>Disabling Controller methods in ASP.NET Core</title><link>https://ryansouthgate.com/asp-net-core-disable-controller-methods/</link><pubDate>Tue, 14 Feb 2023 13:01:17 +0000</pubDate><guid>https://ryansouthgate.com/asp-net-core-disable-controller-methods/</guid><description>In this post I&amp;rsquo;m going to demonstrate how to globally disable (certain) controller Methods using ASP.NET Core.
WhyI&amp;rsquo;ve been coding a Stripe integration recently. I&amp;rsquo;ve implemented WebHooks to allow Stripe to notify me of any events that happen on their end (e.g. payments that succeed/fail, coupons created etc). The WebHook calls into a specific method in an ASP.NET Controller. POST-ing a JSON body, which is then verified for authenticity and deserialised into C# objects.</description></item><item><title>My old laptop, is my new web server</title><link>https://ryansouthgate.com/my-old-laptop-is-my-new-web-server/</link><pubDate>Mon, 23 Jan 2023 07:09:28 +0000</pubDate><guid>https://ryansouthgate.com/my-old-laptop-is-my-new-web-server/</guid><description>I hate throwing things away, even tech that isn&amp;rsquo;t working - optimistically believing that I&amp;rsquo;ll find the time to fix it.
I stumbled across the below video a few weeks ago. If you haven&amp;rsquo;t watched it, give it a watch. Yes, it&amp;rsquo;s simplistic, it&amp;rsquo;s heavy on the advertising, but the messaging is solid:
Old tech can still have a purpose
Although, after a few years of running OMV (on an Odroid) and Raspberry Pis and lots of docker containers on them, I personally wouldn&amp;rsquo;t use Windows for server use.</description></item><item><title>Back up DVDs with MakeMKV (makemkvcon) and disable auto updates on Linux</title><link>https://ryansouthgate.com/back-up-dvds-with-makemkv-makemkvcon-and-disable-auto-updates-on-linux/</link><pubDate>Thu, 19 Jan 2023 19:30:34 +0000</pubDate><guid>https://ryansouthgate.com/back-up-dvds-with-makemkv-makemkvcon-and-disable-auto-updates-on-linux/</guid><description>In this short post I&amp;rsquo;m going to show you the basics of backing up a DVD with MakeMKV, and how to disable Auto Update for MakeMKV (makemkvcon).
IntroI&amp;rsquo;m currently backing up some old DVDs (they age, degrade, and wont last forever). I haven&amp;rsquo;t got many computers in the house which have a DVD drive, and I mostly consume media via streaming services or my Plex instance.
I&amp;rsquo;ve got a Laptop running Ubuntu Server (hosting this blog), that does have a DVD Drive.</description></item><item><title>AWS Cloud9 - No space left on device</title><link>https://ryansouthgate.com/aws-cloud9-no-space-left-on-device/</link><pubDate>Sun, 18 Dec 2022 20:41:53 +0000</pubDate><guid>https://ryansouthgate.com/aws-cloud9-no-space-left-on-device/</guid><description>In this post I&amp;rsquo;m going to show you how I recently cleaned up loads of space on my AWS Cloud9 instance, when I got the annoying &amp;ldquo;No space left on device&amp;rdquo; message.
I use this AWS Cloud9 instance weekly to generate a bunch of files and download them to my local PC. The generated files don&amp;rsquo;t usually exceed 50mb and I&amp;rsquo;m good at cleaning up old ones. I was surprised to see the message when logging in recently and as any developer, immediately thought &amp;ldquo;this can&amp;rsquo;t be my fault!</description></item><item><title>Goodbye Ghost, Hello Hugo</title><link>https://ryansouthgate.com/goodbye-ghost-hello-hugo/</link><pubDate>Mon, 12 Dec 2022 08:03:41 +0000</pubDate><guid>https://ryansouthgate.com/goodbye-ghost-hello-hugo/</guid><description>This blog has been hosted on Ghost since I first set it up back in 2016. That&amp;rsquo;s now changing, for a number of reasons&amp;hellip;
CostWhen I first signed up with Ghost, I was paying around £56/year for hosting. That&amp;rsquo;s not cheap, but it&amp;rsquo;s not expensive either. At the time, I was happy to trade that money for not having to care about hosting/updates/downtime etc. It was money I was happy to part with, for the convenience Ghost offered me.</description></item><item><title>ASP.NET Core Response Caching</title><link>https://ryansouthgate.com/asp.net-core-response-caching/</link><pubDate>Tue, 29 Nov 2022 08:02:04 +0000</pubDate><guid>https://ryansouthgate.com/asp.net-core-response-caching/</guid><description>In this post I&amp;rsquo;m going to take a quick look at the built in Response Caching feature in ASP.NET Core.
Sometimes, as developers, we&amp;rsquo;re drawn to complexity. I was recently keeping tabs on a website I build/manage. It runs in AWS, the JSON REST API is served by Lambdas. The site has a bunch of (mostly) static data, stuff that doesn&amp;rsquo;t change frequently. Think Countires, Currencies, (internal) statuses etc. Currently the user logs in to the front-end SPA (single page application), and all this information is requested, for every user, every time.</description></item><item><title>Dataflow in .NET</title><link>https://ryansouthgate.com/dataflow-in-net/</link><pubDate>Thu, 25 Mar 2021 15:02:04 +0000</pubDate><guid>https://ryansouthgate.com/dataflow-in-net/</guid><description>In this blog post I&amp;rsquo;m going to take a deeper dive into the Dataflow .NET (Core + Framework) Library I alluded to in my previous post.
Code for this post can be found here: https://github.com/ry8806/Blog-DataflowExample/
After stumbling across the Dataflow Library for .NET I&amp;rsquo;ve been looking for an excuse to use it. So when a project for a well known betting site came along, this seemed like the perfect solution.</description></item><item><title>Keeping it Stupidly Simple!</title><link>https://ryansouthgate.com/keeping-it-stupidly-simple/</link><pubDate>Wed, 24 Mar 2021 14:07:49 +0000</pubDate><guid>https://ryansouthgate.com/keeping-it-stupidly-simple/</guid><description>In this post I&amp;rsquo;m going to document a recent freelance project I worked on. Why I enjoyed working on it and what I did that was vastly different to the way I build software in my &amp;ldquo;day job&amp;rdquo;.
Complex by Default?I&amp;rsquo;ve worked on large pieces of software for most of my career, they&amp;rsquo;re often complex, there&amp;rsquo;s (almost always) some kind of strange and specific incantation you need to do, to get the solution/projects building and running correctly.</description></item><item><title>How YouTube Music forced me to try F#</title><link>https://ryansouthgate.com/how-youtube-music-forced-me-to-try-f/</link><pubDate>Tue, 22 Dec 2020 13:59:23 +0000</pubDate><guid>https://ryansouthgate.com/how-youtube-music-forced-me-to-try-f/</guid><description>IntroThis blog post details my first experience of writing F# code. I&amp;rsquo;ve been interested in learning F# for about a year now, however never really got round to it as I don&amp;rsquo;t get to use it in my day-job. I even attended a F# Meetup in Coventry, at the start of the year, before 2020 took a nose-dive.A few months ago, I got the email that so many had received, GoogleMusic was shutting down and users were advised to migrate over to YouTube music.</description></item><item><title>Twit Tips #2: Sonic and Tails</title><link>https://ryansouthgate.com/twit-tips-2-sonic-and-tails/</link><pubDate>Tue, 15 Dec 2020 14:31:00 +0000</pubDate><guid>https://ryansouthgate.com/twit-tips-2-sonic-and-tails/</guid><description>Twit TipsI&amp;rsquo;ve seen some software funnies in my time, in this on-going mini-series I&amp;rsquo;m going to be sharing them with you. These posts will all contain genuine code I&amp;rsquo;ve seen personally, in production systems, (or even code I&amp;rsquo;ve written myself) - I&amp;rsquo;ll leave the guessing who wrote it up to you!I&amp;rsquo;ll hopefully highlight some &amp;ldquo;interesting&amp;rdquo; code I&amp;rsquo;ve found in systems, but also aim to show you that developers of all ages and levels of experience make mistakes/bad judgements from time to time.</description></item><item><title>Vue.js v-hide directive, whilst keeping element's occupied space</title><link>https://ryansouthgate.com/vue-js-v-hide-element-whilst-keeping-occupied-space/</link><pubDate>Thu, 30 Jan 2020 16:15:00 +0000</pubDate><guid>https://ryansouthgate.com/vue-js-v-hide-element-whilst-keeping-occupied-space/</guid><description>In this (small) post I&amp;rsquo;m going to demonstrate how to use a VueJS custom directive to hide an element, whilst still keeping it&amp;rsquo;s occupied space. It makes good use of the CSS Property &amp;ldquo;visibility&amp;rdquo;.
v-ifThe built in Vue.js directive (v-if) works by totally removing the element from the DOM when it&amp;rsquo;s bound condition is false. Therefore we wont be looking looking at this as it&amp;rsquo;s not using CSS (to modify visibility), it&amp;rsquo;s doing a delete.</description></item><item><title>EF Core - Database Auditing with "UpdatedBy"</title><link>https://ryansouthgate.com/ef-core-databse-auditing/</link><pubDate>Mon, 18 Mar 2019 08:36:36 +0000</pubDate><guid>https://ryansouthgate.com/ef-core-databse-auditing/</guid><description>In this post we&amp;rsquo;ll look at implementing Auditing in EF Core. specifically recording the last user to &amp;ldquo;touch&amp;rdquo; (create, update or delete) a row. This is especially useful when there are multiple users who can edit the same records, it&amp;rsquo;s helpful to provide an identifier of the last person who made changes to that data. Sometimes for compliance purposes and sometimes for &amp;ldquo;naming and shaming&amp;rdquo; 🤣
A Dirty HackAt a recent job, I&amp;rsquo;ve seen this very functionality implemented sub-optimally.</description></item><item><title>About</title><link>https://ryansouthgate.com/about/</link><pubDate>Thu, 28 Feb 2019 00:00:00 +0000</pubDate><guid>https://ryansouthgate.com/about/</guid><description>Hi 👋, I&amp;rsquo;m Ryan Southgate a Software Developer in the West Midlands, UK.
That's me (try refreshing the page) I graduated University with a Masters of Software Engineering and have been working in the industry for over a decade. I&amp;rsquo;ve worked in a number of different sectors, for a large number of different companies/clients. I made the switch from Permanent to Contract work 6 years into my career. And have not looked back, I enjoy the faster pace of work, getting up-to-speed quickly, having an immediate impact and passing on my knowledge/skills.</description></item><item><title>Entity Framework Core: Soft Delete</title><link>https://ryansouthgate.com/entity-framework-core-soft-delete/</link><pubDate>Mon, 07 Jan 2019 12:21:06 +0000</pubDate><guid>https://ryansouthgate.com/entity-framework-core-soft-delete/</guid><description>I&amp;rsquo;ve been writing a lot of Entity Framework Code recently for a company developing an OLTP System and I&amp;rsquo;d forgotten how much you get &amp;ldquo;for free&amp;rdquo; with Entity Framework. It really can do a lot, in complex systems like this, it&amp;rsquo;s nice to not care about the complexity of the data layer, instead focus on the problems at hand - the business problems.
We&amp;rsquo;ve been given &amp;ldquo;global&amp;rdquo; functionality to help us when querying our data with Soft Deletes, however we haven&amp;rsquo;t been given the same for saving Soft Delete-able data.</description></item><item><title>Twit Tips #1: Parse the Time Away</title><link>https://ryansouthgate.com/twit-tips-1/</link><pubDate>Fri, 16 Nov 2018 09:52:36 +0000</pubDate><guid>https://ryansouthgate.com/twit-tips-1/</guid><description>Twit TipsI&amp;rsquo;ve seen some software funnies in my time, in this on-going mini-series I&amp;rsquo;m going to be sharing them with you. These posts will all contain genuine code I&amp;rsquo;ve seen personally, in production systems, (or even code I&amp;rsquo;ve written myself) - I&amp;rsquo;ll leave the guessing who wrote it up to you!
I&amp;rsquo;ll hopefully highlight some &amp;ldquo;interesting&amp;rdquo; code I&amp;rsquo;ve found in systems, but also aim to show you that developers of all ages and levels of experience make mistakes/bad judgements from time to time.</description></item><item><title>Building a Jekyll Site on Windows with Docker</title><link>https://ryansouthgate.com/building-a-jekyll-site-on-windows-with-docker/</link><pubDate>Thu, 31 May 2018 14:03:22 +0000</pubDate><guid>https://ryansouthgate.com/building-a-jekyll-site-on-windows-with-docker/</guid><description>I&amp;rsquo;ve been very, very late to the party and have only just discovered Docker. I have one big excuse for this - when searching the web I&amp;rsquo;ve found it very difficult to assertain what Docker actually is. Consequently, I didn&amp;rsquo;t know if I needed it or if it&amp;rsquo;d make my life any easier&amp;hellip;
A few weeks ago, I was introduced to Docker by a colleague, who gave me a quick run down of the pros/cons.</description></item><item><title>VueJS CSV input</title><link>https://ryansouthgate.com/vuejs-csv-input/</link><pubDate>Tue, 03 Apr 2018 11:12:51 +0000</pubDate><guid>https://ryansouthgate.com/vuejs-csv-input/</guid><description>This is a very short post about a nice VueJS component I&amp;rsquo;ve written recently.
I&amp;rsquo;ve just been working on Yummit.co&amp;rsquo;s &amp;ldquo;Add Product&amp;rdquo; flow of screens. We&amp;rsquo;ve been refining the User Interface for this lately. We&amp;rsquo;re giving the user&amp;rsquo;s the ability to add multiple ingredients or cuisines to a product.
Previously we gave the users an input and a button saying &amp;ldquo;Add&amp;rdquo;. The user would have to fill out the input, click the add button and then repeat for all the values they wanted to add.</description></item><item><title>9 Months and 32,000 lines of code later</title><link>https://ryansouthgate.com/9-months-and-32000-lines-of-code-later/</link><pubDate>Tue, 13 Feb 2018 15:20:00 +0000</pubDate><guid>https://ryansouthgate.com/9-months-and-32000-lines-of-code-later/</guid><description>Last April I quit my job, to start a business adventure with my good friend Liam.
9 months and 32,000 lines of code later&amp;hellip;..
Introducing yummit.coYummit is an online marketplace for Home-cooked Meals - if you can cook, you can sell. We give all great cooks around the world, the platform to sell their home-cooked meals online.
We&amp;rsquo;re currently in &amp;ldquo;Pre-release&amp;rdquo; mode, ensuring that the whole experience is just how we want it.</description></item><item><title>ASP.NET Core and Webpack - Part 2</title><link>https://ryansouthgate.com/asp-net-core-and-webpack-part-2/</link><pubDate>Tue, 12 Sep 2017 16:06:02 +0000</pubDate><guid>https://ryansouthgate.com/asp-net-core-and-webpack-part-2/</guid><description>In the second and final part of this short series, I&amp;rsquo;ll setup Webpack &amp;ldquo;production&amp;rdquo; (cache-busting) builds and add script tags (from Webpack created file names - with hashes) dynamically from C# in ASP.NET Core.
You can find Part 1 here: /asp-net-core-and-webpack-part-1/
The code for both Parts 1 &amp;amp; 2 can be found on Github: https://github.com/ry8806/ASPNETCore_Webpack
Why is this necessary?Running developement and production environments are very different. Especially in the JavaScript world.</description></item><item><title>ASP.NET Core and Webpack - Part 1</title><link>https://ryansouthgate.com/asp-net-core-and-webpack-part-1/</link><pubDate>Tue, 29 Aug 2017 14:07:54 +0000</pubDate><guid>https://ryansouthgate.com/asp-net-core-and-webpack-part-1/</guid><description>In this 2-part series, I&amp;rsquo;m going to demonstrate a non-SPA ASP.NET Core and Webpack integration. We&amp;rsquo;ll be using Webpack to bundle/minifiy JavaScript code that will supplement the C# &amp;ldquo;server-rendered&amp;rdquo; pages in an application.
Part 1 - will focus on setting up Webpack with ASP.NET Core and getting the bundles to the browser.
Part 2 - will comprise of polishing our solution. Allowing for debug bundling at Development time and Minified bundling for Release by looking at ways of reading the Webpack stats.</description></item><item><title>ASP.NET Core MVC - Common Components/(Partial)Views across applications</title><link>https://ryansouthgate.com/asp-net-core-mvc-common-components-view-across-applications/</link><pubDate>Fri, 21 Jul 2017 14:10:00 +0000</pubDate><guid>https://ryansouthgate.com/asp-net-core-mvc-common-components-view-across-applications/</guid><description>By the end of this post you&amp;rsquo;ll have an understanding of how to share common View Components and (Partial)Views across different Web Applications in ASP.NET Core MVC.
I&amp;rsquo;m in the process of building a website, I&amp;rsquo;m lazy and don&amp;rsquo;t like writing things twice/maintaining two slightly different copies of code/components. I recently found the need to share components across two different web applications (they&amp;rsquo;re really 2 parts of the same goal - one is a Blog, the other is the main Web Application).</description></item><item><title>Elastic Email + JavaScript - Adding a Contact (subscribing to a newsletter)</title><link>https://ryansouthgate.com/elastic-email-javascript-subscribing-newsletter/</link><pubDate>Thu, 22 Jun 2017 17:06:25 +0000</pubDate><guid>https://ryansouthgate.com/elastic-email-javascript-subscribing-newsletter/</guid><description>In this post I&amp;rsquo;m going to walk through some real-world code, currently in use by a friend for his Blog/Personal site, which subscribes people to his newsletter subscription list. I&amp;rsquo;ll be using the Elastic Email service and JavaScript.
AimThe aim of this code is to detail how my friend, switched from one Email Service (which was costing upwards of $150 a month) to Elastic Email. The goal here is to capture email addresses and store them on a managed service.</description></item><item><title>Entity Framework Core - Custom Migrations</title><link>https://ryansouthgate.com/entity-framework-core-custom-migrations/</link><pubDate>Mon, 22 May 2017 14:15:00 +0000</pubDate><guid>https://ryansouthgate.com/entity-framework-core-custom-migrations/</guid><description>In this post I&amp;rsquo;m going to cover the steps needed when setting up Entity Framework Core Custom Migrations. Custom Migrations are not always needed in an application. Entity Framework Core will get most people/businesses quite far with their standard &amp;ldquo;out-of-the-box&amp;rdquo; functionality. However there are times where EntityFramework does not support a specific scenario, as I came to find out recently.
Example code for this post can be found here: https://github.com/ry8806/Blog-EFCore-CustomMigration</description></item><item><title>Quitting my job</title><link>https://ryansouthgate.com/quitting-my-job/</link><pubDate>Wed, 10 May 2017 14:43:39 +0000</pubDate><guid>https://ryansouthgate.com/quitting-my-job/</guid><description>Skydive Instructor: &amp;ldquo;You&amp;rsquo;ve just jumped out of a perfectly good plane at 14,000ft&amp;rdquo; As of the 28th April, I&amp;rsquo;m officially jobless&amp;hellip;.well that&amp;rsquo;s a bit of a stretch, I&amp;rsquo;ve got a job&amp;hellip;.full time in fact, I&amp;rsquo;m just not getting paid for it.
Back in February, I handed in my 1 month&amp;rsquo;s notice, for my (then) current place of work. I&amp;rsquo;d been there since finishing University (Summer 2011). 5 years and 10 months is a long time in the IT industry.</description></item><item><title>Aurelia - One month in...</title><link>https://ryansouthgate.com/aurelia-one-month-in/</link><pubDate>Mon, 03 Apr 2017 20:13:23 +0000</pubDate><guid>https://ryansouthgate.com/aurelia-one-month-in/</guid><description>I&amp;rsquo;ve been using Aurelia for a month now, I thought this would be a good time to write down my experiences with the framework.
Moved teams at work today, going to be working using @AureliaEffect full time, excited and I&amp;#39;m digging through the excellent docs already!!
&amp;mdash; Ryan (@ryan_southgate) March 6, 2017 DocsComing from an AngularJS background I&amp;rsquo;ve developed the ability to cope with mediocre documentation. And use alternative avenues like blog posts/StackOverflow to figure out how things should be done.</description></item><item><title>AngularJS Radio Track by Directive</title><link>https://ryansouthgate.com/angularjs-radio-track-by/</link><pubDate>Fri, 27 Jan 2017 16:20:00 +0000</pubDate><guid>https://ryansouthgate.com/angularjs-radio-track-by/</guid><description>In this post I&amp;rsquo;ll explain and demonstrate a directive I&amp;rsquo;ve written which allows you to use similar behaviour of the &amp;ldquo;track by&amp;rdquo; options we are given in select lists in AngularJS with radio buttons.
AngularJS does change tracking on any object which is assigned to a scope. Every time it examines our objects and looks for changes is called a &amp;ldquo;Digest Cycle&amp;rdquo;. AngularJS uses &amp;ldquo;dirty checking&amp;rdquo; to check if our objects have changed.</description></item><item><title>Angular 2 and ASP.NET Core MVC</title><link>https://ryansouthgate.com/angular2-aspnet-core-mvc/</link><pubDate>Wed, 19 Oct 2016 16:00:00 +0000</pubDate><guid>https://ryansouthgate.com/angular2-aspnet-core-mvc/</guid><description>By the end of this post you will be able to integrate Angular 2 into an ASP.NET Core MVC Application (MVC page using both Razor and Angular 2)
Both Angular 2 and .NET Core have been RTM for a little while now. So I&amp;rsquo;ve been keen to get them working together. There are plenty of examples online of how to create a .NET Core Web API and have an Angular 2 SPA talk to it.</description></item><item><title>AngularJS text filter (with C# string.format() syntax)</title><link>https://ryansouthgate.com/angularjs-text-filter-with-c-string-format-syntax-2/</link><pubDate>Tue, 13 Sep 2016 12:53:18 +0000</pubDate><guid>https://ryansouthgate.com/angularjs-text-filter-with-c-string-format-syntax-2/</guid><description>If you&amp;rsquo;ve read a few posts from my blog you&amp;rsquo;ll probably see that I&amp;rsquo;ve done a bit of work in the .Net world. My day job requires me to use the .Net Framework for server side programming. I&amp;rsquo;ve spent a lot of time using C# and enjoy the language.
I&amp;rsquo;ve also been doing a lot of work in the JavaScript (front-end) world recently. Primarily using the AngularJS framework.
By the end of this post you&amp;rsquo;ll be able to use C#&amp;rsquo;s string.</description></item><item><title>Number formatting in Highcharts with Custom Tooltips</title><link>https://ryansouthgate.com/number-formatting-in-highcharts-with-custom-tooltips/</link><pubDate>Wed, 20 Jul 2016 07:36:06 +0000</pubDate><guid>https://ryansouthgate.com/number-formatting-in-highcharts-with-custom-tooltips/</guid><description>Highcharts is a fantastic library for drawing interactive charts on your website. I&amp;rsquo;ve been using it extensively over the past year or two. There are loads of extensibility points, if you don&amp;rsquo;t like the default behaviour or need to change it slightly to fit your requirements, then it&amp;rsquo;s more than likely Highcharts has you covered. Highcharts provides some very sane defaults, however the more you use it and want to push its boundaries the more you&amp;rsquo;ll have to do yourself.</description></item><item><title>Per-Type De/Serialisation in Json.Net WebApi</title><link>https://ryansouthgate.com/per-type-de-serialisation-in-json-net-webapi/</link><pubDate>Tue, 14 Jun 2016 19:33:27 +0000</pubDate><guid>https://ryansouthgate.com/per-type-de-serialisation-in-json-net-webapi/</guid><description>Just a quick post today, to help me remember more than anything - also because I couldn&amp;rsquo;t find anything on Google with a similar title.
This post will show Per-Type De/Serialisation in a Json.Net WebApi. I&amp;rsquo;m going to show how to do custom de/serialisation using Json.Net Converters.
Media Formatters vs ConvertersThere is another way to do custom de/serialisation of a Type. They are called Media Formatters. You can write a custom MediaTypeFormatter.</description></item><item><title>Azure WebJobs and Dependency Injection</title><link>https://ryansouthgate.com/azure-webjobs-and-dependency-injection/</link><pubDate>Tue, 10 May 2016 16:01:37 +0000</pubDate><guid>https://ryansouthgate.com/azure-webjobs-and-dependency-injection/</guid><description>In my quest to find the &amp;ldquo;right way of doing things&amp;rdquo;, or failing that &amp;ldquo;the least worst way of doing things&amp;rdquo; - I&amp;rsquo;ve come across a fairly well hidden secret about using Dependency Injection in Azure WebJobs.
The full source code can be found in GitHub
In this post I&amp;rsquo;m assuming you already know how to set up a WebJob (if not check out this article) - yes it is a bit long, but it&amp;rsquo;s comprehensive and will give you great insight into the WebJobs SDK.</description></item><item><title>$q.all() - Combining promises in AngularJS</title><link>https://ryansouthgate.com/q-all-combining-promises-in-angularjs-2/</link><pubDate>Tue, 19 Apr 2016 17:40:16 +0000</pubDate><guid>https://ryansouthgate.com/q-all-combining-promises-in-angularjs-2/</guid><description>Using $q.all() in AngularJS couldn&amp;rsquo;t be simpler. $q is an Angular Service which facilitates running functions asynchronously. It&amp;rsquo;s based on a library (Q) by Kris Kowal.
$q.all() allows us to wait on an array (or object) of promises, $q.all() will combine these into a single promise.
One PromiseThe returned promise abides by the following two rules:
If one promise in the array fails, the combined promise fails If all promises succeed, the combined promise succeeds BeforeBefore $q.</description></item><item><title>IConfiguration in .NetCore</title><link>https://ryansouthgate.com/iconfiguration-in-netcore/</link><pubDate>Wed, 23 Mar 2016 08:55:03 +0000</pubDate><guid>https://ryansouthgate.com/iconfiguration-in-netcore/</guid><description>In this post I&amp;rsquo;m going to give an overview of IConfiguration in .NetCore and also give examples on how to set this up with a provider and how to use different files to override configuration values.
The full source code is available here. I will try and keep this up to date until .NetCore RTM (v1).
IConfigurationThe package can be found here: https://www.nuget.org/packages/Microsoft.Extensions.Configuration
This package contains the Interfaces and functionality for retrieving config values/sections.</description></item><item><title>Adding Multiline text to Highcharts</title><link>https://ryansouthgate.com/adding-multiline-text-to-highcharts/</link><pubDate>Tue, 15 Mar 2016 21:44:58 +0000</pubDate><guid>https://ryansouthgate.com/adding-multiline-text-to-highcharts/</guid><description>In this post I&amp;rsquo;m going to detail how to add multiline text (and centre it) in Highcharts.
Note: You could do this in pure html - however I&amp;rsquo;m going to be doing it using the Highcharts renderer (it uses SVG) as I need the text in the SVG. As it will be sent to the server and rendered into a PNG by an SVG-to-Bitmap library (see that post here)
If you want to skip ahead and see the code - the Plnkr is here: http://plnkr.</description></item><item><title>C# server-side rendering with Highcharts</title><link>https://ryansouthgate.com/c-server-side-rendering-with-highcharts/</link><pubDate>Thu, 11 Feb 2016 20:07:24 +0000</pubDate><guid>https://ryansouthgate.com/c-server-side-rendering-with-highcharts/</guid><description>I&amp;rsquo;ve been using Highcharts for a year now - in my day job. We have all sorts of compliance to worry about - what we show on screen also needs to be reflected in the pdfs that get emailed/printed out.
I&amp;rsquo;ve been looking into ways of rendering the charts server-side. The preferred process (by Highcharts themselves) being using PhantomJS and the &amp;ldquo;Highcharts-convert.js&amp;rdquo; file - detailed here.
That&amp;rsquo;s great and it works, but for me - running a headless browser on a server just to render a chart seems a bit excessive.</description></item><item><title>Read the code!</title><link>https://ryansouthgate.com/read-the-code/</link><pubDate>Wed, 03 Feb 2016 21:38:11 +0000</pubDate><guid>https://ryansouthgate.com/read-the-code/</guid><description>You should read the code.
Not all the code, but some of it&amp;hellip; the bits you use. I&amp;rsquo;ve been a professional Software Developer for 4/5 years now. I started off in Microsoft C# (which I still use to this day) - but more recently I&amp;rsquo;ve been working a lot with JavaScript - and even touched on NodeJS (for a day) last week.
The great thing about a lot of frameworks, server/client side (NodeJS, AngularJS, React, Ruby - to name a few), is that they&amp;rsquo;re open source.</description></item><item><title>AngularJS putting a template in the $templateCache</title><link>https://ryansouthgate.com/angularjs-putting-a-template-in-the-templatecache/</link><pubDate>Wed, 20 Jan 2016 12:58:00 +0000</pubDate><guid>https://ryansouthgate.com/angularjs-putting-a-template-in-the-templatecache/</guid><description>This is a quick post about getting a template in the $templateCache.
A SPA (Single Page Application) I&amp;rsquo;m building at work, consists of 4 &amp;ldquo;views&amp;rdquo;. We expect the users to be on this page for a good while (anything from 5 mins upwards). The threat of losing internet connectivity is a real one and would render our application useless (we regularly call out to a JSON API to update results on the user&amp;rsquo;s request).</description></item><item><title>NDC London 2016 Review</title><link>https://ryansouthgate.com/ndc-london-2016-review/</link><pubDate>Tue, 19 Jan 2016 22:35:41 +0000</pubDate><guid>https://ryansouthgate.com/ndc-london-2016-review/</guid><description>I was at NDC London 2016 last week (13th - 15th Jan), kindly paid for by my employer. I&amp;rsquo;ve never been to a &amp;ldquo;paid&amp;rdquo; conference before, in fact I&amp;rsquo;ve only ever been to one conference and that was last year (Future Decoded).
After being to 2 conferences in 3 months, I&amp;rsquo;ve decided - this has got to change!
The morning of the 13th I was up at 5am to get the train down to London Euston and then tube to London Excel Centre.</description></item><item><title>Upload to Amazon S3 using AngularJS</title><link>https://ryansouthgate.com/upload-amazon-s3-using-angularjs/</link><pubDate>Thu, 24 Dec 2015 22:41:47 +0000</pubDate><guid>https://ryansouthgate.com/upload-amazon-s3-using-angularjs/</guid><description>In this post I’m going to detail the steps to upload to Amazon S3 using angularJS. A friend contacted me as he needed a simple way for his users to upload large (GBs) files to his Amazon S3 bucket.
Before, he was using a mix of dropbox sharing via and manually uploading once he has possession of the files. Obviously this doesn’t scale the more users who are trying to upload files – he only has a certain number of hours in a day and (at the time) had a really slow internet connection – think dialup speeds.</description></item><item><title>Microsoft Future Decoded 2015 (Technical Day)</title><link>https://ryansouthgate.com/microsoft-future-decoded-2015-technical-day/</link><pubDate>Thu, 19 Nov 2015 20:54:07 +0000</pubDate><guid>https://ryansouthgate.com/microsoft-future-decoded-2015-technical-day/</guid><description>It’s been about a week since the Microsoft Future Decoded 2015 (Technical Day), so I thought now would be a good time to recap and share my thoughts on it.
Future Decoded was a free event at the London ExCel centre and filled up very quickly – I took the train down the day before and met my good friend Ian Rufus there, we went for a few pints and some BBQ food.</description></item><item><title>jPlayer directive in AngularJS</title><link>https://ryansouthgate.com/jplayer-directive-in-angularjs/</link><pubDate>Mon, 12 Oct 2015 19:35:17 +0000</pubDate><guid>https://ryansouthgate.com/jplayer-directive-in-angularjs/</guid><description>I’m writing a website with a friend. It’s an AngularJS SPA (single page application) – we’re using this to ensure that our website is quick (minimising server-side rendering) and that songs continue to play when “navigating pages” – I say navigating as its not your usual web page navigation. In a SPA a page change happens, the URL changes – however the whole page isn’t reloaded – just the “viewport”. Read up about getting started with SPAs here.</description></item><item><title>Running code after a digest cycle in AngularJS</title><link>https://ryansouthgate.com/running-code-after-a-digest-cycle-in-angularjs/</link><pubDate>Wed, 02 Sep 2015 15:20:58 +0000</pubDate><guid>https://ryansouthgate.com/running-code-after-a-digest-cycle-in-angularjs/</guid><description>While working with AngularJS and Highcharts, I had the need of running code after a digest cycle in AngularJS.
The reason for this:
I have 4 charts on a page, the X-Axis of all charts needs to be “synced” across charts – all charts need the same X-Axis “categories”. Each one of these charts sits in a container with some input fields – these input fields can be edited and then each container can be updated – via a call to a WebApi back-end.</description></item><item><title>Raspberry Pi 2 - Windows 10 IoT - Getting Started</title><link>https://ryansouthgate.com/raspberry-pi-2-windows-10-iot-getting-started/</link><pubDate>Mon, 24 Aug 2015 07:00:09 +0000</pubDate><guid>https://ryansouthgate.com/raspberry-pi-2-windows-10-iot-getting-started/</guid><description>Unfortunately Windows 10 IoT only works on the Raspberry Pi 2 (which is ARM7). It will not work on the “original” Raspberry Pi models (as these are ARM11).
I bought a Rasbperry Pi 2, case, 8GB micro SD card and power cable (standard Micro USB lead – commonly used for phone chargers) from amazon. Amazingly, the price of this came to about £38.
Windows 10To write programs/deploy to Windows 10 IoT on the Raspberry Pi 2 you’ll need a Windows 10 Machine – it’s currently a free upgrade, what are you waiting for?</description></item><item><title>Raspberry Pi - Door Sensor</title><link>https://ryansouthgate.com/raspberry-pi-door-sensor/</link><pubDate>Mon, 10 Aug 2015 06:56:50 +0000</pubDate><guid>https://ryansouthgate.com/raspberry-pi-door-sensor/</guid><description>At work recently, I’ve come to notice how much people use the toilet…..
Bear with me on this one!
We’re currently under a bit of a change at work – we’ve lost a section of our building mostly used for meeting rooms. We’ve also lost a number of toilets.
Now in our “reduced space” we’ve got less toilets for the same amount of people.
This means that getting up to go to the toilet is a bit more of a gamble, you might get up, find one free and feel relieved.</description></item><item><title>Using JavaScript to get CSS properties</title><link>https://ryansouthgate.com/using-javascript-to-get-css-properties/</link><pubDate>Mon, 27 Jul 2015 13:06:42 +0000</pubDate><guid>https://ryansouthgate.com/using-javascript-to-get-css-properties/</guid><description>On a work project using Highcharts, we needed the colours of each series to be “configurable”. Unfortunately on first glance, Highcharts doesn’t support getting colours from CSS out of the box. Instead we need write some code to allow us to use JavaScript to get CSS properties, specifically the colour property and then give those colours to Highcharts to apply to a series.
When creating a chart using Highcharts, we can set the colour of a series through code (when instantiating a chart), as below:</description></item><item><title>Gulp rimraf vs del</title><link>https://ryansouthgate.com/gulp-rimraf-vs-del/</link><pubDate>Mon, 20 Jul 2015 08:55:31 +0000</pubDate><guid>https://ryansouthgate.com/gulp-rimraf-vs-del/</guid><description>I’ve been getting to grips with ASP.Net vNext (beta4 using Visual Studio 2015 RC), by default gulp-rimraf is installed to get rid of files and folders.
I’m unsure whether this is going to be removed in the template for vNext in the future, but it probably should…..
However it has been deprecated, instead you should be using del as the guys at html5boilerplate suggest.
As an added bonus – del (github) protects you from deleting your working directory and supports multiple files</description></item><item><title>Gulp Flatten</title><link>https://ryansouthgate.com/gulp-flatten/</link><pubDate>Mon, 20 Jul 2015 07:56:40 +0000</pubDate><guid>https://ryansouthgate.com/gulp-flatten/</guid><description>Whilst working on a personal project (more of that to follow), I’ve wanted to ensure all the different angularJS files go into the same directory after a build. i.e. I don’t want a folder each for angular.js, angular-resource.js etc
By default, gulp.dest(“dest path here”) overwrites all files in the path with the files from the gulp.src(“source path here”).
For the following folder structure
├── angular │ ├── angular.js │ ├── angular.</description></item><item><title>Web Api 2 - IncludeErrorDetailPolicy</title><link>https://ryansouthgate.com/web-api-2-includeerrordetailpolicy/</link><pubDate>Fri, 17 Jul 2015 10:28:16 +0000</pubDate><guid>https://ryansouthgate.com/web-api-2-includeerrordetailpolicy/</guid><description>I’m writing a series of WebApi 2 Services, and noticed in exception details (mainly stack traces) coming through on calls which were failing. All actions exposed within the WebApi Controllers have a try-catch, however this one wasn’t getting caught (note another way to not have try-catches all over the place is to use ExceptionFilters ). I noticed it was coming from our Unity IoC, specifically from when instantiating a constructor, which in turn was returning a massive stack trace to the client.</description></item></channel></rss>