Transcription
Friends, hello everyone. You, in general, see the very first one, with which I once began my journey. And I propose to return a few years ago, or rather, not a few, but to my very, very beginning. My first steps were back in school, when I got acquainted with BASIC with those square tube semicircular monitors, convex, large, and heavy. Unfortunately, my BASIC knowledge did not help me at university. And the only thing that, in principle, helped me at university was my acquaintance with DOS, with that very black, scary shell of 80 by 25 characters, where everything is black, everything is very similar to Midnight Commander, Volkov Commander, Norton Commander, all these scary, scary black large screens. At university, we started with Pascal, C++, then came Delphi, Visual C++, there was PHP, Python, C#, what wasn't there. Every six months, every semester, we studied a new programming language. And you know, what was my first editor on Windows, now that we've moved away from DOS? Pause now and try to guess. I'll give you 5 seconds. If the first thing I had was Beins, and you can now see its name on your screens, then the first "editor," because it's hard to call it that, was Notepad. A regular Notepad on Windows. Yes. Yes. That very pathetic Notepad. And since we weren't particularly taught to work with IDEs on Windows, and in principle, before Windows, by the time we got there, moved to Delphi, Visual Studio, my first attempts were, in general, getting acquainted with Notepad. And it was in Notepad that I tried to program. I repeat, at that time we were not yet introduced to IDEs, we did not yet know about these tools. And the biggest pain that I had when working with Notepad was line numbering. You write something, you try to run it, you run it, it works perfectly. When it doesn't work, it tells you an error, that here on such-and-such a line there is such-and-such an error, and you, damn it, don't understand where that line is. And I sat there and just calculated, I deliberately introduced errors to understand at what point I was close to that line or not. Well, in general, it was very sad, yes. Then some C++ appeared, and it became more fun. Total Commanders with their built-in editors. So, little by little, our evolution took place, reaching some normal tools. If we talk about Web, then Be was my first, with which I, in general, am familiar. And my first courses, the first stories that I told my students, they were also at the university. The guys who studied with me asked me for advice on how to program, what wasn't working out. In general, the first courses that I taught were also with Nadbints. And it's not surprising that it evokes many smiles and nostalgia in me. And all this is wonderful, of course, but let's still return to the current realities, rewind a little, not so far back where it was in the age of dinosaurs. In those times when we wrote code manually, and there were just smart editors. It was autocompleter, linting, some integration with Git. But in fact, if we go back deep, deep again, then Git wasn't even there yet. It was Mercurial along with Git. Before Mercurial, there was SVN, VCS, and all, all, all of that old ancient stuff. Then Git, GitHub, Copilot appeared, and it became obvious that AI had finally arrived in code. At the same time, the era of ChatGPT began. And all these AI tools began to develop, develop, and develop. And today we already have not just AI-based autocompletion, but full-fledged AI editors, full-fledged IDEs, an environment where an agent can rewrite your entire function, give architectural advice, or even generate a pull request. And today we will be looking at Cursor and WnSrf using the example of these two maximally modern IDEs, in which AI is very tightly integrated. Both of these IDEs are private cases of VS Code. I am not an adept of VS Code, so I probably don't know many functions, how things work there, where the correct settings are. Therefore, I apologize in advance if I do something wrong, click somewhere incorrectly, or don't know something. These development environments are not my daily tools. And from my subjective point of view, I will try today to make a choice, what I would choose if I used these tools daily and how well AI instructions work there, as well as they might seem. So, friends, let's start by examining the pricing policy of these two projects, because price is what we will pay for them or not. And by the way, I will be using exclusively free trial versions today. Both versions in the free option offer, of course, a free trial for the paid one, but everything in order. We'll sort everything out now. First, let's go to Cursor, to the pricing tab. What do we see here? We have Hobby packages. This is like, if you are a solo programmer, you just want to try, what is this? Here, as I said, there is a two-week trial for the Pro package. And the Pro package costs $20 per month. And in the trial, we get limited agent requests. That is, this is what will directly think and execute your code. And limited autocompletion. This is the very autocompletion that is suggested to you as you write your code, so that you can autocomple it with Tab. All of this will be limited in the free version. Whether these limits are enough for you, you will naturally figure out for yourself. But if you are a solo programmer and you just purely want to try and understand what this IDE is, the Hobby option, which is free, I think it will be more than enough for you. There is no further description. We don't know what's included then, how limited it is. There is no additional information here. Next, we'll look at the Pro package. This is most likely the basic subscription that you will want to get, because here you already have unlimited autocompletion. And I can tell you that in PHPStorm, well, not that I suffer, but the free limits that are available in autocompletion, from Copilot, from, uh, what they call it, the AI assistant, the native one from JetBrains, there are its own limited requests, limited autocompletion, and I don't have enough of it there. Whether I suffer from it or not, no, I don't particularly suffer. Therefore, for me, in principle, whether they are unlimited or limited in the free part, it doesn't make much difference. There are extended limits for agents, but how extended are they? Again, there are no dry figures for this. Some access to the bug bot, let it be, and access to extended context. This is the most interesting part. Ultra is what we consider for additional models. Priority for new features, priority access to new features. Then comes the team plan, where for $40 users per month you will get, in principle, the ability to have a single entry point for all your team. You will have centralized team billing, you will have a dashboard with all usage from your team, and there will be some kind of privacy mode for your organization. Therefore, if you are very tied to corporate ethics, to corporate rules, then Teams, probably, will be your closest choice. Well, Enterprise always provides some custom options. What concerns me most in this story is that in the Free version there is no additional description, and in the Pro version there is mention of some extended limits. But what are extended limits in dry figures, I don't see. And this makes me a little nervous, honestly. If we go to the additional information to see what's included in Pro, yes, here there are specific dry figures, that in Pro it will be some 225 Sonnet 4 requests. And by the way, it's also unclear, is it Sonnet 4 requests or 225 requests to the Sonnet 4 model. Yes, naturally, we understand what it's about, but it's written, well, not very well. 550 Gminite, 650 GPT. Well, in general, you see all this on your screen. I don't see the point in re-reading it all. In principle, there was a footnote somewhere here, I don't want to look for it, but it was written here that in most cases the limits we have come up with are sufficient for an ordinary developer. So, roughly speaking, for $20 you will get, well, conditionally, unlimited access within the scope of an ordinary developer to those autocompletions, to those model accesses, and to those tasks, in general, that you want for yourself. Pay attention to the footnote. When you use GPT-4 or GPT-3.5, the cost of these requests is twice as much if you enable the Fine-tuning function. And there is another footnote, Max Mode. I will talk about it when I show Cursor in action. Max Mode also costs extra money. So, let's look at WnSrf now. It also has a free package. It also has a 2-week trial for the Pro package, which, by the way, costs $15, unlike Cursor, which costs $20. And if I remember correctly, until recently it cost ten dollars. And for $10 it was a great offer. For $15, well, you have to choose between $15 or $20. $5 doesn't make a difference, but for $15 you get. Here it is immediately clear that you get 500 prompt credits, right? Yes, we looked here that for twenty dollars in my info you get, look here, 550 gemini requests, 225 sonnet requests, where in Cursor you get 500 prompt credits. WnSrf works on the principle of credits, meaning you can buy credits for $15, and then additionally, if you need it, you can top up with additional credits for less money, for example, for $10. Again, based on what we know about Cursor, the volume of those requests, those credits should be sufficient in quantity of 500 pieces for a regular developer. If your work, of course, does not consist entirely of pair programming, where you only rely on AI tools, then perhaps, yes, this option will be insufficient for you. But in general, for a regular developer, as I said, this will be enough. The approach to pricing between these two projects is slightly different. If we talk about Cursor, it's a subscription cost. You just pay a fixed price and get a certain amount of available functionality, but in WnSrf you get credits, and you can simply replenish them monthly as much as you want, and accordingly, get more and more new possibilities when they run out. That is, it's not that you just pay $15 a month and that's it, and it's fixed, as it is with Cursor. You can "feed" yourself a bit more. It's bad that you can't just buy for $5 and top up by five, by five, by five again, as many times as you need. But here the minimum threshold is $15, and plus $10 you can add. There is also a team mode here, and it is also cheaper than Cursor. For each user within your team, there will also be 500 prompt credits, similar to the regular one. So, you primarily get everything the same as in Cursor. Admin dashboard with analytics, centralized billing. It feels like these two projects just copied all the additional extra functionality from each other and just describe it in their own way. By the way, look, SSO is available for $10 more per person per month, which, in principle, is equivalent to the cost that was indicated for Cursor for a team. Look here, SSO is included in the cost of $40 per person per month. Here, if you want the same set, i.e., plus SSO, you will have to add ten dollars, and it will be the same $40. If we talk about the maximum package options, then Ultra in Cursor costs $200. And that's a completely different figure, a different order of magnitude. While WnSrf in Enterprise offers from $60. In principle, this plan will heavily depend on whether you have more than 200 or fewer employees who will use it. I mean programmers specifically, but this is a completely different story. I don't think this will interest us much. In the regular developer mode, I think it makes sense to compare the $15 and $20 packages, the "all-in-one" packages. But today I will be working with the free version and will talk about all its functions. And considering that in the free version I get a two-week trial, it can be said that I will, in principle, be using the benefits that are available for the Pro subscription in both IDE versions. So, friends, let's start with our Cursor. This is my OpenHelp. This is the same project on DDD Symphony, which is a helpdesk. I switched to the main branch, forked it, in order to do an AI test. And in general, what I want to do. I remember exactly that I wrote one test here once, and I know for sure that it's no longer working. I'll explain why now. If we look at test Unit Application, I had a test of this kind. So, so, let's hide all this. This is a test for Password Reset Service, which was also, I think, generated. No, it wasn't generated, it was written by one of my subscribers as help. Exactly, I remember. So why won't it work now? If we look at Forgot Password, it takes login into account, but I no longer have a login. I deleted this field, so this test definitely won't work. Can the AI tool within Cursor run it, verify it, understand the problem, and fix it? And let's make this decision with both Cursor AI and give exactly the same task to our WnSrf. Therefore, the first thing we will do now is I will go to make, and I have here. Get out of here, I have the command Make Frank Test. We will run it now. And and so, where is our terminal? New terminal. And the first problem I encountered is, for some reason, inadequate perception of my terminal. That is, for some reason, these two strange symbols appeared here, which I don't have in PHPStorm, I don't have them in the regular terminal. But they appeared in WnSrf and appeared in Cursor. And this artifact sometimes caused me inconvenience. It perceived these symbols additionally on some commands. And in general, everything failed. But that's not important. Let's run it. We have make, let's run the test. Yulululu. This doesn't interest us. Make. Let's run it. And we see that indeed, unknown parameter login. This parameter is not there. And the test fails. Let's try to give the command makefile. Distem. I don't need the makefile. Let's remove all files from it and ask it to deal with the error. Moreover, I will write prompts to myself in Russian specifically, because our AI is very smart. And let's see who is smarter, how well it understands the context of my language, the context of the project, and how well it will deal with this problem. Moreover, the project should also be running under Docker, not just PHP. Let's see if it understands this. So, I write: "I have a test, and it's not working." Run it, look at the error, and fix it. We see that it started analyzing the project. It found the test, and it asks: "Should I run it?" Let's do it like this. So, it sees CD, moved somewhere, and tries to run it. Well, come on, my friend, let's try. We see that it's already running it without Docker, which is not very good, but it doesn't need Docker here, in principle. PQ is also installed within the system, just like that. Fine, with you. It went on to analyze that, yes, it saw the error. Okay, let's see what happens next. It tries to change the test and remove just the login from the test. Now let's fix it. It's doing something. My hands, here they are, these hands stole nothing. I didn't fix anything, didn't accept anything. Let's press Run. Oops, the test passes. So, let's see what it did and where. And in principle, my IDE highlights the lines it deleted. And, in general, it tried to run this file later. I can either accept all changes in this file, why are there so many? Let's look below. Ah, in several places. Or I can accept them one by one. Okay. Let's assume I accepted all of them. A very important point when you try to run some prompt and give it some task, my advice to you is to commit before that and have your established code structure that works at the current moment, the one you want to experiment with, because it can make a lot of changes to your project, you might not track them, and then it will be very difficult to roll back. But by having a fixed revision, you can always just roll back all the edits that it made, well, and continue, in general, writing your prompts anew. Let's ask it to check the coverage and push it to 100%. So, it suggests running the test to see the coverage. Okay. Will it understand what the coverage is now? While it's thinking, let's see if there's any assessment of this coverage here. So. Uh-huh. And look, every time it tries to run something. There is a special setting that says that we can allow it to run everything automatically, so as not to press the button every time. Of course, it can do something that is not very suitable for us and thus spend our tokens and credits by running it, but it can be very convenient. So, friends, let's see where, in general, is the coverage that it checked, is it really 100%? So, yes, I see that it added X mode coverage before running the command, it ran it, got nine tests, and there were seven before. And here is the code coverage report. It ran it in text format, right? Here is the coverage text. So. And here, it seems, it found exactly the file it was testing, Password Reset Service. And it's likely covered 100%. Let's find it now. So. And here is our service. We see that it is covered 100%. Let's try to reset all this now and see what the code coverage was before. So, well, before these changes, the code coverage of this particular service was 75%. So, it really managed to overcome this task. In general, using AI tools like these for writing tests is a great thing. I like it very much. Let's try to write a new test for another service. Let it be a user, let it be a service. Let's write a test for email invitation service. And again, it asks, should it run? Well, yes, let's run it. So. And look, in the context of the previous requests, what I asked the previous test to do with 100% coverage, it ran the test, it saw that it wrote 10 tests, 10 asserts, everything is great. And next it suggests: "Let's also run coverage here." Let's see how it is in the newly written test. So, and it sees that it wrote the new test immediately with 100% coverage. As far as I can see, this is an excellent result. And here is our new test next to it. Let's look at it. And, in general, something is happening here. I won't delve into the essence of this test now, analyze what it wrote. For now, let's trust it to the maximum. Let's accept this option, and let it be. So, with the code, it's clear. We see that it can chat, it can write code, it runs agents. All this is great, and it executes commands. Let's go to the settings. I'll tell you something that might be interesting to you. VS Code has its own profile settings, and Cursor has its own settings. If you scroll down a bit, you can notice a privacy tab here. In principle, when it was launching, in order for me to open my entire project, it first asked me for a checkbox, whether I was ready to accept its rules of the game, which, in general, stated that by default I agree that my code will be used to train their models. And yes, since I installed these IDEs, both WnSrf and Cursor, literally for testing, to see how they work, what they do, and to shoot a video for you, I, in principle, fall under the fact that I have another 23 hours to pause the sharing of my source code. And in principle, OpenHelp is a project on which I conduct these experiments, it is already publicly available. There is nothing wrong with that. But besides the code, there are also environment files. And yes, it seems that they declare that they don't read environment files, but you see that it runs commands. And in principle, it is not excluded that it can run a command that will peek at the .env file. And peeking at the .env file means stealing some tokens, keys, passwords, and everything that I don't want to be hidden, because it's no longer code, it's already my private information. What options are there here? There are rules for code. And by the way, well, yes, here's the trick with VS Code, since it's all JS, since it's all browser, they made a dropdown, no one looked at how it would work. There's no scroll bar below. That's it. What's there? More options, how can I see it? Well, yes, I understand that I need to reduce the font size, but there are people who work with large fonts. Okay, let's reduce the font size even more. And it still doesn't fit. It still doesn't show more options. So, no matter how you look at it, maybe completely like this. So, if you reset to zero, then you can see more options. And in principle, there are Code rules. And what's most surprising, what was extremely strange for me to see, in order to launch Cursor, I had to agree by default. The continue button was disabled. I couldn't not agree to the rules of the game. At the same time, when I go to the settings, I can enable Code rules, and my data will not be sent for training. Therefore, one of the important recommendations. I advise you to go here immediately and turn off, or rather, turn on the Code rules, yes, disable the ability to train on your data. The next tab is Chat. Yes, here are all the settings for the chat, some autofixes, terminals, hints. So, here is the author mode, which allows the agent to immediately run the command that it came up with itself. And in principle, you can enable it, yes, they ask for confirmation, okay. And they ask for a reason, because potentially it can run commands that you definitely don't want. For example, I don't want the RM command to be executed. Can it? Yes. Okay. By the way, for some reason, the process of adding this command didn't work the first time. Well, okay. Similarly, we have the same secure environment files. Well, secure, because they might contain our tokens, passwords, confessions. So, I want to prohibit .env. Okay. Or maybe nano nano. Not nano, but nano. Well, you understood. The essence doesn't change from this. You can list all the commands here that it should not execute. Or, conversely, you allow only the commands that you want. Models. I don't think there's any strong point in reviewing the list of models. Yes, Cursor AI has Claude 4, WnSrf, I think, doesn't have Claude 4, we'll get to that now, let's see. But it has Claude 3.5. I'll tell you honestly, even the requests that I performed here, by the way, when we performed them, I don't remember choosing which model it was. There's no option here, right? So, I don't specify which model I'm working with. I have no idea which model it was that offered me all these changes. But that's good, because for me, as a simple mortal user, the fewer settings, the easier it is. Which, of course, cannot be said about these tabs, you open them and get lost. There's just a choice of these chats, settings, what to enable, what to disable, dealing with all this is God forbid. Well, it's good, there are models, there are many of them. These are, in principle, the models that we most often work with. And there are models marked Max only. What is this? This is an extended context window. And this is what I told you about when I was showing. Let's go back now. When I was talking about the maximum context window. And somewhere here it was, it was, it was, it was. Let's go to info. There is Max. Here is Max Mode. Max Mode is the ability to separately use a larger context window if you need more complex tasks, if you need to put more code into the context, although we see that I didn't select any file separately, it independently found the files it needed to work with. But if this is not enough for you, you have heavy resource-intensive tasks.
If so, please buy Maxme separately. And, well, Maxmot, essentially, are additional models that support a larger, larger context window. Here, individual classic models like Gemini are also hidden. And I want to tell you, frankly, in WindSurf, I didn't switch to any models. Gemi is enabled there by default, and it was more than enough for me. But, of course, no one forbids you to experiment. Please check, choose, add any models. By the way, if I returned to the chat, I forgot. There is also a context setting here, yes, you can connect a larger context window. And here there is websutol, which immediately allows you to do some searches on the internet without leaving the screen of your IDE. Tools integration. If you know how MCP servers work, then you can connect them here in exactly the same way. You can connect them to your project environment simply by placing a file in your project folder, dot cursor mcpjon, and write all your integrations there, and they will be displayed here later. If you are interested in how this works, I can shoot a separate video about it, because it is worthy of a separate, quite large series. But for now, I will leave it out of the frame. Rules and Memories, yes, there is also its own memory here, and you can add your own rules there. What are rules? If you watched my first series about working with AI, I talked about the system prompt, which is its main instruction. So, here you can also add a RU, which will be the same system prompt, the same instruction, which will be used every time you execute a request. That is, it is an additional text that goes into your prompt in order to give the AI more understanding of what can be done, what should not be done. Among other things, these rules can indicate which action, which MCP server is called in case of one or another representation. There is also indexing here. This is indexing of your code base. You see that all 3094 files are checked, all 100%. And I can reset this index if it suddenly starts to bother me, because the AI can lag, and it can mix up the context, and it can forget anything. And sometimes this function is not superfluous. It's not for nothing that they put it in a separate button, in a separate section. So. Mm, well, and now I suggest doing all the same, but on WindSurf. I go to WindSurf, open the same Open Help here. Exactly the same way, I open the terminal and do a full reset. Git reset card. Okay. The first thing that annoys me, I launched WindSurf when I started recording the video, and it's still warming something up. What the hell are you warming up? What do you want to warm up? Caches. Do you want to index my project? What are you doing? How do I understand what you are doing? Close you, open. You are still warming up. Open some other window. Activating extensions. I don't know what that is. Open browser. In general, it's unclear. Therefore, I will completely turn you off now and completely turn you on and we'll see. Yes, 7 beta, once. So, I restarted catching wave. And look, after restarting, for some reason, it doesn't need to warm anything up. It also offers me to install something. Moreover, if Cursor offered me to install something far from the project, like install me by default, let me register in your environment variables, let me do some git fetch from time to time, then it offers me to install the docker extension because it noticed that I have Docker in my project. Pay attention that Cursor AI, when it ran my tests, it ran them from local PHP, not from docker. It's interesting, will this friend understand that I need to work in docker? Will he run there? Pay attention to the interface. Yes, but again, I already said that WindSurf is also built on Electron with Chromium, that these are all special cases of VS Code. Okay, that's all clear. This right part is, in essence, the unique part that distinguishes VS Code from WindSurf and Cursor from WindSurf. That is, it is a self-sufficient conditional plugin. So, mm, if in Cursor I didn't choose any model, then here I need to choose a model. Here it immediately says which models are available and by default, and they are free. Free limited time, here it's free, in general, it's free. And there is GNI, which uses 0.75 credits. I tried to work with WindSurf for about a week to understand in more detail what you are. And all this time I worked only with GI. Surely you will now write that yes, if you had worked with Claude, you would have liked it more. Yes, I liked GI too. Therefore, all these models are just big advantages that I don't particularly need right now. And here there is also Claude 4, as there is in Cursor, although for some reason I thought that there is only 3.7 here. And there are also plus about 23 models. Okay, let's work with the default value. Well, because an ordinary developer who has never encountered either Cursor or WindSurf will most likely just install it and want to work with it as is, out of the box, with how it is by default. So I just opened my OpenH, I just opened VP, I have a window with a request, and I just want to work. I immediately have WRite, and this is the state when WindSurf will also work with the code, it will analyze it, it will generate. And there is a chat window. A similar situation exists in Cursor. Let's open Cursor. Tak-tak-tak. Here it is. It. And here we also have a choice. We choose either agents and under agent, they imply writing code. Ask is a regular chat. Well, and manual decide to get. Uh, like you independently choose what to add to the context. In general, this is the same agent - it's writing code. Ask is a chat. It's clear here. And let's go here, let's remember what our request was. Our request was that we have some test, and it doesn't work. And I think it makes sense to even go and take exactly what we asked Cursor for and ask WindSurf the same thing. Let's go. So that we can, in general, evaluate the same request and how big the difference will be in the result. So. And look, despite the fact that this is a regular Gemini prompt, unlike Cursor, it went So, taste. I there, yes, it started talking to me in English, although I asked it in Russian, but it sees the Makefile, it sees that there is through the process, it sees that there is docker franken test. That is, it found a command in my make file that launches. It found a command to launch the composer itself. And and and and it found a command to launch the tests. Only for some reason it didn't want to launch it. Ah, yes, God, I have a chat here, not a write. So, okay. I made a small mistake there. Let's try again. Something went very wrong with it. It went into some recursion. Complete nonsense. on use list dear comm friend, you just worked much more confidently in the previous version. What's the deal? I started praising you so much, and you're giving me such crap. So, great. On the second attempt, it saw the Makefile again. It again saw that there is Franken up, Franken test. Well, let's go, okay, let it launch it, right? Let's allow it. Pay attention, there is also an auto-launch option here. A nuance that you should know, it applies to WindSurf. Exactly, I'm not sure about Cursor, but I think it will be the same problem. While I was experimenting and working with it. There are commands that are launched like daemons, like services. And it launched it here. And it's waiting for it to finish. But it won't finish, it's eternal. It works as a service. It launched and that's it. That's what we are observing now with the launch of the composer, the launch of docker. Docker compose. It launched it, and it hangs, and it expects it to finish. And what should I do with you, friend? I canceled this command, but I will launch it separately in another terminal so that it is still raised, because the next command it wants to launch is the launch of tests. Well, and for this, of course, I will need a running container, so let's give it the opportunity to get into it. So, it seems to have launched. And we click accept. Come on, launch, burn. Great. It got to where it needed to. It also saw the login error and went to fix it. But unlike Cursor, it went straight to docker, which is the most correct thing to do. So, and here we see that it is also trying to do something with the file. Delete, delete, launch. That is, the process is maximally similar to what was in Cursor. So, the test it fixed. It works here. Moreover, it launched, well, yes, it launched not one file, but all. Okay. The second file is the file that Cursor wrote for us. But we will also delete it now and force it to do so. and force it to generate that test to 100% coverage. Well, let's say we accept, and the interface, as you understand, is generally the same. It also shows every line that it wants to edit, or you can accept all lines. It doesn't make much difference, please. Among the differences that I see from the classic V-code, the classic VS Code had this thing for navigating the file. If you have a large file, let me go back now. There is no such navigation in Cursor. I am sure it can be enabled, but I am talking about the default state and what I see. I repeat, I am not an adept of these platforms, so I am just sharing my impressions. So, let's try to ask it to do coverage for 100%. At the same time, I don't have make inside docker. Inside the project, rather, I don't have a command with coverage in make. That's one. And there is no possibility in make itself. Somewhere here there is. No possibility to specify. No, I don't want to. No possibility to specify a specific file. That is, it needs to figure out what this command is, and somehow write that file here and add the use of Xdebug coverage here. Let's see its reaction, what it will do. So, let's delete the file that we had. We are not interested in this file generated by Cursor. So, look what it did. It wanted to change my make command, or rather, not change it, but create a new one that would launch the test with coverage. Well, look, devil, it's not bad in principle. Only where is your Xdebug? Come on. And the warning says that it needs to be installed for this test to run, for it to run with code coverage. So, it sees that this environment variable is not set, and it added it, well done, added it to make and asks me to run again. So, let's watch, yes, it launched it with code coverage. it analyzes it. And again, if we remember how it was in Cursor, it used the coverage format in text form, and this one uses coverage in HTML form. I don't care which coverage you choose. HTML is more pleasant for me to look at, of course. The final result is important to me. Will you fix my test and will you be able to understand this coverage? It went to analyze the user. And why do I need user test php? I need the code coverage of a specific file. I don't need to test the entire domain. No, you probably didn't understand. So, we'll save this. This is not bad in principle. Aha, it also added coverage text instead of coverage HTML. It realized that it's not very convenient to look there. No, friend, let's remove this with the domain for now. I'm sure you can do better. Let's clarify the request. Maybe it didn't understand it well at first. We are testing this service. Bring the testing of the service using this to one hundred percent coverage. Come on, friend, since you want to run, run, let's see. Determination of existing test cases. Finally. So, let's see. Uh-huh. So, that's already good. Run, friend. So, it found that now we have 92%. I remind you that when we got this version from the repository, it was 75%. Now it has brought it to 93, and it is expected to bring it to 100. Yes, I don't understand where. But it somehow thinks that it has already brought it to 100%. So, well, let's check, let's see if that's actually the case. So, and we see that it, in principle, moved away from generating HTML and returned to generating text in the solution, and it covered it also by 100%. If we remember how it was in Cursor, there were nine test cases. Here it made eight test cases, because if we scroll to the very top, we see that there are eight tests here. And it turns out that we have fewer tests, but the coverage is the same. I could ask it to generate one more test, just as we did with Cursor, but I, in principle, already see now. even within the demonstration of this series, that WindSurf wins in knowledge. It understands my code base much more clearly. It understands that there is a make here. It independently added a new command to make to check test coverage. It saw that there are tests, it understood how to run them, saw which file, was able to fill it, bring it to 100% testing, while making one test less. And as for me, this option is much smarter. Based on the settings, WindSurf, in principle, has plus or minus the same settings as Cursor. Your test plan is also visible here, but additionally, since WindSurf offers credits, it shows how many credits are left. Similarly to Cursor, there are deny lists here, meaning you can also specify certain commands that it will or will not execute in the terminal. Similarly to Cursor, there are rules here. There is also memory. If we go to rules, we can also add new rules. Moreover, we can import them from Cursor in WindSurf. That is, WindSurf, it seems, hints that if you suddenly get tired of Cursor, you can switch to me, and I will help you import everything that was there. Here a folder WindSurf is created, while in Cursor a folder Cursor is created. Exactly the same with rules, where you describe your system instructions, basic prompts, based on which then all your cascade of prompts will work. By the way, regarding privacy. WindSurf, when launched, did not force me to tick any boxes, did not force me to agree that I would give these files for training somewhere to them. Everything was much simpler here. And I don't see any privacy settings here, unlike Cursor. Well, friends, let's probably reflect on what I would choose. I would probably choose WindSurf with greater probability, although in reality Cursor is also not bad. I liked WindSurf with better integration with my project. It understands more what is written there, how it works. But even if I were choosing between Cursor and WindSurf, I would still probably not choose at the current moment from the perspective of AI functions. Well, because for me, it's probably not so much a bonus as a headache. Yes, I use tools. Yes, I have Alarms, I have local services that allow me to generate a project from scratch. Like boilerplates. There is a service that helps me generate a project immediately in React, in Vue. All this is good, but I use them separately, because it is easier for me to look at that interface separately than at the interface of this VS Code, where I have a small, small communication window. Yes, it's cool that it helps write some files and classes and fix something. For such moments when I am probably a junior or middle and I don't understand what is happening in this project, to speed up my work, such tools would probably be great to use. It's cool that it understands context. And from the perspective of understanding context, I liked WindSurf more. Everything seems very cool here. You can just write to it: "Fix this function, write some test." or you ask it to rewrite all this in async, but instead of just going and doing it, I sit and wait for it to think, for it to offer options, for it to analyze the project, and then I still need to fix something somewhere manually, yes, I can tell it to autorun, expect some result, but if I don't delve into this result, my knowledge of this project will not increase. I will not understand this project better. And, possibly, it fixed all this, and the code coverage is 100%. But if this test then has nothing to do with reality, then why do I need this test? In this chain, when I work with AI and IDE, it seems to me more that I am not a programmer, I am an operator, and I give it instructions to write something for me. This is not bad, but this is not my path. I'm not saying that PHPStorm is super cool and convenient. Yes, it also has its own issues, quirks, but if we are talking in the context of AI stuff, then, for example, the same Copilot, which is built into PHPStorm, it does autocompletion, it does it well, but again, it often hinders me more than helps me. I notice more that I am forced to press Escape rather than Tab to cancel the autocompletion that it offers me, because it is faster for me to write the correct solution than what it will generate for me now. Personally, I enjoy the process itself, when I immerse myself in a task, I build architecture, I solve a problem, and AI turns it more into guessing what it wrote. It's a cool tool for juniors, middles, who like vibe coding with this AI. It can be a cool booster in your work. It can be quick fixes, it can be quick suggestions. For experienced developers, it is still a tool, not magic. But for me, it's more of a hindrance for now. As I said, I use AI. I can go to ChatGPT, ask it, clarify. I ask it to brainstorm some idea. I ask it to develop some idea, even if it's a technical idea. I sometimes come to it and ask: "So, friend, I'm hesitating between some options. I don't know what to choose yet, or help me choose a third option." And it suggests, brainstorms some ideas, brainstorms solutions. I just take this idea, and if I like it, I implement it myself. Friends, you must remember that a smart IDE is not a magic wand. It's just another way of interacting with code. Sometimes necessary, sometimes annoying. Against all this background, I am naturally very interested to know your comment. How has it changed your approach to development? What do you use yourself? Do you work with Cursor, do you work with WindSurf? There are others, there is Codeium, there are other IDEs. Write your option. I am very interested to see, to hear which tools you use. Perhaps I will learn something new for myself. Well, that's all from me, as always. See you in the next videos. Bye. Yeah.