00:00.00 jamesmontemagno Frank Frank Frank and Frank before we get started. Let's thank our amazing friends over at same fuion. They're the world's best ui components we for building powerful web desktop and mobile applications and basically everything that you need to build beautiful applications for Blazer Flutter aspiit on a core. Javascript angular react view donna maui xamarin u wp win ui and all the good desktop things like windforms and wpf I'm talking grids charts all the data processing that you can handle inputs barcode scanners maps flowg grids pdf viewers clocks groupings, buttons radials. Progress bars. All the things all the time go to syncfusion dot com forward slash merge conflict that is syncfusion.comfor/mergeconflicttolearnmore about all the amazing things that they have to offer and thanks syncfusion first response to this week's po what you think about that frank. 00:51.63 Frank Like that was so energetic. You got me into in the mood to talk about code I'm assume we're going to be here. Talk about code. Thank you s think fusion. 01:02.77 jamesmontemagno Yes, um I you know people think that that's a pre-recorded you know sponsor read. But no, that is organic. It's from the heart and it's emotional because. I love our amazing sponsors I love our amazing listeners and I love you Frank and I want everyone to have the best experience they possibly can and I think that that happens when I just like off the cuff boom here. It is good to go. 01:30.23 Frank I think everyone appreciates that I mean if if you've listened at all, you don't none of those are pre-recorded. They're all different. They're all unique. They're all beautiful snowflakes and I love every one of them I'm always excited to hear the ad and I honestly, honestly mean that. So. Thanks James for a never making me do an ad. B always make them good. 01:49.91 jamesmontemagno So I want to talk about something that's really fascinating. It kind of talks about our friends at sync fusion but has nothing to do in fusion. But maybe as to do a sync fusion which is backwards Compatibility frank. 02:05.18 Frank Oh that's my life I'm I'm completely backwards and I like to be compatible this this is me this is me this is my whole life. Do you know that I circuit is twelve and a half years old. 02:20.77 jamesmontemagno That's old that is an older application and it's glorious and um, you know is it on dot net six dot net 7 or is it still rocking the the zamos. 02:33.43 Frank Oh it is still zamos now I have no excuse for the Android that one can easily go over and even the Mac version I believe can go over pretty easily I have one bottleneck on zamos I love that name sorry xamarin dot ios everyone um. 02:51.38 Frank Ah, extensions aren't supported in dot Ne and I circuit has some extensions. It's unfortunate, but it does I I think I have a workaround so I don't need the extension anymore. But yeah I haven't gotten it over. But it is cross-platform and I have no excuse for the other platform. So I should get on that. 03:09.26 jamesmontemagno Yes, and I think in general, it's not so much where you're living today because if you want to take advantage of newer features then you're able to upgrade and get there. The main problem I guess the extensions and the other stuff that that stuff is there unique but I think that. That I think about is unless I have started a new project and there's stuff that is older that I want to use in my application that is something for example that you may say well oh I get it. I create a new done at 7 project and I have it done at sander library. Well I can just suck that in no problem Frank however, what if you start a new project and you want to use like older compiled xamarin libraries that aren't compile against done at 6 or done at 7 right? Those are sort of actually bound to the. Ah, xamarin bits in general and that would be maybe problematic for some if those libraries haven't been updated yet. 04:10.96 Frank Yeah, no, it's a little bit of my life. Um, at some point even just for my own internal libraries and things I got the um shared project religion I know we shouldn't talk about them anymore. No one should be using them because they are terrible. But. Honestly, a lot of my code is still that way. Um because I haven't wanted to deal with um, updating things. So it's it's actually been beneficial like it's been I actually have dot net six and dot net seven builds of like the main eye circuit engine and good chunks of the ui I've I've been working on a maui ui for it and I'm able to. Not run into the binary problem um of being compiled against the old stuff and for the most part like all the cross-platform stuff has already been not standard and that stuff already works. But yeah, um, any control any ui thing none of them work. Um. Ah, my own library and graphics I still haven't updated it to dot net six seven and I have a hard dependency on that now I never worry about it because that one will convert over just fine as soon as I remember where they put and float this month. It'll be fine, but um, yeah I definitely. Definitely use a few old libraries but fortunate I'm using it from people who have updated so I haven't I'm not stuck I'm I'm happy about that have you run into any people that are truly stuck stuck. 05:37.82 jamesmontemagno So You quite I mean a lot of it What it seems to come down to that I've noticed is when you are moving over a big project. So I think often it's not too much when oh I have an. Have I'm creating a new project and I'm just sort of looking to um, um, start from scratch and like find some new alternative stuff. It's the fact that like hey I'm looking to upgrade this thing and it has existing like you know, New Git Dependencies. And those haven't been updated yet or maybe they're in pre-released or they haven't been released yet. A good example is my cadence This is a perfect example, right? All of the dependencies that I have forever have been updated because almost all of them are mine. But um, there's that. 06:17.99 Frank E. 06:27.73 Frank Yeah. 06:32.47 jamesmontemagno Um, so you know you got that going on and ah one that I use though is a Bluetooth plugin library which we've talked about before now I've worked with that team to now add dot net 6 and now done at 7 support and they've taken it over I just did the initial pull request and they they've gone and gone way above and beyond that I could ever imagine. 06:51.73 Frank Nice. 06:52.44 jamesmontemagno However, had I been looking to update for a while I got to make that decision is do I rewrite my bluetooth code do I pull in the source code which we've talked about that's sort of like the ah hey this is open source I could just pull in the source code I'm not actually blocked right here. Mean then the code would just be compiled for me and just make it a dependency. But then how do I get all the bug fixes or do I Just wait. Basically. 07:20.90 Frank Well, you did the right thing the pull request right? But there's always a chance. Someone's not going to accept the pull request. It's it's surprising on new git because we are we all are binary in the dot net world. We don't really recompile from other people's source code. Ah, that this version stuff has always been a bit of an issue nuga is rife with old libraries from the standard distribution that use older tech. Maybe even like Pcls and ah. What you'll see is a lot of like duplicate libraries on new get of people like here's a dot ne 6 version or here here's this kind of version and I I really appreciate the effort of those but I hate taking a dependency on them too because even then like you said who's going to do the bug fixing. Thank you for compiling it for me. But. Who's going to do the updates when bugs get fixed and things like that. So. It's a little bit tricky and all that stuff actually had to mention portable class libraries because what got me thinking in a lot about this today was emo that does emo get a bell ding. 08:26.50 jamesmontemagno There was a half bell thing not building. 08:31.91 Frank Hi Higho Emo was asking on Twitter today as anyones still using portable class libraries and if so why and I'm like yeah I use them because I'm old and it's not that like it's not that I need features from the pcls. It's just that they work. And so I haven't bothered to update them because we're talking about like going from um, like dot net standard to dot net 6 or like from xamarin to dot net six seven um this is like super old tech pcls and I still haven't bothered to update some of those libraries. So in the end I have no excuse there pcls could easily become dot net standard libraries compiled under dot net 6 and seven I have no need to support whatever it was that didn't support dot net standard I'm sorry at Dot Net framework 4.5 or whatever it is I'm sorry everyone no need. To go that back that far but just out of laziness I have a bunch of libraries that are still pc helps. 09:31.69 jamesmontemagno Yeah, and it leads sort of to when you have a library How do you support like multiple versions of things right? if you want to update you know, good example is the Bluetooth plugin. Do they still want to support xamarin do they still want to support net standard. Do they want to you know adopt net six. What are those tfms target framework monikers and how do those work and you know you can imagine that the the ah xamarin android and ios folks that do the binding for dot net ios and Android also run into these problems right? because you take example of something like um, you know Android x in. In ah, an Android projects. There's tons of them and those have support for not only xamar and Android but also for done at 6 and done at 7 so how do they compile those in a world where um, you can't multi-target. Older tfms right? So in the world. Okay, so let me break this down for for everyone so like in the system here. It would be pretty cool. if for example if I was creating a library and I wanted to provide backwards compatibility I just slap in you know, net 6 Android and mono android 9 zero like inside of my Sdk -style project that sounds great. Frank now. 10:49.94 Frank Oh that sounds like a wonderful thing that is going to be totally supported I believe it's going to be supported I have faith. It's going to be supported does that work James. 10:59.72 jamesmontemagno Ah, no, it does not work because that only supports things that have Sdk -sty projects and xamarin Android and Xamarin Ios and Tv s and all that other stuff did not so we would use our good from and mnfs build Sdk extras. 11:12.39 Frank So. 11:16.78 jamesmontemagno That's what we would probably use in this case, right. 11:20.57 Frank Ah, oh, that's why okay you know what I knew all the cool people were using that and I never really understood what it did or any of that stuff is that what it did and I will say I was playing a little bit dumb earlier. You could probably tell I'm a bad actor. But ah because I've had this problem with Ios I was just hoping that in the Android world things did work a little bit better. But I'm sorry so please continue. So um, and that's build extras. What what was the full name again. 11:51.76 jamesmontemagno Ms build sdk extras. Ah this is a project from Claire Novotney that's been around for a long time and I've praised and I use in every single one of my projects did you know that for libraries pretty much. 12:04.42 Frank Well when I was referring to the cool people I was actually just referring to you. 12:10.70 jamesmontemagno No yeah, um, this thing here. Basically lets you multi-target everything and in the way back when I'm talking visual studio Twenty Seventeen this thing this thing like really lets you create. You know and target donenet framework you know Uwp like you know windows phone like you just target anything under the sun. All multi-targeted from this sdk style project. So what it did is it said the default donnet sdk style project when you're making libraries and you're sharing code between projects. Okay, that's fine in in Dandy that you can use new ones. But what if you're like Frank where you share a bunch of code between all of your different applications and some of them are on done at 6 but some of them aren't right. He shouldn't be using shared projects even though he is but let's say he was using just a standard library. How is he going to be able to. Move that forward. Well, that's where Sdk um, Ms. Build sdk extras comes in and it's fantastical and I've been using it forever. Um, and it's just kind of out there in the ethos but you know that does a lot of extra stuff. Basically so the question ends up becoming. Do you need all of that. You know stuff if you're just like the xamarin team or you're you. That's just building an ios project. Is there a way to do that. Um, in general to ship multiple versions because some may say frank well why would you need to recompile your Android or ios library. 13:42.48 jamesmontemagno Um, to net six can't your net 6 things just suck it in and the question is ah maybe probably not but maybe but let me outline here. Well as I read this read me is imagine that Android X Library I was talking about well that Android X Library built against xamarin android. It references Ms. Core library but Ms. Core lib doesn't exist in dot net six and the types in mscorelib are forwarded to the correct bcl assembly which means you're probably going to run to. Probably a bunch of issues just in general or some certain things have moved like nflow. 14:23.23 Frank Yeah, yeah, um, but that's actually a little bit scary. Um, because what I I was thinking it did was point at that. There's an Ms. Cor Lib that comes with xarin android there's an Ms. Correl li that comes with samin ios I was assuming it would point at that one but you're saying no it redirects. Through that one to the to the net six one is that right? interesting. 14:47.70 jamesmontemagno For my understanding. Yeah, so you stumbled Frank upon a magical ah little ah project out there on the internet. 14:59.90 Frank I did I did completely by accident so in my replying to the Pcl tweet from emo ding again. I I was complaining that you can't mix these old xamarin projects with net 6 projects. And let me give a concrete example here because I think we're being a tiny bit vague and 1 thing what happened to me was I couldn't run my tests project anymore. My test projects was a dot net 6 app or 7 I don't know I you know they're they're kind of the same right? They they were kinds so one of those 2 and I put it in the solution and also visual studio for mac is all like I can't restore anything I don't know what's going on life is complicated. What are you doing to me the projects compiled just fine ren just fine. It's just you just couldn't mix them as you were saying. And so I was complaining about that and so the solution I came up with the terrible one was to create multiple solutions. So just break everything down platform lines which is terrible and annoying. You don't want to do it. It's the worst you can't create workspace files which are a little even scarier but I didn't go down that route anyway. By complaining on Twitter I've got wonderful recommendations. Ah 1 from the great Philippe Navarra who definitely deserves a bell ah Philip. Let's saying that. Um there is in fact, a um hack I'm just going to say I'm I'm going to call it a hack. It's it's. 16:33.39 Frank It's ah, a vaguely supported hack. But what it allows you to do is use Sdk style projects so that's like the new dot net six dot net 7 style projects which is what I should be updating my app to dot net six dot net 7 anyway I can still use that project format. But. 16:48.42 jamesmontemagno Um, this is. 16:52.20 Frank Instead of being an sdk style project at the top of the project file you call it a Xamarin dot legacy dot sdk project and what that does is woo. Yeah I know what that does is what I was saying the other one should do it actually fishes around your system. 16:58.66 jamesmontemagno Oh. 17:10.91 Frank Finds old xamarin legacy xamarin and references things correctly to that. It also gives you the benefits of a dot net 6 project. We can talk about those benefits but that's the main thing it's doing it's fishing around your system and finding the actual older Sdk and then using all the libraries. 17:28.80 jamesmontemagno And that's pretty cool and that is the way that it seems that the team does build things like the Android X Libraries and Google Play Services and things like that. 17:28.63 Frank From that. 17:37.59 Frank Yeah, it's clever and I'm kicking myself because I always thought like maybe I should just write a stupid thing like that. It's a little bit tricky because I am the have you done. Extensions in Ios app extensions ever. Oh. 18:02.70 jamesmontemagno Um, I've maybe a little tiny bit. 18:04.64 Frank You know when you write a watch app you write a watch extension. Do you ever do a watch app. 18:10.67 jamesmontemagno No no. 18:15.50 Frank Yeah, okay, well anyway, they're the worst and I was just trying to say they're the worst dealing with them. Ah so I'm curious I keep saying libraries as things going to point to the libraries. But more importantly than that it's it points at the tooling. 18:28.15 jamesmontemagno And. 18:29.85 Frank So the compiler to use the um actually I might be wrong about that. It might use the modern compiler. But most importantly, like m touch and the linker and the things that actually build your app and package your app into an Ios app it fishes around and finds those things and the reason I brought up extensions again. Um, a because that's my stumbling block b um, they're a pain to build and I'm curious if these legacy sdk things can also do it I haven't actually applied this to my own project. Everyone I was just so excited about these things I wanted to talk about it. 18:53.55 jamesmontemagno Um, and. 19:03.57 jamesmontemagno No nice. Yeah um, have you tried any of this stuff out or like what's your thoughts. 19:12.42 Frank No, like I said I actually have a big faith because my app I have um, already compiled big chunks of it as a dot net six seven app you know it's all that I'm not worried about the compiler or anything. It's really just the tooling around extensions things like that will those work. Um, and really it's just going to take the experiment to find out but it's good to know that there is at least this um, easy pathway because the nice thing here is um, you won't have the n-flow problem. This is another. To kick the can down the road. You know I'm begrudgingly you know I'm converting my project file over to the new Sdk. But I'm using the old Sdk. It's a little bit kind of confusing but at least it's like getting you down the road. You know sometimes it's hard to. 19:58.10 jamesmontemagno A. 20:05.75 Frank Jump to the end of the street. Maybe you got baby steps work your way along. So I think I'm at least going to give it a try because if nothing else it's going to get my project files into a shape that's ready for dot ned 6 and then it'll just be a big question of whether the stupid extensions are supported. 20:20.29 jamesmontemagno Yeah, that makes sense I think there's probably a bunch of ways of of of hacking around the problem that you have and that you know we sort of have There's a lot of you know, different roundabout ways to get into it. So The the question ends up becoming. You know how far do you want to go down that rabbit hole compared to just like waiting for something to happen. 20:48.23 Frank Well, that's the trick. Um, at least this is it. It has the potential to not be a deep private hole. Let me start there because not much of the project file has changed that much I've I'm actually quite experienced at porting. Um. Old projects over to dot net six seven now I've done it with most of my apps just not I circuit and so I'm pretty confident. Um that like I said even even if I fall down a rabbit hole I can't imagine it taking more than a day and even if I pull the abort cable at the end really mixing. Metaphors now. Um I'll still have something I can use for dot ne I don't know I don't think extend here's the deal I don't think they're going to support extensions for a while. So I'm thinking i' just got to work around this problem and reararchitect the appe tiny bit to not use the extension I think that's what. Actually going to happen but this is going to be a nice um diversion until then. 21:46.10 jamesmontemagno I like that? yeah I feel like with most of my applications I'm sort of in the camp where most of the time It's probably just easier to you know, either use the Ms build sdk style stuff or Like. What point is it just okay to not worry about the older libraries like I think it's a thing I'm fascinated about like in your case, you're worried about extensions and things for your applications In my case I'm thinking. Well you know how do we. And all my libraries support X Y Z long term and then the real question is becoming how long do I Really want to support those older things in my projects basically and just instead of just like going on to the new hotness. 22:26.20 Frank Um, yeah. 22:36.53 Frank Yeah I have this um shared project I use in most my apps. It's really just a trashin of code you know I I Hope everyone has one. I'm not even that organized but there's so many times I just write some utility classes and I try to be good and I try to throw it in the trash bin of code and I try to just include that in projects I'm not constantly rewriting the thing all the time anyway. Ah that silly thing I always reference it by Submodules. And those are the worst they never work right? You know it really should just be a new git out there a versioned new git and it should be building and so I've given myself this little task of turning I really should rename it to trash bi um and to releasing that as a new git and I'll make it open source just so I don't have to pay for. Ci services and all that stuff and um, start referencing that and I was thinking we're having this um what you were just saying is like am I going to support the old stuff because that's so inconvenient. It's so much easier to port it on over to the new stuff and just release that as the new git. But I think I'm still in that ugly transition time where it's really tricky because you know the old projects are using the stupid Sub-modules So They'll keep working just Fine. So Really maybe I should just do myself a favor and only release newer versions of it and get myself moving. 24:05.46 Frank Sorry so total total side tangent there. Thank you for being my rubber duck. 24:09.57 jamesmontemagno You're welcome. You know I think sometimes why do people say Rubber duck I can't explain that really quickly. 24:17.63 Frank It's it's I Forget what the original reference is everyone but um, there's an old joke that um, by the time that you've explained the problem to someone you come up with an answer because it just explaining a problem to someone forces you to kind of serialize it to. Make it understandable and so by the time you're done explaining the Problem. You come to a conclusion and so the joke is instead of bothering all your friends just get a little rubber duck and explain the problem to the rubber duck because the rubber duck will probably give you the answer. 24:52.47 jamesmontemagno Got it. Got it see that that that helps out. Thank you? Um, yeah, that makes sense for I like it I like it. Um all right? What else is on our our docket here. 24:57.61 Frank I I don't know the origins. 25:09.17 jamesmontemagno Do we have anything else to say about this or we just crush it. 25:12.21 Frank I how how do you feel about little hacky things like like let's let's but you know if it works it works right? But like it's definitely a temporary band-aid and so even if it works. Yeah. Yeah, you can't fight the tide. The tide is not six seven I got to get this code fully ported over and so I think this is super cool but it also very much feels like a hack and I just I need to move on. 25:40.12 jamesmontemagno I Think you should always be hacking everything and here's why if it runs and it compiles then it runs and it compiles and it's a me you know what? I mean like ship it ship that up. Yeah. 25:52.77 Frank Yeah, well it would be nice to just have the unit tests back in the solution because I keep using ah the Ci service as my unit testing service which can get expensive. So I really shouldn't be doing that but I do it. 26:05.69 jamesmontemagno Yeah, for the people. Yeah I think that no god. 26:08.44 Frank Because that's the kind of Programmer I am. Yeah, well,, that's that's why oh. 26:22.57 Frank That's why open source is so nice because you actually don't have to pay for the CINCd 26:25.29 jamesmontemagno Yeah, there you go? Yeah I think that um you know in in general I think is it's totally fine to just like hack on stuff and get stuff go In. Um, only because I think that it um is okay, you got to get it to work. The question ends up becoming in this. Okay, let me let me break this down is for example this the most important thing possible right now and what I mean by that is. How much time should you sit and invest on this when you could be doing other things. 27:08.68 Frank Yeah, hence the rabbit hole discussion I guess I gave myself a quota of one day but you're right should I spend that day porting it to dot net 6 instead you know instead of taking this intermediarymediary step or I guess to take your full meeting. 27:18.73 jamesmontemagno Exactly. 27:25.47 Frank Don't port to dot net 6 until xamarin is literally out of life cycle but I don't want to wait till the very last minute I'm I'm a known procrastinator so I'm trying not to do that? Um, yeah I get you though? It's not the most important thing you're bright the runtime all that kind of stuff and I also agree. If it's a hack it builds all the tests pass. It feels good on the device who cares who cares? how you actually built it I take your meaning with all of that and yet I do like the new shiny and it is obvious that all the ides are only happy with the new style projects you know vs code does not like the old style projects. 28:01.50 jamesmontemagno And. 28:03.12 Frank And I do like to bounce into vs code from time to time. So it does benefit me to have things in the new format because that's the way all the tooling is going and all that kind of stuff but I totally take your meaning and I appreciate it. 28:14.29 jamesmontemagno Yeah I agree I think that that is That's what you got to do I think you got to you either bite the bullet or you don't bite the bullet and then the the question is is how long does the hack take versus not you know what? I mean. 28:17.77 Frank Did I did. 28:33.45 Frank Yeah yep, ah 1 day quota. We'll see I mean it's either going to. It's either going to work or it's not like I'm pretty sure I can port the code pretty darned fast I've gotten good at it. Um, did I mention that this is important and I was giving a lot of shout outs on this episode. 28:34.87 jamesmontemagno 1 day quota. 28:50.10 Frank Didn't mention that ah Jonathan Peppers it seems is the brainchild sethright phrase of this ah crazy xamarin dot legacy dot sdk sdk I love it. 29:00.40 jamesmontemagno I love it. Good old peppers. We're just talking about him getting so you know this spicy library I had him on for on so many things pepper is just like always doing crazy stuff. I love it him and breath just John Dick just really wild stuff and I think because. Peppers is so deep into the build system of all the Android stuff like getting stuff to work just stuff just comes out. it's it's beautiful but I'll put a link into the show notes everyone can take a look at at that end the sdk extras as well and if you're looking for backwards Compatibilityy this and you got a you know, support older things. It's a good route to go. 29:39.15 Frank Yeah I hope we we should have a year like 2024 twenty twenty five where we don't talk about backwards compatibility anymore. We're just living in the future I hope I hope that soon. This has taken a little too long and I appreciate the stepping stone peppers has given us and um. 29:48.93 jamesmontemagno Yeah. 29:56.49 Frank Probably going to try it out but got to move on. 29:59.66 jamesmontemagno Yeah, well I think it's going to do it 30 minutes on the dot frank we did it? Um I'm I'm excited to talk about actually one day when we get like so store kit to support How do you support store kit one and so kit 2 for backwards compatibility all at the same time. That's a different coding problem that I do not want to ever deal with but I'm sure it's going to happen pretty soon. But until then that's going to do for this merge complexs until next time I'm James Mont magna 30:24.62 Frank And I'm Frank Krueger thanks for listening. 30:27.48 jamesmontemagno Base.