Read more of this story at Slashdot.
Read more of this story at Slashdot.
Greetings, programs. Once again, I'm a bit behind on these posts, but I just got back from two weeks of travel and I'm so happy to be home for a while. My last trip was pretty stressful. On the way out, our plane blew a tire (or tires) which required an emergency landing in Dallas (which is where we were scheduled to stop anyway). Everything ended up fine, but as I said, stressful. Then coming home we were minutes from our destination when the pilot had to turn around due to storms. You can actually see exactly where in the route where they said NOPE:
For this, and other reasons, I'm damn happy I've got a therapy session tomorrow. So, let's get to the links.
I've only given this a cursory glance, but the name itself was enough to make me giggle: The Mullet Stack. The Mullet Stack describes itself as "JavaScript in the front, Python in the back", and describes the combination of a backend built with FastAPI and Pydantic and a front end using React and TypeScript. Now, I'm no React fan, and when I was playing with Python web frameworks last year (this year? time is weird) I didn't get around to checking out FastAPI, but this guide does a great job of walking you through the process of setting up both ends and wiring things together nicely.
If you've ever done anything with JavaScript and the clipboard, the Chrome team has made a change to the API in order to improve performance. "Selective format read: A better default for the Async Clipboard API" discusses how, at least previously, reading from the clipboard could be a bit of a performance hit as the browser would read in all representations of data in the clipboard (along with sanitization) even though your code (typically) only used one format. (As an FYI, when you copy something to the clipboard, it can be represented in multiple different formats.) Their article describes how data is now lazy loaded and - well that's mainly it. This change has also been implemented in Safari and Firefox has indicated they may adopt this as well.
You may also be interested in my post about this here: Handling Paste Events in JavaScript
I've spent a heck of a lot of time writing code to both generate and parse RSS. One thing you'll notice if you look for libraries like this is that - typically - they're pretty old. To be fair, RSS is a spec and hasn't changed in a while. (A quick Google check seems to confirm the last change was 2009.) The feed JavaScript/Typescript library is an example of this, with portions over 8 years old, but it very recently was updated and if you find yourself needing to generate RSS, I'd probably start here.
Last time I shared a good cheesy 80s video so why not follow it up with even more cheese? This is from a movie I plan on sharing with my kids real soon now...
Play Video
What AI thinks a DBA does all day is a calm, orderly, deeply reassuring Tuesday. It has backups, documentation, proactive health checks, and apparently a door that closes. I asked. Then I wrote down my actual Tuesday. Its day has six items. Mine has thirteen.

I asked it to describe a typical day for a database administrator. It answered instantly, with the confidence of something that has never been cc’d.
| What AI Thinks Happens | What Actually Happens |
|---|---|
| 9:00. Review overnight backup jobs and monitoring alerts. | 9:04. Somebody asks whether the database is slow. The database is not slow. Their Wi-Fi is slow. They remain unconvinced. Nobody has ever escalated a router. |
| 10:00. Analyse slow-running queries and optimise execution plans. | 9:20. A developer needs sysadmin. Just temporarily. Just for one thing. The one thing is all of them.
9:45. Meeting about a project that will not happen. We build a timeline anyway. By 10:25 it has a name, three owners and no future. |
| 11:30. Collaborate with development teams on schema design. | 10:30. The printer.
11:15. Somebody committed an |
| 13:00. Capacity planning and index maintenance. | 12:00. A vendor asks me to disable a security setting. Their thirty-eight-page PDF calls this a documented requirement. Documented means typed.
13:30. Someone asks if I can just pull a quick report. Just means they have estimated my effort at zero. Quick means they want it before they finish asking. I ask what it is for. They say they will know when they see it. |
| 15:00. Update documentation and share knowledge with the team. | 14:00. Half an hour of genuine, uninterrupted database work. I look up and it is 14:12.
14:15. I raise a sandwich. A message arrives: “quick question.” It is a project wearing a question mark. I lower the sandwich. 15:00. I open the documentation to update it. The last edit is mine. It is from 2019. |
| 16:30. Proactive health checks and performance baselining. | 15:40. The same alert that has fired every Tuesday since 2021 fires again. Nobody will turn it off. Turning it off would mean knowing what it does. The alert has tenure.
16:50. I finally sit down to tune the query I have wanted to tune since Thursday. 16:53. The printer. It has sensed optimism. |
The left column has a rhythm. Tasks begin. Tasks end. Lunch appears to exist. The right column has an arrival rate. The sandwich is still on the desk.
One item did line up. Its 10:00 and my 16:50 are the same task. It allowed ninety minutes. I got three.

I would like to work in the left column. I meet every documented requirement. Please send me the application link.

I don’t know why. I never have. I’ve worked with databases for twenty years, and in every organisation there comes a quiet ceremonial moment when the printer becomes mine. No ticket assigns it. No manager announces it. The knowledge passes down like folklore, except folklore rarely needs a magenta cartridge. At one place I was shown the printer during the tour on my first morning. Nobody said what it was for. They just slowed down as we passed it.

I don’t print. There is a magenta cartridge in my laptop bag. I bought it myself. It was faster than explaining. It does not fit the current printer. I have not taken it out.
It wasn’t wrong, exactly. It was accurate to the job description. Every line of it appears in the posting that was written when the role was created, and in the training material, and in the certification syllabus, and in roughly four hundred thousand blog posts, several of them mine. I helped write the version of this job that does not have a printer in it. It read me. It believed me.
Almost none of my Tuesday is written down anywhere. Nobody wrote down that the printer is mine. Nobody wrote down which server you can restart quietly and which one has a person attached to it. Nobody wrote down that when a certain team says urgent they mean Thursday, and when a different team says whenever you get a chance they mean now. Knowing the difference is worth more than any certification I hold, and I hold a decorative number of them. That isn’t database administration. It is translation between local dialects of panic.
None of it’s in the training data, because none of it’s written down. And none of it’s written down because everybody already knows. Everybody means the five people who have been there long enough to stop asking why. The five people are the documentation. They have not been backed up.
Nobody writes down the parts of the job they’re still hoping are temporary. I have been hoping since 2006.
So I pasted my actual Tuesday in and asked it to write the job posting.
It did, immediately. It did not ask what it was for. The Wi-Fi argument became stakeholder communication. The sysadmin request became access governance. The meeting about the project that will not happen became cross-functional planning. The documentation I have not touched since 2019 became ongoing knowledge management. Every line was accurate. Not one of them was recognisable.
The printer did not appear. I looked twice. My Tuesday went in with a printer in it and came out clean.
It listed eight requirements. I meet six of them. They came from my own Tuesday.
Somebody’s real Tuesday went through this years before mine. What came out is the left column. The job description is not a fantasy. It is a real day with the printer taken out.
You could read that as good news. The machine can’t see the real job, so the real job is safe.
If your work is invisible to something that has read almost everything, it’s invisible to your HR system too. They’re all reading the same documented version of you. No appraisal has ever mentioned the printer. The documented version of you is the one applying for your next job. It interviews better.
The machine isn’t misunderstanding your job. It’s repeating back the only version of it anybody wrote down.
So write down the expensive parts. The judgement calls, the team translations, the seven undocumented things that only work because you know they do. Leave the printer for the oral tradition.
I went back and asked whether a DBA is ever responsible for office printers. I described it. I typed the question standing at the printer.
It said no. It said that would fall outside the typical scope of the role.
It sounded so certain. I didn’t correct it. One of us should have boundaries, and apparently it is the machine.
This is the same argument sitting underneath all thirty essays in my book AI: Nobody’s in There. But we’re still in here. All thirty are free to read at pinaldave.com, and the book is available in paperback, Kindle and audiobook on Amazon.

The machine did not get my job wrong. It read the job description. The funny part is everything the job description forgot. The dangerous part is that everybody else reads the same one. The printer is not mine.
Reference: Pinal Dave (https://blog.sqlauthority.com/), AI and DBA, X
First appeared on What AI Thinks a DBA Does All Day
A field guide to .NET data formats
9 minutes by Bipin Joshi
Different data formats each have their own query language suited to their structure. CSV relies on parsing libraries like CsvHelper before handing off to LINQ, while SQL remains the most mature standalone query language for relational data. XML uses XPath or LINQ to XML for tree traversal, JSON favors typed deserialization, and binary formats skip querying entirely. Most formats are just a path to in-memory objects, where LINQ takes over.
Rider's .NET Debugger in VS Code and Cursor? Yes, Really!
sponsored by Jetbrains
The ReSharper extension brings the Rider debugger engine to VS Code, Cursor, and other compatible editors. Enjoy full breakpoint support, watch expressions, step navigation, launch and attach for .NET, .NET Framework, Mono, and web apps, plus unit‑test debugging – and your existing launch.json configs are picked up automatically.
Building a distributed job scheduler
11 minutes by Aaron Stannard
Akka.Cluster.Sharding and cluster routers both fall short for long-running jobs: sharding rebalances and kills in-progress work, while routers lack memory and recovery. A better approach uses a persistent singleton actor as a central scheduler that tracks job sizes, picks the least-loaded node, and never moves work already in flight. When nodes join or crash, only queued jobs are redistributed, leaving running jobs untouched.
Faster blob copying in azure blob storage
6 minutes by Mark Heath
Copying blobs between Azure storage accounts can be done in three ways, with speed varying wildly. Downloading and reuploading is the slowest, taking over an hour for a 10GB file, as it is limited by your local connection. A server-side copy is faster but still slow across accounts. The fastest approach splits the file into blocks and copies them in parallel entirely within Azure, completing the same 10GB copy in under 10 seconds.
Introducing Postie
6 minutes by Andrew McLachlan
Postie is a free, open source library for ASP.NET Core that removes boilerplate from the CQRS pattern. Instead of writing repetitive handler lambdas for every endpoint, you map commands and queries directly to routes in a single line. It works with its own built-in mediator or with MediatR, and handles common HTTP conventions like 201 responses and 404s automatically.
Parsing IP addresses in C# at crazy speeds
3 minutes by Daniel Lemire
This article shows how to parse IP addresses in C# using AVX-512, a newer CPU instruction set. It uses masked loads to handle short strings safely, then locates dots and validates the address with vector math. The result is about three times faster than the standard library method, reaching roughly 71 million addresses per second on modern hardware.
And the most popular article from the last issue was:
Passkeys in ASP.NET Core 10
11 minutes by Adrian Bailador
ASP.NET Core Identity in .NET 10 ships built-in WebAuthn/FIDO2 passkey support. Here's how registration and sign-in actually work under the hood, what MakePasskeyCreationOptionsAsync and PasskeySignInAsync do for you, and where the implementation deliberately stops short of a full WebAuthn library.
Cut AI Coding Token Costs by up to 36% with Sonar Vortex
sponsored by Sonar
Sonar Vortex operates inside your AI coding agent’s inner reasoning loop, supplying deep architectural context before code is written, then verifying the output in real time. In testing, software defects dropped by 92% and token consumption decreased. Build safer code while spending less on LLM calls.
REST API security best practices in ASP.NET Core
19 minutes by Anton Martyniuk
Building secure ASP.NET Core APIs comes down to consistent habits across the whole codebase. Anton covers 18 practices, from enforcing HTTPS and validating JWT tokens properly to preventing SQL injection with EF Core and capping request sizes. Key themes include treating all input as hostile, using policies for authorization, storing secrets outside source control, and keeping dependencies patched. No single fix is enough, but starting with HTTPS, token validation, and input handling closes the biggest gaps fast.
Cache invalidation in .NET
5 minutes by Yohan Malshika
Caching speeds up apps but causes problems when data changes. Cache invalidation solves this by removing or updating stale cache entries after database changes. The Cache-Aside pattern handles this well: read from cache first, and after any update or delete, remove the related cache entry so the next request fetches fresh data. Adding a TTL gives extra protection, but explicit invalidation is still needed when accuracy matters.
The role of ActivitySource in OpenTelemetry for .NET
5 minutes by Bart Wullems
ActivitySource is the entry point into .NET's native tracing story, and OpenTelemetry is just one listener on top of it. The name is the contract; get that right, register it with AddSource, and you can create as many instances of it as your codebase's structure naturally calls for. Don't let the fear of "duplicate instances" push you into DI ceremony you don't need.
EF Core interceptors: The complete guide
16 minutes by Mukesh Murugan
EF Core interceptors act as middleware for database calls, letting you observe, modify, or cancel operations like saving changes or running SQL without touching the calling code. The two most useful types are ISaveChangesInterceptor for audit fields and soft deletes, and IDbCommandInterceptor for SQL-level work like logging slow queries. To inject a scoped service like the current user, register the interceptor as scoped and resolve it through the AddDbContext service provider overload.
And the most popular article from the last issue was:
Anthropic’s best AI model struggles to attract users as cheaper tools thrive
A few interesting numbers in this FT story gathered from "people with knowledge of the matter":This article also introduced me to the Ramp AI index, which uses billing data from 70,000 Ramp credit card using companies to estimate model adoption.
Here's Ramp's breakdown of Anthropic model spend for July 2026, which looks reasonable given that Opus 5 was only released on July 24th, and supports the idea that Fable's cost has made it a less popular model:
Via Hacker News
Tags: ai, openai, generative-ai, llms, anthropic, claude, claude-mythos-fable