Replies: 24 comments 11 replies
-
2021-12-22What's happened so farI've started this blog way after the rework has started so this post will be used to recall and describe roughly what has happened under the hood so far. Switched from using XML to JSONEverything that needs to be persisted (application configuration, controller properties, and last but not least the profiles) will be using JSON instead of XML. Reason being that the entire project doesn't really use anything that warrants use of a very verbose and complex markup language like XML, it's easier to read for the human eye (and to edit) and battle tested serializers in .NET exist for it in ages. This does not mean that every customization previous DS4Windows users made (profiles, macros, etc.) is lost, there are XML to JSON converters in development, that will take care to transparently migrate >90% of the existing configuration, where possible. A ton of hours was dumped into dissecting and replacing the existing XML (de-)serializer which was hand-crafted! It was a monster; tons of duplicated and temporary variables, string and indexes used everywhere to keep track of states and objects... Nobody will miss this beast 😁 The way data gets persisted also has been completely redesigned and follows a true object-oriented pattern now. A "profile" is now a POCO with an object graph that is (de-)serializable with ease and is very simple to extend with features in the future. UI reworkAdonis UI was introduced to unify the look and feel and also make the styling easier. This may or may not be the permanent solution as there are many other frameworks out there that offer more features but for now it's enough to give the UI a fresh look and also a more coherent dark theme. The changes may be subtle but it makes working with XAML and WPF in general more fun 😀 Rewriting Profile EditorThis is a huge but important task. The entire profiling system is based upon design sin after design sin which makes it incredibly hard to understand, or even extend. Instead of having an object-oriented approach to store, retrieve and organise profile data countless arrays, indexes, fields and copies of fields, references here and there were used. This mess needs to be untangled and redesigned. This is currently ongoing full throttle. Addressing and fixing many memory leaksDisclaimer: technically it's not really leaking memory since in a managed language like C# it's quite hard (albeit not impossible) to actually allocate memory that is never freed again during application runtime, but for the sake of simplicity lets stick to the common term when a lot of heap memory is allocated that puts a lot of pressure on the garbage collector and leaves big lumps of unused memory dangling around for many seconds, if not minutes. With that out of the way the input handling logic (reading packets from the actual hardware and transforming it to be fed to the virtual output devices) has been optimised in a major way. Previously heap memory usage was running away slowly but steadily during program usage due to many unnecessary allocations and improper use of the HID-Library abstraction layer. With these fixes in place, memory usage during runtime with one or more controllers connected was greatly improved and stabilized. A lot of design sins also hide in the Profile Editor implementation, the classes involved are currently ported over to utilize IoC (dependency injection) so singletons will remain in memory once and just the relevant references will be updated during runtime instead of allocating and destroying a ton of objects when invoking the Profile Editor and related types. |
Beta Was this translation helpful? Give feedback.
-
2021-12-27 🎅Currently reworking the Special Actions types so they can be (de-)serialized properly. Then I can migrate the Special Actions View Model to IoC and a huge chunk of the Profile Editor will be running under new logic! |
Beta Was this translation helpful? Give feedback.
-
2021-12-29Wow, even though I wrecked havoc on the entire profile editing pipeline, the default behaviour and remapping to a virtual X360 controller still works! Mainly because I have not yet ripped away all the global fields, properties and methods that the core services depends on but still, wow. This decoupling shows how much redundant code there is, the old XML-style profiles are still loaded and read all over the place, I am actually impressed! |
Beta Was this translation helpful? Give feedback.
-
2022-01-01Added a small new feature; allowing to ship immutable (non-user-editable) profiles to provide some useful presets that can not be altered on accident ("Default" in this example screenshot is immutable): |
Beta Was this translation helpful? Give feedback.
-
2022-01-16Currently reworking the tray area logic. Migrated profile enumeration to new profile service, removed a lot of redundant events, applied consistent dark theme: Added experimental tooltip bubble styling, will rework this to be bigger, easier to read, consistent with theme and simpler to populate: Lots of smaller ongoing changes of clean-up and rewrites under the hood. |
Beta Was this translation helpful? Give feedback.
-
2022-01-17The Log Tab has been removed. New behaviour will be to only use UI notifications for really important events and instrument more verbose logging to file. This is easier to submit support requests in the future and takes away a lot of verbose spaghetti code that currently writes to the UI from various different classes. A new "dashboard"-like tab will be introduced which will show the user essential component health in one simple summary (e.g. emulation driver is missing and what to do, settings seem corrupted, performance issue detected, update is available etc.). |
Beta Was this translation helpful? Give feedback.
-
2022-01-18Started migrating the "new stuff" to dedicated class library |
Beta Was this translation helpful? Give feedback.
-
2022-01-22Continued to rip apart the project into multiple class libraries grouped by core types, application settings, profile settings, device enumeration and more to come. Also removed deprecated OpenTracing with OpenTelemetry. For now only the Tracing component of OpenTelemetry is gonna be used, Serilog does a fantastic job and will stay until there's good reasons not to. Not a lot is instrumented yet with tracing but the foundation is built. |
Beta Was this translation helpful? Give feedback.
-
2022-02-20Currently very busy with other tasks so not much progress but I've commissioned and donated a new app icon, social banner and splash screen to refresh the identity of the app slightly, check it out in the README! 🥳 See you soon! |
Beta Was this translation helpful? Give feedback.
-
2022-03-09Long time no see! I am please to announce that a new contributor found the way into our little corner of the Internet: @Torinth 🥳 Due to the amount of moving and in-progress code it's been decided that the entire UI system is getting a rewrite/redesign in parallel: This is of course just a mock-up but coding from scratch without the obstacles of the past is sometimes the better choice! |
Beta Was this translation helpful? Give feedback.
-
2022-03-13Added Dependabot configuration so 3rd party packages get checked for updates each week automatically. Working on more components of the input device pipeline. |
Beta Was this translation helpful? Give feedback.
-
2022-03-22I am currently buried with other tasks but thanks to @Torinth the new UI/UX is getting rapid attention and progress 👏 |
Beta Was this translation helpful? Give feedback.
-
2022-04-23Things are getting into shape, we have a working prototype that can emulate a controller and managed to shave off one or two more milliseconds of processing speed! More to come soon! |
Beta Was this translation helpful? Give feedback.
-
2022-04-27We've got some exciting new experimental approaches to the whole wonky device hiding mechanism in the pipeline, more to come soon 👀 |
Beta Was this translation helpful? Give feedback.
-
2022-05-05We're experimenting with a new, exciting and promising method to further simplify and automate device hiding without all the pitfalls learned from previous solutions (HidGuardian, HidHide), I'll add some screenshots when I'm ready to show something 👀 |
Beta Was this translation helpful? Give feedback.
-
2022-05-24Most work currently happens on shaping the new UI and creating an installer. New design uses a Windows Service for tasks requiring elevated permissions, a tray app that is decoupled from the main executable and last but not least a new installer! Meanwhile a new companion tool takes shape 👀 |
Beta Was this translation helpful? Give feedback.
-
2022-07-04 |
Beta Was this translation helpful? Give feedback.
-
2022-10-06We're still alive and well! Summer is over though, sadly, so as we welcome the dreary cold days, we will fire up the engines in the development dungeon once more and intergrate new features 😁 Meanwhile for the biggest piece of news: since we couldn't decide on a new name yet, a compromise has been reached! Codename: Vapour Input This has to do until "public" app branding becomes relevant. But now at least this measure can distinguish us from the currently actively maintained fork(s) of DS4Windows! Cheers |
Beta Was this translation helpful? Give feedback.
-
2022-10-16Huge success achieved today, our new device hiding feature is working; hide and unhide controllers during runtime in a matter of milliseconds! 🥳 More to come soon 😃 |
Beta Was this translation helpful? Give feedback.
-
2022-11-25Still alive! 😁 Small update, we successfully migrated the solution to latest-greatest .NET 7! We also managed to shave off 5 megabytes of the resulting binaries 💪 I'd guess it's safe to assume, that not many newsworthy changes will happen in 2022 so fingers crossed that we may start 2023 refreshed and eager to continue the work 😎 Cya! |
Beta Was this translation helpful? Give feedback.
-
2023-01-05Happy New Year! 🥳 Let me bring you up to speed what's going on:
Cheers! |
Beta Was this translation helpful? Give feedback.
-
2023-02-04Ahoy there! Things are yet again happening at a stellar pace, time to bring you up to speed:
Cheers! |
Beta Was this translation helpful? Give feedback.
-
2023-09-25Hey there 👋 Been a bit busy with things but still here 😅 Cheers! |
Beta Was this translation helpful? Give feedback.
-
2024-01-17Belated Happy New Year! 🎉 Pace is slow, however, changes happened:
Cheers! |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
As we're plowing through the code and change stuff I think it's helpful to keep "the public" up to date what's happening, besides the wave of commit messages, so I try to start a development diary here in a semi-regular fashion.
Wish me luck since you know, I'm the master of inconsistency 🤣
Let's go!
Beta Was this translation helpful? Give feedback.
All reactions