Jonathan Dick (00:01.486) you Jonathan Dick (00:12.526) you Jonathan Dick (00:17.454) you You're listening to Gone Mobile, your input and output, for all things .NET, MAUI and mobile. Welcome back to another God Mobile. And today we are live on the YouTube and things. Well, we're not like live live. well, we're going to be on it. So this is like the first recording to go to YouTube. No, I mean, I we had we did and I actually checked I was editing an episode 104. So we're actually a few ahead and we're living in the future. So. I edited one of the episodes and the one that I said, you know, we might actually post this one to YouTube. And so there's, there's a few that might even go before. I mean, I'm exporting the video right now that I mixed down. So this is going to be all that, but this, this one's a bit different. We're trying a different tool. You know, it's, it's that we're new at this. So we got to find what works and what's easiest to kind of do the whole thing with. So today is a... So all of a sudden there's a skip in the stream. It's cause John's computer is like chugging away on stuff. Now he does have a wood paneled reactor over there, so he should be fine. Yeah. I checked with the power company. They turned up some more power switches. You know, the Simpsons thing where they hit the button. Or no, you know, better yet, Christmas vacation. Yeah. Yeah, that's totally John's house. 100%. I can see all of his wifi from space. Yeah, exactly. And if he sounds like junk today, it's because he's recovering from illness. So he's still here doing it hard. So bad. Yeah. I haven't been this sick. Jonathan Dick (01:57.102) And it wasn't COVID, it was, it was just, you know, some strep throat, I guess they call it. I haven't been this sick for a long time. It was bad, but I'm better. I'm good enough now. That's what you get for having kids. Well, and apparently the warmer weather out here now too. So that's fun. And because the weather's turning warmer, I have been thinking lately about when is the right time to open the pool. And such is your lead into our beautiful topic today. This is one that's near and dear to your heart. Yeah, I don't know. I've always had a fascination with, I think you've done a lot of with this kind of stuff too. And this, by this stuff, I mean, IOT, you know, small embedded devices kind of thing, micro controllers, you know, small computing stuff, that kind of thing. So I tend to do a lot of IOT stuff. it's almost all in C it's not in C plus plus it's not in .net, but. I think today you want to talk about a little bit about that. I want to talk about a bunch of parts of it because there are. I mean, we're developers. Like, yeah, I prefer writing C sharp code when I can, but sometimes you can't, right? Sometimes it's better to use something else. So there's a time and a place for everything. But I think we're getting closer to the point where writing in our favorite languages is a reality on those types of environments. So. I thought it would be good to talk a little bit about some of the experience that I had. And I talked about opening the pool because I think a lot of the content I want to share today is around building stuff for my pool, like automation control systems for my pool. And so I think of the space right now is kind of like how I thought about mobile back in the early Xamarin days where I remember being at one of the Evolve conferences and Nat was kind of giving his speech of like, you know, everybody has one of these in their pocket. This is like the next revolution of computing. And yeah, he wasn't gone. Like we have really come a long way since that moment in time where like we are just at the forefront of building apps and stuff, right? I don't know if this is... You could be saying gone mobile. Yeah, we have gone mobile. So now are we going to have to update the podcast to having gone? Jonathan Dick (04:20.142) IoT small form factor microcontroller stuff. We've had those for a while though. True, true. Yeah, and that's the thing, right? These things have been around actually for forever. So swimming pool, the whole lead in there, I always want my full house to be able to be automated by these things, control stuff from my phone. So naturally when we had a swimming pool at our first or last house, we actually had a pool, we put it in. I didn't spend the money to be able to do this or like put in a system that was already capable of this. It just was too much money at the time. we moved into the house that we're in now. Well, I don't know, six, seven years ago, six years ago. And at that point, the pool was already here, which was great. That's part of why we wanted to move here because we didn't have to install another pool because that's a whole disaster. Don't ever do it if you don't have to. And I had to buy new equipment though, cause like, All the stuff had been, you know, eight years old at this point and things were not working right. And so I took the opportunity to buy a bunch of equipment that I knew I could play with, right? I knew I could like plug stuff into and automate and be able to control. Yeah. Well, Hey, I broke nothing so far. So far. Yeah. But you know, electrocution, fire hazards, you know, that's the kind of stuff you can get out of IoT if it's not done right. For sure. I mean, arguably. Probably there's some stuff that I haven't done right because I am no electrical engineer. I am no electrician, but I know, you know enough to get myself into trouble. So I started out originally this so this was like six years ago and and the space was a little bit different back then. Like I think I don't know if Meadow was quite around then it might have been but it was it was a long ways from being able to be used for this stuff. And so I originally went down the path of like, okay, Arduino is kind of the popular thing. writing C code, buying these little microcontrollers that were not that expensive even at the time, right? So I started with an ESP8266, which was just a really low cost microcontroller. I don't remember the specs of it. You know, these things are like very low memory, very low storage, obviously. And the microcontroller, the idea is that like the thing is a really slim like... Jonathan Dick (06:44.014) I don't know, can you call it an operating system? I guess you can. No, not really though. Yeah, it's like like it's got a I guess a small ish operating system in order to get the flash program onto it. But that's it. Right. Yeah. And so that's the allure of these things, right? Is that you're not like maintaining an operating system that needs updates and like it's you know, Raspberry Pi is kind of another thing in this space and it's really cool for certain applications. But you know, if I was going to stick a Raspberry Pi on this thing, like I got to worry about Linux updates and like security, you know, in theory, security updates, probably in the application, it's not that big of a deal to let the thing age a bit. But the idea of the microcontroller is like power goes off, power comes on, the thing just starts up again in its fresh state. You know, there's no OS booting up. You're not going to like corrupt files because the thing shut down at a bad time. Like it's just meant for these applications where it's like on and off and you know, very low code, very specific purpose kind of thing. So, with the Arduino kind of set up with this, I didn't buy the actual Arduino devices cause these are all the, like the knockoffs kind of same thing of it, same hardware. And so I, I use this, you know, 82 66 and I wrote some C code and that C code did a few basic things. It ran a web server, which is kind of amazing that you can do that as well. So it listened for requests and It was stupidly simple. All it did was like, you know, take a few different endpoints and, you know, do something with that. And so, you know, to get into a little bit of what that something is, like for pool stuff, all it was really doing, all I still am really doing for the most part is controlling a bunch of relays, like a bunch of switches, right? So for the pool heater, most pool heaters kind of work like this. Most, I think thermostats are similar too. You have like a signal, you know, from the heater. So I think the heater puts out like 24 volts AC. So just a really like weak current. And then if you close that voltage, that signal coming from the heater with one of two like posts terminals on the heater, it's going to select which mode you have that operate that you want to operate. And so for a pool heater, usually have like a spa mode and a pool mode because you might want two different temperatures. Jonathan Dick (09:10.382) you know, set points for those modes. And so basically, you know, I don't have a spa on mine, but I have the two modes, but so on or off is basically like either there's no relays closed, you know, from that current coming in to, to a post on the heater, or I close one of them to select the mode that I want. And so all the microcontroller is doing is saying, you know, I'm telling the code to tell it, Hey, like tell that relay, to be open or closed depending on what I want to do. So have you ever worked with these relays, these relay boards that I'm using in any applications? A little bit. They're not as common in the industry IoT sections that I seem to get involved with. But really, it's all the same stuff. You're just plugging into on -off switches exactly what you're doing. If they have it. Cause a lot of the times they don't have that, right? Like the proprietary hardware is like, no hands off. But you know, you think about it nowadays, like that's what kind of the thermostat in your house has been doing forever. Like it's four pins. I think sometimes five, if you've got a humidity control and stuff, but like it's all the same. It's all the same idea. Yeah. Bits on and off. Sometimes they have multi -state, but it's, it's, it's just, it's yes or no. Yeah. And so these relay, like the relay boards that I was using, were, they're basically like a bunch of, I think they're like opto isolators or something. They're technically called. So like you, the Arduino itself doesn't have that much voltage, right? So like to be able to, you, you can't run that 24 volts AC like through the Arduino as a switch. So instead you use this external relay, which might need a power source of like five volts or 3 .3 volts. Like the Arduinos I was using. really only deal with 3 .3 volt signals. So I found some relay boards that deal with those. So, but you still might have to power those, those relays with an external source if they, you know, you don't have enough juice coming from the microcontroller. But the idea is more that like the, the signal that you're sending that board to tell that relay to go on or off, that's like very, very, you know, minute amperage and whatever voltage again, like in this case, 3 .3. So the Arduino, Jonathan Dick (11:32.494) has the capability to kind of use these digital output ports, right? So that's kind of what we call them in software there, I guess. And so you create that digital output port, which is referencing a pin that you've connected it physically to on that Arduino. I'm going to hold up, because we have video now. This is a meadow, so it's a bit different, but like this is the idea, right? You've got all these different pins. And so I could like hook it up to here and say, hey, that's like port D10, and I want to tell the software to... send a signal to that port when I want the heater to be on kind of thing. And so it'll tell the relay board that the relay board or the relay switches itself, you know, closed or on, I guess. And then there you go. Like you've now interacted with hardware and done something cool via software. Like in that moment is like, that's the, the aha moment, right? Where everything's like, what else could I do? Now let me ask you, okay. Well, we're going to get to the, what else you can do. Cause I got questions. Yeah. I got questions, but do we, why? Why do you want to control the pool temperature? Does the thing not do it on its own? I mean, you could put a thermostat. Well, it has a thermostat internally, right? So like I could say, hey, I want the water to always be 90 degrees because my family is a bunch of, you know, cold water wusses and like anything below 88 degrees. And by the way, this is funny. We, I do pool heat in Fahrenheit, even though we're Canadian and like, You know, generally I use Celsius, but for whatever reason, pool heat makes sense. I don't know why. So you can set it to that. But the problem is like, I don't always want to be paying that gas bill for heating the pool and we're not using it. So I do want it off and on quite a bit, actually. So during the week and I might want it like I did used to use the two modes. I'd have like the pool mode set to like 80 so that it would keep the water, you know, there. And then if I that way I don't have to wait so long if we're like, hey, let's go swimming, you know, tonight. And I'm like, crap, like I didn't do it soon enough. So we can't in that case. It's like, it's already at 80. I can turn it up to the spa mode and it'll start pumping out heat and it'll be ready sooner. So you do want to control it. I think I mean, I know I do. Others might be happy to just burn all the gas in the world. But so you have automated, you have automated that portion of your pool, which is pretty cool. Jonathan Dick (13:59.054) So that's one, that's one part. I don't know how you've managed to keep that thing, cause you keep it on the year round. Now obviously the pool turns off when it's cold outside, right? Do you have the, do you have the temperature automated too? If it's too cold outside? we, we, we, we winterize the pool winter. Like it's all off and you know, everything's drain it. Yeah. Yeah. A little bit. If it's too cold outside, do you let the pool get a little cooler? Cause you're obviously not going to swim if it's like, yeah. like 10 degrees outside for some random reason. And that's really like where I like to have that control. Now, you know, you might start thinking too, like, okay, there's two modes, but like, well, what if you just want to use it as a thermostat too, right? Like I might say, it's getting going to be colder, like let's keep the pool at 70, right? So just dial it back. Cause right now with the two modes, you actually have to go on the heater and say like, okay, Pool mode is set at this temperature, spa mode is set at this temperature. you can actually set the temperature. Right. OK, so it's just flipping the two modes. Right. So naturally, the next step is throw in a thermometer, right? How do we read the temperature of the water so that if you think about it this way, like, I can always set the spa mode to like the highest setting possible on the heater, right? And then control the on or off external to that. So if I know the water temperature is 88, I can say, okay, I'm done heating for a bit, like let it go, right? So that was the evolution that I've only actually recently done and we'll talk about that I guess in a bit too. So I, you know, pool heat is one thing, pool pumps, so some pools have single speed pumps and so you're doing an on -off thing. And that one you need, you know, kind of a really decent relay for because often they're too 20 volt. Right. Or if they're not, they're still pretty high amperage. So you can't really run that through just like a super normal relay. You need like a, a thing rated to it. And this is where you're talking about getting into trouble with the electricity and stuff. Right. and, and so to be able to like signal that beefy of a relay open and closed with something like an Arduino is a little bit more challenging. I haven't actually done it because I, I have a variable speed pump. And so the variable speed pump, Jonathan Dick (16:18.99) is what it sounds like. You can tell it to run at different RPMs. But the way that mine works and the way that a bunch of them work is they have preset settings kind of like the heater. So they work off the same principle. There's a current coming from the pool pump. You close that current to one of X number of terminals on the pump, and that will select which mode it's on. So my pump has, I think it has, four modes, but I can technically only automate three of them. So, you know, closing it to nothing, the pumps off, closing it to, you know, pin one is, is mode one, two and three. And you preset again on that pump, like what each mode speed is. So I have, you know, mode one is 1200 RPM, mode two is 2000 RPM, mode three is, you know, 2800 RPM or something. And so, so what you're getting shot out of the water. Yeah, basically. So you might want different speeds for different things, like if you want constant movement and filtering, but you don't really want to spend a bunch on electricity, you might choose the lowest one. The lowest one might not have enough flow to keep the heater satisfied, because the heater has kind of its own internal flow switch that, you know, if you don't have enough flow, it's kind of dangerous to be heating water that's not flowing fast enough through it. So you might have to crank it up a bit if you know that you're heating, and then you might... have a higher mode kind of for when you start the pump up at first so it primes itself properly or not prime, but kind of gets enough water into it. So you're not running into running the pump dry or like you might be back washing, you know, cleaning the filter or whatever. And you want a little bit more oomph because of it. So, so this has become a passion project of yours. Yeah. But like, I think the one thing I always, when I, when I started doing the programming, obviously we're using prototype boards, right? Yeah. Truly they are prototype boards. They're called that for a reason because whenever you talk to the hardcore electricians, they're like, so I asked you this a long time ago. So I'd been educated on it because I had the hardcore hardware guys going, no, you can't do that. Do you take your, do you take this thing off in the winter? Yeah, I do. you know, well, you know, I'm asking, or I'm going with this. Well, I mean, erosion or I don't know what, what other, what other fun things. Well, cause the boards do tend to pop if you don't, you don't, if they're not coded. Jonathan Dick (18:41.934) Right? Moisture gets on them. Yeah. And water obviously conducts electricity quite well. So you get a little condensation on there. They go poof. And then now relays are protected. Not really. Not the ones I'm using really. Like they're on kind of a PCB. I have this all housed in like a waterproof enclosure that's mounted on my stuff. So like, but yeah, I mean there still can be moisture and stuff that gets in there technically. Right now. So the first version of this that I did, I was like, I'm just going to put it, you know, I've got a breadboard. I've got like, you know, just the pins that you plug into it. I had some like, capacitors, you know, for going between the, the relay board and stuff into the breadboard. I'm like, this is super hack, you know, together. It's, it's going to be temporary. I'll get a, you know, I'll start soldering stuff together, you know, as soon as I make sure it all works. Well, that one ran in, you know, production for three seasons. Like I got to the point where I was just, it was working and then like every spring came around, I'm like, I didn't like go do this in the off season. Cause you know, during the summer you're like, I'll do that in the winter. Well, winter comes and you know, spring comes again. Yeah, exactly. So that Arduino setup with that ESP866 ran for three seasons and it did, you know, heat, the variable speed pump, And then I have a salt water generator. So instead of like dumping chlorine in liquid chlorine or whatever, I have a thing that, you know, salt water generators take salt in the water and they convert it to chlorine. And so it's just an easier way to maintain your chlorine levels and having to dump chemicals in all the time. And the one I bought, I was kind of lucky. The way it works is, you know, a hundred percent kind of on for a duty cycle and then off. And so like, These generators, you generally set a percentage of how much you want it to generate, you know, zero to a hundred, obviously, and you kind of figure out after a while, like what percentage you need that to be to kind of maintain the right chlorine levels. And so in my case, my generator, they all have a flow switch for safety reasons, because you don't want to let chlorine gas build up in the thing if there's no water moving, right? So that will turn it... Jonathan Dick (21:05.806) Yeah, that'll turn it off, you know, if there's no flow. So I decided, hey, I can use a simple relay again to interrupt that flow switches switch, right? Like the circuit, I just interject myself in between, you know, the thing coming from the unit to the actual like generator cell. And when I want it, so I set it on the unit to be always 100%, kind of like the heater, right? Doing at the maximum amount. And then I manage the duty cycle. And so I'll kind of keep the counter going like, okay, I want it 60%. So it's been on 60 minutes. Great. Let's turn it off for the next 40 and then repeat the cycle again later. So that's the way I control the Saltwater generator too, which is kind of nice. And you have managed to not kill anybody yet in your... Nobody has. been killed. The chemistry has been working. The stuff all works out. I can control it from my phone. So that was version one. And I built like a screen into Pool Math app that only I, my account could see that could control those things. Right. Well, you know, there's a few more things that I wanted to do. Like we talked about adding like a thermometer, like temperature reading. I want to be able to do that. I also, I also wanted to be able to monitor the filter pressure. So one of the things with the pool is like as your filter gets kind of more clogged up with all the junk that it's filtering out, every once in a while you have to do what's called back washing it, which is basically running water backwards through it with the valve change so that the water you're running backwards through it just goes out somewhere like a hose, you know, out to the drain or whatever. And that'll eject all the junk that's been filtered sitting at the top. And so as, as your filter, you know, gets more junk, the pressure gauge on it is going to start reading higher. And that's how you kind of know like, okay, if it's like 10 PSI above what it usually is, like right after I backwash it, that's it's time to do another backwash. Well, I want to know about that without having to go look at the gauge, right? Like, come on. So automate this. Exactly. So, you know, it started looking at that. Was there anything else that I do right now? No, I think. Jonathan Dick (23:22.99) I think that's it. I want to know when you're going to measure the chemicals in the pool to know what chemicals are made in. Come on, man. That's the ultimate trick. Yeah, it is. And believe me, I have looked at it. It is not simple to do. Like just even just the chemistry involved. Like you can get pH sensors. Your app knows that. No, I know it might, but like it's based on you doing tests, right? Like, like titration tests and stuff. So the problem is for For measuring pH, we do have sensors. The ones that are cheaper need very frequent calibration. So you're kind of trading, like, do I just do a test or do I just calibrate a sensor? Like, no. Like, what's the point? Yeah. And you can buy more expensive ones that need it less often, but then you're spending like a lot of money and it still needs it often enough. Like it's still, I only test my pH once you get it dialed in for the season, maybe. maybe once a week at most. Well, I already have to test other stuff. So the other one that you can test more frequently, the most frequently is your chlorine levels. And that one is, there's like, there's this ORP sensor and calculations you can do, but if you have an outdoor pool, it's very hard to get a meaningful reading from those and they're super expensive. And there's just no good way that anybody's come up with to build a sensor around testing those levels. So unfortunately, It's just not really in the books right now. So if I want a pool, I need to educate myself still. Yeah. Or put the numbers into your app and let it educate. Well, yeah, I mean, it's a bit of both. It's telling me where I'm doing stupid things. Yeah, because the thing right now is like most people, you know, get a pool, the pool stores tells them, OK, bring water samples in every week and we'll tell you what you need to do, which is great for them because, you know, they're going to tell you that you have to walk out the door with, you know, 100. dollar plus of chemicals every time you go in because you're only checking it once a week instead of more often and their readings are not that accurate too. So it's a, I don't want to say it's a big scam, and I don't know that pool stores all believe that they're doing this bad thing, but at the end of the day, it's a bit of a shady industry. And so the idea with the app is like, well, let's let you learn a little bit of how to do this yourself so that you don't have to go. Jonathan Dick (25:45.55) rely on these people who are using inferior testing equipment and some kid from high school is working at the counter doing it and probably doing it wrong and then telling you, you need to add these chemicals and by the way, that's $300. See you next week. So that's the idea. And then your pool either bleaches your hair white or turns green. In both cases, it's bad. Yeah, that's I mean, that's a whole other thing, right? They'll still sell you all the solutions like, add this copper stuff to your pool. That's great. Well, no, not really. Sorry. Don't do that. Well, the cool thing here is as we talk through this, right? Like all the things that you're doing with one little microcontroller. Yeah. As we start to add these things like, hey, let's let's monitor the temperature. Let's well, let's automate the chemicals and do all the chemical testing, right? Theoretically. Yeah. You said why we're not doing it. But let's say we. Let's say we were. So that's a lot for some of these boards that you want, because that's a lot of, I don't want to say it's a lot of processing power, because it's really not. It's these boards can respond pretty stupid easy. And they usually go through these things sequentially, right? So you have it on a loop. The loop goes check, check sensors reading. Okay, great. When was the last time we checked them? Okay. We probably have to raise an alert, right? Or we have to, and raising alert is basically turning this on. And then you just keep going through this loop and that's what it does. It keeps going sequentially through these. Yeah. And when the power goes off and it comes back on and it just does the loop again, right? Like it's always just works and that's the beauty of it. Right. There's no threading. There's nothing magical, but it's very, just keep going. It just keeps going through this loop. You have to time the thread. Like you have to time out the thread to say, you know, don't use the battery forever. Just take a, take a snooze for like 10 minutes or some odd milliseconds. And then go again, right? So you have to do all these things to get it going. And it's pretty easy to, well, I don't want to say it's pretty easy. It is. It's very easy to think through your problem. Yeah. Cause it's a kind of simple problem and simple approach. But then you've also got things like a web server on there, which that's interesting because web servers very well, the server doesn't, again, doesn't have to be multi -threaded, but you don't want to wait for it to do all of its checks and balances to return a page. Jonathan Dick (28:01.966) So you start to get into this thing where you need a little bit more beef than I don't want to say then C is going to give you because you can certainly do this with C and you are doing it with C. But you need more and more of these tools, right? I need to connect to wifi, I need Bluetooth, I need, you know, all these APIs are starting to come in. So there's your segue into how you're looking to beef this sucker up. Exactly. So, I mean, I started looking at... the, the Meadow board, right? Which I showed earlier and I'll show again on the video. So this is like, this is a microcontroller still and, but it's, it's well borderline ish. Yeah. It's like a real time OS I guess, right? Right. Cause you could do all this with a Raspberry Pi. Sure. Yeah. A Raspberry Pi is also super expensive and now it's a computer. You just want things to do checks and balances with some extra tools. And even like, you know, price being kind of equal, it's still, yeah, like I don't, I don't want to, I don't want to have to wait for Linux to boot up for my thing to start working and then worry about how that worked or not and the power went out and all that stuff. So I don't want to do OS updates to the thing that's running in my pool. I just, I don't. So Meadow has been around for quite a while and kind of good friend Brian and Kostet, I'm going to say his name wrong, we'll probably point him out watching this too. I'm probably in C. I'm not even going to pronounce it today because I have a cold and it's bad. So, you know, there's, there's a bunch of like, you know, former and current or other, you know, Xamarin people who have been kind of enthusiasts around this platform and Brian's really spearheaded it. And the cool thing about it is it runs .NET. It runs, you can write C sharp, you can compile your code down and you can run it on this device. Now this device is, you know, you can go search it yourself too, but like it's, it's a couple of things. It's actually got, You know, I talked about the ESP8266, one of the other like newer popular microcontrollers and newer, but it's still quite old now. And these things are, and those are super cheap to get like is a ESP32 is kind of the evolution of it. Right. And I think actually like a lot of, you know, consumer IoT devices probably run, you know, an ESP32 in them or a variant. So you buy like a smart, you know, whatever, it probably has one in it. Jonathan Dick (30:25.486) I might have like 20 or 30 of them sitting in my drawer, honestly. Yeah, yeah, because they're like dollars on the on the piece now, right? Like they're very cheap to get. And you can certainly write, you know, C code. I think you can do like Python to them. I think there's some efforts for JavaScript and stuff like that, too. The other thing that we'll touch on briefly, like Meadow isn't the only .NET game in town kind of technically. I mean, they are in a sense, but there's also Nano Framework. Nano framework is a little bit different. It is kinda .net, it's C sharp. But it's like old. It's a custom runtime. So like it's it's own thing. There's no generic support. There's lots of things missing that you would kind of expect from .net and like it's like not net standard, right? It's their own sort of dialect of .net, their own MS core lib that they ship. So like, you know, it's. I don't want to knock it. It's a cool effort and everything. And one of the... It's an open source effort versus what Meadow is offering, which is more of a... It's a paid platform because the platform overall comes with the board. Yeah, there's a lot of open pieces to it, but like the core OS and everything is closed source still, I believe. So yeah, Meadow is not fully open source, but there's a lot of parts of it that are. But yeah, in Meadow framework it's completely... It's a funded solution. So it's got... It does it have all of the tools out of the box though? Like does it have? Is it is it full net standard net eight? I think I think it's not so there the runtime is still based off of like the old model model runtime. I think they have plans and are looking at like how to get to the net model runtime eventually. But currently it's kind of like in the same space that Xamarin was for the most part, but you know net standard 2 .1 works on it. If you do a new... Yeah, yeah, all that good stuff. So it's .NET, right? Like it's all the things that you want from .NET. So that part is very cool, again, versus Nano Framework, which is like kind of .NET Lite, early days .NET. But the cool thing about Nano Framework is that you can run it on things like an ESP32. So it is compelling in that sense. But, you know, at the end of the day, it's just not... Jonathan Dick (32:49.07) Fully there like you're still kind of making a lot of sacrifices. So I played with it a bunch I've used it here and there for various things never kind of fully to completion on a project but You know gotten pretty far along with it and it is neat one of the other things that they seem to be struggling to kind of make happen is like over -the -air updates and stuff, which is something that meadow Has more recently only but you know has gotten working. You can do over -the -air updates from you know, technically from like an arbitrary server that you set up, they're kind of rolling into like the meadow cloud space too, where they'd want to, you know, do the software as a service solution for you there where you can manage your like your fleet of devices and everything, which is, is cool. But you know, it's a, that's pretty much all of these IOT platforms end up going. Anytime you've ever worked with a company or piece of software, a piece of hardware that was just a piece of hardware, they end up. being like a full tilt SaaS platform at some point. Like I think Estimote, do you remember Estimote? I did a lot of work with them. Yeah, didn't everybody have those cool little beacons? They look like little rocks. Yeah, they were pretty cool, right? And for the longest time, they were like the Rolls Royce of beacons. They did temperature, they did lumen checks, they did, I don't know, you name it. It had like every flipping sensor and the battery seemed to last forever. It was protected from moisture because they, because of the rock, the big plastic they put on it. And ultimately I think they're still in business. I haven't checked, but they, I don't think they sell their beacons anymore. And it's more of like a platform now where they sell, services, right. Which I hope, I hope Meadow stays on both. but they've, they've invested in building a platform first. So everything else is kind of. You know, one, and I think that's kind of, you know, where Meadow's going with it in a sense, but like they're building the, the ecosystem around it too. Right. Like one of the cool things that, that they've done lately is they've extended their set of libraries and stuff to work on the Raspberry Pis, to work on desktop. So, you know, Raspberry Pi is a good example because it has like GPIO pins. Now it doesn't have all the things that like a, Jonathan Dick (35:10.126) a metal board does, like there's no analog to digital converter. So if you want to do that on a Raspberry Pi, you've got to add that into it, right? Which you certainly can. And they've got drivers for some of the more popular like converters that you might find out there. So they're trying to build up this ecosystem of like, you know, here's the OS. We definitely want to sell you our board in our OS. We think it's a compelling solution. But we also have this open ecosystem of libraries of You know, how do you interact with GPIO? How do you interact with like different displays and stuff like that? And so that's, that's, that's one of the ways that they're kind of working at it, right? Is, is trying to make it a compelling platform for that. So you can bring all of those libraries and display drivers and stuff. If I want to hook up like an LCD displayed in my Raspberry Pi, you know, I can do that through the same APIs that I'm using for building on Meadow itself. So for, for me, like that, the cool thing is like in theory, I could like be iterating on a Raspberry Pi for my pool stuff, interacting with the hardware. And then like eventually that same code just runs on meadow, which is kind of neat. And you can profile it a bit too, cause there are cases where you're probably going to find you need to stay on the Raspberry Pi, which I'll get to my, my topic on that in a second. Cause there are cases where you're like, okay, I need to stay put because a microcontroller just is simply not going to do. Right. Either it's not going to do it fast enough or it's not going to do it. be able to handle all of the memory and just the flood of data that can come through. Now, the one case I did want to make is that with a Raspberry Pi, and this is kind of a neat thing, it's an interesting topic because it's one that you've probably got coming at you is, I want to run that web server. So it's cool. You've got one in C. Not sure how flavor rich it is. Not very, but it doesn't need to be. And it's good because you don't need a phone. You can just hook it up to your Wi -Fi and now you can connect to the device. You don't need any app. Right. It's just, it's runs there. So that's, that's usually the case, right? So with, with the raspberry PI, I can run full ASP .net core and do all of the things. Right. Now you can't do that with a Meadow, but Meadow has, I I've noticed they've done a good job of bridging that stuff. Right. So they have like a BLE server now. you know, that does all of the things they've got like a, I don't want to call it feature lacking. It does what it needs to do for a web server. Jonathan Dick (37:36.814) I think it has like web sockets so you can do, you can do the basic stuff. You just got to do a little bit of leverage. So if they ever get to full net eight, I'm still not sure. I think ASP net core is probably too fat. That's pretty heavy. It's unfortunate. I think they need to find a way to tune it down because ultimately being able to run a good chunk of those things in places would be, would be awesome. It'd be pretty cool. Yeah. But. you know, even running on a mobile app like a mat dot net Maui, I would love to be able to run Kestrel or ASP net core, but I don't think we're going to get there. I mean, you can stand up little things, but yeah, it's, it's, that's, that's heavy. And the use case sometimes is a little bit awkward on mobile anyway, but on the, yeah, on these things like that would be pretty cool to do. And Maybe it's a matter of time, right? Like these things keep getting more powerful. I think it's interesting, like, and I don't have any knowledge of anything going on or not, but like the Meadow Boards, they've been around for a while. Like they've got a, you know, I forget some, you know, Arm Cortex chip in them. But like it's years old at this point. So like in theory, like maybe that gets updated in the next, I don't know, few years or something. And maybe we're at the point where we get more and more speed. Like they're certainly not fast right now, right? And... And running .net on them is also a heavy thing to do in general too. So like, you're not, you know, going to win any performance races here, but if you can make the basic stuff work, like that's, it's pretty cool. Now I have, I, I, I've done quite a bit of IOT. So there's one personal project that I've been doing for, for years. I used to work for a company that did like fleet management and they had like a board that kind of did basically everything. You plugged it into your OBD. Or if you were in a truck at J 1939 kind of plug, it's a big beast or of a plug. And what it would do is it would continuously read the engine data. Now I have one that still sits on my truck, which thank God it does. Cause it tells me the software in my truck. I've told John this, he's already smiling about it. Cause he knows that the swear words that I've let loose on it, my truck can actually kill itself. The software gets stuck in a loop. Jonathan Dick (39:48.814) And we'll actually fry that. Like it will drain the battery to nothing. So you go to turn it on and the damn thing is dead. So it's done that twice. Now I have this software now running that's that I've got an alert set up that tells me when it keeps dropping so I can go out and unhook the battery and plug it back in. So I don't need to charge it the next day or boost it the next day. And it saved me now about three times. I feel like, I feel like you got to figure out how to stick a relay in there that you can control somehow. You can't, the damn software blocks me from doing that. So in any case, unless I put something on the battery itself, but we're not going to go that far. But the case where, I would love for that to be a microcontroller versus this board. It kind of ended up defeating itself because, some of these vehicles now can give up, like they've got pretty, I don't want to say hefty computers, but they can spin off so much data and just flood the thing. A lot of these little dongles that you get, they don't necessarily read the data. They just kind of let the stream go through, but they're picking out just key parts, but they aren't processing it. So what they'll do is they'll feed that to a phone and they'll just pump the data through. But I wanted this thing to be on board because I don't want to leave a phone in the truck. I don't want to have it connect because it can't get from my garage onto my network. If it was on John's property where he's got 18 Blu WiFi units all over the - Yeah, see, there you go. The aliens still see your house from space, man. I'm telling you. That's fine. It's great. But my truck, I don't want it connecting to Wi -Fi. So I've got a little LTE thing on it. It will read all the engine data. So it's telling if I'm driving like a turd, right? So it keeps reading this data, but it's also checking GPS. It's checking if I'm driving like a maniac. So am I hitting the brake? Is the accelerometer flying off? Right. So it's, it's doing all these things from my past company because I wanted to learn to do it myself, but there's so much data coming in and the accelerometers fly around and it's got to do all this processing that doing it on a microcontroller just not, it's not going to happen. It just even, even the. Even if you run it with raw C, you know, whatever. Yeah, but you need, you need all of those threads or you need multiple different programs running. Jonathan Dick (42:10.542) because it's, it's checking all these sensors and computing it all in real time. So for instance, I've got one, I wanted to learn, like if I'm turning a corner harshly, right. So if I'm in a vehicle and I turn hard, okay, I can check the relative crank on the steering wheel and the speed, you know, your accelerator pedals down, you know, 40 % and your speed is like 60 kilometers. You know, I can guess that you're turning that corner wide, but it could be like one of those really wide turns. You're going onto the highway, right? So I wanted to get an accelerometer in there too, and those sensors can also give off like just nonstop readings, right? Yeah. Like several times, several hundred times a second. Do you really let them go wild? So, you know, it was like, okay, the accelerometer and the, the, all these other sensors are going nuts to the right side because they're being pulled. You know, you're probably taking that corner, you know, on two wheels, like Flintstone style, right? Yeah. so I did all those things for years, but it was not something I could do with a microcontroller, but my Raspberry Pi, so it was a Raspberry Pi 2. Was it like the smaller one? Not if you know, no, it was, it, it, they just wasn't quite enough to use on the, what do they call those? The two zero, the two. Yeah. The raspberry zeros, not quite enough to, I think the, the new threes that they have. I think has enough juice. I could probably run it quite well, but even sometimes a raspberry PI, depending on I've tested a few times where I'm driving like an absolute maniac because I know which operations are the heaviest. You can still feel like if I touch the raspberry PI under the dash, you can feel pretty hot. but it's, it's, it's still, I don't want to say it's IOT in the sense of it's a microcontroller anymore. It's just an onboard computer that's got the power to be... But it's in that space. I consider that all kind of in the genre anyway. And that's just a passion project. It's not really useful other than telling me my truck's being stupid or the truck's software's being stupid. Go fix it. Well, what I was getting out of this is that you've been working on this and maybe will continue to up until the point where your kids are old enough to drive. Jonathan Dick (44:28.974) Well, funny enough, I did have this on somebody's car many years ago. It's because I've been building this for years, right? I've got, I just keep iterating on it and upgrading it. And it was, I was looking at, you know, how they have those insurance plugs. Now you can put an insurance plug in that same thing. That's a, it's a board. It's not really a, it's a dongle, but it's, it's a little bit more than just a dongle. So it's got to do processing and it tells your insurance company if you're going over, yeah. you're driving like a maniac. I think they stopped doing it because there was too many liabilities, but I was checking the realism of putting it on my car and somebody else's car. Well, my car was fine. I drive like an old man for the most part. I go fast in some spots, but I knew what the insurance companies were looking at. Now on hers, yeah, I don't think we're going to put one of those dongles in. Harsh braking, right? So the brake would go from like zero to, to 80%. in like a split second. So you're like, okay, well you need, you probably don't want to sit on somebody's ass, right? That tells me you're sitting too close to somebody. your software is flawed. I'm like, I've been testing this stuff for years. It's been fun, but again, it's a passion project. It has done some cool things for me and I don't know. I'll keep it. But it was, it's the whole, yeah. I mean, there's something I think it's special about. working in the space where you get to kind of interact with the real world and programming, right? Like I guess phone apps are, you know, kind of that, I guess, but I don't know. It's not the same. Like I think there's just something a little bit different about it. And that's what's driven me to want to do this too. Well, and the fact that like, if you want to put in a pool automation system, probably you're looking in like at least $3 ,000 to do it. And then, you know, it's like, well, but then I can take a hundred dollars of parts in a bit of time and have the same thing or arguably better. Right. And I'm sure there's a service that I could buy what I'm doing now. Yeah. Streams to their home and you pay a subscription fee, et cetera. but I just, I wrote this on my own. It's all C sharp. It's all .net. It's it's .net eight. So I've been updating it. That was the one cool thing when I went from old older, net net. Jonathan Dick (46:48.398) standard era to like net like net core. Yeah. The memory consumption and speed is that there was some big things. I don't think people realize between net FX and net core. Yeah. Just how big of a difference. Well, and that's where like the efforts continue to happen, right? Is like every version, like there's, there's always the performance blog posts. So like we did all these things and every time I kind of read those, I'm like, That's kind of amazing that, I mean, it makes sense, but at the same time, it's kind of amazing that there's still so many things to improve to make everything faster. Right. So you're benefiting from that. When you got down to net six though, my God, the difference between especially memory. I don't want to say the response time. It's not the processing time might be huge, but really it was the memory usage. Yeah. Which is, is maybe an interesting thing for like, you know, meadow boards and stuff too. Right. It'll be be kind of curious to see as they look at getting onto like newer, you know, dotnet runtime stuff. Like do they have, you know, some of those wins too? And that kind of translates that. That would be nice. Kind of why you think about it too. The garbage collectors probably gone. I know there's like a whole bunch of garbage collection improvements. Yeah. Garbage collectors like huge kind of drain overall. I'm not sure. Does, does Meadow deploy a garbage collector? They must. Yeah. Yeah. Yeah. Okay. Yeah. That's, that's, I think one of the challenges. I don't think the nanos framework does. I don't, yeah, maybe not. That would make sense. Cause they were lacking a lot of things. Ultimately having a GC is probably one of the bigger, I'm pretty sure it's one of the bigger things that has to be moved over. Yeah. With your program, you also have this huge underlying, the BCL and the garbage collector and the garbage collector is just a big mammoth. You know, it's got that pausing operation. used to happen every 400 milliseconds. goodness. I don't even know. But yeah, I know it's, it's yeah. And so that can, that can affect that kind of stuff too. Right. So the, I mean, the word where we are today in the space is, is super interesting. one of the things that I was going to mention too is like, as I am moving, so this, this is the season that I get to meadow finally with my pool automation, like, Jonathan Dick (49:11.79) Well, last, sorry, last year I did technically too, but I had a lot of problems with like some stability stuff and it wasn't the most pleasant experience. And I tried, you know, rewriting things a few different ways in terms of how I interact with it. Like, you know, originally it was HTTP server. Then I moved to MQTT thinking that might escape some of the leaks and stuff I was having issues with. You know, at the end of the day, like that, that didn't really pan out any better. so I'm back to HB server. but one of the things that I did last year as well, that was really nice is, you know, the way I interact with it now isn't just through my app in, you know, the, the special screen I had in the app actually wrote a home bridge plugin. and yeah, so it all integrates with my, Apple home kit set up, right? Yeah. So home bridge is like the thing that, you know, if people don't know what it is. You know, it's like open source implementation of HomeKit stuff and there's hundreds, if not thousands of plugins that people have written. So if like the device you have doesn't work with HomeKit, probably somebody made a HomeBridge plugin. And so you have to run the HomeBridge like instance, right? And I do that on the Raspberry Pi. And once you have that, you can install all these plugins. And so I made a plugin cause it's really not that hard to do. And I've been iterating on that a little bit more this year. So at first the plugin, because I had the heater only those two modes, right? I had a switch that had like two sub switches in it for HomeKit and that worked fine. Like great. And I can control it that way. But this year I'm like, no, like let's move to the thermostat. And so now I have in HomeKit, I chose my pool heater shows up as a, you know, as a thermostat, just like it would your thermostat. Yeah. And you control the temperature and stuff. So I wired up a thermistor is the name of the sensor, technically the type of sensor. That's like shoved into one of the pipes in my, my pool's, you know, plumbing system. It's connected up to my, my meadow device. So it reports back to the temperature and I can then start changing the temperature to hit the target that I want. So I did that. Jonathan Dick (51:30.542) I added a pressure transducer is the name of the sensor that plugs into the same port that I would have just a normal pressure gauge like and read it manually, you know, like an animal. And so now it's plugged in, it connects back to the Meadow board and that will start taking pressure readings for me. So I monitor that as well. And one of the weird things of doing this with HomeKit was trying to like figure out what those things map to, right? Like there's no... like categorization for a HomeKit device yet that is, you know, pressure sensor. So I think, I don't remember what I, I think I mapped it to a humidity sensor. You know, it's all just numbers. It's a little weird because like in the app it's like the humidity is, you know, this, but it's like, no, I know that's the pressure, not the humidity. It's fine. So I did that. And then what was the other weird one? for the pump modes. I think I did I do those as switches as well. I think I did. I think it's just a number of switches because there was no like, you know, there was no pump device either, which would have been nice to be able to say like show up as a pump. But yeah, they mapped all right. And the cool thing is like, yeah, at the end of the day, I can I can control all that stuff now from HomeKit, which is pretty awesome. Or from Siri even. Now there was one other project you were writing. I want to bring it up because so those who don't know John, John is a huge coffee snob. right. I know. yeah. I mean, his, his coffee weight machine, I'm pretty sure measures, it measures the atomic weight of a hair. And you know, the drip thing that goes into his coffee is, it looks like a shower head. The one that he's tried to convince me to buy, for oodles amounts of money that makes magical coffee that the leprechauns drink and all that stuff. Anyhow, you were working on. something a while ago for that. Yeah. Yeah. So, you know, to explain it a little bit better, which was also on a meadow. I'm pretty sure that was on a meadow. Yeah, it was on a meadow as well. so the, the idea was if, if any, if you've ever made good quality coffee, you would know, and so Alan doesn't know this, you would know that you, you weigh the coffee. and then you have to figure out to the atomic weight. It's just to the gram. Jonathan Dick (53:55.822) Like, let's, it's not even to the - How much is that scale? It's to the like the thousand, thousand? No, no. Even like the scale I use, like I think the one I use right now is to the tenth. But I don't measure it to the tenth, like plus or minus a gram is fine. However, when you're making coffee, what you need to get correct is you need the right ratio of coffee beans and water. And so there are like these kind of golden rules. Like generally, I think that the standard is one part coffee to 17 parts water. So what my laughter right now, by the way, that's fine. Yeah. And I'm going to just keep on like, like I am, which is totally serious about this because it's a serious, it's a very serious subject. And so when you're measuring this out, what I kind of found it and most of the time now I kind of know, okay, I'm going to use always this amount of beans in the morning and I know how much water to put in, but. It can kind of vary. And so if I, I just wanted to pour beans onto the scale, into the cup on the scale, right? And then based on that amount of beans, I need to figure out how much water I want, I need to add. And so this thing would help you go through the whole process. Basically, the idea was this scale would, you would, you would put your container on the scale, you would tear it, right? To get to zero out the weight of the container. You pour your coffee beans in. When you're happy with the amount of coffee beans you have in there, you would press like the next button. And I designed even a little like a gooey interface that did all of the showed you the weight and showed you like what step you're on and had a little like dial and clicker button to go to the next step. And so you'd go to the next step and it would say like, okay, you know, you had this many coffee beans, like go grind them up, that's fine. When you're ready, when they're in the... coffee device and you're ready to start pouring water on, there's stages to how you do this. There's a stage called blooming, which is you want to pour some water on, but then you only pour some on and you let it rest a bit so that the hot water, that initial pass kind of like releases some of the CO2 from the beans that you don't really want to impart flavor upon of the coffee. I don't. Jonathan Dick (56:17.39) But you know what's kind of cool is science, when you do this, when you have your weight, if after like the 45 seconds or whatever you're going to wait in blooming, the weight goes down. You can tell the CO2 has been released. Yeah. It does by like sometimes by like a gram. I'm just I'm imagining I think it's back to the future, you know, where he goes to Doc's house the first time and he's got like that machine that looks like it came out of like, do you remember that board game? How did it like catch the mouse? Yeah. You're most trap. And it was like the boot kicks the thing and the thing comes down and pushes a marble down. That's what I'm envisioning you're building, right? It's going to, because my, my rule for coffee is I just want to put a cup in and press a button and I want it to the temperature. Yeah. John hates it. He's like, it's slime, but I can get a coffee in 30 seconds as opposed to, but like you press the button. If it could grind the beans and weigh them, because apparently also getting a black and decker bean grinder is against the law in John's world. But that's what I want. I want a machine I can press the button and grind the beans. And you can get those, but they all just kind of suck. And do that little rain head. I mean, one of these days I'm going to try this, this magical coffee of yours. Yeah. Yeah. So, so you do the whole thing, you do the bloom and it times, it counts down the timer and it tells you like how much water to add. based on the calculation of how many beans you had just for that stage. And then once you finally get to the stage where you're actually like doing the rest of the brewing, which is, you know, 45 seconds later, so like we're talking forever, it kind of tells you the pace of how much water you should be pouring on until you get to the final amount. So the idea is like it's this guided experience that you don't have to like do the calculations yourself. You don't have to think about it. You're just following along. So it's like a smart scale. But you know, without the, the, Wi -Fi and stuff. So it is pretty cool. It worked great. The only thing that I had a problem with was the actual load sensor I was using for the wane itself. You couldn't get an atomic scale for it. I couldn't. The problem was like the I had one load sensor and it you really want like four or however many you need to like distribute like have it on the outside of the scale so that. Jonathan Dick (58:43.918) The thing in the center is better measured. Like what I was finding is the weight would drift for a number of reasons. One, maybe the sensor was heating up to, you know, depending how you shifted the weight on top of that sensor would vary a bit. So what I've never gone back to do, and I just should do it, is I need to redesign. So like I 3D -printed, I designed, you know, in like CAD and 3D -printed the actual like scale parts, right? so I need to do is figure out, okay, how, how, what load sensors I'm going to use, where do they need to be spaced out? They have to be equal distance from each other. So I have to go back to CAD after like recreate the kind of shell that this all sits in and then wire it all up again. And like in theory, like it should be good to go. I just, I've just never done it. It's one of those ones that I never get around to doing again. Well, it was a nice, it was a nice little helpful project, right? Yeah. There was, there was one project and I'm going to, I'll cover this. This will be my closing. is there was one I had to, I think I remember talking to you about this is during, during the end of COVID. So we had shipping problems in Canada for about a year after COVID pretty bad, actually significant. So of course I had a fridge relay that decided it was going to die at that point. So all of my food in my fridge was freezing. Now it was the middle of summer. So, and, and freezing food while people go home, it's not a big deal. It's like a frozen solid. you know, milk is pretty hard to use and food does go bad if it freezes and on thaws. So I had to go and buy a new fridge. Not a big deal. These things happen. But because there was shipping problems, it was going to be seven days minimum seven to nine days, I think is what they told me to get a fridge. and I was like, okay, well, you know, we're not going to eat out every single meal. And it was a nightmare. I was like, I don't know what the hell I'm supposed to do. Well, it wasn't that basically there's a thing on the fridge that kind of just opens and closes like the motor. There's another one that turns on and off the motor, but you have no control over that. Right. And this board, I don't know what was blowing on it. basically it just to kind of opens and closes this, this vent. So I found a way to kind of just trigger the button on this, this blown board. And what I did is I, of all the things I didn't even have a good temperature sensor. I had a meat thermometer. Jonathan Dick (01:01:13.006) This is a meat thermometer sensor. I still had my Raspberry Pi because this was something I had to come up with quick. I didn't want to bother farting around with a board because I needed something that was going to call home or I could put an LCD on it. As it is, I had something that I could call a web server into and say, yo, this is what's going on, et cetera. But what I did is I was able to get this meat thermometer spliced and put onto the board, onto my Raspberry Pi. and start reading the temperature. It was pretty good. It's not bad. Those sensors are pretty decent. I had to find a good spot for it. The problem is fridges have different areas of temperature. And there's also a thing of you have to catch the temperature before it gets there because it's cooling and rising or dropping, but it's on like a scale. So you don't leave it on until it gets that temperature because it's going to miss. And you don't leave it off until it gets that temperature because it's going to miss. So you had to... I had to build this thing again. I built in C sharp, the ports read the temperature and all I would do is, is turn the switch on, turn it off and measure the temperature with a meat thermometer in my fridge. And actually the first iteration, sorry to go back. The first iteration was on a smart plug. I turned the fridge on and off. I had like a little smart plug. So I'd call their API and turn the plug off. I eventually got it. So it was, it was wired up to the, to the button on this blown relay. But that was kind of just quick ingenuity. So my food wouldn't freeze and it would also still work as a fridge. During that, I didn't bother with the freezer. The freezer stuff just like a rock solid, but it ended up working. It was a fun project. It was, and I had to, the turning the fridge on and off wasn't, it was close. It was close, but it was, it was too much of an extreme. Yeah. And so once I got it wired up to the button, it was enough. It was almost running pretty darn close because I've, I kept the thermometer in when I got the new fridge. I mean, there's some things that obviously they've perfected the science on. Sure. I had a single sensor, a meat thermometer sensor. And like an afternoon to make it work before your stuff all went bad. Right? Like exactly. Well, the first load did go, I woke up in the morning and you could knock somebody out with a bag of milk, but yeah. Jonathan Dick (01:03:38.222) You know, these are the kinds of things if, if, if you've built a mobile app, you could build pretty much anything you want with a standard sensor. Cause it's just, it's not hard to do a checkbox. It's almost the same damn thing. It's an on off in an IOT world. Yeah. It's, it's all really quite simple. If you're getting a temperature sensor, just think of somebody typing in a numeric value in a form really rapidly and you're responding to it. That's it. That's it. It's so cool. And that project, I won't say it's a passion project. I still have the code. It was more like a, where's your beep button, John? It was kind of one of those, okay, let's get something done. And it worked. It got me out of my kids whining for a week. And sometimes... Sometimes that's the difference, right? Well, that's a cool learning thing too. And I think this one is actually a really nice segue into our package plugin or product of the week, which I think, I don't know if you put this or I did, I don't remember. But Meadow, I did, okay. But Meadow desktop, because like if you're interested in this stuff, you don't necessarily need a board today to go start thinking about how you would do this. So Meadow has a package you can install into a desktop app. Like a WinUI, WPF or MAUI Windows app. I don't even, I'm not sure which one or not it works with. I know it works with at least one of those setups. And same with Linux, like a Raspberry Pi or just Linux, right? Now, yeah, you won't be able to like do the GPIO interaction unless you have like either, you know, the right USB board that they work with for the desktop stuff or a Raspberry Pi or whatever. But you can start to go look at like what... what does it look like to code against these APIs, these drivers and stuff? So that's, that's my pick of the week. Don't they have an emulator as well? I thought they had like a thing. Yeah, there's like a, you can emulate kind of their graphics APIs and how that would, you know, draw out on the display, but see it on your screen in a windows app to iterate quickly and stuff too. I could have sworn they had like a simulator. So even if you don't have, yeah, I don't know. Maybe not. Jonathan Dick (01:05:50.414) But anyway, go check it out, get started, and then you can go order some of these things for not that expensive if you're interested in getting into it. And then you start ordering all the sensors and everything. Those are usually super cheap to get to. It's just like, what do you want? What do you want to use? So go check it out. Toys. Toys. Toys. It's a lot of fun. I love this kind of coding against it. And it's kind of simple, too. It's a simple, fun coding. Yep. All right. I think that's all we got for this week. As usual, please leave us those great reviews, especially now that we're on YouTube. Maybe you can actually like the YouTube channel thing. I don't know the terminology yet. We'll get it right next time. But hit like and subscribe. Hit that subscribe button. Like us on the YouTubes and the TikToks. That's right. We're not old coders at this point. But check us out there. Leave us the reviews. Drop us a line on our website, gonemobile .io if you have feedback or suggestions or whatever. But yeah, thanks Alan. That was a lot of fun. All the internet of things. We'll see y 'all later.