Jon (00:21.698) You're listening to Gone Mobile, your input and output for all things NET, mobile and Maui. Jon (00:39.266) Hey everybody, welcome back to Gone Mobile. What's this? Gone Mobile is back. It's been a while. If you were a previous listener and subscriber and maybe you just had a subscription still set to Gone Mobile podcast and all of a sudden there's a new episode. Thanks for coming back. If you're new, welcome. Just wanted to take a minute to do some introductions again. I'm Jonathan Dick. You might know me as Rhett on the internet, R-E-D-T-H, all one syllable. The truth, it's not two syllables. Doesn't matter, just don't call me something bad. And I am the.NET Maui team and engineering lead at Microsoft. And of course this podcast is my own set of words. And you might be wondering what happened to Greg Shackles. Well, Greg is still busy at Olo, still working on some systems there. I think he's moved up a few ranks though. And Greg has graciously agreed to step down host seat because he's not really doing so much in the dotnet and mobile dotnet world these days. And so in his place, uh, I've asked Alan Richie to join the show as a host and Alan very active in the, the dotnet ecosystem, the dotnet Maui, the Xamarin world, uh, you might know some of his libraries, I'll let him talk about them in a second, uh, but I've gotten to know Alan a little bit better, uh, up, up Canada way like myself. So, um, you know, produced now from the great. White North exclusively this show. So Alan, why don't you introduce yourself? Allan Ritchie (02:12.957) Hi everybody. I'm Alan Ritchie. I am the VP of engineering at a company called Falcon.net. Falcon Technologies. That's Falcon with a K. Why we chose that I don't know, but it is what it is. I've been doing Xamarin and Maui for, I don't know, how long has it been around now? Jon (02:32.17) It's been a while. It's been quite a while because I think if I look back at the clock and figure out how long I've been at Microsoft, you know, and having been at Xamarin for a while too, it's I think we're up to like eight years that I've been around. And of course, you know, before Xamarin there was mono touch and mono for Android and you know, that was around too. Yeah. Allan Ritchie (02:51.885) Yeah, with the Zimian days and Novell. That's when I started my initial POCs was when the when Miguel was at Zimian and Novell doing that stuff. Jon (02:59.382) So did you, were you around in the fun days of like, before we had things like debugger support in MonoTouch? Yeah. Allan Ritchie (03:08.613) Yep, yep, that was a great time. My frustration was more when the licensing server was a thing, oh, I don't know. That was some rough times, but we still managed to make some great things out of it. I started doing a lot of open source at that time. You might've used user dialogues, maybe the geofencing. I did a whole bunch of plugins alongside James and others. Sorry if you had success or lack of success with them. Jon (03:14.566) Hahaha Jon (03:20.749) Yeah. Allan Ritchie (03:37.341) But user dialogues is like the one that refuses to die. I wish it would, but people still use it. I suppose. And then people decided to say they were ugly, but it's just the native stuff, right? I don't do pretty. That's why, you know, I have a library called Shiny as well. A lot of people using that in enterprises these days for GPS and push and all that fun stuff. Jon (03:43.626) Yeah, I mean, there's always a need for dialogues in your apps, right? Jon (04:01.826) So is it named shiny because you don't make things pretty and you wanted some beauty in your life? Allan Ritchie (04:07.105) Exactly. And people used to have to update their Nuggets right away. So some, at one point I was doing like the Golem voice where I need my shinies because they had to update Nuggets like zero day. You know, remember the days when we had to deal with Jon (04:16.427) Hehehe Jon (04:19.838) Oh yeah. If you saw that little button, right? Like the alert. It's like, I, okay, go update, go. Allan Ritchie (04:25.129) Yeah. You remember the days when Android support libraries would update and people would be like, well, I haven't joked updated these yet. Jeez. And you're like, okay, just, you know, it came out today. Let's take a breather. So yeah, that was the name for the, that was the reason for the naming. It was kind of a joke and the fact that you don't see anything with what it does. Jon (04:32.48) Yeah. Jon (04:44.882) And Shiny lives on well today in Maui, right? I think we'll definitely have to do some episodes digging into the details. One of the changes from the format going forward, Greg and I always tried to have a guest on, and that was cool for a number of reasons, because we got to talk to a bunch of different people and look at a bunch of different topics. But coordinating guests is hard. Coordinating quality recording equipment and stuff is hard with guests too. And so yeah, the format going forward, I think is going to be, and hopefully everybody doesn't get too sick of us too quickly, but mostly us bantering back and forth about, you know, about stuff that we're working on, about things that we know in the, ever see in the ecosystem, cool concepts digging into like details and mostly to be honest,.NET Maui centered. Cause I think that's where we both spent a lot of our time. Allan Ritchie (05:39.289) I'd still love to get David Hart now on here. I love David, but he's notorious for like asking me the day before for a presentation and saying, yeah, make it about 20, 30 minutes and then giving me five or 10 minutes to present. So I'd still love to get him on and just grind him just a bit. Jon (05:50.848) Yeah. I'm sure we will find opportunities to have guests here and there, just not as a general rule going forward, I think. So today, this is episode 88, I think, technically. However, it's kind of episode one of the second season, I guess, if you will. And so we just really wanted to jump on a bit, do some introductions. And then maybe talk a little bit about kind of the state of Maui, you know, what, what we're up to, uh, dotnet Maui, the eight dot O releases was out recently, uh, where we're working. There's going to be a service release coming and it's going to try some, uh, new ways of distribution. Uh, one of the things we've been looking at is like, Hey, can we make. New gets a little bit kind of more of a thing again, at least for Making it easy to update your project and stuff and try out previews or try out nightly builds and stuff. So anyway, like how are you getting along with dot net 8 and Maui? Allan Ritchie (06:51.581) I've had pretty good success converting to Maui. Obviously some of the days in the net six timeframe with the tooling was difficult, but net eight has been, I just haven't had any issues. The tooling has been coming along. Jon (06:58.792) Yeah. Allan Ritchie (07:06.577) been converting really well. Collection view, a lot of the collection view blips are gone. Even got rid of the refresh view, even though I personally don't. I only use that for my ugly test projects, but hey, even that measurement's working now, so I can continue to make POCs. Jon (07:19.722) Yeah, definitely a lot of quality bugs around quality went into getting fixed for night eight. And there's still stuff out there. I mean, collection views, like one of the areas that's a little bit harder still to always have worked perfectly. And it's, I mean, it's a complicated thing to try and do across platforms and abstract away. But yeah, we'll continue to focus on that for sure. But in the meantime, I mean, it sounds like, you know, you're having an all right time of things. Uh, I've been busy for the last while converting my own app, pool math to, to Maui and to dotnet eight Maui kind of dragging my heels a bit just because, Hey, I've been kind of busy with this work thing too. And Allan Ritchie (08:01.265) John says kind of, but he's been rewriting pool math over and over, I think for probably two or three years now. Jon (08:06.174) Yeah, I mean, I've had that problem as well, right? It's like, it's that kind of opportunity you get always to rethink, it's like, oh, I can rewrite the stuff that I didn't like how I did the first time. Cause the app that is now, oh, the app is probably, I wanna say five or maybe six years old at this point. Like it's been around for a while, it's been in the store for a while, it's doing well, people seem to like it and use it. But. Think about your code five years ago, some of the decisions that you might have made. And if you look back at that kind of code that you've written so long ago, and that's where I was at, where it just made sense to try, and oh, let's re-architect a bunch of stuff. Let's properly separate business view model type logic and everything. And one of the goals there was to allow me to bring it to Blazor Wasm as well, so I could target the web. Allan Ritchie (08:59.649) And hey, you're liking DI now too, so... Jon (09:02.11) Yeah, yeah. Well, and that's, that's kind of a big change with Maui, right? From the Xamarin forms days, we, we would like to say embraced even DI and kind of the host pattern, the host builder pattern and services within Maui. That wasn't really a thing in Xamarin. Um, yeah. What, what, what are your thoughts there? What else are we missing there still? Allan Ritchie (09:24.709) Um, I think you guys have done a really good job with kind of the whole life cycle stuff. It allowed me to kind of get in there because, you know, a lot of those plugins, they need to get their hooks in somewhere. Like iOS has all the weird app delegate methods. Um, Jon (09:38.208) Yeah. Allan Ritchie (09:39.957) Android, you know, you can't access anything if you're not in an activity. That's a fun one constant fun one So those have been covered. I've obviously been doing DI for a while like shiny used to kind of force it on the Xamarin forums users So dance eagle and I prism theme for Dan Him and I were kind of pushing DI for the longest time like just come on Jon (09:53.206) Mm-hmm. Allan Ritchie (10:02.757) do this. But now that it comes out of the box, it makes it a lot easier for your kind of new users or people that aren't familiar with DI. Like it's here. You need to start making use of it. Like it's a good thing. It's been around in ASP.NET Core for jumping. I don't know. Do you want to say 10 years more? Jon (10:20.938) Yeah, I think, and to be fair, like performance, I think, was always a little bit of a concern and maybe not super well-founded of a concern, I guess. Although I will say like part of the move to Maui from a.NET perspective has been, for people who don't really know the difference, there's a history of runtime stuff, right? So in the early days, Xamarin was, I mean, it was all mono runtime and it still is technically mono runtime, but there, there is a difference. So there was mono. We like to refer it as the mono runtime and the mono, sorry, the.net mono runtime. And the reason for that is simply like the GitHub repository paths. Like the mono org in GitHub has a mono repository that has the old mono runtime, right? So we call it mono mono. And then the dotnet mono runtime is the. The migration of that mono runtime into the dotnet organization and lots of different changes have gone into that, like tons of change. I don't think, I don't think people kind of have enough understanding or give enough credit to just how much like the old mono is not the same as the new mono runtime. Um, and so lots of improvements there, optimizations, performance stuff. And so like part of that was also when we were looking at introducing more DI and more of the, the host pattern into Maui. The, there was some work that went into performance optimizations and like the, the DI stuff was all built with the server workload in mind mostly. Right. And so they didn't really. Optimize initially for a mobile scenario and those are different scenarios And that's part of why the mono runtime is still a thing even in dotnet is because it is highly tuned to these mobile scenarios versus server But more work had to go into the actual freight, you know the dotnet CLR and all of the parts that we now share And to make it so that these things worked. All right, and so that happened and I think I think anymore, you know Di and stuff like you said, it's important. It's helpful. It's useful Jon (12:29.334) And I think it also performs reasonably well too, as long as you're not doing anything too crazy. Allan Ritchie (12:33.365) Yeah, the Microsoft extensions, the whole kind of package set there. There was some early issues with logging, but the DI package has always been super fast. What I tended to see in Xamarin forms is everybody used AutoFac for the longest time. AutoFac is a beautiful package. It does some great things. They probably set us all up for success and it just kind of did everything in the kitchen sink, which didn't really work out too well for. Jon (12:48.107) Mm-hmm. Allan Ritchie (13:00.733) for like a mobile app, let alone Xamarin Forms. But you know, we learn. I've always had the luxury of working on like enterprise, like big apps. So startup performance wasn't the hugest concern because there were so many people touching it. You just had to have a. Jon (13:02.392) Yeah. Allan Ritchie (13:17.805) wider distribution of architecture to be able to handle all the teams touching it. So, but those that are doing like the prettier apps or the smaller apps, you know, they want that startup time. So it's just depends on what you're doing. Jon (13:29.086) Yeah. And I mean, lots of work has gone into that, you know, part of the, the performance specifically too, but I think like at the same time, the, the mobile. Like the technology in the space has really obviously improved over the years. And we're, I almost like to think like we're, we're kind of coming to the middle point from the, both ends of trying to make things faster, but also like the hardware helping do that as well. And so at this point, you know, I, I do really think we're. with Maui, especially again, if you're not doing anything too wild in the startup path of your app, like it's total for pool math is totally acceptable. The startup time it's, it's fast. I mean, it's, it's great. And, you know, to the, so much to the point that it's not really something that I worry about anymore. So I think, you know, enterprise apps give you the bit of that luxury too, but it kind of seems at this point, like it's, it's becoming less of a concern in general. Allan Ritchie (14:16.498) Yeah. Allan Ritchie (14:26.149) I mean I've never actually seen the performance, like if you're registering like 400 dependencies yeah you might see a little bit of a blip but maybe you're over complicating things a bit. Jon (14:36.254) Yeah. And it's, and I think it's not so much the dependency stuff that you're injecting or the quantity of it anymore either. It's like, you know, you got, you got to. Being a mobile developer and for anyone who like is coming to the space, that's, that's more new to it. And like Maui is a new thing that you're trying out. And maybe you're familiar with other workloads that you're developing for, you know, server or. or desktop, you do have to learn a little bit more about how the platforms work and how to optimize your own code so that you're not causing those bottlenecks too. Allan Ritchie (15:07.413) Right. I will say that the Android... Well, I always... If I'm going to experience a performance problem, I know a lot of people are the opposite. iOS just works for me. It's always Android. I get all my gray hairs, John, from Android. Even lately, just with all the permission changes in 14, I'm wearing gray hairs. It's always Android. Jon (15:27.486) Yeah, Android is often the challenging one there. And I think part of that is just the platform changing a little bit more rapidly. Or talking about kind of coming at things from different directions, like that's another area where I always like to think in the mobile space, like over time, iOS started out very much like they didn't let you do anything, right? You got your app running in the foreground and other than that. No, we don't want you impacting like the battery life, the experience of the app or anything. Whereas Android was always go do whatever you want. You want to run a background service that the user doesn't know is running that is sucking up all your battery? Have at it, right? And I'm sure like we'll get into this with some of the shiny stuff, too. It's increasingly. to the point where iOS and Android are kind of converging in the middle again, where Android keeps locking stuff down, right? And so every release, it feels like there's new permissions and new things to deal with in terms of how you can do stuff not within just the app being in the foreground. So I'm sure that's part of it from an Android perspective too. Allan Ritchie (16:37.009) Yeah, it's always something they're always changing. They're one platform goes one way the other one goes the other way and I don't know you guys must get a lot of gray hairs from it too with all the changes and all the Android X stuff and Jon (16:50.07) Yeah, I mean, one thing that caught us off guard, I think, too, was there were, again, there were permission changes, uh, in, I think some of the, the battery and connectivity stuff where you used to be able to ask the system for, you know, the state of something. And now it, it's like, oh no, you actually need to do this a different way. Uh, and so there's always these changes coming down the pipeline and that's part of what makes it so So difficult or challenging to build Maui, but then even just building apps, right? Because again, you as the developer have to be sort of aware of these changes too, and you have to know not just one platform, you have to know like a little bit, or at least enough detail of a bunch of different platforms to be able to be successful. Allan Ritchie (17:33.609) Well, that's one of the key things, right? Like APIs, like the architecture kind of changes a little bit. web, I mean, they come out with a new JavaScript framework seemingly every other month. But the platform's not really moving on you as much. You look at mobile, it's, you know, if you haven't compiled in six months, you know, you might have a new Android release, you have new iOS, APIs, etc. The target's moved on you and you don't know if it's 100% working anymore. It's one of those things you've got to constantly keep up with. Jon (17:47.924) Yeah. Jon (18:05.578) Yeah. And this is where I see a lot of, um, and I think there's just a lot of, you know, learning that has to happen again in this space where we have, um, you know, some customers coming in and saying like, Hey, I, I really want just like a long-term release of, of Maui, like we do for like ASP net. And, you know, the unfortunate reality is we can't really do that because we're, we're obligated to follow Google and Apple and they're changing stuff from under you. And in order to, for instance, to keep shipping your applications to the store and yeah, maybe there's some enterprise deployment stuff going on where like, you don't have to necessarily build with the latest Xcode, um, to actually distribute internally or something. I think that's a very small subset of, of apps that are out there. Allan Ritchie (18:53.509) I think you have to request permission from Almighty Apple to get that though. Jon (18:57.118) You have to, you have to get the enterprise deployment permission for one. Yep. And then, you know, even still like that doesn't really insulate you from, Oh, iOS 17 or iOS 18 broke something and now you need to like fix your app to deal with it. And the only way to do that is to compile against or with the newest X code, right? At some point. And so we've kind of had to try and get the, the message out there for people that Well, you know, in theory, it would be great to provide something that you could, you know, use.net seven or.net eight now for years into the future as a, as a long-term release with Maui. It's just not really tenable from a, you know, what we depend on in the whole stack that we're sitting on perspective where we're obligated to move forward. Allan Ritchie (19:42.629) If you think about the... about it though in the Xamarin space it always was that way. People just didn't realize it wasn't as apparent. Well, it was, you'd have a build error, right? And you'd have to move your libraries forward. Now it's just move your cadence forward with.NET and presumably you've got a good majority of everything moving forward with you. Close, it's close, it's not perfect. There's still Android X and it's supposed to be better than support, but it's not quite. Jon (19:46.582) Yeah. Jon (20:05.798) Yeah, yeah. Jon (20:12.35) Yeah. And I think, you know, to an extent, like moving, moving that all forward in the Xamarin day is like, I mean, I think we're seeing, you know, more. people who are coming from other walks of developer life. And like I said, like maybe they were web developers primarily or desktop and are used to kind of having that slower cadence of things and now realizing jumping into it where maybe they've never been in the Xamarin space, right? So I think there's more of the realization too, or the expectation of like, oh, this is how it works over here, but now I have to kind of learn that that's not really the case in the mobile space. Allan Ritchie (20:51.189) It probably gets a little bit easier for them now with Blazer as well, being in the game a little bit. I mean, he didn't really have that in Xamarin.Forms and now it's in Maui, right? So. Jon (20:54.421) Mm-hmm. Jon (20:59.882) Yeah. And we're seeing a lot of people that are taking an interest in like the, the blazer hybrid app. And probably that's a whole other episode too, right? Like, I don't know if it's, uh, you know, super well or widely understood at this point, just how like interesting of a combination that is, especially on desktop, where you can have your your blazer code, you can reuse that in a, in a Maui app. And, and there's always like, I think I know I've heard like Dan Roth and others at conference talks and stuff, trying and hammer the point home, which is like, it's not, you know, it's a, it's a hybrid app, but it's not the same in the sense of like, it's not node running, you know, your, your web code and stuff. It's you are actually running. in that process. It's not a web assembly. It's you know that the web view, yes, is rendering the content within that control, but that all the C sharp code that's talking to that, you know, that's running in the same process as the.NET app itself. And so when you start to, you can start to do cool things, right? Like you can take Shiny, And you can use it to do background tasks that you could kick off and cue up from like your laser, your razor code, for instance. Right. Like you could, you could pass all of those things in together. Um, and so one, it's just, it's, it's great from a coding perspective because you're not really segmented between these worlds. It's not like you have to figure out how to, how to get stuff back and forth across that boundary really. But the other part of it is just performance. Like it's way faster than trying to do like a, you know, a JS process inside of the app that's doing stuff. Allan Ritchie (22:42.413) One of the big things we've seen from a business perspective is having that hiring pool because just about everybody's seen a legacy app that's an MVC. few ASP.NET web forms still floating out there, but everybody's touched MVC that's been in dev for a few years. And all of a sudden you're able to take that skill set and drop them in, because not everybody has worked with XAML. Sure as heck they haven't worked with Xcode and kind of all the stuff that goes on there. Well, I guess Android XML still looks fun. Not that that's changed very, I guess the Android kind of UI hasn't changed that much, but certainly. Jon (22:55.755) Yeah. Jon (23:09.354) Mm-hmm. Jon (23:19.919) Yeah, not really. Yeah. Allan Ritchie (23:21.069) Certainly the iOS stuff has and XAML hasn't, you know, they haven't worked with it. So all of a sudden you've got all these MVC developers who either needed to upgrade or, you know, stop Deving. And now all of a sudden you have access to them to bring them into Blazor. And it's just, you know, now you can take all that this, this old workforce and use them in a mobile app, potentially. Jon (23:43.127) Have you done much mixing of Blazor stuff into Maui apps yet? Allan Ritchie (23:48.313) Not so much mixing, it's been straight. Yeah, it's not a, you know, you're not swapping between. Jon (23:50.446) It's like one or the other kind of. Allan Ritchie (23:55.481) XAML and Blazor, it's either all or nothing in that. But I've had a couple of successes with the Razor dev teams moving over and all of a sudden they're mobile devs. I mean, they still go through the whole process of setting up Apple, which, you know, that's fun, joy. You know, it's one of those things, you notice they say Apple there, unfortunately, but once you get your Mac and all the provisioning profiles and that junk set up, they're all of a sudden now mobile developers in a small manner. Jon (23:57.632) Yeah. Jon (24:09.642) Yeah, you gotta do Jon (24:25.248) Yeah. Allan Ritchie (24:25.555) UI done, which is a big part of the work. And, you know, that's a big thing. That's a huge thing for companies to reuse that talent pool. Jon (24:35.37) And that's, you know, a nice like first step toe in into the water, right? To where, where you're a mobile developer, even though you maybe haven't done much with the mobile APIs. But like now at least you've, you've gotten to the point where. Maybe you've migrated your app, your Blazor assets to run there. And now you can start kind of the process of, Oh, how, how do I mix other stuff into here, right? How do I mix? I know I was talking to someone, uh, actually fairly local to me, um, a friend that, that works on a. You know, Blazor website for a particular, you know, industry app. And they have mobile apps now for it, which is kind of like you're saying. They just basically plunked in the blazer stuff into the app. And that's where they're starting. It's a Maui app, but they're, you know, they're now mobile developers. And now he's starting to look at, well, how do I mix in, you know, stuff like deep linking or how do I mix in notifications and, um, You know, just being that far ahead and having your app actually working in there and being in that app container and that shell of an app, you know, at least puts you at the point where it's like, okay, now I can, I'm not learning a whole stack. I have to learn some new stuff, but I know a good baseline amount. Allan Ritchie (25:45.145) Exactly. Allan Ritchie (25:49.009) Well, it's funny too, because we talk about XAML being, you know, something they have to learn, but it's funny how many new devs. to mobile or at least dotnet mobile. I think that like notify property changed or INPC or MVVM or whatever you want to call it whatever you want to refer to it's all the same thing. Think it's magical right and it's basically at the end of the day an event emitting a string and there's a lot of there is a lot of stuff that kicks off and reflection and the whole nine yards but they treat it as this magical thing because they don't really see it so that's yet Jon (26:03.522) Hmm. Mm-hmm. Jon (26:14.763) Yeah. Allan Ritchie (26:26.635) the XAML you need the MVVM so it's kind of like a whole architecture rethink as well as the UI how we how we do the UI right so if you're in Razor you're doing it just like you did before Jon (26:28.695) Mm-hmm. Jon (26:35.85) Yeah, yeah. Jon (26:41.63) Now, one of the, my kind of, I'm not going to go as far as to call it a dream. Uh, but one thing that I've thought about often in that kind of world of bringing blazer assets over is, you know, what's kind of the next level interesting in terms of mixing those things together. So when I was going through taking pool math and I re-architected it so that I could reuse all my view models, my nap, you know, I. I abstracted out the navigation side of things, uh, so that I could implement it in Maui and I could implement it in, in Blazor and a Blazor web assembly app. And that got me thinking, well, okay. I don't still love writing the UI twice, right? I ha I did it once for XAML and I did it once for Blazor for, uh, So, you know, could I start to conceivably bring parts of that UI from Blazor over to my Maui app? And yeah, I could take the whole thing and move it all over, but that's, that's not my goal. I like the, you know, the native feel of some parts of my app a lot. And I think it's worth it to myself and to my customers, my users to keep making parts of like the most highly interacted parts of the app. There's like a list that people scroll through. There's a page with like some dashboardy kind of information about your pool. And like, those are the two main parts of your app that you're interacting with. So I want to keep those as native, but there's other screens. Like there's a page that you go to configure your pool settings. So like the, how much water is in your pool? Um, you know, what sorts of things are you tracking that aren't necessarily something that you have to track to have like good water chemistry in your pool? And. That kind of page to me screams like, well, this is something you don't access that often. If I have the same kind of look and feel emulated in Blazor as I do in the native app, maybe there's an opportunity to start mixing just parts of it in together. And so I haven't really gone too far down that road. I did a little bit of testing on that idea. Um, there's maybe some things to think about, like I don't want to hit. Jon (28:51.234) the button to navigate to that page and then have like an empty web view. All the thing loads up. Right. So maybe can I, can I do that loading ahead of time and have it kind of ready to go? So there's some things like that, but, um, that's kind of the, the next level that I I'm thinking, hopefully we start seeing from some of the blazer stuff coming over is like, how do you optimize your app experience? Around some of the mobile parts, but you know, leverage that sharing and in places where it makes sense. Allan Ritchie (29:19.162) It makes sense, I guess, if you're your, you know, you're your own boss and that your own architect and everything. I think you'd find most companies, at least in what I've experienced is it's one or the other. Jon (29:29.847) Mm-hmm. Allan Ritchie (29:31.961) It just that, like I said, the WebView style of things, it just makes it easier for those guys to come over. I haven't noticed much of a difference in terms of speed, but I've never really had a speed issue, like even with collection views. You can get some really hairy rendering, obviously with a grouping and stuff, but I think the craziest one I was talking to you about the other day was like a flex layout with grouping. So that gets a little bit wild. That might have been easier to do in a in a Blazor WebView for sure. Jon (29:55.926) Heh. Yeah. Allan Ritchie (30:02.097) But yeah, that's pick your poison. But the Blazor WebView is, in my opinion, it's been just as fast as doing it in native. But I know people are gonna have different experiences there. Jon (30:13.61) And I think it probably depends on like requirements for the app too, right? Like you said, if you, if you're dealing a lot with enterprise apps, um, probably, you know, having like a, that, that last few percent of like that speed and kind of feel of the app is less important from, because you're building an app that, you know, accomplishes a task, right. Um, and maybe more of the user facing, uh, end user kind of apps in the store. And that's where I kind of, you know, signed Pool Math to. It's like, I care a little bit more than just the functionality of it, because that's part of the, you know, the sale of it, I guess, right? Allan Ritchie (30:50.161) Right. Well, and there's a difference in size of screens, right? Like the app I'm talking about is probably about 50 screens. There's apps I've seen with like 150 screens. So, yeah, it's a big one for sure. Jon (30:54.473) Mm-hmm. Jon (31:00.202) Yeah, that'd be a lot of work to do twice. Jon (31:07.726) All right. So, um, anything else that, that you're, we're missing that's kind of new and interesting with Maui, I guess the one thing that we didn't really, I had thought maybe for those that might be coming over from Xamarin or what the history lesson to an extent, you know, maybe we would talk a little bit about some of the different parts of Maui. And one of the big parts is the idea that we have this concept of handlers and you know, the, the idea of separating out kind of the core of Maui. and how we reuse the mapping, if you want to call it that, to like the native controls on each platform. So for one, I'm curious how much you've had to dive in or not to do anything with like handler customization. Did you in your Xamarin apps do a lot of custom render stuff? So we used to call them renders, right? And it was like, you could do that. And they're sort of abstracted away a little bit more than that in Maui, but the concept is similar. Allan Ritchie (31:56.754) Yep. Jon (32:03.742) So yeah, do you handle handlers? Allan Ritchie (32:08.561) I guess I can say I haven't had to do a ton. Usually I'm able to get by with a good portion of like styling and just general XAML stuff. I'm trying to think of a good case. For me, when I have been porting the customer renders, the biggest savings there is seeing both paths registered. Jon (32:15.288) Mm-hmm. Jon (32:32.831) Yeah. Allan Ritchie (32:33.393) with a single project, right? So that was something you couldn't really do successful in. You couldn't really have that multi-targeted library and then reference it for debugging in the Xamarin apps. It just didn't quite work. Was the two, mixing the two project styles that didn't really work. Jon (32:36.843) Yeah. Jon (32:50.016) Yeah. Allan Ritchie (32:52.505) And now all of a sudden that does work. So you can have that multi-targeted file. Okay, I made this change on the iOS side. There's the Android equivalent right there. Maybe I have to do something funky with catalyst. I don't work with windows. I said I wouldn't say anything controversial. But ideally it's right there too. So you can see all of the things that you're mixing and matching. Jon (33:07.901) hehe Allan Ritchie (33:15.345) And it's really easy to set up like custom labels without, you know, you had to register it in your shared code, then you had to register in the platform. And now it's all just right there in basically one file. So there's definitely some savings there in terms of time. But for me, it's been mostly porting and the porting has gone relatively smooth. There's just been no issues for me there. Jon (33:21.237) Mm-hmm. Jon (33:40.198) Have you found that you like, cause I know one of the things when I was porting pool math too, is I had a few cases anyway, where I had maybe like some custom render stuff that I was able to either drop or like just kind of handle without needing a renderer anymore. I don't know if that's been your experience or not. Allan Ritchie (33:59.709) There was definitely a ton of that because there's now drop shadows basically everywhere. Rounded corners everywhere. A lot of that stuff is just coming out of the box now so you can get rid of a lot of it. Like you just you guys have done a good job kind of covering those cases. And again, I don't do the pretty. I don't I don't really make things pretty. Somebody has to tell me how to make them pretty. So I don't tend to hit those problems that others might. But Jon (34:04.438) Yeah, some of that stuff, yeah. Mm-hmm. Allan Ritchie (34:28.953) With all the stuff coming out of the box, it does save me personally that time. And the handlers, like I said, it makes it's a lot, it's a lot easier to port those suckers now. Um, and you, cause you can see all the code without having to jump all over the place, less spaghetti. Maybe. Jon (34:37.73) Mm-hmm. Jon (34:45.63) Yeah, no, I agree. Cause I used to kind of have to do the whole dependency service kind of pattern for a lot of stuff too, right? And that's now when it's all in one project, it just like, it just makes it easier. It's, it's much more simple. Um, so that that's another one that feels like, I feel like I've been doing Maui stuff for like so long now that I almost forget some of the things that we didn't have in Xamarin, um, so that that's in that category. I'm like, oh yeah, we used to not be able to do that so cleanly. Um, Allan Ritchie (35:13.377) And remember there was always that startup time with Xamarin Forums because it would go and detect it had like the I'm gonna call it poor man's dependency injection, right? And it when did that assembly scanning for all those things and that was slow and now it's just you have to register it Explicitly and it's not slow because it's just registering against the same Di or di it's still di Mostly or is it static? Jon (35:22.442) Yeah. Oh, yeah. Yeah. Jon (35:36.246) Yeah. Well, yeah, I, yeah, I forgot. Yeah. I forgot completely about those like assembly level attributes that you would add and to set that all up too. Yeah. That, that took a while as well. Allan Ritchie (35:46.957) Yeah, that could be a big slowdown if you had a ton of renders and now it's just not. It's just a registration like anything else. So that's another big win with the porting. Jon (35:49.334) Yeah. Jon (35:55.894) Yeah. Yeah, lots of little things like that. And that's kind of been on the same path as other performance stuff too, right? Where we made the decision like, yeah, it might mean that porting stuff over is like you have to make a change because that won't work in Maui. Although I think we had a way you could enable that to still work. But by default, it was, no, we're not going to do that, because we don't want to obligate you into the slow path here, or let you easily take the slow path, because we want everyone to be successful. So. Allan Ritchie (36:31.273) Could have written source generators for that now. Now that I'm thinking about it, you could have done some cool stuff. Jon (36:34.334) We talked about doing that. Um, that was, you know, early source generator days too, where we kind of talked to some of those teams and. The recommendation was like, hold, slow down, hold on there. Uh, don't turn everything into, into a source generator because, you know, we're still kind of figuring out the best way to, to recommend writing them. And at that point too, originally source generators didn't have incremental build stuff, right? Allan Ritchie (37:02.597) Yep, they were slow. Jon (37:03.41) So that was the idea. They were not fast and that was a big thing. And so the one thing though that we did know we wanted and needed to make into a source generator was the XAML, not the XAML compilation yet, the code behind generation stuff, right? So when you add an X name to your control in your XAML file, that all generates some C-sharp code. And so that got all converted over to source generators and then, you know, improved upon to, to include support for incremental source generator builds. But that's all done that way. And one, we kind of had to, because for the C sharp pot reload stuff to start working, Roslyn has to be aware of changes and the changes we were generating the old way it wasn't aware of. And so that caused some problems or would have caused some problems. But the other thing has been just to improve how that all works behind the scenes. And I mean, I think it's noticeably or maybe not noticeably better. And that's kind of the point, right? Like it just works. Allan Ritchie (38:11.377) Well, that's the cool thing, right? Think about all the tooling now you gain in Maui because the whole tool chain is all kind of coming together as one. So now you get to take advantage of all these things like the source generators and stuff that we just inherit. Jon (38:15.154) Mm-hmm. Jon (38:29.61) Yeah. And that's really been like that underscores, underlines the theme of the move to.NET for Maui, right? Which has been trying and unifying more with everything else.NET. And there's more coming too. I can't really get into detail right now on it, but before long, you'll learn some more. So, you know, that continues to be the theme. And we saw that even with stuff like. Allan Ritchie (38:47.805) Don't worry, I'll be picking at you over the course of these chats to try and get it out of them. Jon (38:56.974) I don't know if you've profiled any apps yet, but that's been kind of a cool thing. That's gotten a little bit better over time. Well, one that it works at all now with like the, what is it? DS router and DS dotnet trace. And on those things you can, you can get, um, like trace files and speed scope logs that you can then start looking at and profiling your apps and we've learned a lot that way. I mean, I'm sure if you're listening to this, probably you're aware of some of like the blog posts and stuff from Jonathan Peppers on these subjects where he's dove just super deep into performance stuff. But that's kind of, again, like the theme of like, let's push everything more to be more unified with the rest of.NET and make things work better together. Allan Ritchie (39:42.237) I haven't had to do a ton of profiling thankfully. The only major issue, I think there was an app that you and I were working on and we just had a Mac catalyst where it would render all the 5,000 items I put out because it wasn't measuring and that was it. And it was clear as day as soon as I, as soon as we added that list, it was like, well, that's a little slow. And that's all it was. It was just a measurement issue. As soon as we set a height on it, that was it. Like if, if you're doing things smart. Jon (39:48.991) Mm-hmm. Jon (39:56.458) Yeah. Jon (40:02.23) Yeah. Allan Ritchie (40:11.229) you know, profiling is it. I'm not going to say it's unnecessary, but it's, it's something you can do down the road because you should normally see that issue almost right away. Jon (40:19.794) Right. Well, I mean, to be fair, that's also that's the first rule of optimization, right? Is don't. Exactly. Allan Ritchie (40:25.777) Yeah, you end up usually causing the problems that you were fighting in the first place. I keep seeing that too. It's like a daily thing. Why are you doing that? Jon (40:32.702) Yeah, it has been, it is definitely one of those things you want to dig into only when you're really looking to squeeze more out of something. Or like, you're looking for a problem that's maybe not really a problem, but you want to find it anyway. That's how I kind of look. Allan Ritchie (40:48.741) Yeah, yeah, it's an engineering thing. It's like one of our God-given flaws, I guess, a lot of the times. I think as I've gotten older, I stopped doing it. I'm like, yeah, it works. It's good. Most of the time, it's all something remote anyways. It's never rendering. Knock on wood. Jon (40:52.557) Hehehe Jon (41:01.035) It works. Yeah, hopefully. All right, well, I also want to add a section that I'm hoping we make a regular thing to the podcast. And that is currently named, this is a working title, maybe we keep it, maybe we think of a better name because it's gonna be hard to say, which is plugin package or product. And I just wanna make it some space to... have us highlight something that we've found that is interesting or cool. So like a NuGet package or plugin, some product that has helped with our workflow or development. And so this week I thought I would do the honors of picking one. And actually maybe you kind of picked it too because you sent me the information that I was asking for. So this week's plugin package or product is a library called compiled bindings. And you sent this to me. when I was mentioning to you that, hey, like I really wanna start thinking about what we could do to make XAML a better experience because there's some common stuff that I do in XAML all the time that I have, you should see my folder of custom type converters that I have for pool math. There's like a lot of them and they're not all very like difficult. Sometimes it's just, if you know this Boolean value, I want to be able to convert it to like a color or something. And, and there might be some of those now in like the community toolkit. It, you know, I have these things from years and years of code leftover, right? Allan Ritchie (42:35.681) John's a purist to be fair. He will write everything from scratch if he's given the chance. So unless you show him something He will he will write it from scratch. So that's why Had to show him this one Jon (42:46.238) And I, you know, to also be fair, I know sometimes I get, I just kind of do those changes to my view model, right? Like, you know, when you're writing the code and you're like, okay, I really need to be able to bind this and I could do a converter or I could just add another property to my view model that gives me the value I want, right? Which, you know, that's fine. I think I still do that in places probably. But I have a lot of cases where I had these type converters because I wanted to do something simple. Um, whereas, you know, in, in something like blazer, because you can write C sharp right in your razor code and you can do stuff like take this, this value from my view model, but then. You know, add like the temperature unit, uh, if it's Fahrenheit or Celsius, depending on some value in the user settings or something like that. Right. And these kinds of things just become kind of tedious with XAML. And so you had sent over this library and we'll put the link to it in the show notes to, um, which basically gives you like X bind support and a bunch of just really interesting niceties to introduce into your XAML so that you can do more. You can do things, you know, with more operators, you can do like null check kind of if this, then that else, you know, other thing. There's some casting and stuff. There's just other logical operators that you can introduce that you really can't do with the out of the box XAML. And I think the other interesting thing here is that, and I haven't done my due diligence just yet, but the library does say that it compiles these things. So we're not done using a bunch of reflection or anything like that, presumably, which is going to be increasingly important as we work more on making apps trimmable and stuff. So yeah, this is a cool library. I don't know, have you used this much yourself or you just know about it? Allan Ritchie (44:39.517) I have this, this was a fun one because I found this one separate. I was looking for it. There's several of these that exist. And this one I found because I found the wrong library for you. There was another one I had used that was very similar and I was like, Oh, this one, this one works too. Here, try this one out. So I kind of used John as my guinea pig there because I hadn't tried this particular one that he's talking about. But same concept, right? It's, it's X bind. Jon (44:46.004) Mm-hmm. Jon (44:56.587) Yeah. Jon (45:05.462) Mm-hmm. Allan Ritchie (45:05.997) it kind of saves you doing, you know, if you do a lot of triggers and stuff, I tend to do triggers which are extremely verbose. I, if I, if, you know, I have the carpal tunnel to prove it from that. If you do a lot of heavy XAML and triggers and stuff, cause I, I don't like to do the type converters, but, um, this thing, it looks awesome. Jon (45:12.919) Yeah. Jon (45:16.578) Mm-hmm. Jon (45:25.558) Yeah. And it's, it's something that, you know, I kind of took back to the team too. And said like, let's like, look at this, like, this is cool. Let's maybe spend some time playing with it and see, you know, if there's anything that, um, makes sense to, to think about incorporating into the core product too. Right. The more that I think, you know, XAML is, is not, you know, it's not going anywhere anytime soon. Um, I would love for us to introduce some new concepts that. you could either use with or beside XAML. I'm particularly interested in more of the C sharp kind of coding and markup to declare your UIs. But XAML is here for a while and it works. I have a huge app, I have a lot of XAML. It still works well, no reason to throw it out. But if we can kind of improve how to use it, I think that will be an interesting place to be for a while too. Mm-hmm. Allan Ritchie (46:17.361) certainly cutting down on the verbosity with stuff like Xbind and like this package. It's a big one. You don't realize how much extra typing you do for some of this stuff. Jon (46:26.762) It's what's like the grid, row and column definitions, right? Like remember, like I don't think forms ever got the shorthand, right? Like I am, it's only in Maui, I think we introduced the, and maybe I'm wrong, but you used to have to like do inside, you know, the grid, grid.row definitions, and then you would do row definition as another tag. And for each row, you had a separate tag, right? Maybe it did, maybe it did. Allan Ritchie (46:30.612) Oh yeah. Allan Ritchie (46:39.546) I don't remember. You can- Allan Ritchie (46:50.233) I'm pretty sure it made XF5 because I've been doing it in an old classic project recently and it's working. So yeah, quote me on that one. Yes. Jon (46:56.902) Okay, which is good. But stuff like that, right? Yeah, it's like something so simple if you can make it easier. It's much more pleasant. So that's the pick this episode. I think that about does it for today. Just throw it out there. If you are subscribed still, like I said, at the top of the show from forever ago, thanks for keeping it around and hopefully you keep the subscription and check out the new episodes. Allan Ritchie (47:04.966) Right. Jon (47:24.838) If you are new to the episode, you know, we'd appreciate subscription. Uh, even more appreciative if you're willing to drop us a review on one of the podcasts, uh, you know, Apple podcasts or something that would be fantastic if you like the show. And if you want to reach out to us, if you have an idea for a topic for the show, or maybe you have an idea for the plugin package or product that we think we should check out, um, hit our website, go to gonmobile.io. There's a contact page there and you can leave us a voice message on SpeakPipe if you want. You can send an email, reach out to us on Twitter or X or whatever it's called these days or Mastodon. I think, I don't know if you're on all the other ones, but we'll get your handles on all of the different threads and Mastodons and social platforms that you might want to be reachable at. But check us out. Yeah, exactly. Exactly. Allan Ritchie (48:13.833) They're called toots. Jon (48:17.91) Check us out there and let us know what you think or if you have any suggestions. So I think that just about does it. Any others? You good Alan? Cool. Thanks everyone for watching, listening. See you soon. Allan Ritchie (48:28.462) I'm good. Thanks, everybody.