AI-assisted coding feels a bit like being handed the keys to a race car. In the right hands, it’s quick, precise and capable of covering a lot of ground in a very short amount of time. In the wrong hands, it’s still quick - and more likely to end badly. Speed is not the whole storyThe obvious comparison is speed. A race car is built to go fast. AI-assisted coding tools are also built…
IntroLast October, my post “Why I Ditched Disqus for My Blog” 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…
IntroI’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’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…
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 “old” way to do this usually involved searching for “Merge PDF” on Google, clicking the first link, and uploading your sensitive documents to a random server in the cloud. You…
IntroThis will be a short and sweet post. I’m not big on goodbyes. Disqus started showing ads for their “free” 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 “don’t worry about it, it’s not a big thing”. Which in part led me to almost forget it happened. At the time,…
IntroI’ve been searching for a secure and efficient Node in Docker setup for a little while now. And I think I’ve found it! A couple of years ago, I’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’d work on in my spare…
IntroIn Jan 2024, I’d had enough. Upon finishing a day of coding my wrists would start to ache and I’d feel a tightness in my ribs, shoulders and upper back. I’d recently turned 35 and my body isn’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…
IntroI’ve been using cronjobs for a long time. More recently I’ve been testing systemd-timers as they allow dependency management, so I don’t have to check (in the script I’m running) to see if certain services are up/running before my scripts can do their work. In this post I’m going to demonstrate how to create a simple systemd timer service which runs a script on a…
IntroductionRecently I’ve had to work with a data model in C# that the team I’m on doesn’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’s difficult to work with. Using System.Text.Json we could customise the conversion for all properties where the type is…
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’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 “pki” in the error code, didn’t we? Why this certificate doesn’t…
I’ve been a Windows user since first using a mouse. Windows 10 will be the last version of Windows I’ll daily drive, and here’s why… 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…
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’s been few things I’ve missed. However, one small feature of the Windows file explorer I’ve been missing has been the “Copy Full Path” when you select a file, hold shift and right click. This small feature copies the full path of…
In this post I’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’t going to be a waste of time! (expect more bin puns) The ProblemI’ve not got the best memory… Every week (on a Thursday) my local…
In this post I’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’re able to use battle-tested, trusted encryption code. And…
In this post I’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’s…
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’t get cleaned up. Below are a few steps which help reclaim some of that space. Most of these are windows-centric, however…
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’s…
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’s really simple…create a new file in your Solution/Project, for example endpoints-to-test.http and paste the following code: ### Do a…
IntroI’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’m self hosting this blog on a laptop in my house, I’m more concerned about bandwidth and traffic. I don’t have the fastest internet…
In this post I’m going to demonstrate how to globally disable (certain) controller Methods using ASP.NET Core. WhyI’ve been coding a Stripe integration recently. I’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.…
I hate throwing things away, even tech that isn’t working - optimistically believing that I’ll find the time to fix it. I stumbled across the below video a few weeks ago. If you haven’t watched it, give it a watch. Yes, it’s simplistic, it’s heavy on the advertising, but the messaging is solid: Old tech can still have a purpose Although, after a few years of running…
In this short post I’m going to show you the basics of backing up a DVD with MakeMKV, and how to disable Auto Update for MakeMKV (makemkvcon). IntroI’m currently backing up some old DVDs (they age, degrade, and wont last forever). I haven’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’ve got…
In this post I’m going to show you how I recently cleaned up loads of space on my AWS Cloud9 instance, when I got the annoying “No space left on device” 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’t usually exceed 50mb and I’m good at cleaning up old ones. I was surprised to see…
This blog has been hosted on Ghost since I first set it up back in 2016. That’s now changing, for a number of reasons… CostWhen I first signed up with Ghost, I was paying around £56/year for hosting. That’s not cheap, but it’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…
In this post I’m going to take a quick look at the built in Response Caching feature in ASP.NET Core. Sometimes, as developers, we’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’t change frequently. Think Countires, Currencies,…
In this blog post I’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’ve been looking for an excuse to use it. So when a project for a well known betting site came along, this seemed…
In this post I’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 “day job”. Complex by Default?I’ve worked on large pieces of software for most of my career, they’re often complex, there’s (almost always) some kind of strange and specific incantation…
IntroThis blog post details my first experience of writing F# code. I’ve been interested in learning F# for about a year now, however never really got round to it as I don’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…
Twit TipsI’ve seen some software funnies in my time, in this on-going mini-series I’m going to be sharing them with you. These posts will all contain genuine code I’ve seen personally, in production systems, (or even code I’ve written myself) - I’ll leave the guessing who wrote it up to you!I’ll hopefully highlight some “interesting” code I’ve…
In this (small) post I’m going to demonstrate how to use a VueJS custom directive to hide an element, whilst still keeping it’s occupied space. It makes good use of the CSS Property “visibility”. v-ifThe built in Vue.js directive (v-if) works by totally removing the element from the DOM when it’s bound condition is false. Therefore we wont be looking looking at this…
In this post we’ll look at implementing Auditing in EF Core. specifically recording the last user to “touch” (create, update or delete) a row. This is especially useful when there are multiple users who can edit the same records, it’s helpful to provide an identifier of the last person who made changes to that data. Sometimes for compliance purposes and sometimes for…
Hi 👋, I’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’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…
I’ve been writing a lot of Entity Framework Code recently for a company developing an OLTP System and I’d forgotten how much you get “for free” with Entity Framework. It really can do a lot, in complex systems like this, it’s nice to not care about the complexity of the data layer, instead focus on the problems at hand - the business problems. We’ve been given…
Twit TipsI’ve seen some software funnies in my time, in this on-going mini-series I’m going to be sharing them with you. These posts will all contain genuine code I’ve seen personally, in production systems, (or even code I’ve written myself) - I’ll leave the guessing who wrote it up to you! I’ll hopefully highlight some “interesting” code I’ve…
I’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’ve found it very difficult to assertain what Docker actually is. Consequently, I didn’t know if I needed it or if it’d make my life any easier… A few weeks ago, I was introduced to Docker by a colleague, who gave me a quick run down…
This is a very short post about a nice VueJS component I’ve written recently. I’ve just been working on Yummit.co’s “Add Product” flow of screens. We’ve been refining the User Interface for this lately. We’re giving the user’s the ability to add multiple ingredients or cuisines to a product. Previously we gave the users an input and a button saying…
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….. 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’re currently in “Pre-release” mode, ensuring…
In the second and final part of this short series, I’ll setup Webpack “production” (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 & 2 can be found on Github: https://github.com/ry8806/ASPNETCore_Webpack Why is this…
In this 2-part series, I’m going to demonstrate a non-SPA ASP.NET Core and Webpack integration. We’ll be using Webpack to bundle/minifiy JavaScript code that will supplement the C# “server-rendered” 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.…
By the end of this post you’ll have an understanding of how to share common View Components and (Partial)Views across different Web Applications in ASP.NET Core MVC. I’m in the process of building a website, I’m lazy and don’t like writing things twice/maintaining two slightly different copies of code/components. I recently found the need to share components across two…
In this post I’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’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…
In this post I’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 “out-of-the-box” functionality. However there are times where EntityFramework does not support a specific scenario, as I came to find…
Skydive Instructor: “You’ve just jumped out of a perfectly good plane at 14,000ft” As of the 28th April, I’m officially jobless….well that’s a bit of a stretch, I’ve got a job….full time in fact, I’m just not getting paid for it. Back in February, I handed in my 1 month’s notice, for my (then) current place of work. I’d been there…
I’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'm digging through the excellent docs already!! — Ryan (@ryan_southgate) March 6, 2017 DocsComing from an AngularJS background I’ve developed the ability to cope…
In this post I’ll explain and demonstrate a directive I’ve written which allows you to use similar behaviour of the “track by” 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 “Digest Cycle”.…
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’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.
If you’ve read a few posts from my blog you’ll probably see that I’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’ve spent a lot of time using C# and enjoy the language. I’ve also been doing a lot of work in the JavaScript (front-end) world recently. Primarily using the AngularJS framework. By…
Highcharts is a fantastic library for drawing interactive charts on your website. I’ve been using it extensively over the past year or two. There are loads of extensibility points, if you don’t like the default behaviour or need to change it slightly to fit your requirements, then it’s more than likely Highcharts has you covered. Highcharts provides some very sane defaults,…
Just a quick post today, to help me remember more than anything - also because I couldn’t find anything on Google with a similar title. This post will show Per-Type De/Serialisation in a Json.Net WebApi. I’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…
In my quest to find the “right way of doing things”, or failing that “the least worst way of doing things” - I’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’m assuming you already know how to set up a WebJob (if not check out this article) - yes it is a bit…