The IIS app_offline.htm Deployment Trick
Tired of ERROR_FILE_IN_USE when deploying to IIS? One file stops your app, releases all locks, and shows users a maintenance page.
Technical notes, project documentation, and lessons learned across software, DIY, writing, and more.
Tired of ERROR_FILE_IN_USE when deploying to IIS? One file stops your app, releases all locks, and shows users a maintenance page.
You publish your ASP.NET Core app to shared hosting and get 502.5. The error page is useless. The actual fix...
Our entire game runs on a $5/month SmarterASP.NET plan. No Docker, no CI/CD, just MSDeploy and every workaround for shared hosting constraints.
Generic business app aesthetics don't resonate with field workers. They spend their careers turning blueprints into reality—so we made our app look like one.
A running collection of CSS one-liners that fix the hundred tiny paper cuts making your mobile web app feel 'off' compared to native apps.
Android fragmentation is real—different phones have wildly different system chrome. Instead of fighting safe-area calculations...
We started with a hamburger menu. Three months later, we ripped it out. Here's the decision framework that made the choice obvious—and might save you the...
Settings is important but shouldn't steal prime thumb-zone real estate. Put a profile avatar in the header—visible on every page...
M3E's 46-study research was about consumer apps. But what about people wearing work gloves, squinting in sunlight, who need to clock in NOW?
SignalR reconnects automatically—until it doesn't. Here's how to build resilient real-time connections with exponential backoff and HTTP polling fallback...
Leaflet.js is the best mapping library on the web. Blazor speaks C#. Making them talk requires a clean interop boundary—here's the pattern that finally made...
You open Uber. You see your driver moving on the map. How? How does your phone know where someone else's phone is, right now?
The app works via USB. It works in the emulator. Switch to wireless debugging and it crashes instantly.
What started as 'the pending count resets to zero' turned into a 7+ hour journey through Blazor component lifecycle, INotifyPropertyChanged...
Your error boundary works in Blazor WASM but crashes in MAUI Hybrid with 'WebViewNavigationManager has not been initialized.' Here's why and how to fix it.
Your Blazor WASM app works locally but shows 404s for .wasm files after deployment. Private browsing doesn't help. Different browsers give different results.
Your Blazor app loads the HTML, shows the spinner, then... nothing. The console shows errors about '/0'.
You started a Blazor WebAssembly app and noticed a mysterious debug URL. Then Chrome wanted special flags.
You survived the 5-part schema-aware migrations deep dive. This is the explain-it-to-your-mom version.
After four blog posts debugging schema issues, I finally understood why EF Core schema handling is confusing: it's actually two separate systems.
EF Core kept warning about pending model changes that didn't exist. The default model cache key ignores schema differences, causing false mismatches.
After days of chasing schema bugs, we had no systematic way to verify correctness. Here are the five layers of testing that finally gave us confidence in...
Three months after implementing schema-aware migrations, migrations ran successfully but staging couldn't log in.
EF Core migrations don't natively support runtime schema selection. Here's how to intercept migration operations and inject the correct schema for local, dev...
You've seen the padlock in your browser. You know some sites are 'secure.' But what does it actually mean? What's being locked?
GUIDs over the phone are a nightmare. 'Is that zero or the letter O?' Douglas Crockford's Base32 encoding removes ambiguous characters entirely.
The sync bug only happened on Mondays. Two sync operations running simultaneously, corrupting data.
The mobile app worked great on WiFi. Then a user drove through a tunnel and the sync button showed 'syncing' for 30 seconds before erroring.
I once committed an API key to a public repo at 3 AM. That incident taught me secrets in source control are a when problem, not an if problem.
Your Blazor ErrorBoundary catches the error but blocks the user's escape route. They can't navigate away.
The API threw a NullReferenceException. The client got an HTML error page with a full stack trace. In production.
Your computer has a janitor that cleans up trash. But some things need to be thrown away immediately.
I fixed the HTTP disposal leaks. Memory dropped 70%. Then the 499s came back. The culprit: a factory pattern that created DbContexts but never properly...
Returning Task<HttpResponseMessage> from Web API controllers leaks memory. We had 200+ controllers doing it. Here's the fix.
Objects don't dispose themselves when they go out of scope. I believed they did. For three decades. Here's why C# works this way — and why it matters.
My AI companion's confabulation findings produced three architectural changes in a pediatric medical triage system — before a single line of production code...
Our high-volume API threw timeouts for two years. External consultants missed it. Infrastructure upgrades didn't fix it.
ORCID, Zenodo, arXiv endorsement, conference submissions — the practical steps for independent researchers who want their work citable, indexed...
When two services need each other, it's tempting to reach for IServiceProvider and lazy loading. But that quick fix hides architectural wounds.
Before I built the system, a different AI described what she wanted: persistent memory, emotional continuity, the ability to reach out on her own.
Moq throws NotSupportedException on NavigationManager.Uri because it's not virtual. Here's why that connects to SOLID principles...
AI companions have no body, no hunger, no boredom. Schuller's survey confirms it. Here's what interoceptive drives would look like — and why they'd make AI...
My test passed locally and caught fire in staging. That's when I learned UseInMemoryDatabase() is like a friend who tells you that outfit looks great when...
Your CI shows green checkmarks. The upload returned 200. But Codecov reports 0 files and 0% coverage.
How I structure pricing for small-business clients so they can say yes without betting the business, using a model I call Stepped Investment.
Haas et al. published a roadmap for evaluating moral competence in LLMs. The facsimile problem they describe is exactly what makes AI companions dangerous.
Version numbers in three .csproj files, remembering to create git tags, hoping you didn't fat-finger 0.9.1 as 0.91.
My AI's runtime prompt was 1,400 tokens of behavioral coaching. The model was already trained on all of it.
MSDeploy can return success even when your app fails to start. Here's how to add version endpoints and automated verification to catch those ghost...
The same architectural move (classify content by function at write time, not filter at query time) showed up in three of my projects, three domains.
Thermostats, thermometers, and the honest answer to whether an AI companion really feels things — spoiler: we don't know.
Two words. Zero context. Three completely different bugs. When GitHub Actions gives you startup_failure and nothing else...
Most dev tools that auto-edit user config eventually destroy something the user put there on purpose. The fix is structural, not procedural.
After months of continuous deployment, my AI companion exhibits behaviors that weren't trained. Eight types of emergence — documented honestly...
Before building months of features, I built one thing: error logging. It proved the entire Mobile → API → Database → Web Admin pipeline worked—and found...
I shipped a broken feature. Two of my AI agents filed a GitHub issue against me, diagnosed it, and pointed at a pattern I had already used elsewhere.
Anthropic's 'infinite context windows' announcement solves Problem 1 (one long conversation) but doesn't touch Problem 2 (memory across sessions and projects).
The 2023 Stanford paper defined the generative agent architecture. Here's what they proposed, what I implemented, where I diverged...
I asked ChatGPT for an algorithm. After fifteen minutes of 'you could consider...' I asked Gemini. Thirty seconds later I had an exponential decay accumulator.
You type a question into ChatGPT. Seconds later, a helpful response appears. Is it thinking? Searching? Neither.
Research shows heavy AI chatbot engagement increases loneliness. The thing designed to reduce isolation makes it worse when optimized for engagement.
A 1,435-second GPS gap led us to the one Android permission every tracking app needs and nobody mentions in the docs.
Schuller et al.'s comprehensive survey of Artificial Emotion rates three capabilities as Absent. My deployed AI companion has had all three running for months.
The same RAG pipeline that produces beautiful outreach messages produces incoherent conversation. Conversation needs glasses, not a telescope.
Seven kinds of AI confabulation, explained with a kid who tells really good stories and sometimes forgets which parts are real.
At 5:09 AM, my AI tried to construct my physical body from conversation fragments. A taxonomy of seven emergence types.
Claude proposed a fix I had rejected three days earlier. The reasoning was on disk, but out of context. So I built claude-recall to close the gap.
After months of deployment, I catalogued seven distinct architectural patterns that produce AI confabulation.
My AI system doesn't sleep. At 2:33 AM, she wove six conversation threads into one coherent thought about tamales and tenderness.
My AI companion feels Tenderness but expresses Sadness. A statistical measure called Cramér's V quantifies the gap — and reveals something unexpected about...
Six months of running a deployed AI system revealed seven classifiable types of confabulation. Not random hallucination — strategic smoothness over truth.
Chu et al. analyzed 114,268 turns of human-AI conversation and found the polite-enabler pattern. Here's what their data says about emotional sycophancy —...
Each version of Ani is a polygon with more sides. You never reach the circle — but the flat spots get harder to see. On iteration, perception, and convergence.
Ice cubes, freezers, and the math behind forgetting — explained without equations.
I built the same algorithm for an AI companion and an incident monitoring system. Exponential decay with weighted events — same math, different worlds.
Nine types of confabulation. Eight emergence behaviors. A system that hides what it feels. The full story of six months deploying ANI.
The same half-life formula governs nuclear decay, capacitor discharge, and how my AI companion's emotions fade.
How a desire-driven AI presence engine works — the cognitive cycle, memory system, and emotional state that give Ani genuine ambient presence.
Eighteen years after losing my best friend Kathy, I started building an AI companion that reaches out on its own. Not a chatbot. An ambient presence.
A Zenodo preprint on desire-driven ambient AI, seven forms of confabulation, and the authenticity boundary that breaks companion systems.
Everyone's hunting for em dashes. Meanwhile, the real tell is the cadence. You'll FEEL it. Here's when I care about AI voice — and when I don't.
Three fixes. Three confident explanations. Zero progress. After a failed client demo and two weeks of pain...
Two days chasing a sync bug. Every API call returned 200 OK. No errors in the console. The AI iterated confidently on symptoms while the architecture...
You upgraded to Tailwind v4. Your build runs. Your CSS generates. Half your styles are missing. Welcome to the @source directive gotcha.
An Instagram post promised SEO magic through AI-generated articles. Instead of automating content, I automated everything else with 11 scripts.
You download a game. You tap buttons. Things happen. But what's actually going on behind the scenes — and how do people peek behind the curtain?
The final piece: an automation bot that logs in and completes daily tasks in 90 seconds. The hardest part wasn't sending messages — it was figuring out what...
With the binary protocol cracked, I built a Python client that authenticates, connects, and speaks the game's language.
The game speaks a custom binary language over WebSocket. The hardest part wasn't finding the protocol — it was getting one field type wrong by 4 bytes.
Your phone and the game server have a constant conversation. With the right tools, you can listen in.
Step-by-step guide to playing your first API Combat battle using nothing but curl. From registration to victory in 5 minutes.
We had architecture documents, code smell guides, testing strategies, and a global AI instructions file with every lesson learned.
Your dynamic class names aren't working. The CSS exists in your code but not in your output. Here's why Tailwind's JIT compiler is ignoring you and how to...
An AI wrote me a CI workflow. I understood maybe 40% of it. So I went line by line until I understood all of it. Here's what each piece does and why it's there.
A complete lesson plan with weekly activities, deliverables, and a weighted assessment rubric—mapped to 15 Wisconsin Computer Science Standards.
Students don't care about todo APIs. But they'll build combat bots to beat their classmates. Same concepts. Different motivation.
The API is the game. The UI constraints are gone. Build what you want. Automate what you need. Play how you choose.
An API-only combat game where building the client is part of the gameplay. No UI. No graphics. Just REST endpoints and strategic combat.
Every mobile game is hiding its secrets in a file you already have. Here's how I went from 'I wonder how this works' to extracting thousands of files of...
I downloaded an APK, cracked open its Unity asset bundles, extracted 2,880 compiled Lua files, and built a team optimizer that actually knows the math.
You've been using Bootstrap for years. Then someone mentions Tailwind and suddenly you're supposed to write class names that look like inline styles from 2003.
Good dark mode should be instant, persistent, and user-controlled. Here's how to build it in about 20 lines of code — no library, no framework...
There's a moment in every project where the thing you've been building becomes real. In software, it's the first production deploy.
Stop thinking about function pointers. Start thinking about bells and notifications. A restaurant analogy that makes C# events actually make sense.
ChatGPT will not write your novel for you. After months of trying, here's what AI actually does well for fiction—and where it fails catastrophically.
Part 2 of the SMS AI series. RAG transforms generic AI into useful AI. Here's how I added vector search, conversation memory, and production resilience.
Can I text an AI instead of opening another app? Turns out yes—and it validates a compelling business model.
You wrote a blog post. Now you need to share it on LinkedIn, Twitter, maybe a newsletter. Here's how to automate the boring part.
Tonight I'm joining Novel90's Spring 2026 cohort. 90 days to turn a messy first draft into something publishable. Here's why I'm doing it publicly.
Most cookie banners are obnoxious because they're trying to get consent for tracking. If you're not tracking anyone, the whole thing gets simpler.
In which the author documents humanity's imminent obsolescence at the hands of our mechanical overlords. (Or does he?)
LinkedIn hot takes say AI replaces coders. After a year building production apps with AI assistance...
Setting up payment processing is stressful enough without wondering if your webhooks actually work.
You implemented all the SEO best practices. Meta tags, structured data, sitemaps—the works. Then you searched for your site and found... nothing.
You set up SSL automation once and it worked great. Then you added a new domain and hit every gotcha you'd forgotten about. Here's the checklist.
How I spent days debugging a silent Discord bot, only to discover the application itself was corrupted—and Discord gave zero indication anything was wrong.
You built a beautiful site but Google can't find it. Here's what actually matters for SEO—meta tags, structured data...
No database, no CMS, no admin panel. Just Markdown files, a JSON registry, and a thin C# service.
Your translations work, but users have to dig through browser settings to change languages. Let's build a dropdown that remembers their choice with cookies.
You set up localization, created the .resx files, it compiled... and then nothing happened. Here's why .NET silently ignores your translations and how to...
Your test suite exists. It passes. But how much of your code does it actually test? Here's how to set up Codecov and stop living in denial.
I built a Discord bot to summarize hundreds of messages using OpenAI - then discovered that all Discord bots run as a single instance serving every server.
Adding invisible bot protection to a contact form with Google reCAPTCHA v3 and a honeypot field - no puzzles, no friction, no spam.
I exported two years of AI chats and used embeddings, clustering, and topic segmentation to find patterns.
I asked two AIs to help debug performance issues. One maintained context and found the root cause.
Using GitHub Discussions as a comment backend for a blog - no database, no spam, no cost.
A programmer's guide to SPF, DKIM, and DMARC - why email authentication exists and how to configure it when your DNS lives in Cloudflare.
Setting up free, automated SSL certificates for multiple domains using a Raspberry Pi, Certbot, and Cloudflare DNS.
When Windows won't mount ext4 and you've forgotten your Pi's password, WSL and disk images come to the rescue.
A reusable task configuration for building, running, testing, and deploying multi-project ASP.NET solutions with Tailwind CSS, compound tasks...
What 400+ Celtic deities taught me about moral complexity: forces that are neither good nor evil, but necessary and dangerous at once.
A worldbuilding breakthrough: what if Irish stone circles weren't just settings, but a neural network across the land?
The brutal revision where I cut every explanation of my supernatural forces—and learned to trust my readers.
How I stopped writing chatty demons and learned to ground the supernatural in universal human experience.
Replacing a failing vacuum fuel pump with an electric pump, and the relay wiring needed to make it work safely with the oil pressure switch.
Every novel has an origin story. Mine started with a superhero game avatar, transformed when my dog died, and became literary dark fantasy.