00:00.06 James Welcome back everyone to Emerge Conflict, your weekly developer podcast, all things in the world of software development. Today, well, and always, i am one of your hosts, James Bontemagno, and today and always is with me, the one and only Frank Kruger. How's it going, buddy? 00:14.84 Frank Hi, James. It is another day, so I will be with you. i like to think I'm with you every day, but I'll be with you just today. 00:23.36 James Okay. I guess for the next 30 minutes or so you'll be with me and then we'll depart into the ethers of the evening and we'll roast and toast in the Pacific Northwest. um 00:31.61 Frank Yes. 00:32.70 James Today I figured what we would do is we would talk about polish. 00:37.12 Frank Oh, yeah. I mean, I've tried to like polish copper pipes before you have to get a whole different chemical and you need a buffing pad. 00:45.77 James Oh, 00:46.06 Frank It's like a real rabbit hole to go down to get something shiny. I i am looking forward to talking about different abrasives to use and what stages what sandpaper grits I'm polish is important. 00:58.89 James Polish is important. I want to call out that there is this, i don't know if you've seen this, it's called impeccable.style. Do you know about this at all? Have you heard about this? 01:07.22 Frank No, but I love the yeah URL already. It's literally impeccable.style. Love it. 01:12.57 James Yeah, apparently, I don't know the history of it, but it has about 40,000 stars on GitHub. It's this beautiful impeccably designed website. It is by Paul, let's see, Paul Backus, who, 01:26.45 Frank Bacchus. 01:27.54 James i don't know what exactly he does, but... 01:29.31 Frank The god of partying. Awesome. 01:30.62 James Oh, it works at Google. Yeah, it works at Google or at least on Google or something with Google. Anyways, this was integrated into the GitHub Copilot app. So there's a slash impeccable. 01:40.57 Frank Oh. 01:40.92 James And there's a few things that are kind of fascinating here. 01:41.39 Frank Oh. 01:43.72 James i don't want to talk about different parts of fit and finish. And the first one is design, actually don't want to spend that much time on design because that's not that's not the fit and finish I want to talk about today. I want to talk about... Are you doing an XE or an MSIX? 01:54.78 James Are you trimming? Are you ready to run in? This is the fit and finish, but there's kind of these two files. you know, we know about agents MD, you know, about agents MD, you know, cook instructions. 02:03.45 Frank i I live on AgentsMD. it's it's It's my only escape hatch from the insanity of Yeah. 02:10.59 James Agents MD, you're my only hope. Um, we know about instructions. 02:12.50 Frank yeah 02:14.85 James We know about skills. We know about all these things. There's actually a product.MD and a design.MD. Have you heard about these at all? 02:23.48 Frank Oh, I'm always curious which models or which harnesses, I should say, pick up which files, because honestly, it's getting a little confusing these days. um But no, are these co-pilot files, co-pilot picks them up, or is it more of a standard? 02:39.80 James I believe it's a standard. Um, and I believe maybe it's coming from Google labs. I want to say at least the design.MD I'm not sure about the product at MD, but these are two files in which impeccable uses the product.MD pretty straightforward. 02:46.90 Frank Oh, OK. 02:57.02 James It's your product. I'm pretty pretty sure like that's, that's what it is. 03:02.17 Frank Yeah. 03:03.42 James um 03:03.93 Frank You know, when I first started using agents, I was really dumb. I used to put all the info in readme.md because I'm like, certainly the agent will just go and read the readme. 03:11.43 James Yeah. 03:12.85 Frank No, they never do. They they just don't. they they They like to shoot from the hip. They don't know what product you're working on. They don't bother to look at what repo you're actually in. So that's kind of funny. 03:21.94 James Yeah, no idea. 03:23.38 Frank I wonder if it's just that metadata. I'm just making this stuff up, but I like used to crack me up how they would just like not care. 03:31.13 James Yeah, it says that in general, it defines the product's purpose, vision, scope, and structure. Think of it as a source of truth for what a product is and why it exists. So what are goals, non-goals, core, core features, things like that. 03:40.64 Frank Okay, 03:43.62 James You can think of it as like a shared mental model that people are contributing to features, things like that. So they're in there. So it's just like, here's what it is. 03:50.04 Frank okay I just dump all that in agents MD, so it's getting that every time, but yeah, that's it. It's probably a better place for it. So what do I put in my agents MD then? 03:58.26 James Now. 04:00.41 James yeah Yeah, exactly. um Well, I don't think it has any implementation of like what it's like, here's what iCircuit is, which I think I'd put in my readme, to be honest with you. But it feels as though, I think that with this impeccable, it's like product is the why and design is like how it's designed. 04:09.78 Frank They don't read it. 04:16.80 James So it's the interaction rules, design systems, UX principles, visual language, things like that. But anyways, this impeccable is a sign of skills, I think is what's in the box. 04:24.60 Frank Right. 04:28.41 James And you can have it do layouts and audit, critique your design. You can have it bolder, quieter, optimized, adapt different styles, things like that that are in there and have design palettes and color palettes and font palettes. And it's this almost like a brand book for your your application, which makes sense. And often we also do put inside of our agents.md or custom instructions file. But I believe when you're using something like this, the whole idea is to move it out of the story and then still have the, the, the, Hey, I want you to code this way versus I'm designing this thing. 05:04.26 James Cause you don't always need to worry about the design. If you're working on, let's say a function that's trying to combine a web audio video and screencast feed into one single source of truth. 05:09.28 Frank Yeah. 05:14.70 James It's not going to care about your design and the implementation there. For example, if that makes sense. 05:19.04 Frank It might, like, you know, the design doesn't just mean whether you use gradients or not. Designs can be data flow user flow through your app. So actually, i don't know, maybe you have a weird bug where it pops up like a confirmation dialogue a few seconds after you click the record button. 05:26.26 James Yep. 05:32.66 Frank Maybe that should be in design. I think that's a little place where like um and graphic design, user interface and user experience, all this stuff is a little bit mergey. So design.md, I'm actually curious, um does it include user flow through the app? 05:48.57 James It's good question. I think that we probably need to dive deeper into it because I've only started to like mess around with it. 05:53.50 Frank Mm-hmm. 05:53.97 James But instead of get a co-pilot app, you can do impeccable in it. It'll install. I think it's a whole MPX package design system, some things like that. Have it work on your system. But I think what I was really fascinated about in doing when we think about, you know, this polish, this fit and finish is this final mile. 06:09.29 James We've probably talked about it a thousand times, but I'm interested because we talked about Windows development last week. And I'm also going through little polished steps. I'll give you one example, Frank. 06:20.66 James um So my application Tiny Clips is a menu slash you know tray application. 06:24.05 Frank Okay. 06:28.38 James And on Mac, it's pretty standard as far as what you can do in the menu bar. You get a dropdown, like is there. 06:36.80 Frank Yeah. Nothing else. 06:39.45 James um I guess, can you is there a custom user interface that you can put inside said dropdown? I guess you can put images. Can you pop up anything there? 06:46.86 Frank So. 06:48.98 Frank it's It's a little bit weird. i actually can't answer that directly other than I can say, yes, you can, because you can intercept that menu opening and then you can slap any old window there if you want. But then you're not guaranteed to get the right user interaction, um dismissal, the way, you know, tracking of the mouse cursor and that kind of stuff. Because I've certainly seen people put arbitrary UIs up there. But as far as I can tell, it's a little bit of a hack. 07:18.07 Frank um A proper NS menu, a proper menu is definitely the way um way I think most users expect those kinds of apps to work. 07:28.14 Frank But um you, I mean, it's Mac. You can create a window and you can move that window wherever the heck you want it So you can really do anything. 07:35.18 James That's true. Well, I was looking at power toys on windows because I'm also used to the tray icons where you click actually more right click. And it brings up a list, basically a context menu of things and windows of things in which you can do. 07:49.57 James I never really have thought about, cause again, it's like built in. It's like, it's easy to do. It's the built in mechanism. 07:54.36 Frank yeah. 07:54.78 James But funnily enough on windows, you can do the same thing that you're talking about on Mac, I guess is intercept these calls and do whatever you want, but there's a work to do there. And power toys has like this beautiful, like widget gallery almost. It's like, here's a three by three grid of things that you commonly use. 08:07.44 James customize. like, I want that for tiny clips, right? I want to be beautiful little icons and like make the little thing work, you know? 08:09.56 Frank Yeah. Well, 08:14.07 Frank I want to correct myself already because um an NS menu item, like a menu item, can just be an arbitrary view also. So you don't even have to do the window hack I just said. 08:22.12 James Hmm. 08:25.69 Frank um It just occurred to me. You can put any old view you want into an item. And instead of text, it'll just be so you could throw your whole UI into one NS menu item. 08:37.05 Frank And that'd probably be the, honestly, the cleanest way to guarantee you would get all the positioning correct and all that stuff. 08:42.54 James be cool. Yeah, because I'm looking here at some apps and some of them do intercept and control center is like a super weird one with like a QT app that kind of pops up and there's a few other weird ones, but they are like atypical in general comparatively. 08:43.67 Frank Mm-hmm. 08:54.32 James But that's fascinating to think about. But I think that's the type of fit and finish that I was thinking about, right? It's ah small details that probably don't matter. 08:58.67 Frank Yeah. 08:59.88 James Like it probably doesn't matter that you can right click and a little menu comes up and you say like take screenshot. But to me, I was like, it's not as elegant in this modern 2026 when I have these AI agents can do that stuff. 09:07.83 Frank It matters. 09:13.89 James So I did go through that effort and energy to make that happen. I thought that was really unique. Another little fit and finish that I thought about for design are things that, you know, these are things that I'm not sure that the agents are thinking about, right? 09:26.11 James Which is why I think this design stuff is interesting. I think the stuff that we'll talk about packaging and distributing is fascinating. 09:28.66 Frank Yeah. 09:31.67 James But there's some things, ah for example, in the Tiny Clips app that I have been building out, that when you go and you select a region, it has this little bar and and it'll allow you to select like your audio, your webcam, um you know your mouse clicks if you want them, and then like a little countdown timer. And as I was adding features, it got bigger and bigger and it would just add stuff, it just adds stuff, right? 09:57.62 James And there's little things like for example, um on Mac and Windows, I said, hey, it'd be really nice that if someone decided to enable the webcam, we give them options there. 10:09.10 James Because like for the microphone, it's easy. Its microphone is pick your mic. You know, there's not much else you're really doing in there. 10:15.68 Frank Mm-hmm. 10:15.80 James ah There's probably you could control the audio volume or something else, but it's like it is what it is. 10:15.82 Frank Mm-hmm. 10:20.79 James But for webcam, there's placement. like I was going to allow different placement in corners. I was going to allow sizes. I was going to allow if you wanted like a circle or a rectangle or just a square and like what the rounded corners would be. And I had these in the settings menu, but then I wanted to be on demand. 10:36.28 James And sure enough, the first time I did it, the the agent was just like, bu bu bu bu bu bu bu bu but bu bu bu right? And then I was like, 10:41.91 Frank Yeah. 10:43.16 James Dang it, now I got to put on my design hat. 10:43.51 Frank Bro. 10:44.76 James How would I do it How would I make this look? 10:45.78 Frank Yeah. 10:47.04 James So I started bopping around every app that I could think about and how it was displaying and doing widgets. And I did come across just a little gear icon and the gear icon next to it with a little shove. 10:58.48 James When you open it, opens a little menu and it has the options and you can select them. It's very nice. 11:04.56 Frank Good. Yeah. 11:05.46 James um So the little it's a little details. Like, could I have had this huge bar? Yes, but to me, it just wasn't. elegant in a way, if that makes sense. 11:15.03 Frank Oh, no, I feel you because um I've been working for my fit and finish. I've been focusing on like the toolbar in my app where toolbars have gone through a lot of different variations on Windows. 11:22.83 James No, 11:26.60 Frank And so part of it is me catching up with like, what's the expectation now? Did you know ribbon? It's not a thing anymore. so No more ribbons. 11:32.70 James no, no, no, no. 11:34.14 Frank so But all toolbars kind of look like single page ribbons now, which is kind of funny. 11:39.61 James ah 11:40.73 Frank um But yeah, I've noticed exactly what you said. like AIs are good at like making a functional UI. like It's going to put a button up there and it's going to have an icon, but it's not good at layout. 11:53.38 Frank It's not good at white space management or you know make this one small, make this one big because like this is the important one. These ones aren't so important. It's really bad at icon selection for whatever reason. They're just not trained on it or something. um It picks the worst things there. 12:10.49 Frank So I feel you. I think that that's, um I think I bring it up every few weeks. Like, I mean, that's the last large domain for these AIs is user interface, because, I mean, they could they seem to be able to solve every coding challenge you give to it. 12:24.60 Frank But my goodness, even Fable generates, in my opinion, terrible UIs, especially for native apps. 12:28.83 James Oh, yeah, the the button, the button like click on and off is a great example because I have that in this app. 12:30.35 Frank Right. 12:34.41 James And when the AI agent decided to do it, it was like, OK, I'm going to put like the system audio. I'm going to put the your audio and I'm just going to make them the same icons and like you'll figure it out. 12:45.21 James And I was like, no, that doesn't make any sense. I was like, well, make it a mic. And then it was like, it was a mic when it was on, but it was like not a mic. I was like, no, make the mic with the line through it. So then it did it. And then I was like, okay, like, and then I was like, then there was like another one for like ah the mouse, like a mouse, cause you can add little mouse clicks. 13:02.87 James And it just made it a star. 13:02.94 Frank Yeah. 13:04.19 James i was like, don't make it a star. i'm like making a mouse. And then it did an SVG where it made a mouse with like little things. 13:08.42 Frank Right. Exactly. 13:09.55 James I was like, no, no, no. I was like, stop what you're doing. 13:12.41 Frank Stop. 13:12.51 James I was like, there's got to be an icon built in that is just a mouse or a cursor, whatever it is. 13:12.81 Frank Stop. Yeah. Yeah. 13:19.79 James And it's all like, oh yeah, there is. i was like, what are you doing? What would you say you do here? What would you say you do here? So it's a small things that that like I think about at the end of the day is like, I'm going to look at that button and that button better be awesome. 13:26.65 Frank You know? Yeah. 13:32.38 Frank yeah You know, I hate to say, like, i i really hate the world where we need one thousand MCP servers to do any kind of development, but I feel like we kind of need, like, an icon MCP server because they're driving me a little bit batty. 13:45.95 James hmm. 13:47.73 Frank Like, here's the concept I'm trying to portray, and here's your selection of icons. Choose one, and, here you know, here's the native platform ones and all that kind of stuff. 13:55.49 James Oh, 13:56.41 Frank Yeah. 13:56.60 James Totally. Like, like you're talking about the toolbars is like, it's the icons. 13:57.38 Frank Yeah. 13:59.96 James It's same on the Mac. It's like, what I kind of use, I use this, I use that. Like what? 14:03.80 Frank Yeah. 14:03.92 James it's like always picking the wrong ones. But did you figure out your, your toolbar crisis? 14:10.20 Frank I do. um And I'm having fun, though, actually, because um ah what I discovered was ah Windows has its own. like So I got very used to SF symbols on Mac and iOS. 14:23.13 Frank But I'm pleased to learn that like there is an equivalent of that on Microsoft. There is the Sago. um How do you pronounce that one? 14:29.24 James Oh, symbol as sego. 14:30.85 Frank I call it Sago, but... 14:33.28 James Yep. 14:33.66 Frank Yeah. ah Well, there's MDL2 assets, which is the one introduced in Windows 10. And those are kind of your um squared edge kind of icons. But for Windows 11, you're supposed to use Sago Fluent icons. And those have slightly roundier edges, you know. There's pretty much the same icon set. There's like 10 different ones in there. But um those icons are pretty great. And it's taken me a while to find like a good way to browse them and put them into my app. But thankfully, now that I have that library, I have nice icons in the app and I'm able to play with their sizes. You can't just say icon size 14. You have to put it in a view box. But whatever. I've learned how to do it. I've learned how to change the size of the icons. I make sure they get styled properly. so Dark mode, light mode, all that kind of stuff. 15:19.51 Frank um But the AI has been absolutely no help there. So that that's all been manual work, but that's fine. 15:23.42 James Yeah. 15:27.03 Frank i i Right now it definitely takes a human to do user interface. These robots are no good at it. 15:33.59 James I am curious and wondering if I had a decently better time because I had all of the Win UI custom agents installed on my machine. channel don't know if you've installed them yet recently. 15:41.21 Frank Fair. 15:42.78 James You should really give it a try. 15:43.22 Frank still haven't. Yes, you're right. 15:44.42 James and Because I think if you just set that as your main agent while you're doing the work, it's going to look up this stuff. and What's what's kind of crazy about this is I now have this Swift app and I also have the Win UI app. so I have Mac and Windows. 15:58.62 James um I have a really fun agents.md file. Well, it's a custom instructions because I don't agents.md, I custom instructions. But I have the first line after the the name of the project. as so I say, if I don't specify Mac slash Swift or Windows slash WinUI app, 16:16.44 James or both ask me what we're working on today. 16:19.58 Frank Yeah. 16:19.90 James So now when I give it something, it's all like, oh, that's awesome, but what app did you wanna talk about? And it'll pop up like Windows or Mac or both. 16:25.75 Frank Lovely. Yeah. 16:27.18 James So that's really, it's a fun fun one in general, because I'm like, oh, what is it talking about? 16:29.62 Frank yeah 16:32.12 James um But um what was I talking about? 16:37.93 Frank Well, it's funny because I put that in the AgentsMD now. I've learned I have to put the full product matrix and the UI matrix in AgentsMD. 16:43.60 James Yeah. 16:45.01 Frank I'm like, here are the main, because my apps have a thousand projects and I'm like, these are the main apps. This is the project for the Windows user interface. This is the project for the Mac interface. 16:55.42 James Yeah. 16:55.52 Frank Here's the iOS interface. And that's helped a lot because now I can just say, we're working on Windows right now. Go at it, you know, and it knows which projects to touch. 17:04.70 James I think that there's somebody at, I'll define it for you. I think there's someone at, I want to say cloud flare. I'm not positive. They have a repo. It's called like, i think it's called like mac dash skills or something like that. 17:17.90 James I'm not positive. 17:18.67 Frank Yeah. 17:18.74 James There's one of them, but for all intents and purposes, a bunch of skills about like different design paradigms on Mac. And I haven't installed that one, but I've been thinking about it a lot recently because when I was using the GitHub copilot app, I was. 17:31.83 James Soon working on this feature that was on multiple operating systems. So I came up with the plan. I said, map it out across Mac and windows, what we're going to do here. And then when I said implement it, it actually fired off a bunch of background sessions, but it could assign custom agents to each session. 17:50.17 James So what it did is it like assigned the sessions for Windows to the Win UI. 17:50.61 Frank Yeah. Okay. 17:54.49 James One, I thought that was like so, so neat. Okay, last fit and finish from me, because we were talking about fit and finish in general, and you have a lot of things that I think you're going to go into, not just your toolbar, but want to about sizes. 18:03.35 Frank citizen 18:03.94 James And I want to about, I actually want to talk nitty gritty on like, okay, what did we decide on our compilation? We talked about trimming, but what about ready to run? What about self-contained? 18:10.55 Frank Yeah. 18:11.43 James What about dependence list? What's this? like These are like weird fit and finishes that only you and I care about. Is it 40 megs or is it 15 megs? or Okay, no one cares. 18:18.40 Frank Oh, it matters. 18:19.26 James But I care. I care. 18:20.18 Frank i care 18:20.58 James I i i care. i refuse. I'll tell you, there was this. Okay, fit and fin finish that actually Copilot helped me a lot on, by the way, is you have the Windows app SDK, right? 18:30.77 Frank Mm-hmm. 18:33.94 James which is like the main thing of the WinUI components. 18:34.55 Frank Yep. 18:36.50 James There are two versions of this. There's a version 1.8, which is a stable and a two dot and a two dot x i think which is also stable. 18:40.06 Frank Yes. Oh, golly. 18:45.82 Frank Let me tell you, I've learned the difference quite quite a lot. 18:46.01 James now 18:48.82 Frank I've learned the difference now. 18:50.09 James Well, so I didn't know, but I was trying to just use the latest because that's what i always do. 18:50.14 Frank Please continue. Mm-hmm. 18:55.33 James And I ended up downgrading because Winget, I think only has 2.0 something on it to 1.8. And then I figured out a way to just, it didn't even matter what Winget had. I figured out how to package it correctly. But I was like, oh, should I update? 19:06.02 James And Copilot went through the analysis of compiling it with both and breaking it down. 19:10.94 Frank to 19:11.74 James And it said, no, maybe because my trimming wasn't working. It was like, don't use the newer one because it has all of the, um, machine learning and AI stuff in it. And they're like, you're not using any of those APIs. 19:22.40 James So just like, you're going to add an extra 20 megs or 15 megs for no reason. 19:24.85 Frank Oh. 19:26.63 James But that was crazy. Okay, last fit and finish. That was a fit and finish. 19:30.09 Frank It's more than that, but I'll talk about that too. 19:31.74 James Yeah, whats that we'll talk about it. 19:32.54 Frank Please continue. 19:33.79 James The one thing that I think was my my tiny little fit and finish is I have a settings dialogue with nice little fly outs and stuff. And as I was working with the agent, I keep adding features. It just keeps like jamming sessions, like like settings into the things. there's this big list of settings that are unorganized. 19:48.02 James So I said, you know what? 19:48.09 Frank yeah great yeah 19:48.66 James This is bothering me. I said, find natural groupings of said, of said, of controls. So put the camera stuff next to the camera stuff and the audio stuff next to the audio stuff and go through all the settings and make and regroup them, please, for the love of all that is holy in settings. 20:06.57 James It's the small things that make me happy. 20:06.58 Frank and put the important ones at the top you know there's little details like that it matters 20:08.44 James Yeah. Yeah. prioritize. What are users mostly going to use? If you don't know, ask me. I'll tell you what I use. Anyways, all right, back to packaging um over here. 20:18.17 Frank Okay. 20:18.73 James Let's get into the the Windows packaging goodness over here. 20:20.25 Frank Well, i won't I won't bore you completely, but I'll bore you a little bit. um I want to address the AI thing because, yeah, the latest WinApp SDK, for whatever reason, it includes like a 20 megabyte Onyx thing and then like a bunch of Microsoft.ai and Microsoft.ml. 20:27.18 James Hmm. 20:36.18 Frank They can't decide if it's AI or ML. And it just packages those automatically and even with the trimmer on. So there's some error with the trimmer where it just keeps picking them up in any way. 20:48.48 Frank I should probably write a little blog post because what what I ended up doing is I just put package references to those specific packages and said, um do not include these assets, private assets, exclude assets, all this stuff, because I'm like, I'm not touching that code. 21:04.13 Frank I don't want to ship it. um I'm a weirdo. I like small files. I don't believe iCircuit should be 1.5 gigabytes. um But Microsoft has other ideas. no So it was it was actually a pain in the butt to get rid of those. It's really unfortunate that they forced those into the SDK, especially when trimming is not working. 21:25.18 Frank Now that said, oh yeah, go ahead. 21:25.59 James Yeah. what what what What I want to say is you should ask Copal to do an analysis if you can just go and roll to the 1.88 and if there's analysis that that actually makes it smaller or not because the 1.8 whatever has all the same stuff in it, just minus that stuff. 21:43.50 James There might be other stuff in it, but I'm not i'm not positive. at least it did an analysis of my app and it was like, cool, just use this until you use new APIs that you need. 21:46.81 Frank yeah Yeah, there's versions all over the place because like the WinApp SDK.winUI is actually like version 2.2.3 or something crazy like that. 21:51.22 James So I was like, okay. 22:00.76 Frank um i could look into that, but I really just wanted a fresh start. like If 2.2 is what they're rocking, I want to be on 2.2. So I'm willing to do a few CSproj hacks to get rid of the stuff that I want gone. 22:14.06 James i'm and I'm interested because i would also just like to YOLO the latest because that's how I roll, but I do want to trim accordingly. 22:18.42 Frank Yeah. 22:20.14 James well i guess did you did you How did you trim? 22:20.82 Frank Right. 22:23.77 James did you trim ity- trim- trim trim 22:24.70 Frank I got to tell you, bro, um I had to turn trimming off. 22:28.82 James Mmm. Mmm. 22:29.20 Frank For the life of me, I could not get trimming to work. So the whatever the biggest problem I'm having is WinRT stuff. WinRT is the base library that actually is running all this UI stuff on Windows. 22:42.77 Frank it's from Windows 8. Hi, Windows 8. You're never going to go away. um That has just basically, in my opinion, broken trimming support. um And so I tried everything. 22:54.98 Frank you know Like in XAML, if you use curly binding, that's bad. That uses reflection. you gotta use curly x colon bind but x colon bind has tons of bad stuff where just it's it's it's not as sophisticated as curly binding and so was really making me chew up my app trying to convert everything over then i converted everything over to x colon bind and the stupid app was still crashing and i was just like you know what here's the deal 23:03.83 James Hmm. 23:26.03 Frank You're saving like it's it's not that many megabytes you're saving because it's still bringing in huge chunks of WinRT even with trimming turned on. And that's WinRT that's taking up all the room. You know, it's not your app. It's always the operating system. It's taking up space. And in the case of WinUI, it's a bunch of auto-generated code over WinRT interfaces. And so it's it's a perfect scenario for the trimmer to kick in, but for whatever reason, they just, they got they got to work on their code and get WinUI trimming improved. 24:01.50 Frank So I just had to turn it off. I gave up on that one, mostly because my app was still um small, even with trimming um ah turned off. 24:14.15 Frank Because again, that stupid AI ML stuff was 30 or 40 megabytes all by itself. So like just getting rid of those dropped the app more than turning trimming on was dropping the app size hilariously enough. 24:24.97 James Yeah. That makes sense. I think that my trimming is off. So there's, i have a, okay, so debug is off. 24:31.10 Frank Yeah, see? 24:35.38 James If not debug and self-contained equals true, which mine is not, or publish self-contained equals true, then trim. Else, if publish trimmed, then false. 24:44.22 Frank Okay, publish. 24:46.75 James Okay, so I think mine is off because didn't write that CSproj. 24:48.41 Frank That's complicated. Too complicated. Simplify Burrow. 24:52.03 James I didn't write that CSproj. 24:52.55 Frank Yeah. 24:54.74 James Well, because I also kind of went down this mechanism where I really wanted trim to be there. 25:00.89 Frank Yeah. 25:00.92 James ah and i think i was just like, I'm not going to bother it. like I'm not going to do it, but I want to. 25:06.81 Frank Yeah, it's annoying because i i have trimming enabled on iOS and macOS, you know, like, so I know my code can handle trimming. Well, that's not even true. A few of my libraries I had to mark as do not trim this, just bring the whole thing in. 25:20.42 Frank Don't worry about it. It's a small library. Don't touch it. um So it's a little bit frustrating. And honestly, I might revisit it when I get a little bit better at the debugging tool so I can figure out exactly what's being stripped that's causing the trouble. 25:33.38 Frank So maybe we'll do a follow-up episode to this. 25:35.93 James Yeah. 25:36.18 Frank But I want to move on to self-contained and single-file executable. 25:43.37 James Okay. Yeah. Cause I, I went down a different route. I started down this route and then I went a different route and I'm curious about kind of where you landed at on this puppy. 25:47.10 Frank Okay. 25:52.34 Frank Yeah. Well, here's the deal, James. I'm going to ship this thing on the store. So it kind of doesn't matter. I don't need to do the whole um single executable deployment thing. 26:06.33 James Yeah. 26:06.62 Frank But what's always bothered me about um all these new libraries and everything, especially WinUI, is how it always needs like an install script. So it can do like certificates and all this gross stuff to the machine. Because you like you try to bundle your app so that you know I could just email it to you. And it like generates an install um PowerShell script and all this stuff. and It's just so gross, especially because i know how Windows works. It doesn't need any of that. That's all just modern um security theater out of the security people. 26:40.86 Frank So i I wanted, just as a personal mission, i wanted icircuit.exe, no dependencies, nothing. Zip that puppy up. you know Call it the.app. The Mac world has really infected me. I want icircuit.exe. Nothing else. It's got the.net in it. It's got all its dependencies in it. 27:00.95 Frank Everything. 27:02.15 James Okay. 27:02.62 Frank And that's and it's it's mostly for testing because um i know the Microsoft Store totally supports beta testing and all that. 27:06.11 James Yep. 27:10.36 Frank But I personally just want my app to be one executable I can give to people. so i did it i said self-contain this puppy uh windows app sdk self-contained because it's a different property because of course it is and then i did a bunch of like property exclusions because if you set some of these properties at the command line it goes down into your dependent projects and then they won't build because the win app sdk is a fragile mess So you got to like literally turn off like other properties into your dependencies. Fine. I can, I'm, I know CS proj files. I can do that. I did that. 27:47.32 Frank And um the last big one was, you know, put this all into one dot exe. I don't want just self-contained. I want single file, baby. This is what I want. one file. 27:59.90 Frank And I got it working and my machine's chugging, chugging, chugging. I'm like, it's fine. It's fine. I'm used to i'm used iOS builds. They can be slow. And it popped out. It's like, I built it for you, babe. I'm like, so good. I'm so happy. I'm so excited to see my iCircuit.exe. And without any joking, 1.25 gigabytes. 28:20.60 James No way. No way. 28:21.91 Frank ah 28:22.69 James What did you include in this thing? 28:23.46 Frank A hundred percent. What was I including is the question. I'm like, AI, what the heck is going on here? Like, I know..NET 28:31.45 James Analyze slash analyze. 28:34.56 Frank is not one gigabyte. Win UI is not one gigabyte. It's like 64 megabytes at the at the worst case. um My code is not a gigabyte. 28:44.57 Frank So are we including a movie? I thought like maybe it's packaging all of Star Trek. Like, i don't know what what's taking up a gigabyte here. 28:51.16 James yeah the The AI decided in your CS project to randomly do Star Trek.mp4 and just include that into the into the origin story. 28:56.63 Frank Yeah. Right. 29:01.10 Frank It's in my about page raw and it's not compressed, you know, because it's better that way. 29:04.12 James ah um it's got to be four k or 4K or bust. 29:06.90 Frank Right. Right. 29:07.38 James I mean, it's basically a ripped Blu-ray. 29:09.88 Frank So I'm like, AI, what is going on here? This can't possibly, like, I don't care what settings are wrong. Like, this makes absolutely no sense. And it's like, yeah, okay, I'm going to look into it. 29:21.22 Frank ah It disabled debug info. I dropped it down 10%. So it's at like 1.15 gigabytes. I'm like, well, I guess that's better. But no not not good enough, babe. 29:29.72 James No. 29:32.44 Frank And then it's like, okay, I'm going to really look into it. I'm like, hey, why don't you really look into it? Maybe read some docs, you know, do that kind of stuff. 29:37.66 James Get in there. 29:38.68 Frank Yeah, I'm like, you I'm just trying not to throw the computer across the room or anything like that. 29:39.20 James Yeah. 29:45.60 Frank And it's like, oh okay, ah well, what if we turn off ready to run? Maybe maybe it's ready to run. I'm like... It's not ready to run. 29:54.11 James It's not ready to run. 29:54.92 Frank yeah's it's It's just not. It's not. But I'm like, fine, bro. You do it. And then we went down a whole other rabbit hole because turning off ready to run is a whole other blah. Who cares? Whatever. We succeeded into it. James got that.exe down to 1.0 gigabytes. 30:12.54 Frank Oh, my God. Yeah. 30:13.75 James Did you not just rename the XE to.zip, extracts that zip, what is in this thing? that's got There's gotta be in there, right? 30:20.72 Frank Well, I actually wasn't sure what the format of that.exe was because I did turn on the property of please compress my single file um app thing. i wasn't sure. Like usually in the world I'm accustomed to, it would be a resource. The resource would be compressed. It would decompress it into a temporary folder or whatever and then do its magic there. 30:40.92 Frank But I'm like, I'm trying to do this from like the, the like you read the docs and you set the properties according to the docs kind of perspective. So I'm just a little bit flabbergasted. I'm a little bit amazed. And um right. 30:53.06 Frank So we had turned off ready to run and all that stuff. I'm just like, there is something wrong here. So this is when I say we need some deep research. AI, why don't you ah won' you figure out what's actually going on here and figure out what's actually in that exe? 31:05.72 James Get in there. Get in there, bro. a 31:08.68 Frank Because it just gave up. It's just like, well, okay, sorry. um So we had, if I didn't ask for an icircuit.exe, I got a directory that was 190 megabytes. I'm like, okay, that's big, but that's reasonable. 31:19.95 James That's big. but 31:21.18 Frank Because like maybe, you know, it's it's not trimming. 31:21.66 James Yeah, that's that's right yeah yeah 31:23.74 Frank It's not whatever. Yeah. 31:25.35 James that's reasonable. and' Because you probably got a bunch of dependencies. 31:26.58 Frank Yeah. 31:27.51 James You're doing a bunch of stuff. You got like web, yeah all this stuff. 31:28.60 Frank Sure. Yeah. 31:29.83 James Yeah. 31:30.20 Frank So it's bigger than I would like. But, you know, in this world of fav icons being 190 megabytes, I'm like, I'll deal with it. It's fine. But I'm like, why don't you crack open that EXE and figure out what's actually in there? 31:44.92 Frank And it turned out, and I don't know if, by the way, this whole time I'm like deleting bin and ob OBJ directories constantly because I just assume that like maybe the script is dumb and the script is just picking up random files in the OBJ directory or something like that. 31:51.30 James Yeah. 31:58.48 Frank So that was a theory. And it comes back and it's like, hey, ah I don't know why, but inside this exe is all the like store builds of the app in like an app packages. It's basically like taking the Nougat directory and just... 32:17.30 Frank putting all of the NuGet packages directory into my executable for absolutely no reason. 32:22.01 James What? 32:23.14 Frank Yeah. So I don't know which of the many thousands of targets are in the project system, but one of them was doing something naughty and it was reproducible. 32:33.86 Frank This wasn't like some random bugs. Like I tried everything, cleaning it out left and right. 32:36.10 James Yeah. 32:38.94 Frank But we finally put in this like little CS project thing of like, do not package files that start with like app packages or something like that. 32:47.30 James Wow. 32:47.82 Frank So it's a little bit of a hack. It's a hack I don't love. But again, this isn't going to be my main distribution point. This is me just wanting to prove that I can create a single executable version of the app. 32:59.42 Frank And what happened came out at 93 megabytes. And I was, yeah, I know because like the the Mac version of my app is like 30 megabytes. 33:03.69 James That's about what I would expect, yeah. 33:10.48 Frank So I'm fine because I had trimming turned off. So I knew like WinUI by itself is like 64 megabytes just sitting there. So I already knew that. 33:17.59 James and I think.NET still gets trimmed, right? 33:23.61 Frank You would hope, because like there you know I should say there's full trim mode, partial trim mode, and no trim mode. And I think I at least have partial trimming turned on, so just not full trimming. 33:29.94 James Yeah. 33:33.60 Frank Yeah. 33:34.10 James Yeah. There's like, there's like published trimmed. And then there's like, I think there's other trim settings that are on by default automatically in.NET 10 that probably are doing other trimming of certain things and not like the extras because I went down the same route of tiny clips and I was doing, do I do a self-contained XE or do an MSIX? 33:38.97 Frank yeah 33:43.96 Frank Right. 33:51.13 James And I ran into the same thing. 33:51.32 Frank Right. 33:52.21 James So the first time I did a self-contained XE, it was about 90 some odd megs. And I was like, okay, cool. 33:57.46 Frank OK. 33:58.63 James Yeah. So I was like, all right, that's fine. But then i was talking to to Burke and he's like, why is every Windows app a hundred megs? That's what he goes. He's like, it doesn't make any sense. 34:08.44 Frank Because of this build script. 34:10.49 James And I was like, well, I was like, I'm i'm like, okay, I'm going to do this. So I went down some rabbit holes where I turned on and off a few things, X, Y, Z, and I'll put it in MSIX. 34:21.82 James um And I got it down to 60 megs. And I was like, that's okay. 34:26.61 Frank OK. 34:27.17 James And I was running into some problems. i was like, can we improve this? And the first thing it was like, Just turn off ready to run. you don't need that. 34:32.41 Frank ah You beat me to it. So that was the last thing I did. um You know what? 34:36.30 James Did you it back on 34:37.59 Frank No, I turned it off. 34:38.71 James Okay. 34:39.13 Frank ah So I had ready to run on because all my publish and release builds were ready to run. 34:41.31 James Yeah. If people don't know ready to run is it is. 34:47.99 Frank It is..NET apps are intermediate language, IL code, and ready to run, basically runs the JIT on the dev machine and outputs a bunch of um Intel X64 code or ARM64 code or X86 if you're living in 1995. 35:07.42 James thought 35:07.72 Frank It'll it'll output all that. It'll precompile all that stuff. It's not as much as like an AOT t does like it's it's not like the LVM AOT. t It's not like native AOT. 35:18.09 Frank t Because like the JIT can still run, but it's pre-JITing the bulk of it, 80 or 90 percent of it without messing with anything. 35:27.06 James Oh, also, were you doing one package that had like any CPU, both like X64 and arm ARM in it, or were you splitting that into two XEs that were separate? Because I was splitting them into two. 35:39.70 Frank I'm splitting because i on Mac, I know how to do what's called a a fat object model, like fat because it contains a bunch of architectures in it. 35:40.83 James Okay. 35:49.00 Frank But I'm not sure if Windows even supports that. 35:49.39 James Yeah. 35:51.88 Frank I'm not sure what the state of the art is right there with Windows. 35:52.60 James I don't know. just Just split it. 35:54.60 Frank So I was i was very specific, one architecture per executable. 35:55.03 James Okay. 35:59.20 Frank And when I turned off ready to run, because it turns out, you know what, James, the JIT is fast. 36:03.96 James yeah 36:04.12 Frank Like I opened and closed the app 50 times to see if I could tell a difference between the ready to run version and the not ready to run version. 36:09.88 James Yeah. 36:10.93 Frank Can't tell a difference. All right. 36:12.00 James No. 36:12.05 Frank Like, and I have a circuit simulator. It is running math code very quickly. Hundreds of kilohertz, you know, games run at 60 frames per second. I run at a hundred thousand frames per second. 36:22.41 Frank So like I would be sensitive to this kind of stuff. And you know how much difference it made? None. So, um It actually dropped the icircuit.exe down to 71 megabytes. 36:27.79 James Yeah. 36:33.94 James Nice. Very cool. 36:34.74 Frank So now we're now we're properly rolling. 70 megabytes is fine. 36:37.34 James Now we're cooking. 36:39.14 Frank i'm i And again, this is not even trimmed. So I'm like, fine, done, sold. 36:42.58 James Yeah. 36:44.66 Frank So if you have a small app that actually can be trimmed, I'm sure you can get your app down to like tiny town levels of size. And so I was very happy because finally i had iCircuit.exe with no dependencies, no.NET dependencies, no package dependencies, no user interface dependencies. 37:02.42 Frank As long as you had, I'm curious, I would i would like to try it. ah Some version on Windows 10. I bet you I could even get it to run on Windows 8 if I tried hard, but thank God no one runs Windows 8. So... 37:12.59 Frank it It just felt good because it's been so long since I've been able to build a GUI app in Windows with no dependencies. 37:15.44 James Yeah. 37:22.98 Frank Because even today, like I'll download some 100 megabyte file and they're like, you got to install.NET. I'm like, then why is your app 100 megabytes? Like just include it all. So it felt really good to get there. 37:31.83 James Yeah. 37:32.10 Frank 73 is big, but or 71 big, but it's fine. It's fine. fine 37:37.25 James That's pretty good. Yeah, I got mine down. It seems to be about like 10% R to R. um I got mine down when I did that MSIX. I think it was like 50 each. And maybe I was doing an any CPU build originally. 37:46.17 Frank Yeah. Okay. That's nice. 37:48.58 James So it's 50 each. I was like, okay, that's pretty good. um i was like, what else can I do? 37:52.25 Frank okay 37:54.94 James i 37:55.42 Frank Yeah. 37:55.70 James um i've already I've already gotten in half. 37:55.86 Frank Okay. 37:57.62 James What else can I do? 37:58.36 Frank Well, I want to interject real quick. 37:58.50 James And it... Hmm. 38:00.36 Frank I can't do any CPU either because I'm pulling in DirectX libraries, like Direct2D. And those libraries are very whiny about um architecture specifics. 38:09.52 James Yeah. 38:11.81 Frank So i kind of I'm jealous of you that you're able to do any CPU. But I don't think it's in the cards for me because I'm pulling in DirectX. OK. 38:20.50 James Well, don't worry, because I'm not doing any any CPU. Because I split that puppy up. It's half the size. 38:24.86 Frank um okay ah 38:24.90 James So I was like, okay. i was like And it was like, turn off R2R. I was like, okay, what did I save? It was like, you saved five megs. I was like na they're like, But then I was like, okay, well, should I? 38:30.84 Frank i uh yeah so did copilot say that to you which model i want i want names and addresses 38:33.29 James It's five megs. but And they're like, and like let me do like hey. Hey, bro. Hey, bro. They're like, your app is a system bar app that like starts in the background and no one cares about your app. So it's fine. And I was like, oh, sick burn copilot. Jeez Louise. I'm like, wow. 38:51.13 James No, I was, I was, I was reading deep into the five, five, ah the stack there. Um, 38:58.33 Frank I'll see. Yeah, I've been rocking Yeah. 38:59.26 James It was, there little, it was a little saucy. But then i was like, okay, well, how do I go further on this? Because I can deliver this, you know, fat MSIX. I said, what else is in here? It's like, well, inside of here, you still bundled said X and y And I was like, well, what else has I bundled? They're like you've bundled, knowing the done at runtime, but you've also bundled the win you i ah the Windows app SDK. 39:22.78 James like 39:22.87 Frank yeah 39:23.32 James Because you're using MSIX, you can delay load those things. And MSIX, when you install it, will install those dependencies on demand if required from the App Store, from Winget, or from anywhere else. 39:34.65 Frank ah 39:37.52 James And I said, hmm. I said, okay, well, what's the user experience look like? And they did did an analysis and it was like, hey, bro, 39:42.97 Frank Right. 39:47.48 James basically everybody has the Windows app SDK if they're on like modern Windows 11, maybe if it's on Windows 10, they might need to install it. 39:53.46 Frank Okay. 39:55.06 James But they're like, don't worry, it's only a 10 mega install and they'll un install it once and you'll be fine to go. 39:58.42 Frank sir 40:00.06 James but but it but it does it but it does it odd it But it does it automatically for them, right? 40:00.18 Frank Okay, I get it. It's a good argument. 40:04.30 James It just opens it up, right? 40:05.11 Frank Fair, fair. 40:05.58 James And then I was like, well, what about.NET 10? And it was like, no, it's probably gonna install it no matter what. So I was like, okay. yeah i was like but But I was like, okay, let's do the trade-offs. Right? 40:15.62 Frank OK. 40:15.99 James Because my goal was to get it as, my app as low as possible. 40:16.44 Frank OK. 40:19.81 James Granted, I have dependencies. But it got the puppy down. 40:21.88 Frank OK, we have different goals. OK. 40:23.58 James Yeah, it got the puppy down 14 megabytes. Mm. 40:27.32 Frank That's better because if you have those dependencies, you have no excuse. Like your application code has to be small. I don't know what you're coding over. i mean, tiny clips, but I'm like 14 megabytes of application code is actually quite a lot. 40:41.02 Frank So I hope that's including a bunch of PNGs also and things like that. 40:44.02 James the The biggest thing that's inside of here is I have like the community toolkit. It's probably gonna some overhead. I also have Microsoft graphics, wind 2D, which is like all the 2D drawing stuff. 40:50.04 Frank Right. 40:54.09 Frank Yeah, there's your direct acts. 40:56.16 James Yeah. 40:56.21 Frank Wait, so you're getting away with NCPU with Direct2D in there? That's pretty impressive. 41:00.06 James No, that was like the very first build basically. 41:01.53 Frank Oh, okay, that's gone. I'm sorry. I forgot already. 41:03.12 James That's gone. Yeah. 41:03.61 Frank Yeah, you turn that off. yeah 41:05.10 James i'm I'm also somehow using N-Audio. I don't know what that is. And also Vortis Direct 3D 11 and Vortis DXGI. I have no idea what those are, but they're in my applications because someone decided to use some dependency. 41:14.94 Frank and some dependency you picked up along the way, some graph drawing thing. Yeah. 41:19.55 James I'm going to look it up. 41:19.99 Frank So um congratulations for getting down to 14. 41:20.11 James I don't even know what it is. Yeah. 41:22.55 Frank I mean, that's definitely reasonable. That's smaller than most fav icons. So, but my, my problem is my whole thing was I wanted zero dependencies and I get it. 41:32.46 James Yeah. 41:32.97 Frank Most people have this thing installed, but like my philosophy is if you had that dot exe, the app would run, whether you're on the internet or not, I'm very sensitive to like internet connections these days. 41:43.43 James Well, and the MSIX will also run if you bundle that all in there. So either the self-contained XC or the self-contained um MSIX will work. Both of those work, which is kind of awesome, right? 41:54.59 James The nice thing about MSIX is it does automatic upgrade, versioning, all this other stuff. 41:54.76 Frank Mm-hmm. 41:58.63 James So it is pretty cool um to do that. 42:01.36 Frank Yeah. All 42:01.81 James But again, i agree with you because here's the problem is I try to then take said MSIX, the one without the dependencies, into a Windows sandbox. 42:08.09 Frank right. OK. 42:10.21 James And it's like, no, bro, can't do it. 42:11.83 Frank Ah, see. 42:12.02 James and I was like, ah so 42:12.97 Frank OK. You'll have to show me how you did that sometime. We'll have to talk sandboxes next time because I would actually love to test it. 42:17.69 James ah. 42:18.82 Frank I'm doing it the old fashioned way of copying it to another machine. And I try to put a machine into like a pristine state where I'm like, I haven't installed anything on here. 42:24.66 James Dude, dude, dude, it's a WSD file, Windows Sandbox something. Ask your agent to create it. 42:31.94 Frank OK. 42:32.81 James It can create the file and what it will do is when you click it, it will not only launch a Windows Sandbox, it will also then install your application automatically for you. 42:33.21 Frank Yeah. 42:43.02 James So you can have a WSD file every single time for rapid testing. 42:43.26 Frank Love it. 42:46.42 James And then you can even have it execute the script for you after said builds, whatever you're doing. 42:50.97 Frank Yeah. 42:51.36 James Windows sandbox is amazing. It's in the box. You have to turn it on in features and whatever. But once you turn on Windows sandbox, there's an app on your machine called Windows sandbox. 42:57.47 Frank OK. Great. 43:00.38 James And it is an instantaneous Windows sandbox that can be spun up and torn down. 43:00.50 Frank Yeah. 43:05.78 James So nothing is persisted. It's a sandbox that goes away when you close the window, but it boots up in literally seconds and you have a full Windows environment. 43:14.24 Frank Sure. 43:15.26 James It's an admin mode thing. But because of that, some of the things aren't there like this with the dependency resolution thing because it's a sandbox. 43:17.10 Frank Right. 43:23.63 Frank Right. Okay. Interesting. 43:25.14 James Yeah. 43:25.88 Frank Okay. 43:26.07 James yeah But my 100 meg thing totally worked. 43:26.84 Frank ah That's very cool. I'll have to look into it. 43:31.26 Frank Great. Yeah. Fantastic. Yeah. So it was a little bit of a rabbit hole for me because like I said, I'm going to ship the app on that store. So and it doesn't matter. 43:39.48 James yeah 43:39.94 Frank The store is going to create a directory. It's going to dump all the files into it that it needs, all that stuff. And it's going to handle like the fat M-S-I-X package and all that silliness. um This was just me on a personal vendetta. 43:53.90 Frank I wanted to prove to myself because we've had self-contained.NET forever now. I wanted to see a full GUI app properly self-contained with a bunch of dependencies and things like that. So I'm very happy for myself because it's just my preferred way to actually distribute apps when I'm not selling them is just here's an exe. It's guaranteed to work. No installer needed. Just run it. 44:19.37 Frank You're good to go. Yeah. 44:20.50 James Yeah. Vortis.Windows is a.NET binding for and DirectInput. 44:26.21 Frank Ah. 44:35.93 James Dude, that's a good package. 44:37.91 Frank Oh, yeah, you know, now I'm vaguely remembering, like, Microsoft used to ship.NET wrappers over the um DirectX objects. I wonder if these are just new alternatives to all those then. 44:50.52 Frank So it's probably just a bunch of common interfaces, honestly, in there. 44:50.57 James Yeah. 44:54.24 Frank It's probably not even that big. 44:55.91 James gonna sponsor this project right now. Amir in Italy, a fellow Italian. 45:02.90 Frank Italiano. 45:03.48 James Become a sponsor. I'm a sponsor. How do I? Oh, then I'm gonna have a GitHub sponsors. How do I do it? 45:08.52 Frank I remember that day when Microsoft stopped shipping DirectX bindings. 45:08.82 James Am I not logged in? 45:12.78 Frank i'm like the I mean, the whole purpose of.NET was the interface with com objects, and they took away the most common use case of Direct3D. 45:19.58 James Yeah. 45:21.88 Frank Silly, silly. But hey, that Direct2D thing, that's been really great. I've been enjoying that. 45:28.31 James Pretty good. Yeah, the it's so good. 45:30.39 Frank Pretty smooth and fast. 45:30.83 James Yeah, super smooth. 45:31.51 Frank Pretty decent rendering. Yeah. 45:33.56 James Yeah. ah 45:35.69 Frank I haven't. Well, that's it. That's that's my fit and finish. I'm I'm sure I'll have more by the time I actually release this app. But there's a really weird rabbit hole to go down. I'm just like, I want iCircuit.exe. Don't need it. 45:48.50 Frank I want it. 45:49.82 James Yeah, I need it in my life. Well, I can install it anytime I give it a go. And by install it, I mean double-click it and it opens. So, I mean, that is the nice thing about this this self-contained XE is it's very, like, future-proof. 46:03.64 James But i guess do sign it. You don't have to sign it at all because you're just shipping it through the store where you'll do signing and other stuff. 46:08.15 Frank I specifically didn't sign it. I didn't want to deal with the certificate chain and all that stuff. 46:10.20 James Yeah. 46:12.19 Frank when when 46:12.38 James Yeah. 46:13.72 Frank So my normal build does all that signing junk. There's a bunch of certificates with my publisher ID and all that nonsense. um This was me living from my old jobs that I used to have where no one had any rights to do anything, but for whatever reason, they could still put an executable on their computer. 46:31.70 Frank um So none of that signing nonsense. 46:33.13 James Windows will yell at them. 46:34.50 Frank Yeah. 46:35.10 James Windows will be very upset with them, but they'll definitely be able to get through all the way. 46:35.20 Frank Yeah. 46:37.78 Frank Guess what? Still runs. 46:39.38 James It's all run. They'll get it to run. All right. Well, let us know what your fit and finish is. If you have little tweaks, little little things that you're like, i just want to adjust that little thing right into the show. Go to YouTube.com forward slash at Merge Conflict. Give us your deets. And by deets, I mean comments. 46:55.65 James Let's see we got any comments. Well, we are currently at 914 subscribers. Now we've been the same as last week, but we're getting ever closer in general. um We've got all sorts of comments on there. if you like the comments, give the comments. It's good to go. i think one of the most popular, going to do quick analytics here. 47:13.27 Frank Okay. 47:13.32 James I'll do this year of top viewed episodes. What do you think our top viewed YouTube video is? 47:19.56 Frank alphon Oh, Oh, I don't know. there's a There's a funny bias on YouTube, so it's going to be our most negative episode probably. I think the algorithm loves negative episodes. So were any of our titles really negative? 47:33.74 James No, we're all positivity over. Number one episode, almost 1000 views is going full Ralph CLI in the Copilot SDK where we did the Ralph loop episode. 47:35.61 Frank Thank you. Good. 47:41.97 Frank Ah, Ralph. 47:43.15 James The second one though, here's a crazy one for you. 47:43.43 Frank Mm-hmm. 47:45.91 James Ready for this? Rectified flow revolution where we 400 views. 47:49.42 Frank Heck, you are... I'm... Hey, y'all. I can talk about more rectified flow next week. I'm literally training a rectified rectified flow network right now. 47:59.90 Frank You might hear a back back hum in the background. My 3090 is churning and it's hot outside. And I have like a heater going on in this room because I am rectifying all the flows. 48:11.06 James Oh my gosh. 48:14.52 James Well, if you're rectifying flows too, let us know on the YouTube. We appreciate it. go to MergeConflict.fm, like, subscribe to other things. That's going to for this week's Merge Conflict. So until next time, I'm James Watson Magno. 48:23.96 Frank And I'm Frank Krueger. Thanks for watching and listening. 48:27.29 James Peace.