Vive coding is a thing, rage coding is a thing, but there's this sweet spot right in the middle. I call it guide coding. It's where you're basically you're pair programming with an AI, you're not driving, the AI is driving, and you just hold its hands. Sometimes it's it's just hitting home run after home run after home run, and then every once in a while it'll do something stupid. I want to use a unit testing framework that isn't gonna light up my uh clang tidy like a Christmas tree. So I asked it what the alternatives were, and it recommended a few, but really I wanted to try out Chris Uziak's Boost Extended UT. And sure enough, five minutes or so later, it made changes to my cmake list.txt file, and then one by one just went brrrrrrr and changed all 1700 lines of code. Welcome to ADSP the podcast, episode 233, recorded on May 7th, 2025. My name is Connor, and today I record solo live from the Las Palmas Park in Sunnyvale. I chat about Cursor, Claude 3.7, Gemini 2.5 Pro, and a recent amazing success that I had with these tools. My former home back from 2018 to 2019. And we are recording today from Las Palmas Park because when I arrived here a couple days ago, I was able to get a lifer, which in burder parlance is what you call a bird you've seen for the first time, and it was the I actually don't know how to pronounce this. I looked it up and couldn't find a video of anyone pronouncing this bird's name. Either Mitred or Mitred Parakeet or Conure. And it said it was a rare bird. And they were up in the palm trees in this park. But they are no longer here, and I was hoping to get a very nice background noise. Because they were making the noises that we'll call the my tread parakeets make. But alas, we are back on my last full day in Sunnyvale. And this is a solo episode. First ever solo episode. I think I could be wrong about that. I believe it's episode 233. We're gonna title this one AI Live from Sunnyvale, which is a callback to episode 232, which I recorded with Bryce now almost a month ago, although you listened to it last week, which was entitled Algorithms Live from New York. We might not get any parakeets in the background, but you probably have heard the American Crows. Nothing special about those birds, although they are very intelligent. Anyways, I've got my Merlin app on, and if any bird sounds pop up, I will report. But in the meantime, I am going to give a short solo episode on my massive successes with AI, Gen AI specifically. I am pretty sure that I've mentioned on the podcast, but if I haven't, I've been using Cursor for several months now, but have been relying on it significantly in the last month or two, and I would say my productivity has 10x to 100x. Yes, there are some things that AI is not good at, but there are other things that it's absolutely phenomenal at. And I've told this anecdotal story uh to several folks, including Bryce, over the last week or so, and I thought I'd share it with you here. Why am I not interviewing someone? I did mean to reach out to Ben last week to set something up, uh, but waited a little bit too long, and also to I'm down here in the States from Monday uh until tomorrow, Thursday, and I have to edit this basically before Thursday. And I could have grabbed someone from NVIDIA to chat with, but it's basically been an internal conference, and I am absolutely exhausted. And what I really wanted to just do was come back to this park and get the parakeets in the background and chat about AI. Um, but like I said, no parakeets, only AI and crows, I guess. And so I've been using Cursor. For those of you that don't know, Cursor is one of the AI-assisted IDEs, it's a fork of VS Code. Alternatives to this are Windsurf. I think technically you can hook up Copilot to VS Code as well. And it's got a couple different modes agentic mode, ask mode. There's one other mode that I never use. And you can select the LLM that you want to use. So I only switch between Claude 3.7 and Gemini 2.5 Pro. I find that Claude 3.7 is the best in general, but if you need some larger task, sometimes Claude 3.7 fails at, and the task that I'm going to tell you it did fail at, but Gemini 2.5 Pro absolutely crushed it on this. And the task was basically switching my test framework. So the library that I'm working on, I was using Google Test with. I had roughly 1700 lines of code, roughly 150 tests, and within those tests, 350 plus asserts. So not, you know, 10,000 lines of unit tests, but still, you know, close to 2,000 lines of code to switch, you know, test frameworks is not something I would ever even really consider doing. The reason that I wanted to switch from Google Test is that I used uh cursor and cloud 3.7 basically to set up Clang Tidy and slowly turn on basically all of the linting rules. And Google Test uh does not work well with these linting rules. And if you ask the AI what you should do, it basically recommends that you set up two different Clang tidy files with a two different sets of linting rules, and you have uh a basically a less strict set of linting rules for your unit tests. And I didn't want to do that. The alternative is you know commenting no lint on every single test that has an error, which is basically all of them. Uh, but I basically didn't want to do that. I I want to use a unit testing framework that isn't gonna light up my uh uh clang tidy like a Christmas tree. So I asked it what the alternatives were, and it recommended a few, but really I wanted to try out Chris Uziak's um Boost Extended uh UT because I had seen it either in a Lightning talk or a C talk from a number of years ago, and I know it was super modern, and I was pretty sure that it uh had all the you know fancy bells and whistles and clang format, cling tidy, etc. And I attempted basically to tell Cloud 3.7 I want you to update my CMake list.txt from Google Test to boost extended UT and then just port all my tests. And Clod 3.7 would churn for a little bit and then it would convert, you know, 10% of my test file and discard the other 90%. So epic failure. But like I said, when Cloud 3.7 fails, or when any of the LLMs fail, you just go try another one. Gemini 2.5, it would spin from anywhere from three to five minutes, and to the point where actually it was asking me if I wanted to force quit cursor because it thought it had frozen. Uh but I just said wait a couple times, and sure enough, five minutes or so later, it made changes to my cmake list.txt file, and then one by one just went brrrrrrrrrr and changed all 1700 lines of code. And I think basically, except for a couple errors, it basically worked. That being said, I ended up not using um Chris Uziax library because I used uh thrust pair in this library, and for some reason it was saying that the Ostream, you know, less than less than operator wasn't defined for thrust pair, and even when I defined it, it was still whining about a bunch of stuff. So I spent you know 45 minutes trying to fix this and then gave up. And so then I went and tried um two different libraries. And actually, before I tried uh Chris Uziak's UT library, I actually accidentally tried another one which was called like Min Unit Test, which is a C unit testing framework. It unfortunately uses the UT uh name that Chris Uziac's uh library uses as well, so that was a mistake. I I wasted 20 minutes testing out, you know, uh a different unit testing framework library because I wasn't I wasn't paying close enough attention, which is bound to happen. We do have a bird here that is uh that is flying closer to me. It's not making any noise. Could be an American Robin. Ooh, look at that. We got a Canada goose at the other side of this pool. And uh might have been an American Robin. Anyways, I accidentally tested uh this C unit um testing framework, discarded that, went back to Google test, then tried tried out uh the one I wanted to, boost extended UT. That one didn't work, and then I went to doct test. And um doct test got it up and running in like five to ten minutes, all the tests converted, and it worked great. There was, I think, one lint that it was whining about, which was uh some no discard, and that was only because basically I had cleared out, and so I don't even think that was an issue with dock test, but anyways, within uh a couple extra I had to load no lint a couple things, it was working perfectly, and basically in less than you know three hours or so, I had tested out three different C slash C unit testing frameworks. And if your mind is not like blown by this, like this is not something that I would have ever considered trying to do because it's just too much work, like to port a couple thousand lines of code one by one, and it's such mundane work, and figuring out the mapping from the macros in one library to another library, it's just a headache, and you're not gonna do it. And now you have this tool and it's able to do these kinds of things for you. Anyways, absolutely thrilled. I'm now using DocTest. I think it actually compiles a little bit faster than Google Test as well, and it's phenomenal. So, cursor, I highly recommend you try it out. You know, like I said, I hear a lot of folks they say, oh, I tried this thing and it works terribly. I've run into cases where you know I put cursor and cloud 3.7 in agentic mode and give it uh the ability to you know run commands, I don't have to approve everything, and I'll say, you know, run the tests, look at building.md on how to run tests and how to build, and you know, make changes. If you hit a compilation error, you know, fix it and just basically spin until you get this to work. And after you know, a couple minutes, it'll decide that the best way to solve this problem is by deleting the tests and the corresponding code. So it is far from perfect. Sometimes you gotta smash the AI a little bit um over the head. And I I meant to mention this at the beginning, you know, people talk about vibe coding, which is where you don't check the code. Uh there's another version called rage coding, in my opinion, which is when the AI starts gaslighting you or doing something really stupid, you know. Um the worst case is where it'll have failing tests and just gaslight you and tell you that, oh, perfect, the tests are passing now, problem solved, and then you'll tell it, what are you talking about? You know that the tests are failing, I know that the tests are failing. Why are you telling me that they're not failing? And then it'll run them again. It shows you, you can see in like the little embedded uh terminal in cursor that it fails and it'll just say, perfect, they're passing. And it is it is immensely frustrating. Uh more it's more frustrating than any other thing I've experienced programming. So, you know, vibe coding is a thing, rage coding is a thing, but there's this sweet spot right in the middle. I call it guide coding. It's where you're basically you're pair programming with an AI, you're not driving, the AI is driving, and you just hold its hand. Sometimes it's it's just hitting home run after home run after home run, and then every once in a while it'll do something stupid, or maybe it's not even stupid, it just misunderstands what you want, and you need to hold its hand, you need to guide it, point it in the right direction, and send it off. And sometimes that phase where you're guiding it, it'll last for 30 minutes, 40 minutes in order for you to guide it in the direction. But in the case where, you know, you porting, you know, 1700 lines of of unit tests is gonna take like days, if not like a week, um, it's worth it to spend that 30 minutes. And in this case, it didn't take 30 minutes, but there's been other cases where I've been trying to do something and it really doesn't understand. Um But then once once I do figure out the magic incantation to get it to do exactly what I want, you know, take that incantation, throw it in a cursor rule, and then the next time you want to do something like that, you just invoke the cursor rule and say, hey, do this, follow the rule, and you're good to go. So that's my my solo podcast, folks. It's probably what how long have I been recording for? 10 minutes, 15 minutes? It is so sunny out. It says 13 minutes, so once this kits cleaned up, little intro added, it'll probably be around uh 15 minutes or so. And we we oh we do have a house finch has been recognized. A poorly named bird in my opinion, because they're beautiful. They got pink heads, and they're a beautiful bird, but they got a very boring name of house finch, so they don't get the respect they deserve. If my fiance's listening to this, she'll be chuckling now, because I always I always tell her that. You know, the house sparrow and the house finch. They got they got bad names. House sparrow, one of the most resilient birds in the world. It's everywhere, it's everywhere, every country I've ever gone to. There's the house sparrow kicking around. Anyways, there's vibe coding, there's rage coding, and there's guide coding. I implore you to give guide coding a try. 10x your productivity, 100x your productivity. Um, this is the future. This is the future for software developers. Um for some of you, you're gonna be doing some gnarly template metaprogramming stuff, or const expert metaprogramming stuff, or cutting edge reflection metaprogramming stuff. And guide coding isn't gonna get you very far, but there is a huge uh set of tasks that guide coding with these LLMs are just amazing for. And it's only gonna get better from here. So that's my pitch. We say goodbye to the American crows, to the Canadian geese, and to the house finches. We did not get a appearance from the Midred Parakeet. It's very unfortunate. And with that, I will say hope you have a fantastic day and weekend if you're listening to this on Friday or Saturday or Sunday. Expect to hear from Ben and I next week, where we will be chatting about a number of topics. Maybe we'll talk about the cost of commuting. One of my favorite combinators, the C combinator, the Cardinal, aka Flip and Haskell, aka Commute in the Array Languages. I posted that tweet I don't know how many days or weeks ago at this point. It was a work of art called The Cost of Commuting. Maybe we'll chat about that. Maybe we'll chat about something else. Until then, have a good one.