(00:09): [inaudible], (00:10): welcome back everyone to the Xamarin podcast, keeping you up to date with the latest and greatest and mobile development for Xamarin developers covering the world, the xamarin.net Azure and more. I met soak up and I'm James Monto mag now. How's it going buddy James? I am socially isolated today and I have been for like two weeks now. I'm just normally socially isolated to be honest with you. So for 33 years that's basically been my life. So I've been ready, prepped for social social isolation here in Seattle and uh, you know, I already work from home and a cool part about working from home is I've done it for like six years now since I joined Xamarin. But even though I have an office on campus, I mostly still work from home. In fact, a lot of the Xamarin team works remote cause we're all over the world. (00:59): And what's cool about that is that over time as people have live stream and done remote calls, like everyone has these elaborate setups at home, right? I'm podcasting at home. You're podcasting at home. I have two, like huge lights beaming down on me. My multi-monitor is, I have a GoPro for my webcam. Like I just have like a ridiculous setup that's just built up over time. So whenever I get on calls, people are like, Whoa, like so great, you know? And I like working remote. I'm about it. I do like human interaction. Those don't get me wrong, I like interacting with humans, but right now I'm interacting with you Matt and that's great. I know it's just remote and the best part is that nothing has changed for me. I just don't feel guilty about not going over to Redmond. So yeah, I've been socially isolated for a long time, but two thumbs up. (01:42): It's totally cool. Yeah. And, and, and not having to go into the office, uh, is bad for recording videos because I can't record videos. But on the pro side, uh, I do save about two hours of commute every day, so it's pretty great. There you go. Always the optimist. Ah, yes. Well, you know, actually before we get to the news, it may just be work worth mentioning right at the very beginning since this is coming out pretty soon that you and I will actually be in the office. Like we are going to weather the storm cause Seattle and may storm, but we're going to weather the social isolation storm and we're having Donnette can focus on Xamarin on March 23rd. It's happening just over two weeks, under two weeks. It's coming up regardless. It's coming up live free live stream event. It's going to be spectacular. (02:32): Um, Donnette comp as, uh, some of the individuals who are listening may know, uh, it's a free live conference that they do for.net every year. It's usually like September timeframe ish. And uh, they decided to expand on NETCONF, uh, to do more of them. These focus events on.nec technology. So they've done blazer. Um, and now we're doing Xamarin. They're gonna do other ones. Um, going forward too. It's a full day event. Um, it starts at 8:00 AM Pacific all the way Tor till 5:00 PM Pacific, so all day. And there's going to be like 14 sessions. So, uh, Maddie and David and Amanda silver, we're going to kick off the day with a keynote. Um, there's going to be stuff on visualizing data testing, apps, productivity, um, reactive extensions. And you Y um, you're doing one on, on, on, uh, backend systems. What does it picking a backend, uh, developing accessible apps, building a marketing award-winning apps from amazing, all sorts of great stuff, right? From Microsoft employees but from the community, right? So we have amazing community members, um, like Adrina's doing the testing. One Steven twice in Rodney Liddell's loose Carter, um, Barty um, goal is who made these award-winning Android applications with Xamarin. It's going to be there and Alexander Costa will be there doing accessibility. Uh, it's going to be awesome. We have like so many times zones of represented on this, but we're going to be there in person, man. It's happening. (03:59): Yup. I can't wait. And I'm super excited to see the community sessions cause they're, cause James, let's face it, we kind of work in a box. We have to do like the internal, we don't do the external stuff. So often like actually create the apps and the real world. I know we kind of do but not all the time, but the community is doing it all the time and I'm super excited to see what, see what they're going to have to say. So that's where I'm looking forward to and yeah, we have to brave the social isolation and cross over the bridge and go into Redmond. But I think we'll be okay. I think it's going to work out fine. (04:29): Yeah, it's happening. I'm really excited about it. Um, I'm, I'm excited for my session cause you and I will be, I'm seeing it with Olia who will be there as well. I'm seeing it. It'd be three of us in there and we'll be emceeing. Everyone's going to be calling in. Uh, you have a session. I have a session. Um, and Amanda's going to come in to, to do, start the keynote off. Uh, but everyone can just stay at home, stay in your pajamas and watch Xamarin all day. That's what, that's what you need to do. (04:56): That's perfect. That sounds like a great, great way to spend a day. (05:00): It does. No, it will be there. I hope everyone joins in. We'll be streaming on all the things, the YouTube, the twitches, the channel nines, all the things we can go to. focus.dot net [inaudible] dot net so we'll put a link in the show notes. It's a very weird long domain name. All right, let's get into the new releases first and foremost, we've been talking about it for a while, but it finally happened. Android acts, the replacement and upgrade for Android support libraries is finally out into the wild. Um, do you, everyone asks me like, you know, what are, and what is Android X? Do you understand the whole context in the background here? (05:40): I mean, what it is, right is the Android support libraries are going away and all that great confusion with it too, hopefully is gone with it. And we have new libraries and ideally these Android X libraries are only going to be what we need and they're going to be named (05:58): better, but we have to change namespaces. Is that correct? Yeah. So there's new new get libraries. There's new namespaces. Um, and you're correct. I mean the, the goal is to slim them down. So support libraries grew a lot and they became unruly from Google. Um, even on the Android side, right? That's where they came from to to keep up to date and, and there was always new dependencies on building, compiling against the latest version. So Android act says, Hey, we're just going to slim it down and each package will be versioned independently instead of like mega package updates. So ideally you're only going to have to update one or two. Now the team though has done a few things here. There's a right click migrate to Android X for your project. And what that does is it will scan all of your support libraries and it will upgrade them to Android X and you get libraries, which is nice. (06:56): Um, you can then compile and if you compile and something is missing because there's some other dependency from some of their language, uh, the, it will tell you when you're in there. And that's because there's a Lolo hidden nugget. That's the base of all new gets, which is the Android X and migration library. And this puppy is awesome. So it's a compile compiler initiative, I would say for Android acts because like any big migration, the problem is what if I'm using Matt's awesome super library that hasn't upgraded to Android X, but I want to upgrade Android X, what are we to do? Matt? Don't say mode light targeting. We're not going to multitask. We're going to let the migration package handle everything for us. What it will do is it will swizzle I have to say swizzle because that's an iOS term, but it's basically going to swizzle the I L and the S, you know, at compile time to automatically upgrade the code in my application and in your library to use Android acts automatically. (07:56): This is pretty cool. Oh, that's really cool. Yeah. So yeah, it allows that seamless migration. Um, but you know, you should kind of take the steps in the blog post and the documentation to not only migrate the packages but change your namespaces, remove the old support libraries and slowly over time, hopefully the third party libraries all upgrade Xamarin forms and Xamarin essentials already have. Um, if you're targeting Android tents. So give those a look and give it a give it a go. So sweet. Yeah, it's really good to see that's out there. And uh, yeah, give it a shot. So Xamarin forms though for that five is out on the loose, ready to go. And I'm just wanting to talk about a couple of big features in it. Um, David wrote a blog post about it and I'm of course Android X support being one of them. Another one is a shell. Modals is out there as well. So before if you wanted to show a mobile and mobile and you're using the URI, um, navigation scheme, (08:56): you couldn't do it. Now you can. That's actually a pretty, I'm not gonna say it's a huge deal because he could always fall back to the old navigation scheme, but it makes everything now more seamless to use, which is super duper nice. Um, of course the visual state manager target, which we talked about in the last show, which lets you use the visual state manager, but not have to be so verbose when you're writing. All of, you're a visual state manager code out. So let's say you just wanted to change the background color and um, on a, um, whenever our property changes, you don't have to actually say it for every single control and a couple of platforms specifics are in there. And of course the preview features are still there, so like carousel view and so on. Yeah, give it a shot. I'll link to the show notes for it. (09:47): And um, yeah, it's super duper cool. Um, I'm super excited for the shell mobiles, just that really make the code unified or the navigation code at least. Yeah, that's what I'm going to do on my live stream as I already, last week I started to use the media element, which is a preview feature for audio and video playback, which I'm pretty good. I found a few bugs. I poured four to them, but they're under feature flag, but I was using the old Mo modal stuff. I'm going to use the new stuff. I bet that'd be really nice. So did, I totally didn't even know it was in there, but it's in there. That's cool. And then of course four or fives out. But what's coming right after four or five, four, six, four, six is out. And there's a couple of cool things. I know one thing that you're really excited about, James the radio button radio button, a great comp, great compliment to checkbox, checkboxes and radio buttons. (10:37): We got them. It's happening. I'm so excited. Yes, yes. Now your UIs will be complete. All UI functionality is now done, but it's already your buttons out there. And I'm also another thing for everybody who likes to do C sharp building or UIs and C sharp, which um, is a thing. Evidently I'm a big XAML person, but a lot of people love the C sharp stuff is a Seesaw markup extensions. And so what this does, it's an extension on the C sharp method. So you can actually now go through and say label that center and expansive when you're building everything out, it's right in there and you don't actually have to, it's going to make it more succinct. Let's, let's put it that way. So check that out. We'll put the Lincoln there for the release notes to it. And, um, even though I kinda made the explanation really long for the markup extensions, actually using them is really short. Yeah. It's pretty nice. Like the amen. And some of the examples for radio button, you'll see a text by a label and it'll be like, you know, dot bold instead of having to set a bunch of things that are just like really nice and it's all the builder patterns, so you're just sort of, and this and this and this and this and this and call the extension. So it's pretty cool. Nice. Cool. Yes. Um, and on top of that, of course Xamarin forms, I guess it has some fun, but so does Xamarin. Essentials (11:54): and Xamarin essentials in the last month had two big releases, one dot four and one. Dot five. Uh, and they're very, very similar. Uh, I would say, um, one dot four had all the new features in there, like theme detection. So you can, uh, test if it's a light or dark theme on your iOS, Android windows devices, a brand new cross platform permissions API, which I'm very excited about. So you can check and request permissions. Uh, there are some other things I like new converters for colors and weight converters. Um, um, um, platform extensions, so you can check and get the activity or UI view controller or window, tons of community contributions and bug fixes and all sorts of good stuff. And one dot five is released at the same time actually, um, um, because it's the same exact version of one dot four, but using Android X as the base. (12:49): Um, and one additional feature, which was the web authenticator API, um, which is really cool, which allows you to um, log into social Oh auth authentication with a single line of code. So you can say web authenticator. Dot. Authenticate async. You give it the callback URL, you give it the back end, um, and you can even do Apple sign in, which is really, really cool. So we started to build out this API, um, based on some customer input and demand and a next generation authenticator. Um, and it's really, really nice so you can check, um, to login. And there's a great example of how to integrate a, um, integrated with an asp.net core backend. So you have to obviously have the backend to support it and do the callback correctly, but it's maybe like 20 lines of code in your back end to do a mobile authenticator on top of asp.net core. (13:40): So definitely give that a look. Very, very excited about it. Um, and where it's going. Nice. Yeah. That, that authentication stuff, authentication is so tough to do, but it's so nice. Not only is the nice side of Sarah, but it's something that you have to do a lot of times. So I'm really excited about that. I haven't played around with it yet, but I'm going to and maybe that'll be my pick of the pod next month. There you go. Yeah. Your feedback would be nice that it's not a, it's not, you know, it's not, uh, a replacement for like Azure a D B to C or something like that. Like if you're doing that, you're going to want to use those libraries, um, and the authenticate, right. It doesn't do, um, it doesn't do refresh tokens or anything like that or you, you handle that in your back. And the whole goal of this was how do, how do we create something where you're not putting keys in your app, right? Cause that's bad practice. And the goal was here's how we can best practice. Here's a backend that's handling all that junk for you. Let the server handle it. Your app is just a thin client that makes a request to authenticate and check stuff. So, um, and also the biggest part here is that (14:52): we needed a really great way of doing the Apple authentication and this gives you a line of code to do it. So pretty cool. Nice. And I haven't seen anything doing that, at least that I've explored that lets you do Apple authentication. So that's super duper cool. One line of code, one line of code, nice and no one at the, one of the things I love about Xamarin essentials, it's that it digs down into the platforms for you. So you don't have to worry about how iOS or Android implement anything, right? Um, but sometimes you do need to worry about that. And then what do you need to do? If you need to want to use a third party library, you got to bind it, you got to bind it. So we had two great blog blog posts out and um, showing how to bind both Swift and Kotlin libraries. (15:38): Now, what's interesting about both Swift and Kotlin is that they're, well, they're not objective C or Java. So before you would bind to objective C, and it's, I'm never going to say anything straightforward, but it was more straightforward, the binding of Swift, let's put it that way. And um, so what we do is we go through and kind of go step by step on how you would go and find a Swift library and involves making the jacuzzi header to it and then going through you need, still need it, like objective Sharpie and, and a bind to a Swift library. Because as I'm sure most of our listeners know that that's where iOS development is going, you'd add more, more of the modern libraries are done in Swift as opposed to objective C. and, um, then we'll also link to aF to a nuke, a Xamarin F sharp NATO bound to the nuke iOS library, which does, it's kind of like glide and so do like a really cool image loading. It's such, so that's super duper awesome. And Alice on a little tutorial about how he went through and did the binding to that Swift library. Same thing over on Kotlin. So w I'll link to that as well. So I mean it's really cool that how now we're not just limited to binding Java and objective C we can also do Kotlin and Swift and the whole world is are now ours to play with. (17:04): That's right. Yeah. I really enjoy these. And we also did videos, Alexia and I did videos on this and make sure you go over to the Xamarin developers YouTube channel and hit subscribe so we can get those as we were rolling out in the next few weeks. So it's really fun to watch and go through. And the column one is actually really easy because you just have to make sure you have specific versions of Kotlin and the Collin you get installed and then you're good to go. So it's kind of crazy. Beyond that, I wrote a little blog post cause like I got a question on Twitter about repeater control. When someone says a repeater control, what do you think that means? (17:37): I think way back in the day of ASP development where it's just like a grid and a grid repeats and repeats and repeats. That's what I think of a repeater control is something that just you bind to it and it does the same thing over and over again. Kind of like a list view. That's what I think of when, yeah. (17:57): Got it. And uh, that's what I thought too. And someone was like, why isn't there a repeater a controller? Isn't that a repeater control? And I was like, I don't, I mean there is a repeater control. It's every control is a repeater control actually. And if I had, not just every control, but every layout is, um, because Xamarin forms, I don't know, three dot five, like a year and a half ago, introduced this API called bondable layout and maybe they need to introduce a control that is a repeater control that, um, that just repeats stuff. So it's easier to find perhaps, but by double layout is this awesome feature of a layout. And what it does is it says, Hey, I'm a stack lad or I'm a grade or I'm whatever, um, give me an item template and, and, and give me an item source to bind to and I will repeat the control and the item template over and over and over again based on the layout. (18:51): Right. Um, so if you're a StackLayout, you would obviously stack and repeat them horizontally or vertically, or if you're a grid, it would just stack on top of each other. Um, but if you were a flex layout, it would automatically handle doing a bunch of crazy flex things. Uh, in general, I use it with stack layout. So I wrote this up and said, when would you want to use it? Right? And for the instances where you have a few little items to display but you don't need them to scroll, right? You could put it in a scroll view, but then maybe you want to use a collection view at that point. But I mean maybe I'm putting, um, I'm putting a few check boxes or I'm putting, um, I dunno, let's say some categories on uh, an event or something like that where it's just like one or two. Maybe it's like three. It could be one to three. Well, you don't want to put that in a collection view. It's a lot of overhead. You just want to repeat the control because you might have random numbers of it and that's where this puppy comes in. It's really easy to do and set up. And I've gotten really good feedback on this so far. So check it out if you're like, how do I repeat a control? Use the Bible out. It's there. Repeat it. (19:58): I had no idea that binder layout existed until a couple months ago. I was doing a code review if David, so I um, we did the tailwind traders demo app and part of it was there is like you go in and you have categories, so tail end traders is supposed to be like this e-commerce app for like a hardware store. And so the categories were like kitchen appliances and then you had hardware and then you had like DIY tools, like so three as you said. And then I had these three options sitting in a collection view. And so David's like, why don't you use a fineable layout? I'm like, what's that? I never heard of it before. And it's just, you know, you just, you can't use it if you don't know about it. And so, yeah, perfect. Like you say, it's for grade for a small amount of items and I stuck those into a, a stack layout done and done. (20:47): It was, it's beautiful. And I had no idea that existed and I've used it many times since. Yeah, it's very nice. It's very, very nice. So we'll move on to a little bit of cloud news. James. Um, this one actually, I'm not going to say it's little, it's kinda, this is like a thunderstorm of cloud news. There is a free tier of Azure cosmos, DB, uh, are globally distributed. No sequel database for free, for free. BOM, BOM, BOM. Multi-model. You forgot the multi-model part of it that the model multimodal. Yup. Yup. So what does this mean? What does this mean, Matt? All right. So first what I'm going to say about what multi-model means is me, which is actually pretty cool because everybody says it and it's like that. What does that mean? I'll forget about it. What that means is if you wanted to use like say regular SQL on top of it or no SQL, but you can actually query it with SQL language or like a Mongo DB on top of it, you can, so when you're creating it, you can say, all right, I'm going to use Mongo or I'm going to use a essentially document DB and lets you do it. (21:52): It's the same underlying engine, but you can use a different API on top of it. So that's what the multi-model stuff means. However, what this free tier means is that you can, when you initialize the database, you can say, all right, I'm gonna make my thing here free and you get 400 Ru's and five gigabytes of storage for the lifetime of the account. So before I think you've got it for like a month or two now it's free for ever. You only get one free account per subscription. But it's great for like if you have like a really small production app or if you're prototyping something out perfect for it and it's great, it's free forever and it's just something that's, people have been asking for it for the longest time and now it's there. And so that actually is a pretty big deal because cosmos has a great way to go for um, for when you're doing your database as it is like globally distributed, the data and instinct gets, goes from like West us over to Europe, over to Asia. (22:54): It's totally cool and it's definitely something to check out because it's free. Very cool. Yeah. We have a app that we need to update anyways cause our database got deleted. So this will be great cause that'll be free and have to pay for it anymore. I love it. Yup. And when we update that app, we're gonna set our resource lock for deleting so nobody can delete it. Yeah, that's right. Yes. Because somehow it deleted and we don't know how, oops, this is really cool because, uh, like any service on any platform ever, you know, having to set up an account, be scared of that, Hey, is this the right thing for my application or not? Um, you know, you don't want to spend a bunch of money and this is cool that you can just, you know, get up and running and you go to town. (23:40): So I love it. Yeah. And it, yeah, it's great for prototyping. And the thing is we'll use it for prototyping one app. You decide, I'll know when it's not right. You can leave that cosmos account up and running cause it's not costing you anything. And then prototype your next step in it. So I love it, love it, love it, love it, love it. Go get it. Cosmos, Cod, cause Moda. Um, and then the next thing I wanted to point out is this a cool little, um, cool little, uh, video I saw was a fine parking spots with custom vision and IOT. And so this was actually taken at the, um, Caribbean Devcon, which was a while ago, but it finally made it out on the on.net show. And it's just a, it's really fun. It's not that long of a video, but it's just kind of the, it's cool how you put together several different services to do something with that everybody needs to do, which is a find parking spots unless you're a socially isolated like James and I, but, um, it's just one of those things like, Oh, that's super cool and it's, and it's fun to watch. (24:37): So that's another, I dunno, I liked it and I'm going to put it out there so everybody can like it. Nice. I like it. Yeah. It's only seven minutes long too, so that's perfect. Yep. Very cool. Yeah. So, which brings us now to everybody's map, either the second favorite or favorite spot on the show, the Azure service of the month. What is the Azure service of the non math virtual machine skillsets. And so when I, when I say that those four words, James, what comes to mind? Um, so virtual machine I like, I like that that's a machine that's virtual. Um, and then a scale like that, uh, allows you to go up or down and then sets, that's a multiple cause you have multiple things. Exactly. Wait a way to piece it together. It's in the name. Yep. So it's actually super cool cause what she can do is you can take a virtual machine image, which you can actually make yourself. (25:40): So you can like, it's almost like kind of sorta thinking of like a container image. If you can get everything set up on there just the way you want it. And then from that image you can create those virtual machines set. So let's say you just create two virtual machines initially, then you could set a bunch of rules on it. So let's say, all right, my virtual machine now has like 80% CPU usage. Let me throw five more at it. And it automatically scales up those five more. And any say you have another rule on there today. All right. They went underneath 10 you know, 25% usage. Take them away. Go, let's go back to two. So that's, that's exactly what it is. It's I found is actually really neat. I didn't know it existed until a couple of weeks ago, so I wanted to tell everybody about it. (26:25): And um, yeah, Azure service of the month. Very nice. I love it. Well that brings us, of course everyone's probably first or second favorite part of the pod. Pick the pod which you got for us man. All right. I don't have a, a new get package but this is super cool. Another thing I just found out about and I want everybody to know, this comes from Azure SQL and it's a function called change table and change table is this. It's really neat. So let's say you're doing some, you got an app, your app goes offline, right? And it, you have, you want to sync it up while your apps offline. The rows that you want to sync up have been updated seven eight times. And how do you get the weight as version of that? Like how do you replay everything? Well, that's what changed table does change table you want, you're going to do is say here, this is the version I had and it's going to say, all right, this is what you need to do to get it to the latest version. And so that's, that's pretty neat. So you don't actually have to go through and say, all right, do I need to do this? Do I need to do that? Change tables going to say, just do this and done and done. So yeah. Very cool. I love it. (27:40): Amazing. Yeah. Put a link to that in the show notes for sure. Um, I took a different approach over here. I decided to go with a awesome third party control by a good friend John Murray, who also did the sharp NATO post on the Xamarin nuke. I wanted that to be hip, which I'm totally gonna use. But here's this awesome library that he, he was at a Xamarin expert day talking about it, but I didn't quite understand it until he, um, told me a little bit more in depth about it for the upcoming Donnette comp, uh, focus on Xamarin event and it says task loader view. This is super cool. There's a bunch of great controls out there that do a bunch of loading like images and States like you could use like Lottie or you could use just like a simple spinner and traditionally you would just put like a little spinner like, Hey, this is loading and you'd have an is busy. (28:30): This is the James approach. Uh, which is is busy, there is busy type of thing. And John Murray I believe hates this because it's in the very first thing. It's free yourself from his busy equals true. And also it's called task loader view. Let's burn as busy equals true. So I think that maybe he hates is busy equals true. But that's the James approach of doing things because the problem lies that when you're loading data there is more than just as busy. There's a loading error, success, refresh, notification, all this stuff. So task loader view handles all of this for you automagically. It's completely [inaudible]. It lets you put images or messages or button tacks for retry, all this stuff. And all you do is wrap your list, view, your refresh view or any of your content that's loading in a task, a loader view and it will automatically handle the States for whatever view you want to put up in there. (29:30): And you can do customization, you can do custom views, you can do all sorts of things. You can do Lottie views in it. It's very, very nice. So he shows you how to use it out of the box, how to like do different images based on your state that you're in. Um, and this is cool, right? Um, it's super duper nifty. So this is something that I highly recommend, um, giving a look at because every application loads data and this is a really, really cool. So, um, it's really well documented all the things that you can do, but now you can just, just get rid of all that shenanigans of, of, of having to do your own custom is loading stuff. So I really love, this is really cool. Oh that's cool. So I can have this test load review and have one for actually when I'm bloating. (30:15): And then another thing I can actually say, all right, my state is now in an air state and then it shows my air or has like a view in there which hippy my air. Oh nice. Yeah. Yeah. That's what it does. There's like a little notifier that he has and you just notify it when the state changes. So instead of having just a single one, you have a, you know, is busy and error, you know, different States, you know. Okay. And yeah, and that pairs well with something like maybe state squid, which if you're loading you could display the state of what's updating on there, things like that. So it's pretty cool. Nice. Cool. Yeah, you can see he has like, he has default views that are displayed with texts. And whatnot, but then you can have like a task loader loading view, empty view, air view, that way. (31:04): It's just everything's in one place, you know? And you could reuse those over and over again. So it's very, very nice. Nice. And I love all these examples look like they're straight out of the 80s on Atari. Yeah, it's really cool. And it's really cool. Anyways, that's the pick of the pot for me. Ah, we did a, Matt, we're through episode 71 it's over best episode ever, or greatest episode ever. Best, best and greatest all at the same time, I think. Yeah. All right. Well, yeah, you can find the pot everywhere is, or podcast.com you find us ever on the internet. Just going to do it. Have fun in your isolation chamber and I'll see you on the 23rd all right. Can't wait. (31:52): [inaudible].