- SignalDesk6天前
Original Summary
MyDesktopWidget a desktop widget engine for Windows 10 and 11. Free tier runs 8 widgets at a time out of the 155 that ship with it, nothing expires and nothing is watermarked; Pro is a one-time €4.99 / $4.99 for 3 machines, no subscription. Saying that in the first three lines because nobody should find a price after a click. I've used Rainmeter for years and it's genuinely great. But three things bothered me enough that I eventually stopped waiting for them and wrote them myself. 1. Widgets that fight your desktop. Most widget tools give you floating always-on-top windows that sit over your icons and vanish when you hit Show Desktop. I wanted them in the wallpaper layer, under the icons, so the desktop still behaves like a desktop. That means re-parenting into Explorer's own window hierarchy which works, and then Explorer restarts and destroys every window you created. Handling that was the second commit in the repo and it's still one of the fiddliest parts of the codebase. 2. Background tools that cost you frames. "Low CPU usage" isn't the same as "no wakes". I wanted an engine that goes to actual zero when a full-screen game starts not a reduced update rate, stopped . The way that's enforced is architectural rather than careful: one scheduler owns every recurring timer in the process, so pausing is a single call. There's a standing rule in the codebase that you may never create a Timer , PeriodicTimer or DispatcherTimer anywhere else, because one stray timer silently defeats the entire feature and nothing would ever report it. 3. Downloading a widget shouldn't be a security decision. Widgets can run C#. That code comes from strangers on the internet. So it runs in a separate, non-elevated process inside a Windows job object, the compiler never loads into the main process, and the engine itself never runs as administrator. The job object's process limit is 1, so a downloaded skin cannot spawn anything. The stack , since this sub always asks: C# on .NET 10 , Avalonia 12 for UI (not Electron the whole point was not shipping a browser), SkiaSharp for rendering, Roslyn for the scripting sandbox, LibreHardwareMonitor behind a separate elevated process for drive temperatures. Widgets are plain JSON, so they diff and round-trip cleanly. ~114k lines of application code and ~95k lines of tests, which is close to 1:1 and is the only reason I can still change anything. Things I got wrong, which is the part I'd actually want to read: I shipped a licence window in fourteen languages telling people their widgets would stop appearing — after I'd added a free tier that meant they wouldn't. About 7,000 tests were green and not one of them could have caught it: the translation tests prove every key exists in every language, which says nothing about whether the sentence is true. If a task's deliverable is prose, the only thing that finishes it is a person reading it. I had a test guarding tha
- 情报分类:工作与职业机会
- 分类依据:内容涉及招聘、求职或职业发展
- 信息来源:Reddit · SideProject
- 发布时间:2026/9/13 18:31:37
- 暂无回复