You may noticed my frantic frequency of posts (I was at two a day for a while month!) has slowed down of late so I thought I'd give a quick update.
NOTE: Translation seems to have broken along the...
Saturday, 12 October 2024 14:40
//
2 minute read
In this site I use Hightlight.js to render code snippets client side. I like this as it keeps my server side code clean and simple. However, I wanted to add a copy button to each code snippet so that...
Saturday, 28 September 2024 14:15
//
5 minute read
It seems like everyone has a version of this code, I first came across this approach from Filip W and recently my old colleague Phil Haack has his version.
Just for completion this is how I do...
Friday, 27 September 2024 06:20
//
4 minute read
In part 1 of this series I showed you how I created a new Newsletter Subscription page. In this part I'll cover how I restructured the solution to allow for sharing of Services and Models between the...
Monday, 23 September 2024 10:45
//
7 minute read
While perusing other people's blogs I noticed a lot of them have a subscription service which allows users to sign up to have an email sent to them weekly with the posts from that blog.
I decided to...
Saturday, 21 September 2024 19:06
//
11 minute read
In a previous post I detailed how I added Grafana to my docker-compose to provide insights into performance for this site. As I have Umami on here AND self host the database for that in this post I'l...
Thursday, 19 September 2024 19:30
//
2 minute read
IF YOU'RE LOOKING FOR A DEVELOPER / LEADER PLEASE CONTACT ME
I've been a freelance developer for more than a decade now (since I left Microsoft really). For the most part it's been perfect for me. I...
Thursday, 19 September 2024 18:30
//
2 minute read
Monitoring is an essential part of maintaining the health and performance of your applications. I already have this site monitoring user visits using Umami and exceptions and errors using Seq but now...
Wednesday, 18 September 2024 04:45
//
6 minute read
This is just a quick article as it builds on the others in the full text search series such as the typeahead dropdown and Postgres full text search.
In this post, I will show you how to implement a...
Tuesday, 17 September 2024 17:36
//
9 minute read
In a previous post I showed you how to create a search dropdown using Alpine.js and HTMX then I showed how we could enable Cross-Site Request Forgery protection using the AntiforgeryRequestToken in...
Monday, 16 September 2024 22:30
//
5 minute read
In this site I use HTMX extensively, this is a super easy way to make your site feel more responsive and smoother without having to write a lot of JavaScript.
NOTE: I'm not entirely happy with this...
Sunday, 15 September 2024 06:45
//
8 minute read
Polly is a critical part of any .NET developer's toolkit. It is a library that allows you to define policies for handling exceptions and retries in your application. In this article, we will explore...
Sunday, 15 September 2024 02:20
//
9 minute read
I've blogged many times about how I use Markdown to create my blog posts; I really like this approach but it has one major drawback - it means I have to do a complete Docker build cycle to update a...
Saturday, 14 September 2024 00:30
//
10 minute read
Donut hole caching can be a useful technique where you want to cache certain elements of a page but not all. However it can be tricky to implement. In this post I will show you how to implement a...
Thursday, 12 September 2024 16:00
//
4 minute read
So I've posted a LOT in the past on using Umami for analytics in a self-hosted environment and even published the Umami.Net Nuget pacakge. However I was having an issue where I wanted to track users...
Thursday, 12 September 2024 14:50
//
8 minute read
One of my projects since starting this blog is an almost obsessive wish to track how many users look at my website. To do this I use Umami and have a BUNCH of posts around using and setting up Umami....
Thursday, 05 September 2024 23:45
//
10 minute read
In the previous part of this series where I tested Umami.Net tracking methods
The Problem
In the previous part I used Moq to give me a Mock<HttpMessageHandler> and return the handler used in...
Wednesday, 04 September 2024 20:30
//
8 minute read
I'm a relative noob using Moq (yes I'm aware of the controversies) and I was trying to test a new service I'm adding to Umami.Net, UmamiData. This is a service this allows me to pull data from my...
Wednesday, 04 September 2024 13:22
//
4 minute read
One of the MANY things that bug me on LinkedIn is the "how to interview developers" post. There are tons of them, and they almost all fall into three camps:
The classic brain-teaser "How would you...
Tuesday, 03 September 2024 19:00
//
5 minute read
In the previous article, we discussed how to test the UmamiClient using xUnit and Moq. In this article, we will discuss how to test the UmamiBackgroundSender class. The UmamiBackgroundSender is a bit...
Tuesday, 03 September 2024 09:00
//
8 minute read