MIX-10 === [00:00:00] James: Welcome back everyone to another Merge Conflict, your weekly developer podcast with me, James Montemagno and one of my best friends in the entire world. Frank Kruger. How's it going buddy? [00:00:11] Frank: Hey buddy. How are you doing? Uh, I'm excited to be here because tonight sounds like it's gonna be a little bit random, a little bit fun, a little bit casual on the show [00:00:19] James: tonight. I, if you're new to the podcast, normally I don't open with an introduction of what the show is and who we are. Usually, we usually just go into it and then in the end we say, here we are, which is a little. Backwards. We kind of tarantino it, uh, if you will. And I dunno if that's good or bad because I do listen to a lot of podcasts. And a lot of podcasts are like, I bet people haven't been listening for 367 episodes and they probably don't know what this podcast is. So this is a podcast where we talk about, Some .NET stuff, some mobiley stuff, some AI stuff, some developer stuff, and some other stuff, and a lot of performance stuff. And last week we talked about some .NET 80 things, 80. At eight e things and uh, specifically native a o t and I just gave a presentation at Vs. Live up in Reman and I'm back home and I talked about what's new and next for .NET MAUI. And one of the big things I got a lot of questions on was native a o t specifically for iOS. And we had a bunch of people reach out to us on Twitter, uh, specifically Philip, who worked on the native a o t feature with a bunch of other people. And he said, what Frank? [00:01:35] Frank: He said, we are absolutely guaranteed you can bet your bottom dollar on it, that we are getting native a o t for the Macintosh line of computer systems sold by this California company, apple. [00:01:51] James: Nice. And. More that there's also unofficial support for other things too. Correct. [00:01:57] Frank: There is also, I, I believe this thing called Linux. I, I don't know, uh, I I guess people run PHP on it. I think that's what you do with Linux, [00:02:08] James: is that right? I, you know, you put [00:02:13] Frank: stuff in there. The Linux brand of computers. Can I go to Walmart? I can get a Linux. [00:02:19] James: Uh, yeah. You, yeah, you just go and you say, you go down the aisle and you say Chromebook, you know Windows, Mackey, Taji. And then the Lin say, is there, and then you pick that up. Uh, specific Phillips said, Linux bionic. I don't even know what that means. [00:02:35] Frank: Uh, yeah, no idea. So I, I'm terrible with these names also, but if I had to guess, I think that that means it's raspberry pie compatible. Um, oh, now I'm feeling a little bit terrible, but I'm pretty sure that that's what the bionic. We, we, we should prepare better for these things. James? Hi. Hi. Linux bionic. Well, we're getting support for Linux Bionic, but I can't believe you jumped over the, the Macintosh line of computers [00:03:02] James: to mention that that's true. Well, you know, if we actually just read further into the tweet, uh, Philip would say Linux bionic, which is Android. He said I e Android without Java interop. Okay. Sorry. [00:03:14] Frank: Okay. Hi everyone. Yeah. Um, okay. Without the Java interop. Right. Cuz that's a whole, very complicated layer of, uh, .NET eight Android and Xamarin Android. Yeah. So I guess that makes sense. Uh, that interop layer is missing, but, um, interesting. Interesting. So I wonder, um, What systems aside from Android that also use Linux Bionic? Like could you do like Yeah. Are there POS systems or like store displays, TVs, I wonder about that kind of stuff. Um, otherwise, yeah, just compile for .NET eight Android and [00:03:52] James: then you're all good. Yeah. I'm not sure, but I almost, you know, sometimes in my mind I put the. iOS and Mac OS support so much glue together. Like they're literally in the same repo that I just kind of, I didn't even think about it cause it wasn't in the blog, but I just sort of imagined that it was also supported. But I definitely know it's a different platform, which means there's a whole bunch of different. Things that need to go into it. So I shouldn't have assumed that in all, uh, actuality. Now, the question I have actually, and we, we didn't follow up on here, was with Philip and, and you can respond and then we'll follow up again, which was mm-hmm. Is it just running .NET apps on Mac os like a command line app because you know you could do that there, or is it actual Mac OS apps and furthermore, would it be right Mac OS Catalyst apps? Right. So [00:04:40] Frank: those are all very different things. Yes. So those are all, yeah, those are definitely three different tfm. So we'll say that even at the .NET kind of highest level, those are definitely three different things, even if they pull games and reuse different parts for different things. So for example, um, it, it, it is funny like I'm the Mac, if I compile for. .NET eight. Let's say .NET seven. Let's, let's not think of the future. Let's think of the present. .NET seven. If I compile a .NET seven app, um, it'll run on Mac. Obviously it's a .NET app. It'll run everywhere. But I can also pre compile it a tiny bit with the native a o T. Now what they're saying is with. .NET eight. That native AOT will output a nice little Mac executable that will be executable on all your, all your Macs, uh, hopefully very few dependencies. There's tricks like native A A O T means they're gonna compile you to native code. That doesn't mean they're gonna do other things like. Bundle you into a single executable. That's one thing. And then the other big one is, um, remove, link out all the stuff that you're not using. That's a whole nother thing. So those are three steps. We're just talking about the one step of going to native. So that will be officially supported in eight. That said, you can also choose the .NET eight dash mac tfm. And, um, that will, depending on the mood, I really need to check into it, but I'm pretty sure, um, that will also run native a t. What I'm really curious to find out right now in the dash Mac, if you do a .NET seven dash Mac app, uh, they set a little flag to enable the j. Uh, it's a little program, um, allowance setting, you know, permission thing to execute the jet. And I'm curious if you enable native a o t, uh, if it'll not put that little flag there. So definitely we have more follow up to do on all this, but good to know that you can get a proper Mac app out of some C sharp code, F sharp code, [00:06:52] James: whatever you got. And you can, of course, always write into us at Merge Conflict fm. That's on Twitter. And of course we have, uh, contact page on our Merge Conflict FM website. And then additionally, you can just tweet at us. We read those things and as you can see, we respond to them, which is cool. So's gonna get updated on that. But let's Frank get to our main topic tonight because I wanna go back in time. I wanna go back. Back. Yeah, back. Yeah. Frank's excited. I'm talking like back in time, Frank, I just turned on my lights for anyone watching on YouTube. It just got real bright and great. Back in the day when I got started building iOS and Android applications, I built all of my iOS applications 100% in code. And I'm not talking vs code, I'm talking C sharp. Markup 100%. No designer, no zbs, no nothing. 100% straight. Straight code. And I'm not talking just Monto dialogue, buddy. Mm-hmm. I'm talking 100% all code all the time. All of it 100% because it was a much more delightful experience. In fact, most of my first application was mostly mono touch dialogue. Let's just be honest about it cuz it was so unbelievably good. But, uh, little do people may know because they see me white example all day, every day with amron forms and. Now, of course if you go backpack in time, if I had a, I guess I could turn these off the dark days. No. Um, if the backpack in time, you know, I started my life in the WinForms world, which is kind of like dragging and dropping. And then I moved to w pf into this world, which was very delightful. So I moved around all these things, but my first, first job was in game development, which was I. Just all c plus plus a hundred percent. There was all code, nothing else inside of it. So I've lived all of these worlds in general, and Frank people have always challenged me and always been curious about writing Zarin forms and now Donna amount apps in C and I just have not been willing to go learn all of it. But if you go back to the originals Amrin forms, which. I don't even know if we know, if people know the, the, the code name, but I'm not gonna say it. But, um, cause I don't think we've ever said it out loud anywhere, but it was only Csharp. There was no aml and people from the community wanted saml. So they implemented it, I think it was Sebastian, and then we hired, and then they joined on and now like did all the aml. So in the beginning of forms it was all C sharp. In fact, if you go back to the very first Hanselman forms blog post on hanselman.com. When I spun up the first Hanselman Forums app, it was all C Code all to say Frank, that I'm very familiar with building UIs in C. However. However, for the last seven, eight years, I've been all zl, all M V V M nonstop. But Frank, last week and this week on my live stream, on my YouTube, I rebuilt the Threads app and I did it all. With C Sharp markup with .NET MAUI. C [00:10:11] Frank: sharp markup. What a euphemism. I love it. Okay. All with MAUI also. Okay. Okay. This is interesting. I actually have a tiny bit of experience there. Uh, coming from kind of the opposite direction, I was writing a new backend for MAUI. Hmm. And I just didn't have time to get the zael stuff working. So I had to write all my tests and all my example apps and everything and just see Sharp as you say. Beautiful. Just see Sharp. I love just, just see sharp. Because like you run your app and you look at something and you're like, I think it should be one pixel over. So you go to your C sharp code and you increase the number by one. You hit at five, you wait 10 seconds, and then you look at it, you're like, Maybe one more pixel and then you go to the code. I'm just kidding. It's fun. I love it. Um, especially with like hot reload, now you can actually do some really amazing things with just, uh, editing C sharp code. Mm-hmm. Uh, there's of course the Zamo Hot Reload. They both have the same name. Right. I know every time we do this, I ask that question, but whatever. We have C sharp. Hot reload, which is fantastic. Uh, .NET watch and all that kind of stuff. So get that up and running. And then I really have no problem with building UIs and code. It's how I started. Also, um, that's not true. I started m vb. Everything should be like bb. But aside from that, I, I still write a lot of my UIs and code. [00:11:43] James: Yeah, I, the reason I had to do this cuz I was testing out the new .NET MAUI vs code extension and there's no hot reload support yet built into it, so, ah, um, which was kind of a bummer, but additionally there's not a lot of Zael, IntelliSense or Zael. Support in general. So someone in the chat had challenged me to do it in C, so I struggled, but I made it and I did it. And specifically I ended up using the C markup Community Newgate package, which is part of the Dynamic Community Toolkit for C markup, which adds just a bunch of extension methods, which makes it really, really nice, uh, when you're, when you're doing this. So instead of having to like set bindings and like have a bunch of code and then. Right. Set different properties. You can just do attributes on it. Right? Or extension methods. So I was [00:12:35] Frank: gonna say, those are, you just said the two things that are, I always find annoying when trying to do, um, C sharp code for a zamo platform. All the zamo platforms seem to have this. Binding, um, binding is probably the best feature of zl. It's probably the most important feature of zl and it's probably the biggest problem solver. When I, when I'm back to like writing UI kit code or win forms code and I don't have binding, all of a sudden I'm like, Oh God. Right. When you create the view, set the thing to the thing, subscribe to the thing, update the thing. Uh oh. Don't forget to erase the events at the end or else you have a memory leak it. It's a lot of things to do. Yeah. And so immediately I miss binding. But even on this Apple platforms, creating a binding from code is not the prettiest thing. I, I think they have a pretty simple, now I think it's like, New binding with maybe only like eight parameters you have to provide. And it's always a ridiculous number of parameters. Uh, so it's ugly, so Great. Uh, please repeat the name of this library you use that simplifies binding [00:13:44] James: creation. Yes. If you type in into the Google Bs, Dot, Net Maui Community Toolkit, you'll get to the documentation and when you scroll to the bottom left, you're gonna see C markup. So specifically the. Package on Newgate is Community Toolkit. Do MAUI dot markup. Okay. And I'll put, I'll put it in the show notes, but additionally we can, I'll give, give it to you so you can see it, but you can see some great examples. So for example, if you're, you know, creating and setting the size of something, you can say new entry size, 200, 400, for example. Or you might say, bind. And then you can sort of easily pass in different properties and parameters into it instead of set buying it. But you can, it's fluent, right? Yeah. So you can easily build off of it over and over again. So if you end up looking at my getup page, and again, I'll put this into the show notes too. I just only made one page cause I did struggle bus. Mm-hmm. Pretty hard. I'm not going to lie about it, but when you end up looking at my pages, you'll see the. Um, main, uh, uh, activity page. Or sorry, homepage of the application, which I'm gonna put in here so Frank can see it as well. I'd say I mostly struggled a lot with remembering, remembering how to create like data templates and things like that from the CO behind. Yeah. But if you scroll down a little bit, you'll see me like Return the cell and I can do like create new image and then bind the source property to the name of the, you know, Image in quotes. And then width 35 height, 35 row zero dot column zero, Rowan two center, horizontal top margin. You know, you pass those things in. So it looks pretty nice, uh, overall. So, you know, it, it, it's pretty, not the prettiest, but it's prettier, I would say. And I was like, okay, once I'm in the flow, especially for the grid stuff, I was like, oh, this is nice. That was the big, big thing in general. So that was key. [00:15:45] Frank: I mentioned binding. That's what I was starting with, but I forgot to mention layout is the other one. Because you have dependency properties, this weird concept that was invented when you're enclosed by a grid, all of a sudden there's these grid properties that you can set, uh, what's the other big ones? Like absolute layout and things like that. You can, you all of a sudden you can set your XY within height properties when normally you can't do that. Usually those are computed properties. But, uh, it's good to see this library makes it possible. It's really not that bad. You just have to say something like, add dependency prop. I forget how you even do it. So good thing go use this library. Go use this markup thing. And uh, of course it's gonna be a little bit tricky at first because, so I was thinking, like I said, Binding layout. Those are always the ones in my head. I totally forgot about data templates. Mm-hmm. Yeah. Those, mm-hmm. Those are a little bit nasty from C Code also. I've certainly done it. Now that you mentioned it. I, I remember doing them, but, um, yeah, I couldn't do that off the top of my head. So I'm curious, um, did the C Sharp markup library. Help with those, like if it's fluent, I would think that like you hit dot and then you just kind of search for like what you can do. Yeah. Were you just having difficulty finding the data templates in that? [00:17:03] James: Um, Yeah, I, for a while I was struggling. I was like, I was like, what does, how do I, I was like, mostly, I was like, how do I create and set the, the item template, you know, for the, the list view, right? It's not like it's in Yeah. Blazer where it's just like in, here's every item and iterating through 'em. So I'm like, oh, I gotta create a new data template than a type of, and then a thread cell and then go create that thing. But it really kind of makes it component based cuz then my cells are a little bit more componentized and then, You know what's nice about the code behind is you can. Easily break those things into little chunks if you wanted to, that you could reuse throughout your application. So it does make it really nice, you know, to, to do it in the C And then additionally, one thing I forgot to do, uh, but I remembered afterwards is words, is that our good friend David, or now wrote a little blog post not too long ago, but it's called C Sharp UI and Donna Ha Reload. A match made in .NET MAUI, I dunno about that name of the blog, but it's there. But basically, if you're using Visual Studio 2022, you can leverage the .NET Hot Reload in the debugger. But what you do is you do a bunch of reflection to, uh, invoke a different method when you actually hit save. So, What it will do is you can, you can tell it to call like ond basically and rebuild your ui. So he shows how to, how to hack the hot reload system to rebuild your UI every single time, which is like really clever. So I'm gonna do this in the livestream tomorrow when I'm doing it, but I'm gonna set this up. So I was like, okay. Cause that's the main feature that I think I'm really missing is that hot reload part because we try to do donnet watch. But I think with On .NET watch, at least from our experience of us trying it, still try to like redeploy the application every [00:18:55] Frank: single time. Yeah. Uh, so I got .NET watch to work on my Twitch stream, James, but Oh wow. Damn it, it was years ago and I don't recall exactly the details. Thanks. So thankfully I did write a tiny bit of notes for it. Oh, nice. So maybe I'll, I'll check my notes and see if I could create maybe a noot. Or something that does it for you. It's a little bit of a trick. Uh, they don't like you doing it. You just have to set an environment variable to trick the runtime into going into mode that will accept top reload correctly. Oh, and then it's just a matter of shipping off assemblies to it in the correct way. So it's a, it's a little bit of work. Um, but uh, it's actually like a public. Uh, what, what do I wanna say? It's documented, like yeah, if you go read the docs and go read the code, you can see how it works and you can make it work. And that's what we did. It was a struggle, but that's all to say. I'm sure the tooling will catch up eventually. I, I, no, no problem. Like if a, if a hacker can get it hacked together on a Twitch stream, I'm sure bunch, bunch of Microsoft professionals can get it to work. Uh, That will be nice. It's, it's fun. Sorry, I don't mean to diverge too much, but it was funny to hear that they have their own system of like triggering that on navigated to, to rebuild the ui. Uh, it's funny with hot reload, you come up with those all sorts of, those funny little tricks so that when you change a little bit of code, what normally wouldn't happen. I. Normally you don't want any triggers to happen, but there's always a few triggers you want to happen. So I feel like there's almost, um, a nice space here for us to Yeah. Play around and maybe create a newgate package to create more triggers for updating our apps with [00:20:34] James: hot reload. Yes, I totally agree. And, and you know, this is very different in this regard for this type of hot reload that was shown here because the real hot reload is doing like real diffing, basically, right? Like in general. Let's say I'm doing, I have a method and it's, you know, one plus, you know, or you know, count plus plus and I change that to count plus equals 10. It's changing that in, in your, I dunno how that works. Memory or something like that. Whatever. It's doing magic, right, man. It's in the memory. It's in the V table. Lookups. It's [00:21:10] Frank: definitely in the V table lookup at, usually they're swapping out whole methods. Usually the level of granularity is at the method level. So magic trick, [00:21:18] James: swap it out. But with ui, the problem is there's not a method to swap out, so you need something to invoke, you know? Yeah. Which is like why when you see mvu style applications, uh, or not even VU style applications, but other type of hot reload technologies that had come out back in the day for zamer and ZA forms, they mostly were like, oh. Do this special thing or write your code here and it will just work. Right? So, [00:21:42] Frank: oh, and I should say pro tip. Um, in the .NET API system runtime, who knows where there is a global handler that you can register event handlers to. They get notify when, um, a hot reload happens when, um, I forget exact conditions, but definitely for like when you do it from visual studio and things like that. Yeah. But it's either every time a method is replaced or every time a new assembly is loaded in, something like that, you can register a hook. And in that hook you could, uh, like, and UI could, you could do something terrible. I've done this. You're just, you ask for the main window, look for every sub view. Look, if it implements an interface, send a message to it. If it implements that interface, then every view can update [00:22:29] James: itself when it happens. Yeah. And there was, you know, the, the, the F SHARPP team, uh, our F SHARPP community, right. They had the, uh, fabulous stuff and they had a bunch of other stuff. Mm-hmm. And that was actually doing like proper, like mbu style, hot reloading. Same with Comet, I think too. It's, they're using that do .NET technology and swapping things in and out, basically a hundred percent. Where this one is just a little bit different. So I, but I kind of see the future here, right? Is, you know, I think that there are folks that. You know, the cognitive load of if you're brand new, Learning, C sharp learning, MAUI learning exam, learning mvm, it's a lot, right? Mm-hmm. And if you were just coming in and just writing C sharp code, you wouldn't even have to use these bindings or do this. You could really easily up a bunch of new controls on a page and go. But having that iteration cycle of. Of actually just deploying my application, making changes, reloading it. And I don't care if it's blowing away the whole UI and putting it back cuz I'm just in development. That is what I would love to see. Kind of go, go out and that [00:23:34] Frank: would be pretty bad. Yeah. So I, I hope you have good success, uh, getting your reloader to work because, and if you do, try to bottle it up into a new get if you can because mm-hmm. I'm sure a lot of people would love to take advantage of it. Yeah. It's funny because I, I made that joke earlier in the episode. Uh, you, you change the value by one pixel and then you wait 10 seconds for it to happen. And it took us a while, but we got all the way back around. Uh, to that point of the hot reload, that's all I want is. Because, you know, like Zamal is a neat language and all, and it, it's nice. It does binding. I like it. But CS Sharp's a better language, CS Sharp is a more powerful language. It's more general purpose language. It can do more things and I think that's why I've always enjoyed running UIs in it. Uh, so anything that can shorten up that little depth loop, uh, is huge. Huge to me. [00:24:26] James: Yeah, I have now. Yeah, I mean now I would say that it's twofold, right? I think that that dev loop is super-duper important and you've been playing around with it forever, right? In all of your ides and continuous stuff and all these things forever, and we've been playing around with the zael. Live player, all these other things. Right? And then at the same time, I do think the other side of it is that has to be easier and nicer to build those UIs with c. So for example, uh, I, I, I don't know any inside baseball, right? Cuz like while I am in and around dot .NET and the MAUI team, like, I'm not in like the planning, although I guess it's all open source, I would know. But like the C chart markup stuff is great. But then if you obviously go read documentation, it's not gonna show you that stuff, right? So it'd be really cool that if eventually some of this stuff gets baked into the actual framework, which means the documentation gets updated, which means. That the way to do the things are with these extension methods and it makes it super-duper more delightful to build these UIs this way. And if it's in it, then that means that there could be more of a best practice of if you're creating a third party library, here's how you add these extension points. Here's how you do whatever. Now, I don't know, you know, I still think exam's very heavy in the world, but I, I would. I'm always very open to, it's a flexible, you know, flexible framework, right? You can build hybrid apps, right? With, with Blazer, with this hybrid web view, you could build them in C you can build them in zl. And I know that there are people that are working on the Blazer mobile bindings, which is basically writing UI for .NET MAUI, but in Razor, right? With Blazer syntax and data bindings and stuff like that. So that flexibility is good. Is there too many toys? I don't know, but, uh, I, I would like for there to be, you know, I. I guess, you know, I think, I think if you could do it in C or in zl, you should be able to do it in C Sharp and then let people pick No, because it might be easier for people to get into the world of it. But I do love my zl Frank. I know that you just said that, you're like, yeah, it's, yeah, but I do like my Zal. It's, it's nice. That's [00:26:35] Frank: tricky. I depends your background, if you're coming from html, maybe XMO feels more comfortable to you. Yeah. If you're coming from. M f C like me. C c sharp is a little bit better. We like, we, we like our things like that. And, uh, yeah, no shade, no lemonade, F sharp. Fabulous. I, I just haven't done those things enough. But, um, Yeah. Well, why not? Uh, I mean, in the end, everyone is compiling their zl these days, right? Mm-hmm. That, that's the hot feature. Pre-compiled your zl. Mm-hmm. What's, what's that doing? It's compiling it down to code, you know, it's calling a bunch of APIs to construct your ui. So we're just talking about two different languages to accomplish literally the same thing. Yeah. So just pick your flavor. It, it literally doesn't matter, like to the runtime, it doesn't matter whichever one. [00:27:29] James: Yeah, but, [00:27:30] Frank: uh, I, I, oh, I'm sorry. Just real quick. No, go ahead. Um, just be, before I forget, I, you were mentioning, um, integrating this markup library into MAUI itself, and I'm like, jeepers. I actually do hope they do that really quick because it would be terrible if a bunch of controls libraries, everyone's referencing this noot and then this new, it just comes with every app and now we get into version nightmares and all that stuff. Yeah, yeah. If it really is just a bunch of extension methods, Dear Microsoft. Just, just pop it in. Extension methods never [00:28:00] James: hurt anyone. No, I don't think I have proof. Never. I'm a big, big fan of that builder pattern. It's very Android, e, but now I feel like our builder pattern is everywhere in .NET, just absolutely everywhere. It's good for, [00:28:13] Frank: in inte sense, that's all. Mm-hmm. Just being able to hit dot and to see [00:28:17] James: what you like. Yeah. Yeah. And then eventually it's like Intelli code and copilot. They can just do all the things. So, um, I dunno. It was a good experience. I'm excited. I'm gonna keep going at it. I'm gonna keep it. Are you? Yeah, I'm [00:28:31] Frank: gonna, you know, it's okay. That's the big question. Okay. Uh, uh, Greenfield application. I, I hire you, James for, I know you're expensive. I, I don't have enough money for you, but I hire you to write an app for me. What are you gonna write? Yeah, get some c Are you gonna do some zal? [00:28:50] James: I'm probably gonna do it all in zl, but, okay. Only because I'd be more productive now. It depends. Do I want to bill you for more hours, uh, than o Ouch. O, ouch. You know, then I'll do C, but only because I'm new at it. Now if you ask me this question again after I finish this application, maybe I'll be easy breezy and, and gliding through. I don't know, so we'll see. Mm-hmm. But okay, [00:29:12] Frank: we'll see. Yeah. Okay. Well, I'll, I'll save my pennies so someday I can afford you. [00:29:17] James: What, what I'm really curious about too is as I build out the application more, will writing C for example, be easier to do more like logic based things in my ui? So for example, you know, you can do on platform, you can do on idiom. You're the visual state manager. Yeah. But. I need to experiment a little bit more as like, is that easier to do in C right? Yeah. Do I need value converters? Do I know need value converters? Can I just, you know, right. Pass around different properties, but do something, you know, do an inverse of it. Yeah. You know, I mean, that type of thing. So I wanna play around with that a little bit more and understand, oh, could I, could I set more easily, a completely different UI for, you know, Tablet than desktop, for example, and or, or phone and like that be easier. So I don't know if I'll have those answers anytime soon, but that's one thing I've sort of been thinking in my mind like, is that easier? One thing I did like already was, I guess it's good and bad, would be like if I wanted to create a, um, I wanted to create a, uh, a vertical stack layout and I wanted to just assign the spacing. So I just like sub classed it, gave it a new constructor pass into property. And then I got all the ex other extension cuz there like was an extension method for spacing cuz it's a new control. So I'm just like, oh, let me just like subclass it. Yeah. And then pass it in the constructor. And I was like, oh yeah, this is easier just right. Do that. You know, or you could create, you could subclass every single one and then pass it in the constructor. For all your property, it sounds like. Oh, that's, that's kind of nice. [00:30:57] Frank: Yeah. Uh, it, sorry. Going back to my programming language analogy, uh, Zamo has componentization, you build upon, you create a small component. You build a bigger component on that. Bigger component on that. Yeah. That is, uh, their level of abstraction. Whereas a general purpose programming language like csharp has many levels of abstraction that you can harness, uh, polymorphism. Sub classing doing that kind of stuff. Yeah, true abstraction. These little things called functions. Yeah. ZL doesn't have functions. Yeah. No one ever really thinks about it, but it's a little bit annoying that ZL doesn't have it. Little things we like to call loops. Conditionals. Yeah. Fancy programming, language things. Uh, now the trick is, uh, when you start to use those fancy programming language things, uh, you do get into the little bit of problem of event subscription and data binding because mm-hmm. Now you're. The UI layer for how to handle those. And so I, I find that that's the trickier part. So when you start to do advanced things in the programming language, all of a sudden you start, oh, now I have to do all the binding myself. Now I have to do this and that myself. So there's a lot of trade-offs. Um, sticking with the simple zael is definitely in the smoother, easier [00:32:09] James: path. Yeah. Yeah, and it's learning cuz I've known it for so long. So we will see how it goes on my journey. I will report back as I continue, but you can of course check on my YouTube, youtube.com/james wants Magno. I got the live streams up there. I'm gonna continue to try to build it out, uh, just cuz it's fun, it's good for me to learn and people have been asking me for a long time, so I'm like, okay, I'm just gonna try it out. Finally. It's gonna happen, it's gonna happen people, so we're really gonna, this, this week will be a lot more. Let's do it. [00:32:39] Frank: But yeah. And so to come all the way back around this, this has absolutely nothing to do with it, but is it native AOT compatible? Did you native a t this [00:32:47] James: thing? I have to imagine is, I wouldn't say why don't even, maybe even more. [00:32:51] Frank: So. I want proof. I want proof. I want, I want, I want a tiny Little Mac app. Gimme a Mac [00:32:55] James: app. Okay. I'll give it a go. Well give it a go. All right. Well, let us know if you are building UIs completely in C right into us. Let us know what your experience is. Maybe there's other new packages out there, like I could try, you know, there's a whole ecosystem out there. If you've been trying this hot reload stuff, definitely let me know. I'm gonna give it a go and I'll make a separate video on it and go from there. But yeah, that's gonna do it, I think for this week's short. Nice hot reloaded, uh, episode. So, um, yeah, you can just find us on the internet Merch company fm. That's gonna do it for this week. So until and next week, I'm James Waba now, and [00:33:28] Frank: I'm Frank Krueger. Thanks for watching and listening. [00:33:31] James: Peace.