
Chief Software Architect at @Logos; creator of https://xitter.cf/t.co/YaCAnEAZnm
Bellingham WA, USA
Joined March 2008
- Tweets2.4K
- Following552
- Followers595
- Likes963
Just deployed this change to our standard workflow and saw some .NET restore times (on windows-latest) drop from 5.5 minutes to 1.5 minutes.
Eight years ago I was opening PRs on various GitHub repos to try to drive adoption of MySqlConnector (v0.35.0 at the time).
One finally got merged: github.com/saleem-mirza/seri…
Bradley Grainger retweeted
I'm burning premium requests like there's no tomorrow until June 1st 😎
Starting June 1st, GitHub Copilot will move to a usage-based billing model as GitHub Copilot supports more agentic and advanced workflows.
In early May, you'll see a preview bill experience, giving visibility into projected costs before the transition.
👉 Read more about the upcoming change: github.blog/news-insights/co…
New way to measure ROI on dev tools?
Vendor: This tool costs $99 per engineer per month.
Me: Great, now show me how it reduces token costs per head by that much.
Anyone who uses more Copilot premium requests than you is a slop cannon; anyone who uses fewer is a Luddite.
Looking forward to this week at work!
Replying to @vikhyatk
>just merge it in and then fix it yourself when they're on vacation
truer words have never been spoken
I want something like this for my own work:
- clear indication of AI-authored vs reviewed vs my edits
- collect review notes as I go through
- batch up notes for next prompt
- commit next set of AI changes and repeat, skipping anything already ‘approved’
Strongly agree.
And it’s embarrassing how much this is a forcing function to start doing the right thing. Though they’ve been cluttering build output for years, I’ve finally started cleaning up old projects so I can set TreatWarningsAsErrors and stop LLMs introducing new ones.
“We are building god and it will judge you”
I just finished writing "Cheese Wars: Rise of the Vibe Coder", which explores the important question of whether Big Tech giants would mind if most of humanity turned into cheese wheels. The post also offers tips for getting AI on your side, once it's smarter than we are.
steve-yegge.medium.com/chees…
I didn’t do a true side-by-side test but tried Gemini 3 for the first time today and it struggled in my C# project. It ended up duplicating multiple controller methods instead of making surgical edits. I’m not currently in a rush to try it out again.
Well, that was an interesting experiment. Tested Gemini 3 Pro vs. Claude Sonnet 4.5 vs GPT 5.1 Codex on a real-world task in my harness. Same exact inputs (system prompt, tools, pre-existing session state). Same thinking settings. Here's what I found.
Problem: the TUI renderer of my coding agent harness streams out thinking traces generated by the model. It can render markdown to the terminal. Thinking traces are rendered in italic with a dim gray color. If a model's thinking trace contains an inline code block like seen in the screenshot below, then the text color of the text following the code block is not reset to the dim gray.
The problem is located in two files, about 700 LOC combined. The solution is to reset the color ANSI codes after an inline block in the markdown renderer to the default color. The full changeset of a working fix is about 50-70 LOC. So not a hugely complex task that requires lots of codebase hunting.
Both Sonnet and GPT 5.1 Codex where able to arrive at sensible solutions. Both zeroed in on the relevant files quickly. They did differ in the API choices they made, but the difference was marginal. I liked Codex approach better.
Gemini 3 Pro just struggled. It would fully exploit its thinking token budget, going around in circles. It would reread source files already in its context, without having made any modifications to them. And it clearly was not as familiar with the APIs of chalk and marked, both used in the TUI markdown renderer, as Sonnet and Codex were.
All of this combined led to a non-working solution. I actually let Gemini try it twice, starting from the same point in the session. Results where the same.
I then gave it hints and tried to steer it, but it again went off rails.
So, for my specific use case, in my specific coding agent harness, Gemini 3 Pro did not perform better than Sonnet or GPT 5.1 Codex, as oposed to what we saw in Gemini's benchmark results in its model card today.
That does not mean it will not work for you. But for me, I see no point giving it more time if it fails a simple task that both Sonnet and GPT 5.1 Codex can do without an issue. Cost wise, it's also not a win, as I don't see Google offering anything like Claude Max or GPT Pro. So even less incentive to spend more time with Gemini and make it work.
YMMV, sample of one. Go give it a try yourself. Everything above is fully documented in the live stream video below, if you don't trust my write up. And the code is all on GitHub: github.com/badlogic/pi-mono/…
If your REST API is documented as accepting a "hexadecimal hash digest" then it should also accept uppercase hex strings.
“Yak Shaving” isn't a sufficient metaphor for this code base.
“The path of the righteous man is beset on all sides by the inequities of the selfish and the tyranny of evil men” is much more appropriate.
Bradley Grainger retweeted
Expanding on this a little bit: I don’t want the AI to call me by my name, I don’t want to give it a silly name that it doesn’t care about anyway, I turn off “memory” because I don’t want it to remember things between sessions (it just wastes context and I have no need for it to know what I asked it last week), I prompt the things not to give me fluffy answers or schoolboy essay introductions and conclusions, and one of the results of all of this is that the things just turn out good research for me and write excellent code and don’t waste my time.
I have human friends for companionship. I want the AI to help me with complicated, challenging work. It seems, though, like there are a ton of people out there who really like having parasocial relationships with AI.
Bradley Grainger retweeted
I hadn't thought about this before: unlike regular APIs, MCPs don't need to make any stability promises
"MCP servers are called my LLMs which dynamically read the spec every time, which allow us to constantly change the MCP server. It doesn't matter! We haven't made any promises"
MCP is mostly nonsense, but there are good effects:
1. Tricks management to green-light engineering efforts on APIs and OAuth DCR (Dynamic Client Registration)
2. Tricks LLM clients to integrate with everyone, ie an open-ecosystem, not walled gardens
3. (Just discovered this one today) The fact that MCP is a difference surface from your normal API allows you to ship MUCH faster to MCP. This has been unlocked by inference at runtime
Normal APIs are promises to developers, because developer commit code that relies on those APIs, and then walk away. If you break the API, you break the promise, and you break that code. This means a developer gets woken up at 2am to fix the code
But MCP servers are called my LLMs which dynamically read the spec every time, which allow us to constantly change the MCP server. It doesn't matter! We haven't made any promises. The LLM can figure it out afresh every time
This is why we've shipped capabilities to our MCP server that our API doesn't yet have. We aren't worried about committing ourselves to anything. We can always change the MCP server later and the LLM will figure it out
MySqlConnector 2.5.0 is out, with .NET 10 support: nuget.org/packages/MySqlConn…
.NET 10 is here!
The latest release brings performance boosts, cloud-native enhancements, and AI integration to supercharge your development experience. With improved tooling for #ASPNET Core, expanded C# features, (cont) msft.it/l/6019tMo7l






















