mergeconflict290 === [00:00:00] James: Frank Frank Frank Frank Frank episode, 290 of merge conflict is here. That's right. We're coming again with more technology mobiles, client cloud shenanigans. Um, and these are our favorite episodes because every 10 episodes, if you're brand new, after 290 episodes, what we do is on the 10th episodes of 2 80, 2, 9300, 3 10, we do lightening topics. We reach out to you, our listeners and say, what do you want us to talk about? Because for the last nine episodes, you pride anyone to listen to any of that. So now you get to tune in to what you want to hear about, and we have great great stuff, right? [00:00:48] Frank: W we better because I love the name client shenanigans, uh, that could have been an alternate title for this podcast. I didn't know that's what we did, but it's what we do according to you. And I'm excited for it. Yeah. The, these, uh, these lightening episodes are one of my favorites, especially because this week we had great feedback from everyone online. You put a call out, said we need some lightening topic episodes, and we're going to cover them in some order who knows what it's gonna be. [00:01:15] James: I agree. And, and to be honest, it's actually really hard for us to do this episode because both Frank and I independently came into this episode with a topic for a full episode that never happens, frankly. It's either like we get in. Neither of us have an idea of what we're going to talk about. That's usually the case, or maybe one of us does, but never two of us, like that never happens. [00:01:39] Frank: It's exciting. And we'll see which one of us is the most patient and can put their idea off first and longest. Yeah, it's fun. [00:01:48] James: Hmm. I do. I do want to say though, um, many lightening topic, did you know that you can reply. And I iMessage and create threaded conversation. [00:01:58] Frank: I discovered it. And then I felt like, am I being too nerdy by doing this? But like, my sister did it to me once and I was like, oh, what, what is this? And yeah, I'm like, what are they teams or something? And all of a sudden, I, I kinda love it. Cause like the IRC nerdy, like slack person in me wants to do it completely, but I haven't had the gods as a too nerdy. I love that apple put it. [00:02:23] James: Is it new or is it, has it been there forever? I don't know. [00:02:28] Frank: A year, couple of years. I don't know. Keep up with it. The stuff [00:02:32] James: you do. Cause I long press on stuff all the time and give it a thumbs up or a heart or whatever. And then I saw in another thread, my father-in-law did it and I was like, I was like, what is that? I was like, [00:02:44] Frank: he just did something. [00:02:45] James: The, I have no idea. This retired guy is using the technology better than I can. It's amazing. Um, I guess it's intuitive then if everyone's using it, I'm in, I'm all in on. [00:02:57] Frank: Hmm. And I guess, yeah, you're probably. Okay. So that's funny. They were both introduced to us, neither of us founded ourselves or paid attention during the WWDC video or whatever that were, they were announced. But yeah. Um, I don't know, just because you said that I'm going to thread reply to everything you sent me now. [00:03:16] James: Well, I was talking to Heather about this and one of her friends uses replies heavily, like all the time. And she said to me, it's an etiquette thing. If somebody uses replies, I try to also use replies, you know, thoughtfully in that conversation. But if nobody ever uses replies, then I don't. So I think that's good, but I think the other use case for it is, is I'm not just going to reply to everything, but sometimes. You know, if I'm in a group thread or if you and I are talking, we might have, like, I might just spew information at you. Are you at me, but you might want to pick out one thing and be like, I want to start a thread on this thing kind of. Yeah. [00:03:55] Frank: And it's not like we all, haven't had that funny thing where you're actually having two conversations at the same time and both parties are mostly keeping up. But at the same time, it's a little bit weird. If you say a thing that could apply to both conversations. So that's kind of, I guess there is a natural case for it, but I think overuse. It could be too formal, just too formal. Don't want to be formal in text messages. [00:04:19] James: Yeah, I agree with that. I agree with that. I think that the correct thing to do is give a thumbs or like to every single message and that's pretty appropriate. All right, let's get into it. I'm going to kick it off Dennis. A Landy on Twitter asks. Cause we just, we just put it out on and said, Hey, what are your things that we're going in order? Don at six minimal API APIs, five minutes, Frank, what do we think? [00:04:43] Frank: Uh, that net six minimal API is, I assume they're talking about like asp.net, kind of launched files. I saw someone had a cute little meme out there and it was the confused person meme saying where's startup dot CS. Like where, where do I put all this stuff that I used to put in the place? Um, I would say that there. Cute. I don't, they definitely make for good demos. I'm not sure how I feel about them for like a full app for like a big app maintainability and easy ease of finding something is really good. And though I tend to design APIs that are comfortable with like a minimal approach. Like we, I think is really cool. You can write really small apps and a very minimal API. It's it's it's, it's nice to put things in separate files under directories, just so you can find them later and remember how the stupid project works. [00:05:36] James: I think that they're talking about a hybrid of that with. The HTTP API. Is that what you're talking about as well? Yeah, [00:05:45] Frank: I'm on both. Yeah. So what they did was use C-sharp 10 features to clean up, uh, a, the structure of the file. So lots of, very little indentation, that kind of stuff. And then on top of that added a lot of easy ways to create routes in asp.net. That just route to a little function that you pass it, very reminiscent of how JavaScript frameworks and Python frameworks. And how we does it [00:06:11] James: and how we does as a. Eh, web developer that often is creating web APIs. That aren't crazy complex. Um, I find these to be really powerful and nice. I, so, so what you can do is in this top level, Program, which is in your program, programmed CS, you'll see like create a web app and you can say app dot map, get map posts, give it around and do stuff and you can pass it a database, you know, stuff. And because of C-sharp 10 Lambdas are so powerful. It can, you can pass anything to it. Very similar to express, which, which is what you're saying is like Java script framework to create a minimal API or maybe flask, for example, in Python. So I think it's a nice compete. If you're not a web developer, use these other frameworks, you can go in there, right? It's not a replacement for controllers. It's a compliment for controllers. If that fits your application best. The part that I liked the most is that. You could go into one file and you could see all of your routes all in one place, technically, right. It's calling a D it's calling a, a delegate Lambda. Those could be in a different file. Right. But you could, you could really streamline the process. I hear all of my routes, everything like this, all in one nice little file and read them easily. And I think that'd be pretty nice. Um, and my. [00:07:35] Frank: Yeah. I think where they, especially shine is where you want to see all the routes is in like a rest API server. You know, something that's just dealing with data. It'd be fun to see, um, this minimal API merge with something like Azure functions where it's like, sometimes I want to put them into a monolithic app where all these things exist together. Sometimes I want to break them out into many little apps or function in vocation, things like that. Uh, anyway, two separate worlds. I don't know why I'm confusing a mom. I was just kind of. That kind of stuff anyway. Yep. I totally, I approve of both kinds of whatever we're talking about here. Um, especially because it's how we does it. So of course I approve. [00:08:17] James: Yeah. I think it's, I think it's solid, you know, I think it's an option. It's a tool in your toolbox. And I think about that with all of the new.net and C-sharp 10 features, right. You don't have to use. You don't have to, you don't have to do anything. No. One's telling you that you have to use this or that, but there's obviously a, a desire for certain individuals that want to use features like this, or maybe it's going to make, you know, creating web API APIs with dotnet more approachable for people that are just getting started. Like, I think it's really cool that you can create a web API or a minimal web app. And just a few lines of code that to me is attractive. To using a framework is that it can start simple, but then scale and you could add more of the, you know, logistics and ceremony to it later, or architecture, if you will. Um, later on, I think that's a nice about this type of stuff. [00:09:15] Frank: Yeah, I liked starting small. And like you said, all those features are optional, but they're definitely opinionated. When you.net new a new app, they definitely are promoting a minimal, minimal style, which, you know, I've sharp programmer too. I love that kind of stuff. Good topic. We could actually move on to the next one as a little bit of a segue because Nuno comes right out and asks is Frank going to push we forward? Okay. So yes, new now I absolutely am, uh, pushing we forward. The thing is I'm in, we're in, we're all in a weird transitory migratory state right now called dotnet. So. And I'm just waiting for a little bit more dust to settle before I put in the finishing touches, um, to getting we to work, because I assume you're talking about like dotnet six and Maui and that kind of stuff. So absolutely. Absolutely. Just, uh, things are rough right now. And we. It needs to poke around a little bit. And I don't want to keep repeating that work. I've worked on two Mallory versions of it already and already those two are broken, just, you know, waiting for the dust to [00:10:32] James: settle. Yeah. And this gate question came about because Nuno is asking a lot about, Hey, you know, I see blazer, and then you can, you know, re-share your blazer, UI and add-on and Maui app with blazer. And, you know, there's not a web target if you're writing XAML right. There's some other frameworks out there that do it like flutter. I think Avalonia may even have one or Huna or something like that. And I just think it's done in Maui is not even launched yet. Right. The team's got to finish the four platforms before they would have more platforms. Um, but it's cool that you, that you're going to, you're going to commit, uh, here. Oh, Frank, I should update, I should update soundbite.fm to dinette Maui, and then two, we Don and Maui flavor pretty much the way. [00:11:15] Frank: I mean, there is technically a branch of we out there that works with preview five.net six that is capable of showing buttons and labels. James, if your app is only buttons in labels, you are [00:11:30] James: all set. I mean, you know, most of my apps, literally Frank, just put a number on the screen, so pretty much [00:11:38] Frank: excellent. Excellent. I might even have fond support. It might be that [00:11:41] James: advanced. Yeah. You know, You know, it's hard to, to have every single target all at once. Right? I think people are always asking like, why not this? Why not that? And if I look at how, you know, flutter have evolved over time, right. I was going back in new history, like the alphas and the baby. It was just iOS and Android. And then, you know, you add more platforms later, just like Xamarin forms did. Right. At the same time, like I started iOS and Android and they did more windows and there was a Mac backend that was in preview and a Linux one that was for the community that ties in and things like that. So it's all a matter of time, right before, do you want to target even more things, but you got to get the first version out. So then Frank can put we on the down and Mallory, but I agree, like right now I've been. Going back and forth is like, I'm like almost ready to try to convert some apps or do by next app in it like this time next year, like my next app will just be a Don and Maui app. I want it to think about it, but like in December I was like, well, do I do a Don and new Maui app, knowing that it's going to evolve and I want to get this app. Or will I create a Xamarin forms app, get it out in a few weeks. Cause I already have all the code written and can clone it for the skiing app. And then I have a whole year until the next ski season. You know what I mean, to evolve it, if I want to, or Xamarin forms will continue to work. Right. Uh, it's a, it's a nice, uh, world that, uh, yeah. [00:13:06] Frank: Yup. Yup. Yup. And actually I skipped over a little bit of a new nose question here. It starts with, uh, placers very much directed to web developers. I just want to address that part very much. It is obviously it's a web framework. It is, of course it's addressed to web developers, but hashtag that said, um, I've written a tiny little game in it and I'm very excited. The game of earth I wrote in blazer. And I'm very excited to try putting that into a mobile. Because I still want to try releasing it as a mobile app. So I'm excited to try I'm embedding blazer into mobile apps. I think that's going to be a fun. [00:13:43] James: And that being said, I also note that I believe that razor and blazer are not that different than doing XAML based development. The complexity is the styling. So head over to free code camp, go take all your CA. Courses learn about CSS and which can also be used in Dani Maui and Xamarin forms, if you want to apply CSS, but that would go a long way or take a look at some of the frameworks that are out there. Like there's the mud blazer, there's the fluent framework that gives you the pre baked nice controls that are all styled up. I think that's the difference is I know how to style. You know, Xamarin forms and native controls. I just don't know how to do the web part of it. So by not a lay down, you know, control like controls and labels and, you know, different things like that. But I think a lot of those components are. Yeah. [00:14:33] Frank: Yep. [00:14:33] James: Good time. Okay. Next one. Talking about client dev. We are rolling on the client dev and new features. SI or client shenanigans, client shenanigans, NEC Kanazu ask Paul. Good try. um, three words, comment. C-sharp M V. [00:14:59] Frank: Three words in response. I don't know. I'm sorry, everyone. This is one place where my knowledge and I'm so friend of the show, friend of the show, Clancy works on this thing, and I have to admit that. Barely. No. How do I even know how to use it? I know how to use it because it's so simple. So what is comment C-sharp NVU you might be asking, well, have you heard of this little technology called reactive something? I forget what it's called. Have you heard of this other thing called swift UI? Well, it's Swifty. Why for Dutton head that runs using the same engine as XAML does and Maui and San Fran forms. Comment, I think actually started the Zimmerman for. No, actually, I think it was completely independent. I don't know how it started, but, um, what it is really, it's another style of programming. So we were just talking about react. We, we all know our XAML style of UI programming and MDU is kind of a. The react blazer way, but in code instead of an mark in a HTML or markup, and it's an excellent way to write apps, see all the success Swifty UI has had, uh, but it is a different way to write your app. And therefore, I unfortunately just haven't spent much time. [00:16:19] James: Yeah. As the seam, you know, Clancy and Javier and David and others have worked on in cleansy for a long time, a lot of people in the min squeaky and a whole bunch of people from the community have worked on it here and there. And you're right. It's been, uh, uh, around for a long time and it's, it's actually in a dot repo, like it's get up.com/donna/comment and an experiment. So it's an. NVU told kit. So that's the model view update, which is the same approach as like a, I think you're right. Like a reactor, a flutter type experience. [00:16:51] Frank: yeah. Well, it's the object oriented. I hesitated because normally you call this functional reactive programming FRP, but I hesitated because NVU is, or at least the way comment doesn't the way swift UI do it is kind of like the object oriented. On it. So it's not exactly like the Elm style. It's not like fabulous. It's the object oriented way of writing in that style of programming. It's really fascinating. I absolutely love it, but sorry, just had to interject there. [00:17:21] James: Yeah. And it's something that, to me I've never experimented with a while ago. Um, they just did a dynamic community standup, but Don Moe community stand up on it. I'll try to put a link if I remember into the show notes, but it's also on the, the Danette. Uh, you can go over there and Clancy was on showing it off and yeah, if you just want to code first approach, there's that, but I will also say that there's, um, also like C sharp extension helpers too, and the Xamarin forms and the dine-in Maui community toolkits that make today just using the built-in stuff a lot nicer. If you want to build coded UI. I'm just a XAML person, but I'm sure eventually if I just, once the thing's out and it's pass experiment and I actually get in it, as long as I know all the controls and the properties and stuff, I can put it in my mind and probably get it all to work. I wouldn't see why not. I [00:18:13] Frank: mean, it's, it's, it's good tech because you and I have had this discussion over the many years, we've known each other. Whether to write our UIs and a markup or a code first way, I actually write most of my UIs and a code first way. So in that respect not much has changed where this NVU thing is nice. Is it handles essentially the database. Problem. Yeah. Which is exactly what XAML is solving. Also, we use AML, guess what? Because of the data binding thing, it's an okay. Markup language, but it's really good at data binding and that's why we use it for that purpose. Uh, that's one of the hardest problems I've done code first UIs all the time, basically the last 10 years. And. You know, refreshing the UI when the data changes and then sending those updates back into the data is the fundamental hard problem in user interfaces. And so any new take on it, I am honestly here for, I just need to do better and keep up. [00:19:11] James: Yeah. You know, you and I talked about this. Oh geez. A while ago when we were talking about blazer and plays, our hybrid is I personally. I think I like the blazer style of data binding better than the traditional XAML data binding, because you can like shove off function in there. You can just bind it to a thing. It doesn't matter. Just like, just knows when to do. You don't have to worry about property changes, all this other stuff. Each of these approaches blazer with the razor and the binding there. And also NVU with comment, they kind of, sort of, when we talk about minimally KPIs, they started to remove some of that ceremony. If you will, I don't know a better word for it, but that, that extra adornments and extra code that you have to write to, to get things updating, um, and those things. So I think that that is one nice part of this approach is that data binding concept. But again, Technically the Donna mowing team could implement some of that stuff like razor does. And that would be kind of cool. And they've done it in the past and there's been experiments. So the blazer mobile binding. Yup. [00:20:19] Frank: Yup. Um, these are all, uh, advanced forms of binding and I'm here for it because I'll just repeat myself. It's the hardest part of UI programming. So anything that tries to tackle the problem, it's so easy to draw up a UI. It's hard to make it react to data changes and in a good way. [00:20:40] James: Yeah. Agreed onward. What's the next one? Frank on [00:20:44] Frank: word. Well, Sakib. I'd be interested to hear if either of you are going to use.net six for native mobile apps, or are you all into Maui? This is just, we're turning this into the Maui show. I'm sorry. I didn't realize, but it's such a segue it's what's on people's minds. So of course, it's fine. Um, so Frank musher, we have an old code basis to bring along question mark. Oh yes. Oh yes, I have. The old code basis. And so on the last show I was talking about, I was building my first, uh, small dotnet six app, mostly as a test ground to figure out what, uh, what the implications are of building a dotnet six apple today. And my end result is although there are many hurdles, it's still something I can totally do and that I want to do because you can stick around in the past for. Two years, three years, if you figure out the right, like building contagions and you start saving everything in a downloads folder, but life has just so much easier if I just spend that couple of days or whatever it takes to port the apps over to a dotnet six. So my biggest concern is for. For new apps or semi modern apps, if the conversion is going pretty well, um, it's just a matter of time and getting all the tools in place for older apps. I get concerned about things like, um, old iOS support. You know, I still technically support iOS nine, but I'm, we, we have this discussion every year too. I'm really gonna think I'm finally going to go to iOS 11 as my minimum O S. And although this conversion is painful, honestly, I don't like keeping projects in a dual state where it can compile both for dotnet six and old Xamarin stuff. It's just one of those, it's a part of the job that you have to keep up with the times or else you're just creating more problems for yourself down the [00:22:38] James: road. Yeah. You know, and this also applies to libraries too. So for example, I just went down this rabbit hole of attempting to. Um, upgrade my in-app billing plugin library for not only supporting old Xamarin and Xamarin forms projects, but also all new, um, dot-net six iOS, Android, Don, and Maui. And when you, I three projects and this huge mega TFM collaboration explosion to specify different nougat packages and use the essentials instead of, you know, Donna Mallory, essentially Xamarin forms of centrals based on your target. And, um, Uh, I got it working and I got it NCI working and it was quite, you know, not great to do, but I did, it took me a few hours and I totally did. And I'm very proud of myself that I figured it out. So then the question is like, Hey, how long does this, does this work? And, um, the issue I ran in there was to your last point, which was maintaining different CII services and builds and backwards compatibility. Because the one thing I noted is that. My windows support for the eNett billing was back to like 16,000 or 1600 or whatever the old, old one was. It was always built it against that, that doesn't ship and compile and visual studio 2022, you have to compile against a 19,000 whatever. What I'm doing now is I'm actually building two nougats. I have two CS proj files that reference all the same files, one with old TFS and one with the mega TFS and I, and I SIM ship a 5.0 version. That is, Hey, this is the old main. And I have a new six point overs and that has all the new hotness because I hope everything works. Who knows if you're, if you need that get 6.0. But if you don't stay on 5.0 and one's built against vs 2019 and 1 20 22. So realistically Frank, how long do I do that for. [00:24:37] Frank: Yeah, I was having this debate just today because I was getting continuous up in continuous delivery. I was trying to, uh, deployment continuous to point whatever. I'm trying to get it up to test flight on build time. And I had this choice because I now have a dotnet six Mac catalyst version of the app. It still needs a lot of refinement. I'm not releasing it just yet. But I can technically just take that TFM at the top of the file and put the word iOS there instead of that catalyst. And I can build my iOS app from that. I decided that's too big of a gamble to do just today because that's going to be something I need to sit down for a day or two and work out all the actual implications of it, uh, getting that build working, especially because I do some nasty things in the build, you know? So, um, But even then, even with this app that, uh, does nasty things in the build, I'm still very tempted to do that cross compilation. We're we're that close. So I figure, even if it's not this year, it'll be next year where I figure pretty much all my apps I hope would be switched over. And I think, I hope I didn't say this last year, but I think it's about one more year of him being in this awkward in between state where I'm building them in different. [00:25:59] James: Yeah. I think the year in between is good, but, and okay, so back to SOC Gibbs question, which was, which you answered already, we kind of answered, but it says done at six for native mobile apps, like just here's an iOS and Android app. What you're going to continue to up and do your stuff, or am I going all in, on down a mountain? Well, here's, at least for me is I haven't built a, you know, non xamarinforms. IOS or Android or even windows app in probably four plus years. To be honest with you. I think probably since I have all as shipped the very first evolve conference app 20 14, 20 16, I mean, I went all in and to me, I've gone all in. So that's where I'm the most productive. I used to be really hyper productive on Android UI. And I used to do all my coded UI for iOS and I was pretty good at it. But I'm just like really hyper productive right now in this space. So going to Donna Maui is means. Just change a few namespaces and combine everything into one project and I'm still super productive. So I'm all in, on the, on the down end Maui trains. Um, not to say that I won't write plugins that accesses no's native API. I always need those native APIs. So, but yeah, [00:27:09] Frank: that's it. I mean, PCLs for the rest of eternity. [00:27:15] James: Depends on your app too. It depends on your app. Right? [00:27:18] Frank: I have a counter argument. Oh, I think I am. Okay. Now I'm not all into Maui, but I'm partially into Maui in that I'm going to use a as the starting point, the entry point for all my apps. And even if I just do a Frank thing and completely replace, you know, Maui with my own implementation of Maui that uses like the native, the way I want it to use the native and all that, I think I'm still gonna use it as kind of the templating framework for the cross platform, meanness of the apps, because. All the build system. Is the writing's on the wall. The build system is going to work best for cross platform, app development with a Maui app. So what I'm doing today right now with dotnet sex, as I'm doing native development, no Maui, I'm not even installing Maui on these machines and I'm just accessing the native API APIs because that's how I write my apps with native UIs. But we've talked about this in the past where. Zimmerman forums and Maui, if nothing else are just a framework for how to write an app, if I don't want to use their code, I don't use their code. It's not a big deal, but it's fine for me to use them as basically my startup routine for like, you know, this is how to kick off the app. And then after that, I can either take as much control as I can. Or as little control as I want. And this is all basically, so I can support Android. I just want to do a better job supporting Android. I, I, I do love you Android, and you know, I need to have more apps on Android. [00:28:49] James: Well, the funny part here and we'll carry on over here is that. I was the inverse of you, is that the actual reason I moved to even want to do more xamarinforms and now down at Maui is because I wanted my iOS applications to look better. You know what I mean? Cause I couldn't be an expert in both UI kit and Android XML and windows Zam on all of them at the same time. But that's what a cross-platform library gives you is it gives you access to multiple things at the same time. And now talking about that, talking about. Which is funny enough and talking about some of the new stuff that even as in Donna Maui, which is multi window support with seen delegate snuck up also ass, we're going to do this one real quick is something called pre warming and iOS 15 with posts, literally, both you and I had no idea what this meant. Um, but he was asking, what are we using for our settings SQL Lite or we're using key store or we're using preferences, less RNs, user defaults. They seem to be battling with iOS 15 pre-warning frame. What is pre warming. Oh [00:29:54] Frank: boy. Okay. So I'm expected to remember what we just learned a half hour ago. Well, James, as far as I can tell what's happening in iOS 15, according to apple is from time to time, the operating system may decide that the user may launch your app. I'm assuming this is like, when you do a spotlight search and they bring up the thing, right. So what happens is they execute. They basically load your app into memory and begin executing it all the way up to your main function. Now, if you write Xamarin apps, you may not realize it, but you do have a main function and it does things. It kinda, um, mostly it just tells the operating system, please start the window event loop. It happens both on Android and it happens. It happens for, um, Whatever, whatever they're called on Android, it doesn't matter. Um, so, so, so, so what's happening is apple is launching your app, but not displaying your UI and putting it in this terribly awkward state because none of our apps were ever put into this terribly awkward state before. Where all the data has been initialized, but our code hasn't been allowed to execute yet. And for that reason, all sorts of scary little bugs, I suppose, can happen. I highly recommend, um, running away from all of this. [00:31:18] James: Now, well, I believe this is only if you're using seen delegate, right? Everyone [00:31:23] Frank: should be using, seen delegate by the way, app delegates been deprecated, just so you know, James, every modern iOS app should be using, seen delegate. You gotta get with the times every even file new project, the use of seen delegate get over it. [00:31:38] James: So I need to watch this video, um, basically from dev DC to, to let me know what I need to use. Now there could be issues. What they're saying is like if you're using key chain or other things, there might be data protection things that may not run. So if I'm in. What you know, where, what will they load? Well, try to load my main page of my Xamarin forms app [00:32:00] Frank: now. No, because the way every program starts up in the world is you take it's binary. You load that into memory. In that binary are a bunch of initialization data initializations. So it goes and writes that memory. And then there's a bunch of little functions it's supposed to call before a calls, your main function. This is so you can support like C plus plus constructors, um, module level C plus plus constructors, just to make sure that you can initialize, uh, initial global variables. It's the code that does that. Basically they're running. But then not running your code. So it's just putting your app in a weird state. Anyway, we both had need to watch the same video. I should stop guessing it how weird it is. [00:32:47] James: Yeah. I need to just test it out and I'm not sure. I, um, Keith Jane and I have mostly his preferences, like all the time in my applications. And as user defaults everywhere all the time, I only use sequel light when I'm storing data data, like I'm storing data, but I don't ever load any settings or anything till my app is my UI is open. I think that that's, maybe the takeaway is like, don't try to access key chain or preferences or databases until your app is open. Is that the takeaway? [00:33:23] Frank: Uh, uh, yeah, don't, don't do it. It's not even that like your, your code can't execute. So if you're running a pretty standard Xamarin app, you don't have anything to worry about here because your code shouldn't be executing. Hmm. I don't know. I don't know. I don't know. So let's, let's let's ditch the pre warming. We're going to have to do a whole episode on it, obviously. So now we've got three episodes in the can that we need to meet. [00:33:53] James: We just prewarm the whole episode. Yeah. For a whole episode. But [00:33:58] Frank: last question. No, no, sorry. I want to interject with my actual answer because I didn't actually say I tend to use Zimmerman. Preferences also or whatever that is, but in a few apps, I have a favorite class that I use. If it's an iOS app that I'm using. NSU is our default, but first tries to access them using the iCloud ubiquitous Keith keys that you're allowed to store. And what's really nice then is if you go through that layer first, and what it does is it goes through that layer and then falls back to NSCS or defaults. If you do that, then you get synchronization of your settings throughout all your apps. And so I try to use that in my iOS apps. [00:34:40] James: Yes. That is a nice one because key chain is automatically backed up the key [00:34:45] Frank: chain. Not key chain though. Chain. It's not right. I'm sorry. Okay. Yeah. So key chain would be, this is iCloud keys, keys something. [00:34:55] James: Yes. So, so what I was trying to say, cause I didn't do it. Elegantly is if you are using key chain, it may be beneficial for you to also. Do this because your app could be in a state where if you're storing important stuff in key chain, that's backed up. If they uninstalled reinstall your app, you might get key chain stuff back, but not your preferences and defaults, which may be pretty much. Yeah. [00:35:17] Frank: Yeah. Yeah. And I, I just like having iClouds free, if they're signed into iCloud, it's just a free feature. It just takes a little bit of code to set the settings in both places and then have a policy on how you fetch the [00:35:29] James: settings. I got to go look into that. All right. Last question. What do we got? Oh, [00:35:34] Frank: I don't know. What is the last question for cross-platform development? Both mobile and desktop. What is the best advice to select development machines? Oh, this is my favorite kind of question. Their specs, or even brands will Mack with windows, VM. What about your own desktop environment? James? I love talking about desktop environments, but I feel like we do it too often. So I'll try not to go into too much gory detail here, but I'm still rocking my iMac pro 2017. Best computer I've ever bought in my life. It does have. Pixel in the upper right corner, which is a little bit annoying. So I just don't look in the upper right corner. Um, it's, it's an Intel Mac and I feel like it's probably going to be my last Intel Mac and I'm probably going to have to keep it for all of eternity for as long as I'm building out. For Intel, because I'm going to need a machine to testimony on. And this machine also has a bunch of Mac VMs, not just windows VMs. And I use it for that purpose. And so I feel like I'm going to have this machine for the rest of my life, but. As a test machine at least. But when an iMac max comes out to 2023 edition, um, I might think about upgrading to one of those, uh, windows and a VM. Does it do the job? It does the job. I still prefer a real hardware for running windows, just because VMs, I don't know. [00:36:57] James: Yeah, on my end, I have two machines, two, my two main machines. So my main machine is a desktop machine that I built. Um, it's running windows 10. I'm going to rebuild it at some point with a new processor, um, to do windows 11 on, cause this is a old 6,700 cases of a six series. I need at least a seven series, but now we're on like 28. I might switch from indel to AMD. I'm not really sure. Just depends on what's available and nothing's ever available. But this desktop rig is my main work machine. My main coding machine, my main podcast and machine much main YouTube video recording machine because it has. 64 gigs of Ram as a super fast SSD in it. And it has a crazy big processor that runs it, know 4.3 gigahertz. And I just love that it's fast and NIC and run Noma things, and it starts quick. [00:37:53] Frank: I always make the argument that you don't need fast. I started my iOS development career on a little Mac book, 13 inch. And for years I worked on just a little Mac book, 13 inch and it was fine. It honestly is fine. Especially these new M ones. They're great. Go get one. But, um, nothing beats 10 cores because like, you know, and I usually feel. Like w what a silly purchase, because I have way more hardware here than I normally use. And by normal, I mean, 99% of the time, but gosh, darn it. When it lights up all those cores, or if, you know, I'm doing streaming on Twitch, which somehow just manages to use core after core. It's nice to have that headroom there where I know I can run my. My app is multi-threaded. So it's eating up a couple cores. I can run the debugger and I can run browsers and do all that while live streaming on Twitch. It actually makes me happy that there's 10 cores. So, uh, Jawad, I forgot to say it. This was a question from Jawad and I would say. As an all things in life, spend as much money as you can on your day job computer, because it's your day job computer. Yeah, [00:39:07] James: I, it makes me happier. Like I mostly at work when I in Redmond campus. When I, when, when I would go in, I would just have a surface book to about big 15 inch that was there. That was my work machine. And that was great because I was disconnecting constantly, but now I just work from home all the time. So I don't need to disconnect. When I hit the road, I use that machine and that's really great, but I'm not using it all the time. But for many, many years I worked with justice surface book, um, laptop. I worked with just a MacBook pro. Um, before you know, my 2013, it's still there as nearly 10 years old. And it's a. My other machines, I do have two machines is my MacBook air, which I've talked about, which is great. Now I don't run a windows VMs. I'm not positive how that would work, but if you're just doing iOS and Android development, it's pretty great for that. You know, in general, that's the M one and they're pretty cheap and pretty powerful. Um, I might wait until like the next one comes out or whatever the, um, two is or whatever, but at this point, Pretty up getting pretty close. Um, but if you need something, go grab something. Cause they're, they're pretty good. But I think for me, what I've been telling a lot of people is at least for me, I have no, I don't think I'll ever go back into an office. Probably never say never, but it's not looking like it. Frank and I, when I first, when the pandemic first happened, I didn't have my rig set up. Like I had it set up and I would only stream from it. And it was at the other one over here and I would just use my work. That was my surface book, too. But as I started wanting to run a bunch of instances of visual studio and beyond teams calls and have a bunch of things open, I was like, I'm just gonna go all in and Intune my machine on my work profile. And I'm very happy overall, but again, I built this desktop machine and I think actually building a desktop machine is cheaper than. Uh, a really high end laptop, right? And you can decide your monitors. You can give, you can get great monitors for a hundred dollars. You can get multiple monitors now that you can't get that for your laptops, but you know, you can put together a nice rig. Again, I am running a 6,700 K. This is an old processor, but it is fast. It was a top end processor at the time. It's a pro it's a chip that my buddy gave me. I didn't even buy this, but I, you know, I put in, I, I started with 16 gigs of Ram and I was like, I'm just, I'm just going to spend 200 bucks or 300 bucks or whatever it was and put 64 gigs of Ram in. And I just did it, you know, and that was quite delectable, um, in general, but I guess that's what I'm running. Yeah. But I agree with you. It's like, you know, what are all of the platforms that you need to hit, right? Are you doing iOS? 90% of the time then probably a Mac, a Mac is a great start because especially for iOS, if you're only doing Android and windows probably, well, we knew as machine, if you're just doing windows and web dev, probably a windows machine, you know what I mean? Like only because of use, I like, I don't mind virtualization. I use VMware and parallels for many, many, many years. Hmm. I'm wasting precious minutes while other things boot up. And as things take more time, that's kind of my thought. [00:42:18] Frank: Yeah. Yeah. I th the VM thing that, that we could do a whole, another show on that, the VM life, it's just a little bit laggy. You totally can get used to it. And it's, it's how I develop, um, all my, all my windows apps. I do it in a VM. Now I do have a little surface. Something that I use as my hardware tests for all my apps. Um, so I do have one at least hardware windows machine. Yeah. And then you got talking about building beautiful machines. Yeah. There are wonderful deals to be had a pro tip out there is when Intel releases a bunch of big processors. They're usually pretty expensive, but they're always being like a cheap one in the bunch and just find the cheap one and the bunch and get it with as many cores as they got there. They're always trying to liquidate sales on one of them. Get as many cores as you can get good as cheaper Ram as you can get that. Big as you can get, and you can build yourself a gorgeous machine for 500 to a thousand dollars, depending on how much you want to burn. And I do, I do that for a Linux box because it's not a part of my day job, but I do love neural networks and I need a good Linux box for it. And that's what I've done with the Lenox box. And that's totally satisfying because then you get that, uh, PC builder itch out fun. [00:43:38] James: Yeah. And like, like you said earlier, like, you know, do what you can afford, like whatever your budget is and based on your requirements where you're going to do, you know, there it's, there's a route to go. [00:43:49] Frank: Yeah. Yeah. Um, so you will definitely be happy with a nice portable machine, but it's worth the money. It's definitely worth the money to get a powerful machine to do [00:43:59] James: work. I agree. I agree. All right, everyone. That's going to do it for this week's merge conflict. Thank you so much for tuning in and for your awesome suggestions for the lightning topics. Of course, we'll be back next week with some awesome stuff. I'm really excited for the next. For every week for the Frank, but really sorta some really cool topics. So make sure you subscribe, tell your friends all about the podcast and you can of course, submit your lightening topics or give us feedback on anything by going to merge conflict that FM there's a contact button, or you can tweet at us on Twitter. At proclaimed at James Monta magnet at merge conflict FM. So until next time I'm James Monson Magno [00:44:38] Frank: and I'm Frank Krueger. Thanks for listening. Hey.