Dave Rayment
C#/.NET developer passionate about inclusive, high-performance tools
๐ Biography
Hi, I'm Dave, a seasoned .NET developer with more than 20 years of experience. I'm passionate about creating inclusive software that serves everyone. As a contributor to Microsoft's PowerToys, I've delivered performance improvements, new features, accessibility improvements and bug fixes impacting millions of users globally. I'm grateful to contribute to open source software with such reach. My approach combines technical expertise with empathetic community engagement, and I'm happiest when I can help solve problems for others. I'm based near Nottingham, England, and I believe great software comes from understanding diverse user needs and fostering collaborative development. Beyond PowerToys, I develop several personal projects, most of which are open source. Over the next year, I look forward to widening my community engagement and collaboration, with an ongoing goal of making technology more accessible and useful for all.
โจ High-Impact Contributions 2
It's not often that you can improve an algorithm by several orders of magnitude for both space and run time, but my reimplementation of PowerToys' Run application's window search algorithm managed that. This was borne out of my investigation of a user's report of the application using 17 GB of RAM (!) and failing to finish some searches, effectively hanging the app. It was apparent that the existing greedy search algorithm was not fit for purpose - it explored every potential match for every open window in a recursive cascade. Repeated search elements resulted in an exponential explosion in memory usage and runtime. My solution was to completely rewrite the algorithm, replacing it with a dynamic programming approach that was single-pass and used only a tiny amount of memory. I added a thorough write-up and published a full benchmarking suite and spreadsheet with comparisons between the approaches, highlighting normal and pathological test cases. I'm proud of this one.
Sometimes just reading the code is the best way to get familiar with an application, and this was my first foray into looking at PowerToys' Command Pallette. I spotted a way to significantly improve the sorting of search results, relying upon the fact that sections were already pre-sorted. It's not often that you can dig out a classic algorithm and apply it to a real world problem like this, but this suited a 3-way merge so well it's like it was tailor-made! The end result: speed and memory usage improved by 80+%. I shared a full benchmark application which illustrated the difference between the original algorithm, my 3-way merge, and a heap-based algorithm, showing that the merge was optimal. I included all the stats and charts in a separate spreadsheet and did a full write-up. I'm proud that this ended up being part of a suite of PRs which formed Command Palette's performance-centric push at the beginning of the year, which significantly improved speed and overall responsiveness.