mergeconflict286 === [00:00:00] James: Frank, we made it through another year. Can you believe it? [00:00:12] Frank: Don't jinx? It we're actually recording before the new year. Everyone w we haven't made it out yet. James 20, 21 could come a hunting for us. [00:00:22] James: We are, we're recording this even pre uh, Christmas, uh, as well, but as the last podcast, Of 2021 that we will actually will record another one from 4 [00:00:32] Frank: 21, 20 21 forever. But for [00:00:36] James: all of you listeners, you made it with us through 2021. And I just want to say, thank you. [00:00:43] Frank: Thank you. Yeah, that you've all been wonderful. We wouldn't be here without [00:00:47] James: you. It's very true. We would not, we would not do this if nobody listened, but you all listen and you're right in, you hop on our discord and you tweeted us. You dealt with things, you share it with your. I super appreciate it. And this time of year, this is a time of year that we do some holiday hacking Frank. [00:01:04] Frank: Ooh, is that that time? Okay. I I'm excited because this year I actually did a holiday hack last year. I don't even remember what I said, but I definitely, it was 20, 20, every one. I have to go back to the historical records to find out what I said, but I'm pretty sure I didn't have a good one last year. So I'm excited. I think I did a decent one this year, so I'm excited to talk about it. Are you excited? Did you do a holiday? Heck [00:01:27] James: yeah, I shipped. I literally built and shipped my holiday hack live to of the people even before my, the first weekend of my holiday. Cause I came off basically the 15th, 16th and 17th. That's always sorta like half workdays type of things, kind of easing into the holidays and then took the two weeks off here. So I'm pretty much we're in, I mean, holiday. But I buy the weekend, the 18th, 19th, I was done. My hack was complete and I told Heather that it was done and that it was approved the app store approval, complete live. Wow. And. She's like, that's really fast. And I go, that is really fast, not just the approval, but the thing that I made. So I'm also very excited about it. And I'll tell you why and how it happened so fast. [00:02:24] Frank: You beat me. My, I also wrote an app for mine, um, but I did not get it approved. Uh, I didn't know. I haven't done the metadata. I didn't draw an icon. Uh, I probably don't have the license to a million things that are included in it. I have to do a bit of work before mine is worthy of the public. But I had, so I just clap, clap, good job, James, for getting something actually on an app store for a holiday hack. Very true. And, [00:02:53] James: and I'll tell you this much, the Google play took longer to approve than iOS. And, and I think that I I'm now I'm now a hundred percent convinced. I think this happened last year with my cadence is I'm a hundred percent convinced that Google play has somehow it became like the worst mess of an app store for developers to. Try to figure out what to do. It's so complicated and I knew, right. And if I'm wrong, it's it's so there's like so many buttons in this. Like how do I do this thing in that thing? And the apple ones. Aren't good. None of them are good, but like the apple one hasn't changed ever. I think that's the thing, like the Google and they keep adding like 5 billion things. I'm like, how do I even, how do we get this thing here? How do I just like, I just want to test it. Like, how do I know? Oh, you got to get that test approved and you got to wait and you got to do this thing. How do I get in the apps are, I don't know, you got press these other five things. Let me just press the buttons for me. You know what? I'm going to press like there needs to be a setting choose defaults. Like here's the defaults based on like a template, every single one of my other apps. I've done it this way. Copy pasta. Let me just upload four photos and let me be done with it. [00:03:57] Frank: For real, for real. Um, I didn't know we were going to do the app store or play store complaining episode, but I'm here for this. Uh, the worst part for me is when you set the settings right, where you think you've submitted it, all you really see is like a combo box, changed settings, at least on the, uh, app store connect. It's a big button. Things get grayed out. They make it feel really serious when you're submitting it. Um, Um, the play, whatever the heck it's called, you're just changing a combo box. And you're like, did I do something? I don't know that it's safe. I don't know. Google auto saves like did it summit? Who knows? I'll wait a couple of days and see what happens. Oh. Good job, Google. Yeah. Anyway, so that's why I didn't get my app approved. All right. So I'm going to go first. I built a little hologram display device and I want to use hologram and square scare quotes. Uh, what it really is, is just a cute little kind of reflector thing that works a lot, like a heads up display in a car. But basically it's a screen that creates kind of a ghostly false image inside of a box. And I was just playing around one day and I thought it was a neat fact. And so I built a box to do it, and I built the software to project on it. And. Actually kind of worked out everyone. I've sent pictures to said they kind of want one. So I think it's been a pretty good success. So that's my general one. I built a hologram box and I'm giving away. I am giving away in the process of giving away. I got to finish them and put them in boxes. That's what I'm saying. Uh, two of them for little kids, [00:05:43] James: I like, I saw this thing on Twitter and it was like the coolest thing I ever saw. And they didn't know what it was or what you mean. But I was sort of blown away by it and I'm like, oh, I need to have this in my life. I'm pretty sure. And I showed it to a bunch of people too. Cause I was like, I don't know what this is or how he built it. But Frank is getting Griggs. I've seen these things on, you know, um, like Kickstarters, you know, and these, these different things, they're like boxes that you look into. And I was like, oh, this is what Frank built. That looks like really. [00:06:16] Frank: Well, those are like really good versions of what I built. I built a very bad version of those. The modern technology is called light field display these days. And you'll, you'll see that popping up because it's a really cool technology. That's getting integrated into more and more products. You can even buy an iPad that has a light field display in it, and it gives you four levels of. Kind of without using glasses without any other kind of external hardware, it's just a screen that naturally has four levels. Not naturally. You know what I mean? That has four levels of depth. That is not at all. What I built, what I built was you might see these, um, Amazon, they look like. The last pyramids, clear pyramids, and they have a little cutout and they call my hologram projector, mobile hologram, projectors, something, you go get these little pyramid things and you can go find five or 10 videos on YouTube. Play that video very carefully positioned this little pyramid thing on your phone and make. A hologram effect again, whole Garmin scare quotes and it's cute. It creates a little false image in the air. It's almost like augmented reality, but without using glasses, I think that's, what's kind of nice about it is you're overlaying something into a scene. Um, so I thought, well, that's really cute, but it's really tiny. How can I make this bigger? So I. Well, the, the pyramid, the pyramid is meat because you can put that on a coffee table and people can look around and each person will see the correct 3d image. But I was like, well, what if I don't have friends? It's just me. [00:07:58] James: Well, let's just say that no one ever comes over my house and I don't talk to anybody. Yeah. [00:08:03] Frank: Yeah. Imagine, imagine such a place. So I thought you only actually need one side of that pyramid to get the same effect. And so I just had the idea of a 3d print, a big box with just one side of that pyramid, somehow anchors some kind of screen to the, uh, to the top of it. And, uh, Presto, Banco, uh, a false image appeared. I was very excited. It was fun. It was a good hack. It was nothing I'd ever done before. And it was one of those ones when it first works, you just kind of Yelp because there's nothing else to do. [00:08:38] James: So what's your plan for these and you're going to solve these now. Yeah, [00:08:42] Frank: I guess I have to know the manufacturing process is terrible. So I've gone through four different 3d print designs. Each time I printed it's seven and a half hours, uh, for each one I have to cut a piece of acrylic and a. Terrible at cutting acrylic. I have now cut eight pieces. And I think my worst one was the last one. I'm not even like getting better at it, so that's terrible. Um, but where I did have a lot of fun was writing the app that supports it because you build this box, but what's really interesting is what are you going to display on that box? And I decided to write a C-sharp app that just cycles through. Objects it's it's for kids. It's supposed to just entertain kids and be like a little nightlight. So it just like it's through objects. Now [00:09:31] James: the question is, can you use the new iOS scanning to create a 3d model and then upload that 3d model to the hotline? [00:09:43] Frank: You absolutely could, if I bothered to put a web connection into the app. Yes. And this is like, this is why I actually kind of want to write this app for that app store. Because right now, like I said, you go buy one of those little pyramid things and all you have are some YouTube videos. I think there need to be more. Simple little hologram projector apps. There's a few of them out there, but I might as well throw my hat into the ring. It's a very simple kind of app and that's definitely where it would be fun to just upload a depth map to it from one of the LIDAR cameras. You don't even need the LIDAR. As long as you have one of the phones with, uh, a dual camera setup, you can get a depth image from it. There's another trick that I, I want to do, but because it was for kids, I didn't do it, but I would love to turn the camera on, on, oh, I should say so for the screen, I ended up using a Kindle fire device, Kendall fire eight. Y [00:10:41] James: cheap, they are cheap. That's correct. [00:10:44] Frank: $55. When I first built it, I did a raspberry pie with a raspberry pie screen and a raspberry pies, like 30 bucks and a screen's like 50 bucks. It was cheaper to get a good Amazon fire device. So that's what I did. And I wrote an Android app. It was great. I loved it. [00:11:00] James: Okay. So, okay. So I'm looking at this thing. I look at the old photo from like a week ago and that one is the raspberry PI one. Right. And. That's running.net on the, on the, on the raspberry. [00:11:14] Frank: Yeah, the, my app so far has been very cross-platform. It's funny because, uh, at first I couldn't figure out how to even get an open GL window up on a raspberry PI, not even.net, just using C just like how in the world until I get a 3d window up on this raspberry PI and. Something, something, something that is a rabbit hole. I think I almost want to release a new kit that has all this work in it, but if you want to use the actual GPU of the raspberry PI, you have to set up open Gian a very specific way, which requires a bit of fancy code. So first thing I did was, um, right. All that fancy code, actually, I stole it all from their examples, obviously got that running and that's when I was like, oh, wow, cool. So I can use the raspberry PI to do 3d graphics. And I should say I was using a raspberry PI zero two w two something it's tiny and it's, it's not powerful, but it's, it's, it's a Lenox box. Oh, I got that working. And then I was like, you know what C plus plus is terrible. So I took that app that could use the GPU and render full screen, and I poured it to be a native library. And I wrote a C-sharp wrapper over that native library and Presto bang. I installed dotnet six on the raspberry PI and all of a sudden I had a dotnet six app using C-sharp 10, uh, controlling, uh, GPU backed, uh, 3d graphics on the raspberry PI. I was super excited by that too. I got really sad [00:12:53] James: library. Um, I'm still giving, how does it, how again, does it work again? Is it okay? Yeah. Okay. So I see, I see, because now I'm looking at the Kindle fire and like you almost, it almost fell out when you tilted it, which is hilarious. I ever find the box. I find it. So there, so, so here, I'm going to describe it for everybody in case you maybe heard Frank, but I'm going to re-describe it for you. So he 3d printed like this box, if you will. And inside the box, there's a slanted piece of glass. It looks. Plastic. Yeah. [00:13:24] Frank: Something but it's acrylic, but it could be glass. It could be plastic. It doesn't matter. [00:13:29] James: Then on the top of it is the Kindle fire and the screen is pointed down yes. Towards the glass. So is the Kindle fire Creek it's crate and it, is it creating the graphics and then they're like being beamed down, down I'm [00:13:45] Frank: so, yes, exactly. Yup. So I am using the LCD of the Kindle fire as a projected. There's a lot of different ways to create projectors, but this is the cheapest simplest way. You just get an LCD screen, the trick to this, there there's two tricks happening that give a really neat illusion. So imagine light rays emitting from the screen, they're shooting away from it and they hit that piece of angled glass. And that glass is angled at 45 degrees, a very specific angle. Okay. Now we all remember Snell's law from high school physics, the angle of incidence is equal to the angle of reflection when light bounces off of something. And so if I take a light, right, bounce it off of a 45 degree piece of glass, that light Ray just bounced 90 degrees. So now it's pointed out. So the screen is 90 degrees from the view. So that you don't see the screen. You don't want to see the projector. You don't want to look into the projector's lens, what you project onto something, you know, that that's how you, you just don't want to look into the lens. I don't want to look into the screen. So we bounced the screen, uh, toward the viewer. The second trick is the thing that's bouncing is clear. So if I don't bounce something there, it looks transplant. And what happens is a funny little psychological trick. You could argue whether this is physics or just how the brain works, give or take both. This is the best part of like illusions, you know, who knows, which one's really at fault, I'm going to blame the brain. So the brain sees all of these light rays coming to it in parallel. So it assumes because I can't see the reflecting surface that the image is actually inside the box. And now. Uh, on the LCD. If you saw that LCD, it looks like it's on the LCD. Obviously you can't see that LCD. You're looking through that piece of glass. The image appears behind the glass at the back of the box. If you had a pyramid, it would appear in the center of the pyramid. So that's the trick. I am. You're taking an image from an LCD cutting a bit of it out. So the parts that are black, ideally don't emit any light. So those are completely invisible. So anything that you want be to be invisible, you make it plaque, you bounce those lights off of the reflector. As long as the reflector is also clear, you get a false image. It's a classic magic trick, and it's really. [00:16:25] James: Incredible. Yeah. I, cause I'm noticing in the raspberry PI one, there's a, there's a, there's a split second where you actually tilt it up a little bit and you can actually see the car in the top of it and the bridge and the projector going down. So that is pretty neat in general. Yeah. [00:16:43] Frank: And there's a lot of tricks to keep in the illusion there. So, uh, you don't want your objects to clip along the edge of the screen. Cause then they look like they're not real objects anymore. Um, I also coded in, thank you James Xamarin, essentials accelerometer. So I rotate the display if you rotate the box because it's so ruins the effect. If you can see the screen. Yeah. Uh, so if you're looking at this box upward, if the box is higher than you, then you want the screen down. If the box is lower than you, you want the screen up so that you can't see the screen. Yeah. And so you can actually rotate the box and it compensates for all that stuff. Thanks to the accelerometer. So James [00:17:25] James: for that, wow. How was it working with, uh, Xamarin, Android over there? [00:17:31] Frank: Okay, good. I hate to say it, but good. Uh, I like to hate on Android, but the dev experience was actually pretty good. I did follow my normal policy of not using an emulator just because I always find they're so slow and a little bit annoying. And I was using the CR copies screen sharing app. I think I should also be using visor. I should get visor, but I found. Uh, yeah, Devin on a proper device with that screenshare thing happening. That was actually pretty lovely. I didn't mind it. [00:18:08] James: Yeah, I do enjoy that because you know, the Android emulators, even you can get really fast ones. Now they take up screen real estate, but then also they take up resources on your machine. Um, and no matter how powerful your machine are is I should say, there's always going to be that little. You know, yeah. Lag. And then additionally, if you want to use sensors, I think that that is the other thing. And, and to me, I, you know, you and I were just going through this, I was trying to pull down a sample. Uh, you was trying to do some document work or whatever on iOS. And I plugged in my iPhone and sure enough certs and this, and oh my God, that's like, you know, you plug in a device and you got to put in developer mode, but whatever it takes five seconds and you plug it in, it just shows. And you hit debug and the, a got your app on the thing. It's a pretty, pretty good experience. As far as develop development goes and, and testing applicant. [00:19:03] Frank: Yeah. The only thing I couldn't remember was how to use Android resources properly. I had no idea where I should put all my 3d models in anything, but you know what I know how to use dotnet embedded resources. So I throw them all in their project into an embedded resource. It seems to work out fine. Um, and also the Kindle fire, a runs, I think it's fire version seven or something, but it's Android nine, which is Android pie, which is Android level. API level 28. Yeah. So in case anyone's out there, I'm sure you've had to look that up yourself, but that took me forever to find all those different numbers for these things. Well, [00:19:38] James: whenever you are ready to ship it off to the apps, uh, app store, you can use easy app icon.com. It's my favorite website in the world. You just give it some vector graphics. You give it a foreground, give it a background color. It'll create all of that. IOS and Android, all the modern, adaptive icons, all this stuff for you automatically it'll create your assets. I'll ever did a whole video on this. Um, it's amazing. And it just, you download it. And then there's little instructions that tell you how to basically do everything and you just drag and drop some files over. It's really, really simple. Uh it's I just, I used it for my holiday hack, so, um, I would highly, highly recommend it. Cause app icons are. [00:20:20] Frank: Yeah, I, and I, I use pretty sophisticated, uh, editors, but it's still like creating all the different sizes for every single icon is exhausting. That's awesome. Pro tip easy app icon.com. Yes. I have one little thing. I started to say it, but, uh, because this isn't a kid's device. What I would really love to do with this hologram, there has to be a mode, uh, turn the camera on locate where the person is viewing it from and you rotate the object depending on your viewing angle. And that will really make the hologram effect super, super duper fun. So I would love to add that feature too. And I think that'll really add to the craziness of it. [00:21:04] James: That's pretty cool hack though. I think that that is not cause like, it's not only just like you created an app, but you also 3d printed a thing. You constructed a thing and you did it both not only on an IOT, like raspberry device, you know, system on a chip thingy, but then you also did it on. [00:21:22] Frank: Wait on Andrew and tape and a third platform Mac, because it turns out developing on the raspberry PI is terribly slow. And before I had the Android version, I wanted a quicker way to do development. And honestly, I want to do a whole merge conflict episode on that spot. I was using the dotnet watch. A hot reload feature to an awesome kind of level, whereas doing all my pixel shaders and it, so it was fun doing like GPU programming with a graphics app, with hot reload working. I was having a great time doing development for this. So the apps already on three platforms really overdid it [00:22:02] James: does awesome. I mean, that was pretty impressive. I remember doing shader work back in the day on tread Nebula and playing with shaders is not. Because it [00:22:12] Frank: becomes fun with hot reload. You're just like, you're just playing with numbers and you're like getting the live results. Oh my God. I love, yes. [00:22:19] James: That is basically what I need to be doing. I love you. Hot reload. Yeah. Uh, well, I, you know, I will say I definitely did not do as much of awesome that you did. So I don't really, I don't even know if I want to talk about it. I don't even know you're not. [00:22:35] Frank: And our proved level. Awesome. This though, mine's not approved. Okay. And mine never could be. It's like a, it's like a 500 megabyte exi. [00:22:46] James: So last year I did, the holodeck was my cadence, which has gone pretty well. And I've been updating it throughout the year. And a lot of people been writing in blah, blah, blah. It's been, has been fun. Yeah. I made some money. It's a big number. Now the graph made some taco money. I made a few hundred bucks, not a big deal, but yeah, I do for the people I have made graphs. That's right. I made graphs and charts. Added a database SQL Lite database. Um, it has been, it's been a joy. I've enjoyed making that app. I think it's really fun. Cause I use it. I use it all the time and that's the best type of app, which is the apps that you build for yourself. Other people find joy in some of them don't and to give you a one star review and then makes you sad and cry inside. Um, but I went to an app that I don't, it's just something different. So I woke up last weekend and I knew that the holidays were. And, uh, Heather and I cross country ski, as you know, and I, the, the cross country ski area that we go to, uh, it's all community run. So it's very, very nice. And, um, they. Um, have a website where you can go to and you get grooming reports, announcements, events, all this other weather reports and, you know, camera footage and all the, you know, webcam footage of the streets and stuff to see if it's snowing or not. And they post everything on Facebook though. And I hate Facebook and they have the website and it scrapes and it puts the data there. But if you want the full thing, you got to go face, but it's the whole thing you're like, oh man. I'm like, you know, there should just really be an app for. Right. I mean, there shouldn't, I shouldn't have to bookmark a webpage, like get the latest news and information and maps. And you know, also when you're skiing in the mountains, you only have internet. If you wanted to get a map. Oh, yeah. Need the app. You need the map on your phone. I mean, that's actually like the real win-win I would say overall, I was like, that's sort of what you need, right? This makes, this makes this like, make [00:24:50] Frank: sense, right? Half of my personal apps, the apps I never released to the public are exactly these kinds of offline map kind of things where I just put a giant database into the phone because I needed to work in places where there's no wifi or whatever, but this also gets back to one of my most favorite things to work on our hiking apps. I thought to do cross country, but, um, what developer hasn't wanted to do, like a GPS tracking hiking app or, you know, something along those terms. So those are always, I, I wish those became more popular than like weather apps and Twitter apps for demonstrating things. I wish more people showed off hiking apps. Yeah. That's [00:25:28] James: cool. Yeah, I agree. Yeah. Yeah. Yeah. [00:25:31] Frank: There what's the spec. Did you write a functional spec now? Block out your time? [00:25:36] James: So I, so I, I go of course, on to onto the, to the website and there there's an app already, so there's actually an app. So I download the app and I'm like, oh, this is cool, but it's actually only maps. And that's it. It's like, it's, it's only maps. And it's just a map, which, you know, they have a PDF version, but they just have the map. You can click on the trails and you can see which one's what, and I'm like, okay, well, this is like one. 10th of what I actually want. So, because what I want is I want to go on my phone. I want to open it up. I want to see the grooming report. Like, are the, is it groomed? Like what is going? I don't want to see announcements. I want to see the weather. I want to see the road. I want to see all this stuff. I don't want to, I don't want. I don't want to go to the browser. Like I that's what I never wanted to never want to go to the browser. [00:26:20] Frank: And now to be clear, this is like a hyper local app. This is just for one place region, one [00:26:27] James: snow park. That is [00:26:29] Frank: one snow park. Got it. And [00:26:31] James: it's the main bar is where a lot of people do cross country. We call it the main snow park. So I do what I do because. Like I do. And I'm like, no, I'm just going to prototype this thing. So I, I start to, I start to go down a rabbit hole and I start to, to build this application. [00:26:50] Frank: What are we talking? A few web calls, get some Jason in there, use some MVVM helpers. It's going to be great. [00:26:57] James: Exactly. I'm like how much in this possibly be. I just need to figure out where the data's coming from. I need to put it in the app. I need to get, you know, a few other pages on here and get a few things. Just get some data in here, not big deal, but of course I want it to look pretty. I want it to have some cars and I wanted to have light theme and dark theme. And I want all this stuff now, Frank, [00:27:18] Frank: you want a light theme and a dark. I think you only need the light theme. How often are you going to be in like dark snow [00:27:24] James: now the light theme and the dark theme because people [00:27:26] Frank: like dark themes look terrible outside in the snow where the snow is reflecting all the light around you and your pupils. Size of pinholes, [00:27:34] James: but then you can set it to the system default, and then you decide what you want. [00:27:39] Frank: You want to use. I'm going to stop critiquing now. Thanks. You states. Well, so [00:27:43] James: luckily, and I'm like, this is my holiday hack. This is happening. Right. And so I don't even contact the main organizer. I'm just like, I'm just going to prototype in like five seconds. So I've luckily on my YouTube channel over the last year, I have built out. Coffee app, it's called Mike coffee. Right. And it is an app that I started from scratch file new to now it's a whole app with a backend. It has a database in it. It makes, uh, uses like MVVM helpers and uses monkey cash. And it uses all of these and has light theme and darkness, all this stuff built in. Right? So I'm like, it's the perfect template app. That app shows data. I want to show data. I'm just going to copy paste. I open in vs. Code, rename my coffee to the snow park. And literally in 30 minutes I have an app up and running, displaying some data. Okay. So now I have like a page and I, and I contact the people. I'm like, Hey, I see that there's this app already out there, but like, you know, it's only this and this is what I want to do. What do you think? And they're like, this sounds great. They're like, but can we make it one app, you know, [00:28:58] Frank: Oh, so now you got, okay. Cause yours was doing snow conditions, but you didn't have [00:29:03] James: maps. Well, there's already a, an app out there that did the maps from a local developer too. So one more tab, [00:29:09] Frank: man. One more tab. [00:29:11] James: Well, so, well, I don't want to stomp on this, this person's app. You know what I mean? A good, oh, I'm [00:29:16] Frank: sorry. I thought that they had released an app. Okay. [00:29:20] James: No, no, no, no. They, I mean, are they [00:29:24] Frank: asking you to merge? That's not your place? [00:29:26] James: Well, so they're like, Hey, there's this other app from this other person, blah, blah, blah. I was like, okay. I'm like, Hey, I could, I could, I could work with someone if they built it in Xamarin. Right? Like, so, so I, they get the, get me in contact with this person and that, but they've moved out of the state at this point and they're like, Well, you know, like we built it in react native and like, I just did it in like a few days and just like, yeah, this Heroku app or whatever up, blah, blah, blah. It's like it just running. And I was like, oh, I'm like, actually, I'm like, I could take your react native view and I could shove it in my app and I could take it over if you don't want to do it anymore. And, um, and he's like, nah, that's okay. You do your thing. I'm just to keep this over. I that's fine. That's fine. Yeah. So I'm back to I'm back to the app. So I contact the organizers and I was like, Hey, like, you know, do you have an RSS feed? Because it's basically, I'm just pulling in an RSS feed, right. This and that. And he goes, this, this is when you get into the hacking of this Frank, you're gonna, you're gonna like it. So good. He goes, um, w whoever, like, does the website, he goes, oh, no, we don't have an RSS feed. He's like, actually what I do is I have a. I have some worker that, um, does a graph API called a Facebook scrapes Facebook's data. And it looks as for hashtag either announcement or grooming and displays that data. And I was like, oh, cool. Like, get, let me have access to the graph or whatever, since you don't have an RSS feed and he's like, oh, better yet. He's like, I just have this in a text file. Like it's just a text file on the server. And I update it every few hours. Okay. That's basically an RSS feed. I don't know if you've heard better yet better yet. It's in Jaison. [00:31:05] Frank: Yeah. Okay, great. Great. Okay. So he, is he manually doing [00:31:11] James: now? No, no. He has something like he said, he has some, um, uh, Ruby or some PHP worker that is doing something and creating a text file on disk or whatever [00:31:22] Frank: URL that was not discoverable security through obscurity and. You get that URL. You're good to go. [00:31:30] James: Correct. He has like little PHP embedded views, basically that are reading this file. And I don't know where that's coming from because that's happening on the server. So I get that data and I'm like, this is amazing. I love is Jason bloom. Boom, boom, boom announcements. This I'm pulling [00:31:43] Frank: it out. Basically. Monkeys dot Jason imports [00:31:46] James: directly. It's yeah. It's like grooming it's it's like, it's like events dot Jason and it's actually not taxed, which is funny, but this and this I'm like Anna's HTTPS. So I'm like, this is great. I don't have to worry about any TLS. So anyways, so this is good, but then here's the, here's the absolute beauty of it. Frank he's like, I also get the weather from this random weather service. And I was like, okay, here we go. I got to spin up an Azure function. I got a store thing. I got to do this stuff, right? No, Frank, no, not at all because what I do, which is even better, that's going to blow your mind is that he has these. PHP web views. Okay. And I'm going to give you the web, the web view in it, right. So, okay. I'm going to, I'm [00:32:33] Frank: going to send you this parsing HTML with a red jacks. This is going to [00:32:37] James: be, I sent you the wrong link. Okay. So, so there's a little Ajax PHP weather thing, right? You already know what I'm doing because you're Frank rigor. So you're knowing them. So I'm like, how do I. Just scrape this data, right. And our friend HTML agility pack come [00:32:59] Frank: through. Oh, this is important. This is important. I thought he was just going to do string dot, find their string dot index of, but no folks. He used an actual SGML parser, HTML, a Jody pack. Good job, James. I'm so proud of you. [00:33:16] James: Um, I'm going to give you the guest here because you're going to be. Oh, my goodness. You're going to love this. So everyone, [00:33:22] Frank: if you've ever done any HTML, scraping, and you were writing rejects, you're doing it wrong. Go get HTML, a Jody pack. They have, um, uh, uh, ex assess selectors, whatever those are hard to use, but they have link. You can just read everything and link and go find whatever you need. And [00:33:37] James: there's good samples. And when you look at this, what I do, so I just say, Hey, give me, I just go, Hey, give me, give me the entire web URL. You know what I mean? Um, which is just a table with a bunch of tea, tiaras and TDS. And you can use HTML agility pack to just load this HTML, rather the table note. And you can say, Hey, give me anything that has a TD in the tr elements, scrape that tax that. And it gives me exactly what I need, which is the data. So it has the direct data inside of it. 100%. It strips out all the HTML and then I use little emojis for like temperature and humidity and direction and all this stuff. Right. And. I had the most beautiful weather report. And then I just did a video on my YouTube about image caching, because I know what I'm up to is these webcams, you know, Seattle has like 15 billion webcams. They update every two minutes and that's what they have on there. So there's like these webcams that give you the, the different reports. So, um, that's really cool, but you have to make sure that you're setting your cash time. Correct. And then additionally, Um, to actually refresh an image manually, let's say you pulled a refresh and you want to refresh that in Xamarin forms, you actually need to create the URI source again, basically flush the cash out. Um, or if it's more than two minutes, I do that. So I have this weather report. I have all the images, all the camera's coming up and it looks Frank. It looks beautiful because using sure enough it is using all of my coffee app stuff. Right? Yeah. Um, and I'm literally going to give you the, the, the, the app URL as well. [00:35:23] Frank: I want some screenshots here. So if everyone wasn't keeping up, we now have what live video in the app. We now have live temperature stuff and conditions, and we have maps. Did the maps ever make it in? Okay. [00:35:39] James: So the maps sort of made it in sorted in. So the other thing is I added location. So you can like navigate it again, using Xamarin assign. Um, which is great. All the web URLs using Xamarin essentials. Um, I like [00:35:52] Frank: your icon, but you first row of icons, as you don't put text on the icon. So you failed the first rule. So it is a brand. So I get it. [00:36:02] James: I am to remove the, the words in the future to make it bigger. So don't worry. I'm a. I am on it. Ah, yes, I'm a, I'm a silly, silly person for doing this. I will, I'm going to generate [00:36:12] Frank: good. I was actually a little worried that this was gonna look like iOS six notes. I know the last coffee app, I remember had a really brown theme to it. So I was thinking like, why is the snow app going to have a really brown theme to it? But no, you did a great, you did black and white, which is perfect for a snow app. I don't see the dark mode here for some reason, but the, the, the bright mode, the light mode. You have emojis for UI elements, which apple specifically says you shouldn't do, but it looks great. True, very active. [00:36:44] James: I'm using font. Awesome for the tab icons, which is great. [00:36:48] Frank: You have the trail map looks gorgeous. You have like a V semi Topo map and you have announcements. This is a far better app. Then I would say 60% of apps out there. [00:37:02] James: I, I. Through it to get. So I, in development, I maybe spent five hours worth of time on this app. I got to say, [00:37:12] Frank: I see you have tabs news, weather trails more. What's up with the more, why do you need [00:37:17] James: a more ASIC settings? [00:37:20] Frank: Just put settings there. You can have five tabs. I know. I hate more. I just people, I hate disclosures. I hate hamburger menus and I hate more menus. [00:37:30] James: I, I know. I mean, So I use shell. I use Amarin form shell with top tabs and bottom tabs, which look pretty good on iOS. I'm not going to lie about it for these different sections. And sure enough, we went cross country skiing today and we literally used the app. Fantastic. And the cool part was that, that the maps, I am working on some optimizations cause it's like, I just wanted to get it out the door because once I had it, I, I took it and I shoved it in app center. And I had, I created a new, you know, signing, keys, everything like that. Luckily I had just gone through some. Exporting of, of, uh, P 12 files. So I have those stored, so don't worry that those stored around yay. Great. A new provisioning profile did the thing and you know, these images, I didn't, I didn't make them pretty right. They're just screenshot, screenshot, screenshot from the devices. Bingo Bango. It's totally working, you know? Uh, and it's fine. It's nothing, nothing, man. There's no analytics. There's no crash reporting. No data's collected. No. And I'm just like people, people took it off. [00:38:34] Frank: Tell you how this is not even a James' app. It doesn't even have rounded corners on the images. That's the one part where this is not a James it's rounded, rounded on everything else. Buttons group boxes, but not the images, sir. Nope. [00:38:49] James: Not the images, especially not the road cameras, because you want to be able to see all that little information and they don't want any of that to be cut off. [00:38:55] Frank: It's all border. It's all gray border. I know. Cut [00:38:58] James: that off. It's all there. Frank. I had no time because I made the thing. It was, so it was so quick and awesome because I had that template app and I'm so happy I did because I, you know, I honestly, I spent all my time only debugging Android. I didn't even look at the iOS app until they chipped it into test flight, because I was like, I'm not even going to work. I had a few bugs in it, which was fine. And then I fixed them up and I hopped on my Mac, but sure enough, the fun, everything was was butter. It was, it was great. It was so delightful. To to do this. When [00:39:36] Frank: you say test flight, sorry. I just have to nitpick. Um, did you actually get approved and test flight? So you had actually had the real beta process going, oh yeah, yeah, no, how I [00:39:44] James: did it. This is [00:39:45] Frank: blindly. Got it approved. That's pretty [00:39:47] James: good. Yes. I blindly got it approved a hundred percent through Tesla. Yes. Um, and then for the app store, I fixed up a few things. Got it back out there, but I went from zero to. To app before my holiday really actually began. I'm not going to have [00:40:06] Frank: fantastic. Fantastic. Now, how many, uh, ski resorts do you think there are [00:40:12] James: in the world? Oh, quite a few. I would just I'd imagine at a park [00:40:16] Frank: somewhere around 10,000, maybe 70,000. So should each one have its own app? [00:40:24] James: I don't know. I mean, well, here's the thing is probably. I mean in a world where ski parks and all this other stuff, you know, they would all want their own branding. If it was like a real business, like this is all community run. So, I mean, ideally I could have like my favorite places in here. Cause like, if there were multiple places around town that I wanted to go skiing, then yes. But I don't know. I mean, to be honest, like people mostly ski and like the same place over and over again. There's not that many. Ski destinations in and around of your traveler skier, then you totally want like an all-in-one app, but I don't know. That's a good question. [00:41:07] Frank: Okay. Well, either way you should white label it and talk to other ski resorts and start making some big bucks, big playlists. [00:41:13] James: So big bucks, I didn't even add in efforts. I was gonna be like, you know, not promo, but just, you know, whatever it is, blah, blah, blah. But I was just like, yeah, I'm gonna get this going to happen. [00:41:22] Frank: I just realized it's there a Mac version of [00:41:25] James: this. Uh, so, I mean, cause it's a, it's a, you know, it's, it's got the, if you have an , it will run it. If [00:41:33] Frank: you have an M one, that's why it's trying to open it and failing. Oh, that's funny. That's a little bit of a bug on Apple's website. When you say view in the Mac app. Yeah, you should do. It's just, it's a grayed out button. Okay. Dot net six has met catalyst support just saying hashtag just saying. [00:41:52] James: Yeah, it does. It does. Yeah. So that was my holiday hack. I totally, I love it. [00:41:59] Frank: I was making fun, but only because my very first app was Seattle buses. So it's, I mean, it's basically the same thing. And I was like, oh boy, how am I ever going to franchise out to bigger and broader things? But I love hyperlocal apps. I wish there were 8 billion. Like Seattle, there probably are Seattle specific apps and things like that. So this is super cool and especially cool that you got it approved. Uh, that's definitely gone the next step. [00:42:27] James: Yeah, and it's out there and, you know, I, what I, what I was, what I kind of pitched to the, to the, to the team there. I said, this is my way of giving back to the community. Cause I am not gonna, you know, be a volunteer, you know, groomer of, of those cross country skiing out there. And I'm not going to, you know, do web stuff at all, but I'm like, this is my way that I can give back because I can build an app really quick. And hopefully some people find it beneficial. [00:42:54] Frank: So. And they seem to post every day. So if nothing else, that's just kind of [00:42:58] James: fun. Yeah. It's out there them. Well, we did it. We not only shipped holiday hacks this year, before the end of the year, when you need to do a recap, start all amazing. This year, that is for sure. [00:43:10] Frank: While we're more like I've been really distracted. So I've been working on hobby projects instead of real work projects, but don't worry. Everyone updates are coming. I swear. [00:43:20] James: There you go. Um, yeah, for me, I'm excited. I'm excited to, uh, round up this new year, see where we go in 2022, Frank, as always as an honor, and a privilege on this side of the microphone to be chatting with you. Um, and to do this podcast, I really appreciate. Putting up with me for so long. [00:43:40] Frank: I'm pretty sure it's the other way around, but, uh, yeah. Uh, how do you close out a year? Like 20, 21, 20 21 was only like three months long in my head time still doesn't really exist to me, so I don't really know how to close it out or then good writtens. Let's bring on 20, 22 [00:43:58] James: fat. That's going to do it for this week's and this year's merge conflicts. So until next time I'm James Montana. And I'm [00:44:07] Frank: Frank Krueger. Thanks for listening. Peace.