Skip to content
Episode 521

521: Polish Matters: UI, Icons, and AI Design Fails

Your Hosts

About this Episode

Episode 521 James and Frank obsess over “polish”: the tiny design and packaging details that make apps feel finished. They start with impeccable.style, product.md and design.md (and why agents.md and readme aren’t enough), then dig into UI fit‑and‑finish — tray/menu UIs, icon choice, grouping settings and why AI agents still struggle with layout and whitespace. The conversation then moves deep into Windows packaging: WinApp SDK versions, trimming woes with WinRT, ready‑to‑run vs. single‑file self‑contained builds, MSIX tradeoffs, and strange cases where builds bloat with unwanted packages. Key takeaways: give agents the right metadata, expect to hand‑tune UI polish, split architectures, disable R2R for size savings, exclude unnecessary SDK assets, and use Windows Sandbox/WSD for testing. A practical, nitty‑gritty episode for devs who care about the final mile.

Follow Us

⭐⭐ Review Us ⭐⭐

Machine transcription available on http://mergeconflict.fm

Support Merge Conflict

Transcript

James 00:00

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?

Frank 00:14

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.

James 00:23

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

Frank 00:31

Yes.

James 00:32

Today I figured what we would do is we would talk about polish.

Read Full Transcript Hide Full Transcript

Frank 00:37

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.

James 00:45

Oh,

Frank 00:46

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.

James 00:58

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?

Frank 01:07

No, but I love the yeah URL already. It's literally impeccable.style. Love it.

James 01:12

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,

Frank 01:26

Bacchus.

James 01:27

i don't know what exactly he does, but...

Frank 01:29

The god of partying. Awesome.

James 01:30

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.

Frank 01:40

Oh.

James 01:40

And there's a few things that are kind of fascinating here.

Frank 01:41

Oh.

James 01:43

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? 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.

Frank 02:03

i I live on AgentsMD. it's it's It's my only escape hatch from the insanity of Yeah.

James 02:10

Agents MD, you're my only hope. Um, we know about instructions.

Frank 02:12

yeah

James 02:14

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?

Frank 02:23

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?

James 02:39

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.

Frank 02:46

Oh, OK.

James 02:57

It's your product. I'm pretty pretty sure like that's, that's what it is.

Frank 03:02

Yeah.

James 03:03

um

Frank 03:03

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.

James 03:11

Yeah.

Frank 03:12

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.

James 03:21

Yeah, no idea.

Frank 03:23

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.

James 03:31

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.

Frank 03:40

Okay,

James 03:43

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.

Frank 03:50

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?

James 03:58

Now. 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.

Frank 04:09

They don't read it.

James 04:16

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.

Frank 04:24

Right.

James 04:28

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.

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.

Frank 05:09

Yeah.

James 05:14

It's not going to care about your design and the implementation there. For example, if that makes sense.

Frank 05:19

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.

James 05:26

Yep.

Frank 05:32

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?

James 05:48

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.

Frank 05:53

Mm-hmm.

James 05:53

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. 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.

um So my application Tiny Clips is a menu slash you know tray application.

Frank 06:24

Okay.

James 06:28

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.

Frank 06:36

Yeah. Nothing else.

James 06:39

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?

Frank 06:46

So. 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.

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. 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.

James 07:35

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. 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.

Frank 07:54

yeah.

James 07:54

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. 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?

Frank 08:09

Yeah. Well, 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.

James 08:22

Hmm.

Frank 08:25

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. And that'd probably be the, honestly, the cleanest way to guarantee you would get all the positioning correct and all that stuff.

James 08:42

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.

Frank 08:43

Mm-hmm.

James 08:54

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.

Frank 08:58

Yeah.

James 08:59

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.

Frank 09:07

It matters.

James 09:13

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? Which is why I think this design stuff is interesting. I think the stuff that we'll talk about packaging and distributing is fascinating.

Frank 09:28

Yeah.

James 09:31

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?

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. 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.

Frank 10:15

Mm-hmm.

James 10:15

ah There's probably you could control the audio volume or something else, but it's like it is what it is.

Frank 10:15

Mm-hmm.

James 10:20

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. 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,

Frank 10:41

Yeah.

James 10:43

Dang it, now I got to put on my design hat.

Frank 10:43

Bro.

James 10:44

How would I do it How would I make this look?

Frank 10:45

Yeah.

James 10:47

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. When you open it, opens a little menu and it has the options and you can select them. It's very nice.

Frank 11:04

Good. Yeah.

James 11:05

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.

Frank 11:15

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.

James 11:22

No,

Frank 11:26

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.

James 11:32

no, no, no, no.

Frank 11:34

so But all toolbars kind of look like single page ribbons now, which is kind of funny.

James 11:39

ah

Frank 11:40

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. 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.

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. But my goodness, even Fable generates, in my opinion, terrible UIs, especially for native apps.

James 12:28

Oh, yeah, the the button, the button like click on and off is a great example because I have that in this app.

Frank 12:30

Right.

James 12:34

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. 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.

And it just made it a star.

Frank 13:02

Yeah.

James 13:04

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.

Frank 13:08

Right. Exactly.

James 13:09

I was like, no, no, no. I was like, stop what you're doing.

Frank 13:12

Stop.

James 13:12

I was like, there's got to be an icon built in that is just a mouse or a cursor, whatever it is.

Frank 13:12

Stop. Yeah. Yeah.

James 13:19

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.

Frank 13:26

You know? Yeah. 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.

James 13:45

hmm.

Frank 13:47

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.

James 13:55

Oh,

Frank 13:56

Yeah.

James 13:56

Totally. Like, like you're talking about the toolbars is like, it's the icons.

Frank 13:57

Yeah.

James 13:59

It's same on the Mac. It's like, what I kind of use, I use this, I use that. Like what?

Frank 14:03

Yeah.

James 14:03

it's like always picking the wrong ones. But did you figure out your, your toolbar crisis?

Frank 14:10

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. 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?

James 14:29

Oh, symbol as sego.

Frank 14:30

I call it Sago, but...

James 14:33

Yep.

Frank 14:33

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.

um But the AI has been absolutely no help there. So that that's all been manual work, but that's fine.

James 15:23

Yeah.

Frank 15:27

i i Right now it definitely takes a human to do user interface. These robots are no good at it.

James 15:33

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.

Frank 15:41

Fair.

James 15:42

You should really give it a try.

Frank 15:43

still haven't. Yes, you're right.

James 15:44

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. 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,

or both ask me what we're working on today.

Frank 16:19

Yeah.

James 16:19

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.

Frank 16:25

Lovely. Yeah.

James 16:27

So that's really, it's a fun fun one in general, because I'm like, oh, what is it talking about?

Frank 16:29

yeah

James 16:32

um But um what was I talking about?

Frank 16:37

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.

James 16:43

Yeah.

Frank 16:45

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.

James 16:55

Yeah.

Frank 16:55

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.

James 17:04

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. I'm not positive.

Frank 17:18

Yeah.

James 17:18

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. 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.

So what it did is it like assigned the sessions for Windows to the Win UI.

Frank 17:50

Yeah. Okay.

James 17:54

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.

Frank 18:03

citizen

James 18:03

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?

Frank 18:10

Yeah.

James 18:11

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.

Frank 18:18

Oh, it matters.

James 18:19

But I care. I care.

Frank 18:20

i care

James 18:20

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?

Frank 18:30

Mm-hmm.

James 18:33

which is like the main thing of the WinUI components.

Frank 18:34

Yep.

James 18:36

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.

Frank 18:40

Yes. Oh, golly. Let me tell you, I've learned the difference quite quite a lot.

James 18:46

now

Frank 18:48

I've learned the difference now.

James 18:50

Well, so I didn't know, but I was trying to just use the latest because that's what i always do.

Frank 18:50

Please continue. Mm-hmm.

James 18:55

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? And Copilot went through the analysis of compiling it with both and breaking it down.

Frank 19:10

to

James 19:11

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. So just like, you're going to add an extra 20 megs or 15 megs for no reason.

Frank 19:24

Oh.

James 19:26

But that was crazy. Okay, last fit and finish. That was a fit and finish.

Frank 19:30

It's more than that, but I'll talk about that too.

James 19:31

Yeah, whats that we'll talk about it.

Frank 19:32

Please continue.

James 19:33

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. So I said, you know what?

Frank 19:48

yeah great yeah

James 19:48

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. It's the small things that make me happy.

Frank 20:06

and put the important ones at the top you know there's little details like that it matters

James 20:08

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.

Frank 20:18

Okay.

James 20:18

Let's get into the the Windows packaging goodness over here.

Frank 20:20

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.

James 20:27

Hmm.

Frank 20:36

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. 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.

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. Now that said, oh yeah, go ahead.

James 21:25

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. 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.

Frank 21:46

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.

James 21:51

So I was like, okay.

Frank 22:00

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.

James 22:14

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.

Frank 22:18

Yeah.

James 22:20

well i guess did you did you How did you trim?

Frank 22:20

Right.

James 22:23

did you trim ity- trim- trim trim

Frank 22:24

I got to tell you, bro, um I had to turn trimming off.

James 22:28

Mmm. Mmm.

Frank 22:29

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. 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. 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

James 23:03

Hmm.

Frank 23:26

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.

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. 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.

James 24:24

Yeah. That makes sense. I think that my trimming is off. So there's, i have a, okay, so debug is off.

Frank 24:31

Yeah, see?

James 24:35

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.

Frank 24:44

Okay, publish.

James 24:46

Okay, so I think mine is off because didn't write that CSproj.

Frank 24:48

That's complicated. Too complicated. Simplify Burrow.

James 24:52

I didn't write that CSproj.

Frank 24:52

Yeah.

James 24:54

Well, because I also kind of went down this mechanism where I really wanted trim to be there.

Frank 25:00

Yeah.

James 25:00

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.

Frank 25:06

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. 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.

So maybe we'll do a follow-up episode to this.

James 25:35

Yeah.

Frank 25:36

But I want to move on to self-contained and single-file executable.

James 25:43

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.

Frank 25:47

Okay. 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.

James 26:06

Yeah.

Frank 26:06

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.

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. Everything.

James 27:02

Okay.

Frank 27:02

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.

James 27:06

Yep.

Frank 27:10

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.

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. 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.

James 28:20

No way. No way.

Frank 28:21

ah

James 28:22

What did you include in this thing?

Frank 28:23

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

James 28:31

Analyze slash analyze.

Frank 28:34

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. 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.

James 28:51

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.

Frank 28:56

Yeah. Right. It's in my about page raw and it's not compressed, you know, because it's better that way.

James 29:04

ah um it's got to be four k or 4K or bust.

Frank 29:06

Right. Right.

James 29:07

I mean, it's basically a ripped Blu-ray.

Frank 29:09

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. 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.

James 29:29

No.

Frank 29:32

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.

James 29:37

Get in there.

Frank 29:38

Yeah, I'm like, you I'm just trying not to throw the computer across the room or anything like that.

James 29:39

Yeah.

Frank 29:45

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.

James 29:54

It's not ready to run.

Frank 29:54

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. Oh, my God. Yeah.

James 30:13

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?

Frank 30:20

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. 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.

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?

James 31:05

Get in there. Get in there, bro. a

Frank 31:08

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.

James 31:19

That's big. but

Frank 31:21

Because like maybe, you know, it's it's not trimming.

James 31:21

Yeah, that's that's right yeah yeah

Frank 31:23

It's not whatever. Yeah.

James 31:25

that's reasonable. and' Because you probably got a bunch of dependencies.

Frank 31:26

Yeah.

James 31:27

You're doing a bunch of stuff. You got like web, yeah all this stuff.

Frank 31:28

Sure. Yeah.

James 31:29

Yeah.

Frank 31:30

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? 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.

James 31:51

Yeah.

Frank 31:58

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... putting all of the NuGet packages directory into my executable for absolutely no reason.

James 32:22

What?

Frank 32:23

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. This wasn't like some random bugs. Like I tried everything, cleaning it out left and right.

James 32:36

Yeah.

Frank 32:38

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.

James 32:47

Wow.

Frank 32:47

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. 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.

James 33:03

That's about what I would expect, yeah.

Frank 33:10

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.

James 33:17

and I think.NET still gets trimmed, right?

Frank 33:23

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.

James 33:29

Yeah.

Frank 33:33

Yeah.

James 33:34

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?

Frank 33:38

yeah Right.

James 33:51

And I ran into the same thing.

Frank 33:51

Right.

James 33:52

So the first time I did a self-contained XE, it was about 90 some odd megs. And I was like, okay, cool.

Frank 33:57

OK.

James 33:58

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.

Frank 34:08

Because of this build script.

James 34:10

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. um And I got it down to 60 megs. And I was like, that's okay.

Frank 34:26

OK.

James 34:27

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.

Frank 34:32

ah You beat me to it. So that was the last thing I did. um You know what?

James 34:36

Did you it back on

Frank 34:37

No, I turned it off.

James 34:38

Okay.

Frank 34:39

ah So I had ready to run on because all my publish and release builds were ready to run.

James 34:41

Yeah. If people don't know ready to run is it is.

Frank 34:47

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.

James 35:07

thought

Frank 35:07

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. 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.

James 35:27

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.

Frank 35:39

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.

James 35:40

Okay.

Frank 35:49

But I'm not sure if Windows even supports that.

James 35:49

Yeah.

Frank 35:51

I'm not sure what the state of the art is right there with Windows.

James 35:52

I don't know. just Just split it.

Frank 35:54

So I was i was very specific, one architecture per executable.

James 35:55

Okay.

Frank 35:59

And when I turned off ready to run, because it turns out, you know what, James, the JIT is fast.

James 36:03

yeah

Frank 36:04

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.

James 36:09

Yeah.

Frank 36:10

Can't tell a difference. All right.

James 36:12

No.

Frank 36:12

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. 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.

James 36:27

Yeah. Nice. Very cool.

Frank 36:34

So now we're now we're properly rolling. 70 megabytes is fine.

James 36:37

Now we're cooking.

Frank 36:39

i'm i And again, this is not even trimmed. So I'm like, fine, done, sold.

James 36:42

Yeah.

Frank 36:44

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. 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...

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.

James 37:15

Yeah.

Frank 37:22

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.

James 37:31

Yeah.

Frank 37:32

73 is big, but or 71 big, but it's fine. It's fine. fine

James 37:37

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.

Frank 37:46

Yeah. Okay. That's nice.

James 37:48

So it's 50 each. I was like, okay, that's pretty good. um i was like, what else can I do?

Frank 37:52

okay

James 37:54

i

Frank 37:55

Yeah.

James 37:55

um i've already I've already gotten in half.

Frank 37:55

Okay.

James 37:57

What else can I do?

Frank 37:58

Well, I want to interject real quick.

James 37:58

And it... Hmm.

Frank 38:00

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.

James 38:09

Yeah.

Frank 38:11

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.

James 38:20

Well, don't worry, because I'm not doing any any CPU. Because I split that puppy up. It's half the size.

Frank 38:24

um okay ah

James 38:24

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?

Frank 38:30

i uh yeah so did copilot say that to you which model i want i want names and addresses

James 38:33

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. No, I was, I was, I was reading deep into the five, five, ah the stack there. Um,

Frank 38:58

I'll see. Yeah, I've been rocking Yeah.

James 38:59

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.

like

Frank 39:22

yeah

James 39:23

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.

Frank 39:34

ah

James 39:37

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,

Frank 39:42

Right.

James 39:47

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.

Frank 39:53

Okay.

James 39:55

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.

Frank 39:58

sir

James 40:00

but but it but it does it but it does it odd it But it does it automatically for them, right?

Frank 40:00

Okay, I get it. It's a good argument.

James 40:04

It just opens it up, right?

Frank 40:05

Fair, fair.

James 40:05

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?

Frank 40:15

OK.

James 40:15

Because my goal was to get it as, my app as low as possible.

Frank 40:16

OK.

James 40:19

Granted, I have dependencies. But it got the puppy down.

Frank 40:21

OK, we have different goals. OK.

James 40:23

Yeah, it got the puppy down 14 megabytes. Mm.

Frank 40:27

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. So I hope that's including a bunch of PNGs also and things like that.

James 40:44

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.

Frank 40:50

Right. Yeah, there's your direct acts.

James 40:56

Yeah.

Frank 40:56

Wait, so you're getting away with NCPU with Direct2D in there? That's pretty impressive.

James 41:00

No, that was like the very first build basically.

Frank 41:01

Oh, okay, that's gone. I'm sorry. I forgot already.

James 41:03

That's gone. Yeah.

Frank 41:03

Yeah, you turn that off. yeah

James 41:05

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.

Frank 41:14

and some dependency you picked up along the way, some graph drawing thing. Yeah.

James 41:19

I'm going to look it up.

Frank 41:19

So um congratulations for getting down to 14.

James 41:20

I don't even know what it is. Yeah.

Frank 41:22

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.

James 41:32

Yeah.

Frank 41:32

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.

James 41:43

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? The nice thing about MSIX is it does automatic upgrade, versioning, all this other stuff.

Frank 41:54

Mm-hmm.

James 41:58

So it is pretty cool um to do that.

Frank 42:01

Yeah. All

James 42:01

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.

Frank 42:08

right. OK.

James 42:10

And it's like, no, bro, can't do it.

Frank 42:11

Ah, see.

James 42:12

and I was like, ah so

Frank 42:12

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.

James 42:17

ah.

Frank 42:18

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.

James 42:24

Dude, dude, dude, it's a WSD file, Windows Sandbox something. Ask your agent to create it.

Frank 42:31

OK.

James 42:32

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.

Frank 42:33

Yeah.

James 42:43

So you can have a WSD file every single time for rapid testing.

Frank 42:43

Love it.

James 42:46

And then you can even have it execute the script for you after said builds, whatever you're doing.

Frank 42:50

Yeah.

James 42:51

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.

Frank 42:57

OK. Great.

James 43:00

And it is an instantaneous Windows sandbox that can be spun up and torn down.

Frank 43:00

Yeah.

James 43:05

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.

Frank 43:14

Sure.

James 43:15

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.

Frank 43:17

Right. Right. Okay. Interesting.

James 43:25

Yeah.

Frank 43:25

Okay.

James 43:26

yeah But my 100 meg thing totally worked.

Frank 43:26

ah That's very cool. I'll have to look into it. 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.

James 43:39

yeah

Frank 43:39

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. 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.

You're good to go. Yeah.

James 44:20

Yeah. Vortis.Windows is a.NET binding for and DirectInput.

Frank 44:26

Ah.

James 44:35

Dude, that's a good package.

Frank 44:37

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. So it's probably just a bunch of common interfaces, honestly, in there.

James 44:50

Yeah.

Frank 44:54

It's probably not even that big.

James 44:55

gonna sponsor this project right now. Amir in Italy, a fellow Italian.

Frank 45:02

Italiano.

James 45:03

Become a sponsor. I'm a sponsor. How do I? Oh, then I'm gonna have a GitHub sponsors. How do I do it?

Frank 45:08

I remember that day when Microsoft stopped shipping DirectX bindings.

James 45:08

Am I not logged in?

Frank 45:12

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.

James 45:19

Yeah.

Frank 45:21

Silly, silly. But hey, that Direct2D thing, that's been really great. I've been enjoying that.

James 45:28

Pretty good. Yeah, the it's so good.

Frank 45:30

Pretty smooth and fast.

James 45:30

Yeah, super smooth.

Frank 45:31

Pretty decent rendering. Yeah.

James 45:33

Yeah. ah

Frank 45:35

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. I want it.

James 45:49

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. 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.

Frank 46:08

I specifically didn't sign it. I didn't want to deal with the certificate chain and all that stuff.

James 46:10

Yeah.

Frank 46:12

when when

James 46:12

Yeah.

Frank 46:13

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. um So none of that signing nonsense.

James 46:33

Windows will yell at them.

Frank 46:34

Yeah.

James 46:35

Windows will be very upset with them, but they'll definitely be able to get through all the way.

Frank 46:35

Yeah. Guess what? Still runs.

James 46:39

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. 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.

Frank 47:13

Okay.

James 47:13

I'll do this year of top viewed episodes. What do you think our top viewed YouTube video is?

Frank 47:19

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?

James 47:33

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.

Frank 47:35

Thank you. Good. Ah, Ralph.

James 47:43

The second one though, here's a crazy one for you.

Frank 47:43

Mm-hmm.

James 47:45

Ready for this? Rectified flow revolution where we 400 views.

Frank 47:49

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. 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.

James 48:11

Oh my gosh. 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.

Frank 48:23

And I'm Frank Krueger. Thanks for watching and listening.

James 48:27

Peace.

Download Transcript

Episode Comments