Skip to content

Instantly share code, notes, and snippets.

@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|[\
@hallojoe
hallojoe / osi.md
Created November 10, 2023 09:54
Description of the 7 OSI layers.

OSI Layers

The OSI (Open Systems Interconnection) model is a conceptual framework that standardizes the functions of a telecommunication or computing system into seven abstraction layers. Each layer in the OSI model serves a specific purpose and communicates with the adjacent layers. Here's a brief description of each layer from the bottom (Layer 1) to the top (Layer 7):

Physical Layer (L1):

  • Function: Deals with the physical connection between devices.
  • Activities: Transmission and reception of raw bit streams over a physical medium, such as cables or wireless signals.
  • Devices: Hubs, cables, repeaters.

Data Link Layer(L2):