megeconflcit398 === [00:00:00] James: Welcome back, everyone, to Frank Krueger's Spatial Reality, which is, I guess, part of this podcast. I don't think I'm actually inside the headset. You're just looking at your laptop because I see your laptop. Is that correct? [00:00:12] Frank: Yeah, I'm still, I'm using computer monitors like an old fashioned person. It's a little bit frustrating. Last week, I sang so many praises about the virtual monitor. It has one downside. It's a little flaky. It doesn't always reestablish the connection. And all that. And I often get frustrated enough that I don't bother reestablishing the connection. But yes, here I am with an old fashioned monitor [00:00:38] James: in front of me. How is this? How is this, whatever this is right now, you looking at monitors and working in monitors? Is that, is the thing that is enjoyable? Oh, yeah. [00:00:49] Frank: It's perfectly fine. Um, I do, I want an app to zoom in and enhance, uh, copyright, Frank Krueger. No one else write it. Zoom. Zoom. Zoom. Enhance. Everything else is great, but like, you know, I got things on my head. I want some binoculars. You know, I want the fonts bigger. That's the whole reason I like the virtual monitors, because I can make the monitor [00:01:13] James: huge. That makes sense. That makes sense. Yeah. Um, all right. So a week in, let's get a quick recap. We're going to get into NET stuff. We're not going to be an Apple Vision Pro podcast. Beefball. Nope. Not gonna happen. Not this week. NET this week. Um, but, but let's get a quick little recap for the folks that are really interested in the Apple Vision Pro. You're one week into this grand adventure. Yeah. How's it going? [00:01:38] Frank: Uh, I, I, I'm enjoying it. I've learned I do have to take some days off. I can't live 100 percent in spatial reality. But that's okay. That's fine. It lets me use the old fashioned world and get acquainted with the real world again. But otherwise, I do actually love to have it on. I'm sticking by the phone feels old fashioned compared to these. I'll even put these on to listen to a podcast because I don't know how the audio is good, but the audio is good. I have no idea what it sounds like to someone. If someone else was in the room. Fortunately, there's no one else in the room, so fine. And I've learned there's a lot of tricks to writing apps. I've been testing all my apps and playing with new app ideas because once you have the device, obviously, you're a little more in tune with what's good on it and what's bad on it. And there's some Obvious apps that I just kind of want to write [00:02:34] James: now. That's the, that's the joy of getting the actual devices, any device playing around with it, you get that real sense of like, Oh, idea, you know what I mean? And like, I want this. And often, like I always like to say, the best applications are ones that you want yourself because when you're motivated to build it for yourself and hopefully other people like it, hence. Numbers on a screen, Frank, which is my middle name, um, which are the apps that I build, as we all know. One thing, MKBHD did a video, sort of his one week recap, that I wanted to just, um, talk to you first about if you agree, and then also, now that you've had a chance to play around with Reality Kit and other things, kind of comment on this type of development that you think would be possible or maybe not possible. So, first thing is, does the device. make you feel kind of alone inside this spatial reality? Do you kind of feel a little disconnected or alone without having shared experiences inside this thing? [00:03:38] Frank: Uh, I haven't. So the answer is no, but I haven't been in a circumstance where I think that would get triggered because if I was in a busy intersection and I was, I'm sorry, I'm thinking of the Casey Neistat review now. Yeah. The intersection and just playing around in, uh, spatial reality. I think there would be a funny disconnect, um, between those in the know and not in the know. Um, but, uh, when you're, when you're by yourself, no. Um, the, the cat even doesn't seem to mind me. The cat still makes eye contact, which I find hilarious. So animals seem to be able to pick up on. Oh, it's just a human wearing weird goggles. [00:04:21] James: I like that. Well, MKBHD specifically I was talking a little bit about that. There's a sort of lack of shared experiences in this device. For example, you are very much aware of virtual reality devices, very popular experience might be like Rec Room, for example, where you can kind of jump into this virtual world, you run around, you hop in, play some games with people, et cetera, et cetera. There's two instances in which MKBHD specifically. Talks about what could be an enhancement maybe for V2 or maybe even V1 in a software update. Now he's like, I don't really know what would be possible today. And maybe you wouldn't know you've gotten to play around with reality, getting the hardware. So there's two types of experiences. The first reality experience, the spatial reality experience that he talks about is two people with the vision pro on you and I in the same room. In the same room. So we're both together in the same room with a vision pro on. Today, there's no shared experiences. And what he means by that is imagine Frank and I are both wearing our Apple vision pros and he, Frank takes his eye circuit. puts a circuit down or puts a ball down or puts a drawing of a map down. I don't get to experience that with him, right? There's no multiplayer mode on there. So that's the first experience in. And if I could experience that together, how would that work with these spatial anchors? [00:05:51] Frank: Right. So, um. It's true. I, I, personally, I haven't been around the App Store enough, honestly, yet. I, I haven't been doing what I said I was going to do and look at all the top charts, but I would say from the apps I've tried, they are very much solo apps. That said, Apple has a wonderful sample. I love it when I can shout out Apples. samples. Um, it's a weird game, some clouds attack you and you have to shoot the clouds with some rainbows. Um, it's, it's an overdone Apple sample, but it's a full game. And the neat thing about that game is that they have a whole new connectivity API. And the name of it all is slipping my mind. Honestly, we should do a whole episode on it because it's kind of interesting. And if you architect your code with that in mind, I think it's actually pretty simple to create shared experiences because, um, they handle all the nasty networking kind of stuff. You're guaranteed two channels, a reliable channel and an unreliable channel. This is classic, uh, game networking kind of stuff. Uh, and you. Just pass messages between the people in the room. There's some kind of lobby thing where you can all join up and it, oddly enough, I think happens through the FaceTime API. And so I'm actually really curious. It is definitely meant for two people in the same room. It can handle that. I'm curious if it can handle the remote thing. Very well. So that's stuff I still want to play around with that I haven't gotten to. Um, but I would say Apple even has a sample for two people with 3, 500 Vision Pros in one room so that they can play [00:07:38] James: together. All right. That'd be that, that, cause that kind of makes a lot of sense to me. Like one example that, um, Marquez talked about was the. The night sky application where you can see all the stars in the night, you know, if you're a bull sitting there, like there's actually a mode where you're going to have a pointer and you can kind of do like what's in the night sky together, but you can't do it together today. Right? So that's like, seems to be a new API maybe needs to be featured. Cause ideally you want to share the sky and share the pointer and hand the. Point your back and forth in the shared reality now, that'd be kind of cool. And now that, that's one example that's kind of overlaying, but the other example is like, hey, we're looking at this, you know, diagram or whatever, and we're looking at it together and you're manipulating it. I'm manipulating, and it's, it's, you know, yeah, good to go. The other real one, which I think is much more realistic, and I have to be, I have to imagine it would be extremely doable today, and there's maybe some apps that will already do this, but it's, we both are. Having a vision pro and we are in separate rooms, separate locations, separate States, separate countries. And we're sharing a virtual reality and experiencing it together. So in that instance, the night sky application is perfect because it's, we're both looking at the night sky. And maybe we focus it on together in one area, we can zoom around and we're each doing stuff together, right? We're in this virtual space. That to me is just normal virtual reality stuff, right? [00:09:02] Frank: Yeah, you run into the issues of teleportation though. So like night sky is tricky because the night sky, if I was talking to someone in Texas, it's a different night sky. Um, that [00:09:11] James: example, Frank, but you know what I meant. Like we share one I know, I know. We, okay. We have a globe. There's a globe that we are sharing in a virtual space and we're, we're walking around the desert of the Mojave together. I [00:09:23] Frank: was getting to, yes, the teleportation aspect is kind of fun though. You could say here, you come see my night sky or you come see my night sky. And you can kind of share it that way. So you can play around with teleportation. Yeah. Uh. I need to do some more research. I can't speak confidently on that one. Like I said, my best knowledge comes from that sample app that was definitely focused on people in the same room. Uh, but, uh, definitely, definitely need to find out, uh, it, I'm, I'm a little bit sad that Apple didn't do yet another social network. It's, it's a huge project, but like, Ping 3D or something like that. So we could all just join a virtual space. It's a little sad that there isn't just one big, uh, Apple virtual space, but I also understand why they didn't undertake such a massive [00:10:11] James: venture. It's hard. I mean, I think that if you. I know they have like Horizons on the meta quest, right? I mean, there's a lot of always mixed reviews once you enter that space. I mean, even the FaceTime, the persona thing, you know, is getting different things. So whenever you are doing anything like that's under different scrutiny, that is for sure. Um, but cool. I mean, it's a interesting video and his perspectives. Um, he also thinks it's going to be a once in every few years device, like three years device, which is fascinating to me, which Could be true. Get those [00:10:47] Frank: sales numbers up, you know, get it commoditized. That's fine. It's okay. Cause it's a decent device. Maybe it'll come down 500 next year. That'd be nice. [00:10:57] James: Yeah. I mean, he pointed out the fact that between the different meta devices, the meta quest devices, they took quite a long time in between. Right. So I think that. You will kind of see how it plays out. I'm glad that you're enjoying it. I'm excited to try it. If you ever come visit me. [00:11:11] Frank: Oh yeah. Okay. You had to start the guilt trip. I, I did want to make one last point to your last point though. Um, it's kind of nice coding for a single device right now. Uh, you can. Take shortcuts and you can tune it, like I know it's going to run as well as it runs on my device as it's going to run on everyone else's device right now. So I actually really appreciate, like I know exactly how much RAM everyone has. I know, I know all these details. Uh, so I love being able to tune an app to a specific device, uh, without having to worry about. Like, uh, the second one that comes out eventually, and then I'll have to start changing the code to tune it to two devices. Yeah, [00:11:54] James: you know, I think it's very fascinating that you mentioned that because to me, it reminds. Myself of council development. There's one reason in which council development is unique is because everybody has the same hardware. Uh, and that is really unique for game developers. One of the problems that on PC, and maybe not so much a problem now, but still kind of a problem is there's bajillion PCs of all different specs, different processors, different GPUs, different memories, different operating systems, different security patches, all these things. So. You know, things have come a long way in compatibility, but you're still developing against that, right? When we're building Shred Nebula, we're building it for the Xbox 360. And guess what? The Xbox 360 was the Xbox 360. Now some could say, okay, well, there's the Series S and the Series X, but it, you know, it figures it all out basically. It took some years. Yeah, but even still two pieces of hardware that are just basically, you know, different, you know, different scales or whatever, you know, you do some things are much more than the variety of devices that are out there. And then some might be saying, well, there's not that many iPhones. Oh no, but there are, you're thinking you got, you got all different. You know, iPhones, Pros, iPads, you know, that. And then you're not even throwing in the world of Android devices. [00:13:12] Frank: I haven't released an app yet, so I haven't gone through the screenshot, the wonder of creating screenshots for your apps. You know, it's incredibly important to people purchasing your app at the same time. God, I hate creating screenshots. Anyway, um, I was just thinking one of the pain points with iPhones these days, well, they've cleaned it up a little bit. In the UI, but it used to be, you had to create five to seven to nine different sizes of all your screenshots for every device. I think even if we get into Vision Pro 13, the world is the world. Um, the screen size is never going to change the resolutions might change, but you can always just upscale, but it's not like the dimensions are going to change or anything like that. So it is kind of fun actually programming for a vaguely stable screen resolution environment. And that screen resolution is the size of the planet. [00:14:07] James: That's true. Yeah, it's, it's cool. I mean, I'm excited to see the experiences that come out of it. You know, it's not like the first headset in the world, but that being said, First headset from Apple on this. Bigger app ecosystem and just the SDKs. You know, I'm, I'm excited to see what happens at WWDC because now that the thing is out, they have the ability to, you know, release some new kits, if you will, uh, SDKs into this puppy, some frameworks into the SDK, I should say. I don't see my terminology. Correct. And. Really, um, expand on some of these things and experiences that developers want to do. Like you can do a lot of things manually, but often Apple creates these beautiful, you know, frameworks that make it easier to do those experiences. So who knows if we will have a updated experience to do the shared spaces and really for that is just the, the pinning and the location awareness aspect of it, which again, you know, as long as that data is being flowed accordingly. You know, should be okay. So I'm, I'm interested to see how that works out. Now, have you left the house with the Apple Vision Pro yet? [00:15:12] Frank: Oh, heck no. Uh, I do see a lot of brave individuals on the internet doing it, but I haven't had the guts. [00:15:20] James: Okay, cool. Yeah, as I said, battery's not going to last that long. Um, cool. Well, I'm excited that you like it. I'm excited to try it. I'm excited to get into your spatial reality, Frank. Um, so thank you for the update. We'll keep people updated. If you have questions, you can, of course, write into the show. Um, as always, we love that stuff. Um, episode 400 is coming up. Frank. Okay, it's coming up. It's coming up. [00:15:45] Frank: Are we still going to do a lightning for 400? But wow, yeah, we vaguely celebrate our hundreds once in a while. Yeah, every hundred or so episodes. [00:15:56] James: Eh, 400 potato potatoe. Um, so we'll see what we do, but yeah, definitely right into the show. Leave a comment on YouTube and let us know, uh, what you think. If you have questions, we'd usually do lightning topics. We'll do all the things. Maybe we'll live stream it. Who knows? It'll be an adventure. Um, Frank, we're recording this today on February 13th, one day before magical Valentine's day, which is a day in which you get to eat chocolate and not have any guilt at all. Um, That's what it's for. for. I [00:16:23] Frank: was curious. All these years. Okay. That's [00:16:25] James: all it's for. [00:16:26] Frank: like little pink cards, but I guess the chocolate's good [00:16:29] James: too. Just chocolate. Yeah, that's it. Only just chocolate. That's what the whole day is for. Now, um, so, uh, today. The 13th. This is almost a week ago, a week ago, a week ago, if you will, almost. Um, we talked about how earlier in the year we tried out early alpha beta builds of NET 9, but, um, we got some previews. Preview 1 has dropped, and in fact, not only the, the, the preview, but there's a whole vision, uh, for NET 9 that the NET team dropped on the NET blog today. Um, which is a little bit of a different So, this was like, um, a new kind of, uh, experience that's out there. Uh, to get up to date, there are brand new announcements all over GitHub discussions as well. And you said that you got to dive through some of the uh, things. I was very close to this process with an amazing team of people. I might say that I spent many, many hours with an amazing service and release team. Oh, PM and engineering team. Seeing how all the things are released and it is fascinating, um, and awesome all at the same time. So I'm very close. I'm like. I'm as close to, you know, I didn't write any code of this release, but I'm as close to the things, you know, surrounding this release that came out today than I ever have been before with, with other folks. So that's really cool. So, uh, you saw some, some news, you saw some posts, some things, Frank, what's the word? [00:17:52] Frank: I did see some things. Um, I don't know which of the things that you're trying to take credit for there, so I'm just going to tell you what things I saw. I take credit for [00:18:01] James: nothing. Um, I just simply worked with a lot of people, and they worked with me, and a whole bunch of awesome stuff kind of happened. [00:18:09] Frank: You should take credit for one thing. Cause I did see a tweet that you posted and you're like, Hey, NET 9 preview one is out. So I'm like, Ooh, I'm, I'm actually interested in that. Uh, yes, you are correct. We have been running the NET 9. You and I, I think we're a collective person at this point. Um, it's funny because every time I do a NET new project on my computer, it's a NET 9 project. I'm like, Oh geez, I've meant to uninstall that for the longest time. Cause I've had the like, oops. I think like the very first release of it, like a pretty early one. Uh, so I'm going to be very happy to get something a little more, I assume stable since it's a preview one. I don't know. I don't know how Microsoft names things anymore, but that sounds more stable than my like, Oh my God, hot off the [00:18:58] James: presses version. [00:19:01] Frank: Uh, yeah, so your, uh, tweet led me to a GitHub post from Rich Lander, friend of the show, Rich Lander, and it was neat. Uh, they broke it down into nice, easy to digest categories because usually it's a really long blog post that I really can't get through, but I like the organization here, so they broke it down into, uh, NET SDK. Runtime, Libraries, ASP. NET Core, NET MAUI, of course, and then Data and EF Core. And each one had a set of release notes and you click them and you read them and you're like, Oh, so that's what's changing in NET 9. Neat. It was so organized. I love it. It sounds a little banal what I'm talking about, but I don't know. It never felt this organized before. [00:19:50] James: Nice. Yeah. I, um, excited to hear it. This is the first review of this new process. I, you know, there's a, of course, a few people like responded here and there, but, um, hands on from Frank Krueger. Yeah. So there was a series of things. Yeah. So there was, Um, there's, there's, uh, the, the NET core repo, not to be confused with NET core, but the core of NET repo. Uh, this repo has actually been the home of release notes just for NET. They've been mostly small, like kind of point in time releases, service notes, release notes, things like that for a long time. And, um, now when you dive in, it says what's really cool is if you've ever gone in this repo, cleaned it up a little bit, but there's a release notes folder, and there's one, 1. 1. 2. 1, 2. 2, all the way to 9. 0 and you click on 9. 0, there's all this information about getting started, installing, known issues, Linux packages, support OS, and then there's a preview slash preview one. And yeah, you dive in there and it's like, here's the release. Here's ASP. NET Core, NET MAUI, all these things. You just dive through. There's all these nice little things inside of here. But more importantly, there's GitHub Discussions, which is actually where the announcements were made. And like you said, there's one main one here in this News Categories on this repo, which highlights that release. But you also can go in to each of the announcements, which are inside of the repos. Like, how much sense does that make, hopefully, that the discussions around ASP. NET Core take place in the ASP. NET Core? Place where you can file an issue. You can have a discussion. You can look at the code X, Y, Z, and all there's all these announcements for it, which is cool. Um, so that, that is, uh, is pretty nifty. So there's that. But then additionally, one thing that's really, really neat, um, that I might point out that you may not have noticed is that there is what's new documentation. So obviously for preview one, kind of. Mostly whatever's in the release notes is probably what's new, but there's like a, what's new in NET 9 and NET MAUI and NET 9 and blah, blah, blah. And you can click on that. And what's super neat about it is it's sort of here's updated for whatever the current releases, right? So it's like, if you want, if you're just coming in and preview five, you don't care about preview one through whatever you just care about what I'm installing now today, and that's what that puppy is there compared to. All of the release notes for every little thing if you want to follow along at home, which is super duper nifty right there. So that's the plan. Yeah, [00:22:22] Frank: it can always work both ways for me. Um, when I'm in the mood, when I'm really like when it's getting near release time or just when something first comes out, I usually watch all the release notes because I find them fascinating and it's fun and it's interesting. Um, but toward the end, obviously, you just get tired of reading all of them. So it's good to be able to just get the overall summary just at the end. And I already noticed that, uh, because the NET MAUI didn't have any specific release notes for 9. 1. I think, or why am I calling it 9. 1? Uh, 9. 0 Preview 1. I think the release notes were bug fixes and improvements. Uh, go read our What's New in 9. 0, because that's the real document that tells you all the real changes. Yeah. [00:23:09] James: Yeah. Sort of feels like a cohesive family of releases, right? Almost. [00:23:16] Frank: I like that the, uh. The library's discussion goes to the runtime repo, so it's not a perfect alignment between the categories and the repos, but at least you get put to the right place. I didn't bother with the discussions. Um, with, with these big NET versions, I'm, I'm mostly just rah, rah, keep going. Let me know when it's done. [00:23:37] James: Yeah. Yeah. No, I think that makes a lot of sense, um, in general. And that's sort of the nice. You can kind of pick and choose as you want. Um, and you're right, like, I was pretty excited with some of, some of the few things in this, uh, release. So we kind of dive through it, you know, at least for NET MAUI, like you said, there's not a big game changing thing inside of there, right. You dive through the release notes and you know, what you'll see is that, you know, there's just Focus on quality, basically all up that's going on there. And you can take a look at the, the Android and iOS ones, uh, which is, you know, which is nice, uh, to see. And you can take a look at the, the GitHub release if you really wanted to dive through stuff. So not a lot happening inside the, the Maui stuff, but I wasn't expecting the NET 8 one just shipped, you know what I mean? Like what was, well, what was your expectations? I guess, um, a little bit. In this preview, were you expecting like, and here's a 5 billion new things? Or did it kind of meet your expectations? Where it's like, Hey, like, you know, here's a bunch of stuff. [00:24:35] Frank: Yeah. Well, once again, I'm not a hundred percent clear on the naming conventions. Like, I don't know how it is different from the, God knows what I was using before. Um, So, um, I, I, I was prepared to be wowed. I, I, I, I was open minded, I should actually say. That, that's what I was, um, I, I was curious because, um, my expectation was a little bit of the, uh, what's new in 9. 0. Yeah. Uh, so I would make sure that those links are at the top of each article, uh, for the actual release notes. Um. But I, again, when you say release notes, I understand what release notes are. They're a diff. They're a diff since the last big release. I don't actually know when the last big release was, so I was like, well, let's see what's changed. Probably since my janky old version. And, um, I don't know, there were still cool things to read, but I would say my expectation expectation was, uh, a complete diff from 8. 0 basically. [00:25:41] James: Yeah, I think, I think so. I think actually someone did a pull request for complete API diff that would be added into that as well, which is kind of cool. Um, yeah, in it. One thing that I actually Yeah, go ahead. [00:25:54] Frank: Oh, no, go ahead. I do want to get into, um, the actual salient changes. I don't want to spend all the time just talking about the wonderful documentation structure, but please. No, [00:26:04] James: I'm ready. The one thing that I'm actually excited about is some SDK Updates, like command line updates. And Frank, I know what you're thinking about James, talking about command line. [00:26:15] Frank: That's the one I wanted to talk [00:26:16] James: about. Well, there's two, there's two big updates in it. Now the question is, which one am I excited about? And which one are you excited about? Ready? Well, truthfully, [00:26:24] Frank: I'm excited about both. So, okay. Ready? Let's see how our connection is on this. Three, two, [00:26:31] James: one, terminal. Automatic tool upgrade. Okay. Uh, well, I'm excited about both. Um, you'll explain why you're excited about the other one. I'm excited because one thing that I just like, I like the NET global install tool. There's a bunch of them in there. One of the things that I think was always kind of Out there was the only way to like upgrade different things was you had to run NET tool update and didn't make a lot of sense, but now you can just run NET tool install. And then you can have it, you know, go install a specific version. It'll upgrade it to the latest version, or you can also allow it to downgrade, um, to an older version if that tool was already installed. So, you know, easily stuff like that. So easy peasy, just a nice little quality of life. Let me [00:27:19] Frank: say why I love it, because A, I can never remember if it's update or upgrade, who can ever remember that? And I can never remember if you gotta do dash dash or not. I use way too many package managers for way too many programming languages. And they all use slightly different terminologies. Update, upgrade, dash dash, no dash dash. Thank goodness, this is what installs should have always done. Good change. Quality of life improvement. Should have always been there. Hashtag finally. Okay, so now The proper change, and I'm making a lot of assumptions here because I haven't actually tested it out myself, but the fancy terminal logger Is going to be turned on by default, and this terminal logger is finally, so says the documentation, going to make the output from builds and everything easier to read, um, just better, just better, when you're accessing builds from terminals, which we, I do. Constantly. All day. Every day. Uh, it's my life. Um, I'm a weirdo like that. And, uh, it wasn't on by default because, you know, if you're piping out the log, then you don't want all these, like, terminal commands in your log files. Uh, but I guess they feel confident enough in their detection support now that, uh, it's on by default. And I want, I want fancy terminal stuff because I love the terminal. I'm [00:28:44] James: a terminal person. Yeah, it's been a year, over almost a year since it was released actually in NET 8 Preview 4. And that's what they link to, which is a really nice GIF. And I will say it is, it's a very nice output. Like it gives you, you know, timing and succeeding. And it kind of like overriding itself. And it's just like very much. More digestible? [00:29:10] Frank: Is that the word? Digestible. Yeah, it's just, I mean, it's still going to fill your screen, but it fills your screen in a more animated and fun and pleasant way, so yeah. Digestible. We'll go with that, I guess. Yeah, it's very, very nice. I don't feel like I'm pitching it well enough. Console improvements are good. They're just good. The old output was Boring and long and, I don't know, NET error messages get long. It's nice to tidy it all up. [00:29:41] James: Yeah. Um, I'm pretty impressed with lots of JIT improvements, Frank Krueger, JIT, just being all over the place. So much JITing happening in the runtime. Now I will say this, I, because you know, the SDK is a separate file, I can kind of like really do this, but yeah, JIT, so much stuff, tons of optimizations. We got ARM64 SVE, SVE2 support and, uh, allocator improvements inside of NET 9. Like just so much JITing. And I like the details of the release notes that the team went into with Ryu JIT. Um, And how it worked and what the upgrade was and the improvement. So like, uh, for example, like register allocation, right? Like, you know, when you start up your application, the JIT needs to go and it needs to register, um, through the, it needs. Yeah, it needs to basically, you know, go through this register allocation phase. And it's really important for generating performant code. So it does this all the time, but they've gone through and they've done a bunch of optimizations here, um, in this preview one that basically enables up to a 10%, um, you know, throughput. Um, improvement in this, um, register allocation process, which is pretty awesome, um, [00:30:58] Frank: to see. For those who don't love researching processors, let me, uh, let me give you the silly version of it. This is, this is like compilers. This is compiler theory. This is the fun stuff where, um, computers want to operate on registers because those things are fast. But there's only so many of them, so you gotta be, the compiler, the JIT in this case, has to be really intelligent about which ones it uses and when, uh, because the bad thing is, if you, if you need to use more variables than you have registers for, then you have to start using the stack, and the stack is memory, and memory is much slower than registers. And so register allocation, it's, it's fine. I'm sure someone had to pull out their hair for a year to get that 10%. But that's a big deal. 10 percent just out of register allocation, because that's just going to affect everywhere. And, and you went fast over it, but that SVE thing for ARM is pretty cool because, uh, vector, vectorization. Again, just getting more out of every clock cycle on these computers. It's good. Efficiency is good. [00:32:04] James: And, you know, so SVEs are Scalable Vector Extension, um, this is for ARM devices and ARM64 specific, like, you know, um, specification basically, but it's really focused in on machine learning and high performance computing. So, I think that there's a lot of things. If you actually read the Vision document for NET 9, there's a big, um, The two main key focus areas besides performance are AI and cloud native development inside of NET itself, right? And I can imagine that, you know, part of this is we think about, you know, as we're processing things. You know, having this type of support in for this sort of high performance computing and machine learning kind of goes really nice. Now, SVE2 actually extends it. And they write in here that it's actually meant for more domains like computer vision, multimedia, and just even just general purpose software beyond that. So that's kind of cool that you just kind of now get the support from the JIT and it's just in there, which is nice. [00:33:05] Frank: Yep. That's always kind of been the benefit of NET. We ship around everything as IL so that the little JIT can just come along and improve things and just make everything faster and better. Uh, so it's fun to see that actually happening. JIT stuff. ReoJIT. I'm still living the AOT life, so I'm just, I'm a little bit jealous of all the people running on big servers that get to all the benefits of ReoJIT. Yeah. Uh, change of pace. Yes. Link, link improvements. Yes. They're, they're improving the link. We, we, uh, link, link is everyone's favorite query language. It's, it's the only one people, no, I'm just kidding, F sharp has one too, but, uh, link is the best. Uh, and we got, uh, two new functions. And I think this is fun. This is definitely like. A diff, a release notes diff, like two functions. We're going to spend time talking about two little functions, but they're good little functions. I'm glad, I'm glad they got added. Uh, count by and aggregate by. Let's just do count by. It's like doing histograms, quick little histograms. So in SQL you could do a group by, you could have your having clause to do some filtering, and then you can do like, uh, aggregate up the count. Or maybe later this summer, things like that. You know, I don't think I'm going to be using this too much, like, in the actual application logic of my app. But oh my gosh, I'm going to be using the heck out of this for debugging and things like that. Where I just need to print out some quick stats, like, to the console or something, where, like, I'm trying to, like, debug something else, and I'm just like, okay, how many Circles do I have? How many blahs do I have? And it's something you could have always written in LingQ, but it's nice that it's all just in one cute little function that you can just call anytime. Also, I think I should say, I think F sharp had it first, but anyway, good job. Good [00:35:07] James: job. Of course it did. Of course it did. Um, and I'm kind of curious. Two. The other one is aggregate by, which I think is pretty, pretty awesome too. So you can, the example they show is aggregating, you know, scores together. So for example, they show the example of, uh, imagine, um, just like a key Dick, you know, a key value pair, right? So you could aggregate by. The first, you know, key basically, and then get the value out and combine it. So like, Hey, here's a bunch of scores, right? So you could have like Frank, Frank, James, James, Frank, right. As in like, you know, one, five, 10, whatever our score is. And you can say aggregate by the first key, right? That that's unique. So then in that case, it would be the ID. So it would just aggregate together all the Frank scores and all of my scores. I think that's a better example than the zeros and ones and twos, but I get it. I see what they're coming from. But I think that's really neat. Uh, and a nice little, uh, win there as well. [00:36:04] Frank: Yeah. So you could do a sum, get the total store, score, and then divide by the count. And then you would get a nice average. So you can do those kinds of things much more easily. Aggregate by can look a little bit intimidating, uh, because it needs a few variables. It needs an initial condition. It needs the actual aggregation function and it needs the selector, the thing that's doing the kind of group by the thing that you're choosing the key from. Uh, so it's a little big and a little bit intimidating, but, uh, I, I think it'll be pretty useful, honestly, especially when you're doing kind of reports and outputting aggregate [00:36:43] James: data. Yeah. The last one actually, there's a third one, um, which is index, which is a new method, by the way. Uh, so this one's actually pretty neat. You could do this before you could do a select and you could get the, let's say you had a I enumerable of strings. You could do select and then you could say, you know, give me the, the, the key and then the index or like the string and then the index. So like, you know, whatever the. You know, key is, and there are I or whatever, and then index. Now you can just say like for each, and then you can give it a tuple. And then you can say, you know, string, you know, T and then int index in, and then whatever your I enumerable is dot index. And what that will return to you is basically this data structure back will let you. Do a for each, but also get the index of, uh, whatever that's coming from the IEnumerable, which is very nifty. This is [00:37:34] Frank: a big deal. Um, uh, in other languages, this is called enumerate. Um, but basically you're just attaching the indexing. I, to every value. And it's a big deal because, oh my god, in the past I've had to convert a lot of for eaches into for loops just because I wanted that index variable. Yes. And it's, yeah, it's so nice to be able to just say index. Um. Cool. Good job. [00:38:02] James: Bravo. Ba bum. Yes. All sorts of goodies inside of there. Um, anything else from the libraries? There's a lot of like, you know, things in there. Anything else that stuck out to you? [00:38:13] Frank: I, I, I just have to say this, this is a big missing feature or it's a big patch for a missing feature, uh, from NET. Uh, I think NET on Windows, NET Framework had it. And I think Mono had it also, but reflection emit assemblies can be saved. That's a big deal. Um, it's, uh, they try to explain some reasons why you would want this, but A, it makes, like, writing IDEs kind of fun and easy, but B, um, it When you're actually doing reflection in MIT, uh, things can go wrong in so many wonderful and weird ways, and it's really hard to debug, honestly, sometimes. I did a, we had the whole episode a few episodes ago with me just going on about how wonderful reflection is and all that kind of stuff, but it can really be a pain in the butt sometimes when you're trying to debug it and understand it. So it's nice to be able to say, okay, that thing I'm trying to build up in memory. Also, spit that out to a file, please, so that I can, uh, use some more advanced tools and figure out what kind of a mess I've created with this code generation [00:39:20] James: stuff. Yeah, that makes sense. That makes sense. Um, I also think that there's some nice little enhancements to some cryptography. So we get like a KMAC algorithm and then also some small little system text JSON improvements as well, which I think is nice. If you want to change your indent size, I think, you know, uh, I've done a whole series. That's cute. Come on. [00:39:44] Frank: Can we, can we, can we, can we just laugh about that? Well, that's cute. There's a whole like dot web formatting style, which really just means make the first letter lowercase. Json. [00:39:55] James: It's true. JavaScript. It's true. Yeah. Gotta make things [00:39:58] Frank: lowercase. [00:40:00] James: Uh, yeah, I'm a fan. You know, I, I did a whole series on system text JSON and I think what's really cool about it. Is there's all these like little features that are in there that are really full fledged, obviously people, you know, want every single feature from, you know, JSON. NET, right. And there's all these little things as well. So it's kind of nice. It's kind of nice. I like it. Yeah. I mean, I actually think the serialized option, which is funny. Um, there's a new JSON serializer options dot, dot, dot web. And that actually makes it really easy to pass it in there. Comparatively, in my opinion, I wish I did a video on this. You could do this, but you would, you basically have to create. JSON, a new set of serial serialization options, and then pass it in instead of just this like static property, which is also super duper nice. Um, so you have to create a new thing and then pass it in. But anyways, this is nice because, um, if you are doing mobile development and you're interacting with an ASP. NET Core backend, or just any backend really, it's probably going to use these default, um, Serializers by default, when you create a new ASP. NET core application, a web API, it uses JSON serializer options that web by default, you need to override it. So this makes it nice. So you can easily inside of your mobile app or client or client application, suck it in, and then you're good to go. So kind of a nice little quality of life for us, mobile devs, interacting with backends to really streamline that, um, yeah. With System. Text. JSON. [00:41:23] Frank: I've noticed that in every project I create, I create, I just get it over with in the beginning. Now I create a bunch of JSON serialization settings that I'm going to be using throughout the app. And I just reference those everywhere because I've just learned that, oh my God, there's just so many JSON settings and the defaults are, they're fine, but I seem to customize them all the time. [00:41:46] James: Yeah. So it's pretty nice in general. So all sorts of good stuff. There's everything is. [00:41:55] Frank: It's, it's a little point, point release. I don't know why I keep, that's why in my head, I keep calling it 9. 1. It's 9. 0 preview one, but it, it was fun to get these little release notes and just geek out over some low level details again, um, without. Yeah, I don't know. It was just a nice digestible format. I look forward to the NET 9 days, but honestly I'm still catching up with NET 8. I run into projects that have like NET 7 and I'm like, oh jeez, I gotta get these projects updated to NET 8. So I'm still updating things to NET 8, but It'll be really nice, uh, to get rid of my janky old NET 9 and put Preview 1 on [00:42:38] James: this machine. Who knows what I'm doing right now. Yeah, I liked actually in the Our Vision for NET blog post, um, it's like, hey, like we just released NET a few months ago. We recommend that you transition to that. You know what I mean? It's like, Hey, you should just focus on that. Now, if you want to be a part of the NET 9 journey, because we, Hey, guess what? We do this every year, by the way, you know, like, Hey, we're just going to tell you a little bit. Now that blog post was also highly digestible, which I really liked as well. So, um, that was pretty nice to see there. Um, but yeah, no, I agree with you. I think, you know, if you've followed along all of the other NET Eight sevens ahead of time. Like a lot of things get added throughout the cycle, right? We literally have another nine months of stuff happening and like six, seven months, so much can happen. So it's cool to see this. And if, um, you know, you want to try things out and do things like this, it's also nice that it's like. Here's not a 5 billion new things. Like, oh, okay, cool. Like maybe my app, I could take advantage of this or like, just try it out. Maybe there's other performance improvements and things. So excited to see it excited that you enjoyed the new format. Um, let us know what you think if you've already upgraded all of your apps. I've upgraded all my apps to NET 9 already. So they're all good to go. So, um, maybe, but, uh, I'm ready to, I'm ready to install the new visual studios that launched and dropped as well. I mean, I've been previewing them forever. So like as love, there's a lot of new AI, like co pilot. Like the co pilot summarized my, my commit game changer. So good. Oh, [00:44:07] Frank: you're just cheating, cheating at [00:44:10] James: programming. I love it. Oh my goodness. I. Okay, we'll do a whole episode on co pilots. I've been using so much of Microsoft 365 co pilot everywhere at work. Oh my God. It's so amazing. Anyways, I got to go. Bachelor is about to happen. I gotta go eat dinner. Uh, important stuff. Thank you for tuning in. Let us know what you think about all the things NET and Apple Vision Pro. If you got one right into the show, go to EmergeConflict. fm. Of course, you can become a Patreon subscriber, help out the podcast. It's the only thing we're doing this year to help the show. Patreon. com forward slash EmergeConflict. fm. You can find links in the show notes below. But that is going to do it for this week's podcast. Until next time, I'm James Montemagno. [00:44:51] Frank: And I'm Frank Krueger. Thanks for watching and listening and being in spatial reality with us. [00:44:57] James: Peace.