Skip to content

Instantly share code, notes, and snippets.

@hallojoe
hallojoe / replace-claude-spinner-verbs.md
Last active November 4, 2026 15:58
How to customize Clade's spinner verbs. The messages that appear when Claude is working.

You can customise Claude’s spinner messages to display wording that better suits your preferences. The configuration location depends on the tool you use.

Claude Code CLI

Add the following to ~/.claude/settings.json for your user account, or .claude/settings.json for a specific project. Please note that Claude Code CLI is currently unavailable in our environment.

"spinnerVerbs": {
  "mode": "replace",
  "verbs": ["Thinking", "Writing code"]
}
@hallojoe
hallojoe / danish-computing-pioneers.md
Created October 22, 2026 07:53
Denmark has produced a remarkable number of people whose work has shaped programming languages.

Influential Danish Computing Figures

Denmark has produced a remarkable number of people whose work has shaped programming languages, software infrastructure, cryptography, and digital products worldwide.

Person Known for Contribution
Anders Hejlsberg C#, TypeScript, Turbo Pascal, Delphi Original author of Turbo Pascal, chief architect of Delphi, and a principal designer behind C# and TypeScript. Source
Bjarne Stroustrup C++ Designer and original implementer of C++. Source
Rasmus Lerdorf PHP Created PHP. Born in Greenland; grew up in Denmark and Canada. Source
@hallojoe
hallojoe / mssql-on-apple-silicon-arm64.md
Created September 15, 2026 19:42
Full MS SQL Server on Apple Silicon ARM64 with Podman

Full SQL Server on Apple Silicon with Podman

Apple Silicon is ARM64. Azure SQL Edge runs natively on it, but it does not support SQL CLR. Umbraco 17's database upgrade uses a SQL feature that requires CLR while migrating system dates to UTC, so Azure SQL Edge cannot complete that upgrade.

The supported workaround for local development is the full SQL Server 2022 Linux image, which is x86_64 only. Podman's Apple Hypervisor machine can use Rosetta to run that image on Apple Silicon.

Create the Rosetta-backed Podman machine

Install Rosetta:

@hallojoe
hallojoe / UMBRACO_APPLICATION_URL.README.md
Created August 5, 2026 10:41
Understanding the Umbraco `UmbracoApplicationUrl`

Understanding UmbracoApplicationUrl

UmbracoApplicationUrl acts as the fallback base URL when Umbraco cannot determine a hostname from the content tree.

This typically happens when:

  • No hostname has been assigned to the root content node.
  • You're using hostless root paths such as:
    • /
  • /en
@hallojoe
hallojoe / AspNetSites.Program.cs
Last active August 5, 2026 11:18
Set up a reverse proxy for your .NET 10 projects
var builder = WebApplication.CreateBuilder(args);
...
builder.Services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedHost |
ForwardedHeaders.XForwardedProto;
@hallojoe
hallojoe / umbraco_hosting_examine_en.md
Last active February 16, 2026 12:10
Umbraco LuceneDirectoryFactory and LocalTempStorageLocation Lookup

Umbraco -- Matrix: what to set per environment (Examine + temp)

This guide is a quick lookup matrix for:

  • Umbraco:CMS:Examine:LuceneDirectoryFactory
  • Umbraco:CMS:Hosting:LocalTempStorageLocation

Official Documentation

XML Serialization Control in C#

When working with System.Xml.Serialization.XmlSerializer, you can control how POCO properties are serialized using naming conventions and attributes.


1. The Specified Suffix

  • Pattern: <PropertyName>Specified
  • Type: bool
  • Effect: Controls whether `` is serialized at all.
@hallojoe
hallojoe / indsigtsret.md
Last active August 10, 2024 19:40
Skabelon til forespørgelse om indsigt i persondata

Emne: Anmodning om indsigt i personoplysninger i henhold til GDPR

Kære [Virksomhedens navn],

Jeg skriver for at anmode om indsigt i de personoplysninger, som jeres virksomhed måtte have om mig i overensstemmelse med artikel 15 i General Data Protection Regulation (GDPR).

I henhold til artikel 15 i GDPR har jeg som registreret person ret til at få bekræftet, om der behandles personoplysninger om mig, og i bekræftende fald adgang til følgende oplysninger:

  • De personoplysninger, som behandles om mig.
  • Formålene med behandlingen.
public static class UriStringExtensions
{
public static Uri? ToUri(this string? uriString, UriKind uriKind = UriKind.RelativeOrAbsolute)
{
if (string.IsNullOrWhiteSpace(uriString)) return null;
return Uri.TryCreate(uriString, uriKind, out var uri) ? uri : null;
}
public static IEnumerable<Uri> ToUriCollection(this string? uriCollectionString, char separator = ',', UriKind uriKind = UriKind.RelativeOrAbsolute)
[#*0-9]\uFE0F?\u20E3|©\uFE0F?|[®\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA]\uFE0F?|[\u231A\u231B]|[\u2328\u23CF]\uFE0F?|[\u23E9-\u23EC]|[\u23ED-\u23EF]\uFE0F?|\u23F0|[\u23F1\u23F2]\uFE0F?|\u23F3|[\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC]\uFE0F?|[\u25FD\u25FE]|[\u2600-\u2604\u260E\u2611]\uFE0F?|[\u2614\u2615]|\u2618\uFE0F?|\u261D(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642]\uFE0F?|[\u2648-\u2653]|[\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E]\uFE0F?|\u267F|\u2692\uFE0F?|\u2693|[\u2694-\u2697\u2699\u269B\u269C\u26A0]\uFE0F?|\u26A1|\u26A7\uFE0F?|[\u26AA\u26AB]|[\u26B0\u26B1]\uFE0F?|[\u26BD\u26BE\u26C4\u26C5]|\u26C8\uFE0F?|\u26CE|[\u26CF\u26D1\u26D3]\uFE0F?|\u26D4|\u26E9\uFE0F?|\u26EA|[\u26F0\u26F1]\uFE0F?|[\u26F2\u26F3]|\u26F4\uFE0F?|\u26F5|[\u26F7\u26F8]\uFE0F?|\u26F9(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF](?:\u200D[\u2640\u2642]\uFE0F?)?|\uFE0F(?:\u200D[\u2640\u2642]\uFE0F?)?)?|[\u26FA\u26FD]|\u2702\uFE0F?|\u2705|[\