mergeconflict313 === [00:00:00] James: It's official Frank, we could not decide on one topic. So we got four topics this week. [00:00:14] Frank: I love how we always like quadruple our work when we, yeah. When, when we're already failing at our jobs. Yes. James it's random week. It's not a lightning round. It's random week. How about that? [00:00:25] James: Yeah. And in fact, I think this is pretty good. I was listening to the tech me ride home, Twitter space, extra from this last weekend or two and they just kind of rambled on stuff. And I was like, that's kind of actually, every once in a while I feel like a good rambling. Podcast is good. Maybe that should be a Twitter space. Maybe we should investigate Twitter spaces, but I don't even know how they work, but, you know, I top of mind wanted to get some things off my chest, but Frank, before we get there, let's like our amazing sponsor this week. So we can just talk about those topics without any more ads. Sync fusion. That's right. You guess it because sync, Fusion's amazing. They've been with us for like ever, and they're awesome. And I've been with them forever because I've used them for like 15 years. It's crazy. But sync fusion is a company that really builds absolutely stunning UI components for any type of application. You're building web, desktop mobile. You name it, they got it. In fact, they have brand new TNA, Maui controls as well. Ooh. So if you need your charts, graphs, controls, labels, sliders, signature pads, maps, barcode generators. You need document processing for Excel, PDF, uh, word PowerPoint. They got it all. They got all the stuff in there. It is absolutely astonishing. They support everything. Donna Mau. San flutter, UWP, blazer, ASP, net core JavaScript, angular react view, Jake win for w win UI, all the things. Oh my God. Frankly, they support everything. Give them a look at sync, fusion.com/merge conflict to check out all of their amazing controls. They see fusion for better this week. Ah, [00:01:47] Frank: I do love how they support everything. It's kind of [00:01:49] James: great. Just gotta collect. 'em all. That's what I say. Okay. Frank, number one. I wanna give an update here because we talked about it around dub dub DC, but you know, I'm running iOS 16 as on main device. Cuz I'm. Not that smart. Um, but Frank, I have an update. I got two updates. I got three updates. [00:02:06] Frank: I, I, let me make a prediction, smooth sailing. I, I, I think our, our releases are so incremental these days. I bet you're gonna say something like your batteries, always dead, cuz that's how deep bug builds are. Uh, but you know, ever since like I S seven, I feel like these , these betas have been pretty smooth. Uh, so James, how wrong am. [00:02:30] James: This is the bumpiest Beit I've had in a while, too. Ouch. [00:02:33] Frank: okay. Uh, wasn't predicting that. Okay. [00:02:36] James: So my predictions were gonna be at a minimum terrible battery life and that's yeah, you're, that's every Beit. [00:02:44] Frank: It's the logging. Have you ever hooked up the console to one of the debug devices? You know, the there's the console app on the Mac. It's kind of hilarious to everyone. I mean, it's already, if you open, you know, if you use it, it's already flood. But the debug builds are especially flooded. Yeah. [00:02:59] James: And these ones I feel are very different than, oh, I'm on iOS 13 already. That's stable. And, and you know, I'm going to iOS, you know, 15, it was 15 out three. Now it's at 15, not four. Like those are shorter ones. They probably have like just, you know, a medium level. But like, yeah, it's definitely intense. I will say this I'm on my iPhone. Se two still performance, I would say, just as good. So as far as scrolling and doing stuff, that's, that's looky, split. Although that being said, I'm getting at least a crash every day, sometimes multiple times a day. And [00:03:31] Frank: like a, so like a full reboot kind of crash or like an app crash. [00:03:36] James: I have gotten many, I've gotten, I've gotten many an app crash. Which is the app is fully functional. Something happens. It's like, oh, poof gone. And then you get a screen. That's like, something's gone wrong. You should report that. But I have gotten full on system meltdown crashes, a hundred percent, uh, about two or three times, which isn't that many. There's not that many. That's really good, but I'm, I don't use my phone that much. I don't do that much on it. To be honest with you. I. Text you that I'm gonna be late to the podcast and then that's it, you know? Um, so I'm not like playing games or doing stuff like that, but I got an iMessage today. I opened it up and I looked at it I read the, I read the thing and then my mom tried to call me at the same time. Which is called thing. And then it crashed, crashed both the apps. It crashed the iMessage and it automatically like disabled the phone. It was like, boom, no, not done. I was like, whoa, interesting. You know what I mean? Like that's crazy. I've never seen like iMessage crash ever. Yeah, [00:04:43] Frank: I okay. Yeah. Uh, so although not a part of my prediction, I'm also not too surprised. Um, they, they did change some windowing stuff. They're always changing windowing stuff, and that always changes, especially the phone app. It has all sorts of weird privileges where it can just take precedence over things. And so like mix the phone app. With the messages app, which always has its own weird bugs and things like that. Yeah. And I, I, I kind of believe it. I kind of believe it. You know, the neat thing is these kinds of crashes though, never do seem to show up in the release build. So I think they at least have good enough analytics that they're able to get these big Crashers fixed. [00:05:26] James: I got one other one, which, uh, some people on Twitter were complaining, you know, we're not complaining. They were mentioning that, Hey. These apps don't work anymore. And I thought we were over that. Uh, Nope. My Regal cinema app does not work, which means I can no longer see movies on my Regal ultimate pass that I got on black Friday for 50% off. They don't want me to see movies, um, where I'm beta two Regal. [00:05:50] Frank: That's the problem with the main device, you know, it's yes. You can tolerate your main device when you're just browsing the web or something. Mm-hmm it's always, yeah. When you wanna bring up a ticket stub or something, or the wallet app doesn't work or iClouds not working. Yep. TIS the trouble. That's why I don't do it anymore. I should though, because you were just, you were creating a pit in my stomach. I'm like, oh, darnit. I actually haven't tested ice circuit on the phone. On iOS 16, I've tested on the iPad, but not on the phone. And now I'm just like, Darn you James. Maybe I could find a phone around here at upgrade. [00:06:24] James: All my other stuff has been good though. I mean, to be honest with you, I guess I could test it for you. Um, I own it. [00:06:28] Frank: Your, your apps, how are your apps doing all good. [00:06:32] James: Flawless Bluetooth flawless numbers on a screen flawless. Um, Skiing reports flawless. That's great. Perfect. Now my cuz my now, now to be said, I wanna be very clear just because it works in beta one and beta two does not mean you're ever gonna work in beta three. Okay. Oh gosh. We've seen that before. What? I think it was. I think it was an Android one where they like changed how strings worked or something. And like, we're just gonna crash every app. And then they're like just getting, [00:07:02] Frank: and the here, the, the real problem is it can change so much throughout the entire beta cycle. Mm-hmm so the, the, the style I've adopted is I get the initial beta. I pretty much ignore the middle beta. And then, you know, a week before we all think it's actually gonna be released, I get the beta. And then I fine tune my apps, cuz usually. You know, if there's a break in the operating system, it's usually a day or two to fix something like that. You know, it's usually not rocket science while your app is crashing on the new operating system. Uh I say that I'm knocking on wood, knocking on whatever you want. uh, so I generally tend to just get like the first and last beta. I don't chase the beta wagon again because they break and change so much stuff in between, unless there's something on Twitter where they added something super duper awesome. In one of the newer betas. [00:07:49] James: So you're still not gonna run it on, uh, your main device or you're going to, um, you [00:07:54] Frank: know, I, from this report, I'm not really going to too many movies lately. So I think, uh, I think I might give it a shot, mostly outta laziness just to make testing easier, cuz yeah, I could go upgrade one of my older devices, but. It is actually easier if it's on the main device, any cool features. Do you have any positive things to say about I six? Yeah. I mean, what are we up to? Yeah, [00:08:17] James: the widgets are good. I've been using the widgets on the home screen that that's cool. They're there, that's a thing. Um, uh, the search is now at the bottom and not at the [00:08:30] Frank: time. Um, Okay, that's great. [00:08:35] James: Oh, you know what is nice. They, they finally fixed up a lot of the iCloud. Like menuing the family stuff. They did a lot of time in the family menu. That's really nice. It looks a lot better. You can see like who you're S sharing subscriptions with and a bunch of other stuff. It looks, it looks really solid, like in the setting [00:08:53] Frank: app. Mm-hmm yeah, [00:08:54] James: yeah, yeah. That's nice. That's a good, I dunno, I'm excited about the family sharings that age. [00:09:01] Frank: Wow. Um, you heard it your first folks. I sixteen's best feature. [00:09:06] James: That's the hotness? Uh, [00:09:08] Frank: well, I hope I'll give a better report next week. on what I discovered, cuz yeah. I think you convinced me if, if those are your biggest complaints. Yeah. I think I'm on [00:09:17] James: board. Yeah, I think you're fine. Besides that. Yeah, it's great. The whole thing is great. Uh, it's the whole, thing's great. Come on. Regal summary plug in an iPhone. Yes. Figure out why your app is crashing. Go to town there. [00:09:30] Frank: Um, and everyone, I don't, if you're new to iOS development, little trick here, um, if your app is crashing in a beta, you can't release. Fix to that app using the beta, you have to install the old X code, make the fix using old X code, not the new X code and submit that. So hopefully you can fix it before any of that stuff comes out. Then you can actually relax in September and all the stuff comes out instead of having a heart attack, like the rest of us do [00:09:56] James: mm-hmm yeah, I guess that's the problem is if it, there, there must be a way to fix it. Right. [00:10:05] Frank: Or maybe not usually, usually it's honestly, it's usually just cuz I'm using an API incorrectly or I made assumptions or I made sizing assumptions cuz you know, they love to change how like navigation, controllers work and things like that. And so it's usually just when my code has like a hard coded constant in it or um, they deprecated an API at iOS three and I was still using it usually kind of stuff like that. Yeah. Stuff like that. [00:10:30] James: Exactly. My assumption with the reg. Now I don't work at Regal. If any of our listeners do, you can tell me if I'm wrong is they're probably using a bunch of junk. And I know they're using a bunch of junk. So technical term yeah, they're using a bunch of junk. Okay. Stop using junk in your apps. People. I don't like it. I don't want it. I don't need my movie application to have yeah. Like 3d games with augmented reality, stupid things. I don't, you know what it, um, it needs to do show me the movie. Let me buy a ticket. Let me scam a ticket. That's all. I, I don't need to do anything else. [00:11:05] Frank: I don't. Do you remember one apps were simple. Do you remember those UIs? That was like iOS two. That was, and I [00:11:11] James: don't need all of your ads tracking shenanigans. Stop it. [00:11:17] Frank: It's the popovers I can't believe popovers made it into apps. [00:11:21] James: Oh, I hate 'em so much. It made me vomit in my mouth. I'm sorry. I don't. And they, well, you know, what they do is they put a tiny little X on the top. Right. And you're like, I'm not brow the web and I'm not getting an advertisement from Casper mattresses. [00:11:35] Frank: App's not in the human interface guidelines. It's not the all can we and Revis those by the way. Did you see [00:11:41] James: that? What, yeah. You told me about it. You're like new. Okay. And does it pop overs in. No, no [00:11:47] Frank: apple is still against pop. You can do modal dialogues, but use the native one. So it behaves like a native one. So it supports flick and all that kind of [00:11:54] James: stuff. App. So completely. Remember when I was implementing the what's new on my app, I didn't do it as a popup. I did it as a, as a thing. I did it as a, you know, or a popover. I used the sheet sheet. Yeah. Proper sheet. You slide it away, just like a normal be. Do you know what apple does? Copy that, [00:12:10] Frank: just do that. Yeah. well, the problem is these apps copied it. They copied it in iOS three and cuz they didn't do it natively. They haven't been able to keep up. [00:12:20] James: Yeah. Oh, okay. Let's move on. Coding time. This is my coding topic. Frank, my coding topic. Frank. All right. I got a link for you because how random you're gonna be like, be this has existed for the go blah, blah, blah. Oh, [00:12:37] Frank: I love this. Can I hipster this? [00:12:40] James: partial methods, [00:12:44] Frank: James. This has existed for a long time. Okay. [00:12:47] James: When was the last time you ever used a partial method? Never. You never used it, Frank. You ne don't don't you lie to me, Frank. You have not used partial methods ever in your life. You've never done it used virtuals. You've definitely done virtuals. [00:13:04] Frank: I often think very hard, like how could I use partial methods to solve a problem, this problem, any problem? And I'm usually like, no, I don't think they solve the problem. should we talk about what these are? Should we set the setting at all? Or I. People probably get this idea. [00:13:22] James: Right? So here's the scenario. And I just sent you a code block, which was, I was updating the podcast application to use the new.net community toolkit for MVVM has all these amazing source generators. And there was a little bit of code. That had a public, um, a public gutter and setter for the settings page. And there was, is dark mode or is wifi only mode. And they set a value, a backing, sore value, like a bullion, but they also call a method or set a, a property somewhere, uh, like in a settings preference class. So they're doing multiple things besides being a very simple getter and setter. And I was like, huh, well, if I just add observable property, this attribute it'll generate code. How do I, you know, have it do something else besides, you know, the boiler plate generated code? So I asked the team because the very first thing I said is like, I, maybe I gotta implement something or I gotta override something or I gotta do something. And what they said is we'll look at the generated code and sure enough, there is a. So, for example, there is dark mode enabled, right? Mm-hmm [00:14:26] Frank: so you have a property you want called it's a bullion is dark mode enabled. [00:14:30] James: Yes. Got it. And what that generates is the public gutter and setter and all the MVVM stuff, but it also creates two partial methods. One is, is on dark mode, enabled changed, and one is on is dark mode enabled, changing. Yeah. So there's the two of those. and, um, when I was talking to the team, they're like, oh yeah, just override the thing. And I was like, no, it's not in there. There's no override. And, and then Sergio comes in and he is like, no, no, no, it's, it's look at it. It says, because I, I said, I looked at the, I looked at it, I said, partial void. And I was like, I think you're missing the virtual word in here. Like, I just didn't even think of, you know what I mean? Because if, if it's virtual, you can then override it. Right. And then trickle on down. Yeah. But he's like, no, it's partial. You just use the partial keyword. And I was. Huh? I don't even know how that works. like, like, what is the order of operation in this partial? What is going on here, Frank? Like, why does this exist? Why isn't it just virtual? Is there performance stuff I wanna know in general? Yeah. You know, I know, you know, cuz you're Frank Kruger. [00:15:35] Frank: I know these have been around for a long time to support James. Exactly what you're trying to do. This is basically the reason they were invented. Um, The idea was to help out code generators. So you wanna be able to declare some things, um, but maybe you don't want to declare them. So, uh, in your case, you're trying to generate some properties. And so this code generator is doing all this magic stuff. However, it works, whether it uses the new C short. Nine nine or 10 co-gen doesn't matter. They're generating some code. They're doing your work for you. Great. But you need hooks into that. Mm-hmm and so they need to provide these hooks. And so, uh, step one, partial classes were invented where they're like, look, you can actually break the implementation of this class up into multiple files. It's beautiful. Pretty cool. It's beautiful. Hm, so that can help you keep your code organized, but it also supports importantly code generation scenarios where something is generating the class definition, but you may want to, and I'm gonna abuse this word override , but it's more like hook into, um, opt into, uh, some optional capabilities of the system. And so for that, for these hooks, these partial methods were created, and yet you nailed it. You just use the word partial instead of virtual. Cause they are separate. You can have partial virtual methods of course, to make life really fun. uh, and the idea with these is elegant and simple. If no code calls them, they don't get compiled. Mm. If code. Does call them, then it searches around for these partial class implementations looks for an implementation of it. And if it exists, pops it in and if it doesn't exist, throws up an error. So it's just a beautiful. Optional method mechanism. It's, uh, actually kind of separate from the whole virtual method system, which it can work with, but think of it more like an optional method and it only gets compiled if it's used. That's [00:17:39] James: cool now. Yeah. So is it get added into the V table somewhere? [00:17:44] Frank: Nope. Virtual. No, it's not. Nope. Yeah. Okay. So if, uh, well, two scenarios you call it or you don't. So, um, I'm sorry you implement I'm so sorry, everyone. Uh, every time I kept saying call, uh, implement. So you, you put your own version of it, sorry. Sorry. So you can put a million calls to it. but if no one implements it, all those calls are no operat. Nothing happens. Oh. But if you James do implement it, if you implement on is dark mode enabled change, that's a very long name. Yeah. But if you provide an implementation for that, that means their code and their setter for that property can call. We'll call your function in their code. They always call your function, but actually the compiler and this is important. Not the compiler, not the run time, the compiler won't emit it. [00:18:34] James: Wow. That is, that is clever because the difference with doing something that's like abstract or virtual, is that it's, it's added into the, [00:18:42] Frank: into the V table. Right. So it saves a lot of space. It, you can provide hooks for free. Basically you can put a million little holes in your API. Uh, the downside is it is separate from the virtual system. So the, the virtual system, the over override, uh, override system is baked into the run time. the.net run time knows about virtual methods and objects and V tables and all that kind of stuff. These partial methods are a hundred percent a C sharp feature. Wow. Uh, uh, F sharp won't recognize them. Uh, but you know, if you're living in the C sharp world, it's all good, but it's, it's very much just for that world. Also [00:19:24] James: be beautiful. Now, now that makes sense. I, I, because now I understand, right, because the whole concept that, you know, Sergio was talking to me about, was it being super optimized and code this tightly code. So it makes sense. So like, Hey, we're gonna generate it, but the compiler will remove that junk if you never use it, which is probably what mostly will happen. And so from this case, and it exists, that's. Mind. Boly amazing. Frank, I [00:19:47] Frank: love it so much. So you did ask me what was the last time I used this and I actually use these kind of every day because I use storyboard files in my iOS apps and the code generator for those storyboard files because they create objects and those objects are reflected through the magic of Amarin into, um, uh, see, see sharp objects. And if you have. Methods declared within X code, they get generated as partial methods, which is kind of fun. Um, because then you have the option or not to implement it in your own code. And of course the code generator there emits partial classes. So you mark your class partial and it all works magically. Yep. Awesome pattern. When doing code generation [00:20:35] James: love it. I'm in, I'm gonna start putting partials everywhere. Does my [00:20:38] Frank: new jam stop it. don't use it for optimization everyone already. There is a linker that will attempt to remove code that you don't call. So don't put partial everywhere, you know, thinking that it's some kind of optimization trick. It's more about if, um, I, if you just have separate class definitions that come from different places, another place I used, I used to do code generation from like Excel sheets. just because there was a large class hierarchy to gen code generate and I would do the same kind of trick I'd mark, everything partial. And then in my code, I could just override without using the word override. Thanks. [00:21:13] James: Oh, you can't stop me. I'm doing it everywhere. Frank. great. Ha I win. Ha ha. No, that's cool. Thank you for that, that, that L so I think that's a. you know, like, Hey, here's like what it's cause what, what also is nice is is that when I'm using this, you know, when you type an override, there's a bunch of junk, cuz you can just, there's tons of stuff to override, like even in a class, but when you do partial, like I just typed it partial and there's like, Two things, because that's all there was, I was like, oh, things are really easy to, to find just the partial things. So was, that was really cool. It was a nice little perk I would say [00:21:46] Frank: is that, oh yeah. Should mention the Intel sense. Yeah. Really important. There's partial and override and I get confused too. Sometimes I'll I'll type override cuz in my head I'll think they'll throw the partial list into the override list, but I don't think they do. Am I right? I don't think they do. No. Yeah. I think there are very much separate lists. Yeah. So I have to remind myself about that too. Yeah, when that's fun. That's our classic old feature. I, I love that. You're bringing it. [00:22:11] James: Yeah, the more you know about C sharp. There you go. There's my two topics. Those are my two topics. [00:22:17] Frank: Frank, what else do you do we have, do we have any time left? Okay. Yeah. Let's no, we have time. Plenty of time. Uh, let's do a fun little quick language one. I noticed a funny feature in C sharp 11. This was going on around on the tweeters and it is the scoped keyword. James, have you run into this? [00:22:37] James: Scoped scoped as in like a scope, but with a D like you scoped scoped it. Yeah. [00:22:42] Frank: You scoped it knowledge. It's a scoped variable. So it's a scoped VAR. Yeah. So it's this kind of neat thing that they introduced. Uh, you know how, whenever you want to create a span, you can't say like span of T X semicolon, you actually have to give it a value Uhhuh. The language actually requires that you give it a value. Yes. So you have to say span of T X equals, blah, blah, blah, some array or something like that. What the scope does is relaxes that rule a tiny bit. And I find it so funny. I'm like, gosh, I never thought about. Okay. I guess, I guess you'd wanna do this. Uh, if you put the word scoped in front of it, it requires, and this is weird because they've always kind of required this, that you initialize that variable eventually mm. Within that scope. And that's always been a little bit of a requirement. The C sharp compiler has always checked whether you're using a variable. Before it's been assigned to. Yeah, but this changes that rule tiny bit saying you absolutely must assign to this variable. There there's no if ends or butts about it. And I think it's also just making life a little bit easier for these, uh, things that you are required to initialize when you're, they're created just relaxing that rule a little bit so that you can write, uh, maybe a little bit longer code, make it a little more clear. What's going on. [00:24:13] James: Interesting. So. Can this be applied to anything like, can you scope a bullying or something like that, or scope a per you know, just a class or a string, like let's scope that out. It does it cause you know, I'm when I think of scoping in C-sharp I think about the squigglies, right? Because you can scope stuff to a squiggly block basically. Right. So if it's scoping. So it was, for example, like in the example of Kevin Jones from GI had like tweeted out about this, it was like, Hey, I'm creating a span of bite. And before I used to have to initialize it and then do an if check and if this assign it to this, I'll assign it to this. Right. Um, but now with scoped. It doesn't have to initialize it. It's just like, Hey, this is my span of bite and I'm gonna initialize it down here. Does the scope end? Like, is it, is it, is it virtual, virtual squiggles? [00:25:07] Frank: yeah, it's using the squiggles. So the. Uh, okay. I do have a question. I do wonder if it's introducing a new scoped scope right there, which I'm pretty sure it is. Or if it's just using the outermost scope, you know that the squiggles above it. Um, I good, good question, James. We should follow up on this. Yeah. Because I don't have the exact answer there. It would make a little more sense to me if it created a scope right there, exactly there where that variable is, but I don't wanna commit to that without actually reading the language [00:25:41] James: spec. We gotta get Jared Parsons on. Probably Jared said in this, he says, scoped is preferred going forward. He said, scope to Modi is declarative and works in more scenarios like parameters, refs, any type, et cetera, would be betting on that. [00:26:00] Frank: Fun fun and scary. Um, so I , um, generally we, we, we have decent rules for scoping in C sharp. Uh, there, we actually do have instructors. Have you ever used finalizers on your stuff? Oh yeah. Yeah. [00:26:16] James: Am I not a C sharp developer? [00:26:17] Frank: Frank? I know. Okay. Well, I mean it more like I avoid 'em like the plague, correct. If I have to put a finalizer in a class, I'm like, I'm doing it wrong. So I try not to use 'em, but yeah, they come up, um, and that would usually require like a using context or something like that. But, uh, any kind of struck that you create those, those are also. Already implicitly scoped. So I think this is more for like the ref type stuff. You know, how they introduce those, like ref trucks in like that weird in between land where, um, yeah, there there's STRs, but there's a lot of rules. They can only be allocated on the, um, the stack, not the heap, you know, those kinds of rules. So I think this is yet more refinement of the terrible restructured system. [00:27:05] James: Yeah, that's crazy. I'm ex I'm excited to see this I'm I haven't really looked a lot of the C sharp 11 features yet. Have we? I don't think we did. [00:27:11] Frank: Did we? We, we, we tried to do a quick run through, but it's still going a little bit up and down, so we'll, we'll definitely have to do another episode when it gets more finalized. What are we up to in the previews [00:27:24] James: preview for view five, [00:27:26] Frank: five. Yeah, getting there, getting up in the numbers and that's usually like a November release if I remember correctly. So every November we'll have to do another. Yeah. , we'll have to do another episode for. [00:27:39] James: Yeah, definitely. I'm excited. Well, I mean, it's all happening. It's all happening. [00:27:44] Frank: um, what else do you now? I have one last topic, which is a follow up for a little discussion. You and I have, I don't think I quite made it to the show. So I have to give a tiny bit of context here. Um, I was asking you, James, do you think that iron Python works on iOS, like Z iOS? And I asked that question to you. And what was your response? No. Hashtag? No, I think your response was, I don't know. I [00:28:13] James: believe it was, I don't know, but in my soul, I was like, that's definitely not gonna work, but I'm not gonna tell you to not waste your time. Cuz I'm actually. Kind of curious [00:28:21] Frank: I was kind of curious too. Um, my use case in case you're interested. No, I don't. I'm not gonna write my iOS apps and Python. That's not what I'm trying to do. Uh, but I do have apps where it'd be nice to import Python code. And so it'd be nice to have access to iron Python. That's all. And if you don't know, iron Python is Python running on.net. It's a.net standard library, but there's all these limitations when running on iOS, James, the answer is yes. Yes, it works. it? Wasn't easy though. Um, and I have to admit it wouldn't work on old Samin, uh, thankfully. Oh, wow. What a few years ago, uh, they added an option to apps where you could support the interpret. And that was important for supporting Python, because what happens is Python uses the DLR, the dynamic language run time, and that puppy likes to generate code at run time. And apple hates it when you do that. So you have to run an interpreter and it was a new feature in mono to do that. So the trick, everyone, and this blew me away, you can create. iOS app import iron Python, uh, load up some code, execute that code. Uh, you just have to enable the interpreter and there, it was like a funny, extra little reference I had to add to like Microsoft dot C sharp or something like that. And then it worked, James, it worked. Can you believe it? [00:29:52] James: I, I have to, you need a sample on the GitHub that does something very, very simple because mm-hmm I, back in the day, I was trying to get iron Python working. What I wanted , what I wanted to do is I had an Azure function that was like, here's a bunch of source code on the internet and it was all Python. And what I wanted to do is I wanted to run that Python code. Inside of a C sharp Azure function. So I could just write C sharp to write into the Python instead of creating a Python Azure function. Do you know what? I ended up doing Frank? Oh God, gosh. I wrote a Python Azure function. Cause I couldn't figure it out. Um, yeah, because it was probably way too complex and you know, I needed to start with hello world from Python, like hello from Python, right? Yeah. that would be cool now. Now do we know that apple will allow the interpreter to be on? And I'm gonna say yes, because isn't continuous. It also has it on, right. [00:30:50] Frank: yes. And that's the answer there? Yeah. Uh, so the rules app Apple's rules are mystifying and complex, but a hashtag I'm not a lawyer. Do this at your own risk. If you get turned down at the app store, hashtag not Frank's fault, um, these are my warnings. . Now what I will say is in general, um, as long as you don't download code to execute, as long as you're shipping all the code that it will execute or the user can type in the code. Mm. Uh, You know, the, the trick happens where you're downloading code from the internet. That's where they get a little more upset and you have to talk them through it. But generally speaking, as long as you just execute code that ships with your app, , that's the important thing. Uh, the actual way they phrase it is it has to be testable at test. That's it. Yeah. You, you, and that's the more general rule of you can't hide features. And so downloading random code from the internet is hiding a feature. According to [00:31:47] James: I, I do get that question all the time from people, which is. How do I download DLLs from the internet? And then be like, Nope, not no, Nope. Don't Nope. Read your agreement. yeah. If you have an internal app that you're putting into your own app store, like an Intune store, something like that, [00:32:04] Frank: you can do whatever you want. Yeah. It's touring machines. It's just software people. You can literally do anything you want as long as you're out of the sandbox. yes, yes. But yeah. Um, but in the, and it's fine, uh, it is interpreted. But it it's fast. Everyone it's fast. These devices are so gosh, darn fast, like compared to, you know, ice circuit can run, interpreted just fine on these devices. It's a little bit of a joke, but, uh, so it's fine, especially for my little trick of, I'm mostly importing Python code to do analysis on it and that kind of thing. And I'll just be doing a. Controlled execution of it. So I'm excited. Um, I'm hoping to get a little bit of Python code and, um, ice circuit. And I have a little neural networks app. I have sometimes work on that I I'm excited to try to put this into. Yeah, [00:32:58] James: that's awesome. I definitely wanna see a small demo and I also wanna see a blog post and I think that'd be rad. Oh, yeah, [00:33:07] Frank: I, we should do video. I can totally do that. Yeah. We should do a video or I'll do a tweet, a tweet or something. I'll, I'll do something, everyone , but it is fun. And, you know, that's, I, I love.net because it is supposed, it's a multilanguage system and it's fun seeing all the languages kind of play together. Yeah, [00:33:25] James: that's so cool. Oh my goodness. We did it. We did it. We did four app. This is not even lightning topics. So this is just like, [00:33:32] Frank: I know here's where it's at weird. This is what we were thinking about 30 minutes before that episode. [00:33:38] James: oh my goodness. It is very true. I mean, this is, this is our life and if you want more of our life, you can become a Patreon subscriber. Remember thing. There's a page at Patreon. Dot com patreon.com slash merge conflict FM. Yep. That's it. You can go there and then you can, you can, um, become a patron. I mean, you know what you get, you get cool discord, uh, perks. You get a little thing on this as you're a discord. Remember? And then also you get a bonus podcast. Just about every single week. And this one's about spiders, which is terrifying, cuz we both spring and I hate spiders. So there's batter ones though. Okay. So we give you a sneak peak. We should just put out a bonus one, a sneaky, we did a WWDC update. That was cool. We did, uh, one on garbage disposals, [00:34:28] Frank: uh, important, important stuff here. [00:34:30] James: uh, we did one on, uh, manual labor. That we do outside at our houses and how we only [00:34:41] Frank: do that. Mostly James, [00:34:42] James: mostly James. Yeah, we did one on how nobody's listening to the bonus episodes. [00:34:47] Frank: That's just what we titled it. That's not what we talked about now. I totally forgot what we talked about. I gotta go back on. We do. [00:34:53] James: And they're all about just 10 minutes and that's it own RSS feed so you can get it right in your pocket. We do one on selling stuff. Oh, this is a good one. Donuts cameras, YouTube and analytics. That's pretty good. [00:35:04] Frank: That's a good, that was a great episode. I remember that one. Yeah, that was, that was when you were becoming photographer, [00:35:08] James: James people ask, what does that do for us? Well, one. It helps us pay our expenses for this podcast. We gotta pay fees every single month to put this podcast onto the internet. We used to buy a bunch of swag. We like to do that again too. And additionally, we make all these podcasts in our spare time because we love all of you and we love doing it. And, um, you know, it helps us say that you like the podcast. So it's a little bonus there. And, uh, Frank, you know, he doesn't, uh, have a, a full time. Salary job. [00:35:41] Frank: And we got thing. I know I'm an unemployed. Thanks. [00:35:46] James: he's uh, he's, you know, employed by, he doesn't have a [00:35:49] Frank: Joby job. I believe they're called Joby jobs. [00:35:52] James: We didn't have a job job, but other people ask, well, how does it work? Right. Well, all the money goes to me. and then, um, my boss, my boss, and then, and this is how it works. I, I, we did a whole podcast thing how this works. So the money comes into my LL. Right. And then, um, this is actually a per well, it doesn't matter cuz Frank is gonna get tax on this regardless. So, and then I say, Hey Frank, this is how much we made $10. And then I say, Frank, I had to, I had to pay $2 so we can split $8. And Frank gets four of those dollars. He gets a 50% cuz Frank is 50% of this podcast. Even though I edit and publish and produce all of them. You really, that [00:36:34] Frank: don't that negotiation. That was, uh, you really . I remember when you first pitched that, I was like, huh, I'm getting the better deal here. [00:36:43] James: but I do force Frank to, you know, Report record podcast from Mongolia, for example. So I think it all worked out at the end of the day. [00:36:52] Frank: I love doing those shades. Those, those Patreon episodes are just fun, honestly. Um, in the beginning we were sporadic, but we've been, we've been pretty good about getting those out every week. [00:37:02] James: Keeping it on. You don't have to do any of that. You can just listen to this normal podcast. You can give us a review on to apple podcast. You can tweet it out to the people, be like, wow, this is a great episode. Should listen to that. And that totally helps us. And that's actually all we really need in general, because I do have a full-time job in Frank. Actually it does have a full-time job and, and we do okay. But we, you know, it helps us out. It makes us think that people want more of this, you know, [00:37:25] Frank: in general, inside baseball. Let's not bring feelings into it. It's purely professional. [00:37:31] James: It's 100% feeling based, but I was gonna do for this week's merge complex, I think until next time I'm James [00:37:37] Frank: Magno and I'm Kruger. Thanks for listening.