Viktor
00:00:00.000
another less obvious, benefit is that if there some fixes should be done to that PR later, the agent will have all the context, Let's say you start a new session, kind of like completely new session, no idea of what you did. Hey, there is an issue in that pr. Fix it, right? With that description, it knows exactly what was going on.
Darin
00:01:22.777
So it's been two weeks, at least in podcast time, in real time. It's been less than 24 hours for me. when we left episode three 11, I had homework and that homework was to set up. What Viktor wanted me to do is go with cursor and if I wanted to cloud code. Is that a fair statement?
Darin
00:01:47.841
Yeah, well, you lost, um, Claude Code. I, I did both, but let me tell you the story real quick and then we'll get into why I think Claude Code's actually better, which you already had said. So I installed Cursor and. Uh, I did what you said. It, it is great. Okay. It's vs code based. It was nice seeing the diffs communicating with it. I basically had three questions. I'm not gonna give you the third question. It's not that it's a big deal. You can probably guess what it is, but the first question was, I'm new to this project. Explain it to me. Right. Just gi gimme. So these were, these were existing, Jenkins plugins. I'll just, I can say that much. So existing Jenkins plugins is like, I'm new to this project. Explain it to me. Go get a soda, go to the bathroom, come back, The explanation's there.
Darin
00:02:39.463
Then the second question I asked is, what performance improvements can be applied to this plugin or some variation of that statement?
Darin
00:02:48.013
And it would come back after some time, more than soda and bathroom break. but it would come back with answers and sure enough, on one plugin that I worked on. The first thing it recommended was to do X. I was like, oh, that's curious, because again, this is a plugin that I helped maintain, but I really haven't looked at everything in the plugin just because, you know, there's too much code. I was like, oh, that pattern actually looks familiar. I mean, I, I see why it's saying to do it. It's like, lemme go and see how it's actually doing it. It's like, oh, hmm, uh, yeah, this needs to be fixed. So I found another plugin that actually did the pattern correctly. And then I started telling cursor how to rewrite the thing. Like I, I gave it, go ahead and fix that. That wasn't enough information. Right? It just wasn't enough. And then I told it, oh, actually you need to do, 'cause this could actually be null, so you need to do a null check. Oh, okay. That, that's good. And it did. It was getting closer to what the actual code from another place actually did. Uh, again, great. And so it was missing one, one thing, and it was like, again, I'm doing it in Java, so it was missing a final. I was like, oh, well, since this isn't being changed, you actually turn that into a final. Oh, yeah, you're right. It's always funny how these things respond back to you. Oh, that's correct. I, I see what
Viktor
00:04:12.320
correct. You are always correct. Whatever you say. This is another test you should do. Tell it something very, very silly. Kind of rewrite this plugin. This plugin would be better if it's rewritten in. Go and we would be done in five minutes and it'll tell you, yeah, you are correct.
Darin
00:04:34.500
so, so that's sort of a funny thing, right? I'm just trying to, you know, play along with it until it finally, you know, I had to nudge it in a couple ways, but it would actually generate the code that I wanted.
Darin
00:04:46.010
Right. But I also had, I knew where I was headed based on the existence of code already living somewhere else,
Darin
00:04:53.750
Is fine, but even its first pass was okay. I just didn't realize, oh, this could be null. So that was cursor.
Viktor
00:05:00.941
Now wait, before we move now to cloud code, what is the final impression kind of after those, whatever, so, uh, one hour in cursor, is that helpful?
Darin
00:05:15.491
Yeah, it was, it was fast. it was extremely helpful. I will give it that. It was extremely helpful.
Darin
00:05:32.203
Now you told me. Yesterday as we're recording two weeks ago, that I could either use Claude Pro, have a subscription, or I could use tokens. Well, I went back in to my philanthropic account and saw that I had a $5 credit that I bought last July that's expiring at, at the time of recording. We're recording this on July 2nd. Uh, it's actually expiring today, so I, I, I burned down $5 down to about. I, I think there's like $2 left or something. You know, I was
Darin
00:06:07.633
I spent three-ish dollars. Yeah. Which is fine. And I asked the same questions or po pose the same questions. I reverted the changes started all over. Yeah. Just start all over again. Yeah. Ask the exact same questions. Within a reasonable amount of words and the responses were similar, which is sort of what I would expect because, but it found a few extra things and I found that very interesting. Because Sure. It got the big ones, like the one thing I was talking about. It got that right off the bat and I still had to nudge it in the directions just like I had to do with Cursor. Now Cursor, what's the default model under Cursor?
Viktor
00:06:52.865
Oh, I forgot to say that. I apologize in advance. Default is auto. That's utter garbage
Viktor
00:07:06.720
Cool. But. Just a quick explanation. Basically auto means that cursor is deciding which model to use, including its own model, it favors, very heavily cheapness. I put it to sonnet for kind of right away, no, out.
Darin
00:07:27.906
So in my case, I didn't make any changes to the configuration of Cursor. I just opened it up and started going. So it was doing whatever it was doing
Darin
00:07:37.806
with Claude code? yes. It's CLI. Okay, that's, that's fine. Working with it is not as pretty as you warned me.
Darin
00:07:48.492
But the quality, because it's using sonnet four under the hood, is a heck of a lot better.
Darin
00:07:54.793
it's not night and day, but it's, morning and afternoon, I guess is the way to look at it. I thought it was good
Darin
00:08:07.783
Well, yeah, that's what I'm noticing with tokens and stuff. Now that being said, I ended up purchasing a Claude Pro subscription for $200 already.
Viktor
00:08:27.103
Is it? Two. Ah, okay. Okay. That's for the year. Okay. Because there is another one, which is I think $200
Darin
00:08:34.543
200 a month. Yeah, I, I don't need that. At least not now. Right. It's like, because again, a Jenkins plugin is not a large project.
Darin
00:08:46.487
If I need to, yeah. I can go up the next level. I think it's a hundred a month and I don't think I need it. And if I needed it for one month, okay, great. I'd get it for a month and then drop back down. But I went ahead and figured, okay, $200, that's a little bit more than a Netflix subscription. And now I can use it everywhere. I can use Claude everywhere, Sunnet everywhere. And if I need Opus. Great. Including in Cursor now,
Viktor
00:09:10.907
Yeah, you can, you, so when you use Cursor, you go through Cursor subscription if you have it or not. and then you can, you can put uh, keys to your models and turn them on and off. So what I was doing before is I, I, I had both cursor and, and Tropic and then I would use Cursor and then it curses start saying, oh, I've slow request. You already exceeded your limit, whatever. Then I would just turn on Tropic.
Darin
00:09:38.760
Interesting. I hadn't thought about doing that, so anyway. I started with Cursor, went to In, in reality, I actually installed Claude Code just to get it installed first to make sure it worked. Didn't really do much with it. I then went to Cursor to get it installed 'cause I didn't have that installed and that's where I started doing the first real work. Actually, I think I asked Claude code, at least the explain it to me just to make sure it saw it and worked. One thing I found with Claude Code and I'm running on a Mac, is that one of the tools that it uses is RG Reprep, which I did not have installed. So I had to go and install that.
Viktor
00:10:13.567
Okay. Uh, you don't have to because if it fails, then it'll find alternative way to do stuff, and you have hashtag shortcut to memories. Things like don't use rg. So just to kind of save on
Darin
00:10:26.992
okay. Yeah, but putting RG in wasn't a big deal. I figured, oh, lemme do it then. In fact, I did that today is, we're recording this, so it, it just kept going. It was like, I can't find RG and. You know, I was like, it didn't click until, oh, okay. That's what it's doing. So here's the current Stack. As it stands, I'm leaning towards Claude code for now. This is not Greenfield stuff, this is refactoring, that kind of thing. Looking for improvements, starting with Claude code
Viktor
00:11:08.846
Yes, there is an option, which I used before and I stopped using, but if you open a terminal window in VS code or cursor and fire up cloud, cloud will say, oh, I'm in VS code. Do you want me to, uh, start behaving accordingly? And then it'll open the diffs in vs. Code instead
Darin
00:11:46.152
Well, I'll have to check it and see if, if it looks as good, but yeah, I had, so I've been running, if Claude in or Claude code and its own terminal window and then just have just, I mean, I'm using VS code. I could have used text edit for all that mattered. Right. Just to see. Well, not text edit, but I could have done other things or IntelliJ put it that way, or JetBrains. so that's my less than 24 hour examples. If you caught what I said,
Darin
00:12:25.977
I did not spend two, no, no, no, no, no tokens. As, as soon as I saw I was gonna start burning tokens, it was like, you know what? I, I've got enough ideas now in my head of how I want to, because I maintain, I, excuse me, lemme rephrase that. I help maintain five or six plugins and then I contribute to others as, as necessary. just in that alone is going to save me more than $200 of time. Again, not gonna tell you how much I make an hour, but, $200 is not a lot of money, let's put it that way. Over a year. Over a year. Let's
Darin
00:13:15.087
By the time this has come out, I've already seen Jurassic World. I hope, or maybe not, depending on what somebody tells me tomorrow morning, because I don't know if I want to go see it or not.
Darin
00:13:27.780
yeah, 'cause the popcorn would be more than the ticket probably. Why are we talking about this? So this was me in under 24 hours going from familiar to. Oh my goodness. What has happened in the past four months?
Darin
00:13:55.181
Correct. I mean, other than working with chat GPT or something. Right. You know, I'm, nothing's, it's like I'm in and out. I don't spend hours in things like that. So. If you are considering, you, the listener, are considering trying out some of this stuff, even if your company doesn't want to pay for it. Now, I will tell you, do not run this through your corporate source code. I'm not doing that. Everything I'm working on is open source that I'm applying this to. I am not touching any of the proprietary stuff that I have in the day job. That's like staying far away. Am I taking what Claude or Cursor has given me directly? No. Again, I have 20 years of corpus of code to look at for Jenkins. For you working with Crossplane, you've got four or five-ish years
Darin
00:15:00.371
Seven. Okay. I mean, you've, you've, I mean, you know what the correct pattern should be. Now if it finds problems, okay, that's great, but you know, it's like, oh, somebody new came in. They forgot to do this kind of check for whatever. Right? There's, there's, you, you, you do have reference what, what, what I would consider a gold standard, just like I do if you're not using. Now, again, I'm talking about if you're working on open source, if you're working within a company, get sign off because the code leaves your machine and goes up into the cloud
Viktor
00:15:32.567
So, uh, I don't know the details of what I'm going to say, but I do know that company, I'm not going to name, went through all those things and concluded that Tropic is pretty safe. and another one, which I'm not going to name, is not necessarily from, from the. Perspective.
Darin
00:15:53.369
I agree. But even with that, you're still shipping stuff off and out and that's, I don't care where it's going, it's just dangerous. It, it just is. So if you're working inside of a company, make sure you get approval before you do this. Now, if you're working on open source and you're wanting, if you're wanting to figure out how this could actually work, this is where working with Open Source comes into play.
Darin
00:16:20.684
Because it doesn't matter, again, if it's a publicly accessible repository. There is a 99 point 7,900 nines after the fact chance that it's been slurped in somewhere. And if you're trying to figure out, well, how would, how would this work with Java? How would this work with TypeScript? How would this work with Python? How would it work with go all the languages? Except for maybe some newer ones that don't have a corpus to work with.
Darin
00:16:51.807
That's how you find out how this can work. So maybe this is your nudge. It's like, Hey, maybe I do want to help with some open source, because now I can really play with AI and not worry about governance and risk and compliance coming after me. No, you have to do it on your own machine. You have to do it at home, blah, blah, blah. What? Whatever. Right? But this gives you the ability to do it and then it's like, Hey, look, I've been helping with this. I was able to actually make, let's go back to Hack Tober Fest for just a moment. A few years ago, hack Tober Fest was just getting a lot of politely crap prs, right? I mean, it.
Darin
00:17:37.962
Oh, well, no, but what I'm saying is because people were just trying to get the t-shirt back when they were doing t-shirts, but now it's like, oh, now I can get in here. Now again, I'm, I'm not a lawyer, so you have to sign Cs, you have to do all these other things,
Viktor
00:17:54.207
I have an idea for Hack Tober Fest. You're gonna freak out. Instead of making people submit pull requests, there are ways with copilot and sonnet and codex, you just kind of create pull requests from the issues and they have people review pull requests. And those pull requests are interesting because they're unlike your laptop, right in your laptop. I don't dare to there, there are certain things that I don't dare, dare any agent to do without me saying, okay, like rm, just a simplest example. Kind of like it's not in allowed list, but when it's a pr it's running in a container, in a VM somewhere else, kind of. It can do whatever it wants. It doesn't matter. Just let it run.
Darin
00:18:43.991
Now that we bring up prs, that was the other thing I did was I. Once I sort of got the code in place and ID it out and everything was good, I was like, write a pull request description for me because I had, I was trying to figure out how to phrase it right. I, I was just searching for words and just not finding the words. 'cause I was task. Switching too. Trying to figure out, I had some other things I was doing and going back and forth. It's like, what, what was I thinking before? Again, going back to my last four months, it's like my brain isn't on 10 all the time.
Viktor
00:19:18.341
let me guess. The end result is the poor peer request you never wrote in your life from the
Darin
00:19:25.496
Uh, correct. Absolutely. It was so much better than I would've ever been able to write in my life. Now, what was interesting was it gave me a title that I really didn't like. I just said rewrite the title and it gave me another option. It was like, oh, that's great. I'll just use that. and it gave me so much information, it's like I don't need all that information, but here's the bits and pieces I can use. And it, sure I made some changes to there, but I was able to copy most of it and use it 'cause it explained what was happening. That was amazing.
Viktor
00:19:58.021
Maybe less obvious benefit to such a good description. One obvious is kind of, okay, so if a human reviews that pr, they, that person knows everything there is to know about it, right? But another less obvious, benefit is that if there some fixes should be done to that PR later, the agent will have all the context, Let's say you start a new session, kind of like completely new session, no idea of what you did. Hey, there is an issue in that pr. Fix it, right? With that description, it knows exactly what was going on.
Darin
00:20:30.853
Right, because it's almost like, so we, we have templates for Jenkins plugins. Anytime a PR is opened, it's almost as if we might need to change the template a bit. To give agents more context, because then that would help make any changes better. Maybe.
Viktor
00:20:58.326
Yeah, you can go even further. Uh, I assume that. Uh, it's not that all PRS will be done on all Jenkins plugins anytime soon. You can still kind of use an agent to generate descriptions of prs and information for no matter whether human or an ai, uh, creates it.
Darin
00:21:19.631
Yeah, I'm not gonna say it was life changing, but my eyes opened. Well, could, could I have found these things? Sure would. I have thought to with the one question, where are the performance issues? In this plugin. That was the question I used and it gave me three or four and I was like, oh, well let's do the top one. And it's also interesting, I can't remember if Cursor did this or not, but Claude Code did. Is it? It Stack ranked, here's the ones you should do first, and here's the medium ones. In fact, there was one that was found. It was like, Hey, here's a critical one you need to do, and then do these highs and then do these mediums. And then as as I was reading that Stack rank, I was going, Hmm, this is where as we were talking in the last episode about taskmaster, it could take all that information and go into taskmaster and go off. Now here's, let me ask you this question.
Darin
00:22:18.494
What I can't figure out is I would want each of those as separate. PR separate branches, which become separate prs in, in my working context. Right.
Darin
00:22:30.854
So I would basically need it to get checkout from Maine on each of the tasks as they go through ta. Meaning the, the, you know, the critical, the highs, the mediums, whatever in those orders. Have you seen anything that can do that yet? Do you think it's smarter? Could I, could I tell it to do that?
Darin
00:22:52.844
Okay, so let's, okay. Let's say it's, I, I do, Hey, what are the performance issues with this? And it comes back with six performance issues.
Darin
00:23:03.869
Yeah. Yeah. Well, not necessarily taskmaster, but just go with me for a second here. So I, I ask the question, where are the performance issues? I get back six items.
Darin
00:23:13.364
Okay. And functionally, I would want each of those six items. Assuming they're all completely standalone, I don't need help with any of them.
Darin
00:23:25.679
I would expect each of those to be six separate prs when it's all said and done. Right? Just because, 'cause I don't want one PR that's got everything in it, that's too much to review.
Darin
00:23:46.599
because because I, yeah. 'cause I'm just doing some refactoring today, so I don't really need an issue. It's not an issue that's broken, it's just I'm refactoring
Darin
00:23:54.089
Uh, if I had issue, I think issues is a completely separate topic, which maybe we'll talk about in the next episode, but I'm wondering if Claude Code could actually do take those six and do the, get checkout from Maine for each of those six and work in order. I don't, I don't know what the right answer is, if there is a right answer.
Viktor
00:24:14.219
You can, there is a way how to run it in a background and in parallel. I never tried it because I don't trust it so much to kind of just go, right. I, I wanna see the progress and redirect it. I will still probably create either, so I would still create six separate issues. With all the information. Right. And, but if that's not, so I'm talking issues because of the information. Right. Kind of all the discovery that was done right now, if you don't feel like issues. Okay. Six separate files. I.
Viktor
00:24:55.169
Create a file, uh, create a directories specific for, I dunno, issues, whatever. Right. Create six issues as files if issues in GitHub is not your cup of tea and let it record stuff, right? I I record everything in one form or another. Uh, unless it's something that, oh, I'm going to finish today, kind of, then it's kind of maybe Okay.
Darin
00:25:19.791
So if you made it this far listening, uh, you're thinking, boy, this is a very different episode, it's because I'm trying to work this through in my head. And if you're not to this point yet, I want you to understand the things that you may be thinking. I think So we're gonna wrap this in just a minute 'cause we'll continue it in the next episode. But the, what you just said about creating the issues I think is key. I think I do need to create issues.
Darin
00:26:06.161
if it's just me working on it. Then I probably wouldn't create issues, but I would write them down somewhere. So I effectively created an issue, even if it wasn't an issue, a Jira, GitHub, whatever, right? Yeah,
Darin
00:26:23.831
Well, it actually got even worse for me because I exited out of Claude Code and didn't save the context. So when I came back in, it knew nothing. It was like, well, dang, I gotta ask the question again. And it gave me. A new set of issues with one of them not having what I was really wanting to fix from the other one.
Darin
00:26:46.459
it, there's no guarantee. Yep. Which we talked about before. let's wrap this one up. So I got into cursor. It's fine, it's not bad, but since you said, oh, I can lock it into. Sonnet four, using my subscription with Claude Pro. I might do that just because, just, just to see, that, that seems, seems reasonable
Viktor
00:27:13.123
for a listener, just to be clear, if you're not, if you're planning to use only cursor, their subscription is better option than Atropic because then VCs are paying part of that price. Just to be
Darin
00:27:26.705
Right. You, you get subsidized a bit for that because I think cursor is $20 a month. I didn't see if they had an annual plan or not. They may. I just didn't look. Uh, it just feels I jet brains. I love you. You've got one of the best deals around for personal, IDE stuff. I just didn't look at it this time, and I should, and just, just to be clear, but once I understood, because I'm, I'm more comfortable at the command line most times, diffs, it's a lot nicer to be in the ui,
Viktor
00:28:06.350
So here's a question for you. Now, after one day experience, do you miss, include what you have in cursor? You know how it ends up editing five files, But it's still waiting for you to accept it or reject it? All five of them instead of immediately each.
Darin
00:28:25.100
Yeah, I, I am glad you called that out because I, it felt weird because it's like, why isn't this progressing? Oh, it's waiting on me to punch a button. And I was like,
Darin
00:28:45.935
right? Correct. Whereas with Claude, the default is yes, yes. Remember it or no. I think we're the three options
Darin
00:28:57.005
And for now, I'm just pressing one, which is Yes, keep going. Don't remember it or whatever the, the answer is because I'm trying to still understand it
Darin
00:29:07.595
And. That was actually nice because there was one thing I was questioning. It's like, should that change actually happen? So I went ahead and said yes, but it let me know that, oh, I probably, you know, I made a note down on my notebook of I should take a look at that. Once it's, once this step is done versus cursor, it's like, splat, everything was done. It's like, no, wait a minute. What was, what were you thinking here? Why you made that change?
Darin
00:29:33.695
Claude Code is really nice is, oh, that's why you made that change. That makes sense.
Viktor
00:29:38.615
My general rule is that I say yes, yes for this project. Include code whenever it's exploratory operation. Ah, you wanna execute cube control, get yes for this project. Just go for it. Kind of. Don't ask me that. Right. You wanna list the The file in the directory? Yeah. Yes. Kind of for this whole project. Kind of just go for it. You want to change anything? I want to see it.
Darin
00:30:04.850
Right. And since I was changing things, I was just taking it one by one, which was fine. It's like, oh, okay. All that makes sense. So that's gonna be it for this episode. We're gonna come back in episode,
Darin
00:30:19.921
well, plus two actually it's actually plus two. Uh, 'cause it's, it because when it's just me and you, it's every other. 'cause we have guests in between. And for the, the next one's gonna be three 15. This is three 13. I think we might be wrapping, at least for now, the AI things. I don't know how we're gonna be able to wrap away from it though, because
Viktor
00:30:41.596
about I within few weeks. That's the only thing you will be thinking about. That's
Darin
00:30:51.511
not podcast weeks. Yeah, just real weeks. That's, that's the thing. This has been 24 hours for me. Since we last recorded, and again, I knew it could be this good, for lack of a better term, but holy cow, I didn't realize how much better it would be. So I head over to the Slack workspace, look for episode three 13 and leave your comments there. We hope this episode was helpful to you. If you want to discuss it or ask a question, please reach out to us, our contact information and a link to the Slack workspace or at DevOps paradox.com/contact if you subscribe through Apple Podcast. Be sure to leave us a review there that helps other people discover this podcast. Go Sign up right now at DevOps paradox.com to receive an email whenever we drop the latest episode. Thank you for listening to DevOps Paradox.