Merge Conflict === [00:00:00] James: Frank, Frank, Frank, Frank, Frank. I am back. It has been like, I don't know, like a, what, a week since NET Conf? Two weeks since NET Conf? I guess we got it. You look totally [00:00:07] Frank: different. It must have been a life changing event that you've gone through. You, you look, you do look, you look happier. You look a little relieved. Was it, was it a [00:00:16] James: good vacation? Uh, going from like 90 degrees weather back to 30 degrees was not great. Uh, but I've adjusted. I got like my heat. Heat pants on and, you know, and things like that. No, it was good. Uh, it was a great holiday. Great to get, get away. We prerecorded a bunch of episodes. I think highly entertaining that the one on OpenAI came out like on Monday. It was fun watching. I don't even know. I don't even, I don't even understand anything that happened, by the way. All I know is. It was ups and downs and all arounds and I think we're back to where we started, [00:00:49] Frank: maybe? Yeah, I think so. I think you could have just slept through the weekend and then caught up on it all on like a Tuesday or a Wednesday or something like that, but James, you missed the excitement, you know, it's the journey. And that was quite a journey. We all went through the open AI rollercoaster. Uh, and it is like I, and, and I think a lot of the things we talked about on the podcast were some of the causes of that rollercoaster . So yeah. Great timing on our part. Go, go merge conflict. [00:01:16] James: Nailed it. Uh, so that was pretty, pretty entertaining. I think that that episode went out. Yeah. I. Yeah, I don't, I don't remember much. Uh, it was a really great, I didn't even bring a work phone or anything like that. So it was really separated from every everyone. Our, our plane was delayed going there, which means I got to watch the keynote for it on a conf and then I was on a plane for 11 hours. I didn't watch pretty much anything else, but I did catch up on a few things later, uh, in general, which was, which was quite great. Uh, and yeah, I played a, you know, I got to help out quite a bit on the keynote and there was just. So many people in it. We talked about on the Patreon, uh, exclusive feed behind the scenes. If you want to kind of learn more about the behind the scenes of the keynote, I kind of break down some of that stuff and go to patreon. com forward slash merge conflict FM, and you can become a patron, put out bonus episodes. If you're interested in there. Uh, what did you think overall? You got to watch the keynote, uh, Semi live later on. I heard you slept through everything. [00:02:11] Frank: Yeah, yeah. As I predicted, I slept right through that keynote. Too early, Microsoft. Come on, come on. We're all lazy developers here. No, it's not even 100 percent true. It's, it's, my cat gets me up early and then 8 AM is just a bad time. Yeah. Uh, you know, the best part of these t net costs, I think, uh, sometimes we can be in our little bubble and t net can feel very small, and then all of a sudden 150 videos get posted to YouTube and you're like, oh, look at all these things. I totally forgot you can do with a stack that I use to write mobile apps, but look at all these other funny things people are doing with it. And I think that's always the kind of fun revelation of, Oh, yeah, I don't do any of that stuff. And yeah, here's 10 videos on it. I can't wait to see what everyone's doing. So I had fun because it is, it was a fun reminder. I got to see some friends doing presentations, but it was a fun reminder of the vastness of the space and all that stuff. Plus, it's just a fun reason to hang out on Twitter. And cheer along and do all that kind of stuff. Post screenshots, make fun of code, compare F sharp against C sharp, you know, all the classic fun things we do on Twitter. [00:03:23] James: I thought the vibes were high. I was like, I was scoping the tags board app that, that they had going throughout and the, and the Twitter feed and even the YouTube feed, I was like, vibes are pretty, pretty good this year. I was feeling net positive overall. So it seems like you had a pretty similar experience [00:03:39] Frank: then. Yeah, yeah, exactly. I, I think we've all kind of like settled into, we're, we've ported our apps over. We're looking, just looking for like, what are, what are the updates? You know, like there's, thank goodness, no like bombshells this year. No, like, uh, we're porting NET to, I don't know, the Mars Rover or something, you know, we all got to port our apps to the Mars Rover. So nothing like crazy like that. So these were all like, all the announcements were pretty cool. Pretty chill. Um. A whole, a whole new product that had me completely confused, but I just, I let the web people talk about that. I think we'll get into it a little bit, but I mostly sticked with, um, the Maui crowd, the performance crowd, the language people, you know, I'm into the runtime and all that kind of stuff. I just want to, I want to know how fast I can make this thing and what improvements are being made to the runtime. That's what I'm interested [00:04:36] James: in. Yeah. Well, let's break down maybe just the keynote, you know, uh, break it down. Then we can talk a little bit about what we thought about stuff that we've watched. Obviously we haven't watched all 102 videos or whatever there are. Working on all of them. Working on it, working on it. There's a lot of content. I mean, like we talked about in the, in the Patreon. episode, there was actually on day three, two tracks. So there was a whole YouTube premiering track throughout the day as well. And there was a blend of community talks and some other Microsoft, there's a lot of talks from a lot of teams. That's the fascinating part that you're talking about with NET Conf is like, there's just so much, right? And there's a smaller focus events, which is like one day, like eight or nine, 10 talks or whatever, but boom, but there's just like, there's a vastness and just the amount of different topics. Some are sometimes it's hard to, to dive through all of that, which is why it's great. They're all available on demand. And they were up. Pretty quick, if not the same day, then the next day, which is wild in general. So, um, first off, my impressions of the keynote since I worked on it, Frank, what did you think? My production? Pretty wild? Oh, the, oh, [00:05:38] Frank: the production was good. I think like, if we're talking production, I think everything went pretty smoothly. Were there any hiccups from your point of view? I, I think all the demos went pretty smoothly. Um, I'm trying to think like, They showed off a few new UIs. I'm not a web developer, but gosh darn it, they got this feature, James, that just made me so jelly. The Endpoints UI. Do you know what I'm saying when I say the Endpoints UI? Do I have to get more specific? [00:06:09] James: Endpoint Explorer. Yes. Thank you, sir. [00:06:13] Frank: Um, for years, I was a web developer for years. I've created many an endpoints in many an ASP. NET apps. And it's one of those UIs that like the first time you see her, like, why hasn't that been there for the whole time? Like, Oh my God, I could have used that for the last 10 years. Where's the end point. Explorer been my whole life. It's funny. The fun, the things we pull out of the, out of keynotes. But when you ask me, like, what, what was made the biggest impression? That's stupid. Endpoint Explorer, because I always wanted it. [00:06:46] James: That's awesome. No, I mean, that's good. That's good. Like, you know, I think that. Uh, certain things, certain slides, certain demos are going to hit with different people. You know what I mean? Yeah. I'm a big fan of, uh, like DevTunnels and Endpoint Explorer as well. Like I've had videos on them as they were kind of coming out originally. You know, there've been new features have been added onto it as well. Uh, there was. Uh, they, they opened with web, well, they opened with performance. I think AV and, and Damien talked a lot about performance, a number of features. And then, you know, Safi and Dan went into to web, which they started with APIs. I think APIs are a nice place to start, because like you said, like you're not a web developer, but you kind of are. Right? And like, I kind of am kind of, everyone needs, you know, um, APIs for their apps, whether it's a function or app, the API that you're deploying and, and, and, and there, which I think is great. And one thing that I also liked was there's. Like a new debugging capabilities in visual studio that you can like hover over the app or whatever. And it shows you like all the end points as well, like as you're running it. So you can help kind of decipher like what's going on there. And I think that's what Safia demo, like kind of showing like, Oh, I was trying to find this bug that was kind of in the code or whatever. And then one of the unit tests that were failing. So I thought that was really neat, but yeah, the endpoint explorer is, is great, uh, in general. And I think one thing that I thought was really neat was. Uh, stuff is showing off, uh, some of the new C sharp 12 features, the primary constructors, which we've talked about a lot. Um, and that was a really natural flow of the demos as well. I thought that was pretty cool. Like, oh, that's nice. You know what I mean? Uh, there's, there's a lot of, there's a lot of mixed feelings on primary constructors, but I'm still a fan. [00:08:28] Frank: Who's having mixed feelings. You're wrong. They're fine. No, less typing is [00:08:32] James: better. Less typing is better. The, the only critical feedback that I've seen on the internet, on some of my videos and on Twitter and some comments is that the primary constructor things are not read only. [00:08:50] Frank: Yeah, it's weird, huh? Yeah, I actually, I had to go into the C sharp 12 talk for this. Um, so, um, when you, it's funny because they're different from records because I think the record ones are read only because they become properties. But the, um, the class ones, the primary constructor parameters, they call them parameters, they're very ephemeral. You can use them like to initialize things, oddly enough. And if you think about it. A parameter passed, an argument passed via a parameter, to a function, you can overwrite it. You can, if an int x comes into your function, you can say x equals 12. Haha, input, I've overridden you. And so, therefore, by the rules of everything should make sense, they made it so that you can overwrite. These parameters. And so I can see it both ways. Like designing a language is hard. If you allow it in one place, why wouldn't you allow it in both places? Um, but I do highly recommend, uh, the C sharp 12 talk just for clarifications exactly on how these class based primary constructor parameter thingamabobs work. Because there's some subtleties to them. Subtleties I certainly didn't. No right away. I thought the class ones were going to act more like the record ones, but they're, uh, they're different. They're different, James. You really got to look into it. Yeah. [00:10:20] James: Well, and I think if you wanted to create a read only, you know, you can't do like, if you pass in X, you can't do like this. X because it's not, it's not a property. It's on fields, right? It's on fields, not a property. Yep. So you could, for example, have a private read only or a public read only capital X and then assign it basically. But just like any parameter that you pass into a constructor, modify it. So I don't know, that's the biggest thing that people seem to be hating on for some reason. [00:10:52] Frank: But I disagree though, because, um, uh, it's modifiable, but like you said, you can't do a this dot. So there are just places where it'd be confusing, and I highly recommend, if you do want to modify it, just be clear. Just create a field with the same name and initialize it to the value, exactly like what you would do in a constructor, except now you get to do it outside the constructor. I think people are just, because it's outside of the constructor, people think the rules are different, but what you really just kind of got to get into your head is this is all happening inside the constructor, kind of. Just imagine that the constructor is being synthesized for you. [00:11:28] James: And what's totally, I, I agree on a percent. You just have to think of it like it's still looking, it's a constructor. Right. And that's, I think because when records were introduced, you're like, Oh, okay. So like now they look similar, but they perform differently. Right. And one says class or struct and the ones that record. So there's that. So, um. So that's cool. Um, yeah, I was, I was really happy with the API stuff. Obviously great performance gains. Um, then Dan talked about Blazory stuff as well. So much Blazor server side rendering. Nothing, nothing, nothing is, nothing is there. There's no JavaScript. There's no web assembly. There's, there's nothing, Frank. There's nothing in the [00:12:06] Frank: browser anymore. That was my favorite demo that they did or my favorite. Punchline. I forgot who was presenting at the time, but they were going through all the developer tabs in the browser. They're like, look, no WebAssembly. No, no, uh, no, no sockets. No, no JavaScript. Who needs JavaScript? We're not even using HTML. No, I'm just kidding. They had HTML. Um, it was an effective demo because I think even I get confused. You know, I wrote Wii, which was Also, a client slash server hybrid thing. It could go in both modes. And even I would get confused. Like, where's the code running? Is this running on the browser? Is this running on the server? And then you want to make, for SEO reasons, for easy server reasons, you want to make server side rendered stuff. It's, it's just nice to get that, like, look, there's nothing happening here. This is HTML. This is 1995, everyone. We're just setting down HTML. And boy, aren't we full circle where everyone's proud to have server side rendering, and the world is a weird [00:13:10] James: place, James. It's true. It's, it's, it's, yeah, it's static server rendering, and then there's. Streaming rendering. And then there's like enhanced navigation and form handling. So like, basically they showed a lot of, you know, you can use these MAUIs and, you know, intermix them. And then additionally for page interaction, you know, when you're navigating, you're adding something to a bucket or doing something like that. You can basically do it. So the navigation, like, doesn't like jump you around, you know what I mean? So it's normal to some extent. Does that [00:13:45] Frank: make sense? Yeah, it's especially hard with these hybrid apps because you do have a mix. Sometimes you're serving up a page, other times you're a single page page, but in a multi page app, you know, you're, you're layering all these things on top of each other. It gets confusing, but, um, I had fun with the, um, native AOT of it all, because, you know, coming from the iOS world, I've lived in the AOT world, so I always have an interest in seeing what they're doing. And part of the performance talks were just basically getting ASP. NET, and it was fun to see they were working on kind of like the minimal APIs, ASP. NET app. And it's, it's the old, it's the old Xamarin games on iOS, getting it down to five megabytes in a 100 millisecond startup time, because it doesn't have to run gigabytes of reflection code in the very beginning at booting up. And honestly, I'm, I'm watching because, you know, like, uh, SQLite NET, if, uh, if we ever switched to the native AOT world, SQLite does a lot of reflection and I will have to switch it over to be, um, Well, I was curious to see what the team was doing. So part of these conferences is fun because you get to see behind the curtain a little bit and see how they actually solve some of these problems. And it's, it's C sharp code generators and all that stuff. That's how you make the native AOT happy. And so I, I, it was nice for me to see how do the professionals do it? You know, how are they working around the same problems we all run into? Uh, ASP. NET is a very reflective application. It has inversion of control everywhere. It's, it's always looking up assemblies and doing all that kind of stuff. And it's, it's kind of confidence boosting to think like, well, if the ASP. NET people can get their ridiculously dynamic object graph to compile under native AOT, then I have a chance of getting my thing working. [00:15:45] James: Yeah. And I think the native AOT stuff is really fascinating because they. Kind of showed the before and afters and talked about a lot of the new things that were happening just in container spaces as well. And being able to AOT more things than just the command line applications, obviously, and the services. But originally with the code gen, I think what's, what's really cool too, is there was a whole talk on like system text, JSON. And I think that's a great example of like system text. JSON does a lot of source generation, a lot of other stuff for you to kind of get you further. Because with. JSON serialization and deserialization. Like you said, there's a lot of reflection that could occur there. Right. But when you're doing, you know, um, a little bit more code gen, then you can get around some of those bits and pieces and things that are happening inside of it, which is, which is cool. And obviously it also helps with performance in general too. So [00:16:31] Frank: yeah. Now, can you answer a question? I, um, I, I, sorry, I'm going to sidetrack us a tiny bit just because we were talking about debugging there for a minute, a minute ago. Uh, there was a new thing I hadn't played with, and I'm not sure because maybe I don't, uh, use Visual Studio all the time. Um, there is a new live object. Property Explorer, when you're doing your kind of live running live XAML editing of apps and Maddy showed it off like you can go look up text box values and you can actually change them dynamically at runtime. So it's like your, it's like your property editor that you would have like in a XAML editor or in a WinForms editor, that kind of normal property shape. But it's running for the live app, like Continuous does. Um, so you get a live, uh, property editor, just like Continuous. And it was nice to see that, uh, inside Visual Studio. And I wanted to ask you, when am I going to get in Visual Studio Code? James, [00:17:38] James: that's a great question. Well, that's a lightweight code editor. So, um, there would have to be some additional things built in there. That's a good question. Actually, I have to double, I didn't watch the whole what's new in Maui talk yet. It's on my list to, to watch, uh, funnily enough. However, I do know that that was a feature that was originally in WPF and UWP applications. So it seems like they, they were able to bring that in, which was a great, because, you know, previously you would jump around, there'd be the little adornment on top of like a windows app and you could like navigate to something. It would navigate you to the. The thing in the XAML, um, however, there was a live visual tree, which would show you the elements in the thing, but the property editor is new. So that's really cool. They got that working, uh, in general, cause you get to see everything. And then what's cool about that is that, you know, what you see in the XAML. It's not all the properties, right? You want to actually see all the things and tweak all the things. And some of them are kind of hidden what the defaults are. So exposing all that is like pretty rad in general. So that's cool that that's in there. I didn't even know that was in there. So boom, learn something new. [00:18:49] Frank: Yeah, and I have to say, it's a great feature. It's why I put it in continuous. Like, you really learn the API much better when you can just, uh, so you get your app running, and then you can just kind of drill down through the object graph. Uh, they demoed, like, looking up specific properties and all that stuff, and yeah, sure, directed stuff if you're, like, trying to narrow down a bug or something. But I highly recommend it just for browsing. Like just get to know those objects, get to know what properties they're, they're hanging around with. I, I always find getting to know that object graph very valuable and there's no better way to learn that object graph than having it in memory and accessible and seeing real values in it. So it's a really nice feature. It's, it's nice that Maui [00:19:34] James: has gotten it. Yeah, that's cool. And, and keynote also showed off. Obviously the VS code integration, which you talked about a little bit as well. And demo, uh, the same application, this, uh, eShop application, this, uh, Northern mountains application. I played a role in as well. I played small roles into the greater teams as well, which was, I had a lot of inside baseball basically, uh, in it, but. Uh, Maddy also talked quite a bit about that, which is, uh, really great to see too. And kind of see, you know, the app running everywhere and doing all the things, uh, which was great. It [00:20:05] Frank: was nice. Uh, all the demo apps were really nice. Uh, this time through, uh, David Ortnow in the Maui one was also demoing a store app. Um, all very well produced and everything, no janky apps on the screen or anything like that. And it was fun, um, sorry, I meant to talk about how nice the app is because I wanted to give you compliments there, but I'm already going to side tension into, it was nice to see a focus on, um, some desktop kind of stuff like drag and drop, keyboard bindings. Menus, uh, menus, we're all making menus again. Uh, so it was, uh, it was nice to see a focus on desktopy stuff in NET 8 for the Maui stuff. Um, Oh, and cause a lot of that translates over to the iPad. I've really learned that in the iOS world. Um, Mac Catalyst, if nothing else, code your app against a Mac Catalyst because you're just going to make a. A superior iPad app. You're just going to make a really good iPad app that works well with the keyboard and all that stuff. Yeah, I, I almost like start with Mac Catalyst now. Cause like, if you'd make a really good Catalyst app, you'll get a decent iPad app in the end. [00:21:17] James: I think that's something that they don't talk about enough, but they kind of made a big point of to now in the keynote and the session later about those new features. Cause when you look at the new features, yeah, I mean they're the idea was more on. Performance, stability, things like that, but, you know, there was a lot of work put into the keyboard for the soft input, for example, which is always behind a lot of work, just going into some of the, you know, WebView stuff, some of the grid stuff, but then, yeah, the, the desktop improvements, a lot of gesture recognizer, which is a lot of actually desktop stuff. Let's be honest, like, you know, adding, you know, all the pointer gestures and pointer press. Poynter. Poynter. Yeah, there's a Poynter. It's not tap. It's [00:22:00] Frank: Poynter. That's how you know it's [00:22:01] James: desktop. Yeah. And you know, all the different drag events and like you said, all this other stuff. So that was, yeah, really nice to see basically. So that is for sure. [00:22:09] Frank: Yeah. Yeah. And I, I'm sure these were pre announced, but like I said, I, I can't keep up with everything. So it's just nice to get it all wrapped up into one place. Or were those unannounced? Were those new, hot off the press? [00:22:21] James: Um, I mean, I actually didn't know about the drag and drop, uh, stuff at all. And the keyboard accelerators, which are the keyboard shortcuts, those were announced before, but the API changed completely. And I just put out a video on my, my YouTube just about it, which was, I'm glad I waited because, uh, the API changed completely, uh, on it. And it's much better now. So you can have like multiple keyboard accelerators and all this other stuff. It's pretty nice. It was a little bit more string parsy before. Now it's like, Oh, okay. Like you can specify control or windows or what, you know, home or whatever. Like the, the, the pre key. So you can do a control N. So you just say like, here's the key. And then you can do like, you know, you know, whatever. So I think that's pretty cool. [00:23:04] Frank: It is tricky from an app developer's point of view, like as a cross platform app developer, you would love to see like, say, uh, Oh, control C is always copied, but no, on Mac, it's. Command C. But command translates to the Windows key on a Windows computer. So you really have to say that stupid key binding twice. Like, yes, it would be nice if we were in a pure write your code only one way and it worked perfectly across every operating system, but that's just mean to your users. Like, There are different key bindings between Mac and Windows. And although like the API definitely allows you to use the same one, they made it very easy to say like, you know, here's the, here's the Mac version. Here's the Windows version. So you can do all that stuff correctly. I do have to yell at David a tiny bit. His icon on the menu was the wrong color, but I will reach out to him in private DMs. And not make, not make an ass of myself. [00:24:01] James: Oh, that's funny. Oh, I [00:24:04] Frank: like that. It's funny. Like, um, Mac apps, you just don't put it. I know it's a thing in Windows. You put an icon on all your menus. You just don't do it on Mac. We don't need the icons there, you know? And then he put the icon there and it was the wrong color. I'm like, David, David. Oh, come on, man. [00:24:21] James: That's funny. Oh my goodness. Oh, I like that. Um, yeah, I mean, I'm, I'm pretty much, you know, definitely excited about just the different items that came out. There's small things. I think for, for me, at least in the NET MAUI world, there's a lot of things that are still evolving with like the, the, the Visual Studio code support. And for this, you know, I think the one thing that's nice is the, uh, new getability of things. So my hope now is that as new features are rolling out, if you just want to like opt in to kind of nightly builds or whatever, you can try out new features as they're going. And I think that actually, to me is. We talked about it before, but to me, that's the biggest improvement, I think, in the flow, because, you know, I think if you're a Xamarin. Forms developer, I know I didn't talk about this in the keynote part, but I might've mentioned it in the session, but it's definitely in the blog posts and in the wiki and docs and things, but to me, As I was a Xamarin. Forms developer for a very long time, you know, I got to, you know, for all intents of when you're installing NuGet, you're pinning a version, right? So you're saying, I want to install this version. This is my version I want. And when NET MAUI came out, it was this workload concept and it was like the first one, right? I think there's a few other small workloads that are in there, but it's like a. Chunky. It's multiple workloads. It's a lot of work. Yeah, it is. And what it means is that when you install a specific version of NET and any of the service releases, that's when you're getting a specific version of NET MAUI. And which means if you want a preview version of those or something else, you have to, and then you can't really, it's hard to do, right? It just doesn't really. It's hard to do. So now for all intents and purposes, all you have to do is add a NuGet feed, which is their nightly build NuGet feed. And then you can just say, give me the latest version, or you can pin a specific version to it, whatever you want to do. Right. And you can, so you could do, you know, 8. 0 dot star, and it would just always give you the most recent one or whatever. You know what I mean? Or, or you could always give me the alpha or whatever dash star or whatever specific version you can pin it, which I think is nice, especially for. CICD scenarios when you're like, Oh, we've tested against this version. I'm good for a bit. X, Y, Z, um, because you may want to, you know, change and getting like service releases for other stuff, but you could always roll, you can roll back easier now, which I think is one nice thing in general to think about. [00:26:46] Frank: Is the plan, um, to stick with that, uh, for the long, long time future? Because just from my perspective. I would pin it just because I like to pin things and, you know, if it ain't broke, don't fix it kind of person, you know, if it's working for me, I'll, I'll just leave it alone. Um, so I feel like I'm just going to start pinning all my things. Um, but, uh, is, is that the, uh, is that the guidance? Is that the recommendation or is the recommendation to just kind of stick with, uh, what the runtime's doing? Do you think? [00:27:21] James: Good question. I don't know. Uh, I think. You know, when you look at what is in the box today, when you create file new, uh, it doesn't assign a Maui version. It just uses like the, whatever the worklet, it'll drop it down for you automatically. So my assumption here is that that's sort of the. Default recommendation out of the box. You know what I mean? Um, but I could be wrong. You know what I mean? I got a [00:27:49] Frank: feeling a lot of people are gonna be pinning to a new feed because we we've been wanting that. We've been wanting kind of versions that are easier to control with workloads. I, I get myself confused too. So I think it'll just, just for peace of mind, it'll be nice to force it. [00:28:06] James: And you can, again, the nice thing is that's if you, if you want the nightly, if you don't want the nightly and you're like, Hey, the current version that were released 12 days ago and we're recording this, you know, they're 14 now is 8. 03. So you could pin 8. 03 today and say, okay, this is. Shipping bits, and then your 8. 04 or 8. whatever might come out. And you can say, okay, I can change that if I want, and I can assign it X, Y, Z. But I'm like, okay, now I know I'm good to this version. Right. Cause they're all out on NuGet that are all out there. So that's kind of cool. [00:28:39] Frank: Yeah. Excellent. Um. Can I, can I tell you about my other favorite part of the, I haven't watched all the videos cause I'm very selective in the beginning. Can I, can I tell you, okay, two things, one, I don't think it's going to happen. The other one I'm actually excited for, um, as a performance freak, uh, it's nice to see that all the vector. Math is really nice in NET 7 and 8. They have a 64 bit vector class, which works on our pathetic little ARM processors. The tiny little Wii processors. They can handle it, but some of them can't even handle the Vector 512. There was a really good vector intrinsic CPU performance talk and all this kind of stuff. And I found it enlightening because I'd gotten very confused in what was supported in which versions of NET to the point where even though I am performance obsessed, I would never use any of the system numerics vector classes because honestly, I didn't know what worked and what situations and all that stuff. And I found that the talk was really good for outlining what is supported under what circumstances and they walk you through, um, perhaps. Maybe the code example was a little too complicated. I didn't really like how it turned out, but they showed you how to use the APIs and all this stuff and gave some guidance on it. And honestly, I just don't think that there is enough guidance on how to use these things. So it was really nice to just have a talk on it. [00:30:13] James: Now, is a lot of that work? You know, being done, I mean, obviously not for like, you know, for math and for graphics and things, but also for like the AI work and ML things applicable basically? And this is why I think it's evolving. A hundred million [00:30:24] Frank: percent. In fact, the word tensor came up there. And when you see the word tensor, you know, that's AI. Yeah. So, um, the, the, this is runtime stuff. So this isn't even Maui. This is kind of like. cross platform, deep down in the thing, how it actually emits code for the processors. I don't know if all this applies to Mono as well as native AOT and NET. It's all a little tiny bit confusing there. But what it really means is that you can write high performance code that's doing high performance mathy stuff, Without just crossing your fingers and hoping that the compiler is going to make smart decisions, you can force the compiler to make smart decisions by writing code that, you know, says, you know, use, use the biggest integer arithmetic unit you've got. Sucker. I need to, I need to get this tensor computing. I got some AI questions to ask. Um, I, so there, there is no like official high performance, um, tensor library. Um, but they did mention that they had rewritten most of system numerics to take advantage of even their own new APIs. Like they, they plumbed out a new, a new low level API and then rewrote The high level API on top of it. 'cause I think they said like some of that code was like old XNA stuff, you know, like some super Oh wow. Stuff. So they went back and rewrote it using the actual primitives. Uh, they did mention, like I said, a tensor thing. Uh, there are plenty of AI libraries for, uh, dot net. We've covered a few of them. On here, but it would still not be nice to get it really baked into the runtime, like have the, um, NET runtime performance freaks really applying all their knowledge to making sure we have a very fast numerical library for NET. We have lots of numerical libraries, but having one with Microsoft Workhorses, making it super fast would be really [00:32:26] James: good. Yeah, I mean, I mean so much right that even this specifically. Was brought up in the announcement blog for NET 8 too, right? That Gaurav put out too about the vectors. You know, he says in this, so NET 8 comes with thousands of performance improvements across the stack. And when he says improvements across the stack, each of those are linked to different things. I go to different blogs, right? Because there are blogs NET 8. There's one for ASP. NET Core. There's one for NET MAUI. There's one for like ARM64 improvements. So there's a new code generator called dynamic profile guarded. Optimizations, PGO, that optimize your code based on real world usage is enabled by default. That's pretty awesome and can improve the performance of your apps up to 20%. The AVX 512 instruction set, which I mean, that's in an announcement of, I mean, obviously this is important. It's in there, which I have no idea what this means. It says, which is now supported enables you to perform parallel operations on 512 bit vectors of data, meaning you can process much more data and less time. That's what you're talking about. Right. Um, not done almost on it says the primitive types, numerical and beyond now implement a new formattable and parsable interface, which enabled them to directly format and parse as UTF 8 without any transcoding overhead. [00:33:43] Frank: That's for the web people. That's for those server people. I don't, I'm trying to do some tensors over here. People there's dealing with UTF 8. That's a whole different thing. Uh, but that makes sense. Like, uh, decoding UTF 8. It's a big. Data processing task you got to do. Web server does a lot of it. Yeah. It [00:33:59] James: makes sense. And I'm still impressed, you know, when they talk about API performance as the, the, the crazy chart you see all the time with like the minimal APIs and the whatever, the JSON scenarios and the fortune scenarios. Um, but you know, the charts that they showed were, you know, seven over eight, right? So here's our eight or seven, which is the JSON nearly hitting a million. Requests per second. And then, um, um, 20, that's an 18 percent improvement and 24 percent improvement of the fortunes for Fortin's Fortin's I don't know how to pronounce it. Um, which, which is almost at 325. Thousand requests per second, which is just mind boggling. Right. You know, and there are teams that are using this, you know, across, you know, like micro, like Bing and stuff like that. They're, you know, all these graph, you know, Microsoft graph and all this other stuff that are using these craziness behind the scenes. And [00:34:51] Frank: if you're a weirdo like me, there were a lot of little performance tips. Like, um, I, I totally get span. I'm a span fan. Man, reference structs and reference return values, they're, they're weird. I write compilers. I totally get reference semantics, but they're a little funny in C sharp, and it's neat what clues you can give to the compiler, like, um, argument NET. Range exception. You know, we've all done it. If i is less than zero, throw argument out of range exception, that thing. Um, but there's also a bunch of static methods on it. Argument, out of range exception, throw if greater than. Uh, and those aren't just convenience, those are actually pretty big triggers to the JIT. To the thing doing the low level compiling, it takes those seriously. It knows those. It says, Oh, I'm declaring that this value can never be greater than that other value. Therefore, I can make these performance optimizations. And it didn't occur to me. I always thought of them as just silly little convenience functions. And now, you know what I'm going to do? I'm going to go through all my code and actually obey all those little green squigglies that tell me there's a better way to do this. So I'm going to be like, yeah, yeah, yeah. Do it the better way. So, uh, all you have to do is tell me it's going to be a little bit faster. And yeah, yeah, fine. I'll change the code. [00:36:20] James: Oh, that's awesome. Yeah. There's tons. I mean, there's a whole hour talk on just performance and there's other stuff. And that's just on the main performance. No, it's good. There's a whole bunch of stuff in there. Um, I'm also thinking in general. So back to the keynote, um, uh, Maria had a great AI section, talked about some big announcements as well. I, I'm not in the AI space, but I think it was like, um, what was the announcements? There were some like, [00:36:50] Frank: I, I can't even tell you exactly. Or then they showed off integrating the chat APIs into your apps and things like that. Um, I, I, I haven't felt, I haven't exactly decided how I'm going to integrate things like that. Um, so a little ahead of my time yet. I don't have any real strong opinions on adding chat UIs to apps, but if you're running like a store or something, it's pretty darned obvious rather having AI responding than a human. So yeah, if I was running like a proper store, just as that first line customer service, Oh my God. Yeah. I would totally integrate all [00:37:28] James: this stuff. Well, I think what was, there was a few cool things about it. I think that. What Maria talked about is like, Hey, like, you know, AI moves so fast that while there is new stuff that is better in NET 8, like there's been stuff all throughout the last year, two years bringing into AI, right? So I think that there was a lot of work in semantic kernel. That's obviously happened a lot that she showed off, but then also there was some new announcement around Milvus and Quadrant, which I have no idea what those are, but those seem like external libraries that are cool, like open API stuff or open AI stuff, but then additionally, I think what was. Probably the neatest part to me was learning about how the Bing chat and also Copilot use NET. They're powered by NET and like, that was pretty cool in my opinion. I don't, you know, a lot of people that I hear sometimes, I hear on the internet sometimes people like. Nobody at Microsoft uses NET. It's like, that's totally not true. You know what I mean? Just like there's tons of case studies on the NET website, but then additionally, like some of those, you know, sometimes it's not public. [00:38:32] Frank: Can I just, what, what, what, anyone who says that, do you think that they're running code in C over there? They're not. [00:38:41] James: Come on. [00:38:44] Frank: Of course, they're running things in NET. No, we're not going to, no, we're writing it. They're writing it in PASCO, you know, that's the language of the future. Basic. Everything's written in basic. [00:38:55] James: I mean, I'm a big, you know, basic person myself. Prologue. [00:39:00] Frank: Yeah, Windows was written in prologue. [00:39:03] James: I, you know, Pascal's great. I prefer Turbo Pascal personally, but that's just me. Fair [00:39:06] Frank: enough. Yeah, Delphi over here. [00:39:08] James: Oh, okay. That's cool. I mean, if you're not just writing in pure assembly, then, uh... [00:39:14] Frank: Yes, everyone, everyone internally, like, yeah, sometimes a React Native app will pop out of the company, but I tell you, like, I don't know, I haven't worked there in many years, you know better, but I'm going to speak as someone outside the company. Yeah, everyone there writes. C sharp dot net code. That's just like that, not everyone. [00:39:33] James: There's a lot. There's a lot. There's a lot. Um, okay. So the last bit and piece was cloud native. Um, you know, there's a lot happening at NET Conf. We're kind of oddly following some sort of tangent of the keynote here. Um, there was, we talked about a lot of improvements with native AOT. Fowler showed off a cool native AOT demo, a lot of container optimizations that have gone into it. Uh, in general. So lots of container stuff, lots of work that it went into like resiliency and open telemetry and all these other things in there. Now, Frank and I aren't web developers, although we are web developers, cause everybody's a web developer at some point, um, in general. But they announced a new, um, cloud ready. Stack for building observable production, ready distributed applications, AKA cloud native applications with NET. It's called NET Aspire. It's a cool icon. I'm very, I think it's a great icon, uh, in general, it's like little triangles, uh, in general, which is cool, but in the world of building cloud native apps, there's. Often to kind of say this for Frank, because Frank's trying to tell, I have to kind of try to describe what NET Aspire is. So in general, the, the hook here is that normally there's a lot of services that cloud native apps consume, a lot of databases, messaging, caching layers. And in the world today, you got to go off, figure out like, what package do I need? How do I configure it? You know, is it uniformity? Is it. Does they're all going to like connect? How do I make this component or this, um, uh, container talk to this? How do you orchestrate them together? How do I get all the metrics and all the things, all the lining communicating together into this world? How do I get the service discovery bits and pieces in it in general? So what NET Aspire attempts to do is say, Hey, listen, what we'll do is give you an opinionated stack of Nougat packages, basically, to help you create these. Applications that need orchestration. Um, for example, like running, connecting multiple projects with multiple dependencies together components. So you can add in services like Redis or Postgres or SQL or something like that. And then tooling, which kind of brings it all together, um, through visual studio or the CLI to help you basically give you a great tooling experience to make this all happen. So what this means is that you get. Um, A streamlined process of creating these cloud native distributed apps. So you get things such as the service discovery. So you can just easily give things like a name, like cash, for example, and when it registers, the red is cash, you just have to say cash. And that's it. It's just like keyed. It's basically keyed in general. You get like service defaults, you get health, uh, checks, you get telemetry out of the box and all these different things. But then what's really cool is that you get a dashboard that brings it all together. So you get all these metrics and telemetry and all these things all together in general. And I think if anyone followed project tie, which was really early on several, several years ago, um. I would say that this would be like, you know, to me, kind of like complete evolution, but even talking to a lot of people, getting that feedback for them in general. So when you're thinking about it, it's like easier ways of adding these components and some things are Azure specific, but then some things are completely not Azure specific at all. In fact, that's the whole demo that you saw of eShop. There was not one Azure part to it in general. Like when you go to github. com forward slash NET forward slash eShop. There's not any Azure bits. There's actually a whole separate repo that is eShop on Azure. 'cause the whole idea is that Aspire gives you those components. So the components that are built in outta the box are things such as Postgres, RabbitMQ, uh, Redis, SQL Server, um, with any of these, with or without, um, uh, entity framework. And then on top of that there's Azure specific co components like blob storage, cosmos. KeyVault, ServiceBus, StorageQueues, and the idea is that other cloud providers like AWS or community members would add more components or like third parties can integrate these in. And the whole idea is that it makes it really easy. So you can just like type Aspire dot, and then it'll show you all of the Aspire packages. So it's, you know, it's a search around. Oh, is it, is it this Redis one or this Redis one? No, it's, it's the one, you know what I mean? And then when you want to add Redis, you just say dot add Redis container. And then give it a name of cache. And it just like does it all for you automatically, um, simplifying it somewhat, but for all intents and purposes, it's kind of what you do. Um, and you can even add Aspire orchestration to an existing application. So you can right click on the project in Visual Studio and say. You know, configure Aspire into this, which is really, really nice. You don't even do file new, but I think it's cool as you get that developer dashboard, like I said, that gives you the containers, executables, logs, uh, metrics, all these different components. And I think during the demo, they kind of talk through the network calls and what's happening and when failures are happening, so you don't have to go build that yourself, um, which I think is. Pretty awesome. And they even showed how to add it to an existing application there. So, that's my high level, I would say, in general, right? Um, that I'm talking about. So... [00:45:04] Frank: Yeah, um, I, I have to admit I was a tiny bit confused by it because from my perspective, um, ASP. NET was already very componentized. They, they did the whole IOC thing where you're always registering services when the app starts up, you register some databases, hopefully they work and things like that working. So they've already worked over the years. I think I mentioned it to you. I'm like, I feel like we've been working on this for the last. 10 years because it's, ever since NVC it's been very componentized. It's always been service based and all that kind of stuff. But I guess what I'm hearing is, they're trying to raise the abstraction level a little bit higher, whereas in ASP. NET Components we're for building up that one server. This sounds like it's trying to be a little bit More like, uh, instead of just one computer, multiple computers. I need to look into it. But from my ears, it's sounding like a Docker Compose kind of thing. Like, let me set up multiple services all at once, not just this one service that I'm working on. So hopefully it would help with the communications. I'm assuming the discoverability is. I got to bring everything back to Apple terms. So it was like some kind of bonjour thing where you can actually broadcast your, the services that, uh, this machine or this virtual machine actually, uh, produce and consume. And then it weaves all that stuff together. Um, I'm going to have to look into this puppy because that's about as far as my understanding goes. [00:46:31] James: Well, one of the cool parts to the service discovery that I think it really simplifies is that. If you are in a microservice, you know, cloud native type of allocation, you also often have like multiple services. So like in a shop, you might have a front end, which is a service itself. It's a container. And then you have a catalog service and a basket service. So what you can do is you kind of have this app host project that is like registering everything. So it's like, here's all this stuff. That's kind of like plays in the middle. So this middle project kind of is referenced by everyone and kind of like can figure it out. But what I think is cool about this. Is for service discovery, what you end up doing is, is it's, um, service discovery by reference. So what that means is that you add the project as a reference, and then you say builder dot add project, and you'll say catalog service, and then you give it a name of catalog. And then in your, in your project where you want to consume and connect to that, you just say dot add HTTP client, and then you give it. You know, HTTP colon slash slash basket. And then that's the name for it, basically. So you can easily go and find that. And then you can even have like a dashboard basket or whatever it is, X, Y, Z. And go connect to those things. So that makes it really, really easy to connect to those different services that are out there. And they kind of do that and streamline the process for those other components. So when you're adding Redis, it's just like add Redis and then give it a name. And then you can go, okay, go find the Redis. NET MAUI, James Montemagno, Xamarin, Forms, Xamarin Forms, NET MAUI, James Montemagno, Xamarin. Source, NET MAUI, James Montemagno, Xamarin. Source, NET SER. So we're [00:48:11] Frank: just kind of this one. I feel like we definitely have to do a follow up episode on this one, but I, honestly, I just have to give it a test drive because inevitably in my life, I love to do things the hard manual way, you know, give me a thousand page Jason configuration file and I'm happy. No, it's not true. But, um, I, I would have to set up, like, in my head, I, I have, yeah, when I make a web app, I have three or four services that I pretty much always spin up. And it would be nice to see just how small of an Aspire app I could make those and, uh, see how it does. Um, I gotta tell you, I'm not a hundred percent sold, but I think we should totally do a follow up, uh, and so I can get my feet hands. Dirty feet and hands, dirty, both of them fall [00:49:00] James: right into that mud. What we really need to have is either Glenn or Fowler on the pod, I think, because they're the ones that only demoed it, but you know, I got to. And, you know, behind the scenes and a lot of engineering calls and things like that, and, and understand it a lot more. And, and again, I'm not a cloud native developer. I can talk some of the lingo a little bit more, but I'm not doing containers and Kubernetes and all this stuff every day, but there are people that are right. My hope here is that for me, as a developer that wants to kind of go into a cloud native route or understand microservices, my hope looking at is that it simplifies it for me, but also. makes it so it is extensible for building really, really large cloud native applications. I think that's the hard part. Like for me, when you jump into cloud native or microservice, like there's a lot of different things that are important in that space. Like resiliency these things. But when I just talk about like. Just the connections in this and all these containers, like I want to make it easier for me to understand that and have that dashboard and kind of get it a little bit more. And I'm hoping that it helps me get into that world or anyone into that world easier. But as my app grows and scales, you know, it grows and scales with me. And I think that's their focus. I think. It was smart [00:50:19] Frank: of them to put that dashboard in because that has been a complaint of mine about ASP. NET forever. Like, you can spin up your own server very fast and all that, but they never give you that admin server, you know, that a few other libraries would give you. Just give me a backend server where I can like configure things and do things and monitor things, check for errors and that kind of stuff. And I feel like ASP. NET has missed that for... Basically its entire life. So it's fun to see them take this kind of UI first thing, like, okay, we're going to give you a dashboard and we're going to connect all these things to it. And so it's, it's good that they're starting from that perspective. I think that's at least the right direction to attack it from. [00:51:01] James: Yeah. And I also thought. And when you watch the keynote, I think it's also really cute because like I was part of the keynote, obviously, but like one, there's a lot of hidden Easter eggs. So like in the very beginning, if you go back, I know all the Easter eggs. So, so there, and then honestly, I've reviewed the keynote so many times that I missed some of the, I missed some of the, I missed some of the, the hidden Easter eggs, even early on, cause I wasn't in person for the recording stuff of it. But. Um, one is that in, in the early slide where they show the reference architecture for, um, the eShop, there's actually a little Aspire icon. Like in it. Uh huh. Right. Gotcha. Um, so there's a little, little one and if clever eyes, Oh, what's that? You know what I mean? And a lot of the projects, it was there too, but no one really, you paid attention to it or knew what it was. And then additionally, there was a lot of, um, wordplay with the word aspire. Like, like in the beginning of the cloud native things, like, I think Damien was like, we aspire to make NET the best cloud native stack, you know what I mean? So that was cute. But then additionally, I don't know how many times you saw it, but. Mr. Scott Hunter made special appearances in the background of, he made an in person one. And when they're talking about a spire, he just kind of showed up and they're like, cool. Thanks a random guy or whatever. But then if you watch early on, like Hunter is just. Kind of, it's kind of blurry background, right? Cause of the production was so good, but you can kind of see him, like, he's like kind of like go and he's like look at like peering from the, the background and doing this stuff. So, and I saw a lot of comments on Twitter, but it was really entertaining to kind of see those hidden Easter eggs kind of through, there's a lot more that, yeah, I won't go into, but like, you know, there's pretty, some pretty funny stuff. Yeah. [00:52:47] Frank: Well, there were some obvious ones, too. I think, um, David Ortnow had all his drag and drop icons for, like, famous Microsofties. So, I'm glad everyone had a good sense of humor with all their demos this year and kept it light and fun and all that kind of stuff. Yeah. Yeah. We'll see. We'll see about this Aspire. I'll give it a shot. We'll see if it changes me. I mean, I have to admit, like, I wish, I wish it was the nineties and I could just put up a web server, but man, websites take 8, 000 services to run these days. So I get it wanting to orchestrate it all under, um, a new hub or whatever you [00:53:27] James: want to call it. Um, all right. Well, I think that might do it for this week's podcast. Let us know what you think of NET Confer. I need to go watch all the videos. There is an entire Aspire talk. So you can go watch that. I think it's, what's it called? It's called like, I don't know, some, it's with. Glenn and Fowler, so you can go find it and it's on there. Go find it. Go do some stuff. Let us know what, you thought of the conference in general and any private sessions, uh, favorite sessions. Let us know, go to mergeconflict. fm and there's a contact button right into the show. If you want to see other topics, let us know as well. We'll totally break it down. If you're on YouTube, leave a comment, um, in general, we'd love that. And tell us some friends about it. If you like this podcast at all, it really helps out. And if you want more of us, you can follow us on YouTube at youtube. com forward slash at merge conflict FM. You can also follow us on a Patreon. If you wanna become a patron, give us five bucks a month, or $2 a month, or, I dunno, $1 a month, whatever. It's, I know it's something low. Uh, you can get bonus, uh, episodes and all the episodes early, but that is gonna do for this week's merch complex. So until next time, I'm James Bons Magno. [00:54:33] Frank: And I'm Frank Krueger. Thanks for watching and listening. Peace.