Kevin Gosse @kevingosse.net · 27/09/2026I recorded a screen capture and wanted to speed up the parts where I type. Rather than editing it myself, I asked Opus 5.5. I fully expected that I would have to give the timestamps but nope, it figured it out on its own. I'm not even sure how. 030
Kevin Gosse @kevingosse.net · 14/09/2026My input was only needed to point out some trimming issues in the initial generation. Now I can give my son a French localized version of the game, and all it took was one prompt. 020
Kevin Gosse @kevingosse.net · 04/09/2026Starting this week, my job at JetBrains changes. I'll be focusing less on ReSharper, and more on agents integration inside our IDEs (Rider, IntelliJ, ...). 152
Kevin Gosse @kevingosse.net · 30/04/2026A coworker wrote a small tool to monitor the activity of Windows Defender. I recommend giving it a try. For instance I discovered that Defender was continuously scanning the activity of the Backblaze backup agent on my machine, wasting a lot of CPU time. I fixed it by adding a process exclusion. 252
Kevin Gosse @kevingosse.net · 28/04/2026I really wish they had an animation timeline inspired from Adobe products. Scroll to any point in time, add a keyframe, set interpolation/easing between the keyframes, done. The current PowerPoint timeline is completely useless. 010
Kevin Gosse @kevingosse.net · 10/04/2026I'm developing a bridge to allow agents to interact with my Windbg session. I tested it with an old dump, the agent ran a bunch of commands and immediately crashed Windbg. So now we're debugging Windbg. 070
Kevin Gosse @kevingosse.net · 25/03/2026I'm still experimenting with exactly how to include it in my workflow, but Claude is so good at reverse engineering that it's really a game changer for advanced debugging. Everything is open-source if you're fluent in assembly code. 140
Kevin Gosse @kevingosse.net · 17/03/2026Where does the .NET community live nowadays? Because apparently posting a technical article on reddit is considered self-promotion and forbidden except on Saturday. Honestly I'm speechless. 260
Kevin Gosse @kevingosse.net · 12/03/2026I like Copilot CLI but the billing model stresses me out a little. Because there's no hourly or daily limit, I worry that I might run out of requests before the end of the month, and use them very conservatively. Then I end the month with a lot of unused quota. So I built a tool. 241
Kevin Gosse @kevingosse.net · 08/03/2026I'm trying GPT-5.4 and scratching my head when seeing the generated code. What reasoning process could lead to explicitly initializing to null a property, _and_ using the null-forgiving operator. 410
Kevin Gosse @kevingosse.net · 04/03/2026The tool can be installed from Winget: winget install KevinGosse.ClipPing Or directly from github: github.com/kevingosse/C... I rewrote it entirely in C++ because RAM isn't cheap anymore. 020
Kevin Gosse @kevingosse.net · 04/03/2026ClipPing got a major update! The tool displays a visual notification whenever the content of the clipboard changes, for all of you who are tired of ctrl+c not working. I added configurable overlays, and some QoL improvements (like automatically starting the tool with Windows). 132
Kevin Gosse @kevingosse.net · 03/03/2026It's crazy that Windows will post notifications for the most unsignificant stuff (like the unfamous "Windows Defender Antivirus did not find any threats"), but I had to check my event viewer for completely unrelated reasons to randomly discover that one of my HDDs is dying. 181
Kevin Gosse @kevingosse.net · 23/02/2026I'm surprised that "dotnet tool install -g" uses the local nuget config, if any. For local tools, I get it. For global tools, I would expect it to always use the userprofile config. Sounds a bit dangerous? Like, if you run the command from your Downloads or temp folder and you have a leftover file. 220
Kevin Gosse @kevingosse.net · 21/02/2026Pro-tip: even if it's tempting, resist the urge to argue with copilot 130
Kevin Gosse @kevingosse.net · 31/12/2025I learned programming on a 80286 with Qbasic. Out of curiosity I checked how this demo would run on that hardware (~1500 cycles/s in dosbox). Way too slow in QB 1.1 (interpreted), even in CGA. Much better in QB 4.5 (compiled), though it would need some double-buffering to fix the flickering. 010
Kevin Gosse @kevingosse.net · 31/12/2025If you missed this video, I strongly recommend watching it. It's a great introduction to 3D graphics, short and easy to understand. I had a lot of fun reimplementing it in Winforms and text mode. 120
Kevin Gosse @kevingosse.net · 02/12/2025I was investigating a crash, and pasted my windbg output to ChatGPT to see if it could come up with any lead. It noticed something that I completely missed, a memory area that I dumped in binary was actually a string (even though it's not supposed to be). That's really nice and unexpected. 060
Kevin Gosse @kevingosse.net · 06/11/2025Fun fact: you can't use print screen to capture a screenshot of a crash of SnippingTool 0120
Kevin Gosse @kevingosse.net · 01/11/2025It is! VS2026 shows this exception whenever I debug this solution (github.com/kevingosse/T...) Something to do with hot reload apparently, but I tried completely disabling hot reload and that doesn't fix it. 130
Kevin Gosse @kevingosse.net · 01/11/2025I had a ton of fun at Techorama NL. It's not everyday that you get a chance to debug variadic .NET functions on a giant movie theater screen. 140
Kevin Gosse @kevingosse.net · 26/09/2025Another way to illustrate: here, CallMe is able to extract the string "hello" even though it feels like it shouldn't be able to. 000
Kevin Gosse @kevingosse.net · 26/09/2025If you have trouble understanding what's going on, have a look at the decompiled code. `Test` allocates a single closure for the calls to `CallMe1` and `CallMe2`. 100
Kevin Gosse @kevingosse.net · 26/09/2025There's an even more adverse effect to the way closures are allocated: sharplab.io#v2:EYLgxg9gT... Because the same closure is reused for different calls, you can end up extending the lifetime of some of your objects without realizing it. 220
Kevin Gosse @kevingosse.net · 10/09/2025Congrats to Microsoft on this new release, I've been using it for a few weeks now and it really feels great. Note that Resharper is already compatible, if you want to try it! 152
Kevin Gosse @kevingosse.net · 03/09/2025Not entirely sure what I'm going to do with all that money. 021
Kevin Gosse @kevingosse.net · 01/09/2025I just discovered that whenever you create a closure in a generic C# method, the closure is also generic even when it's not needed. This is very frustrating to me because generics cause performance issues in Resharper (see bsky.app/profile/kevi...) sharplab.io#v2:EYLgxg9gT... 130
Kevin Gosse @kevingosse.net · 28/07/2025To help reduce the number of UI freezes caused by Resharper, I built an internal tool to measure UI responsiveness. Here, you can see the improvement between the current 2025.1 version (on the left) and the upcoming 2025.2 version (on the right) with out-of-process enabled. 2146
Kevin Gosse @kevingosse.net · 23/07/2025It's worse in Visual Studio because there are hundreds of assemblies to iterate over, so the lock is held for a significant amount of time. To add insult to injury, the R# framework relies *a lot* on generic types. In total, that's 21 seconds of CPU time wasted on startup! 190
Kevin Gosse @kevingosse.net · 23/07/2025As I work on Resharper performance, I learn about limitations of .NET (at least, .NET Framework) that I wasn't aware of. Here, I shaved 1 second of CPU time on startup by... removing a call to Array.Empty<T>. 1354
Kevin Gosse @kevingosse.net · 18/07/2025Working on performance, it's a lot of time wasted on dead-ends and getting the impression of making no progress, and then suddenly managing to shave 10 seconds of CPU time off R# startup. 2251
Kevin Gosse @kevingosse.net · 08/07/2025One thing I like about working on a new codebase is finding all those low-hanging fruits, optimizations that have a significant impact for a relatively low effort. Here, before/after, squashing ~140 MB of heap allocations from Resharper licensing code. 2192
Kevin Gosse @kevingosse.net · 05/07/2025I'm experimenting with interfacing dnlib with my Silhouette library. The .NET profiling API provides almost no helper at all to manipulate IL, it just exposes the method body as a binary blob. Having access to dnlib greatly simplifies IL rewriting. github.com/kevingosse/S... 061
Kevin Gosse @kevingosse.net · 11/06/2025The core issue is that it tries to "improve" the code without staying relevant to the edit that was made. Here, I edited the method to add the call to "Path.GetFileNameWithoutExtension". In response, the AI suggests to change the dictionary assignation. It's completely unrelated! 020
Kevin Gosse @kevingosse.net · 23/05/2025Today I needed some information about method jitting in R#, but ETW was missing some bits. It was a nice opportunity to test Silhouette, and it only took me a few hours to write a profiler to retrieve everything I needed. (and yes, it's XML, I'm old 👴) 110
Kevin Gosse @kevingosse.net · 15/05/2025Time to make it official: starting Monday, I'll be leaving Datadog and joining JetBrains as principal engineer 🎉 I'll be working on various topics, but one of my first responsibilities will be to improve the performance of Resharper, which is a thrilling but frightening challenge. 4612
Kevin Gosse @kevingosse.net · 15/03/2025I'm starting to prepare my talk for @updateconference.bsky.social in Krakow next May. krakow.updateconference.net/en/2025/sche... First (and most important step), using AI to build a concept for the illustration (with cats), then commissioning a pixel-art artist for the final drawing. 041
Kevin Gosse @kevingosse.net · 18/02/2025It's hard to focus on your work when @andrewlock.bsky.social knows your weakness 150
Kevin Gosse @kevingosse.net · 17/02/2025Yes, they're the same thing 😉 Frozen segments were renamed into NonGC heap github.com/dotnet/runti... 110
Kevin Gosse @kevingosse.net · 30/12/2024I migrated ClipPing from WPF to @avaloniaui.net + NativeAOT. Commit size is still surprising to me, but the overall memory usage has been massively reduced. 0101
Kevin Gosse @kevingosse.net · 26/12/2024I finally got so annoyed with ctrl+c randomly failing that I built a tool for it. It monitors the content of the clipboard, and highlights the active window when a change is detected. It acts as a visual confirmation that you properly copied stuff. 4174
Kevin Gosse @kevingosse.net · 02/12/2024There are not a lot of companies where you get to discover that some customers declare more than 1000 variables in a single method and it breaks your code. 150
Kevin Gosse @kevingosse.net · 24/11/2024This is annoying for multiple reasons, but the main one is that Datadog activated the filter for copilot suggestions that contain public code. That makes it completely useless when working on high-profile OSS repositories like dotnet (any code generation is of course going to contain public code) 100
Kevin Gosse @kevingosse.net · 24/11/2024For people who use their github account at work, do you know if there's a way to segregate your account for personal and professional work? I have a personal github pro subscription, however my copilot settings are managed by my employer even when coding on my personal computer on my free time. 241
Kevin Gosse @kevingosse.net · 23/11/2024I'm looking at how to contribute new commands to SOS (for #dotnet memory dump analysis) and damn, the naming conventions are really all over the place 😅 Three local variables, three different conventions. I guess that's how you can tell a codebase is really old. 080
Kevin Gosse @kevingosse.net · 18/11/2024Remember that if you use System.Diagnostics.Process to collect stats about a process in #dotnet on Windows, this is *much* slower than what you'd expect. It's fine to call it only a few times, but to feed metrics then consider using the Windows PSS API instead: learn.microsoft.com/en-us/window... 2349