All right. Hello everyone. We are back for the deep dive and it is ready to go I think Looks like I do see sound inside OBS So I think we're probably good on that, but if anybody is there already on the twitch or YouTube I don't mind. Please give me a quick sound check in the chat if you would Let's What we're doing that let's pause this preview How's it going Tammy and Dexter? Thank you Let me pause this one enable disabled. Let's do that and let me put the chats in front here All good on the sound. Thank you. Appreciate the heads up there Okay, so Yes, welcome welcome back to me. I was off last week. Thank you again to Scott for filling in on a deep dive I am back now though and getting back into the swing of things As an introduction for folks that might be new. My name is Tim and I go by Fumiguy on GitHub and discord This is the deep dive stream that occurs every Friday evening or at least most Friday evenings at this time We are taking a deep dive into circuit Python We're either going to be working with circuit Python core or circuit Python projects or libraries relatively advanced, you know level stuff It's not necessarily a beginner tutorial or anything like that. We're really You know as they say diving deep getting into the weeds Playing around with some of the more advanced stuff If you're interested in circuit Python check out circuit python org This is the website where you can learn more if you don't know what I'm talking about I'm a very very, you know brief high-level Overview version is we have this version of circuit Python. It runs on microcontrollers Which are basically just these tiny computers. There's a bunch of pictures of them here on the downloads page We're running Python code on these devices that can interact with other Components connected to them. So some of them have lights some of them have, you know Keyboard switches some of them just have a bunch of pins for you to connect whatever you want We're writing Python code that runs on these devices and interacts with all those pins and all the hardware that is connected up with it In circuit Python org is where you can learn more and Lastly, I will say thank you to Adafruit and if anybody wants to help Support the circuit Python project one of the ways you can do that is by purchasing hardware from Adafruit So Adafruit is a hardware and software company based out of New York They are the ones that are paying the folks who work on the project full-time and some folks like me who work on the project part-time They're paying us to work on circuit Python in the libraries and the documentation and the projects and all these things around it So thank you to them and thank you to anyone who wants to purchase hardware from them for helping support Them and those of us that work on the project So getting into today a brief housekeeping note I'll be a little bit shorter than normal today. Usually we go around two hours sometimes a little bit longer than two hours Today, I'll be cutting it off a little bit short probably about one hour 40 or one hour 45 something like that Got a head out to Dinner with my wife and family this evening. So I'll be doing that will be cutting out just a little bit earlier than normal for that So that's just a heads up to let you know that we'll be ending a little bit earlier than Sometimes we have in the past In terms of what we are actually working on today I want to play around with some stuff that I've been tinkering with lately. That's around memory Measurement I have this project here. This one has a version of one of the things I've been working on This one will Well, what this one does is it it clones a library a circuit python library It will clone it it will build the MPY files and then it will print out the size of the MPY files As well as the size of the strings contained within those files So let me run it here right now. We have it pointed at this BLE I barbecue Get this is the repo for this particular library. So I'll run it pointed at that one just to give you a look at what this does So and it does all this when you run it So it's going to clone that project It is going to build the bundles for it which bundles meaning the library bundles the MPY bundles It's going to you know compile it to MPY It's going to spit out this stuff into a zip file or I think it's actually just a folder that has a zip in the name I don't think it gets zipped yet it Bundles checking s3 I don't know what this one is doing. This is something inside of Circuit python build tools, I guess Um, it's looking at the s3 for this Oh, okay. Okay for getting MPY cross. I see this is downloading MPY cross. I guess Um Says it zips it. I don't know if it actually does or not. I'm getting folders that aren't zipped It well, yeah, I guess maybe it is zipping it But I'm just using the ones that aren't somewhere down here towards the very end after all the rest of the stuff is done Right here. We have the bits that I added to this which are MPY file size. It prints this out in bytes It prints out strings output size. So it runs the unix string commands, which I think it was dan Maybe danh Who brought that up during the a recent circuit python weekly meeting when we were talking about memory size of libraries in the weeds So I was not familiar with this command, but this is a unix command. You can just run it on a file and it will tell you Um, well, it will output all the strings that are in The binary file. So like let's go to the terminal. I'll show you what this does Uh, we can come back out of here Okay, we can go back into there We can go into, uh This one inside there also Inside there Okay, we got that mpy file We can say strings on this mpy file And it outputs all of these so these are all of the I don't know utf 8 or or ascii or something these are all the strings I guess that are in this binary File some of the data in this file is not like legible strings But some of the stuff in this file is legible strings In our case, this is things like variable names like actual literal strings in the code It looks like comments and stuff like this. Like I think there's a comment that has the repo url So we're seeing that there All sorts of names of different stuff just like all these different strings are in there So that's the command that this other one is running. It gets all these strings It writes those out to a file tells you how big that file of all the strings are and then it gives you the percentage So in this case, it's saying In this ibbq mpy file It's 1899 bytes total. There's 995 of strings And that's a 52.4 percent You know, the strings occupy 52.4 percent of the mpy file So I don't know what numbers are good. What numbers are high low bad good any of that stuff yet But eventually this will hopefully help us say, you know, like, hey Maybe this percentage is too high for this library Maybe we need to make a pass through and try to like minimize some of the variable names if we can Avoid repetition of the library name inside the variable strings You know, maybe other things to try to reduce the amount of string content in that file because these This essentially will consume memory when it gets imported on the device So ultimately that is what we are trying to measure here is how much memory is a given library going to use on the device So You know, this is kind of a proxy for it. This is the mpy file size, which is not exactly the amount of memory it's going to use Um, but it's a good start. It's it's it's letting us know something that's going to be generally kind of Tied to the memory size Um, how's it going paul? Happy friday to you as well. Thank you Uh, thank you see grover and dexter um On the note about the sound that echoey, I don't know if I can Anything like about that. Let me just double check that we have the right microphone Uh, and I do have this one is muted that's on Just be condenser. I think I got the right microphone hooked up if it's unbearable. Let me know I can try to tinker with some more stuff But if not, we'll try to power through Um, so that's what I've done so far is you basically can just choose whatever library you want It will do all that building and and it will kind of run this little report on The memory size so we could switch it up to this one run it again and it will output the stats for This si what is this 11 45? This one comes in a little bit smaller. It's only 46 percent of strings on this one 76 6 bytes um The next step Is to move this into actions, which I have actually done already on I have my own copy of this repo Uh, and I set up a new actions, um branch on that repo that adds essentially this This process to the actions so that we'll get printed in the output Um, so let me pull up that and then we will look at what I want to do next. So what I'm going to work on on this Stream So here is actually the output from one of the branches. Uh, so this is in my fork I think it's on a specific branch. I set up a new action called check sizes And it basically runs that little utility that I just showed you it does all the same stuff Although in this case under build assets, it's actually already building the np y files So my stuff doesn't have to to do it in that case. It's already actually built We can just run the check on it here. Uh, and so that prints out this information right here Um next thing I want to do though, which is going to be a much harder bridge to cross is I want to do some On device testing I want to like import this library on the device And see how much Memory it takes up by using gc dot mem, you know mem alloc or mem free Before and after we import it and then get the difference to find out How many bytes of memory that it actually consumed on a real device when it got imported You know, ultimately I want to try to figure out a way to get that information into actions Which is certainly a complicated problem, right because we need a device somewhere plugged into a computer that actions can kind of send this You know job out to to say hey, uh, here's this np y file. Please load it on the device Check how much memory it used and then return that value back to me. Um You know, that's a bit of a magic black box component that I don't have a super clear idea of the whole way to do that I have a couple of starting ideas. Um Brainstorming like ways it might work, but you know, that's kind of the the next piece to this is like Maybe we figure out a way to do on-device testing inside the actions Um, you know utilizing devices plugged into volunteers computers So uh in my mind the way this works is you would plug, you know If you want to be helping us in this way You would plug in a device to your computer to a computer that you just can leave running Either a pc or a raspberry pi or something like that You plug in a device to that computer and then you run a script that will kind of like listen for New jobs to come in from the central server It'll send out a job to to those client devices. The job will say, you know, try out the simpy y file Tell me the size that you got back Your local computer that raspberry pi or whatever it is it will do that check It'll send the size back to the central server Central server will then send the size back to action. So um, this is kind of a complex thing but that's the the You know far off goal, that's the the the end goal I want to try to get to is like Start us working on on-device testing in an automated way as part of the action. So First step for that is let's do the memory test specifically because I don't have the code for that yet So that's what I'm going to work on right now. I have this code that's building the mp y's and measuring the mp y size The next thing I want to do is Just load an mp y on a device and Run some commands in the repl figure out how much memory it takes up on the device and then print that out Uh, so this will be on device ram check Yep, we could go ahead and add that Uh So we need serial because we need to connect to the repl python serial example Okay Why don't we let's go to a search engine that actually Works introduction pi serial Open the first serial port real port They're very old does this matter Yeah, this is pretty good So first thing is let's just get some repl action going here We need to be able to talk from this script into the repl on the device. I have a device plugged in I don't know my camera setup today. It was giving me trouble earlier Um, so there's nothing really to see anyway. I'm just going to be interacting with the device over the uh You know through the serial terminal anyway, so you can see my terminal. There's really nothing to see on the device Uh for today, so we will be uh, a cm zero probably ls slash dev tty a star Oh such file dead of dead of let's do dev like that cm zero So right now this will just go in a string eventually we'll figure out how to target it how to make sure it's a circuit python device all that stuff Um for now, this should be good though Connect to it, uh print the name. I yeah, we can do that. It doesn't really matter. We need to figure out how to send, uh control c Python serial Send control c there should be like a code or something that we can send, um like an escape sequence or Kind of binary representation or key event representation. How do we do that? Let's see let's send Yes, something like this This equals control c for some reason. Oh my goodness really We do that and then uh, we want to write afterwards. I mean read serial dot read Uh Read line maybe See while true Serial dot let's uh say red equals Serial dot read line If red is not none uh print red So Control c we probably will need like enter um We'll probably need enter Is it gonna be like slash r slash n both? Character three perhaps Yeah, could be I'm not familiar with what this code This is ascii or I don't know how that works exactly with what this relates to. I remember doing this from android though I knew this code existed because I sent it from an android app before um So let's try pressing control c twice because I like to spam Control c twice when I go into repl I think Second one does something I I think it just asks you to press any key or something the second one Does that something like that? I'm not sure the exact way it works, but Uh, let's also just write uh print Hello world See if we get that far And then we're gonna read so We should read those lines back out Um, I don't know this might print the device, you know version or whatever a bunch of that boot info I don't know how exactly that's gonna work, but let's give it a try Unicode streams are not kind of supported. Please encode the bytes Do you think this means something more than this or uh, no, okay? Yeah, uh Yeah, okay, uh, we got this I don't these didn't I don't think these worked, right? Maybe we don't need those Let's do space We didn't get the print hello world I noticed Um So we also I guess what we should do is like try accept keyboard Interrupt this close Actually pass Close out here that make a difference I feel like this catches more cases, but I'm not positive. Ah, okay, but the thing is we're still in We're still in uh I mean if that worked last time then we're still in the repel We never went back. So we actually need to find control d also I guess is maybe four instead of three Ascii value for control c is zero x three Control a is one b is two and so on. Okay, so it is probably four for d So maybe we should actually do uh control d first Then control c That way it'll work even if you're already in the repel Stop and rerun Oh, we still didn't get it though. Hmm Let's put also Print closing. Let's make sure this is actually working Okay, that does work. We are not getting any There let's take a look with uh to and see what's going on Yeah, okay.  I wonder if uh, we need to read Maybe we need to read after we do this. Maybe we're like if we write things over and over it's like Not executing the next one. So I think this doesn't return might be our next problem Yes, if there's nothing to read this doesn't work Has data or something we need a way to know We need a way to know if there's actual data It goes by a timeout probably like this Timeout uh, is this seconds milliseconds? 1,000 maybe 500 maybe 0.5 Now this prints too much. We don't want these Read with oh, you can also read with timeout Is it in read line two or only when you initialize? Oh, I can't click this. I think it didn't send cheer up, sir. I'm pretty cheerful um Check the input buffer for content make sure to read in binary I don't know how to check the input buffer for content Um I think are we not sending You think do we think the writes have the new line? Automatically it sure doesn't seem like it right because we're not getting hello world to be printed but But these we didn't well, but you don't have to push enter with these right you just press control c or control d There is no enter. Okay, so we do probably need I guess at least Maybe new line or do we possibly need new line and courage return We got something different. Um Oh the space. I think the space screwed us this one here. We probably don't even want this. Do we There we go. Okay Okay Remember growing you set the timeout nice. Okay Okay So we we do have binary strings. We could convert these back if we wanted I think the bees are fine for now um So now we don't want to print we want to Do an import dynamically Um So I think I've tried this the other day I don't remember what it was. I think it's like Is it like uh, it's like Uh module equals import And then string name here Uh, so we would say like Adafruit si 1145 No module. Did I just call it wrong? Maybe or it's not installed on my device It's not installed on my device. So let's do mpr one two one for right now mpr one two one Yes, okay, so now What this In here We want to Put this as one of these We want to go actually import gc. We want to go Before equals gc dot mim I don't remember is it underscore? MIM alloc this Then do the import then go print If My this is like super meta. I don't want to do that. Let's just do uh I was thinking I was gonna replace this Let's do this module name This one is an f string inside the script isn't it? So the thing is here where I'm like writing python code in a string inside a python Script and I don't think we're gonna have some like inception code problems of String Substitutions inside string substitutions. I don't think that will give us trouble this way though. We should be all right So we go like this Uh diff is gonna be before No, it's gonna be um the new one after No, it's gonna be before before minus gc.mim alloc Go get the before value import the module Print the before value minus the after value Check serial in waiting to see if there's anything to read Serial in waiting. Oops wrong one. I don't know why I keep clicking back to this I'll keep this eventually. I'll make a check here for just an empty line and skip printing it if it's an empty line I guess maybe this will work for that. I'm not sure I'll do that more explicitly later on though If we are getting those empty lines getting printed Okay So we don't really want to run hello hello world instead. We want to go serial dot right Yes, we should call this b it's string And then We go core memory test script replace Remember we need to do this With the actual module name which right now I'm just gonna hard code, but eventually we're gonna base it on something uh man line argument, uh I don't know input variable of some kind. So for right now though, we'll just Put this one in And so one thing I don't know is like writing it with the multi line thing. Is that gonna work? I don't actually know We'll find out Um See what it does I do need to disconnect this It's like the object That didn't work I guess because these aren't bytes There we go. Okay Ah, yeah, no, it doesn't look like That worked right Looks like we got all that on one line I guess we will actually need Like this Theoretically this is already there right dash in because we're on the the next line. Maybe we just need these Once we have actual literal new lines But not on this one this one we would I think But that's not the right spot for it There we go. Is that a reasonable amount? I don't actually know it's negative which seems odd to me I do that wrong actually. So memory alloc. Ah, yeah, okay. I was thinking memory free Memory alloc. So really we we do want after We we either need to use memory free or we need to do this this way minus before There we go 66 40 So is that a reasonable Answer does that seem The ballpark of correct Let's go back here. Let's go back to rebel. Let's go import gc Before equals gc mem alloc, and I'll do the import the regular way That's the other thing. I don't know if that weird way we're doing the import like this as a string I don't know if that I don't know if that's uh problematic or not Although We don't really need to do that. Do we we can just use import? Yeah, yeah, we can just do that. So we're because we're already substituting into this We don't need it to be more dynamic. Okay, let's keep trusting it though. So import And then 6576 pretty close. It wasn't the exact same, but I think it's like Not a simple science. I think there's a lot going on That can change the amount 64 but it's pretty close 6576 we're within you know 60 bytes something like that Realistically probably the way you do the import could matter too, right because like That variable name module was in ram, I guess too Maybe some other stuff for being able to assign it Let's Kind of weird, but let's print json that way our Our next level script here the script we're writing that way it's going to be able to Read it in a structured way without Us just having to like parse it and Look for our own random Thing in there. So let's go I guess I guess well, no, okay. Yeah, we import these first then we get our before. Yeah Port size ram size Oh wait, no, that's right How did it not print? What the number you get include the imports done in the program uh It would except for that we are checking Memory allocated After we've already done this And then subtracting it after we only do the one thing. So this should give us the difference between whatever Essentially these are consuming memory, but we're not counting them since we are importing them first Then taking our first reading after they're in memory and then subtracting the final value From our first reading I think we're I think we're filtering them out because we're not getting our before value until after we do them But I could be wrong too But I think that's the way it's working Um, I don't know what these ellipses are These are definitely weird. It's like it tried to print something but For some reason the thing it printed is ellipsis I'm missing a parentheses missing a parentheses Okay, there we go. Now when we read Let's say print read try data Output output equals json.loads Read except Uh Value I don't know what it throws. That's probably it, right? Just don't do anything if RAM size in output Print output RAM size There we go. So now we have this as a number Inside of our outer script here as a variable inside our pc python script We generated that number on the device, but we now have it as a int number inside of this python script running on my pc um So now we would send that back to the central server the central server would send that over to get hub actions get hub actions would be able to say This branch of the code uses up this much ram When you import it on a device In this one case at least because as we saw it's not Not exactly the same from time to time and there's lots of stuff that could be making a difference But this gives us at least a baseline to start measuring something that we can't or don't currently measure today Which is really what we're trying to do Probably close this um So really we don't need to print a whole lot of this stuff. Um Oh, we can't do that. Can we? Now we are gonna like Functionize this so we're gonna say def Get ram size module name device path So I think we should probably make this actually a little bit more If it's verbose it will still print so we could still use it to read other stuff and see what's going on In the final version though, we don't really need to print anything In fact, we don't even really want to Probably print this we'd say like if verbose print that Either way Return output Ram size and then if not any of this return I guess return none will happen by default, right? So do we actually need to read here? Can we just Not do that instead or Of course, we're only we're like halfway through rewriting it. Maybe I also have Other bugs. Yeah Oh, uh, this is still a while true So we we would not while true instead. I guess Let's go once I don't know if that's gonna work if we can This weren't We're required rather No, but those ones back to commented What's driver verbose true here? I expected in den That's weird Oh That doesn't sound right 016 that's way smaller than what we saw before though Hmm That's pretty close Is any of this stuff In any way asynchronous should we be sprinkling like Time.sleeps or anything or like should we try gc to collect Before the first measurement I'm making a difference 560 And I don't know about Those weird ones 4001 and the negative one. I don't know What could have caused that Hmm something is not getting returned right Yeah This needs to return actually not just break We also don't really need to print it if we're gonna return it because we'll print it afterwards There we go Okay Don't know about the negative or the 4001 those ones are definitely strange But I think we got it now for this bit of it so Now we have a thing where Some other program can Import this function pass it a library name Pass it a device It will then get the ram size back as long as this device is connected. I'm sure it will either Loop infinite or do something bad if this device wasn't connected. We'll fix that up later on Put some kind of time out where like it'll try for a couple seconds if it doesn't see a real device It'll just give up maybe Um Oh no, we got another one of those So weird We call collect before we do the next one maybe as well They're actually gonna matter It would be uh after this I guess The other thing I'm wondering is like is this asynchronous at all should we be Like is there any chance we should put just like timed out sleep, you know one tenth of a second Just to make sure it's like done doing whatever it does. I don't know if that's Happening sequentially this one. We got the 4 000 again though Oh, we always get the 4 000 now. Uh-oh Oh, I don't know about that All right different library That's like an exact power too, isn't it? That's awfully awfully suspicious Is it I don't know maybe that makes sense All right different library NTP That's definitely a little bit too coincidental I think Maybe it's getting rounded to the next like Next lowest page size or whatever That's so weird Let's just sprinkle a few of these in See if it is anything like Just weird asynchronous. It's not done yet or something A different number, but now it's still consistent from time to time, but it's different number It is odd That kind of makes it seem like time is taking up some or Maybe this code or something um, I mean, I guess it's possible that collect here is Like freeing it or something right? I don't know This seems like this one is kind of the culprit though Gets more consistent with Sleeps put into it Hmm Inconsistency is a good thing. I guess as long as we're getting the right answer Good to get the same answer over and over Do we think it's like different for different ones of these? Strange Oh, no Oh, no We're not using this Oh, that was pretty silly Uh, good night to shibu. Thanks for hanging out for a bit. How long has this been broken? That's interesting. Go back and forth back and forth each time. Okay Gotta actually do different libraries if you want to see different results turns out That does make some sense though. So here Let's try another one like logging That is weird how it's it's back and forth back and forth now. It's like every other run Consumes an extra What is the difference? Do you think the difference is the same no matter what file we use or what import I mean? So four five one two Six three five two if I just keep running it we'll get those same things over and over again X three five two minus four one five two 2200 NTP 1872 And 56 Very different that is not 2200 That part's for sure So now I'm back to wondering do we actually want these because I was Not actually testing what I thought I was testing When we had these Not consistent every time We did get pretty consistent when we had this though Although I also think like each line of code we write also Probably consume some RAM as well inside the REPL Actually know how that works There we go. Okay. Now we get a consistent number every time. I do think the sleeps help and then if we switch these Do actually get different values for different libraries well four nine six Ooh that one was still different from time to time Interesting only the first time Okay Seems like we're actually consistent now wait until we see another if we see another difference. I'll tweak it some more, but uh, so Next couple things we want are I want to start building At least test infrastructure that's gonna do this like receive a A job that says Check the RAM of this library It will do it. It will return it back and I think that I'm gonna try to do that through web sockets Because I think that makes the most sense in the architecture that I'm imagining which again is GitHub actions is basically going to send a request to a central server Central server is going to have a bunch of web socket clients connected to it Those are volunteers on a pc or a single board computer with a device plugged in via usb Those are the web socket clients When the central server wants one of the clients to check a size for it It'll send a job through the web socket to say hey, please do this check for me If the client is there and it gets the the job. Okay, it will try it It will do it It will get the number and it'll send that number back through the web socket Central server then has that number and it can actually return it back to that actions Instance essentially that actions task or whatever so To start with I am going to build a very basic version of the server and the client I don't know if these will actually end up being the ones that get used at all But these are going to be the ones i'm going to start testing this idea with to even like See if it's a viable thing to do so Let's not put test in the name that like makes it get treated differently. So let's call this um Job server And then job client And for this i'm going to try using this thing Because it's pretty easy Yes, we should probably install it We need the client side of the docs They do have actually an HTTP example, which is kind of cool How do we run a client? And all of these are servers So this will start up a server listen on port 8,000 Whenever a new message comes in it'll just send the message back to the client that sent it So we should be able to send hello world get hello world back If this is running seems like that worked maybe let's make sure it worked by saying let's modify it to say You sent Self that data That way we make sure we're not just like printing whatever Send rather than I see yeah Oh, but I didn't rerun it. Okay. That is working. Okay perfect so Our server Let's try let's look at this one actually because this has clients. Where does clients come from? connected Whenever a new thing connects loop over clients Call send message blah blah connected And then append I guess the client that connected to clients Whenever it closes we go remove it from there We send all these a message that says disconnected Okay, and then whenever they send a message we just say This user sent this message Okay, okay, so we got connected We didn't ever get this It didn't seem like But this only sends two existing clients Of which we did not have any when we started Therefore, nobody got it So we need to run multiple instances of this Not allowed to run in parallel Ah if I run one from here it's connected Hey, well, okay, so one thing is we wouldn't want to just receive right away. I guess what we would do is like Okay, so after we send our first thing we just Start listening and printing whatever comes in Server should be able to stay running. I think Hopefully got one client running. We haven't seen anything get printed yet We connect a second client Yes, okay, so we got a message in the first client. This is job client here So in the first client that's connected We got the message that says hey another another client connected. We now have two And The second client sent this message right here, which now the first client received in fact They both sent the message. It's just that there was no one around to hear it When the first one sent it they basically joined the chat room sent a message before anybody else was in the chat room So, you know, it's there it went into the ether, but nobody saw it That's how I think a website at least as these like chat rooms essentially um So the way we want this to work is We need a basically just like The most basic version is we just want to wait until we receive a job Going to bed. Thanks to him. Nice weekend To y'all. Yeah, for sure. Good night. Paul. Thanks for hanging out um So let's not Let's not do this Instead, let's just listen If data we're gonna say try json.loads data object data accept value error pass Try to load it as json if that succeeds job in data print data object This should look for An object inside the message that came in You check the object for a job field That has one we print the object. I'm gonna turn off this print We're only gonna print things that are jobs if they come in I'm gonna save that It should be so helpful for pr reviews the uh The memory managing thing or the web socket thing I mean ultimately I I'm hoping to integrate it into the actions so that it will Be used by the pr reviews. We'll be able to say like Memory management. Okay. Yeah. Yeah, that's my goal is like to make this all automated so inside actions that can Print the value and we can assess like, you know, here's what it was before. Here's what it is after um The changes inside this branch so we can see if it's jumping You know too large at any given change or something um So let's stop this client. Let's also stop this client Let's run this client again And then we need another thing called job sender Which is pretty much like the old version of client except You don't really need to listen at all sender is just gonna send and then close and that's it And the thing we're gonna send Object job This will be an object. This will have stuff, right? I don't know what all this will have, you know, uuid blah blah blah Uh, it will have, um module name Adafruit npr one two one It'll have, um npy file htps Blah blah dot com slash You know Something right this is gonna get filled in Okay, so that's good for now. Let's try that We have our client running. We have our server running We should be able to run our sender It finishes immediately on our client. If everything worked, we'll get a printout here Everything did not work though See what we got We run client We run sender. It's connected. Oh disconnected. That was the uh, yeah That was the sender The client inside the sender connected And disconnected Why did this not work?  I came from here Extra data line one column six Why don't we get the trace back? Import trace back trace back dot print exec Inside the exception Extra data One thing I noticed is we got three of these a little bit surprised by Oh, no, that's correct. Actually because we got one Connected thing we got one disconnected thing and then in the middle we got The actual job object For some reason we are not decoding Job object correctly And interestingly we see extra data line one column six character five On every single one of these Which is weird if they're different data I mean, is this not valid json? Is it not a string or something? No three of them are strings Extra data What you have two records? hmm, so Before we send it Oh, I am being silly. I am being so silly so so silly for getting this stuff in front of it, of course um Job server handle this should just send the data by itself Else we run the server We run the client We run the sender Okay, now we have a bunch of extra prints Don't need Side client We want this one really need this stuff or this stuff Or this This one i'll keep we run client We run sender Boom, okay now every time we run sender The client will notice that it's a job object and it will print it out for us. So at this point we could You know do our Import check on it. So inside client We could say inside of here. We got a job How's it going near doc? I am working on memory measuring So the first thing I did was build this on device ram check This is a python function That allows you to pass a module name and a device path like dev tty ACM zero It will basically Import this module on the device and return back to you the amount of ram That it consumed. So we could run it here right now. It's using the simpr 121 And I have a device connected to my pc. I don't have the camera set up But it is there and it's connected over usb That device told us that we imported this library. We used 6608 bytes of memory were allocated for that import So that's the first bit of it is like check a check a A library check a module on a device to see how much ram it consumes when you import it And then the next layer of this is we're going to try to do that check inside of this web socket client Which is connected to this web socket server That allows jobs to be sent to it So something can send a job to the server The server is then going to afford that job to a client The client's going to execute the memory checks and the result back The server is then going to be able to ultimately respond back to the Thing that requested it which is hopefully going to be get hub actions. So like Once everything is all working together an action is going to fire to a central server Central server is going to send those jobs through the web socket One of the clients is going to carry out the job get the measurement send it back to the central server Central server is going to send it back to get hub actions So that it can include that in the output of the actions And then my idea is like volunteers can keep devices plugged into their pc Even like a raspberry pi I think would work for this You keep it plugged in and you just keep it running 24 seven connected to the internet And you run this job client script So it'll basically connect to the central server and just listen for incoming jobs Whenever it receives an incoming job, it will execute it figure out the amount of memory Send it back to the central server will then forward it along to actions and everything else So that is like The grand vision for what i'm working on right now specifically During the stream I did this bit which does the memory check on the device and I've now created the A placeholder a very basic version of the web socket server the web socket client And then something to send a test job And so now what i'm going to do is have it try to run this RAM check When it receives The job module name How's it going dax So the end goal is to have the server with devices hooked up or to emulate server with devices hooked up Well, it's too hot right there's a central server which is out on the internet And then there's a script which runs on your local pc or raspberry pi that connects to that central server And your pc or raspberry pi also has a microcontroller plugged in with usb So your pc or raspberry pi is essentially allowing that Central server to be able to use your microcontroller To test the memory size How's it going dj devin? But yeah, not not emulated the real devices But they're plugged into pcs which are running this client job Running thingy bopper whatever it ends up being called Um, so get the ram size. We don't need to really print the data object. Let's say if ram size Send back json dumps Sounds interesting. It'll automatically track ram use for code running on a device. No, not quite It will track ram use for a specific library that you tell it to import And that's it. So it's not like a long running thing that measures your project Or any given project. It's just a module a single import module at a time The the idea being We would run this check anytime a change is made to a library. So we'd have a Before the change amount of ram that the library consumes and then we have an after the change amount of ram that the library consumes and both of those values get printed Somewhere inside the pull request that way we can see like here's how much ram this library uses Today and then here's how much ram it will use if we accept these changes If that makes sense, but yeah, we're always testing one specific module not You know the an entire project altogether Job client one thing is I don't know if we're gonna see this printed anywhere I think let's just add a print ink data Self that data So we just can see it on the server if we actually send back this result correctly Okay, so the server's running the client's running We'll send our job We'll look in the client Ah, yeah We need to turn this to bytes. How do you convert a string to a byte string? in code Bites What's the one liner pipe bytes string dot encode string dot encode We run the client We run the sender Boom. Okay. So client got its job client Got the amount of ram and client sent it back to the server and server received it So at this point the server would return that value Back to actions, um, which would have initially been Essentially the actions task would have been this job sender The actions task will send the send the job to the central server Uh, probably with an HTTP request not a web socket thing like this right now This is connecting to the web socket sending the job that way eventually this will probably be like a post I think Um, you know, you post the job to the server and the server then sends it through web socket to the other thing Um, I will never have time to do it and it's likely above my abilities But I want to look into the wakui emulator and uh run it making memory snapshots So we can see everything like that thing scott did a while ago with the debugger that would be awesome I agree with that definitely In code decode. Yep. Thank you MicroPython has a unicorn emulator on their website that this reminds me of interesting unicorn emulator. I'll have to check that out I'm not familiar with it Okay So I think I'm gonna probably be wrapping it up pretty soon So for folks that weren't here at the beginning I let everybody know when I started that it was gonna be a little bit shorter of a stream than normal I'm headed out to dinner with my wife and family um And so yeah, I'm gonna be wrapping up here in just a minute I'm pretty happy with what we got done today though, right? We have this ability to Check the memory usage on an actual live device and we have the very beginnings of a very rudimentary version of a server and a client that will allow us to Request these readings to get taken And then send that reading back to the server that way We have the beginnings of a couple of these different components that will then allow us to Integrate all of this with actions And so then essentially we can be doing automated tests automated tests on live devices and another thing I'll say to like This is just the beginning of this. This is kind of the first thing I want to do with this With this infrastructure that allows this on device testing in the automated fashion like theoretically We could be running actual test cases and actual like assert things and stuff as well Um In this one. We're not actually really executing any code except for just import and figure out the size But like in the end once we have this infrastructure These job runners they could run different kinds of jobs. We could have one that will actually run a test suite Um, you know check some assertions and then give you back the response, you know the results of those tests Um, so that's kind of like pie in the sky, you know even more what we could do with this infrastructure If we do get it set up And the the last thing I'll say is like, you know, it relies on the volunteers, right? This whole thing only works if enough people are willing to plug in a device to a computer that's running all the time Um, so like I can volunteer a computer to do that, but at the end of the day, we probably will need more volunteers that are willing to Have their pc run this client script and connect their device up to it. So I don't know for sure how much uh buy-in will get from the community on that But that's one thing that this does hinge upon even if we make all this infrastructure We need the actual devices to get plugged in and to run the client script to actually do the tests for us So my hope is that if I can set up the infrastructure and make it super duper duper easy for you to just plug in your device and let it Do this my hope is that we'll have a handful of folks in the community who are willing to Just let that run 24 7, you know tucked away on a raspberry pi or whatever Um, just kind of set it and forget it let it run its tests in the background there and do its thing. So Um, we'll have to see if we once we get everything all set up Then we'll have to uh See if we can get folks to do it Um, is there a link to the Adafruit discord? You see it now. Yep. No problem And it is down there. I'll say it allowed to for anybody who is listening but not watching adafru.it Slash discord. Um, that is the link to go to the Adafruit discord. I would plug in a few selfishly. So it would be uh Selfishly it would be so helpful. Yeah I'm glad to hear that raspberry pi with a huge usb hub. Yeah, you could have multiple devices even On one thing. That's another another thing.  I kind of am Facing this idea off of some of the stuff that is available out there for mobile Automated testing. There's similar things like this for mobile automated testing out there I think scott even talked to somebody he's mentioned it a few times Uh, a startup that was trying to do that. So that's kind of what I modeled this idea on is is those, you know, cloud based Mobile phone automated testing services. That's kind of the same idea. I want here is a cloud based microcontroller automated testing service Um, but we are not going to use it as a service that people pay for probably at least not at the beginning We're going to use it as github actions does it so that we can make more informed decisions about pull requests in our libraries I would run at no p would be cool to have rammy valves on my gps project because gps runs 24 seven. Yeah, that's a whole That is also like a whole another layer is like accurately measuring an entire project that's running This is really isolating down to the individual ones But yeah 24 seven stuff That's when honestly the memory is the most important because you got to make sure you're not growing over time Or you got to make sure to have automated reboots. Otherwise you run out of ram eventually So that is definitely one of the challenges of those like always on iot 24 seven type things Um, but yeah, that's where we're at. That's the progress we got done today. We got the very beginnings of this We can we can do the measurement We have a basic server a basic client. We're able to send jobs Um, so that's where rat will keep we'll keep hammering away at it We'll try to get this built up eventually. We'll switch it into a web server so that It can take a post request to get the job sent in and We'll just take it from there So thank you everybody for watching. That's the thing I dream of too having a hub with 20 boards since I have Since I have many I don't use and I automatically test cp builds every now and then With a suite of tests that can be done in the ci. Yeah, that's awesome I'm glad to hear there's a couple folks It sounds like that are interested in this and that brings up another good point as well is is builds, right? I've been taking the the library angle of approach to this talking about like library prs and Measuring the the ram usage of those library updates Um, but we could totally have this hooked up to the core p the core repo as well to where like When a pr gets submitted to the core This central server can make the build and send the uf2 down And this web socket client could like install that uf2 on the device even Um, obviously that's a lot trickier, but we could be testing on that level as well the core um So library will be easier. That's what I'll start with but Down the down the road we could certainly expand this to more and more stuff Um, thank you. Uh, thank you everybody the who's watching this is amazing idea and project Looking forward to seeing this one progress in tandem with web for workflow. Yeah Thank you appreciate it. Um, thanks again to everybody watching Um, I will be back tomorrow morning. I'm pretty sure tomorrow morning. I'll be back at the normal time 10 a.m Central time for my Saturday stream. So I'll be there Check me out. Uh, you can follow me on twitch if you want foamy guy underscore twitch That'll give you the notifications when I start that stream I'll post the links and stuff in the discord for folks that are interested Um, thanks everybody for watching. I don't necessarily I got to get running So I'm not going to scroll through and thank everybody by name But I do appreciate all of you that are watching everybody who watched and participated. Thanks so much for that You know, it's kind of one of the highlights of my week to come here and stream for you all and interact with you So, uh, thank you for that and I do appreciate it


From my treadmill I say to every month and answer any questions you may have For those of you unfamiliar with my work every year I read to every issue of every English language nutrition journal in the world. So busy folks like you Don't have to I think about the most interesting most groundbreaking most practical findings to new videos and articles that upload nearly every day on My nonprofit site nutrition facts.org everything in the website is free There are no ads no corporate sponsorships strictly non-comersion not selling anything just put it as a public service as a Labor of love as a tribute to my grandmother whose own life was saved with evidence-based nutrition All right, let's get to your questions. I'll just go down the list here first question is from quare yoga webinar I Talked about the evidence Based presumably on a meta-analysis that covered up into 2020. What about any of the latest? So right now on nutrition facts.org. There is a yoga series a six part video series. I probably You know what I do is I go through topics my alphabet And so I'm almost at the end of the alphabet with with yoga And then it started again. So you'll see videos on apples and videos I you know as we go through so yoga is gonna be a while, but we'll When they get to its turn, I'll check to see if there's anything juicy There may be a lot of new science, but if it basically shows what we've already seen Doesn't cover any new diseases came to the same conclusions as before. I'll pop a skip it Same thing with apples if there's no new good Apple stuff, you know stick with what we know But if there's anything really juicy I will do more about it since It people seem to be interested. All right next question It's from Tasha saying hello. What can I do to limit my exposure to radiation? Oh from CT PET scans Which have to monitor your condition Told to take melatonin. What does the science say? I do have some videos on what to do to cut down on the risk from ionizing radiation Of course the primary one is to our reducer explosion in the first place I don't know if they can If they can stagger them out anymore that may or may not be possible But if I remember from the video, so if you just type in ionizing radiation or probably just radiation and nutrition facts I don't know those videos will come up if I remember correctly. I think greens Dark green leafy vegetables presumed that maybe only cruciferous. I'm not sure I remember the only reason I remember is because It's one of the reasons I eat kale chips When I travel because when you're up in the air that high you're exposed to more cosmic rays and seriously get quite a radiating I mean, you know get anywhere near a CT scan dose, but you do actually get a large Relatively large dose of radiation when you trip when you fly For prolonged periods and so I remember thinking oh my kale chips are perfect for this And so if I remember correctly there's like an ex vivo study where they basically take people's blood before and after eating greens or took Or randomized people to eat greens or not and then expose their White blood cells so they then they took blood from them before and after greens and Exposed them to a whopping dose of radiation not the people but the blood cells and could show less DNA damage In those who had been eating grains and again, I don't remember it's all greens or just cruciferous greens But that suggests that it can either boost DNA repair enzymes or Maybe just make the DNA more robust in the first place Or some kind of DNA protection mechanism But anyway, um, and it wasn't just greens or other foods to check it on nutrition facts that are pop right upside I don't remember but I have to clear out space in my brain for all the new stuff coming down and Just put everything up in videos and books and move on to the next thing Okay, next up Johnny says LDL too low Um, L the I mean no hgl too low. Excuse me. LDL 54 No, you are not. Okay. Oh, I'm so glad you asked that I kind of misconception um No, you are um Uh in an excellent position with an LDL of 54. Um, that's really what we are concerned about we used the thing That uh hgl was a causal um, uh Kind of inverse risk factor meaning that we thought having high hgl actually protects you From heart disease having high hgl is associated Um with uh lower rates of heart disease Um, but the question is is cause is it a causal risk factor or not? And so I actually did a video I think it's one of my kind of coconut oil videos If you just type in hgl it'll pop up. But basically it was like um, just like Having I think I use an example. I use having a tennis shoes in the house is correlated with Uh, you know with with with exercise or having ashtrays in the house Having lots of tennis shoes associated with longer live I'm having lots of ashtrays in the house associated with shorter live And uh, but it's not that the ashtrays are hurting you. It's just the ashtrays Are are pointing to a Appointing to the real causal factor which in that case Maybe tobacco use and similarly exercise is really what's helping him And so just got something that's correlated with something that doesn't mean it causes something Um, and so that's why we have for example mandolin randomization studies where you know just from a Kind of genetic random lottery Some of us are born with genes that give us lifelong elevated levels of hgl Or low levels of hgl or high levels of ldl or low levels of ldl And so we're like regardless of what we eat regardless of whatever we just have the kind of a kind of lower levels if we were Eating those same foods or living that same lifestyle with different genes. And so Since that kind of gene law and it's kind of random at birth depending on which egg cell and which sperm cell kind of got together It's kind of like a randomized controlled trial where people are like randomized to have High ldl or low ldl at birth kind of lifelong levels And the question is a way segment of they live longer shorter lives So when it comes to ldl, absolutely Um, you are just have lifelong ldl. You dramatically increase risk of dying prematurely heart disease in fact, uh You actually have three times more benefit. Um having lower ldl through Um through genetic means versus statin means or or medication means just because it's uh lower for longer We want to have low ldl as long as possible. I'm not just starting Drugs later in life though. That's certainly it can be helpful if your levels are too high Anyway, so that's one of the reasons we know ldl causes um, uh heart disease so Okay, what about people born with high hgl if it is indeed cause and effect Then people should have less heart disease and turns out they don't um, and so uh, hgl's uh Kind of a marker of heart health but not causing effects of raising hgl and so no wonder the trials where they had drugs that raised hgl actually People were in one particular drug people were dying more than those who didn't wear on the drug um, so across the board all drug all Uh drug trials to raise hgl have flopped and now we know why oh well because having Pushing hgl higher doesn't actually make things better But pushing ldl lower definitely does again based on these studies. There's lots of other kind of studies that we can look at but anyway, so We used to worry about the low hgl Um, uh, and like what can we do to raise it like exercise and other things? um, but uh, it turns out that what we care about Primarily ldl you can argue that Apo B. Uh, there's kind of our uh, which is kind of the protein component of ldl and the ldl and idl but um uh ldl is cheaper and Probably better recognized so though it's very That that's in a in a common lipid panel. That's what we care about Is what your ldl is doing and your ldl is fantastic. Congratulations. Okay. Jeff says wash my salt intake um could slightly elevated blood pressure because by stress and mild anxiety Would taking GABA and magnesium supplements currently taking magnesium malate um Probably the most important thing is you are not watching your salt intake enough Um when people think about oh, I don't need a lot of salt they're thinking about the salt that they may add in the kitchen or the dining room, but in Here in the us and it's different around the world, but here in the us 70 percent 75 percent somewhere around there Of all sodium that people eat has nothing to do with the salt shaker um, it has to do with processed foods um, and so and when by say processed using like bread bread is the leading source of sodium they had a lot of sodium to bread um and uh, I think that chicken is actually the number one um contributor of sodium intake between like ages 30 and 50 if I remember correctly And you're saying like wait a second like salted chicken. No, just regular chicken because they actually injected with salt water so it Uh retains more water weight because it's sold by the pound so they make more money that way But of course all that salt and phosphate additives no good for us. So you may think you're doing good on sodium but If you're eating processed foods You're probably not so I would make sure that you get your sodium Under 1500 milligrams a day, which is the american heart association recommendation. So I would start there Before worrying about other things you can do and before going to supplements I would start eating foods That can have been shown to lower your blood pressure.  Um, and uh, so hibiscus tea Um, I can lower blood pressure Um, a few strong cups in the morning better than works better than um, uh, leading blood pressure drug Uh, ground flax seeds can lower blood pressure Bunch of other stuff So just having blood pressure and nutrition facts of the organ bring up those foods But again, let what we treat the cause first lower the sodium intake and then see how you're doing Um, and if necessary add healthy foods to diet also exercise aerobic exercise lowers your blood pressure. So that's good as well all right next up Jeff How long does nighttime vitamin Nighttime vitamin D supplement last in the body How long does sun expose vitamin D stay in the body? Does vitamin D absorb better than with vitamin? Okay um A vitamin D is a fat soluble the vitamin so you can actually store it for months um, so that's why We all don't kind of drop dead in the winter time when we're inside is because we store up Vitamin D during the sunnier months and then can actually hold it and then our levels drop during the winter as It's kind of used up But uh, then bounce back up when we go run around in the springtime um, and so And that's whether we get it from new to from Supplements or whether the other from sun we can store it now That doesn't mean your levels are high enough during the winter for optimum health And so I would encourage people getting inadequate sun exposure. So if you're the higher latitudes for example During the winter months no matter how wrong how long you sunbathe naysay make it outside in the snow You're not going to make it up vitamin D because suns raise at such an angle Um, and so I would encourage 2000 international years of vitamin d3 every day for those getting inadequate sun exposure and you do not need to Not only do you not need to take it with vitamin k? You should not take vitamin k. You should get all the vitamin k you need eating dark green leafy vegetables And then your body can turn that The k1 to k2 get all the k you need just by eating your greens All right next up um Engled Engleg 80 20 82 says Firmly by miso video would eating homemade sauerkraut at a moment to go. That's funny Okay, so if you remember um miso Like miso has a high sodium Um, uh, it's a fermented soy food with high sodium But it's the only high sodium food when actually put to the test when you take people with And and and randomize them to eat miso or not um Other high sodium foods raise your blood pressure But miso does not and so there was a so the researcher is like we have no idea what's going on here Maybe the blood pressure lowering benefits of like the soy protein And some other components of soy is actually lowering your blood pressure So even though the sodium is raising it overall you don't get that blood pressure raising effect. Okay I mean, we don't know that was the mechanism But that's a reasonable, you know reasonable guess or hypothesis And so, uh-huh this smart viewer was like, okay I want to eat my sauerkraut which has a lot of salt added to it And so okay, I'll have the salt. Ah, but I'll have some edamame out of that soy protein with it And maybe maybe we'll have more rays. It has not been tested And so until it has been tested I guess you could do an end of one study meaning you could test it yourself You got a little blood pressure monitor After a high salt meal, you can actually see your blood pressure rise within hours um, and so I mean you could actually kind of put it to the test yourself, but uh Until we are sure that that's what the cause I would not Be eating any high salt foods if you want to eat that wonderful homemade sauerkraut Then in the very least you should take it and rinse it heavily underwater get rid of the excess salt And then just use little bits for flavor As opposed to eating a big mound of it and getting too much sodium Okay, um, is there anything else? About uh miso? No, that sounds good. Oh, and uh, also miso is not associated with increased stomach cancer risk as our other high Sodium food, so that's another good thing. Okay next up Matthew says hello Any best benefits meaning whole grains that can't be obtained from eating an equal quantity of beans or lentils um, okay. Well, so, uh Uh, so basically grains beans and lentils are and nuts and seeds frankly are botanically The same thing right it's basically like a seed of a plant You put it in the ground and all of a sudden poof a plant pops up, right? um You know, you can sprout beans lentils you can um And you know, you put them in the ground and make a little plant and they grow into a plant And same thing with whole grains like the actually growth is like the seed of the plant And so as such they have a relatively similar uh Kind of you know spectrum of nutrition because they need to you know have lots of antioxidants to you know To keep that dna alive because it's a whole new plant packed in there um Lots of dna protective stuff um and so Do you necessarily have to eat whole grains?  Why don't I just eat lentils and you know, um, I would Encourage people to get a diversity of food. In fact, widen their diversity as much as possible In fact, and I talk about in the new book. How not to age all broadseeds. Um, I received directly donated charity be out December 5th I talk about the a Uh, the this researchers suggested we should get 50 foods in a week We should like check off and make sure we get at least 50 different types of foods a week The reason is is be caught for a microbiome Um, so fiber turns out is a catch-all term for literally thousands of different kind of molecules So there's all sorts of things that are fiber and they're all different And uh different foods have different types of fiber Um, uh, and so and they each feed different populations of your microbiome Um, and so there's a study I have a video about I forget which one Where it shows that if you like eat half beans and half I forget was rye or one of these whole grains You actually have better microbiome benefits than eating You know twice the amount of just beans or twice the amount of just rye Um, so it's because you've got a a greater diversity of prebiotics the resistance starch and those in that fiber Um, and so that suggests that there are independent benefits You can't just look at like the nutrition label and be like oh zinc You know like the essential vitamins and minerals and stuff There's all sorts of you know, we need to think about the majority of cells in our body Which are not actually human they're in our microbiome Um, and they see these foods very differently And so I'd encourage you to eat a wide variety of whole plant foods So, um, I would not want anyone to Uh, just stick with legumes even though they're super wonderful. I want them to get their whole grains too That's why the daily dozen includes both Next up How much is too much of a calorie deficit I'm currently at 1,700 as in 1,700 a calorie deficit of 1,700 Or currently at 1,700 calories Um, the uh, how much is too much of a calorie deficit? um, well, it, uh Uh, it depends on uh, it depends on a number of factors. Obviously, uh, you don't want to get too skinny um But in terms of benefits Uh for Chloric restriction the calorie trial which I have a bunch of videos about And I talk about a lot in the in the upcoming book Um was just 12 percent average calorie reduction and saw tremendous benefits psychological benefits physiological benefits anti-aging benefits Um within years just 12 percent, which is there's a few hundred calories like skipping a donut And I mean it's like amazing that just 12 percent now. This was a Normal quote-unquote normal weight population not obese normal weight population But in the u.s. Normal weight means overweight So it was an overweight population and so they you know over you're overweight You restrict calories you lose weight and all of a sudden you have all these benefits Is it from the cholera restriction or just the fact that you got rid of excess body fat?  I try to just go in order and not I don't want to pick and choose. I don't want to Have preferential treatment of anybody. I just want to like answer every single question So that's why some of the questions might not make any sense But anyway or phil says the serving size of my frozen bag of fruit says one serving. Whoa two cups Um, which serving size well depends what year? Um Uh, that's interesting Um, what serving size should I follow? Well for the daily doesn't yeah one one cup cut up fruit is uh Is uh, certainly uh enough to fit your serving for the daily dozen. Um, and yeah, I wonder why I'm not sure why the Uh, the frozen bag wants it usually I mean they uh, it's up to food companies to set the serving however They like so typically they make really small servings to make that because most stuff in a package Most packaged food is so bad for you too much sodium too much saturated fat too much sugar That they want really small servings. So you look at you're like, wow, this hardly has any sugar It hardly has any salt, but yeah, there's like 20 servings. There's a little bad thing. All right Um, but other foods like healthier foods like frozen fruit Um, you know since it's so delicious. So it's good for you Um, they want to like show looks look how much vitamin c we have look at all these You know how healthy this is and so they make a really big serving like two cups They're like wow this has lots of vitamin c in it. So that's why you might see serving inflation and healthy foods and serving deflation in unhealthy foods Okay, tasha You're welcome took my advice. Oh and taking amla very cool So amla is dried indian gooseberry powder um total cholesterol um drop that's nice LDL that's what I really want to care about Um 148 to 127 excellent. They're still high. Oh wonderful. Ah fantastic. Thank you for your um for your your uh For for following up. It is indeed Definitely in the right direction and absolutely still too high keep up the good And so that's what one food think about all the other things that I Uh show can lower cholesterol if you combine them all together since they often work through different mechanisms They have additive effects so Keep working on it. I'm so glad your cholesterol is coming down Karen I has a question about Hashimoto's Heard that those with Hashimoto's should not eat gluten What if instead we use organic wheat flour is that also a problem? Okay, so organic wheat flour has gluten just like all gluten containing grains whether organic or conventional Um uh Hashimoto's So I looked so I did uh did videos on Hashimoto's um Uh, oh Yeah, I forgot I forgot where the conclusion was um, but I don't remember looking at um Seeing gluten come up Hashimoto's gluten See if there's a Hashimoto's gluten meta-analysis um Influenza medical treatment um now I mean it's possible sometimes uh like autoimmune diseases go together So if you have like type 1 diabetes, you're more likely to get some other, you know, autoimmune diseases and so um sea leg disease um and uh and Hashimoto's thyroiditis both autoimmune disease, maybe that would be the connection Um, oh, okay. Here we go 2023 meta-analysis the effect of a gluten-free diet on autoimmune thyroiditis um progression um, and that's indeed uh uh Hashimoto's and so let's see what happened um Well kind of the bottom line conclusions current lines of evidence are not yet sufficient to recommend This dietary approach meaning gluten-free diet um for patients with a diagnosis of Hashimoto's thyroiditis Um, the the fact that they made it sound like that and perhaps there are sub populations of people that may benefit um That's good. Anyway, but that was kind of the bottom line. That was a 2023 compilation of the um evidence Uh, so maybe oh so they've only found four studies with a total of 87 patients um, okay, so yeah early days um, but uh, look if you want to try cutting out gluten for your age for a few weeks and see if it helps then Then great, um, but usually those with Hashimoto's have their thyroid is so scarred up They will be on they tend to require um, uh, thyroid hormone replacement therapy the rest of their life seem like taking Synthoid Okay, next up Tasha. Do I need to add mustard powder at all cook cruciferous vegetables even if I'm waiting for 45 minutes? No, that's an alternate method um, the atasha is obviously high level Uh for people looking at this being like, what are you talking about? Um, uh, how to make this really quick got videos of course on all this um So probably the video to go to is like the second strategy something like if you just type in second strategy and broccoli Or maybe just second strategy into nutrition facts dot org this this video will come up so basically, um, uh, um the the purported active health ingredient of cruciferous vegetables which kind of sets them apart from all other foods essentially all other foods Um, AR is sulforaphane sulforaphane is not actually found in cruciferous vegetables. It's But it's created from a precursor Um interacting with an enzyme which are both found in the plant Um, the enzyme the precursor is heat stable. Well, fortunately the enzyme is not And uh, but when the precursor and enzyme mix together sulforaphane is made So when you chop it or bite it or anything pulverize it, um, then You start making sulforaphane four or five minutes later You're good to go You can cook it because then the the enzyme is done Fulfilled its destiny in life and you can destroy the enzyme because the sulforaphane is made And sulforaphane is heat stable as well. Um now so That's the hack and hold technique if you do that with your cruciferous vegetables something I do every day Um, then you're set to go. However, let's say you don't have time Um, and you need uh, you can't wait between chopping your cruciferous vegetables and cooking them Well, then you can use the second strategy. That's where the video comes from Um, and that is to add mustard powder to already cooked and you say why mustard powder? Well, what is mustard powder? Mustard powder is powdered mustard seeds where mustard seeds come from they come from mustard greens And mustard greens. Oh, that's a cruciferous vegetable And actually the mustard powder you buy in the shelf actually has active enzyme in it So you're basically sprinkling enzyme on that precursor and you can make sulforaphane that way So either or doesn't need to be both All right a woman Says several times. I seen you say that we vegans only need b12 But I found out the hardware they need b5 Penethane acid As is found mostly in animal parks Uh, now I take a gen take gen vegan supplement. I don't know what a gen vegan supplement is Um, you do not need to eat to you do not need to supplement with beef five Um, um, there's only two vitamins not made by plants One is vitamin d made by animal such as yourself when you walk outside If you're not getting an adequate sunshine, you may need to supplement and the other is vitamin b12 Not made by plants either or animals, but by little microbes like the earth But now we chlorinate the water supply to cough on the bacteria, which is great No more cholera, but you need to get b12 from somewhere in our nice sanitary world Supplements are probably the easiest you can also get from b12 fortified foods But but all the other b vitamins um you get from The produce or the bulk Beans and whole grains Okay, um guy Says that the struggling with plant-based diet um a sos free salt oil and presumably sugar added sugar free Can't maintain.  Have you tried if chickpeas don't work? I've tried lentils.  Um, so you want to have some kind of legume in your life You want to have some kind of um green leafy vegetable in your life And god veggies basically mean any part of the plant except the fruit So there's root vegetables and stem vegetables and flower vegetables and leaf vegetables and On down the list Hopefully you can find some That you can that you not just can stomach But are actually delicious to you Next up I know why that's not showing up. Oh, there we go. Sorry Um linda says natto kinase No, that's uh, yeah, you can take natto kinase in a supplement. No need to take natto kinase supplements Uh sandy says floaters in the eye any recommendations? Yeah, I mean see you may be actually bleeding into your eye You should go to an ophthalmologist and make sure that you don't have like a retinal tear or something. Oh my god Is it that time already? Um, let me just put up a quick um Do subscribe plug For our free email newsletter Which just tells you when all the new videos and blogs are up at nutrition facts dot org slash subscribe Got a lot of exciting stuff coming up just did a webinar or the last one the last one was on sunscreen um and uh safety and efficacy um, and then next one in october Is going to be my new kind of how not to age presentation, which i'm very excited about giving around the world next year But you get to see it early You want to sign up for that and so you'll get details. I forget exactly what day it is But you'll get details email that to you If you sign up to the newsletter And otherwise I will talk to you next month and um Thanks so much and hope I got some of your questions answered


United States. Thank you very much. Thank you. Well, ladies and gentlemen, please be seated. Today we're here to welcome Catherine Ortega as our new United States treasurer. Also with us today are three former treasurers, Babe Eucannon, Francis Neff, and Romana Banuelos. As is the case so often when appointments are made to prominent positions, we're not welcoming a new person on board. Instead, we're congratulating someone already on the team for moving up. Catherine Ortega has been a commissioner on the copyright royalty tribunal and a member of our advisory committee on small and minority business ownership. She's been one of those invaluable individuals who has shaped the character of our administration, always taking her task seriously, getting her job done, and rarely winning public attention. She's a true professional, a hard worker, and a good American. And Catherine, I know your family must be very proud of you today. I certainly am. You prove to all of us that the American dream is alive and well. Catherine is the youngest of nine children and comes from a family whose heritage is the stuff of which novels are made. She comes from sturdy pioneer stock, brave people who tackled the wilderness when it was a wilderness of New Mexico. And she's demonstrated that same pioneer spirit in her own endeavors. After a successful career as a certified public accountant, she became the first woman bank president in California history. She brings to her new job experience and credentials. I was also pleased that when we announced her appointment, she indicated her longtime commitment to Republican principles. In fact, she said she was born a Republican. That's better than me. I'm only a convert. Well, it's important that key positions within an administration be filled by people who reflect the goals and ideals for which the people voted. And this is certainly the case today. As treasurer of the United States, Catherine will oversee a budget of $340 million and supervise over 5,000 employees. I have faith in her and I'm pleased and honored that she's a part of the team. Being treasurer gives one a certain immortality because it's the treasurer's name which appears on all new paper currency. I can't think of a better name to have in our money than Catherine Ortega. So let's get on to the main event and then I understand we'll get a chance to see her put her signature to good use. Repeat after me. I, Catherine, Davalos, Ortega. I, Catherine, Davalos, Ortega. Do solemnly swear. Do solemnly swear. That I will support and defend. That I will support and defend. The Constitution of the United States. The Constitution of the United States. Against all enemies. Against all enemies. Foreign and domestic. Foreign and domestic. That I will bear true faith and allegiance to the same. That I will bear true faith and allegiance to the same. That I take this obligation freely. That I take this obligation freely. Without any mental reservation. Without any mental reservation. Or purpose of abation. Or purpose of abation. And that I will well and faithfully. That I will well and faithfully. Discharge the duties of the office. Charge the duties of the office. On which I am about Mr. President, Mr. Secretary, distinguished guests, the number of messages I have received since my nomination for Treasurer of the United States from people across the country from all walks of life have been an inspiration to me. Among the letters I received was one from an 87-year-old Cuban man with the surname of Ortega. And I would like to share with you a poem he wrote for me and which I have translated. Congratulations, Mrs. Ortega, and thanks to Mr. President for appointing you to such an important position. You now have in your life a marvelous road, an excellent opportunity and future. God has extended you His hand with a prestigious position as Treasurer of the United States. President Reagan, by appointing me as Treasurer of this wonderful country of ours, you have provided an inspiration to women and to members of the Hispanic community. Many will take encouragement that, yes, it is possible to work and to attain the many opportunities available in our country, and so it is with a deep sense of honor and pride that I shall serve as our country's 38th treasure. And following the Hispanic tradition, I have chosen to have my name appear on our currency as Catherine Davalos Ortega. For in doing so, I will be honoring my father as well as my mother. Thank you. Well, as the three former Treasurers of the United States who are here will recognize what Catherine Davalos Ortega is doing, is putting specimens of her signature that will later be translated to those on the actual bills. What she will do over the next year is to see that name on about five and a half billion separate notes with a value of about $60 billion. There we go. Now I think Treasurer can translate that to the bills.


Everybody forced here ripping mosaic NFL four box mixer here 21 hobby in choice and 22 no huddle in choice random teams You can find the results anytime late in sports cards.com. I drop you a link in chat. Let's get started Frederick, what do you mean? How like how long have I worked here? We'll work backwards in time. We'll start We'll go just left or right here left or right 22 no huddle It is 22. All right. Yeah, 22 no huddle choice 21. He's got it. Got it all right Donnie's been LSE almost a year I started working here At the end of May last year almost a year I'll hit three years in july Look at you Look at you go James Williams there No huddle rookie auto sains chrysalov a nice start to the break here Here we go sains mosaic miles garret for the browns Pickins you got silver rookie dulcich for the broncos Uh rookie disco sam howell commanders I'm not gonna say that I won't say that David. Are you not him? I don't think so I don't know. I'm just not gonna call myself that blue jaylen ramsey for the rams ramsey rams 36 of 75 silver joe mixon for the bangles God disco davante adams for the raiders. I know lane Time flies when you're in a literal greenhouse Of a state But we love it nearly zappy purple rookie charlie color ravens color match rookie 29 to 50. We love it here Definitely not definitely donnie this definitely doesn't sound like a trapped person What no no Wait you like it because you can play golf all the time. I don't play golf anymore really Met a mastery john elway disco broncos chat johnson bangles on the no huddle All right lane to give us one good thing about living in florida one bad thing about living in florida right now Don't even ask me. I go on Whole list of bad rookie mosaic matt corral for the panthers decent listed good Good i look 20 minutes from disney Bad i live 20 minutes from disney Disco rookie variation panthers. It's matt corral and a patent manning disco for the colts Imagine having your good reason to also be your bad reason It's good and bad. Oh, we got a blue justin fields nice national pride for the bears 66 of 75 Sandal weather all yours not bad Then you got to see people's feet all here Oh No What'd you do disco joey bosa chargers Cubanos is good. That's one of the that's one of the coldings out florida is there's good food kind of like Most places i'd say Although to be there's also a lot of chain restaurants. What kind of depends on where you are Pink zack wilson disco for the jets 11 to 20 national pride Brett if it makes you feel any better. No, it's not sad. I lived in uh, or close to orlando for the first six years And only with the disney ones That makes you feel any better. Was that uh, that's not a silver donald driver packers disco rustle wilson broncos No, Brett. That's not sad You're just you mean you're saving money. That's all Uh, 22 mosaic choice good weather like 50 of the time Lynn, you know what? You need to start you start telling me Will you start going to like lunch or something on saturdays? And i'll show you i'll show you some good some good food around here, man. You guys do go on lunch dates, but We gotta call it bad donnie. We gotta call it that uh silver jerry canary titans Got a mosaic rookie titans is son haskins. What else would you call it? alec pierce colt's rookie red and yellow auto red and yellow quandre dig seahawks 52 of 80 red and yellow cavon thibodeaux rookie for the giants 60 of 80 peacock jim kelly buffalo Peacock buffalo, uh red and green ferris george for the chiefs and malcolm radriguez lions We'll do 21 hobby or 20. Yeah 21 hobby now I got passes my wife and I got passes like the day after We went back i went back and got weekday annual passes. It's like 400 years or something like that When a guy said like twice Lane, I don't really care if you learn golf or not. I'm just saying if you want to I can help you That's all It's up to you, man Yeah, I mean that got stuff in out of kids park auto in the first pack de amie brown rookie commanders mosaic lemar jackson ravens red mosaic loot keekley panthers I'm not gonna recap this one by the way. I don't think so. Yeah, it's not gonna recap this one We're a little behind on time. I like to catch up at least a little bit It's a fields base rookie Parsons base rookie dude. Joe. That's an avante smith as well. That's why I was a gain. Well, that's why I haven't went Joe I want to have enough money so I get my gold custom lightsaber dude the lightsaber. Oh my god. I actually went to ogis cantina Oh, did you it's pretty cool? It's pretty cool. Does he springs or no, it's it's in gout edge. Yeah But I need to I need to get lightsaber next mosaic larry johnson chiefs Maybe next paycheck red Joe mix and bagels no next next next next page Next next overdrive is equal Elliott Really isn't only magic kingdom really I would say heavy driven area I would say maybe over over the percent is for sure, but There's a lot of reasons a lot of people go there blue mosaic chris carter for the vikings number 35 out of 99 silver jared gov for the for the uh This is gonna go lions by the way. This says rams right here. This is going lions He's in a lion's union. It's lions on the back. Let's go in lions air card. Make sure you tag that Uh center stage air and rogers There's a defante smith debut Yeah, I mean if you take away magic kingdom, it's really like 50 50 like adult kid Like it's a very like overall sort of thing like epcot is Truly like 50 50 like kids and yeah, it's seen that way purple jalen reyger eagles 14 of 49 Silver larry fits jelde cardinals in fact there's not that that much to do for like little kids there Like there's some stuff, but like right a few other like the guardians coaster is like kind of intense and Baker mayfield straight fire You know test track is intense mission space can be intense I've seen this I've seen the pink jalen reyger and I just all naturally thought it's a monte smith and I was like, oh wait This is the yeah, and we came to the avatar. I was funded. I did that for the first time a couple weeks ago mosaic walter paid in bears silverbenz karanik rams rams wish they had got now I mean, they still got a super bowl out of uh stafford silver metamastry mohomes chiefs Maybe now yeah, I don't know Nick and serena try to give me the buy a katana and I was like, I don't Spend our gift card on it. I was like, I don't want to mosaic to marcus lorenz for the cowboys silver mohomes chiefs super bowl mvps other overdrive purple this time elvin gordon the third broncos nine of 49 there's a lorenz debut Do they get kicked out of epcot? They get too rowdy mosaic miles garret for the browns mosaic ricky marquez stevens in for the bills. I mean you get kicked out of epcot. That means you had a great day montage mosaic jessen herbert chargers I'm good for them rams pull out.  Nothing goes. That's why they send them. That's why they sent them to destroy it It was a whole plan to get them to learn more Hey, you need you need to go through some tough times jared goff. It was a ruse mosaic james robbins and jags red rookie cornell palette chiefs That's why they send them there, right? We need you to grow up go to the Motor city Win win games with the lions do the toughest thing that's ever been done mosaic bears akeem hicks red steve largen for the seahawks silver rookie blue chips mac jones patriots Due to work out into build lightsabers. I'll literally pay for my own if we all go together. That'd be so much fun collin granson rookie auto colts mosaic zack cunningham for the texans silver rookie davante smith debut eagles Eagles like I want I would want to go to galaxies edge only when I have enough money where I could just literally do whatever and we'd have to worry about 22 mosaic or 21 mosaic choice now last one guys Harry Potter land I used to go all the time Joe my wife and I used to go all the time when we worked at the resorts Love there was any world Harry Potter. It's a lot of fun silver jerry judy broncos mosaic andre johnson texans Cornell power red and yellow rookie auto chiefs red and yellow seahawk steve largen 37 of 80 red and yellow peanut tilman bears 76 of 80 peacock buccaneers rob grinkowski nice card There we go bucks Peacock in each of the choice boxes. Yeah red and green tony rookie for the giants and red and yellow awusu kora moa rookie browns 53 of 80 that's going to do it for the break. Thanks everybody. We've got some peckable up next


So, and I really enjoyed that part and I actually got to be, you know, more feminine. This woman, going by what she would say in this video is a true embodiment of those rare virtues that singles out some Muslim women out from the ravages of modern day cultural work. There might be a wrong English, but a true responsible woman is rated through her ability to organize a home and train the best of children for the general society. In Islam, the family unit is considered the cornerstone of society and the mother is obviously seen as a hut of the family and to instill, especially in-heart children, the values and principles of godliness. Because we were working different, so he was doing shift work. Oh, so you both? Yeah, so he was doing shift work and I was the corporate nine to five. So there's days where I'm going to work in the morning and he's not there, or I'll come home and he's not there. Asalaamu alaikum ladies and gentlemen, welcome to another episode of an open-minded thinker show. Just as cities are tradition, please like and share this video so that others can see it and learn. Subscribe to HEPA's Grow. There are three key words from the video today. The three words are feminism, stay at home and motherhood. And all of these are mutually exclusive.  According to her, both can stand shoulder to shoulder. I would come home from work and on the weekends, I would meal prep.  So I'd cook that on the weekend, freeze it in like little pouches. So I know Monday, Tuesday, Wednesday, Thursday, Friday is what we're having. And so then all I've got to do is the rice and the pasta or whatever it is. And he would always come home and there's always food. Even if I go to sleep and he's finished 11 or whatever, I've got his plate. Everything done, microwave, his cup, drink next to everything. Just set up for him. So when he comes over and he can just eat, shower or come to bed. There were days where we wait, what did I just hear? This lady is shuttered a table in the ears of the so-called feminist society today. She has obviously blasphemed womanhood. I mean, this is blasphemy. Yeah. How could womanhood be defined by just what she's saying? Like, I mean, you've got to listen to this again. And he would always come home and there's always food. Even if I go to sleep and he's finished 11 or whatever, I've got his plate. Everything done, microwave, his cup, drink next to everything. Just set up for him. So when he comes over and he can just eat, shower or come to bed. OK, guys, I break her point this way. The husband comes next from work. Now, let's follow it taught. And this by her copper job, though, she was staying at home at that time. She cooks, she prepares a table and she treats the man just like a king. Why should a woman treat a man that way? This is obviously blasphemy. There were days where we would spend time together, so we'd end up coming home at the same time. And I we would both make it our duty to spend time together then and cook together, sit down and eat. Because, you know, we're still in our honeymoon period. You know, we're still getting where we're happy. Anyway, baby comes not long after covid came. So I still kept up with those duties. And I essentially was a stay at home mum for a year for maternity leave. So what that would look like is whenever he's getting up to go to work, I would make sure I have food ready for him. So his breakfast is ready at the time, you know, I've got a three month old, six month old, however old she was at the time. But I'd always make sure that he left with his stomach full and would come home and his stomach is full. We'd spend time together as a family when he comes home from work and then do it all again tomorrow. So and I really enjoyed that part. And I actually got to be, you know, more feminine. I wasn't a stress. Well, guys, this is unsettling confession, guys. According to her, taking care of the family made her more feminine. I know this might be controversial, but it is important to recognize that femininity is not a fixed or universal concept. And what is considered feminine can vary across, you know, cultures and individuals, especially in the West, yet in Islam, attention is more on traditional feminine traits. It was pre covid, so 2019. So I had her in December, 2018. So from December, 2018 to December, 2019, just before covid. Oh, right. I was a stay at home and I loved it. You know, everything was covered. It, you know, it was the ideal life for me. You know, I would make sure that his clothes are clean. I'm ironing his clothes for him like I'm trying to keep him as the man. When he comes home from work, he's kind of, you know, if I see that he's stressed out, I want to give him some of that. Some of my feminine energy, because I had a lot to give at the time. Femininity in this in this instance is often associated with traits such as sensitivity, empathy, nurturing and emotional intelligence, which can be beneficial in many settings, such as interpersonal relationship, caregiving roles and collaborative work environment. Are there any benefits to that? Yes, of course. In some professional settings, women who display feminine qualities may be perceived as better communicators, more approachable and better team players which can enhance, you know, her job performance and generally her career success. Are there any downsides to the form of Islamic femininity? Yes, of course. But that is a topic for another video. The Islamic encouragement of femininity is an endorsement from God. We shouldn't take that away from it. And Thars comes with a lot of advantages with homes and marriages crashing on an unprecedented scale today. Muslim women who adopt the Islamic definition of womanhood wrapped in authentic traditional femininity have recorded apparently greater success than others who did not. On the greatest scale, it makes more sense to be that traditional. And just like with the Prophet Muhammad, peace be upon him, one can say that truly paradise lies at the feet of the mother. Guys, let's leave it at that. Until next time. Assalamu alaikum.


Income tax 2023-2024, itemized deductions, property taxes, and other taxes. Get ready and some coffee so we can recognize the quacks when doing income tax 2023-2024. Most of this information can be found in the instructions for Schedule A Taxure 2023, which you can find on the IRS website at irs.gov, irs.gov. Looking at the income tax formula, we're focused on what I would call the below the line deductions. More specifically, the itemized deductions. Remember in the first half of the income tax formula is basically a funny income statement. Most income statements having income minus expenses resulting in net income. Here having income minus various deductions resulting in taxable income. Noting for taxes deductions are good. Therefore, we're typically looking to have more of them. The difference between the above the line or adjustments to income and the below the line deductions. In part being the above the line deductions do not have to be clearing a hurdle such as the standard deduction before they start to benefit us. However, when looking at the itemized deductions, they typically do need to accumulate higher than the standard deduction before they become a benefit to the taxpayer.