mergeconflict270 === [00:00:00] James: Frank. I literally just released my app update for my cadence out into the world, which includes a SQL database. And. Then you updated the library. So now I'm scared. I don't know what to do. And it's out there in the world. I can't take it back once it's out. I don't know. [00:00:29] Frank: Oh boy. Oh boy. Um, yeah, so I did release a new version of SQL Lite hyphen net. It's actually called dash net, uh, version one point a and I'm excited. I'm excited. I don't update it that often, mostly because I don't want to break. And the library works and there's no reason to break something that works, but in this case, uh, there's a really good active community around it. And I insist on making it better. I don't know. I always agree, but they're like, let's make it better. Um, so there are some, uh, on features and 1.8, I think you're fine, James, because like the core engine or anything. Okay. I take that back. A core part did change a little bit, but not that much. Uh, I you're fine. You're fine. One, 1.7 R yeah. Version 1.7 is probably what you have has a million users. It's staple. It's good. 1.8 is out and it has faster column access. Um, the one slow part of SQL Lite was always that I used reflection too. Uh, insert data into objects and pull data from objects. And it turns out that's kind of low. Did you know that? Yes. [00:01:37] James: I believe that that is, um, well, it depends on where you're doing it too, when you do reflection, right? Because, uh, every runtime is a little bit different. If you have a supercomputer that has all sorts of things, that's living in the cloud reflections, going to be pretty quick, right? You can think of entity framework. The, I don't know if the new versions use a lot of reflection. I think they do though, but I'd have to ask Jeremy and the team. I think that was the one thing is entity framework is a lot of reflection and that's not too bad when you're running it on the server, right? Because EOF and you have core just like super duper fast, and it can know a lot of good things, but when you try to run it on a mobile device, that's trying to do all sorts of craziness that can slow it down in some scenarios when you're doing big things. [00:02:17] Frank: Yeah. And I usually fall back on my whole, um, you shouldn't be carrying a million rows on a mobile device and this is, you know, it's a database slow you're developed for mobile, but at the same time, I keep putting it on web servers and everyone puts it on everything. So we're, we're definitely putting on more than mobile stuff. And this gets into reflection is slow. It's definitely has a lot of overhead. For example, if I just want to write a value into the field of an object, not a property, nothing complicated, just, you know, put some data in a field. I would, I, oh, shoot. I'm not going to make up numbers, but it's a thousand times slower than reality. There's there's just so much overhead compared to it like that actual simple instruction. So the trick to do these days is to you. Link expressions, uh, dot net. For CRC sharp for, I dunno, whatever they've been around forever. And it turns out that although you can't call reflection, emit on iOS, and that's why CQL light dash net never did. You can, in fact, create link expressions, they had to support expressions to make link work, and you can actually, uh, call a method on a called a dot compile. And that was. Make it fast. It'll actually it'll return a method object to you and you can just call that method. Object. What are they called? Like a multicast delegates. It'll give you one of those and it's super fast. And the irony is even on, um, uh, operating systems where there is no jet. It's still faster. It's still better to do it that way. So sickle light at 1.8 as much faster column access. Thanks to that feature. You probably don't need it, but it's [00:04:04] James: there now. You mean my tiny little database that has like four columns on it, [00:04:09] Frank: right? Yeah. You're not gonna notice this. This is if you have a hundred columns and you're turning, you know, a hundred thousand rows, then you start to notice it. But until then, it's fine. Uh, so that's a performance thing, but it also now supports value. Hmm. You know, your love, your value, people C sharp people. Everyone's been using them. I see them everywhere in C sharp code. Now, [00:04:33] James: do you use them now? Cause I don't know when to use them, I guess. [00:04:38] Frank: I know it's usually like I start using them and then I get tired of typing them and then I'm like, I'm just going to create. Uh, proper type for it, but, uh, people love their value to bowls and they want to be able to store them in a database for some reason. So I support that. [00:04:54] James: Okay. So just, so this is kind of branching out because that's kind of a complex type compared to just like strings and integers and date times, which daytime is complex, but, you know, [00:05:04] Frank: Yeah, it's very complicated. In fact, um, and this kind of goes back into our old discussions of how do you store an array of doubles or locations or whatever your state, uh, RPMs or something like that. Um, Sometimes like you, you don't break things out into rows and columns. Sometimes people want to put complex data right into the database. And for the most part I've resisted that, but I've kind of come around to the side of, um, I don't know, database, you should be able to put anything into a database. Maybe it's not the best designer, whatever, but life is short. We got, we got to get this stuff done. I just want to be able to put things in the database. So I think even first. Uh, that's not 1.9. I want to have better Jaison support. So you could just throw a whole object into a column and just let the database deal [00:06:00] James: with it. Yeah. That's monkey cash, man. That is monkey cam. And talking about that since we're on lightening topics, um, You know, you can continue your SQL shenanigans over here, but we actually been getting a few questions. I'm going to go out of order. So it's going to be tricky, but talking about monkey cash, talking about SQL Lite, I keep getting questions that, you know, people have existing, you know, like, you know, Xamarin applications and reforms app, or even UWP or WPF apps. And they're like, I'm on a migrate to Donna Maui. Can I do that? [00:06:33] Frank: Oh, yeah. Uh, yeah, I got that from SQL Lite. I have to respond to it. It's an issue. So I need to put like a thing. Uh, there seems to be a little bit of confusion out there about what dotnet standard means, especially in the context of Maui and.net six, because.net six is kind of changing things a bit. It's a unified. Saying instead of word. Thanks. But, um, the good news is.net six implements.net standard. So that means every.net standard library out there just kind of works and gotten at six and Maui. That's not true if you're doing like user interface things. If you're like a WinForms library, you'll want to port that to Maui, but basically everything else is just going to come along for free. Um, You know, plus or minus bugs in the runtime, things like that. Uh, but contractually interface wise, it all should just hashtag just work, right? [00:07:30] James: Yeah. I mean, if you haven't just sit down at standard library, like SQL EIT dash net, or MVVM helpers or things like that, there's they should just be pulled in and sucked in automatically. Cause that's just cross-platform Donnette code. Right? The question will end up being with something like monkey cash, which. Has multi targeting, right? Like I target Android and iOS and TBS to store files in the correct location. Um, I probably what I probably should have done by the way is I probably should have just let them pass in. I was smart if I was smart, Frank, which I'm not pass in a directory and then I wouldn't have, I was trying to be too clever. Right. But in this case, the question would end up becoming. Can I pull in something that's targeting mano Android nine or Xamarin iOS . Will that get sucked into a net six iOS [00:08:23] Frank: project? Right. So this is actually kind of complicated. Um, I was following all these rules and in the end, this is mostly new guts rules. So I will say yes, they are changing how you should do things for dotnet six. So the way you do your cross-platform now you're going to want to grow, migrate to the dotnet six way. It shouldn't be a pretty easy, it's just going to be another little build step or something in your CII system, because you can keep on building the net standard ones. So to be clear, if you have just a pure net standard library, you're fine. It's all just going to work. If you have cross-platform shenanigans like James over here, then you're going to have to probably create a few new projects.net six projects that are just pulling in that same code as your other ones. You're going to, I think you're going to want to submit. Old and new for a little while, you know, dot net six is going to come out and whatever some amount of time, but it's going to take time to adopt it. So as library authors, I think we're going to stick with both for a little [00:09:25] James: bit. Yeah. I think that the, the thing that I may end up doing to answer, I think Sam, Rodin's Sam Rodin for this one. This is Sam. Nope. This is Dora. Rob, um, asked, uh, via email. You can go to emerge, conduct.fm and ask, uh, here, uh, I think what I'm going to do. Is what I just said, which is I only do bait and switch for getting like a file directory. So I'll just document that, you know what I mean, as this document and you go and do it, or you just use Amarin essential. Cause that's all you need to re really use anyways or done at Maui essentially, and then pass in where you want to store the file and then boom problem solved. Right? That's what I mean. Then done. [00:10:07] Frank: Right. And I did forget to mention that, um, dot-net six knows of the old target frameworks. So if it sees Amarin iOS it's and it'll try to target it, that to a dotnet six hyphen iOS cider, how's that go like net six, hyphen iOS. I think that's how the new system goes. Oh, so, um, It does. It does. The problem is you're relying on a lot of fancy new get rules that have a lot of like, if this, then this, then this, then this, then this, like, you can go read the technical documents of how all that stuff gets resolved. And so, uh, yes, to make migrations work smoothly.net six should be able to just consume that. Um, bait and switches, always a bigger question, mark. Cause that's a real trick, but, uh, it should be able to just consume those. The problem is you're relying on fancy translation rules. So you are going to want to do some net six versions. Eventually. [00:10:57] James: I like it. I like it. So either remove the junk or update the stuff that makes sense. And yeah, it shouldn't really take a lot of hard effort there. So the answer is, well, I suppose. Yeah, cause I, I will definitely do it. Um, it's always funny too, because I just go to Newgen then I click on the food, get button. I'm like, oh, what, what, what do I do over here? Oh, that's what I do. You know what I mean? Like, I'm always doing that all the time. I was on a call with someone at work and I was like, oh, let me just open it and forget. And they're like, what are you talking about? And like, let me show you this magic. Um, anyways, next topic. Frank, are you on a cross country road trip and I believe you brought one computers. Yeah. [00:11:34] Frank: I did James and I brought the Moses doubtful. One that I could think of. This is part 1000 of the M one recap, everyone we're doing it in a lightning round. I think on our last recap, I think you were very upset with your M one. You're like I'm done. I can't figure anything out. Is that [00:11:52] James: true? Okay. Now, um, I, I was. Getting a little fed up with some development stuff. Now actually using it day to day. I wasn't having a lot of issues. As far as browsing the web, watching videos, doing productivity stuff. Um, I went back in recently and I was, I was doing my cadence work and I was doing Android stuff. And that seemed to work well. I was just having some weird iOS simulator stuff, but I do believe that I updated that stuff to the latest bits and pieces, and I think it was working again. So I kind of like switched back over to like, I think everything's a little bit better now. Um, but I was a little bit frustrated. [00:12:32] Frank: Yeah. Yeah. So I was on a I'm on a road trip and that's why my mic sound might sound a little different this week. And I wanted to bring my newest laptop because it's really light and powerful, but I had all the doubts because I knew it was a good productivity machine. As you put it, like I've been surfing the web on it. It's good machine. It can do that very well. Question was, um, mano and Xamarin and.net. You know, how, how are those all doing visual studio for Mac? Uh, so what I did was I updated everything and then I realized James, oh gosh, it's still the beta summer. I still have a beta version of Mac S on here. So even if I, you know, Microsoft released beautiful, perfect products, like this is a beta version of the OST. You never know what's going to go on. Yeah. So I updated everything like, yeah. And my two things were, can I get I circuit in high circuit, 3d to compile and run for both Mac iOS simulator and iOS hardware. So I had to do all three of those tests for those two apps. And just to make sure, prove to myself that I could actually use this machine for development. And I did that. It was all working pretty good. I won't say it's super fast. But it can build ice circuit and four and a half minutes under a release build. That might sound shocking to you, but that's a release build where I'm using LLVM all the optimizers. It's an insane thing that build used to take seven minutes on my old iMac. So. Yeah, so the Amazon's not doing too bad here. I did get, I tried to run the iOS simulator and got the most horrific crashing error you've ever seen in your life. But, uh, from Googling around, I found out it was more of a west. And I just had to update the beta. Oh, S which I'm stupidly running on this machine. That's [00:14:22] James: totally, I mean, it just would crash into a, in a flame of glory. That's what I got. That was my bug. And I bet it was because I was on the betas. [00:14:31] Frank: That's right. You did the betas too. Okay. And it was a hard one to Google because I guess it was only one of the betas. It was like beta one. And they're up to like beta four or five right now. So it was only this one short period where those iOS simulators weren't working. So I got the simulators work in, um, I haven't pushed dotnet six yet, but I will say my God, that six will work. Uh, and I even did release it. Proper releases, but testify releases of my apps from this machine today. So I want to say on record, the M one is a good development machine. Things have finally stabilized a little bit of obviously you still run into errors, but they are all work through it. And I've been, I'm happy. I'm happy, nice computer [00:15:19] James: to bring. I haven't sold, done at six on my, and I was running Don and Maui, the latest previews, all the dentist, six previous, previous seven. I did a whole video on previous seven. I'll throw it in the show notes. And I talked through installing it and doing stuff that it seems to work fairly well. I made the mistake though. Um, going to the download section. And then I went to all downloads and I said, Donna is six. And here's where I got confused. Cause you get a Mac iOS and I want to install the SDK and there's installers and there's an X 64 and an arm 64 installed. Oh, [00:15:55] Frank: okay. Wow. So they got an arm 64 of net six, huh? Yeah. I didn't know that was fully supported yet, but I don't [00:16:03] James: know if. I don't know if that's good one though. Cause it didn't work for me. [00:16:09] Frank: Okay. Was that I'm sorry. Was that under the Mac section or what could that be like a raspberry PI build or something [00:16:14] James: that's under the Mac section. [00:16:16] Frank: Well, you'll have to talk to who? Rich Lander. Rich. We always just [00:16:21] James: blame rich. Well, because there's no other arm, 64 Macko us [00:16:27] Frank: one, but it had power PC. It doesn't sound like a power PC. I [00:16:32] James: think the thing is that I. I guess the question will be, I don't know. I've got to ask, like, what does everything is everything able to run under arm 64? Like does the Don Moe stuff need X 64 or something? I don't know. [00:16:47] Frank: That's always the trick. So it gets back to our previous conversation about the.net, right? It's if you have pure, I L code the runtime takes care of all that for you, the ill is a machine abstraction. It's going to work perfectly up until you try to load a native library and then it comes crashing down. Um, Microsoft has technology where I think the arm can talk to Intel and then the Intel back to the arm. But I don't think apple can make that bridge. You're either a hundred percent Intel or a hundred percent arm, as far as I remember, please, correct me if I'm wrong. Uh, that's all just a long way of saying, I don't know why that's not working. Like, did you get an error? Did it refuse to install? [00:17:30] James: No, it installed just fine, but when I was running, when I tried to run Maui check, it wouldn't run like the global tools of what run or something. Yeah. So, I dunno, I got to ask rich, I'll ask her I'll report back. [00:17:41] Frank: Yeah. I want to know if hello world works, you know, w once you go from there, then I just blame the other apps and tools. [00:17:47] James: Yeah. The nice thing is that it was really easy to uninstall and reinstall the X 64 version. It was good to go. So I don't know. Yeah. [00:17:55] Frank: Works. So back to this little I think it's all a very reasonable computer to get because, um, at every price point you're basically getting the same processor. I did get the eight core versus versus the seven core. But, um, the bill does not seem to be using every single course. So I would say that's not really an issue to even think about. So everyone out there go get some memoir. [00:18:20] James: Nice. Yeah. I still like it. I still recommend it. It, you know, we're getting closer things, things are happening. It'll just get better. And I assume that eventually when I just installed visual studio, 20, 22 or whatever, like on the Mac that it'll just install the correct versus a done at six and Alta beach is fine, but these beta summers and falls are being, you know, they're being faced. [00:18:44] Frank: They're tough on the heart, James, they're tough. [00:18:48] James: I'm sorry. Dressing. Just like we're phased, releasing in betas, in and out of our lives. I was releasing my cadence, Frank and I did this thing. Where I put it into, um, you know, into task flight and I put it into my Google play, private testing, and I have a few people that did it, but I use the led anyone test at Lincoln test flight, which is kind of cool. And someone did sign up. That was kind of nice. What happened was, is anytime someone's sent me feedback, I'd be like, respond to the answer. I'm like, oh, and like, in case you want to try some new features, like check out the test flight language. Um, so I did something on, on iOS. I'm on Android, which was that I just put it into public beta. I was like, I'm going to just, you know, anyone can sign up for public beta and you do a rollout and just kind of works. Obviously, iOS doesn't have that because I have test flight. Like people can't sign up. It would be cool as if people are in, if people were in the app store apple, are you listening? If people are in the app store, just like they're on the Google play store. Register for the beta. Right? And then you could push test life flights, build into a public beta. That's what we want. Apple. Just let us do that. Just like Google does, but they don't let us do that. So I've been, I was sitting for a week and a half. It was approved. The app was approved. I submitted it for review, right. Because I had a test that I've been testing this nonstop and they approved it. So just sitting there, you know, waiting to develop a release. And I'm just like, I don't know. I got to think about this for a week and a half. So I thought about it for a week and a half. And I was like, okay, I guess it was funny because it was literally two days before you released one dot eight of my SQL identity. So I should have waited. Apparently. That's what I'm hearing, um, is, um, As I was like, okay, I'm going to release this thing. And then I scroll the bottom and I saw this thing called a phase, the release. And, um, this allows you to roll out gradually release over seven days. And if you have a big app, this would make a lot of sense because it, the numbers are interesting. So it goes. Day one, 1% of users. So that's like 10 users are going to get this app update day two, 2% day, three, 5% day, four, 10% day, five, 20% day, six, 50% day seven. Everybody gets it. So that only allows you to pause it too. So if I wanted to, I could just pause right now, upgrade a one dot eight and go to town, but I'm not going to do it Frank. Cause you told me it's fine, but I am using it for the first. Bye. Here's the thing, like, I don't know. I dunno how many people have installed it? Like, I don't know how many of did anyone install it? Did anyone get it? Like, how do I get feedback? Like, it's cool, but like, there's not like a feedback loop. Have you used the same before? Am I crazy? Am I missing something? [00:21:32] Frank: Uh, you are definitely not crazy because you had a really smooth segue that just went right over my head. I just wanted to acknowledge that. Okay, thanks. So thank you on record. Uh, I, I know about this thing. I've been a little too nervous to use it and by nervous, I mean, I, I thought about the exact problem you just described. Uh, on the whole, I love the idea though, because I circuits my normal example. I, when I was first developing that thing, I would create some bad releases, you know, I was learning and, um, I would ship it out and I was all excited, new version out there. People are gonna love it. I'm waiting for all the fan mail to come in and then. 300 reports come in, app crashes, app crashes, app crashes, and you're right back. So phase, but at least makes a lot of sense when you have a lot of users. And I like that they pick that nice little power to curve. It's roughly powers of two. It's great. Um, but you still face that reporting problem? In my case, I've um, I'm still using classic Microsoft, uh, analytics, something or another it's great abstinence. It's wonderful. So I can see specifically, um, well, let's go with crashes because right now I circuit 3d has a bunch of crashes in it. And I have an update that I think is going to fix all of them now, but a lot of the, the big ones, the common ones. And so. I can't decide whether I would do a phase release for that, or just put it all out there. One philosophy is if this fixes a lot of bugs, then I should just put it out there. A second philosophy is you never know what bugs are introducing. So do the phase release and then watch app center, whatever analytics you have and see if the crashes are actually down or if the crashes are higher, that would be the scientific correct way to do it. Um, what do you think you're going to do? Or you don't have analytics? I guess [00:23:30] James: I, yeah. That's one thing about this application is that it has absolutely zero access to the internet and zero permissions. And, um, I actually had someone left a review that appreciated that, so, okay. So I did the phase of rollout. It's it's actually different on Android. I'm going to do it right now and you have to pick a percentage. You have to say roll out percentage. I'm gonna do five. Gutsy, but as we have that, I don't know. I don't know how to adjust it. It says this release will be available for five users, 5% of users. Roll out. [00:24:04] Frank: And then do you have to manually up it? [00:24:07] James: What we're about to find out right now? All right. Manage live. You do manage rollout, update rollout, and then you manually increase it. That's terrible. They should just have it. Like, I like the apple that's bad, but yeah. Yeah. That's, that is kind of nice that you're in control of when you want to update us. If you're like, I only want 5% of people for the next, you know, week, you could do that where you don't get to do that. It's this has happened. [00:24:32] Frank: That feels like Google's absolute love of AB tests. So yeah, I'm getting a little bit tired of being AB tested. It happens a lot in the YouTube app. I notice they'll just change very slight things about the UI for a week, and then it'll go back to them. And then it might change again in a week and you're like, stop AB testing me, just design the stupid thing and make it good. [00:24:55] James: It's true. Um, well I'm, I'm rolling. I'm excited. Yeah. Yeah. [00:24:59] Frank: That's cool. Um, I'm glad you did it. Maybe I'll have the confidence. I'm going to do it. I'm going to do it. We're going to be the phase club. That's great phasing [00:25:07] James: it. I think that what you can do here is at least Google will give me a crash rate. So right now my crash rate is zero. [00:25:16] Frank: Pretty good. I should S that that's wonderful. All software should be at zero. I'm not at zero. That's true though. Even apple gives you crash rates. Uh, you would have to break it down by the version. So yeah. You don't even need analytics as long as the user. Oh yeah. It's been, I always wonder what the proportion of users are that agree to upload crash reports to developers are I always say yes, but I'm curious what other people do? What do you think that percentage is? [00:25:45] James: I'm like, it depends on the app. I'm like kind of 50, 50, I will say on iOS zero crashes. That's pretty good. Um, but I w I would like to know what that is and can I do it and kind of break it down and et cetera, et cetera, that would be nifty. Well, I was zero crashes on all of my man. I'm awesome. [00:26:05] Frank: Or the reporting's broken [00:26:07] James: or because nobody opts in and that's the thing too, is they have to opt in, you know, they, I was, I was wrong because they actually have to opt in for everything. It's like, when you turn on your iPhone for the first time you upgrade, it's like, do you want to, do you want to give developers all your extra data? And you're like, probably. [00:26:23] Frank: Yeah. And I can't remember if they asked that I don't even think they asked that during upgrades. They asked that first time installations, as far as I remember, I believe so. Yeah. Unless someone opted out, they've probably been opted out for years, you know, because that setting is probably carried through for a while. [00:26:38] James: It's only going to matter on her. It's only going to matter if you have an app that has, you know, a lot of users. Like a lot, like a million users, then there's going to be people a sampling size in that it has that. But of course not, you don't know how many people, you don't know the percentage of people that have it turned on now. That's what I would want to know. Right. It's like, come on apple. Like, let me know how many people have opted in, you know, how many people have opted in. Tell me how many people. All right. Last. No, no, we have two more questions. Oh my gosh. Okay. Um, question from Sam. Okay. I assume. Yeah. Hi Sam. I assume Sam was listening to our Mo one of our most recent episodes about identity and authentication. Um, and this is a fascinating one, which actually I can, I can answer it as, as if from the zero or the, the Okta. The discussion about device authentication, but this is a different question that Sam's asking. So, so Sam ass short question, is there a way to identify a user if they have installed the app logged in with email and password and then uninstalled the app and then reinstall the application? Um, they say. This there, like they said that this, there has to be a way to do this because some games do it and I've seen some other apps like Robin hood does this, for example, um, it would be a nice user experience if they install and, and, and go in and out. And also because now also by the way, iOS will start to uninstall applications. If you don't use them, you can, you can turn that feature on which I do. And sometimes my apps get on assault from. Respective of the conversation that we had, um, uh, earlier with, with Okta, I think of the device, the idea of device, like the device itself is the identity. Well, if your application is part of that ecosystem, then the device is authenticated. So your app would be authenticate and there's an API to do it that way. But I think they're talking about like maybe they have their own email and password system. [00:28:39] Frank: Yeah, I'm actually a little bit confused because you can provide a pretty good user experience if you have a login system, because even basically store everything on the server or anything of relevance, you can even store the UI state on the server. You know, what page are they looking at? And you could have amazing Fidelty they could uninstalling it. Re-install the app a thousand times and it would be fine. So I'm curious why they would actually care to detect whether it has. Previously installed. [00:29:06] James: Well, they don't want them to re enter their username and password. [00:29:10] Frank: Oh, okay. Now we're getting fancy, right? Yeah. This was definitely easier back in the day when we had universal device IDs, but we don't have those anymore. So yeah. Um, like you said, it, it's going back to that Okta conversation. I don't personally have a great way because what you're talking about is fingerprinting and apple really doesn't love it when you fingerprint mostly they don't love. Add people being nefarious, add people, but in general, that's meant awesome features like this have gone by the wayside. Uh, I mean you can do all sorts of ugly hacks. You can take the ethernet address of the thing and use that as a reference. You know, I don't want to suggest anything more though, because I'm just going to sound like an idiot and give a lot of bad advice. [00:30:01] James: Well, Um, what I was thinking of is could you log in right? And then store your auth token into the key chain, right? Yeah. And then that key chain gets backed up. And when you want us on app, your key chain doesn't get deleted. It's all around. That information is still there. I'm like 99% sure. Um, Especially [00:30:24] Frank: if it's, whether they're using iCloud key chain, or if you back up the phone, you're a key chain, it gets backed up. As long as you do an encrypted backup, you have to do an encrypted backup. That's an important backup. Yeah. Yeah. Um, yeah, I mean, that was kind of the foundation of our crazy good authentication system for your app was now the only thing we have to store is this very simple piece of information, put that in the key chain and it gets propagated, right. Yeah, [00:30:52] James: and that works. Um, I've done it at least on iOS is really, really good on Android. It's a little bit iffy because of how shared preferences work across the different versions, but I use secure storage and yeah, that seems to work just fine because you, the user will install it, then you uninstall. And in fact, it was a little bit annoying for me cause I was trying to test different users and I don't have a little. Out mechanism of the app. So I remember that was my main prompts. I had to create a new import mechanism to like log them out and log them back in with a new and generate new tokens. But I think you could do that now. Of course, you, you want to think about, of course key chain is secure. Um, but you would want to think about like how long is that token good for, for example, right? Like, is it, is your token good forever? Is it good for 24 hours? Is it good? You know, it depends on how good that token is. You would not want to store their email and password that they entered into, correct disagree or you [00:31:48] Frank: to agree. Key chain was specifically designed to store usernames and passwords. There are fields called username and password. That's designed to store that information. That's a good point. I know it's not fashionable these days, cause we're all beyond passwords, but I don't know. I think only like Silicon valley is beyond passwords. I think most are very comfortable with. And accept them. And I would just dump those straight in there. Of course you could just put the token in there. You're right. But I would just put the username and password [00:32:16] James: unless they change their password or you have to factor with them [00:32:19] Frank: fine. But then you need a password recovery system. Anyway, that's just a PO a part of. Accounts and authentication. This is all just a convenience feature. And so all we're really coming down to is, um, what is permanent storage and what should you put in there? There really isn't much permanent storage on an iPhone, uh, outside of your app. So, uh, other alternatives are apps. Cause you can technically create a container there, but that container would also disappear if another app, uh, that wasn't using it. I think it could, they kind of get garbage, collected and erased alternatives are, um, there is I cloud storage, so you can just lock it up onto iCloud. It's super easy. I would not put usernames and passwords up on iCloud, but you can put pretty much anything else up. Key chain key chain [00:33:12] James: passwords are allowed there. Well, the other thing too is like obviously the key chain from apple and also the authenticator application too. As far as that's what I use for all my Microsoft stuff. Like it, it will fill in my username and password for me. So actually having me log in and it's not that big of an issue if you're on an iPhone or even on Android, it does it automatically where if you specify the fields. You know, manually, even if you open a browser, it'll still save your data for that URL. So logging back in isn't that bad, I mean, a better user experience. Yes. As if you try to seamlessly do it. Um, but yeah, I would [00:33:51] Frank: work. I think password filler printers have gotten really good. And I think the way it works on, yeah, iOS is you it's somewhere in your info P list. You tell it what website at this app is a reflection of, and it will prompt for those passwords in that, uh, in those fields. I there's a whole WWDC session on it, but there is a way to associate your app with a website so that safari passwords get shared between the two. The other nice thing is you can get cookies to be shared. Yeah, cause then yeah. So their Apple's been working a little bit on web integration of apps. I unfortunately, it's the name of all this technology is alluding me, but over the summer, in the past four years of WWDC, they've discussed this. [00:34:37] James: Yeah, go ahead and Google that. For WWDC for WWDC for WEDC specifically. All right. The last one I'm going to talk about. I wrote it down in here and you probably think it's something else, but it's not. Um, I put we Frank and I, we designed and we just have a, just me listing topics and we, one more, many of these were from you, the community. Um, we do this every 10 episodes. If you're brand new, the podcast will welcome. Uh, hello. I put down something called automation. What do you think? I meant when I meant automation. [00:35:10] Frank: I know exactly what you mean. You want to talk about the classic Mac app automator, the little robot icon and apples script or apple? Yeah, apple script and how fifth generation programming languages should be more like spoken English and written English than like a programming language. I am here for this conversation. [00:35:33] James: Close almost kind of, but no. Um, I am talking about that type of automation now. Now here's what automator does because I've heard, um, um, uh, what's his name? Daring, fireball. Um, talk about, uh, automator and scripts and stuff like that. And now I'm under this. Here's my mentality. If you ever have to do something twice, You should try to automate it. Like you should try to figure out a way of automating that thing to re to remove. Cause you have to do it then a third time. You're just wasting time. You should figure out a way of attempting to automate that. Now there is a tricky thing, which is sometimes it may take longer to try to automate that thing than just doing it manually. But at some point. In time, it's going to be worth automating that puppy and people have used different like browser extensions, little scripts that you can run. Um, you're talking about the automator, which allows you to run scripts, there's keyboard automation, where you can automate keyboards. The thing that I'm talking about, which I think is the most amazing thing in the world that I've deeply dived into as a manager at Microsoft. Is two different pieces of technology that are basically the same, but a little bit different, which is logic apps, part of Azure, and then power automate slash flow, which is power of M 365 power apps, et cetera, et cetera. Now, these two pieces of technologies. Closer to automator, but instead of being written language, they are blocked base. So it is sort of like if this, the mat, but if you can do an advanced logic and you can do some conditions and loops and other advanced properties and you have inputs and outputs and multiple outputs now here's the difference between the two of these things from, from a high-level perspective. Power or power automate slash flow, which is his original name. I so-called flow. Cause it's flowed out microsoft.com. That is if you are really integrating into your M 365 deeply because it authenticates really nicely. So for example, if you're using Excel or using SharePoint or using forms or anything like that, whereas if you're in. Um, if you're inside of Azure and you're using other Azure services, like Azure functions, and you want to authenticate with all your Azure stuff, power automate or sorry, logic apps are really good for, okay. Those are the two things. They both have a lot of the similarities though, but they're all great. Now here's the thing I at any given time, Frank I'm Lily, we were talking about this podcast. So I'll pause at any given time. Frank, I have probably 30 to 50. Power automations running every single day. Like every single day I was running. Cause here's what I do. I have all sorts of scripts all over the place. Right. For example, for the dinette live TV live streams that we do, I want to be able to gather information like, you know, how many viewers did we have? Like how many, um, how many comments were there? I mean, he likes where they're, you know, um, I want to know for blogs, how many views that it get. Um, I want to take that information and I want to synchronize it with our Azure dev ops or our power BI dashboard. Right. And I could do this all manually by hand. Right. Imagine if I had a, uh, a dev ops and Azure dev ops ticket, like a, like a, if you're using JIRA, like a ticket, like a thing on a combine board. And it was for a blog post. I wrote this blog post and there's a field called V. Every single day, I could open that open up, you know, our analytics and I could enter that or I could have, I could have a flow in power automate that says, Hey, every day at midnight, go grab every single run, this query and Azure dev ops. Okay. Go run that, which is going to query all of the blogs. You know, entry tickets that I have that I've completed and then go find the URL and go run a query with our analytics, get the views back and the comments back, and then pipe it into the Azure dev ops. And then from that, a dashboard is generated. Or Frank, what if every night I just queried all of YouTube, all the different ideas, all the different playlists and it updated all the different information. That's backing the database for the power BI dashboard. That's updating this. And then what if at the same time it generated an email report once a week from that data. That is what I do at work. That is my job. Automator autumn, not a robot. It's James. Aye. Aye. Aye. Aye. That I'm coding at the same time. Cause it's a lot of conditionals. It's a lot of different things and I'm sure an in-between that I'm calling tons of Azure functions to do a bunch of stuff, right? Like I'm not having the power on. Call, you know, a dev to API or a, uh, you know, YouTube API. Like I have a C-sharp function that's that I can call that I have an Azure and, and, you know, I, I haven't used that Azure function call, it returned data. I parcel Jason and then I iterate over it. And it just enables me to basically log into all of these different services and query all these different spreadsheets and, and. The table storage things and all this different stuff. I have one for table storage. Oh my goodness. Our blog is all like with GitHub and all this other stuff. And like, um, email and I have it where like he triggers my logic app and then it like stores tokens into table stores and, and updates, all sorts of different things. It's a beautiful world, Frank. I just, I don't get to code very often. I automate all the time, but I'm this automation. It's like all these tedious things that I don't want to do ever. And I'm like, I can automate and never have to do it again. [00:41:32] Frank: Ah, okay. I don't even like that perspective. I don't like the efficiency perspective and I don't like the TDM one for me, what it is is in three months, I've forgotten how to do it. Yeah. So sure. I'm an expert at it for a week or two and I can do it really fast and maybe it is tedious, but I'm still fast at it. And I'm debating whether I should automate it, but I'm like, I'm pretty fast at it. Yeah. Fast forward three months. And I can't remember how to even do it. So who cares about fast or efficient, you know, So, this is definitely a part where I feel like I have failed as an elite Hacksaw computer user, because I imagined as a kid that I would have all sorts of powerful machines, running thousands of background tasks, doing all my bidding, you know, it would be querying the internet and cross correlating information, rendering it to a 3d collogue rendered on a hallway projector. You know, all of that should be happening, but instead I have my little meat finger. Poor. We typing in Google searches and looking at notes files for usernames and passwords and all that stuff. So that's my way of saying, uh, you are a li Hacksaw because you have automation. It really is a next level step, uh, back in the day. Th that you would have just done Cron jobs. You would have written a thousand scripts and had a thousand Cron jobs running. Now we're fancier. We have clouds with multiple access ports. My favorite one, what I've actually gotten pretty addicted to is the get hub actions. That has been my gateway drug into automation because you can, they have support for secrets. So you can deal with all your authentication kind of stuff. You can code your steps in whatever language you want. Cause you're just calling out to a shelf file. So, you know, whatever language you want, install the runtime or whatever on that machine, it doesn't just have to be events. I'm sure your logic apps and stuff, the real beauty of all this is triggers and events. Anyone can. Software at work, uh, but it's triggers and events and coordinating all that. That's hard, but, uh, again, uh, actions has decent support for that. Especially if you do multiple different jobs with different names and dependencies, all that kind of clever stuff, you can get all that to work. And, uh, it has Cron jobs. So you kind of have it run every morning or something like that. So I totally get. Um, I I'm still searching for the perfect UI for all of this. When you were describing logic apps, I haven't seen it, but I was honestly thinking of Yahoo pipes, Maria Yahoo pipes. [00:44:01] James: No, I need to Google this really quick [00:44:04] Frank: classic one. Th th this is logic apps or flow, you know, um, before that. Oh yeah. That's [00:44:09] James: pretty simple. Yeah. [00:44:10] Frank: Yup. Yup. They, they were working on it. It was a failed product. Um, but they tried this stuff. Um, it's always a question in my head of, uh, It's a large design space. It's our big problem to solve. So it's curious to see which ones will survive and which ones are actually useful. So hearing from you that you find this one useful, that's a pretty big thing to me because it's easy to write an automation thing. It's hard to make it useful. Yeah. [00:44:36] James: Because you know, for a long time I've been using a lot for a lot of backends for my apps that use Azure functions and Azure functions also have timers or Cron jobs basically. And I use that as still, right. Cause that's like, I am just running a bunch of logic. That's doing some stuff and shoving stuff over here. Whereas usually my. Usually my flows and automations are tying into a lot of different pieces of data, like an Excel spreadsheet, right? Like I'm querying Excel spreadsheets. Like, I don't know how to do that from an Azure functions probably possible, but yeah, I'm reading in that data and then I'm updating tables and rows in an Excel. And then I'm sending an email through my personal, you know, work account, you know what I mean? And then I'm posting a, team's a message. I actually could do all that from Azure functions, but like I'm already authenticated or I have all this stuff and it just kind of does it and that's the magical bit and piece of it. And they both have their place and they're both very powerful. Um, and you can combine them, like I said, so I've talked way too much about automation, but there's a lot of automation because you know, a lot of people may think like CIC D but actually funnily enough, for what you're talking about with actions get up actions is you can kind of do anything you want. Yeah, have a generate a new website for you and, and, and you can have it send you a email and a text alert and like all sorts of ins and outs. Right. And I love that stuff. [00:46:00] Frank: Yeah. I keep thinking all my dynamic websites should actually just be static websites. Like I should just have, like, we should go back to 1970s computing and just have our websites all update at midnight and then people can hack in when the clocks change. There'll be [00:46:14] James: really cool. Oh yeah. All right, everyone that is going to do it for this week's emerged conflict. Again, every 10 episodes, we do these awesome landing topics. You can submit your own questions and comments. We read all of them. We swear a lot of nice comments about the. Episode I do with Maddie. So I definitely respond back to those. You're going to merge conflict out of them. You can leave comments on the episodes. Preferably can just send us a contact. There's a contact button. You can email us, or you can hop on our discord. Anyone can jump in there. We also release exclusive episodes on our Patrion nearly every week. We'll get back to them next week after this one. Um, but yeah, there's, there's a button on the merge conflict out of. I'm just going. That's going to do it for this week's emerge conflicts. So until next time I'm James bonds Magno [00:46:57] Frank: and I'm Frank Krueger. Thanks. Thanks for listening.