mergeconflict307 === [00:00:00] James: Frank Krueger. You finally done it. You beat me to migrating. Is that true? [00:00:15] Frank: Migrating, migrating worse than migrating James. I'm doing a bit of a rewrite, not rewrite. Yeah. I don't even know what to call us. Migrate rewrite. I think we're all going to be doing this decision. [00:00:29] James: Ooh, it's uh, you know what? The trending is modernization. [00:00:34] Frank: that's really what it is. It's more like I'm embracing technical debt by catching up with the current UI framework so that I can survive the next 10 years. So fully off of it and not have to do this ever again. That's what I keep telling myself, as I struggled to remember. Hmm. [00:00:52] James: Yeah, it sounds good. I mean, I've been, you know, talking about, you know, Xamarin and Don and Maui for a decade, and you've been building apps professionally for over a decade. And now a time has come where for the first time, at least that I know you can correct me. If I'm wrong, you are taking an app that exists. This app exists and you are completely changing. The entire UI stack that it is built upon is that. [00:01:21] Frank: Uh, that is correct James and welcome to my world for the next couple of weeks. Now, fortunately, we've been talking about this on the podcast for ever, as he said, at least the last 10 years. So I have been planning it all in my head. I think I have a good plan for doing everything I've even been making small inroads, you know, like changing the code over time to make all this a bit easier. But eventually you have to stop preparing and start doing. And the dotnet six release candidates are out even better. Dotnet 6.0 dot 300 is officially on the website, which means it's really kind of out. And I decided enough hemming and hawing. It's time. I actually start porting my apps. Now I did it. Wasn't just that I actually had a, uh, an email from a customer. And yeah, and they're like, Hey, um, this is going to sound a little bit bad, but they wanted to buy some copies of ice circuit, but they didn't want to go through the windows store. They just couldn't do it with their purchasing department. And they're like, Hey, could you just send us some licensed copies and Mike, Hey, I totally can't. [00:02:31] James: Yeah, just send me an ECC. Just, just bundle up. Right. Click zip. Send that to me in the mail. Put that key, put that on a floppy disc for me, just slap that. Yeah. [00:02:41] Frank: Yeah. So I'm like, ah, darn you know, and not the friend out there, like people have been asking for a proper update to the windows version for a long time, but this was finally the straw that broke the camel's back. And I'm like, you know what, buddy, in two weeks, I'm going to send you an ECC. Like I just kind of put like a hard time in my head. It's a bit of a fast schedule, but like I said, I've been thinking about this for a while and this is technically. Sixth platform. I'm porting ice circuit too. If, if you're new to the show, what I'm talking about is I have an app. I circuit, I originally wrote it for iOS to Android, ported it to windows, ported it everywhere. Um, but oddly enough, I never used. Xamarin forms. And so this is a bit of a change, um, in terms of UI frameworks, but I'm doing it because, uh, I really want to get windows and Android updates out there and I haven't been doing it. And so I don't think I'm going to be replacing the iOS and Mac version. Just yet, but, um, this, this is for, uh, the windows and the Androids at least to start with. And I hope to pull more things in. So it's been a long journey, James. [00:03:57] James: Yeah. Let's, let's clarify this. So the, so .NET at six has been out for a while and it didn't technically include, but kind of somehow in a way included both the. The next version of Xamarin, iOS and Android, which is IO, iOS, and Android for.net running on Dawn at six, it was just like, it's a thing it's just iOS and Android for.net. And then. There is .NET Maui, right? Which is the next version of the, and an evolution of Xamarin forms and Xamarin forms is not going technically to .NET at sanctuary because Don and Maui is the next evolution of it. So there's two pieces of the puzzle coming together. And the third piece, which is mat catalyst, which we've talked about before. So you have to kind of right now as of five 17, although build is happening tomorrow, I guess when this podcast comes out. So. You know, things are happening there. Um, and you won't have to install a release candidate. It'll just be out. Um, but you know, in general, right? Like there's ways of getting this and trying it. I've been talking about it, doing videos on it as well. And it's really easy. I mean, you know, it just, you, you install some workloads. It's my new favorite process and it's all workload. You get a new version and boom, you're good to go. And, uh, yeah, so, so basically there's been, there's been previews, there's been our CS. And technically when this thing is. Tomorrow then, you know, you're gonna, you just, you just get it. And like officially for .NET six, you got iOS and Android, Mac catalyst and Mac and .NET Maui, boom you're building applications. So let me ask you a question here is for most, you know, existing Xamarin developers, whether it be iOS or Android, Xamarin forms, they have options, right? The option one, if you're doing iOS or Android or Mac. You could just upgrade your CS proj to Don at six and be done with it. Right. That should take what, like a day, an hour, 30 minutes. Have you done that yet? [00:05:59] Frank: Yes. So I have done that. Um, I did that with continuous, my IDE, and that was a little more painful. We discussed it because I had a million dependencies. So working out those dependencies was a nightmare. And I think we're all hitting that right now. Um, you know, I I'm to blame also, we all have to be updating our open source libraries and I've been a little bit slow to do that. I think like everyone else we've been waiting for the release candidate and the proper release, and that's why we haven't done it. Um, but, uh, yeah, I've been playing with dotnet so. Native. I don't know what to call it. Plastic. It's just [00:06:39] James: Iowa. I've been playing with iOS and Android for Don Essex. Yeah, that sounds [00:06:45] Frank: right. Yeah. And I did dive into Maui very short term in one of the early previews we were reporting, uh, we over to Maui. But things were a little bit early and the API was really influx, so I kind of gave up, but I hadn't written any like apps and, you know, I didn't have a feel for like, what does an app feel like in Maui? And I'd actually. Somewhat resisting that because you know, like my big fear was I would start a template and then all the template parameters would change, not have the wrong project settings forever. You know, I just, I wanted to start clean, clean James, you know, maybe even like a fresh machine, a fresh install, windows, fresh installed visual studio, [00:07:30] James: something like that. Ah, that sounds pretty fancy. Yeah. You're, you're coming in excited, invigorated so much that you want to really start from. [00:07:41] Frank: I guess. So I got, so, uh, here, here's the thing I've been running, dotnet six on my Mac for a long time. Um, but the whole big point of me doing this was I wanted a new version of, well, I need to, I need to update my windows apps. Let's just be clear, Coca and I [00:07:58] James: circuit. And there's only one place you can do that, which is on windows [00:08:03] Frank: windows. Yeah, exactly. So, uh, here I am and my virtual mission. Aren't working. I live off of virtual machines, James, but family or fusion doesn't work anymore with big Sur Catalina, one of them, whatever they want me to pay to upgrade and all that stuff. But I happen to have a computer lab or outside it, fresh, clean install of windows. Tan. I just, I decided, um, I had to look up what the minimum, um, requirements were for the, when you, I, that Maui uses on windows. And it's windows 10. And so I wanted to make sure I was testing my apps on a version somewhere around the minimum version. I don't need this dev machine to be the latest and greatest. That's fine. I'll have I have my surface go? I can keep that at the latest and greatest. I'm going to keep this as a conservative machine. And also I wanted to switch over to windows mostly because, uh, I've, I've done file new project. Uh, a couple of times with a Maui app, but I've never actually run a windows one that, you know, I just haven't done it. I know you have right. You, you do it in like every demo, but I hadn't. [00:09:14] James: Yeah. And you know, the nice thing about running the windows that very similar to running a Mac application when you're on a Mac, is that there's no emulator, there's no simulator. Like you're just going to run in the app. [00:09:24] Frank: Yeah, and I always forget how good visual studio is. They have those little like performance tools, always running on the side. That's pretty nice. Pretty nice. Well, it took me a while to get this puppy installed. It turns out it's like a 20 gig install, visual studio. When you asked for dotnet and all the platforms, you know, I want it, I want it. Everything. iOS, Mac, Android, everything. But got all of that installed. And fortunately there, I was really nervous about the versions to be honest, but this is why I waited, um, the preview version I got. Okay. Installed.net 6.0 dot 300 for me, the exact version I wanted, uh, and installed the workloads correctly. And it had templates that's that was the thing I wanted the most was gimme some good templates here at people because I have no idea what I'm doing here. I want, I want all the right project settings. [00:10:21] James: Yeah. Like that, that's a, that's a nice feeling. And also, you know, that visual studio will automatically keep your. You know, versions of.net, pretty much instinct. So like if you went from a, a good example is if you went from, let's say a, you know, a preview two to a preview three would on and saw preview two and get preview because you're installing it with visual studio and visual studio is aware of what visual studio installed. It's quite cool. [00:10:49] Frank: Yeah. And I learned something else. Even funny too. I opened my Coca project and it's like, we don't support.net framework 4.5 anymore, buddy [00:10:59] James: timed update to update that pop. [00:11:01] Frank: I did update it 4.5 0.1 ha. Take that Microsoft. [00:11:06] James: You know what I mean? You go with a 4.8 dot whatever to get the security [00:11:09] Frank: fixes chains. I literally don't know. What's. And the.net world. What do people have, do they have gotten that a 4.8? [00:11:19] James: Okay. So let me explain this to you for people that don't know, there are specifically three versions of.net. Okay. On that framework, this ships with windows. Correct in the box. It ships on there. This is, this is the one that's been around forever. There were specific has been around for 20. It's been around for 20 years. Can you believe it? Plus you can believe it because you can go to god.net, dod.net. It says done it 20 years, 20 years. Plus of Don and development is done at framer. So it's gone through all of it and there's all those versions and iterative versions between them, the ships in the box and its security patch. And it will be supported as long as windows ships with .NET framework, which is like, again, it'll just be free, basically. So much stuff runs on Dunham. Now what happened here is that version .NET framework that is like closed source. Right. I guess it's source open source. Browsable it's not open source, but it's done it framework is there. Right. And that is only for windows. So then the .NET teams, like, you know, it would be cool. What if you could run.net everywhere sorta like, you know, Like all sounds happening in the mano world over here, let's do all of it together. And in fact let's be awesome and acquires Amarin and then the ma it's all going to be one happy family, .NET, .NET everywhere. So the .NET team is all like, Hey, let's make this thing free cross-platform and open source and can run on multiple platforms like Mac and windows. Let's put this puppy on other platforms too. So to get that. So it was a break past the windows part, .NET core came across and it came along right. And .NET core was all like, Hey, we're going to run the .NET stuff. Like windows apps, like asp.net core, like, you know, command line applications. We're going to run that on this new runtime called .NET core, which is opensource free cross-platform and runs on Mac, Linux and windows. Whoa. That's all. And then what kind of happened is after the Xamarin acquisition and after like enhancements with other frameworks and different things, like you had .NET core, and then you had done a framework and there's still some confusion. So the team's like, let's take it one step further. And like, what if it was just. Dot net. Right. And everything just ran on.net, which is everything. So Xamarin run, you know, all your mobile apps run on your desktop apps, run on, you know, everything is runs on.net and that's done at six, well done at five, done in five was the unification right. Kind of. And then Don had six is like the current one that brings in the iOS and Android workloads and all that other stuff. So that is the evolution. And now the cool part now, like. .NET core. And now really with .NET five.net itself releases on a yearly cadence, you don't have to upgrade to the latest and greatest, but there's a current release and an LTS release. So like .NET at six was long-term support. That's supported with patches for three years. A current release is 18 months. So you get a lot of time to upgrade and it's, you know, the idea is that it's easier to modernize as you're going through. Did I nail that? How did I. [00:14:33] Frank: Woo made it to the end. I wasn't sure if you're going to go through every detail in the history there. [00:14:38] James: I imagine, I imagine you're a new developer, right? You're brand new. You don't know anything, ignore all that or all that. It's just on net, [00:14:47] Frank: that's it? Yeah. Yeah. I plan on throwing all that. Out. Uh, my plan is, you know what I love about that net six, they have this amazing packaging option. I forget which one you want, but if you give it enough options, eventually it'll spit out a single executable that has your app and all the dependencies baked into it. And that's how I plan on distributing the app. So then it doesn't matter what the person has on their machine. My app has everything. It needs to be. On that machine. Yes. [00:15:19] James: There, there is specifically like, uh, the runtime and then the SDK and we installed developers STK, which has both, which enables us to do what you just said, which is trimmed down the application and optimize it with that built in super fast, lovely run. There were just very small. It's very impressive. Yeah. [00:15:37] Frank: Yeah. It's, it's just fine. Especially in this modern era, era of giant PNG files and everything. Yeah. Um, Do ha my biggest concern was okay. Yes. Dot net runs everywhere, but I am presenting a user interface and it user interface requires talking to an operating system that required certain versions. So although my dotnet executable could run anywhere. Uh, it's still talking to a windowing system. And for that, I needed to find out what the minimum version of windows was. And for that it's like a July release in 2021. So if people have updated to that version of windows 10, you're good to go. And as far as I know, people with windows tend, tend to stay updated because the stupid thing nags you so much. Gosh, I've had it installed for one day and it's already nagged me a bunch. So I'm hoping most windows, 10 people stay. Up to date, but it at least puts you to July 20, 21 ish. [00:16:33] James: Yeah. That's pretty. Yeah. Yep. [00:16:36] Frank: So that is my new watermark for windows. If you want to use a Frank app, you need to run windows 10, July, 2021 ish. So I did it. Um, I first, first I did a bunch of file new projects with Maui, just to get a feel for that. I wanted to know what was in it and what I could break and what I couldn't break. Um, but all those ran pretty well. I cannot believe the click the button and see the counter go up. It's still the default project that you did you write it? [00:17:09] James: No, I did. You know the file new project? Well, well actually, you know, the file new project, I think was always a little complicated before I, so you're talking about the dine-in Mallory one. It has a little button clicker accounts up. No about it. The little robot now, to be honest with you, I worked really close on this. I wrote many a docs, collaborate a lot of docs. I did not, I did not write the template. Okay. I may have contributed to the template. Uh, but that being said, I, there was two things that I was really. Passionate about one. I was passionate about following in the footsteps of blazer. Okay. And I actually wanted, originally is I wanted the application to be just like blazer with tabs and I wanted it to have like a weather and all this other stuff. I was like, let's make them the same. So you, when you create a blazer app, it looks the same. When you do a place or a hybrid app, it looks the same when you do it done at Maori abs it's the same content, same code, you know, things like that. I, and there's two camps. There's the, I wanna, I want there's I dunno, there's three camps. There's like, I want a blank application that it doesn't even create a window for me. It, it just it's empty. Right. Does, I mean, that's so complicated then it just makes it complicated. Get started. But then there's the other camp, which is like, give me a full application that I can just like customize and poke around. And then there's the middle, which is like this, it's almost like demo where, right. And I kind of fall in that camp because I think the blades are demo and the blazer team did a great job of being able to do a template that you can easily delete everything out of. So you can make it blank if you want to within like a few seconds, a few minutes, but it also is very demo ready, which means that you can understand the core selling points of laser. So for example, every Blaser demo file, new hello, world introduction, ablaze. Is amazing. It'll it'll show you like here's the different pages. Okay. What we're going to do is we're going to increase the click counter. We're going to like change the code. We're going to hot reload it. We're going to add this component over the first page. I hit save. It just shows up or you get like your, your, like your understanding, the composability with the dynamic Maui template. What the team did is it's, it's minimal. But still has some demo ability in it without having to do all like this MVVM and data binding stuff. So it's, it's a, let some labels, it's a button and then it is a, an image because it wants to show you that the cool part about the image is that that image is an SVG. That is a pairing. So I think that's a big selling feature of dynamo. Long-term you know, developers that have used, you know, iOS or Android or Xamarin forms for awhile, but you can meet and say, oh, there's an SVG. And now it's showing up a map. I can use us. Fiji's check check. The second part is. From a new user's perspective, you get to see interaction really quick and you get to see things update and interact with it. And you, additionally can hot reload things. So you can obviously increase the font of the label. Wow. It gets bigger. You can increase. For example, the count instead of doing a count plus, plus you do count plus equals 10. That's a demo. So she C sharp, hot reload. Right? And then the other part that I really appreciate about the team is two things on this template. I'm going to go deep on sound because I think it's templates important. It's important for people that it's there. Like I pushed hard on shell being the default. I'm a firm believer. Yeah, this is the way for so many reasons. I've done a whole video on it on a YouTube. I think it's the way so that I got in the pull request, I did the port request to make shell the thing. Right. Which was amazing because then the team really optimize it. Fine, tuned it for everything. Uh, and there's so much advantages to it just it's so good, but. [00:21:04] Frank: I've got the [00:21:06] James: final thing. Final thing. Okay. Then what the team did on top of that is they added a default style in a styles folder and there's resources, styles, and they feed the entire application to be responsive, to light and dark mode, which I think is really, really nice. Just having it work out of the box and you can delete it all. Or you can change a few colors and your application kind of comes to life and boom, that is the template. [00:21:34] Frank: Whew. Okay. We'll see if I can remember what I wanted to interject there. Um, yeah, it was an okay template. Jeez. I think, um, it, it was good for me. I would say, James, I appreciate that perspective because I'm still going to state what I was going to state before you said all of that. I do wish it had a tiny bit more structure to it. Maybe more the blazer one simply because your brave and bold decision to start with shell leaves. People like me. Who I've never seen shell before. Have no clue what shell is really in the dark. I have absolutely no clue how to use shell, how to structure an app with it. So shell was actually the absolute first thing I deleted, but that's purely due to my ignorance. I don't know that one. And I don't know how it works. I don't know how to do iPhone versus desktop with a, um, so a little bit of that's on me, but I think. That could be improved in the app by having an app with structure. So the problem is you have shell, but it's a single page app. You don't need to gel for a single page app. So, [00:22:49] James: well, actually I think you do because there's many applications of single page apps with like dashboards and then you still want the URI based navigation. You still want the dependency injection. It's all, there's a whole bunch of amazing things that come with. [00:23:03] Frank: That that comes on. Pages, pages. Get all that stuff too. [00:23:06] James: Uh, no, it doesn't get your eye based navigation nor does it get the automatic shell will, when you navigate by URL will automatically resolve your page and all of its dependencies auto magically through that URL. Yeah. And okay. I agree with you though. Huh? But the thing is, I think that it's, even if you're doing that should show that. Well, I mean, when that's the other debate, right? How much do you put in or do you put a whole, I get you, I get you. But [00:23:35] Frank: as someone I always prefer the blank template for sure. But when I'm starting with a product, I need the default template to have a little more to it. You're right. Dependency injection in there. I, I, even though I believe the blazer one has a dependency injection of the weather service, it does. Yeah. Yeah. So I think you could get away with that. A very simple one. Um, and a simple tab structure, just to show, show some navigation, because like I said, I don't know shell at that file made absolutely no sense to me. So I deleted it and put my own main page [00:24:11] James: w which is in there, which you can do now. Here's the funny part is that you could. Also have left it all in there and then use like the normal navigation, the normal, all the other stuff, things like that. [00:24:23] Frank: I left it for reading up blog posts slash watching your videos on YouTube. Once, once I've learned more about shell, then I can make a more informed decision. But for the moment I just don't care and that's [00:24:37] James: okay. Cause you can always add it back later. It's not a big deal. Um, yeah, it's also totally fine. Now. Here's here's what I've said about it. I think to me what's important is I think it's good perspective, right? Which is like understanding what these files are and what they're for is super important. And it definitely strikes a balance. I believe that the other important part is how the thing is taught, right? Like how you read documentation, how you read and see videos, how you walk through tutorials and ideally all of those are coming together to. Teach you how to build a Don Maui app using shell and showing you the advantages of it. Right. Um, when you're exploring, it's going to be a little bit more complicated, like, what is this thing? Right. And I'll tell you this much in the Xamarin forms, um, shell templates that they had, it was almost too much. It was like a whole to-do list application with this and that. There was, there was a bunch of uncommon code that says like, you could do this or you could do this. So it's, it's a hard balance. I do like the blazer approach though, to be honest with you, [00:25:42] Frank: it was a smart approach because they had essentially two blank pages. The homepage says nothing. The about page says nothing. And then there's a middle page that does data. Yeah, that's perfect. Yeah. It's essentially a two thirds plane. Yeah, it's great for fitting into. Yeah. Anyway, let's move on. It's a wonderful template, James. Thank you for shell. Hey, but the most important thing was that when I hit the play button, it all worked okay. The button counter counted. So, um, you know, that was fun, but I wanted to prove that I could. So I went through all this effort. I installed a clean version of windows, clean version of visual studio, got the template in. So I did a file new project and I imported it into my code base and I checked it in as you know, starting point. Yay. We all love starting points. And then I wasn't really sure where to progress from there. And so I decided to just break my UI down into. Six constituent parts. And I do like the architecture of a Maori slash Xamarin forms that you can really work on things individually, uh, work on them as single pages. So fun trick I like to do is break the app down into sections or whatever pages. And then I just run the. That as my main page. And then you're not like messing around with the rest of your app when you're really trying to focus on one area, obviously like hot reload and things like that help, but you're, you're still going to be doing the compiling cycle and everything. Plus it's an opportunity for me to build some confidence. So I decided to take the. Easiest part of my app, it's the, um, library browsers. So it's a circuit app and you need to be able to choose circuit elements and it's like resistors and capacitors and voltage sources. And I need a big list of those. And I figured that's a great place to start a list. Don't we love list views, James, [00:27:44] James: I'm a big fan of list views. I have a lot of great things built in. Yeah. There, you know, I think that most, uh, you know, there's two types of applications that you're going to build. You're going to build an app that has a big number in the middle of the screen. You know, 50% of the apps are, or. You are going to build an app that has a list of things in it. That's probably the two of all apps that you could build. Those are the two options. [00:28:07] Frank: Yeah. Yeah. And, um, you know, I just have to correct myself. I'm not actually using a list, view everyone I'm using collection view because I'm all modern like that now. And I was, oh, can I go on my own little rant now? Um, I was really happy to see a change in the Maui collection view versus the Xamarin forms collection. This is going to take a moment to explain, and I'm going to try to say it nicely. The Xamarin forms collection view is buggy as all. It's, it has one big flaw in it, in that it pretends to be thread safe. And for that people, reason people tend to treat it as if it's thread safe and in order to pretend to be thread safe, it has a lot of terrible hacks in it that are, have lots of race conditions and it, and it's been a source of frustration for me for a long time. It's a whole reason. I haven't liked the collection view from Xamarin forms. That said James, I was reading the documentations on the Maui collection view and they had, I think the most important bullet point I've ever seen. And it says collection views now require their observable collections to issue their changes on the UI. Val one simple change. That one simple requirement means that they can simplify all their code, remove all that buggy race condition stuff. Don't even try to update on a background thread. It's hard. I've been doing it for years, literally years, and I still make mistakes with it, with my own code base, with my own simple data sets. Okay. So I am so happy that they have just come down hard and said, you know what? Nevermind, that, that multithreading thing was a terrible idea. Run your collection view on the UI thread. And I can report it does run so much more. I wouldn't say reliably, I'm not like stress testing it or anything. I was just so happy to see that change. [00:30:02] James: Yeah. That's, that's a really fascinating one because it, there needs to be some consistency in that. And specifically, when you think about. You know, you're updating the UI, which means you need to update the, on the UI, threaten it. And that's the same with properties, right? Like if you have a, a string bound to a, you know, a label of bound to a string and you want to update that label, you need to update that thing on the UI thread. And this is forever. I like WPF worked and all the other ones, right? You there's a dispatcher where you could schedule a dispatcher. In fact, there's a dispatcher built in is there's like a main. You know, call that you can do, which is like, Hey, make sure you run this code on the main thread. So there's helpers. Right. Which is nice. But yeah, it can, that, that, that makes a lot of sense. I remember we talked about that in like a lightning talk episode or something like that. So I'm, well, I'm glad they fixed it for you. [00:30:53] Frank: Oh, yeah, it just, it restored faith. You know, you don't want to use something that you, you, you're not trusting or anything like that. So now I'm hundred percent into collection view. It's my new favorite control. Uh, except I realized, oh yeah, I don't really remember how to use. James, not very good at it. As I worked at the team that invented it and I still stink at it. Um, but it took me a while. I got there. I did remember the classic lesson. Um, I think we've talked about it before you, you, you don't want a vertical stack layout. You don't want a horizontal stack layout. You want. Hmm. You know what you need grid and collection view. It's all you need. And collection view and life is good. Those stack things are very confusing and I don't recommend them grids and collections views everyone. I was having the hardest layout time until I just switched over to grid. And then it was a joy to use. Again, [00:31:50] James: I, you know, I have this video coming out probably tomorrow, whatever it is on my YouTube, which is this four hour, you know, getting started with, without ML. It's like a full course, basically from start to finish where I do the workshop and talk about it. And in that video, I literally say, if you can just understand the, a grid, which, which hopefully you can understand some rows and columns you're going to be successful because, and the syntax to assize things in this, in the rows, there's the star star syntax and things like. But your application and you can go so far just with grids, the grids and scroll views and collection views. I mean, that's all I use in the. One. I mean, I do, I do use some stack, you know, layouts here and there, but, but mostly they're inside of a grid pretty much. You know what I mean? [00:32:42] Frank: So if you're lining up like two things or three things, StackLayout sure, but the moment you're going beyond that, or the moment you need to control, like the ratio of the sizing, the grid, the best part of the grid is. Is that funny syntax? You said you can either stay a size or you can say auto in which it tries to measure it. Or you can say a star, which is just take up all the room. You can, I'm sure. It's, I'm sure it's more detailed than that, but that's my cursory understanding of XAML and that's good enough to build basically any UI that I want. Um, I do love my auto layout from iOS, but, uh, Great grids are great. Um, I'm, I'm happy to be in grid land. [00:33:25] James: Yeah. There's a bunch of other labs too. Like I wish I understood flex layout more and I wish I understood. I mean, I used to use apps, not absolutely. Yeah. Relatively relatively outs in Android. Cause they were like the most performant and that's what Android people would tell you to use. And then I was like, this is too complicated. I'm just going to use. You know, linear layout or whatever, so, [00:33:45] Frank: yeah. Yeah. Uh, so I was happy. I think I've finally settled at least for now on a layout style that I'm going to be using everywhere grids. Basically. I had another big question of what to do. So in my circuit library, I like to have a little icon of the element, a little preview, and I wasn't sure how to draw it. Hmm. Um, if anything, I had too many choices I've, uh, in the years of writing this app, I use my own little library called cross graphics, which has an interface to drawing routines. And it relies on another drawing systems on apple. It would rely on core graphics on Android. It relies on Android graphics, uh, windows. I have like 12 different because there's so many different ways to do graphics on windows. But fortunately, um, a couple of years ago now, gosh, I don't know all the time I created a skier version of it. And I actually used that even on iOS, I run the ski version, uh, because the rendering is just way more efficient. And so I'm like, you know what? I bet you, I bet you ski or works on this Maui. I bet you those two are compatible. So I added the skier. Oh gosh. Skier dot views dot Maui dot controls. I believe was the new, new Shea that I needed to get there. Installed that puppy. And it didn't work, James. Oh, no. I did forget the one rule of doing crazy cross-platform stuff always include the crazy cross-platform nougat directly app. Yes. I struggled for an hour because like the control would show up. I could change its background color, but the stupid thing just wouldn't render and I'm just screaming, like no compile errors, no errors anywhere. And I was really confused. Uh, it's just one of those things. So. I, I took a dependency directly on that controls library. I mentioned if you do that, make sure you also directly include ski a sharp once I did that, everything started rendering again. So just ha fund.net dependencies kind of stuff. [00:36:11] James: Did you, I'm curious if you looked into the. The M the Microsoft and Maui graphics library, because there is a graphics across platform graphics, canvas for 2d drawing, just built in with no dependencies, which would use the underlying platform and not skated. You look into. [00:36:31] Frank: Uh, I have not yet, but more from a practicality standpoint, I haven't written an interface to that one. Ah, like I'm not going to rewrite all the drawing routines for my elements, you know, that's not happening. Yeah. So what I write is a wrapper around the other one and I haven't written a wrapper for that one. So I will definitely look into it, but I'll say this much, uh, ski, uh, when it's running on the GPS. So it's open GL windows is a very fast 2d render, high quality, fast 2d renderer. And that is what I love in the world. So, uh, I can't say anything about the library you just mentioned, but let's just say skier has proven itself to me in the past. And so I'm happy to keep using it for now. [00:37:17] James: Yeah. The one nice thing is that it's not even a library. It's part of .NET Maui. Which is kind cool. So, so it is fascinating because there is a lot of choice, which I think is, which is really interesting. I think what was cool about your example though? Even though there is something new, you're like, I have the ski of sharp thing and I'm just going to use it and then yeah, it is. So that's kind of, yeah, that's a nice, nice feeling. [00:37:40] Frank: Well, it was scarier than that because, um, okay. So I got, I got the layout working on windows and I was like, okay, that's good. I wanted to prove to myself that I could still work on this app on my Mac. So I switched over to the Mac and then I was like, wait a minute. If I'm on the Mac, that means I should be able to run the Mac catalyst version of this. Loaded it up. I had to get the newest preview of the newest visual studio for Mac. And I wasn't sure if they were all compatible with each other, but I got all my versions, you know, all my ducks in order loaded up the project, hit the play button and James, the freakin Mac catalyst app came up with the layout and everything, and even more shocking, it was in darkness. Because I run my Mac and dark mode and I'd never, I hadn't even seen my app in dark mode yet. And it was automatically thanks to whatever templates, stuff that I haven't read about yet that I haven't looked into yet. Uh, it adapted to the dark mode on my Mac. That was really satisfying to see. Um, but then there was the bigger concern I had. Mac catalyst is a pretty new platform. I mean, it's just iOS UI kit, but it's technically a new platform and I wasn't sure how skier would run on it. And. That's when I was having that trouble with the nougat and it wasn't rendering. And I was like, oh no, it's a Mac catalyst thing. It's a blah, blah, blah thing. I was trying to I'm like, I started, oh no, I got to write a minimal RevPro now. And then I was getting into that. And Mike, you know, just, just for the fun of it, I'm going to include that nugget. And then it all lit up. It all just started working and it was absolutely glorious to see. I am very excited that. Finally that promise of file new project on windows. Just open it on a Mac, hit the play button and it pops right up, not on a device right on the desktop. Uh, that made me so happy. That's [00:39:37] James: awesome. I love that Cod. Yeah, that's a, that's a good feeling. I'm cool that all the T C all the template stuff just lit [00:39:44] Frank: up. I do have to say, you're, you're talking about minimal templates, but they decided to put a custom font and the template is that I think they're mostly, probably just trying to show off that you can put custom fonts. I just find it a little bit funny. I'm like, yeah, you didn't want to put tabs in, but you give me custom funds. Yeah. I was a little shocked when my app loaded up on Mac and I'm like, that's not the Mac font. I'm like, what's going on here. Ah, styles. Gotcha. [00:40:14] James: Yeah. I, you know, I think that's the other thing, like the SVG, right? They need to put in an SVG. No, but like, does it show that you can do SVGs now? Yes. Yes. Anything with Fonz? You know, you can always do custom fonts, but they're always kind of a pain in the behind because he had to do tons of configuration and he'd just drop them in a fonts folder and you call it a. [00:40:33] Frank: Yeah. And I appreciate that. Um, in fact, I want to try to get my icon converted to, you know, whatever magic that they're doing in those build scripts now, because yeah. Um, I'm way over doing icons, the old fashioned way. I'm not sure if all mine will translate that well to SVG, but I sure as I'm sure as heck gonna try. [00:40:52] James: Yeah. I love [00:40:53] Frank: it. So that's it. This is my first, I was able to successfully build one UI screen from my app. Let's call it one out of five ish. Um, I think probably the easiest one, but it was, it was a learning journey for me to remember how to do XAML again. And it was a bit of a journey doing a fresh install of a visual studio, which. Excited and nervous about, and then it all came back and worked on the Mac. So I think this is, this is all good stuff. And I'm just going to finish this app. [00:41:34] James: Nice. Now, do you have any, are there any like libraries or you're waiting to upgrade or you kind of did this one because there's less dependencies besides the ski of sharp on, obviously [00:41:44] Frank: I was looking around at like think fusion libraries. Um, I have written in. There's property editors, inspectors sheets. So many times James I'm a little bit tired of it. And I was really, I was looking around the CFA and the platform vendors had, um, property editors, because I'm just not in the mood to write another one. Um, but so far there haven't been any Maui versions of them. I think I'll just end up writing yet another one again, but that was when I was definitely looking around. But I'm the little controls, you know, like. Uh, rich edit text boxes, things like that. I'm still looking around for options there. I circuit mostly just has a giant, um, it needs two dimensional vector graphics, rendering. That's the majority of the app, but there are widgets in places and some going to be shopping around. See what's available out there. [00:42:48] James: Yeah, I love it. I love it. Yeah. I'm, I'm uh, um, it's nice to see a lot of libraries sort of come online, uh, in general. And, uh, for me, I think almost all the libraries I'm using are updated and mine minor updated. I, I, I got my build scripts working, uh, as soon as this latest RC came up because 600, 300 was shipped out. All my build scripts started working again, magically cause .NET Maui can install and sure enough, I was like, I'm just going to push out packages and. Someone was asking me today. They're like, you know, Hey, like, you know, how come you don't like, are you talking about the in-app plugging stuff? It's update. It's the same API. Go for it. Just do it. So. [00:43:27] Frank: Yeah. Yeah. I am very hopeful. I don't see any major roadblocks, so I should be knocking on wood or something right now. Uh, I think I'm benefiting from this being probably the fifth or sixth platform. I've boarded this to, it's already pretty well factored code. I know how the path goes, but at the same time, uh, it's a new, it's a new, old platform and I'm gonna, I'm sure we're going to be talking about it a lot. And as I discover new weird things, Thanks. [00:43:55] James: So I'm excited. I'm excited [00:43:57] Frank: for you, Frank. I got a collection view with custom drawing in it. The world is mine. Now. I don't need anything else. I [00:44:05] James: love it. Well, I mean, like, as things progressed too, I'll be really interested to see. Cause you know, it's like, this is like day one day, zero day negative one of Don and Maui. Frank is all on board and I love it. I mean, you know, I do, I do think for you, I was really thinking about this heavily and I was thinking about your journey in life as it. You know, independent app developer and I have many apps and there are, there are quite a few that are on windows and Android stale, or you still support those, but you always have a Mac and an iOS version. And I was just like, it's gotta be tough to maintain all of those as those platforms evolve because none of those apps are, you know, built with cross-platform staff. [00:44:53] Frank: Yeah, uh, that is a huge chunk of this. Um, and I'm even hoping, you know, I'm probably going to keep the iOS and Mac apps separate just because they are, they're beautiful little native creations, but at the same time, I'm going to really look seriously into Maui embedding or something like that. So I can pull in features from it, into those apps because. Yeah. Um, I love supporting cross-platform, but time-wise, it's so much effort and I'm, I'm, I've, I've learned. What I used to say in the past was if you love your UI, you wouldn't do a cross-platform UI, but what I've really learned is do your UI cross-platform and then fine tune it for the other platforms. That's a much smarter way to go get the big stuff done in the cross-platform world and then fine tune it for the other ones. Okay, there you [00:45:49] James: go. Well, let us know how your journey to done at Maui is going. I'm excited. I'm going to be migrating all day, every day. It's kind of nice summer to do that migration. So we'll see how it goes into the fall. Um, and, uh, I think maybe next week we'll do a little build and Google IO recap, I think so far and tease it out there. Things are happening. Frank. It's a busy. [00:46:08] Frank: I am excited. Well, I don't need another beta summer yet, but I'll take a build. A build is good. [00:46:14] James: Um, builds is good. All right, everyone, we'll catch you later. Have a great build, uh, go to the Microsoft build website. There's gonna be all sorts of new Don and Don and Maui stuff there. So you definitely want to check it out. Uh, I know about law, the cons agents I've been done, and there's a whole bunch of sessions. Those are all good. So definitely check out that and the window sessions to head over there, but that's going to do it for this week's podcast until next time. I'm James Massey. [00:46:36] Frank: And I'm Frank Krueger. Thanks for listening. Peace.