mergeconflict288 === [00:00:00] James: All right, Frank. So this week is a little bit of a followup on our holiday hack episode. I think you have a little bit of an update, but I also have an update and it kind of comes back into the feedback support. How do you address. No user feedback appropriately. Um, and I have a really interesting one that I want to get into. Uh, but I think first I want to talk about your 3d hologram of madness of magicalness and how it went and the grand unveiling. [00:00:42] Frank: Oh, yes. So it was a grand an unveiling too, because it actually survived the trip. I had to mail it through the U S postal system, which no guarantees everyone. Okay. Guarantees. So I, uh, I wrapped it up very carefully. Um, I just want to say it was a very friendly. Design. And so I'm just congratulating myself. It actually survived. So yes, it was assembled and yes, it works. James. It actually worked, it didn't fall apart. The screen turned on Android did its job. My software didn't crash. There was of course bugs and usability features that I got requests immediately from it. And, uh, it wasn't perfect. Um, I was actually. Talk to you earlier about it. And I mentioned the Android status bar kept showing up and it was ruining my hologram. You can't have an Android status bar in your hologram. It just doesn't look good. So aside from that, a whole bunch of people saw it and, uh, I think they [00:01:45] James: enjoyed it. Nice. That's awesome. Uh, any mass redesigns besides, uh, obviously of the app who we're trying to get rid of the status bar somehow, but any other, any other conundrums that have. [00:01:57] Frank: Well immediately, of course, people just want it more shapes. Right. So, um, I, I think like actually my consider putting it into the app store, but you have to have a way to, you know, download 3d objects and there are 3d object stores out there, you know, like there's thing of first Google has one, I think Microsoft has one where people can just upload shapes and things like that. So I think, um, It to make it fully to have it useful as more than just a little trinket is to, uh, build a proper app. Perhaps my problem is I can't imagine people wanting to pay too much for this kind of app. So I think I would definitely have to go the free route and then figure out a way to monetize after that. [00:02:49] James: Yeah. Because once you go the free route, then you run into all sorts of fun issues like I'm running into, which is supporting. [00:02:56] Frank: Yeah, but you know, it's a simple enough app and I can offer a few settings. The hardest part is, um, there's a billion 3d file formats out there. And one of the first problems with the thing was a few dinosaurs load a little bit slowly because they have way too many triangles and they're in a really terrible file format that I'm just, you know, parsing a million strings to create the 3d geometry. Which is an absolutely ridiculous way to do it. Don't ever do that, but I was short on time. So my Hologram's a little bit slow in loading objects once they're loaded. They're great. Everything's fine. Um, but a little bit slow there, and that broke my heart because I liked to write fast code, but to get to that. [00:03:41] James: I do think that there isn't a market for this somewhere out there. I feel like it, it looks like a Kickstarter project and, uh, I hope that you continue with it. Cause you wrote all the code, you did all the things. Uh I'm I'm I'm curious if there's a kit of some sorts that needs to be put together, like, oh, buy this thing. And it's all things in one that's delivered. It seems like that would be a big price tag up top. But you know, people are paying a lot of money for those. Cubes that you can hologram like, uh, things into and play stuff on. But I feel like there's, there's a market of people that I think would, you know, streamers, right. They have like a cool thing. Their thing in the background that's spinning or whatever their logo or they, you know, it'd be really cool as to hook it up to like a number. Like I, you know, we made that little thing to show how many YouTube subscribers I have, although you never send it to me. So I don't know if it, if it actually works or not, or if it was. But imagine if that was a 3d hologram thing sitting behind me that was like updating and doing like a 3d number or something. Like, I. [00:04:44] Frank: You are doing great at PM-ing. This is great. I didn't even think of that feature. Of course you want live updates? I wasn't even thinking I was thinking about animation. Like you want to animate the dinosaurs, but yeah. Uh, well I did think of a clock, but that's, as far as I got numbers, that's a good idea should make it so it can do web services and things like that. [00:05:04] James: That would be neat. Like almost like an, if this, then that way. You know, if it was hooked into something, I could imagine it, especially something like a starry, a star system or the things like, Ooh, this would be cool. Imagine if you could put out, this is ridiculous, you know, the GPS of the device and you do some search, which is, you know, what, um, star, uh, what are the things called when the stars are in the thing? The [00:05:32] Frank: pattern. the constellation constellation. [00:05:37] James: Imagine you you're like, oh, here's the constellation. And it's the constellation above you. And it shows it to you or even. Imagine you show and throughout the different times of day, like, um, different weather stuff, but also you could do like the moon tonight, right? Imagine it's like, as it's progressing, it's like, is it a waning moon, a waxing Gibeah whatever is a new moon. And that shows up and you have these pre things and then it gets a little bit later and then it shows you the constellation. And really, I feel like I'm in a planetarium with the stars tonight playing. [00:06:07] Frank: I love it. I love doing planet stuff. Like. It's the best. I I'm always bad at it. The math, the math for the stars are terrible, but I even have a file on my computer that has the 3d coordinates of every star or, you know, like whatever, the first hundred thousand or 500,000 visible stars or brightest stars in the sky. So that's actually pretty easy for me to do if I can get the math right. And all that kind of thing. Uh, it's going back to the hardware for a minute. I actually have a few options there. Like within the app, I could give you access to the 3d file if you want to 3d print it. So then someone could just make it themselves if they want to go that route. Uh, but also the way I got started on this is there are little, uh, little. Pyramids that you put on like your phone to do the same kind of effect. And so I can write the app to work well with those little pyramid things, and you can just get those at stores. You can get it at Amazon. And so there's a little bit of at least some existing hardware out there. That's actually really cheap, you know, five or 10 bucks. Uh, so you could use the effect with that [00:07:20] James: yet. You know, a realistic thing that is possible. Near these 3d models, you could load them off of a directory on the Android device. This is something magical about Android. As you, you you're mostly speaking to your internal storage. However you can. If you granted permission, you can speak to the external storage. T a F a folder browser and browse the file system and read from a directory to populate that. So I imagine a system in which again, my PM had is definitely on it's like I just finished work and. You're you're enabling people to put their 3d models into a bucket. You read us stuff from the bucket, but you saw them this kid and they, they installed the app and they pay X to get access to these different things. And maybe that is the, the unlock feature. Like, Hey, here's the free version. We get this stuff built in. And there's different things that you could get like X, Y, Z, or you could unlock the stars tonight, or you can unlock these other things. You can get these things for free, but then the upgrade is like, Hey, if you want to tweak and hack this, like, Hey, here. Gimme a folder and I will read the files on this folder and go to. [00:08:29] Frank: Yeah, that's fun. Yeah. That's the trickiest part is I can't really just throw content into it because it's most good 3d data out there is licensed. And you don't have a license to redistribute usually. Um, there probably is some public domain 3d content out there. I should look into that obviously, but, uh, yeah, I liked the idea of more computer generated scenes. You remember my little game space? Yeah, I remember Spacey. Yeah, I miss it. Yeah. I went insane with the, um, procedurally generated graphics with that. I had procedurally generated planet space stations, obstacle courses, and Emmys backstories, solar systems, uh, gateways between them, you know, that kind of an economy. Uh, there was an economy there. And so, um, I would love to put that into a whole. [00:09:26] James: You should put it on the phone, always be an apple watch app, write exclusively, but why don't just put [00:09:30] Frank: it on the, put it on. It is on the phone. What I, Hmm. Thanks James. I've totally forgotten. Now I have to check on it. Um, the problem is I took it off the app store because of some bug or something, but I should, uh, get, uh, get a version two going, yeah, some feedback. I've gotten [00:09:49] James: it on the phone. Just give me [00:09:50] Frank: the thing on the phone and want to play the game. Business is terrible. No one wants to be in the game. No, I don't want to be, [00:09:57] James: although I did play the new halo all the way through this holiday and it was fantastical, but let's get back to holiday hacking. Now that we got an update from you. Now, this is I'm going to go deep on some code and some best recommendations here, because I have worked on this snow park app a little bit, and I did a little bit of updates. I didn't do too much, but you know, the first week of my holiday was doing something. Yeah, [00:10:18] Frank: I'm excited for this. I know some news and I want you to tell everyone the news, because I don't want to ruin the news. So, James, was there any news about your app? [00:10:27] James: I did make the local news. Uh, I will say we were going out of town, uh, to a nearby town, just like for an overnight trip. And, uh, the news person actually wanted to talk to me. Uh, and interview voice, but I was out by the time I got back to them the next day, they already wrote the piece, uh, on the, on the website [00:10:47] Frank: or whatever, which is yeah, I'll throw was not available for comment. Ah, your, your, your one chance to start off. I'm just kidding. You're already a star James. Uh that's. I think it's exciting. I like it. When technology gets recognized by kind of old me. Yeah, it was in the eighties. Medium still means something to me. [00:11:05] James: It was so cool. My neighbors texted me and they're like, congratulations. I was like, oh my goodness. I'm like, what happened? Cause I didn't know about, and then they, they totally did it. Um, um, so that was, that was really neat. And I was like, okay, now I actually, now I actually have to do work and make sure that this thing's good. And I submitted an app update the day before Christmas. And I was really surprised because this year apple was open over the holidays. [00:11:31] Frank: I, I didn't even know, like I was pushing myself to finish an update, which by the way, I didn't finish. So congratulations to me. Um, I was pushing myself to finish it though, because of my call. The store always closes by the 20th and, uh, it just, the, and they usually put that banner up in the banner, never showed up what a weird gear did they explain that, that I missed an email. [00:11:51] James: Oh, they put up a different banner that said that they would be open, but things might be a little delayed. [00:11:57] Frank: Oh, yeah. Well, isn't that interesting? Okay. Um, I want to say good, but it never really was that bad, but everyone gets a little break in the winter, but okay. That's, that's nice. The world economy must move, I guess. [00:12:13] James: And that being said very minimal app updates on my phone over the last two weeks, which means. I guess what companies are also off. So it's only people like me that are submitting updates over the time. So I spent some time in the app and got some feedback based on, you know, um, also using the app in the wild and, and one thing that I spent a lot of time on was literally, but if that's true, but I'm pump, um, so. There's two things I did. One is that I worked with the organizer to re to, to, to get access to the weather data. So I didn't have to do the HTML agility pack, which was fun. And it worked, but all, [00:12:53] Frank: but I love [00:12:53] James: that part, but it's funny. Cause then I asked him, I was like, Hey, do you, do you also have this weather data just on your server cash? And he's like, oh yeah, I forgot to send it to you. So he already had the Jason feeds. So I didn't even have to do anything at all, which, which then enabled me to do Metro. Um, and Imperial units, because I now have the raw data, which oh, was [00:13:15] Frank: parsing. I see you weren't parsing the numbers. You were just literally blasting off a string and you just had strings everywhere. Correct? [00:13:23] James: Yet. And then this guy, this got me into a conundrum because. Uh, I learned a lot about the metric system. Uh, [00:13:34] Frank: th th this episode just take a wild right turn. Okay. [00:13:38] James: Um, a little bit, so, so, so things are pretty straightforward, right? If you think about what I'm displaying in there, I have. Temperature right. Which is going to be Celsius or Fahrenheit. That that's super easy. That's the majority of things, but here, [00:13:54] Frank: sorry, just rewind real quick. Okay. Okay. So this is a hyper-local app. It only applies to one very small area around you so much so that you got written up in the local newspaper. Yes. That area happens to be in America, which uses Imperial units. So just out of curiosity, why are you supporting metric? [00:14:15] James: You know, I just want to be inclusive of our Canadian friends that may [00:14:21] Frank: come their fault, blame it on Canada [00:14:24] James: or any other tourist in the area, or, you know what people that may be moved to the Pacific Northwest, that [00:14:31] Frank: provider I'm being short-sighted I'm sorry. I, I revoked. [00:14:36] James: Yeah. Good. Good [00:14:39] Frank: for you to tell me how you added metric now, dear, um, Erica now, [00:14:43] James: so I did add metrics and here's the fun part about it is that Xamarin essentials and dynamo essentials have unit converters built in. So they have a Celsius to Fahrenheit and Fahrenheit to Celsius built-in, which is awesome. Right? Yeah. Here's the weird part is wind speeds. Frank. [00:15:02] Frank: Okay. So is that usually a knots? Are we all sailors when it comes to wind speed? I would, I would do it in knots. So do you do kilometers per hour? Do you do okay. You do miles per hour. And Imperial, what else do you do? [00:15:18] James: So in Imperial, you are 100% correct? I did miles per hours because I just like opened up my boat. That's what I normally am like, I am right. And that's what he, the other present does the website had on the website, which was miles per hour. So that's what I was displaying before. So I was like, okay, that makes sense. It's returned to me in meters. [00:15:40] Frank: Ooh. Yeah, you need a Kalka to help you out. [00:15:44] James: So I asked like most people do Twitter, um, and I asked her, I said, hello, my metric, my metric using friends for wind speed. Is it meters per second or is it kilometers per hour? And for. That led to so much discussion. [00:16:03] Frank: God, God never give people a choice like this. Oh no. Look at this knots for maritime off shore. Very good drew. Yep. I'm with you for knots, but uh, oh gosh. A lot of people want knots. This is great, but there are the meters per second, uh, contingent. They exist. You didn't do a poll. It's pretty random. Did you do a distribution? Because it looks pretty random people. [00:16:31] James: Yes, we got, um, we, we got, well then some people are like, it's cultural specific where if you're in, um, certain areas and they want kilometers per hour, but on the TV they use like, Oh, my [00:16:47] Frank: gosh. It's totally random. Everyone voted for everything. [00:16:50] James: Yeah. I'll and a lot of people said they what's his, uh, Bo mom, [00:16:55] Frank: you just have to do a drop down. [00:16:58] James: Yeah. It's all over the place [00:17:01] Frank: it's required. It's the only way to make people book at this point, [00:17:04] James: both for it. And that's what it is. What does the bow for? Yeah. I had to look that it was like some other unit, I think. I don't know, but then it's all over the place. So the Clifford like knots, unless you're Russia or China, then it's meters per second. But then of course, if you're in like some parts of Canada, then it's kilometers per hour, or maybe in Europe or New Zealand is kilometers per hour. And then, um, it's all over the place. It's all over the place. That is what I said. Okay. JB solved it. The JV. Ding, ding, ding. Um, [00:17:35] Frank: hello, JB. [00:17:36] James: JB did the smart thing, which is he opened up apple weather and ah, and he says, it says kilometers per hour. [00:17:45] Frank: Okay, what apple does we show all obey. So it's Larry who came up with about Fort scale. I still have no idea what that is. And I do love all the trolling that also occurred for a long's per fortnight, uh, internet. You keep being you internet [00:18:05] James: keep being you internet. Yes. Uh, there was, I'm trying to find the screen and if I can find it. There was somebody that they love, of course, link to the Wikipedia page for international units. But then someone also linked me to like their weather application and the amount of toggles that, that they, oh, here it is from Dennis, I believe is how you pronounce their name. I just sent it to you. Um, this is from winter. Um, which is apparently a wind app, uh, the amount of conversions and customizations that are allowed. So in just the wind category, there are Katie, which I'm assuming is knots BFT is the bowl it or whatever, meters per second kilometers per hour, and then miles. [00:18:59] Frank: Okay, can I tell you I hate the Beaufort scale. I just had to look it up because my God, I just had to look it up. It is people a scale from zero and I like that start with zero. That's good. That's good. Programmer thinking. That goes up to 12, which means there's 13 categories, which is a prime number. It makes absolutely you can't divide it in half. You can't divide it in quarters. You know, I could scale goes, you know, one to 10, zero to nine, zero to 99. You know, this is, this is ridiculous. I don't like the boat for one scale. Sorry. I don't approve. [00:19:38] James: So I did what apple does and I just use kilometers per hour. Now that's not to say that apple does different things in different regions, um, out there, but based on what I saw in the apple weather application, which by the way I got, I got Heather and iPad mini, the iPad does not have a weather app. It does have a weather widget, which is the same way. That is on my iPhone, but does not have a weather app. And when you tap on the weather, it opens weather.com. Frank, what the hell? [00:20:12] Frank: Uh, tell me about it, a missing calculator app. I believe also on the iPad, it makes absolutely no sense. Obviously there are wonderful, uh, indie dev apps out there for all of these things. Those are wonderful categories to go play with. I recommend buying like 20 of each. In fact, I find it really funny. Um, my parents each had like five or six different weather apps on their iPads, but, uh, I don't know. I don't. That is a weird apple thing. That, that is some weird internal politic thing happening. Oh no, [00:20:44] James: I don't get it anyways. Apple, fix it. Get it done because weather app is awesome. Okay. So I solved that. So, so we have it kilometers per hour. That's the defacto. That's what I'm going with. You're not going [00:20:55] Frank: to give these five options. I like the five options. No, I just, I [00:21:00] James: know here's what I said is I can always change it in the future. Right. If I just have an Imperial or metric. Toggle. I could then go, go, go crazy. If I get feedback right, then I'll do it. People like, oh, that's not my metric [00:21:15] Frank: Canadians that come through. And the one German family, that's not [00:21:19] James: my metric. So I mean, so that's what I did. I'm very happy about that. So I also updated that. I also updated my caching mechanism. I'm very happy about this rank. What I, what I have is I have monkey cash, which cash is the data. And if you're offline, then I show you the cash data or whatever was last displayed. I realized though that, can [00:21:41] Frank: I, sorry, quick injection. Does that cash ever expire or are you just have, it adds a infinite cap? [00:21:48] James: Uh, I mean it, it's an, there is an internal exploration. So for example, Oh, close the app. You open the app, you get the data, you close the app and one minute later you open it again. It will it'll show the cash data. [00:22:04] Frank: Oh, I just meant for when you're offline. How long will the offline version last [00:22:09] James: forever. Good, good. Just checking forever. Now. Here's the other thing checking on you, buddy. Forever. There is an internal exploration, but I ignore it. If you're offline and you say, give me the cash date. If yeah. Gotcha. [00:22:21] Frank: Is that built into monkey cash or you had. [00:22:24] James: That was built in. Yeah. Uh, it's very, it's very simple. In fact, the monkey cash logic is very simple. It says, um, uh, the first F is if your network access is, does not equal internet, then give me the cash. And then, um, if, if you don't want to force Refash and it hasn't expired, then go gave me the cash. Um, because sometimes you may be within the. Like five minute or 10 minute or 15 minute interval. But if you pull the refresh, that's a force refresh. You want to go get new data very important. So I have something on that and I want to ask if I did this right or not, but, but I'll go back to the caching. So one thing I did is I realized. If an exception occurred, let's say that you had a timeout because you're in really, really low bandwidth because you know, you're skiing in the middle of a mountain and you have, you have internet access, um, like [00:23:23] Frank: the internet. [00:23:24] James: Yeah. I believe it's called the flaky internet. That would return a blank page. And that would be no good. So I implemented a system that if you do have internet, but an exception occurs, it will still then go and get the cash date. And return that, but then do a pop-up to say, Hey, we had some issue. We're just returning you the cash data. Perfect. Yup. [00:23:49] Frank: Yup. I won't even bother with the pop-up. I don't know, like, do you just have a online or offline indicator, but for the sappy probably don't bother with that. So it doesn't matter. Yeah, the pop-up fine. [00:24:01] James: That, that was my thought. So it did that, that was, that was optimization one, but then I realized. That my foot, and this might be a problem in every single app I've ever created is HTTP client. [00:24:14] Frank: Oh gosh. I know. Do any of us know what to do with HEB con? I turn off every feature. That's what I do. So what was your [00:24:21] James: issue in V1? My code says. HTTP client equals new act. [00:24:30] Frank: They hate it when you do that. So the first advice that you always get from people is stop knowing up HDP clients. You're supposed to share that class and. It was meant for like the, um, inversion of control kind of thing, or injection injection, what am I saying? You know, that stuff. And so, yeah, you're supposed to just have a global one around that you, uh, you make requests with, it's a little different though, because. You can configure it with like the chains of this handler than this handler than this handler. They can modify things. So you'd have different versions of that for those different scenarios. But I think most apps can get away with just one. [00:25:08] James: So I do have one, um, there, so that I used to, you know, when I recruited the first app, I have this like static constructor, this service, you know, whatever that has a read, only HTTP client. I knew it up and I do actually believe Miguel. Told me once and tweeted publicly that at least on iOS and Android, it doesn't matter if you're just doing new HTTP client, the generic one, because I do believe the mano runtime under the hood. If you just request a HTTP client without any parameters or anything special on it, it will return you the same HTTP. [00:25:48] Frank: Oh, that's interesting. Um, certainly it's all implementation dependent so they can share, uh, some kind of resource, because I know like, and iOS, you always have the option of a fully managed HDP stack, or you can use the NSRL based HDP stack. That's built into apple, apple products. And I, I actually always go for the NSRL one, um, just because I like the idea of using as much native stuff as possible, but, um, you always have that option. And so I'm sure the front level public API is really just a facade over a more sophisticated resource sharing. So. [00:26:31] James: Yeah, because HTTP client, right. It's going to build this abstraction on top of the Android and the iOS one, which are now the default, like the default Android and iOS one. Those are the default when you create a new project anyways, because of TLS and all that stuff. Um, uh, It still does, has like caching and timeouts and it has a whole bunch of other stuff built into it. Right. It's doing so the first thing is I added a timeout about that would be smart. [00:26:58] Frank: Yeah. The default TCP timeout is pretty long. If memory serves. 20 seconds I think is the default timeout. So I usually knock it down to around five seconds. You got to do your own tests, but, um, I usually find if it takes longer than five seconds, it's usually better to just abort [00:27:16] James: and try again. Later. I thought, I thought the default was like several minutes. [00:27:20] Frank: I think it might be like, it's ridiculous, whatever the default it's huge. It's way bigger than you think. Yeah. Yeah, [00:27:26] James: I think it's minutes. Um, but I could be wrong. So I did it as [00:27:29] Frank: possible. I, and I just don't believe it because it's been, yeah. So I always said it. I always said it [00:27:36] James: as I sat that. So I was like, that's a good one. And then I realized I have this pulled the refresh in the application and I'm calling the same URL, which okay. I assume HTTP client will be like, Hey, I already got this date. Rick returned the data. [00:27:58] Frank: No, I, I think caching is off by default. It's not going to do that. It's going to do a proper request. Anytime you tell it to do a request, it's going to do a full request. It doesn't do caching by default. Is it. So all this can be configured. For example, if you're going through an S URL there, you can create like, um, cookie sessions and things like that, things that get persisted and part of that is the caching layer. So you can turn on the caching layer through the like NSRL mechanism, sorry. I'm totally blanking on the.net way to do it. Um, so you could like turn on that system and that would in fact be doing, um, at least. He tag, uh, cashing cause with HDP, there's so many levels of caching, right? So there's proxy level caching. There's the server level caching. The cache server can say, I'm an ear tag caching system, or I'm an expiry date, a caching system. And then the proxies have their say in that. And then the phone has its say in that. So you can configure all of those wonderful options. [00:29:07] James: Yeah. And I say, I'm not sure because there is. Usually a cash control and the tech system and things like that that have changed. And I wasn't sure cause I've read online that, that the HTTP client uses a cache, that to store responses that come up with without the cash control header. Like if you don't have a cash control header, it's just like cool cash it. [00:29:30] Frank: Hmm. Hmm. Is that on by default? I don't know. So good way to check on all of this stuff is I highly recommend if you're, if you're writing, um, an app is to have a reverse proxy. So something like Wireshark or on Mac, I like an app called Charles proxy. And if you're really curious and make sure you're actually hitting servers, I recommend going through one of those. So you can see the exact HDP traffic that you're sending. [00:29:58] James: Yeah. Now I could be. 100% completely wrong. And please somebody write hope you are [00:30:05] Frank: to be thoroughly honest. I hope you are because the caching should not be on by. It's usually it should be handled at the app layer, I think, but that might be who knows. [00:30:15] James: That's what I think. So, so there was a few ways with, to do so, so then I said, okay, well I'm not a hundred percent sure. And I can't really find a good data source on this. And please someone please with this, right in, let me know. I couldn't find a hundred percent definitive yes or no to this answer. So there was two recommendations that people had for me, Frank first. Was a pen, a timestamp on every HTTP. [00:30:41] Frank: Oh, as like a query parameter [00:30:43] James: as a query parameter, because it's a unique, I'm just remember, I'm just querying a text file on a system, right? I'm not, it's not a, it's not a, it's not about API with the tags or anything like that. It is a. [00:30:55] Frank: Yeah, but now we're playing the two levels of guessing games. A guessing game level of one was, is caching on or not. Now we're assuming if cachings on, does the cache care about query parameters? Because guess what? Not all of them do now. So like, I just love like how deep this rabbit hole of guessing games is going to go before anyone just gets a proper tool out. And [00:31:19] James: it's true. Uh, so I was like, I could do that. Th it doesn't feel right. Like, it just doesn't feel right to me in general. I said that can't be right. Here's what I actually did is I went in. Go ahead. [00:31:33] Frank: I'll interject. I, I do think that there is a caching, a header that a client consent to the server and say specifically, I want a fresh copy. Of this resource, of course, it's up to the server and everything to obey it, but it should be able to make its way through say a proxy. That's why I was mentioning proxies before, because proxies were nasty in the past where you could never tell if you're getting a cached copy or not. And so there are HDP header, directives to say, cut through all the BS, please. I want a fresh copy of [00:32:07] James: this resource. And funnily enough, that is literally what I did. So there is a. I, [00:32:12] Frank: I beat you to it. [00:32:13] James: Yeah. I'm so proud. So, so this is what I found on the stack Overflow's, which is client. So your HTTP client, that default requests, adders.cash control, and you set that equal to a new cache control header value where no cash is equal to true [00:32:28] Frank: no cash. Yeah. It's called no cash. No, I thought there was a way to say fresher it yet. No cash, no cash, no cash. I love it now. [00:32:38] James: No, no cash. That's awesome. No, [00:32:41] Frank: no, no, no. Okay. So sounds good. I'm still to, to be proving to yourself completely. I still think you should use it. I probably get a, get a reverse proxy up. Uh, Fiddler, Fiddler, I think is no Fiddler wouldn't work with mobile. Mobile's tricky because you're not attached to a computer and you have SSL certificates and all that. So what happens with a good, uh, reverse proxy as you, they sign all those little dev kind of certs to [00:33:09] James: make it work. Yeah. So here's a funny thing is then a few days ago I got an email. From Kathy. Very nice, very nice person. She wrote in, I can't get the app to update the reports or the forecast or the road cams. And it's days out of date. She's like, this is what she said. She said, this is why the, the app should pull recent info. Every time I access it or have a refresh reload swiping down, looks like it should be doing this, but, but does not do so reliable. So how I tested this as I opened my app and it just opened it in the morning and the weather updates every 10 minutes. So I just sat there and every 10 to 15 minutes I pulled the refresh and the weather updated all the images updated. So I don't, I don't know if she just didn't pull the refresh hard enough. She said her husband also on his five-year-old iPhone also had this issue, but I'm like, I can't reproduce. And then she's like, you should add a button in the app that makes you do edit. I'm like the pull, the refresh and work. And I've been texting it all day and I'd have it open overnight and all this other stuff. And I had her, I had her force close it and reopen it and then I'd pull fresh data obviously. But I'm like, I don't know. I don't know if there's something wrong, Frank. Cause it works on my. [00:34:40] Frank: H have you tried like switching networks, turning your wifi fees on and off? Like, I feel like this is a case where an exception is getting swallowed somewhere where you should be resetting something hard to say exactly. But I do think for an app like this, maybe you want to at the very top show last updated 10 seconds ago, last updated four seconds ago. And then if you tap that, then it does a hard refresh again. [00:35:06] James: Yeah, that's true. I can't do that. [00:35:09] Frank: Danielle, no. Your online, offline status and all that. Yeah. [00:35:14] James: I'm just not sure, Frank that's my, [00:35:17] Frank: I would say, yeah, these are the worst bugs to track down. Um, cause you, you can't tell exactly what she was doing. Even if you had a million log statements and the app, you probably won't even catch this [00:35:31] James: bug. Yeah. And I don't even know if it is bug because it totally works. [00:35:36] Frank: On your phone. Yeah, I I'm home. I've met so many users of high circuit. I just believe anything is possible. I'm like, yeah, yeah, it works in the 99% case, but that still means, you know, one out of 100 people is going to run into [00:35:51] James: that's true. I'm going to ask Heather to, she has the app. I'm going to have her do it and do this. And I mean, I could add a button I'm not against adding a refresh button on. [00:36:00] Frank: It don't think of it as a button. Think of it as a state, a syndicator like yellow and green for online, offline. There'll be nice. People appreciate people. Appreciate given an element of control, [00:36:13] James: but isn't the pool to refresh the element of control for sure. [00:36:18] Frank: I don't know. I don't know why that's not working. [00:36:20] James: That's my dilemma from logs. That's my dilemma is I, as I thought that pulled the refresh is like the defacto. [00:36:28] Frank: It is, it is. Like Twitter, doesn't have a button. Facebook doesn't have a button. No, I wish photos had a button. That's one where I'm like, is it refreshing or not? I, I, I get where someone's coming from. Buttons. Buttons are discreet. You can tell if you press them or not. Yeah. Maybe, maybe they think, because pull the refreshes a fancy animation. They think that it's fancy logic. We all know that's not true in the end. It's just doing a button click event. So yeah. Could it have been a UI refresh issue, any chance out of that? [00:37:11] James: I dunno. That's a good question. That's what I'm really I'm I'm honestly puzzled. Uh, I guess the only way I would know is that if I, if I did do a. You know, a status indicator of like when it was last refreshed, the data display that in the app. And then we [00:37:29] Frank: do the pull to refresh where it does a spinner while it's refreshing, and then it goes away when it's done. Yeah. Except [00:37:36] James: for it's really [00:37:37] Frank: fast. Yeah, that's how you should put an artificial one and it makes people feel better. Just, just put an artificial hundred milliseconds in there it's fast, but it makes you feel like it's not even that two 50 more. [00:37:49] James: Yeah, I could do when you pull the refresh and then do a pop-up that says refreshed. No, no, no, no, [00:37:56] Frank: no. I hate alerts. I hate popups. Oh my gosh. I'm using vs code and it puts a million pop-ups for every time you touch the keyboard, that's [00:38:05] James: the thing that Andrew got. Right. Which is toast. I feel as though toast, they got it. Right. Which means that you can do the. Nonsensical things and it's okay to do really short-term toast or whatever. And I, and I could have put in like a debug toggle, like debug and like, it does toast alerts when things happen or whatever, you know what I mean? But iOS, there are packages that you do toast, but it's very. [00:38:31] Frank: Yeah. [00:38:33] James: Yeah. Yeah. I think I'll do the thing that you said input in the artificial delay of at least, you know, half a second. So it's like doing something and then I will, um, maybe I'll do something. I don't know what I'm going to do yet. Maybe I'll at least put the time updated or whatever. [00:38:51] Frank: Do you have a place in the UI for, yeah. You had some tool parts or something. [00:38:55] James: I can put it up there. I can put it in the, I could put it in the header or the footer of the list. [00:39:03] Frank: The footer. I would try to keep it always on screen footer. If it's always on screen would be nice. Yeah. [00:39:09] James: Or I have a bunch of room on the info, the info, the settings page, change it to settings by the way. Instead of more [00:39:17] Frank: that's the classic Trek. Hide all your sins under the setting screen. Sure. [00:39:22] James: Under oh last updated data at times. That's what I'll do. I think that'd be better because I don't have to change the UI at all. On those other pages [00:39:29] Frank: and go from that makes it better. Or does that make it easier, easier? [00:39:34] James: This is an app that I'm building for free in my spare time, Frank, with no monetization [00:39:39] Frank: and a couple of Canadians rely on this app, James, anyways, [00:39:44] James: that is my app update. I want to also know if anyone's ran into crazy HTTP things, maybe different versions of iOS and Android, maybe. Also just other things going on, uh, if, how you would address something like this, you know, sometimes I love to hear feedback from, I always love to hear feedback from our listeners, but sometimes I really want to hear feedback from our listeners. Like, what am I doing wrong in life? [00:40:07] Frank: Ah, no, this one's important. You know, we could probably just read the docs to probably, probably you tried. [00:40:16] James: I'm sure you tried. All right. Well, that's going to do it for this week's merge conflict. Welcome to 2022. This is the first time we're recording in 2022. Very excited for this year ahead of us, we do have episode 290 upcoming, which means that as a lightening topic, where you can submit your own topics. So please had to merge conflict out of send us an email. We have a bunch of emails lined up by the way that had happened in the last few weeks. So very excited about those. You can hop on our discord or Twitter. At merge conflict FM. So I was gonna do it for this week. So I was the next time I'm James mag now. [00:40:45] Frank: And I'm Frank Krueger. Thanks for listening. [00:40:47] James: Peace.