Chief Software Architect at @Logos; creator of https://xitter.cf/t.co/YaCAnEAZnm

Bellingham WA, USA
Joined March 2008
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.
I figured out why "dotnet restore" performance is so bad on Windows runners as opposed to Linux runners: GitHub Actions doesn't override NUGET_PACKAGES, NUGET_HTTP_CACHE_PATH to point to the D:\ drive which is where the builds are done with faster disk I/O 👇
2
1
6
675
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…
26
24
3
986
70,654
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.
1
192
Anyone who uses more Copilot premium requests than you is a slop cannon; anyone who uses fewer is a Luddite.
5
156
This, but for code reviews
Stealing this prompt, we under-appreciate the value of propagandizing ourselves.
1
231
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
1
1
224
I literally ran this yesterday (not by choice 😔)
If you remember this, your back probably hurts.
3
274
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’
Unpopular opinion: Current code review tools just don’t make much sense for AI-generated code When reviewing code I really want to know: - The prompt made by the dev - What corrections the other dev made to the code - Clear marking of code AI-generated not changed by a human
1
1
163
Great recommendation; I really enjoyed reading this.
i struggled a bit but chuck klosterman's Raised in Captivity is good. short story collection from one of the last great american essayists. it's hard to explain but it very much fits the bill. link in next tweet
1
115
The fine tuning of the fundamental constants of the universe is truly amazing
2
87
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.
Should be common sense, but it isn't: the better organized your code, the better results you get from LLM coding tools LLMs like: 1. Static typing 2. TreatWarningsAsErrors = on 3. Tests 4. Consistent application of patterns 5. Consistent code organization (i.e. vertical slice)
2
132
I always reject cookies to make sure websites can't track me
67
“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…
77
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/…
1
118
If your REST API is documented as accepting a "hexadecimal hash digest" then it should also accept uppercase hex strings.
1
48
“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.
54
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.
4
5
28
1,051
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
28
22
7
403
52,830
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
83