This week has been a crazy deep dive on Avalonia. I’ve managed to spend over 30 hours on it and related projects. Like with any new thing you learn things that were initially confusing have become more second nature. I think part of that is that I more than doubled the amount of time working with it in a pretty focused period of time. There were certain points where things were just coming together almost automatically in my mind. At one point everything was just humming but yesterday I hit a good sized roadblock trying to learn some more complex behaviors. It’s a common problem when learning anything, or even running. You hit this point when all of a sudden everything is just moving in complete efficiency and it starts feeling effortless. It can be euphoric, however like anything euphoric it wears off and a reality will set in eventually. Yesterday it was getting my face cracked trying to get a TreeView control working and getting notifications of event changes within DataGrids properly percolating around. To be fair this is getting into using this in more complicated ways which means that the simple responses in the developer assistance area is going to get harder and harder. Sometimes the answer is going to be “it depends” or “it can’t do that” or even “I think it should work like this but not sure”. I’m still going through the guantlet on it but still I’m stoked by the entire development experience, have a few applications I want to write in it, and am looking forward to contributing to the project.
My first contributions, as I wrote previously, are going to be mostly in the documentation direction. The API documentation is all there and there is a good solid first tutorial but the project really needs more complex tutorials and the HOWTOs for each component are mostly lacking. I’m doing a tour of most of the controls in learning how to use the framework and in looking at the applications I want to write. I’m going to continue documenting it here and if the project wants contributing them, or something based off of them, to the project’s main page as well. I also want to create an example project which can be used to show more complex interactions between components, data sources, live animations, etc. I know some of these are already around since I’ve seen them in demos. However the source code isn’t generally available. I want to make mine generally available and to have documentation alongside it to describe how things are done. It’s purpose will be for teaching people how to use Avalonia and cross-platform .NET not have that as a side car. Lastly as I work through things I am finding small bugs. I’ve already contributed a minor fix back to an Avalonia port of OxyPlot, a graphing library. I intend to keep doing that sort of thing and more as well.
The biggest sore point I have in all this though is that I’ve had to abandon Linux as my primary development platform for Avalonia for right now. As I need to do more and more live UI tweaking I need to have the auto-complete in XAML and preview rendering of the UI. The Rider plugin doesn’t run on Linux, but even if it did it lacks the preview capability that the Visual Studio plugin has. AvalonStudio just isn’t stable enough for me to use for more complex UIs right now. That’s not a knock on it since it is still under beta development. However it’s just not tenable for me to use at this point. Visual Studio 2019 has more than it’s share of quirks though. I keep getting compile errors from phantom projects and weird things like that, however it is giving me my preview capability and solid XAML auto-complete. My development stack therefore looks like: * Use the .NET command line for creating all projects and solutions * Use Rider for all non-UI heavy work and light UI work * Use Visual Studio for more complex Avalonia UI development * Frequent pushing to Gitlab from Windows down to the Linux environment for consistency testing
Right now this is boiling down to about 70-80% of the time working under Windows and 20-30% of the time working under Linux. I’m not giving up on doing my development full time under Linux in the long run, but fighting that while learning the new framework and fighting documentation holes is just too much inertia to overcome. That brings me to the last contribution I’d like to potentially do: getting the Rider plugin working for at least auto-complete and across all the platforms. That’s a trailing third behind the documentation and examples however.
Alright, enough statusing…back to productive work…