Advertisement · 728 × 90

Posts by

Post image

You don't need an audio file to create a metronome click!

Built this entirely with Web Audio API oscillators.

5 lines of code, exponential envelope, zero file overhead.

Here's how:

#WebAudio #JavaScript

5 hours ago 1 0 0 0
Post image

Cool trick: How to make ONE drum sample sound like TWO different drums

I played with playbackRate in Web Audio API and it's surprisingly effective at making different tones

No expensive sample libraries needed! 👇

#WebDev #Audio #JavaScript

1 day ago 0 0 0 0

Optimizely CMS 13 is officially here and it’s a total shift in the DX landscape.

✅ .NET 10 Upgrade
✅ Visual Builder as default
✅ Graph-powered Content Manager
✅ Figma-to-Code workflows

It’s the ultimate win for the Editor Experience.

#Optimizely #CMS13 #DotNet #WebDev

2 days ago 1 0 0 0

Dev by trade, but a massive advocate for the Editor Experience. To build better tools, you must know how they’re managed.

Thrilled to be 4x @Optimizely Certified:
✅ SaaS CMS Admin
✅ DXP Admin
✅ Experimentation Mgr
✅ CMP Admin

#Optimizely #Certification #DXP

2 days ago 1 0 1 0
Post image

Building a drumming app taught me: JavaScript timers SUCK for audio.

After 30 seconds at 180 BPM, setInterval drifts noticeably off-tempo.

The fix? Web Audio API's "schedule ahead" pattern. Here's how it works: 🧵

#WebAudio #JavaScript #WebDev

3 days ago 2 0 0 0
Post image

You can now add operators to classes you didn't write.

Want to "add" two Workshop objects or combine Paths with a +? Use static extension operators in .NET 10.

#SoftwareEngineering #DotNet10 #DotNet

4 days ago 2 0 0 0
Post image

Stop scrolling through thousand-line event logs.

Sort your Kubernetes events by timestamp to see exactly what just broke. It’s the fastest way to spot a CrashLoopBackOff or a failed mount.

#k8s #cloudnative #Kubernetes

5 days ago 2 0 0 0
Post image

Stop repeating this!
Use Extension Blocks to group all your logic for a specific type. It’s cleaner, more organized, and supports properties + operators too.

#dotnet #csharp #codingtips

6 days ago 1 0 0 0
Post image

Just stumbled onto these built-in agents in VS2026. Not sure how long they’ve been hiding there, but the "Modernize" and "Debugger" agents seem really useful. If you haven't clicked that lightning bolt icon yet, you’re missing out. #VisualStudio #GitHubCopilot

1 week ago 2 1 0 0
Advertisement

"Stop hardcoding Schema.org JSON-LD in templates. We made structured data a first-class CMS property in Optimizely with custom PropertyList types. Content editors manage SEO data, API consumers get validated JSON. Win-win #SEO #dotnet #optimizely

1 week ago 0 0 0 0

Securing @Umbraco media doesn't need a plugin.
We just implemented a custom .NET middleware that intercepts all /media requests. If the request is missing our custom auth header, it's an immediate 401.

Clean, fast, and keeps the private assets private.
#umbraco #dotnet #security #webdev #backend

1 week ago 0 0 2 0
Post image

Redis and Distributed Sessions is the only way to load balance properly.
Stop pinning users to a single server and start scaling horizontally.

#redis #backend #dotnet #infrastructure

1 week ago 0 0 0 0
Preview
Building Rudiment Roulette: A Deep Dive into Modern Web Audio with .NET 10 and Vue 3 Learn how to build a precision drumming app with .NET 10 Minimal APIs and Vue 3. Master Web Audio API scheduling, pitch shifting, and reactive state management.

Rudiment Roulette is live!

I combined my love for drumming with some serious tech: Web Audio API, Vue 3, and .NET 10.

Check out the build here: stuartgreig.dev/blog/rudimen...
#dotnet #vue #drumming

1 week ago 0 0 0 0
Home Posted by Stuart Greig on March 19, 2026

Don't miss a single update from stuartgreig.dev
Get the latest posts delivered straight to your inbox.

Sign up here:
🔗 stuartgreigdev.beehiiv.com?modal=signup

1 week ago 0 0 0 0

Found something cool today. I am moving more of my Kubernetes workflow into VS Code using the Kubernetes Tools extension.
It handles cluster navigation, log streaming, and resource editing without constant context switching to the CLI.
#kubernetes #k8s #vscode #devops

1 week ago 2 0 1 0
Preview
Migrating Legacy Password Hashes: The Fallback Password Hasher Pattern When migrating an existing application to ASP.NET Core Identity, you often face a critical challenge: your users' passwords are hashed using a legacy algorithm that differs from Identity's default…

Following on from my post about migrating legacy hashes, I have published a full technical breakdown on the blog.

stuartgreig.dev/blog/migrati...
#dotnet #csharp #identity

2 weeks ago 0 0 0 0
Advertisement

🐛 Debugging tip: If Vimeo iframes are breaking your browser back button, check your GTM tags.
We found a tag adding `player_id` params that were polluting browser history.
One disabled tag later = problem solved! ✅

#webdev #debugging #GTM

2 weeks ago 0 0 0 0

Need to process data in batches?

Forget the complex math. Use .Chunk() in LINQ:
1) Takes an IEnumerable
2) Splits it into fixed-size arrays
3) No external libraries needed

#dotnet #codingtips

2 weeks ago 0 0 0 0

Container stuck in CrashLoopBackOff?

Running kubectl logs <pod> usually shows nothing because the new container hasn't crashed yet.

The real hero:
kubectl logs <pod> --previous

See exactly why the last one died.

#Kubernetes #K8s #DevOps

2 weeks ago 2 0 0 0

Kubernetes Secret Store gotcha that caught me out this week.
Updating a secret in Azure Key Vault doesn't automatically update your Pod. It'll cache the old value forever unless you:
1️⃣ Enable --enable-secret-rotation
2️⃣ Use 'Reloader' to trigger a rolling restart
Stop manual restarts!

#Azure #K8s

2 weeks ago 0 0 0 0

Giving the @Optimizely CMS 13 Preview a spin. 🎡

First impressions:
✅ Smooth upgrade path from v12
✅ Clean modernization of the stack
✅ Docs are already spot on

Jump in early:
docs.developers.optimizely.com/content-mana...

#CMS13 #Optimizely

2 weeks ago 0 0 0 0

Stop blindly trusting reCAPTCHA v3 success: true.

That only tells you the token is valid, not that the user is human.
To kill the bots, your backend needs to:
Check the score (0.0-1.0)
Verify the action name
Set your threshold to 0.5 and adjust.
#dotnet #webdev #security #reCAPTCHA

2 weeks ago 0 0 0 0

Stop using OrderBy(x => Guid.NewGuid()) to shuffle arrays

In .NET 8+, Random.Shared.Shuffle() is the native, zero-allocation way to handle it. Faster, cleaner, and built-in. #dotnet #csharp

3 weeks ago 4 1 1 0
Post image

Converting human-readable durations to ISO 8601 format in C#. Handles "2.5 hours" → "PT2H30M", "3 days" → "P3D". Perfect for Schema course durations, video metadata, or API responses that need proper duration formatting #csharp

3 weeks ago 2 0 0 0
Advertisement
Post image

Simple extension to validate absolute URLs vs relative paths. The file scheme check prevents false positives from file:// URIs on Linux systems.#csharp #dotnet #webdev

3 weeks ago 1 0 0 0

I have been using keyset pagination in EF Core for our larger tables and the speed difference is undeniable. Offset pagination is fine for small sets where you need to jump to a specific page. But for high volume data where you just go next or back keyset is much more stable and fast
#dotnet #efcore

3 weeks ago 0 0 0 0
Post image

Migrating to .net Core Identity without forcing password resets?
Use a FallbackPasswordHasher which extends PasswordHasher<TUser> to
> Verify legacy HMACSHA512 hashes
> Return SuccessRehashNeeded for auto-upgrade
> Seamlessly migrate users on next login
No need to reset passwords

3 weeks ago 0 0 1 0
Post image

Found something cool today. You can just do this now in C# 14.

You can use the null-conditional operator on the left side of an assignment. Writing instance?.Property = value is perfectly valid in .NET 10.

No more null checks.

#dotnet #csharp

3 weeks ago 1 0 0 0

I will admit it: I am late to the Microsoft Applied Skills party.

But the shift in 2026 is undeniable. No more multiple choice guessing. You get a live lab environment and a clock.

Lab based validation beats theory every single time.

#dotnet #azure #ai #learning

3 weeks ago 0 0 0 0
Post image

Stop letting your JSON serializer dictate your object's design.

Using a private [JsonConstructor] + a Static Factory method ensures your domain objects stay valid while keeping the serializer happy.

Encapsulation > Public everything.

#dotnet #csharp #programming #clean-code

4 weeks ago 2 0 0 0