Blog
Technical Blog
Notes on engineering efficiency, delivery quality, fitness practice, and AI engineering experiments.
.NET AOP with Castle DynamicProxy: Implementing Cross-Cutting Concerns
Move logging, audit, caching, and timing concerns into proxy layers without hiding core business rules there.
C# Value Types, Reference Types, and Object Semantics
A focused explanation of class, struct, and object semantics: when to model values and when to model object identity.
.NET Managed Heap and Garbage Collection: How Object Lifetime Is Managed
From allocation and reachability to generational collection and IDisposable, understand what GC solves and what it does not solve.
C# Equals, GetHashCode, and Hash Collection Semantics
Why custom equality must handle both Equals and GetHashCode, and how hash-based collections use them.
C# double, decimal, and Business Precision
Why binary floating point has precision issues, and how to choose numeric types for money, discounts, and approximate calculation.
C# ConditionalAttribute: Keeping Debug Diagnostics out of the Main Flow
How ConditionalAttribute helps with debug, logging, and diagnostic calls, and where its boundary differs from #if.
Daily Development Workflow with the dotnet CLI
Connect dotnet new, restore, build, test, run, and publish into a workflow shared by local development and CI.
.NET Thread Costs, Thread Pool, and Async Boundaries
From stack and scheduling cost to the thread pool and async boundaries, understand why modern .NET should not create threads casually.
C# lock, Deadlocks, and Shared-State Governance
A focused note on using lock correctly, how deadlocks form, and how lock ordering and critical-section design reduce risk.
.NET BlockingCollection and Producer-Consumer Backpressure
Understand BlockingCollection through the producer-consumer model: capacity, blocking, cancellation, and backpressure.
ASP.NET Core Dependency Injection and Lifetime Selection
DI lifetimes are not registration syntax. They are design choices about resources, thread safety, and request boundaries.
MediatR Request Handlers and Pipeline Behavior Boundaries
Use MediatR to decouple requests and handlers without turning simple CRUD into unnecessary abstraction.
HttpClientFactory and Polly: Making External HTTP Calls More Resilient
Stable external HTTP calls come from combining client lifetime, timeout, retry, circuit breaking, and fallback.
TCP Connection Lifecycle: What Handshake and Teardown Solve
Understand TCP three-way handshake, four-way teardown, half-close, TIME_WAIT, and what to inspect when debugging connection issues.
How to Treat WCF as a Legacy .NET Service Communication Asset
WCF once unified SOAP, Remoting, queues, and service contracts; today it is better treated as a legacy asset with explicit migration boundaries.
Contract-First Service Communication with gRPC in .NET
Why gRPC fits internal service calls, strong contracts, and streaming, and where it may not be the right choice.
JWT Authentication and Token Validation in .NET APIs
JWT validation must check signature, issuer, audience, expiration, and claims. Signed does not mean encrypted.
NuGet Source Management and Private Package Governance
A focused note on nuget.config, private feeds, package unlisting, credentials, and dependency-confusion risk.