mergeconflict383 === [00:00:00] James: Welcome back everyone to Merge Conflict, your weekly developer podcast. And this is not a spooky edition, even though we are recording this on Halloween, we're not going to try to pretend like somehow like, I know it's November, but then it's like still spooky. But then like, you know, maybe, maybe if you're watching the video on YouTube, like I'll in, I'll put in some like. Animations and some, like, spooky effects right here. I'm not going to, but there are hand movements and Amazon [00:00:25] Frank: codes and coupon and, and free gift certificates there. Click here now. [00:00:29] James: All the, all the things. Um, Okay, we got three topics this week, uh, because why not? And there's just so many moving parts that are exciting. And last night. Frank, I sat down on my Apple TV and I was in the Apple TV plus application. And I saw this huge banner that was like, Hey, did you forget that we had an event tonight? And I was like, Oh, totally forgot, but I'll watch it right now. It's only 32 minutes. I was like an Apple event under, under an hour and a half. I gotta watch this. Uh, and then I was there. [00:01:00] Frank: Was that your first clue that it was a Mac event? [00:01:03] James: It was only 30 minutes. I got Mac done. Boom. Yeah, that was my, that was my, I was like, oh, obviously they're announcing a Mac and like, maybe they'll refresh something else that they don't care about. Um, and that's what happened. No. Um, I was, I sat there with my MacBook Air M1 and. 30 minutes later, it was destroyed on the ground. I said, Oh, I guess I need a new Mac book. [00:01:26] Frank: Call the insurance company, file that one away. [00:01:30] James: Apple care plus [00:01:31] Frank: just poured my wine out over the laptop accidentally. [00:01:36] James: Oops, my bad. Yeah. Well, [00:01:38] Frank: um, I, I got the first hint that this was a Mac event when I think they said, this is going to be a Mac event or they're like, there's this product we never talk about. I'm like, Oh, it's going to be a Mac event. I was so excited because kind of, I don't want to be, but I'm reluctantly in shopping for a Mac right now. And I don't want to be, um, I really don't feel like spending the amount of money I'm going to have to spend to get the Mac that I want. Um, but the moment. Tim came on stage. I actually got excited. I'm like, Oh, you know what, they did completely ignore Mac at the last event, which they do. The September event is always an iPhone event, whatever. But I'm like, this was either going to be iPad or Mac, and it was Mac. And I was excited. Spoilers. I was a bit disappointed in the event, but only at a personal level for things that I wanna buy But, uh, let's get into it and we can delve into what they released and why it's not good enough for me. Yeah. [00:02:39] James: This is the first event in which I got a very uncanny valley feel. And what I mean by that has nothing to do with the products that they announced . However, also a little bit, because it was very clear that everything they showed. Like, nothing was real, everything looked fake. And I don't know what was up with that. And I know that obviously things are renders and things like that. But like, I dunno, they showed the MacBook pro. And the slide and it looked like it was just like a Photoshop 2D. You know what I mean? It was like [00:03:15] Frank: weird. Well, they would, they would always have an insert. There was a gentleman at the like coolest workstation desk you've ever seen with like a tiny little black laptop in front of them, but with like all, all, all this like awesome stuff. around their desk. Um, that was our one glimpse into it. It made the laptop look a little small to put it around such a gorgeous desk. But yeah, I know what you mean. Um, we love talking about Apple production quality. It's one of my favorite topics. Uh, I think their events are fantastic and they've gotten away from PowerPoint slides and we've entered this weird world of, Is it on a stage? Is it all blue screen? Is there? Reality still, are these people in webcams or are they on a state? I don't know what is going on anymore because they still have the sick transitions they've always done. Um, but it is starting to look a lot like a video game and I'm starting to really question what's a, what's a human and what's an NPC at this point. [00:04:15] James: And I thought maybe they were going with that cause they wanted to do this spooky thing. And obviously the Apple, um. Apple Park, you know, they needed to put fog effects and other stuff to make it more of the spooky theme. The fog was bad. [00:04:28] Frank: I'm sorry. I'm sorry. As a graphics person, the fog was bad. Okay. You could tell someone hand animated the key frames of the fog to make sure they went through the Apple logo correctly. It would have looked fine if you didn't hand key frame that. I'm sounding too critical. It was cool. I love the aesthetic you were going for. Come on. Don't, don't keyframe the fog. Just let it be random. [00:04:51] James: I'd say just not enough ray tracing, to be honest with you. So just come on. [00:04:56] Frank: Well, you know what you need? You need an M3 Pro Max to improve your ray tracing. Was this all an ad for their ray tracer? They don't even sell the ray tracer. They bake it into the OS. I don't know what's going on inside. [00:05:11] James: Uh, okay. Well, so we got some, we got some new chips. We got the M3s, M3 Pros, M3 Maxes. The first time they've unveiled all three. Of the chips at the same time, [00:05:23] Frank: there could still be an ultra coming. I'm like, what, what are all the, cause God, it's so, I'm I've been shopping for Mac's got a, like, whoa, it's so confusing. This product line. But yeah. So we got an M three M three pro and three max. Um, Yeah, that's a little bit expected. I, I wish they would refine it down to more like two chips, even then like it's a little bit odd when you're in the product selector because some support 32 gigs of RAM. I think that's 32 or 36. It's a weird number. I think that's the M3. Uh, I believe the M3. I'm going to get the order wrong. Pro does it go Max first? Pro. Thank you. Pro Max is last. . Yeah. Pro, pro is number two. Um, that you can get up to like 48, um, gigabit gigabytes, but then you gotta go to the max to get, and this is pretty cool, like from a neural network standpoint, this is pretty cool. You can get yourself up to like 96 gigabytes if you pick one a hundred twenty eight core. If it depends on how many cores you get, so you got to spend an extra thousand hours to buy some more cores to support all your memory. Yeah. So you can get 96 or 128. Both are amazing for doing neural networks. Now I will say neural networks have gotten better. Like, uh, we're at the seven. Uh, billion parameter range, which is, um, a lot of people run their networks very compressed these days, 4 bit quantization. And at that point, you're talking about like 5 or 6 gigabytes of memory. And so, things will run. But, if you want to train these networks or do anything fancy, the more memory you have, the more powerful you have. In fact, it's really funny in the GPU world. Um. This is all because these M chips have unified memory. In the GPU world, there are neural networks coming out that people with brand new RTX 4090 video cards cannot run because they just don't have enough memory on them. Now, the memory on those video cards is much faster than what's in these, uh, computers. But if you just want to run this stupid thing and just have it execute, you need lots of memory. And it's pretty cool that you can buy a laptop with 96 or 128 gigabytes of memory for about 5, 000. [00:07:46] James: Yeah. So M3, uh, the maximums are eight core CPU, 10 core GPU, up to 24 gigs of unified memory. The Pro, uh, which they said is great for developers. This is the developer machine or the, the, the, maybe like a. Artist, uh, music mixer, a little bit of three D rendering 12 core CPU up to 18 core CGPU. And then 36, uh, gigs of unified memory, which yes is odd. Uh, they're going in twelves, you know, that's what they've skipped. The eights, you know, twelves, because normally it'd be like eight or 16, and then you get 32 they 12 PC world Yeah. Yeah. And then the max, yeah. 16 core CPU 40 core GPU. Wild. So many, that's so many GPUs and then up to 128 gigabytes of unified memory, which is, which is wild. And they specifically called out AI developers. They're like, this is the AI, this is the AI [00:08:41] Frank: chip. Yeah. Um, cause I can't imagine anyone else, honestly. Buying that chip, look, the pro chip sounds fine to me. Um, I've, I've been rocking a 10 slash 20 core machine, depending on how you want to count these things. With 32 gigs of RAM and. I do all sorts of crazy developer y stuff on it, and it's hard for me to max out that machine. So I'm feeling like maybe the pro is pretty aptly named here, that M3 pro. That's going to give you everything you could possibly... Honestly, the M3 is probably fine. But the M3 Pro is probably going to be fine. I can't imagine the people, like, out in the world who need that much memory. You're only going to get the max. You don't need the extra cores. You really don't. But you're going to want, um, you're going to want that memory for a few things. And that is a select crowd. Uh, I'm impressed Apple's catering to that crowd, because we're few, and it's a little bit odd. But, um... It's neat that they're kind of leading the industry because, again, um, a 2, 000 video card maxes out at 24 gigabytes of memory. And with these puppies, 96, 128, it's quite a bit more than 24. Yeah. [00:09:57] James: What did you think of the exclusive Space Black, only for pros and maxes, exclusive new color? I like that it's, um, [00:10:05] Frank: anodized because I, I always wondered like, how would they paint these things? Like you, you've had the Pink Mac, the Rose Mac, and I always thought that was pretty awesome. Um, and they went with a pretty dark gray, I think, in that line also. But they never went straight. And that's pretty cool. Um, I, I actually watched a MKBHD video and he's like, I don't need this laptop. I just bought a laptop. It's fine. But it's really nice looking. As someone who has an iMac Pro, I will say I do love my dark Macs and Spoilers, they announced new iMacs, but they did not announce an iMac Pro. So, um, as someone who has enjoyed the dark keyboard, the dark track pad, the dark Mac life, it's a very tempting laptop. [00:10:58] James: The fascinating part though, for you is that they'd made a lot of comments about old Intel Macs. Like they're like, it's really a great time. To get, to get rid of your, you, if you have an Intel Mac, you really, really like, um, we're really saying like, look at these numbers, look at the difference. It's up to 5, 000 percent faster. The problem is to your point, they have upgraded every single other machine with an M chip besides the iMac pro. You can't get it. They got a Mac pro actually has the Mac pro upgraded. Maybe the Mac pro hasn't. No, Mac studio, Mac mini. The Mac Pro. [00:11:38] Frank: It was actually a very selective upgrade, I would say. I think that was my largest disappointment, which just means that it's hot off the presses. Um, this kind of happened with the M1, what it was in the air at first, and then the Funny Mini, I think, at release time. And I think this is just the first year stuff. Um, I'm looking forward to real third party performance reviews. I want to see what this processor can actually do, because... Um, honestly, as much as like a three is bigger than a two, um, it's only 15 percent faster. Like, what you're really getting is the extra cores, the somewhat optimized engine, three nanometer. Nanometer doesn't mean what it used to mean. It's, I'm very disappointed. I don't know what the actual gate size is, but they're all excited about their new process. Uh, it's, it's, it's actually a small, um, small uphill climb in performance and all that stuff. So, you know, it is hurting their sales though, because I want either a mini or a studio because they're not making iMac pros anymore and. I am not going to go buy a Mini or a, uh, uh, Mac Studio right now, knowing that there's an M3 on the horizon. So, I am going to be sitting and waiting until the M3 comes down to those computers, a form factor that I want, and then purchase those. But I don't want to say, okay, just because it's not for me, it's not cool, but it's also just like a 15 percent upgrade. It's not that bad. It's not that [00:13:11] James: big, Apple. Yeah. And I do stand corrected. The Mac pro does have an M2 Ultra and an M2 Max in it. And yeah, the, the Mac studio also has a M2 Max and M2 Ultra, but that's correct. Yeah. It's hard when you're not refreshing the whole product line. This is for any product ever. Is yeah, I'm going to probably wait if I'm going to spend that much money. I'm going to wait for it. The bigger thing that I thought was more impressive was me looking at my little Mac book air, which has an M one chip in it. And then I think those, they kept saying, you know, up to X percent faster. Right. And all their comparisons were against the, like M one normal. So, [00:13:50] Frank: Yeah. Cheap, cheap shots. The M1's perfect. I, I have the M1 Air. I'm going to keep it for as far as I can tell, eternity. Because every time I use it, it still feels faster than my beloved iMac Pro. Like that tiny, stupid little laptop still somehow always feels faster. [00:14:09] James: Uh, it's a good machine. They also, like you said, uh, refresh the iMac with the M3, which is fascinating. Sure. Why not? Um, just the M3 though. You don't get the, you don't get the pros of the ultra. Could [00:14:20] Frank: you do some real time, uh, fact checking? Cause I'm too lazy for it. Uh, what is the resolution of that? I believe it's still a 24 inch monitor that they're releasing. Uh, it's the fun colorful one. So at least you can get a cool color. And then was it just the M3 or they put the other ones and I could check that but I am curious about what the resolution of that screen is. [00:14:43] James: It's just the M3 that's all you can get because this is the you know this is the chip so you can get up to 24 gigs of memory up to two terabyte on it and you get 1080p camera. You do get A, uh, Ooh, wow. It's a, they did upgrade this, I think, which is a 24 inch 4. 5 K retina, which is 4, 4 8 0 by 0 resolution. So that's a pretty cool monitor. That's a really nice monitor. [00:15:13] Frank: That's nice. Yeah. I don't even think you can really buy that screen size. That's a, that's a funny screen size. It [00:15:20] James: is. Cause they were like, Oh, this is a great upgrade between your 2k and your 8k, whatever. I'm like, okay, I guess. That's a weird metric. Yeah. [00:15:31] Frank: Yeah, one of the reasons, um, I, I'm sour about them not having an iMac Pro is they, they make good screens. And if I want to buy Apple screen, you have to buy the studio display, which is 1, 600 just for a stupid monitor. And although I'm sure it's worth every penny. Uh, part of my soul dies paying that much for a monitor. [00:15:52] James: Yeah. Uh, one thing to note, they did add AV1 decode support right on the media engines. If you're interested, uh, good event. It does make you, and they did call it like this will, he was like, this will improve your streaming support for YouTube and Netflix. I'm like, what about, what about my Apple TV plus that improve that? Come on now you forgot they had so much synergy for a while. Like the new Godzilla show. Definitely want to watch that. That looks great. But besides that, I was like, man, you're missing on this one thing. Yeah. Apple TV plus it'd be so great. [00:16:28] Frank: So close. So yeah, [00:16:31] James: good event. Um, I'm not going to buy anything, but I was. Like, uh, I guess if I was, it's, it's kind of like any of these events, if I'm in the market for this thing right now, maybe I'd buy this thing right now. I would say this, I do think like the iMac is like a really nice family computer. If you're a college kid, I think it's college, you need a laptop, but you know, or like, uh, maybe after college, you know, it's a really nice, like I would definitely get like the, the, the pink or the purple is like, or the yellow would be so cool. I just love the colors that they come in solid compute. I got it. [00:17:01] Frank: Yeah, I got into Macs because of iMacs. I will always love the iMacs. Apple make an iMac [00:17:08] James: Pro. If you're in a small, like, apartment, I mean, and you could be in anything, but like, if I was still living in a small apartment, which I lived for many, many, many times and many, many years, like, I think that this... Could be not only my TV, it could also be my computer. You know what I mean? Cause it'd be very beautiful. 24. And I mean, it's a small TV, but if you were in a smaller apartment, like I lived in for a long time, like it'd be a really nice, really nice setup. I know the resolution's a little bit funky, but yeah, it's a block bar. I know. So it'd be nice. [00:17:35] Frank: Every business user is going to go buy the beautiful, sexy, black, new Mac, uh, MacBook Pro, because it's an obvious easy buy. Um, even the M3 version, I think it's, I think it was like two grand or something, which is a lot, but it's a gorgeous machine. You know, it's going to be a gorgeous machine. And so I think it's a smart buy. I'm just at a point where I want to keep my laptops simple and I don't have a need for it, but I bet you literally every corporate developer out there, if you have a day to day job, is, uh, putting in a purchase rec right now for one of these. [00:18:11] James: Give me all that RAM. Uh, all right. Talking about Apple devices, you've been developing some Apple Vision Pro applications, and also we're hoping. That are Apple Vision Pro apps, perhaps we'll just run on the Apple Vision Pro Max Deluxe Pro Ultra editions. Um, I think you got some, some news, there's some news this, there's, there's news this week about the Apple Vision [00:18:35] Frank: Pro. Yes, yes. Uh, well, I was kindly informed by Apple that my app currently crashes on the Vision Pro. And I'm like, oh. I didn't know you were testing that, Apple. This is interesting. And it was a very helpful email because, uh, they kind of gave away how apps are going to be deployed to this new machine, uh, much like they did for running your, yeah, exactly. Your iOS apps on a Mac. There's a little toggle. You can toggle. There will be another toggle. That you can toggle to say whether your app can run on the Vision Pro. Wow. And it seems like they're doing a giant QA pass of I hope it's, I hope they're testing on hardware. It'd be terrible if they're just testing on a sim. Um, yeah, uh, of just, I guess, starting up your app, because I don't, how much of that can you really automate? Probably just start up the app, see if it puts up a UI or something like that. And I, I was kindly informed, just for one of my apps, Continuous, the IDE. That's the one that [00:19:44] James: I want in it. That's the one I want. [00:19:46] Frank: Um, and we should talk about the modes apps run in here. Um, sadly that one was failing to run. Even more sadly, they didn't really provide many details. So thanks Apple. Cool. I guess I gotta go buy an M3 computer and install the simulator on it, and try to figure out why my app's not working, even though it's not really easy to deploy a Xamarin app to it, right? Um, yeah, so, that's fun. But it was interesting to see that, uh, they are gonna make it that simple. Now, that said, I wanna be clear. Um, there are two modes apps can run in. One's like an emulation mode, where it's basically emulating... An iOS device. Think of this as like when you run a iPhone app on your iPad, how it goes in that stupid iPhone weird mode that it's stupid. Uh, it's gonna do that for all your iOS apps and put it into the visions thing. So if your app's working great, you're gonna be put in that window. If not, you're gonna be in the position I'm in and have to figure out what the heck is going on. [00:20:48] James: Hmm. That is. Fascinating. I do see here, there is a, when you go into the app store, connect everyone's favorite developer portal, there is a iOS apps on Apple vision pro notification alert, all newly created and existing compatible iOS apps can be made available for vision pro your compatibility would be published on the app store on the app store on Apple vision pro, unless you edit their availability. So yeah, I can just like go in and select all of them. So I'm going to select select none. And then I'm going to select, what do I want here? Definitely my cadence. And then also my skiing app. Cause you know, if you are cycling, you're going to want to be able to see all that stuff [00:21:29] Frank: in real time. That's gotta be a thing actually, dude. People do VR, AR on the bicycles. Yeah. It's gotta be sweaty. It's gotta be gross. Yeah. I don't like it. I wonder if you get a little bit of motion sickness. Um, that's interesting. Yeah. Well, I, I, I kind of figured that this is the path they were going to go down. My biggest complaint is it's really hard to test this stuff right now, Apple. Like, I appreciate them doing this QA pass, but you're kind of telling me I have a problem and then saying good luck. Yeah. Because I honestly don't really... I know how to develop Vision OS apps, because again, um, right, there's the emulation layer, and then there's a proper Vision OS app, which is compiled against that SDK. And you got to build against that SDK, it's totally separate from an iOS app, totally different APIs, at a UI level. Um, But, uh, I barely know how to run an app in Xcode. Um, getting like a Xamarin app or a MAUI app to run on Vision OS, it's... I know how to do it. I know how to upload apps to simulators. I've done it. You can do it from the command line. I just have to go back to... 10 year old webpages and stack overflows, and remember how to find the right incantation to upload your app to the device and get it all up and running. And so it's, it's going to be an awkward time. So thanks Apple for running a QA pass, uh, no thanks Apple for providing absolutely no more details. Like you couldn't give me a crash log or a console log. I guess, [00:23:09] James: do you have any like Raygun or App Center, like logging in that application? Because if you did, you could sort filter by device. And then could you find like the Apple, the Apple Pro thingy? [00:23:23] Frank: James, Continuous is a complicated app. Yes. You actually know the answer to this because we, we fought over this once. Um, all my apps actually do have a little bit of tracking that the user can turn off, of course. Uh, but Continuous does not, because all those cool crash logging things do tricky things with exception handlers. And you can imagine an IDE that Executes arbitrary code from the user. Also does tricky things with its exception handlers. You just don't get along. So I don't have any exception handler, um, uploading to a server. [00:24:01] James: Bummer town. That's hard. Bummer town. It's the worst app. The worst app to be crashing on in real time. Yeah. I mean, mine must have passed. I'm, I'm waiting for it. in general. Are you still gonna, are you gonna buy one or what's your thoughts here? I mean, I mean, I know you want your apps to work there, but like, is it a wait and see mechanism for you or is it a, you [00:24:22] Frank: know what I mean? I don't know. I, I have honestly at, at what I started by this, all of this by saying, no, I don't want to buy one. Um, and I don't want to say I want to buy one. I still don't want to buy one, but I do want to write some apps for, um, I've always been interested in VR. And I've been buying Oculus's since the dev kits, I only stopped kind of recently because I had bought enough. I was kind of over it. And my biggest concern with the Apple device was it wasn't going to be a big improvement on that standard. So I'm going to be over the Apple device. Just as I spend three thousand five hundred dollars for it. And so that's my biggest concern. But at the same time, if I'm honest with myself, I got into programming because I love graphics. And I love putting things on screen. I love AR. I've given AR talks. It's kind of my thing. So I had a heart to heart with myself. And I said, what was your big complaint? My big complaint is it's three thousand. 500 for a device that should be 500. That's my biggest complaint. So I'm just going to pay the Apple tax and my biggest gamble is going to be release a couple of apps and pray, pray that in a few months, maybe they would recover the cost of the device. [00:25:38] James: Or you can become a Patreon subscriber over at patreon. com forward slash merge conflict. If I'm going to emerge, kind of like. FM hit that subscribe and Patreon button, and you can help support Frank Krueger and this podcast by becoming a patron. Now, what you get with being a patron is exclusive behind the scenes episodes here. Like we just talked about Halloween and how Frank's. Last name is Kruger and how that impacted him growing up as a child. If you want that type of content, that deep, deep in depth analysis of Frank's life, head over to patreon. MergeConflict. fm and subscribe to it. There's actually a free trial. You can try and listen for free. And if you want to then give us some money, you can do that. And Frank gets half of the money. Can you believe that? It's wild. So head over there, give us a go and let's talk about that. Um, and then maybe by the time the Vision Pro comes out, Frank will be able to afford one. Boom. Awesome. Um. [00:26:36] Frank: It's always been the best con that in my life that I get half the money and you do the majority of the work. It's, I do a lot of it. My one best business move I've ever done. [00:26:45] James: It's very, very clever of you. Yes. Um, . All right. Last topic tonight is some talking about app development as well. Um, do net eight is on the horizon. If you haven't heard, go to.dot NET conf net, D-O-T-N-E-T-C-O nf.net. That's net conf 2020 three's happening on November 14th through the 16th. You can add it to your calendar, Frank, [00:27:10] Frank: two weeks away from this recording. Yes. Don't, don't listen to me. Don't listen to me. This episode doesn't exist in time. [00:27:16] James: A, a weekend a day since it comes out. Yes. And, uh, I won't be there cause I'll be on holiday. So interestingly timed, um, not, not on purpose. I think we booked the vacation like seven months ago and I just, for some reason, in my mind, I forgot that it's always the second, the second Tuesday, right? It's like, oh, okay. I don't know. But anyways, um, yeah, there's an amazing, uh, uh, agenda and schedule and a bunch of stuff happening. And in the world of NET, there's always this time of year, so much There is all these amazing blog posts coming out about all the new NET y stuff. Like, you know, you want to read it before it's out. So they put it out. Um, and there's a lot of stuff way early. I kind of just ignore that stuff early, early on, because unless I'm trying the new previews and doing stuff, but the juicy stuff happens August, September timeframe. You get that Stephen Tove post. That's like a thousand pages. Um, so juicy on performance. Did you read all of it? [00:28:12] Frank: Uh, did you get? No. Okay. I got, I got, um, a third of the way through a 10 page summary of it. Oh, nice. I feel like [00:28:22] James: I got through 30 percent of it. That's pretty good. Yeah. I'm me and the team actually like on the review team, but I'm like, all right. Tobe like, I just, uh, you're good. You're good here. I trust you. People do review it though. Obviously it's, it's long, but that's the engineering team that do that. Um, and there was an ASP. NET one. There was like an ARM one, you know, there's a NET MAUI one. So there's all these performance stuff, which is super duper good. Right? So all the goodies in there by a good friend. Jonathan Peppers, so spicy, so hot. [00:28:51] Frank: Ding. I think he deserves a ding. He's friend of the show, Jonathan Peppers. Yes. Um, keeping, keeping the lulls happening, the lulls per second. He's, he's keeping that number up. I think that's what he's known for these days, but he also writes performance blogs that are under a thousand pages. Note that. Team, so therefore consumable and readable by human being people like us. And I was reading it and I was like, cool, some cool stuff here. We should, we should talk about some of this because some of it was like a blast from the past. Other things were like crazy new NET 7 and 8 things. I guess 7 is still new to me. Um, what, what do you think? Were you excited as excited as me when you saw the, uh, Maui performance post? [00:29:41] James: Well, what I think I like about this, since I am a Maui developer and you know, like the, the toe posts are like pretty deep level. And so with these posts too, but I do think that some of them and how the table of contents of how peppers broke them down were really nice. He broke them down into just kind of, here's a new features. Like, Hey, there's this new features. There's. Um, build and inner loop performance. There's performance or half size improvements and memory leaks and then tooling and documentation. Now, additionally, when Pepper talks about NET MAUI, he's not just talking about NET MAUI. He's also often talking about the underlying platforms of iOS, Android, Mac for the core of us. Right? So that's another important thing to remember is NET MAUI is all of those things all in one. Pretty much when the team's working on those, because if you improve those core platforms, you improve down at Maui, et cetera, et cetera. So to me, I think the things that I was really excited to see, uh, inside of this were a lot of those build and interloop performances. Cause those are things that kind of impact you every single day, just like faster builds. Uh, but then I was also. Really excited to see, uh, some of these improvements in like the Java interop calls, because I know that those are very taxing, removing some really old legacy stuff, like old AndroidX legacy shenanigans that are happening. And then the one I think I was really excited about the most was a, is a fix. For performance issues in app theme binding. This is really exciting to me because I use app theme bindings everywhere to do light and dark mode in all of my applications. And they found out that basically. Good old, you know, calls that registered events or whatever were causing a bunch of issues and a bunch of other [00:31:21] Frank: stuff. That's why I wanted to interrupt you. It's our good old friend, Event. Event, the gift that keeps on giving in app development land. It keeps on giving memory leaks and slowness and other things. Um, Yeah, that was a, that was an interesting one. So I, I, I love these kind of posts because they get into the core issue. Like the real takeaway is things are more efficient now. Thumbs up. But why? Because like it turns out every view was subscribing to this one data change event, like perhaps multiple times even, to the point where unsubscribing from the event was slow. That's when you know you're slightly oversubscribed, when unsubscribing is slow. That was a really, that was like a fun one to read, because like you could feel the investigative reporting happening here. And he gives a lot of shout outs to the NET Trace app. And I've been using that a lot for iCircuit too. It does like the cool flame graph visualization of all your performance. So I thought it also that he kept mentioning like, and here we saw this in NET Trace. We saw this in NET Trace. I think it's just a good reminder to everyone, run your app in NET Trace every so often. Just, just for your own edification, like where is my app spending all this time? You don't need to be a performance freak like some of us, but it's good to, it's [00:32:45] James: good to do it. Yeah, I also liked it that obviously in these blogs, you know, they call out, here's the, you know, fix or whatever, as you can kind of like read the details. And funny enough, like the code changes for that app theme binding, like was not a lot of code technically for them to change. It's got to find half the battles finding it. But then I also like, which is, you know, he's like, Oh, also check out this. You know, issue a proposal on how we can implement weak events in NET in the future, which is our good friend, uh, Morton, who, who several years ago did add weak event listener helper class. You know what I mean? Please, [00:33:19] Frank: we've all been wanting it for literally ever since UIs have been developed in NET. We've been wanting weak event listeners, they come with their own set of problems. People trust me, you're relying on that. A strong reference, a lot more than you think you are, but gosh, it would help in a lot of places. You're mentioning not a small change, but then there were some huge changes. Somewhere around C sharp, let's call it nine ish, we started to get function pointers to Unmanaged code. So like C code, you could actually get a function pointer. Those weren't ever around before. We always use like int pointers for them. And then we would cast the end pointer up to a delegate, but that's actually inefficient because delegates are heap allocated objects and it would have to do some crazy reflection stuff. So what happened is the language started supporting something that runtime actually supported the runtime handled native functions just fine. It was more of a language. And you can imagine a thing like providing you all of the Apple platform to C sharp developers has a lot of unmanaged code calls and they did what I think of as. Kind of the unthinkable. They rewrote the majority of their bindings to use the more new efficient way. I, I'm breaking two features up into two things, but that, that they go hand in hand. Um, they started using a new T net and let's call it seven-ish feature, unmanaged colors only attribute. And in order to do that, they basically had to redo. I'm going to just say like every binding does a P invoke is, is that's going to affect it. It's not quite, it's more complicated than that, but whatever. That was a huge change. I am curious what the performance improvement was. They do say there was a performance improvement, but, Ooh, that, that must've been a big, scary one to do. I wouldn't have wanted to do that one. [00:35:19] James: Yeah. You know, it, I mean, he points out this one, he said it's 3 percent faster, which. 3 percent doesn't seem like a lot, but for it's 3 percent for every single call, right? When, yeah, for every single thing in the release build. So, you know, I think in general, when you think about these things, it's all of the bits and pieces and little tiny optimizations, like I remember working with a bunch of the team when we were doing the NET podcast application sample, and they were finally tuning stuff. And like, they are like, if you change this one line of code, this shapes. Two milliseconds. And I was like, who cares about two milliseconds? And they're like, we care about two milliseconds. And I was like, okay. I mean, they're, they're shaving. Yeah. I mean, I remember peppers one time was like, and this one shaved off half a millisecond. You're like, oh. He's like, oh no. Yeah. But like, but he's like, but when you combine it with all the, you know what I mean? So it's the total combination. It's like very, yeah. You know, impressive in that regard. [00:36:18] Frank: So, yeah, it's these little... Oh no, if you look at, because they use, um, NET Benchmark, you know, the NET Benchmark thing everyone uses, some of these are in the microsecond improvements, you know, like this is, this is fine stuff, but this is important. Um, you can totally understand why, like, this is a mature product, right? This, this, we, we've been using Xamarin for a while now. And we are getting down to the 3 percent stuff. Because it's a mature, highly optimized product over several years. Um, so, I'm just thinking I should rewind about 20 minutes into this. Podcast and say, Apple, that 10 to 15 percent improvement that the M3 is providing over the M2, bravo, great work because yeah, with a mature product, even 3 percent should be celebrated because it's 3 percent for every app, every deployment. Hopefully you're not calling into your UI layer that fast all the time, but hey, who knows? Maybe you are, and that'll be good for it. Speaking of calling into the API a lot, you know what does that? Who? What? Drawing. Drawing code. Yeah. Drawing code. Uh, I remember writing the Android drawing code for iCircuit, like, 8, 000 years ago, and being shocked, shocked, at how slow drawing was on Android. And it took me a long time to figure out exactly what was going on. But it was that interop layer where every time you wanted to draw a circle or a line, it had to allocate a thousand objects and then slowly put them to the screen. And then androids weren't even that fast back then. And so I had to go through a lot of pain and suffering. To create many workarounds, I created my own retained mode, renderer written in OpenGL that did off screen buffering of drawn objects. I did a lot of painful things to make the drawing code fast. And then Peppers comes along here, notices the same little issues, and you know what he does? He just fixes the runtime and the API so he doesn't have to deal with those issues. He didn't write a full retained mode renderer to fix it. No, he fixed the API. So I was a little bit jealous, but it was also kind of fun for me to see, um, MAUI suffering with basically the same performance problems I was having 8, 000 years ago. It was kind of a blast from the past. [00:38:49] James: Yeah. I think to kind of cap it off, we had talked about this other improvement, which is pretty substantial, uh, in NET 8, which is native AOT. And this is the move away from mono AOTing. And, um, they've released some new graphs and charts, uh, specifically around the differences between, um, early even builds of NET 8 and the RC. Between mono, uh, AOTing and native AOTing and the size difference here are dramatic. We're talking the IPAs, for example, you know, we're talking like 50 percent the size and the startup time cut down in half. I know this is from like file new project type of thing that they're talking about, but still went from. Almost 200 milliseconds down to, uh, about just about a hundred milliseconds, uh, which is substantial. Now, of course, native AOT comes with different implications and linking and support across the board. So your miles may vary. However, this is very encouraging moving forward. Uh, and you know, this isn't going to be the first time. It hasn't been the first time we've, we've heard about native AOT. Um, and we've talked about a lot in the podcast over the years and it's exciting to. C Native AOT hit a platform that you and I developed for, and I know there's a lot of work going in there because when it was first kind of announced, like, you can AOT council apps, and you're like, okay, you know, and now it's really progressing, uh, in, in full fledged, I would say, so [00:40:21] Frank: that's kind of cool. Yeah, I think the, if I, if I read the official line correctly, Mac is officially supported, iOS is still experimental. Yes. I think you should still rely on the old, uh. Whatever. Xamarin. I'm just going to keep calling it the Xamarin one. It's easier. The mono AOT. Um, but yeah, it's obvious. Microsoft wants us all switching over to native AOT and that's fine. I don't care what engine I run it on as long as it runs fast. That's all I care about. I just want the efficiency. Uh, so they were doing the performance, uh, sizes and they're all looking Really good. Honestly, it just looks like early days of monotouch as you kind of whittle that size down and figure out what's what code is repeated in there. Um, I actually want to go back to a performance thing that was kind of neat in terms of code size like that. But, uh, the neat thing about the graph actually that is posted in Jonathan's blog is that it's actually a Maui app, which is. Bigger than, um, just like a native iOS app. You could just write a native UI for an iOS app, and it would come down to maybe used to be around four megabytes. You could get it down to, and this is a full Maui app, which adds a lot more on top of the iOS app at 7. 67. So that is not bad at all. You're getting a Full Dynamic XAML Runtime Engine, and a whole bunch of other bells and whistles. That is not bad at all. Uh, so that's pretty cool to see because, uh, sometimes, sometimes these XAML apps can get a little big. [00:41:53] James: Yeah. Well, and they even showed just between Preview 6, 7, and RC1, the dramatic reduction in app size that they've done, you know, actually in NET 8. P6, the app size was bigger than the mono AOT and they've, they've shrunk it down, um, more than 50 percent since that original native AOT experimentation that they did, uh, which is pretty impressive. [00:42:22] Frank: Um, I just wanted to mention two other things that stuck out to me. Um, one is just more of a cool. I'm glad they did it. Um, templates were always kind of a tricky thing to support in an AOT world because you can't dynamically generate code for like new types for a template method, or a template type, or something like that. And so the compiler wouldn't necessarily have to look through all your code and figure out all the different kinds of templates that you're ever going to have in your code and kind of, um, expand them itself. It obviously does things a little bit smarter than that. But there has always been, I've noticed it in my apps because I do silly things, um, if you have one assembly that generates a complex, uh, template and then another I keep calling them templates. I should be saying generics. I'm an old C programmer, forgive me. And then another assembly that does a similar one. They should be identical. It would actually generate two of them because they came from two different assemblies. Doesn't matter, but it gets rid of them and it makes it smaller, which is a surprisingly large amount of code. Um, doing those generic expansions, those template expansions, that takes up a It fills out your exe real fast. Doing that kind of stuff. And then, um, related and not related, I always think of these as AOT issues, because they are. Like, the JIT can handle these situations actually much better. Um, has always been this one thing, and it was burnt into my head for a long time, but I don't think enough people have gotten the religion of this. Of, A, do not use structs as dictionary keys. Just don't do it. It's, it's not, it's not nice to the generic system. It's not nice to the runtime. It has to do really nasty things. Don't do it. But I know people are going to do it. We do it in F sharp all the time. So that's where it's going to happen. And, um, uh, what's a common case? I don't know. People do it though. It comes up. It all comes down to my favorite friend, I generic equality, comparers, something like that. Eye equality compare, do generic or something like that. It's always been the bane of our existence in the AOT world because it was one of those things that kind of dynamically at runtime, I figures out, oh, you got a data type there and a data type there. I'm just gonna generate some code. Well, you can't do that on iOS . And so it's always been a pain to support. And, um, uh, one big tip Jonathan Peppers gives here is if you are gonna use your structs as, um. Keys and everything do not rely on the compiler generated equality comparison and hash coding. Do implement those yourself. It sounds like such a weird low level performance thing and all that stuff, but once you understand how the system works, you know, it'll kind of make sense in your head of it doesn't have to generate all this weird generic code to figure out all your data types. You just tell it your data types and you just tell it how to do it correctly. And it's just one of those funny things and they've actually turned on, um, Uh, a Roslyn code analysis thing. A code analysis thing will tell you this. Please, please implement those functions on your stroke. That's cool. And they turned those into errors, at least in their own code base, because it was that important to make life good. That was a big takeaway. It was, it was just neat to see that performance tip. [00:45:45] James: They should also have created a source generator, so you could just apply something that was source generated for you automatically. That'd [00:45:51] Frank: be kind of cool. I think, you know, some people on the compiler team, maybe you can make that [00:45:56] James: happen. See what I can do. All right, well, that's going to do it for this spooky, super fast, super performant based Vision Pro episode of Merge Conflict. Let us know what you want us to talk about here on the podcast. We're going into, no, it's already November. So it's happening. We have so much exciting stuff happening with Dynacon. Ignite all this stuff's come happening and we're going to record a bunch of that stuff ahead of time. Cause I'm going on holiday. So I don't even know. I'm going to miss all of it. So it'd be wild. But anyways, head over to emerge conflict. fm for all of the podcasts and our YouTube, which is, uh, youtube. com forward slash emerge conflict. fm. And that's where you'll find us and the podcast. You want to see me and Frank do this podcast every single week live. And by live, I mean, not live, but like you can look at us as if we're, I mean, we are. [00:46:49] Frank: And I'm Frank Krueger. Thanks for watching and listening. [00:46:53] James: Peace.