Well, we're just gonna get going here Hopefully you can hear me. Hopefully you can see me. I'm not too shadowy looks like restrooms going and YouTube is going Hi folks, welcome to deep dive. We'll wait a little while and we'll get started Hi, Beata. Hello, David. I was thinking I was gonna have to restart to get my My audio going but it turned out I just had to change it to the right input and then it worked Hey, Hams Labs Welcome. Welcome Good afternoon, Sea Grover. Thanks for making it All right, one more minute and then I'll get going Sorry, I'm a little late. I I remember to check my audit and check my audio and in OBS before I got things going Jack in the shop says I forgot I had this open. I was setting up for a fiber laser burn. Oh fancy That sounds more makery than my software world I Had the AC on running. I do have AC now, which is good But later in this dream. I might have to turn it on again. We'll see I've got this clock thing from the shop It's currently 79 in here and it's happy, but a Couple more degrees and it'll be unhappy and I'll be unhappy too All right. Hello everyone. My name is Scott. I work for Adafruit on circuit Python Adafruit is a open-source hardware and software company based out in New York City I work remotely for them and have since I started Here in Seattle. I'm now in this brand new office. This is stream number two from the office Hopefully it goes as well as the first one and circuit Python is a an open-source Version of Python that runs on tiny computers called microcontrollers. Here's an example That is blurry This is my custom hacked metro M7 so this is the microcontroller here and The USB port here you plug in it shows up as a drive There's a code.py file on it and you can edit that to get your code running It's meant to be super quick and easy for lots of small embedded projects making it making it really easy Hello Isaac Ben and hello, Yanni. Ham's lab says I'm curious about your shirt. This is super con 2019 It's one of the one of the conferences that I kind of Think it about going to again. I'm not planning on going this year But it's one that I did enjoy so I I think it's in my My list of places to go This is deep dive. I work on the software the C under side of circuit Python So in deep dives we tend to pick up topics that whatever I'm working on for circuit Python Which happens to be upgrading the vendor SDK called the IDF for expressive chips I'm just about done with that. So I'm hoping we can polish that up today But I also love to answer questions and go in on tangents. So bear with me as I do that And if you have questions, feel free to ask them. I I love being directed that way as well So why don't we just dive right in and as if folks have questions ask them Oh Hey, dishipoo, I guess what I should say first is I did get the hover cam set up and it looks like it's active still Which is great It's a little funky because I have these these are the PC bike probes which I'm just currently using for Connecting to the UART output which is kind of funny, but It is quite convenient This board is the it's a little reflective. I don't I don't know exactly that must be the like The room light that's reflecting, but this board here is a prototype board of I think what's going to be called the qualia Jeff just renamed it, but it's a in a dot clock display driver board. Unfortunately, I don't have it working Um, I haven't gotten this display working and I'm not sure why and I'm not sure I want to work on that Um, but yeah, so this this display is coming and and Jeff's been doing most of that work But um, I had to update I updated the id of five stuff stuff on top of Jeff's work and The api has changed so I have to update Jeff's work Uh to id of five. I've got it compiling Which is kind of my bar Um, there's going to be a lot of issues probably with uh the id of five update and and uh So I'm not going to like hold myself I'm not going to worry too much about bugs like if you can use circuit Python generally so I Hey unexpected maker So the tests I have been running this week, uh on the id of five update is just a basic wi-fi test That does both http and https Requests And the reason I was doing that and I'm glad I did is because I changed a bunch of tls settings, which is used by https They were all okay, but um some of the Configurations of the boards were a little too ram heavy so that I couldn't actually create An ssl socket So I had to change some idf settings to make that happen change them back to basically what the the current settings are I don't know how they got unset Like the number of tcp buffers and things like that. I've changed Which gives enough ram to to do this test so That's mainly where I was at I I tested on the c3 the s3 the s2 and the esp 32 Um, and I tested the c3 dev kit and the c3 qtpy Because the dev kit for the c3 uses a usb 0 to 0 converter not the native one I think um So yeah, that's where I'm at um I was just getting boards building that have the dot clock frame buffer active And that's why I was using this board to test. I was hoping it would work um After I like got everything compiling Compiling and running without error, but unfortunately that's not the case. Um, I can show you My desktop Let's just dive right into it. So Um, these are the changes that I've got currently happening and before I commit it I want to remove these debugs. So that's something we're going to have to do um And I changed the way so it was using this esp error check macro um Be out of squeaking and I'm not sure why Um esp error check macro, which is like an esp idf thing um But uh I switched it to this cp check esp error, which will raise a python exception We already have this thing that maps esp errors to python exceptions So this will raise the appropriate section, which is quite nice. So when like I didn't have enough memory um That that we uh Then I get a like proper python error message Unexpected maker says new office is looking messy and lived in as it should um Yeah A lot of the stuff on the shelves. I just threw up there. I didn't spend a whole lot of time. Oh, it looks like The cat cam is glowing. I wonder if cat cam would work um This camera just like these cc 920s just don't like to work for me I have it like on the bench as well. It's another way to look at the bench um Yeah, so I like brought everything in I got it up on the shelves and Haven't uh been organizing too much. I ordered more of the boxes because I'm Ah, I see I ordered more of the these boxes. I'm really started to like I'm really liking it. You can see I have my esp 32 s3 box here um That I've actually you know started to collect Collect them in you can see that I've got these unexpected maker boards here for any testing there And then I've started also these are what I was using this week So I took the time to organize them, but I also used my label maker to actually like write what modules on there Um instead of having to discern the like font. That's really hard to read on the module itself um Got myself a matrix portal s3 as well in there So yeah, I'm I'm liking this system so far This box is out because I'm going to put this Qualio board back in there soon enough Cedar Grove says using a unexpected maker feather s2 for a circuit python iot project um Great board design smooth sailing William says are we going to be getting esp 32 bluetooth support in circuit python? um It depends on when someone adds it This is a snarky snarky response. Um, I did actually try to turn on uh The bluetooth support that we have Um kind of existing in circuit python. It's not complete um I did try to turn it on for esp 32 and it actually, uh It's like 200k bigger. So I think We should think about whether we want to do it in 9x because it probably will change the partition layout Unfortunately, just because it's like a giant ball of cool ball of code to support it on the esp 32 Um, and 9x is a good time to do that. So I I don't want to do that in this change um, but it's something we could think about for, uh Something we could think about for 9x There's extra work to to support the full circuit python bili api And that's a limitation of nimble last I looked so unfortunately that's That's even like Kind of underneath the idf that we that we'd have to work on so that That's gonna be a lot of work. My goal right now is to get this 5.0 update um Out for pr and then merged And once it's out for pr I want to start on the 5 1 update And the thing that's kind of interesting to me is adding c6 Support which I looked into just a little bit more. Um, it's in the c C3 family, but it has more ram, which is interesting to me. Um So I'm gonna take yeah, so I I was kind of hope like depending on our timing here Kind of hoping I can clean up um These 5.0 changes confirmed. There's like I have a branch On github of mine that Runs all the ci and there's like five builds that aren't building so I want to make sure Those five are building and then um And then I'm gonna push those changes The ci will run again, and then I can make the I want to do a rebase and squash everything together Um, because there's like I don't know a dozen commits that you know are May include debugging and stuff like that. So I want I do want to squash um Before I make the pr uh either today or on monday, I'll do that Maybe I'll I'll prep it today, and then I'll um push it to ci, you know, I I could I could just Push it today And then once the pr is out, I can do in another branch the 5.1 update, which I'm I'm keen to try um Unexpected maker yet says yeah straight on the 5.1 for sure C6 and h2 support. Yeah, I'm I'm interested in that h2 Unfortunately, it's less interesting because it doesn't have wi-fi So like h2 would be would be better if our bluetooth support was Complete on esp which is unfortunate and something we should do. So I don't know We'll see Gotta get through 5.1 update first But see like 9.0 or 9x should be in pretty good shape once we're on 5.1 And um, we're on the latest micro python as well, which is what dan's working on I saw on the master branch of um esp idf that uh That they are adding p4 support there, which is very cool too. So there's a there's a Chance I and I think generally we're okay updating like from 5.1 to 5.2 Not on a major branch as well. So We could get a like a 9.0 or a 9.1 that had support for um Had that as well okay, so Here's what I was doing is this is the debug output Let me get taller again This is my current like kind of debugging setup as I've got This is used for flashing and this is the this is both like the circuit python output and the the esp logging output So you can see that there's like lcd Debugging stuff coming out and it's not crashing. It's just not showing anything unfortunately um And jeff has a lot more experience debugging this so I kind of want to just say okay jeff try this and and figure it out um My main concern right now is that it compiles So let me find this Window I have a a browser window off screen here. This is the C i output so we can see this qualia s3 didn't build And it didn't build because of This uh include this is like an old include from 4x Um, so that's why I was fixing the build and I have fixed the build so now If we do just the The build itself will see that it it succeeds So I just want to do a quick Let's remove the debug prints that I added that I don't need anymore Oh, and I did I did have some fixes that I made to The idf unfortunately, so I'm gonna have to do that too um Adriano cacamo Says I'm trying to set up a racing drone track with drones to be controlled remotely over the internet from players over the world Can anybody help with the technical aspect? Uh, I assume you mean fpv, so you're gonna have to figure out how to stream video and Controller input The video is probably the hard part and being able to fix them when they get crashed I have experience with that with crashing drones um Okay, where are my Just about to the point where I'm gonna turn the ac on hopefully it's not too bad I thought I might need to do a refresh call, but I'm I'm not gonna worry about it Uh, we don't mind too far out of topics, but It's not an easy problem logging Yeah, one thing that's nice about 5.0 is they have an accessor for the frame buffer now So this hack where we store the same Struct info and then get it out of the struct. We don't need any more So that's a nice cleanup that we get from 5 Uh, I made the camera build smaller by osing it. So we want that this one. I switched to quad I think this is correct as well I just was able to delete these two Includes that didn't work. I don't know why they were included, but we don't need them anymore, which is great And this is the hack where it does this like container out thing um Unexpected maker asks I missed last week. Did you solve that wash dog issue from two weeks ago? What was it in the end the watchdog issue was um Circuit python wasn't correctly protecting the ps rampins. So it was um resetting No, it wasn't it wasn't resetting them It wasn't resetting the ps rampins, but it was allowing other code to change what they were doing It wasn't marking them in as in use And there's a fix on a 2x for it now um But yeah, like the watchdog issues I've found and I I ran into this similarly is if your ps ram is If you're if you're settings to ps ram or house, then you're gonna have a problem Okay Let's stage that This is the news circuit by then check esp errors. So if it's okay, then we're done Otherwise we raise the error You want that as well? We want this This is a not something we want. I was just doing that for um The kconfig updating Oh, and I wanted this error message although this I don't want I was unable to use all the pins that I wanted because it was sort of reserving them for j tag So this is just a heads up now that it does that Um unexpected maker the other thing I wanted to show and this will be interesting to you Is um Now in expressive boards I have And maybe maybe we should just show this so like for your nano s3 We now have these uh explicit flash and ps ram modes um and uh I think 80 is what I was seeing you were doing an sdk config, but um A lot of boards at least for eta fruit stuff is like this is set to dio Because it used to be only used for like the flash setting, but now it's not So now it's quad and then we also have the like speed set here as well So that's going to be a new thing that all of the circuit all of the esp boards will have All right, um lashanda asks, uh, how do you typically debug lcd issues? Find any implementation that works compare the two with a logic analyzer and work towards the one that functions Yeah, that's that is a good approach. Um to have a known good Example for my debugging here My next step was going to be to use the oscilloscope to just make sure that I'm getting output at all um But as I was saying, like I think it's a little too far from like where I've been working And so, uh, it is a better, uh Task for jeff because he's he's done that a bunch Um, and the code that I'm using to test it is all his code too. So there's like There's this weirdo like initialization stuff that has to happen for the screens as well where, um You have to do spy commands to initialize the screen But because the the rgb displays takes so many pins for the colors You typically have the spy bus for initialization over an iSquad C's expander So there's stuff that's just just been doing that as well. So Um, if I were to continue to debug it, I would just verify that I'm getting output on pins. Um And maybe we'll Yeah, I'm not going to do that now, but uh Kind of that's where I would go Anytime where you're like not you think you're checking all the errors, but it's still not working getting insight into um The signals that are coming out is a good idea. I do have like a a salier that I could use here too, but um Like I said, my main concern is is getting it to compile and then the nice thing yeah, so like Something like idea five is like a giant change where you got to get everything compiling and hopefully working um But it's also one of those things where like if you have this big change, you're the only one that can kind of fix it I mean get you could have other people working on that branch But it's like a lot of coordination Rather than kind of like getting it all back in the main line And once it's in the main line, we have this infrastructure for like absolutely latest builds that people can test and everything like that um So So I think yeah, like even though it's not perfect I'd rather get it in early Um unexpected maker says yeah awesome. So have you updated all of the existing boards or do we need to go back and update our own boards? so when I Switched it. I was trying to go based on the stk config That was in the existing repo. So if I saw stk config there that would say like oh actually use 80 megs I I tried to change this The setting to match that and then with the updater script the k config settings then go away Because it's doing diffing between like circuit python defaults and esp defaults and all that stuff You'll see here that like the the stk config here is really simple. It's just like the lwip hostname now But I haven't what I haven't done is I haven't like there's a lot of boards I think even adafruit boards where we haven't like pushed the boundary of What those flash and ram settings are and I haven't done the testing to make sure that like You know a particular board can run at 80 or even 120 megahertz for a flash or ram Um, and that's actually part of why I'm not doing it now is because with 5 1 you have the ability of setting it to 120 So I kind of don't want to kind of do a full sweep or a test uh test run yet until I I can um do the 120s on the s3 at least Another reason to do 5 1 And the the other thing to do 5 1 is like I don't really want to debug 5 0 I'd rather debug 5 1 Because you know the the problem we find might be actually fixed in in 5 1 so Um Yeah, my plan is to like get 5 0 in and have that be a benchmark, but then um, and and I kind of like a Benchmark or um A testing point. What's right a checkpoint, right? So like if if there's an issue on 5 1 Uh, we can then check to see if it's in the 5 0 it Thing as well to just kind of like better better understand where an issue was added Okay, I'm gonna turn the ac on Because it's 82.8 now. So um, if it's too loud We can figure something out. It is pretty loud And I'll turn I'll turn it down here A little bit So how's that is that terrible? um, graham says Will this idf 5 update fix the reporter problem with memory leaks crashing wi-fi during extended use That's really hard to know any um any issues that happen over a long period of time are really hard to debug and uh And decide whether it's an issue or not so Sorry, I I I can't I can't tell you Um, if if it was an idf bug then yes, probably but I don't really know. Um, I don't know and I think we're probably gonna change So micro python has updated to idf 5 as well and they they Sound very industrial, uh, sorry Um, I don't know if there's like a filter or anything I could do Hopefully it's not too bad. I bought this acu's So it's not like the very the absolute Absolutely quietest one I can do I probably hopefully won't need it throughout the whole year Um, once it's cooler, uh, I should be able to just open the window But getting a cross freeze is kind of tricky Um, I can turn it off when when it gets cooler in here again. Otherwise Otherwise I'm gonna spend the next hour and a half sweating Um, okay So yeah, graham. Sorry. I don't have something more definitive. It's just a matter of like you should test it and see um I generally I do have one device here that's running kind of all the time and it does crash from time to time but Um, I've I mainly just like catch the crashes and and restart and it's okay um Yeah, it anything any long running problem is really hard to debug Um, okay. What was I doing? You can filter out the fan noise as the acu need to be near the window it does because um There's a exhaust It feels colder here just with the sound Um, yeah, there's an there's like an exhaust tube that goes That goes out um out of the So there's a like port Here just you can barely see It's like a tube coming out the back and that goes out a little little hole So the the window does have to be open, which is nice Knots filter at 120 can help with fan motor noise. I don't know how to do that with obs But that's not a bad idea I'll just sound industrial today and maybe play around with it later Uh, okay. So the qualia builds And then I wanted to look at the other qualia didn't build s3 camera didn't build which I think I fixed already 80 fruit s3 The noise is fine. Thank you. Lashonda. Appreciate that You want me to stay cold true like my my brain goes super fuzzing when it's too hot Yeah, I think it would be hard The ac works better if it's closer to the port too, I think Maybe I I could get something like that would like sit between me and it Hopefully won't need it too long All right, let's run the other ones. Oh, and I have to do the idf I have to do another pr for our version of the idf So I think most of these boards that didn't build are ones that jeff added to test the lcd stuff Or the dock clock stuff So hopefully these ones are are fixed already Oh, did I say that if I get this pr updates all going I Was hoping to actually start the five one update today I don't know how bad it's gonna be but I thought that could be cool See how much progress we can make on it. Oh DCD says another trick would be to pre cool the room ahead of time. I did that I turned it off right before I started streaming I ran it for like an hour And I was down to like 78 but it got hot real fast. It doesn't help that it's like the afternoon, right? So I could probably put the shade all the way down and that would maybe help a little bit Yeah, I did I did think about that. I Maybe I should have done it more but All right, so we're running this hack tablet thing. We'll see if it builds it didn't It failed for the same reason the dock clock stuff. So It's probably fine now. I'm just gonna run it and then we'll do this next one Which is also like the s3 eval kit Or the lcd eval kit as well um, yeah, so we'll I'll make a pr for the idf changes. We can just go here and This is sublime merge And it's a great way to keep track of changes that are going on and also undo the ones So I like I do printf debugging a lot, especially on expressive So, uh, this is a really easy way to revert, um, the printfs And in fact, you can like highlight certain lines and then just discard those as well um So this is an existing change here that jeff did but um is not on the 5o branch and then um Here's a typo that I was like I'm gonna fix the typo um I was having a problem where it was trying to disable the clock Even though the clock had never been set up. So I added that And I also added the I had the problem that um, it wasn't able to allocate the frame buffer um, and it wasn't Actually like recovering from that failure, you know, ideally when it can't allocate something it should Like raise a python exception and not completely fall over but the is the idf wasn't um The existing version wasn't actually correctly, uh airing out It wasn't airing out correctly. So this this fixes that by um A pattern that they have further down in the file where they capture the return value and then um And then go to error And you can see here that error returns the return value from the sub thing So in the original version, they're not actually setting return to the error when they return And this destroyer was not working either because we never set up the clock blah blah blah So this is the change that I've got to propose to Um The idf and actually I could just do that right now Oh good. So this uh, this board built. So let's do this next one The board builds take a little time because they're not set up to be I never do them in parallel Because we've had problems in the past This is the circuit python 8 version. I do not want that We're not using this anymore. So status switch branches to dot dot clock eight of roots origin So here I just want to rebase on the merged version And I guess what we'll do is we'll do a five one branch as well Oh, I haven't actually ESP lcd louspyram allocation only memory maps also Successfully on frame buffer Just trying to make sure my pace buffer doesn't have a password in it The fan that is controlled with circuit python 8 It crossed my mind to like make an ir blaster so I could turn it on When I'm not here That the ac but I had this problem where Well, I just bought it and there's a plug on the back that was open And so it leaked out all over the floor. So now I'm like I only want to run it when I'm actually here Which is fine. It does a pretty good job cooling stuff down even though this doesn't show it. It feels cooler to me Um, okay, so that was I think the second the last one that failed. There's this maker fab's tft 7 which again is like a another lcd board So we'll just do a quick build of that as well. It should be fine maker fab's 27 Okay, so I committed that and now I'm going to rebase it push that to my own branch and then I'm going to go to at this level Dj def 3 says how are devs working on 9 when 8x is main? Is there a 9x main? So main is not 8x it is 9x All of the 8 2 releases are coming out of the 8 2x branch Yeah, so main is 9.0 Or 9x We'll do alphas and stuff But we're waiting to do official alpha releases for 9.0 until we have MicroPython 120 merged because it changes the npy format again So 119 changed it, which is why you have to use py files with main right now And then 120 will change it again, but it we won't change it a third time We don't have to change it again after that. We'll be up to date with MicroPython So, yeah Let's go back to slime merge Uh This we want stage so bindings should include the common hell headers And the reason is that is that sometimes they have data structures that they're importing This is the change we just made so we want that as well This we don't want Um, so let's commit all that And we built So Update dot clock Blah blah blah. That's fine It'll format stuff because I don't format things perfectly Oh, we should make a pr for that So here you can see that like we carry our own branch of the idf with fixes Isaac ben says so if we want to contribute an issue with uh milestone 9.0 Do we need to pull from main? Not necessarily. So if it's marked with milestone 9.0. That's really just a Like we want to make sure and look at it on the Adafruit side before 9.0 But if you would like to see if the fix If the problem is in 8 2 and you want to fix it for an 8 2 release do it in 8 2x first Because uh every so often will merge 8 2x back in the in the main So all the all of the fixes you do on 8 2x will get moved over to main as well And that's the easier direction to go. It's it's a little weird You have to basically have two two copies of a commit if it goes in main first So back going to 8 8 2x first and then in the main is is easier than the reverse because we don't want to with With 8 2x changes. We're okay getting them all in 9.0 but with 9.0 changes we don't want them in 8 2x so it's easier to go one way than the other Yeah, so if it's in 8 2x and you want to stable anytime soon, then it should go in the 8 2x release branch But I mean it shouldn't be that long until well, hopefully Dan's actively working on the 120 merge So we're hoping to get to the point where we're starting to do uh 9.0 alphas again It's kind of like That'll be good because then we can all do all of the mpy and bundle structure as well So it's it's something we want to do for sure okay, so This pr we'll we'll kind of want to wait For the idf 5 circuit python pr until this is in so If you're having fun with main or if mains working just fine then that that's fine We can we can if it fixes in main We can always cherry pick it onto 8 2x. I mean it's a little annoying, but If we find that we need it in 8 2x, they're like we have options Okay, so now I made that pr I made I haven't made this I haven't made oh wait. I did I did make this commit. This is I just made that commit and now I'm going to push that to my update idf branch Which is what? This ci run is running off So hopefully all the boards will build We'll update the idf Commit once the idf changes are merged in and then it should be ready for pr Hopefully hopefully it'll be ready for pr I know it's not perfect, but I've been working on it a while micro dev did the vast majority of work already So yeah Let's uh, any other questions or should we try to do 5 1? I don't know exactly what is involved in 5 1 But this migration guide will tell us Gcc Is upgraded which should be fine We might need to do this pulling items are deprecated Like there's not that many changes I wonder I want to try this. It might be really quick Like this this says there's not that many changes. So it could be Free art us now always uses internal memory power management stuff Okay, this should be this could be really quick um So I definitely I want to give this a shot So what do we have to do? We have to I'm going to just uh switch myself to an update idf 5.1 branch And now I'm going to go into esp idf and I'm going to switch To a circuit python The 5 1 branch And I'm going to create that LaShonda asks, uh, do you do local Completion with a native idf install or using a Docker image? I am using native idf Yeah Yeah, so usually when I set up I'll do uh, and I use fish. So it's a little weird I'll do export idf path And then um, and then I'll do dot export Dot fish and then the first time I use one and actually we'll have to do this right now Um, so let's Let's close these So yeah, I'll have to show my idf setup right now actually So because we're going to want to do a Get let's see whatever remotes are so we're going to want to pull Get fetch expressive And I don't actually care Usually we don't track releases. We we track Release branches of expressives um So so my goal is to switch us from the release 5.0 branch to the release 5 1 branch So what I'm going to do and I think If we see our git log Um, we've got a couple of that uh fixes that I've done Um, and then there's more so I think we want to get fetch Unshallow That should remove this grafted thing And the reason it says grafted is it's just an optimization for um, It's an optimization So that you don't need the whole git history Um, but that makes it harder to do Rebases which is what I'm about to do. So I'm going to rebase um These commits after so you can't see where I'm pointing Let me point with my mouse. So here is a 501 tag So this is an official release from expressive and then everything above it are changes that either micro dev or myself Or the folks that like did the changes that micro dev pulled in Have done on top of it. So there's just a few fixes that we carry And now what we want to do is we basically want to rebase so we want to do these four changes But we want to do and maybe we'll just do it as a as a Kind of catch all again But we want to do it on top of 5 1 and not 5 0 So we should be able to do git rebase I And we can actually use the expressive release 5 1 Let's see what that does invalid upstream. Oh, but I have an extra e So I started typing it and that doesn't look right So that's not right. That's too many way. We should only see four things there So now I'm going to do git rebase abort And hopefully that'll send us back to where we want to be On to I think we could do on to and then um The what was it 5.0 1? There we go. Holy moly. I got it right. Um, so it's That Finer syntax is saying where do I want to move it and what am I are my existing changes based on? All right, so it applied cleanly So now if we do git log we should see That this is the latest change to 5 1 and if we go to Express is expressive idiot IDF and seed commits we can see that this is the 697 is the latest from them And now these commit hashes will have changed because they got rebased Um, at some point there's a they did a 5 1 1 update, but I'm not sure where that was So if we look at here Maybe they'll show us where the 5 1 1 tag is. I don't see it. There must be a lot of changes Anyway, so I think we're in the right state Git rebasing seems like black magic to me So rebase the way that I like to think of it is that you're replaying Changes that you made down something on something else. So it's kind of like a it's a It's it's like cherry pick except it's more than one commit kind of all in one go So cherry pick Chate takes the patch from an individual commit and tries to apply it on top of where you are now Whereas rebase tries to to take a number of commits and do that Kind of in sequence. So it's replaying all of the commits on top of a new starting point Okay, so we want to do the export again and now we'll do install so because it said it uses a new gcc We'll do this new install And that's why I started a new terminal. So I didn't have State from my old version So here is it it's installing all of the new What if this just works should I just do a 5 1 update then? I mean if if it's really simple then I might Maybe I should just do Instead of doing two prs. I should just do one. I could do it as two commits But like if if nothing Significantly changes and maybe it is easier Let's we'll find out All right. So now my environment set up. I did the install and I did the export and It's telling me there's old versions of stuff that I could delete that I probably should but I do move I do shift around So let's just Make A board let's do this quality one Because that's what I have plugged in The tab probably doesn't work very well But we're going to do a clean first I because I don't want to Pull in any of the idf stuff And we're in a new python environment. So I've got to install the Circuit python requirements because The idf sets up its own python environment. So we have to install Our dependent season into that as well. All right. Well It doesn't work Um So this is telling me to update some modules So if I look at get status and you notice that here it's not green. It's red Um So I need to do is get some module update All right. I always do this. This is the worst I need to figure out how to take commands that don't work out of my new history okay, so embed tls has new commits and modified content. So let's just Switch to it. I think I turned on some debugging or Let's see what happened. Yeah, I just Changed it so it printed out correctly So let's just do some module update and knit again. So we get the correct version. Now we're green New project. This should be quick and easy and gratifying and then it doesn't work at all All right, it looks like we're up to date on the idf side Uh, we have the correct sub modules. So let's do A clean again And then try to build it I just want to start from a Like a blank directory. All right We have things to fix Silly me. I thought it would be easy Okay So these this looks like include issues. Um, this can be So we have this like weird hybrid builds Um with the idf so We'll build a bunch of support libraries using the idf tools and then we'll build circuit byte. I'm using our kind of like normal make setup um And so and we link in that normal make setup. So we have this big long list of This big long list of like State that the idf would manage for us, but because we're using our own link step. It doesn't So, uh, it include files is one of the things that it, uh Doesn't usually we don't usually update automatically so Oh, and we did see that the le ledc thing did change A lot of these are the same thing So usually the way that I'll figure these out is by This is just I don't know why that debug shows up So let's just start from the bottom So let's try to find this file Like it it might have changed Like maybe they updated free rtos or something and So here we can see that it's in, um idf components free rtos esp editions architecture blah blah blah Free rtos uh config arch so like the free rtos part is the same um But our Included for it must be wrong now. So let's let's see what we see Our include path so here we go Free rtos Yeah, so here we can see that we have this esp editions But it doesn't have architecture Or it's like kernel portable Whereas we now need editions arch Architecture include I wonder if that's Well, that's free rtos kernel. Let's just take a quick glance and I'll do this in Here I I want to know if like I I need to remove Like should I replace the ones that we have or update them or I should I add an additional one? So i'm going to look in components free rtos esp editions so there's no include here anymore So These two includes aren't valid Or no i'm not in esp editions yet. Okay, so there is an include in free rtos So I think What I want to try is I want to do arch adf target And I want to give it give a try to remove that and see if it works Oh, I got so excited it's just gonna be so easy Okay, so this is Uh We saw this file, didn't we? This is probably because we Changed it and where the file is I don't care what references it Okay, so yeah, we I shouldn't have done it that way and we saw a bunch of errors, but hopefully it's a different file nimble transport ellipops GPIO H Like at some point we're going to have to update from legacy apis So there's GPIO driver slash GPIO H is in components driver GPIO Which I'm a little surprised components driver include driver components driver ESP private so We can circumvent it by we could add driver GPIO include driver And this is all stuff we have to deal with because of our like hybrid system components driver So I think it probably means that we're kind of circumventing The notion of private We haven't gone full-on C make and every time I every time I look at C make I'm like, why did I have a new language and the language doesn't solve the problems? I think we need to be solved it doesn't solve problems we have um And I talked to other people that use C make and they said I don't like C make So it's just like hard for me to pull the trigger on that Even though tax been moving Tack has been moving Tiny USB over to it Okay, so this is a similar change, but for the two wire TWA I which is the uh Can it's a different name for their can peripheral TWA I Do do do so they move some files around blah blah blah go with the one that we see Same thing Do do do I bet you that's what this problem is too C make is bad, but it's much better and cleaner than make uh Yeah, I'm Part of the reason that we're still on make is that like our make system is Kind of hairy, but it's hairy in the same way across all our ports Like this giant list of includes from vendor SCK is like a common thing So it's like It's bad, but it's consistent and consistent. It's really valuable So I bet all of these um component driver things are the same problem um Like I bet this spy stuff is the that way too So maybe what we do is we do components driver So we look for components driver in common. How and we'll just update them all There's not that many dot clock frame buffer has a components driver PWM out as a It's in the header This is a little inconsistent Whether you use the full path or the like include path I do well I realized I basically navigate my code by file path a lot And I don't think that's true for everyone But because I do I bias towards having like the full path here Oh, now I can do Da da da da da da All right, let's do a build again. I want to make sure I'm making the right progress Do do do do do do I don't know what this L what ops thing is So it's not in examples L what port include is where it is So let's go back to our make file components L whip include So I wonder if Let's pull up our food. So there is an L with L up include L what Port So there's no esp 32 x x anymore so I'm gonna Where was it porch? Let's guess that we take that esp 32 off. We're gonna have other problems, but that's fine This is like very methodical sorts of stuff to fix So now L with ops is unable to find arch sys arch H So let's fix that first because that's related to the thing we just changed So it's in L what we don't want tests. So it's in port free our toss include port Free our toss include Yeah, and if folks have questions please ask Otherwise, I'm just doing the like pretty methodical Fix all the compilation issues Uh We're looking for cc.h Um, and that's okay. So that's in this esp 32 xx So Port free our toss we probably want to We don't want that old one because that one doesn't exist anymore They must do more and more development on Linux Because they're factoring that out So the nimble transport thing is still an issue and then more driver stuff I bet the transport thing is similar That there's like a linux transport and uh So these ones we're looking for exact stuff So we want this last one Yeah, l whip is the low I don't actually know it. It's an ip stack I forget what it stands for Okay, so now we're looking at bt host nimble Look at this host nimble nimble nimble three nimbles Transport include one two three Include I bet we still need it Of course, we don't have a good way of knowing When we don't need it transport and let's be better and alphabetize that Do-do-do-do-do-do-do All right, we're doing driver stuff This looks like all driver stuff Let's fix the driver includes Plus I owe you are starting from the bottom again My I'm gonna hazard a guess and say it's you aren't I wish there wasn't this giant blob. I'm not sure where that giant blob is coming from Oh, it's from this called process error Which is being oh, it's a failure of make cuester definitions So the cuestering process is is doing all of this include stuff And then it's failing and raising an exception Okay, so driver spy master Um, so let's see. Hopefully they renamed it But they didn't It's in driver spy So we'll probably just need to add more here and i squared c So again, I'll just assume it's us touchpad It's part of touch sensor. That's why I didn't I wanted to look it up And I think the other one was i2s types, right? Okay, it's also under i2s Let's do that too Oh, it's like I feel like I keep streaming because it's like a reasonable temperature in here Oh, so it still didn't find touch sensor This one we have to change in bus. I am which we have open Is in driver. Let's see Thought touch sensor should work. I thought I fixed that. Oh That was less wasn't it Touch sensor didn't work. But look it fits almost on a single page We've got alarm and digital in-out to fix on our side And this is the argument Why you shouldn't put the full path Like the full path I like to Know where things come from But we should standardize it. There's really good tooling in the claim world for knowing like includes that are used or not used Is like that So why is this touch sensor one not working? It's possible Oh there's a Port specific target specific one That's why touch sensor in that Do do do do do do do so now we're only missing espbt.h We're down to our last one Our last header that moved on us Okay, so now it's in espbt include target include that's bt include id of target include Interesting, but it's not in the s chips at all Why is that? This espbt chip bt header is not for the s3 It should be there for the s3 Let's investigate Because we're building for the s3 and that's why It's a problem maybe they did some c magic c C make magic to like share c3 and s3 or some some garbage like that Okay So we're now looking at bt Components include And there's no So let's see what c make list is doing Ah, yeah, so here C make is saying oh, and if it's an s3 then we include the c3's directory Because that makes sense Like you couldn't even sim link it Or how am I going to fix that? Well, I think I will do bt id of target We will say bt if equal id of target esp32 s3 Then we're going to make bt id of target equal to esp32 c3 otherwise bt id of target equals id of target I mean it makes sense to have one file but when you have things split like that It should be consistent. It's going to ruin my kconfig as well My kconfig updater Assumes that hey, there's an h4 in here I haven't seen the h4 before did they announce it? h4 And all the readme's they say like the h4 Oh, and nobody replied They haven't announced it yet These are modules but with a different name Let it fool you hardware h Yeah, see so they only say h2 here Well, there's probably an h4 at least that they're prototyping h2 Yep, no h4 yet Oh, so this is um A warning that we saw in the migration guide Um About address checking so let's see what they say Warnings address enhanced version of address warning which is now more eager and detecting the checking of pointers It's an array and an if statements if array Eliminating the unnecessary checks resolves the warning Okay, so let's take a look at um Bindings like I'm all forward deleting code Lightweight IP, thank you Lashonda. Sorry. I missed that earlier I expect to make yours as expressive or trying to beat stm with the number of product skews they have I don't know. I feel like stm is a lot like I showed my boxes. Oh I don't know if unexpected makers saw my boxes. I guess I showed it earlier But I've got one two three four five six seven eight nine Nine different st boxes and that's just for the like stm 32c0 or g0 or g4 so I don't know stm has a Pretty good grip on that Okay, so esp now pure 86 it says pure info Will never be none. So let's just do that And it should go away And then peer at 199 Set encrypted. I wonder why this is here. Oh, this is saying LMK is none. So let's peer make new Maybe what we need here is just a self Peer Oh, no, it's saying it's part of a struct and it's in the struct there So it's never going to be none I guess what we should do is We want to set pure info That LMK zero to equal the null character Oh your own sorry I need to work in on a big screen Right have the code is under chats Francois ucc code. Yes. So this is the c code underneath circuit python, which is python on microcontrollers And uh We're working on updating the esp idf to 5.1 actually We finished finished the work on 5.0 and just wanted to see how far I could get on 5.1 Which turns out to be pretty far Um Okay, so we always know that like we have this LMK string Um, but we're I'm gonna set it to null And then Get bytes length How do we know we actually set it because it's possible the encryption is Get bytes length like should we just assume that if the key is Zero, what are the odds that the first byte of an encryption key is zero? Maybe what we actually need is Um, oh no We don't need this what we need to say is in this Set encrypted Whether or not to use encryption Need to sleep. Good luck. Thanks for stopping by Is there a default value for this? Is there a a flag for an encryption key that is not valid? I don't know this esp now stuff I'm k esp idf Oh dear esp wi-fi It's an exactly one spot So I don't yeah, I don't know how It's a mark like to say that you Didn't set a key like it's trying to check But it's not or what we could do is we have peer info here Um, we could just add a bull that says Key provided LMK set and then in here Of course, this is all We'll just track it We'll set track it separately and try and instead of trying to use some like fancy Sentinel value The longer it takes the better it's working, right? The builds do take like a minute and a half When they're not parallelized at all No return function does return That's not good common, how I had I was seeing this earlier 216 It's marked no return But this esp deep sleep must not be marked as no return In general the function does not return but if the sleep is rejected then it returns from it Okay, so we can't mark it no return because we may actually return But it doesn't tell us how to detect whether it was rejected Oh, all the other implementations don't return Oh Okay, so I guess what we could do is Instead of doing that We can We could just while loop But we could does reset into Safe mode nor return It's no inline We'll see if it fixes it if it returns it was rejected Unfortunately our api doesn't account for return. So how do we Handle handle an exception that we're not It doesn't give us a reason It doesn't give us a reason it was rejected which would be nice I'm pretty sure that we could raise an exception as well But this is going to be called outside of the vm. This is called after Like do we shut down? We could do light sleep The light sleep returns We're building something Building the idf stuff No such directory Oh, I think that worked Uh So there's no lab coexist for the s3 Ah, it's moved It's in esp coexist Coexist would be too long Okay, so this is in nice It would be too easy So we want to move this out of binary wi-fi blobs And we add it Getting closer. It's true. We're to the linking step. It's true I have a c6 here Although we have 20 minutes till my two hours is up I do feel pretty good. It's only 80 in here Oh Undefined references Lots of them Load segment with wrong permissions MMU map and net ESP MM So I think this is um This components to link Bits that we must not have so like this ESP MM is probably new So let's just try Fitting it in here Were these library changes mentioned in the migration guide? Um I don't No I I glanced at it, but I didn't look at absolutely everything. I don't think No, I I did look at everything. It's it's not Which I'm not surprised by Lashana says coax is the industry abbreviation for contending protocol accommodation I'm sure it's covered by cmake tcd But we're weird we're weird here and we just do it the manual way Okay, so there's Maybe we need to do the same thing for coax Like I bet there isn't ESP coax component So link as well Like we're linking in the binary blob, but we're not linking the The one we actually should build Do do do do do do Another section called libraries in the guide Yeah, but not under migration Multiple versions with different numbers of handshake wires Yeah, I like that. I don't have to worry about it. Hey We gotta build All right, let me put That's pretty good I don't think it's a debug build though. I should have done a debug Let's put top bottom to the serial by id usb silicon labs So this is the probes that I've got on the board And then let's do port equals that and cleaning Sometimes I do cleaning flash, but it's slow Let's do a debug build Now the ops build works Hopefully the debug build will work too We'll compile too Yeah, bluetooth and wifi is not stopping on each other Yep, that's what I figured Although I guess the hchips are bluetooth and thread or something, right? I wonder how hard the c6 would be to add It showed the kconfig live stuff I expected port 295 I think this is an error that's in my I think I added earlier the warning about jtag config pins Oh, I'm outside of my port That warning warning Yeah, see the up arrow. That's why I didn't uh Didn't want to do the cleaning flash because I would have just I started it all over You only need to clean on the expressive port if you're changing the idf So like Because we're not using the cmake CMake through and through we'll only build all of the libraries from the expressive If If we're clean And then Flash Boot crash as first result. All right On this one or on the c6 That's why I'm doing a debug build though So I can see what crashes I I get Any questions I can answer while we're waiting for it to build I think that might be all queue string stuff right at the start. It's real slow Probably do h2 just because I'm I'll be there even though the ble is not gonna work that well and the workflow won't work I have h2 board dev kits for the h2 as well. I think Flash flash flash flash flash because everything changed right. Let's reset and see what happens Did I bump it gpio 42 in use? So this is yeah, this is the jtech thing Um, but we did get a drive and it didn't overwrite it either.  It didn't crash Yipee And this is the module. I don't think we can do it 120. I think we can only do it at 80 um Let's just do a quick run of Let me grab my Let's do the wi-fi test script That I've been running I have a folder I call random backups. I ran the backup Just going to drag code settings.toml Which has my wi-fi settings in it and And this won't change at all because um, we're getting the debug logging there too So let's open the actual cvc So you can see we're in the repl and it's going out the urport. Oh and interesting. We're getting the esp logs Okay, so now it's doing wi-fi And we rebooted but we did get so wi-fi status is here in the title bar So we do have an ip Oh, and we hit an assertion Because we're doing nano interesting Unsupported format character Hmm. Well, I'm glad we had that open ship it. Well, I just crashed it. So Not quite there yet And our and our usb is dead Um unsupported format character failed the mp print 585 That is weird because I ran this test assert That is really weird Where are we we're getting in it and it doesn't It doesn't tell us what the character is Is there a way to get an assertion a call stack on an assertion failure? I would hope so Oh, I kind of expected it to honestly, but because There's a panic handler You can just do another flash I'll reset into downloader The answer is I don't I don't actually know a quick way to get a call stack We download Restart I'm hoping that Format character l what it looks like, um Maybe It's the info print itself that is failing Feature complete now. It's just bug fixing. It's always bug fixing We can just make it not crash We can remove the assert But yeah a backtrace would be nice There is a way to one like there's a Like there's a function call. I think we can call Like there's this esp Trying to look at the headers esp debug headers Print the backtrace out of the current stack 100 isn't just in like debug helpers. Yeah, that's a good idea to get logging though It looks like it doesn't it's adjusting the original It's not holding on to the original now that would be too easy. I could log it. Yeah, that's true We hit save mode that time memory access or instruction error It's weird though that we're not getting in that panic handler Like we're in debug mode. We shouldn't be Going all the way around the safe mode Here's the I feel like I'm so close Yeah, maybe I should just do it as one I feel like I'm close And if I'm close do I really want to do a 5.0 and then a 5.1 update I wonder jeff changed the thing so that I'm a I'm a little worried we're infinitely recursing and if prenefs Which kind of would explain this Have a good one. I'm an unexpected maker Thanks for stopping by Oh, yeah, I'm I'm out of time But that's what I suspect what is happening is that we're like doing some sort of inception where um The prenefs from the idfs code is using Micro pythons version And but it micro pythons version doesn't support all the features that the idf is using So another thing we could try actually is just turning debug back off now that we know it kind of works um Because then we won't use it hi, aid But that's what that's what that feels like to me is it's it's infinite recursion Like we're calling ourselves to format the thing to say that we're formatting the thing. Oh, I didn't clean today That was way too fast Okay, uh, I'll start to wrap up even though we're gonna I want to see if this works um If you just joined welcome. Sorry. I'm about to head out Uh, this is a deep dive, uh, where I scott work on the core of circuit python Usually fridays at 2 p.m. Pacific um here on the aid of root YouTube streaming channels Uh, if you want to know more about aid of root, you can go to aid of root.com You can purchase hardware there. They pay me to stream. They pay me to work on circuit python. So Please support them for that And if you want to hang out uh on the discord server, which is the chat above me You can join by uh going to adafru.it slash discord the nice thing about that chat is that it sticks around after streams And a lot of circuit python development happens in the circuit python dash dev channel So that's whenever somebody's trying to get into the hacking on the core and building circuit python themselves I recommend the circuit python dev channel Me and the other folks that work on circuit python are Paid for well Those of us who are paid by aid of fruit and those of us aren't um are generally around During us work hours during the work week Um, so that's a great place to get help of things as well um I think that's mainly it. I think next week will be on for normal Um, so check that out as well And i'm stalling because I want to see if this works before the stream ends I have a tick measure to fidget with Um as well Oh, can I run under gdb and have a break point? I've not used gdb with expressive actually Um, I expected the back the back trace feature to work But I think like I was getting it. I think we might and told it to use our own version of printf And I suspect that's the problem So figure out why Figure out why that is It might be like a microphone setting actually all right. Let's see what happens Hey, there we go All right. This makes me wonder if this is actually an issue of five one So it looks like I don't want to jinx it But this is this is doing pretty good I think the reason that it dumped into the repl here is because I do have it It's still set up to use the console and when it's set up to use the console and the Rx pin is floating it gets Noise on the urt, which causes random characters to come in and get you into the repl So I actually probably want to turn that off I think this setting that is causing this problem is Because I know I know jeff changed this stuff a little bit In the qualia build there's this sdk config for turning the urt on and by default are So they did that and then rebuild again, which is going to take a while but That'll stop the the circuit python serial output from going to All that and there's also this console Which I don't want as well, but yeah, so that is Exciting stuff I it does make me feel like I want to just skip straight to five one Like if the wi-fi is working, that's a really great sign Um, so yeah, maybe next week we'll have a pr for five one um, I think Because I did a bunch of k config stuff as well. I'll probably do h2 and c6 just uh There's um, like shared sdk configs Per target, so I kind of want to make sure that those targets work Um, I wanted to do that with five one, but besides that it's looking really good to go into five one Uh, which is great news, um five. Oh was a huge thing and and um, I should also just Thank micro dev for the work that they did to get us On five one. I didn't tell on five. Oh, I did not have to do a lot micro dev Did a lot of the hard work for that So I'm just they're they're a student so they're They're uh at school right now, so I'm picking up from them and finishing it. Anyway, uh, see you on discord See you next week. Uh support me through by through By supporting anifrew blah blah blah anifrew.com. Thank you all have a great weekend


I'm going the wrong way. Oh, no, I need to go west like literally just west Oh my god! OOOH! OOOH WELCOME BACK TO THE RAPISODE OF WELL! Minecraft, Jurassic World of the Bitches! I have to say, okay, this one seems so much more fun Than the other one we did like the other one that was like, oh, yeah, you can make some dinosaurs da-da-da-da, but that's it Where's this one? I don't know. I feel like we're actually adventuring and exploring things We have tasks to do, but the other one is just flailing around So we've got two more to do before we head to the helipad. They think it is. Retrieve samples and poach out patrol So we'll do this. Poachers have killed some nesting taran- YEAH THAT EVIL- How'd find their nest with exitop the clips nearby and retrieve the eggs before any tarana nons and poachers can get to them Once they are in your possession take them back to our post two and put them in the incubator So that's why Okay, okay, so we have this here, and that's why we- oh, okay I'm wondering if we're gonna need to put them on top of the roof because that's why there's a nest there So let's have a quick check of our inventory guys before we set out so we have one lower arrow One standard arrow, one flare arrow. I really need these. Well, I do need his bandages So we'll get some of those. Field kit? I don't think it's here. I think it's yeah, it's this. No Shift-click. Yes. I kind of know what I might be doing. I don't think I'll need flares For this mission. Crossbow. I really don't need a crossbow if I'm gonna be honest. It doesn't do null. It's pretty oval Maybe I should have my um My gun out actually. I should probably have this equipped just in case because maybe that's better It's definitely sedated copies in the past. So that could be worth a looking head towards a marked area Okay, where is marked area for a start map. Oh My god Okay, so oh, that's as far as I can zoom out for now Okay, so I want to go back across follow the road down across a bridge and I don't even know I just make my way up through a mountain pass or something Jesus. A vehicle. Do we don't have a vehicle? Any vehicles nearby? Surely there's like a motorbike. Perfect. Get there in style Because I don't know what else I have. Oh quad bike Should we just go for a bike? You know this. Oh Jesus. All right. All right. All right. All right. I'll sedate you but Oh, I'm doing anything.  Well, let's say improperly Yeah, did I get him?  I haven't even scanned you yet. We know I know I didn't Always yet. Is he awake? Can I cannot take that? There we go. He's sleepy. All right. All right. Anyway, let's get a crack on Shall we? I have two of my taser sticks. They always seem to be the best. So I'll just keep them All right. All right. So we're just gonna head down this way. I love how silent we I love how silently we just glide. Oh, hold on. I can't listen. I definitely definitely don't have you guys scanned Oh god, that that doesn't seem right. He sort of did a hey. Hey. Yeah, get away All right, all right, I'm going dammit. Why do they make right click everything? Why can't he be like interact with things and then right clicks use the item? Oh, oh my god There's a conditon to the car the contours just killed the There's the stego. Okay. Well, I'll leave you be then.  Yeah, I know oh take that Right, so this is the facility They still have to be oh see that's good. That was awesome. Ah Yes, perfect just a deer which means stop. I don't need to stop it Oh, it's triceratops. Okay. I was always a bit worried. There's a oh god. What's coming over the hill? It's just trikes. That's fine. That's fine So we still have yet to see like the giganodosaurus the Therizinosaurus they are here though. Oh, I know I've got a beat up some people as always Oh god, I'm a little bit hungry. I'm yum yum yum yum yum. I feel like I'm oh, that's trying on There it is. Oh Just a case. I might be able to like stun one and scan it What am I doing look at every tree trying on eggs from up in the mountain? I feel like they're definitely gonna kill me.  What's that take the egg? It'll be aggro There they are Wait, was I one here? Okay. They don't seem to be aggro at the moment Okay, that's one out of three Whoa Please tell me not going for me now. Okay. They're not going for me. That's good. That's good. Oh There's more there's more Okay, okay I'm holding six eggs. I'm just bad as Billy Brenner or whatever second. I Feel like that's the end Feel like that should have been the last ones I collected, but maybe it's not maybe there's another one This is quickly consult the map again. Oh, there it is. I see it.  It went nice straight away Whoo, off we go. Let's make some omelettes Ah, there we go. All right, let's put them in do we do it task completed? Looks like that's behind you now. Good job. What's behind me? All right. Well, I know what's in front of me. Oh Betty Bobo's nine night Oh god, it doesn't break the bed first. Okay, right time for the final mission That's part of this anyway the poacher patrol a poacher patrol has been spotted Well, they're pretty much everywhere in the area find them and defeat them before they capture any dinosaurs I'm pretty sure we just leave them. They're not gonna do anything early Oh, literally just across the bridge from where I've came from. Oh kido ki. Okay. They are to the east Cool cool east east is This way So across this bridge and then we just whack them I'll try to run them over first and then we'll do a one-two combo copies move. I'm sorry Did I just kill it? I think I might have killed one. Okay. Well, anyway, where's the poachers? They were here. They're ready. Oh, there's a spot. Ah, three for one. Brilliant Yes, so good I'm doing skids around you call me ghost rider. Oh, did I kill one? Oh, one's crispy.  Yes, pratton riding his prattie face It's me mario. I killed you all. Whoo. Okay Well, yeah, of course I do I've killed them you're welcome. I'm a murderer whether the poachers are not It's not for me to judge. So what did I get from those? I got another crossbow Sweet I got a lot of arrows that'll do. Okay. So what's next on my tasks? I've done everything Don't know my tasks. So I go on the map The next thing it's telling me to do is go to the helipad. Let's keep going. Let's keep going. Oh, look at all the powers There's so many here Hold on guys. Oh, you make a lovely photo But I need to check I'm going the wrong way. Oh, no, I need to go west like literally just west Oh my god Jesus christ The freaking allus all came out of nowhere What? Oh my god, can it swim? Okay, kind of can't although it's it can it can it can. Oh god, it can Where did you come from? Oh That not me for six that day It was just about like Jesus freaking allosaurus All right, okay, we just need to go west I've got to follow the road over the allows not back over here. I don't think it is still the road. Yeah, there it is Okay, good. Good. Good.  Okay All right, I see something over there. Let's have a quick check on the map Yeah, we'll just oh we need to head over there. It's it's that that big building sweet Let's get going Oh Deadly deadly dangerous place. This is right Yes, look at it. Oh, hello stiggies Helipad helipads here. I think it's this bit Oh, there's poachers here.  Oh god. Oh god. Oh my god. How many raptors? Oh Oh, I mean, I'm hurting them. I'm hurt. Oh my god. Oh my god. Oh my god Oh, oh the poachers are coming out. The poachers coming out. Good. Good. Good. Good. I can watch them.  There's only one thing left to do and I think I weaken them Have they killed them? I don't even know I mean, I'm making noise to me. No. No, they're dead. They're disappearing. Well done guys You did what I couldn't last time. Oh, no, no, no, no, no. Yes. Yes. Yes Yes, she's dead. We're over we made him become part of the wall The wall your turn Oh wait a holding shift actually makes you go faster That's right. That's right. Haha. You think you're hurting me.  Well, uh, you know what? I'll lay down the smackdown on you Yes Gorgeous. Okay. There's the helicopter. That's where we need to be Hold on. Hold on. I can't go on without me pack lunch Oh Lovely lovely lovely That's not my granny's helicopter. What game is this travel? Okay, cool You're gonna need to spool up a little bit quicker. Yeah, there we go Oh I made it back. I'm here. Where's the helicopter? Okay. Did I did I do good? Wait, wait. Is that it? What happened? What do we do? Wait, hold on. Oh, is this what? Italy Okay, it Italy off off we go.  All right. Sorry about that guys I you know, I just want to take a quick trip from the California to Italy in a freaking helicopter Don't know how you do that Whoo All right, let's see. I've surely got some stuff. I just want to offload in here Don't and I really stand there. I'm never going to use those screw this little dart gun. It doesn't seem to do much I'll get rid of that bow. We'll probably get rid of that one as well. We'll take this one with us Wait, off we go Hopefully the raptor hasn't uh, I don't know Hello, I'd like I'd like to leave Can I leave? Um, there's no way of me getting down without dying Uh, ah, ah interesting. What do you do? When the freaking thing doesn't work is the question.  Why is the elevator not working? Oh, there we go. Whoo I mean they say life is short, but that was A little too short. Oh, you've locked me up here. I can't get down No What?  I'm trying to get down and the elevator's freaking busted.  I know what's happened It won't let me leave because I parked my motorbike right in front of it In front of the door when I got off That's a hundred percent what's happened. Look at it. It's right there. I can't get out because my motorbike's there I don't know at least you know what not. Yes Not parked my motorbike in here. Okay. Okay. Here we go I mean, uh, well just just think of this as a learning experience Yeah, that's how you should think of when you're designing this game devs god Okay, there's literally nothing I could do Uh, we'll be right back. I'll see if I can get in touch with the devs or something to fix this We are back And I so didn't just play through the entire game and get to where I was before No, don't be ridiculous.  I did want to Uh dart the allosaurus actually, but first we need to go around and kill some human beings So yeah, two seconds. Let me do that Right. Okay. Uh, unfortunately, I didn't get any darts from that.  I'm kind of curious as to I think just whacking the allosaurus with my schick Should be enough to uh to just knock it out. Oh, there's more But wait, there's more wait, can I get my jeep up from here? I don't think I can Anyway, now there are two dinosaurs. I still don't have the profiles for that's the allosaurus and the um, the what you call it the tyrannodon So We could try and get the tyrannodon first because that's probably going to be the hardest So we'll do that right tyrannodons one more then But I got them too, but it's oh Are you attacking me? So you're doing Oh Yes, I think I I don't know where he went. Oh, oh there he is Okay, hold on. Let's do this carefully Oh, go go go scan scan scan Yes, yes Don't move. Awesome. Got you. Are you asleep? I never know what you're doing Are you just grounded at the moment? My bad. Sorry. Just had to do it. So now we're looking at dinosaur data.      I'm assuming The allosaurus must be around about the same, but I don't think I have any of those arrows Damn, I was hoping I had some in here, but I don't I'm just going to put everything in here I could do a bear traps, but I don't know what bear traps already good if I'm honest Uh, we got another stick there. I think I haven't even taken any sticks from um What you call it the main place? So we have flare arrow might as well keep one of those 16 of those more arrows Maybe if I need those I suppose But we should be good. I'll take a spare bow as well. That'll do me Hmm. I think I took any of the sticks that are in here. No, we still got loads of those things Maybe that's just the best thing to do is run at it. Go brah die Uh, although I don't even know where the village is the little italian village Where you know where the vineyards are and stuff. I know I think we'll head to the helipad first Helipad's probably the best bet and we don't even have raptors actually. So yes, let's go helipad Oh, this is it This is the village. Ah, hold on. I'm pretty sure last time I came here raptors like attacked me out of no Yeah, there's the raptors Okay, let's get the raptors attention. Hello raptors. Whoop whoop whoop. Look at me juicy juicy juicy Yep, uh poachers come for me as well. There we go lure them together Oh poachers didn't get me Oh ho poachers Num nums look. Whoa, who's this? It's your favorite and chris brad Oh, yes, go attack each other now The raptors are still going for me though.  Okay I am the poacher now I'll put down a bear trap. Ha ha Bear trap. Wait, how do I even set it? Man, I don't even know. Hello trike. It's not good for me old man Alan Grant knees Ah do you too? Okay, let's see what this is. Is this the amber mines? Oh, it looks like it could be Oh, wow Oh, this could be how we get in Through the amber mines. Oh, I'm in the water bomb drown Oh, this is cool Does it go anywhere? No Just a cool little walkway. It doesn't really lead anywhere. Yes. Hey bear trap. I got a bear for you Ah, where are you attacking me? Oh, you bugger. Yeah. I can't go for water. Ha ha Bear trap didn't work though. Now it will now it will come for me bear. Come on, man.  Where's the explosive arrows? I don't have those.  Come to papa. Yes I need loot.  Where on the map am I? Oh What right? Okay. So this is the whole village. Let's just keep continuing south And see if we can find Whatever this is that could be a tower actually down there. Maybe it is. Oh, maybe that oh, maybe that is another tower Hey poachers All right boys. How you doing?   Oh Oh So in the map all the way to the east there's another tower Right First I thought it was only two How stupid am I? I'll put oh it's powered down. Oh Silly me There we go. Let's put the power on Oh, this one's got cool music Ah There we go. Good. Good. You made it to outpost four. I did. Oh, I post four. Oh, oh Okay, I don't like the sound of that Can I have more? Okay, I find the other one through the wall. I think I don't know where that one went Okay, what storage do I have? Uh I think this should be okay. We'll go to bed though Uh, do I need rations? Nah, I got my cola. I'm good. Right. So this is outpost four Which means that outpost three was all the way back there.  What's M? Ooh That's just a thing What does this one do description? We need to get into the sanctuary grounds of the old biasing facility As we are seeing a lot of well armed poachers being helicoptered in Biasing. Oh, oh, I kind of want to do that. You know, it might be faster going by foot, but this is definitely safer Especially when you've got freaking huge carnitaurus is roaming around Still want to get that aloe if I get the chance. I will go out and just whack it Okay, so we're looking for a key And it's straight behind me apparently Uh, let's go. Oh. Oh Oh, it must be in here. Oh, whoa cutting. What's going to happen in this vineyard? Survive the raptors and I've just survived the raptors for three minutes. Oh god. Yeah, there it is. There it is. There it is. There it is. Whoa Oh god, can I not just kill you? Die There you go. Oh my god.  Oh god. Here we go. There we go There we go. Yeah. Yeah, look you can you can attack me. Oh, no I'm really spooked out and I hope you don't work out that you could just go around the gate because then I'd definitely be dead four three two one Hey We win Just all collapsed. Oh, that's interesting Well, I didn't really see much of this. Oh Night night Oh, there it is Who's spattered over there was it? Well, that's a lie. Oh No, no use the key card to open the door to the service tunnel. Oh all the way over there. Really? Ah, okay. Let's open the gate. I was wondering how we're supposed to do this Yum There we go. We did it guys. Oh, I'm so excited I appreciate it.  We're gonna end this one here next episode. We'll be in the The swamp or something. I don't know. All right, if you liked this video guys, leave a like and subscribe. Bye


final meeting in september With that we'll turn over conclude that item and return over to mayor mayor Weinberger for general city affairs and then we'll have to conclude the complete our executive session from earlier mayor Weinberger Thank you president right I Didn't want to touch on a few good topics one I did not know dave greekowski nearly as well as a president writer or council hardnett, but I I Have in my time in this role gotten to know Him in a krakowski family and and do just want to extend My deep condolences to the family and and everyone that love david which by today's funeral was clearly a enormous number of people and it was it was very sad and moving and memorable tribute to a life well lived today that um I was proud to represent the city being part of I Didn't want to touch on the north beach 100th anniversary as well As counselor busher noted And since yes, it was a small crowd Maybe we're sharing here someone what was said which I think it was an interesting moment of reflection for the city They're really it was quite a moment of active anticipation of the future back in 1918 when our predecessors moved to Purchase this former farm farmland in the in the northern part of brawlington and then Opened it as a beach about a year later for returning veterans from world war one And in some ways, I think it does it is one of the many examples We can all look around and see how we are fortunate to live in a community that had very active and and wise Leadership in years past And as we gather it really did seem to me in some ways, uh, north beach is more relevant and Than ever and has a brighter future than ever what we have done together in recent years to shore up Access to public lands both to the north and south with our rock point and with the cambrian rise new park I think ensures in with the new investments we've made the bike path. I think ensures that um North beach has in many ways a bright and active future at the same time I think that future depends on us succeeding at some a couple major and related environmental challenges that You know, it was notable to me that we had to sweat it out a little bit as to whether Uh, we would have to um be battling another blue-green algae bloom. Um, and the day that we're in august when we're, um Noting this hundredth anniversary fortunately, we didn't but it could easily have happened with the temperature of the lake and um with the fact that we have Are seeing increasingly warming temperatures probably related to it's clearly related to climate change And that we have not as a state been able to Get our arms around this uh phosphorus loads issues. So I think While i'm very hopeful that 25 and 50 and 100 years from now our successors will be very excited about what north beach represents I think that does Uh depend on us continuing to make progress on these major environmental challenges And doing what we can here at this in this body to achieve that um a couple uh a few successes, uh Notes of progress wanted to make sure the council and the public were aware of tomorrow is the official opening of 194 st Paul street the Sorry 314 bed facility on the lower part of st Paul that came about you know directly as a result of uh decisions of this council and collaborations with shamplin college I'm i'm excited about how the project is turning out. I think it it is uh, it is one that uh, I think will work On that On that street in terms of design And I think i'm increasingly and I think the public is increasingly confident of that as the details have been completed in recent months And as the streetscape Is filled in and and it's clear how much activation and vibrancy that building is going to bring to to that lower part of St. Paul And I'm encouraged by what we're hearing In terms of what this these additional beds are doing to the housing market. We are seeing competition for tenants At a level anecdotally at least that we have not seen in a long time I think this project and the substantial amount of new supply as uh, as playing a role in that and I hope it will Will energize us and galvanize us to make further steps As a city government in the future to ensure that we continue to bring on new supply of housing of all types to address our our housing crisis There was a memo i'll just note briefly here two significant tech projects have been rolled out within city government in recent Months that are on track and doing well one is and these things you know when when they go wrong everybody knows about it and it's uh uh On the front page Of every publication when they go smoothly it kind of goes with little notice I hope the council at least is is aware that the implementation of the new Parking system that we've made major investment in and worked towards for a long time has gone off To when I understand without a hitch so far, which is important in of its own right better management of that garage is important The additional capacity that's going to give us is going to be important for the future of the airport given What a large role that garage plays in the airport's finances It's also a positive thing in that the same system is going to be rolled out In the downtown with our downtown garages in the uh in the weeks and months ahead and the fact that we've had one successful roll out you know, hopefully speaks uh to You know the the likelihood of future success Secondly, uh, the computer is assisted dispatch That this council in the past voted to invest hundreds of thousands of dollars in To upgrade the capacities of the fire and police department Also has been rolled out We'll have further reports in the future about Some of the changes that are flowing from this but a quick one from just the first few days of Work under this new system, which again it did was implemented without without a significant many significant hitch In the first six days, there were 30 fire alarm Fire alarms that went off which under our old system we would have dispatched At a level that there would have been 180 truck movements related to those 30 calls. There were been six There were six trucks activated With each call Because we can have now a more modulated response more fine grain response. There were only 90 truck Uh vehicle actions related to those same 30 calls. So again, there'll be more data and updates on this the months to come But it's a it's a great early indication that this is working Um, finally, I did just want to hit on what president right Noted about upcoming meetings we President right and I have agreed that there will be a work session in advance of the august 27th Council meeting which will be an opportunity for The administration to update the council and the public on the substantial amount of work that has been going on throughout the summer and throughout this challenging summer with respect to our wastewater system and and to some degree the stormwater system and We will have Be able to get into some detail about where we think we should go from here to do an even to do a better To address some of the challenges we face this summer in a continue. I think what has been you know historic Success that the city has had in getting better and better At protecting the lake. It's going to fall to us to continue that record and we have We'll be able to engage that at that work session on the 27th Depending on the outcome of that of that work session. We want to hold open the the possibility That there may be a needed desire to put some form of revenue bonding or general obligation bonding on the November ballot the last date that that could be done for any project whether it's wastewater or New high school or any of the other Bonding that's been discussed in recent months the last date that we really could viably do that Would be September 11th, which is why on that Tuesday president right and I have agreed that I will call a special meeting assuming that we will be able to secure a quorum So that we have the ability to act if we if we if we want to on some of these capital challenges President right, I think that's uh My full report for tonight. Thanks for the opportunity Thank you, mr. Mayor and and of course we hope that there'll be much more than a quorum But that most counselors will be able to be here Um With that before we take a motion to adjourn. I just real quick President a privilege to say If you're watching on channel 17 Don't forget to vote tomorrow. There's actually an election tomorrow that a lot of people I think may not know about it So Please vote and with that we'll take a motion to adjourn But remember that we have to reconvene the work session and go back into executive session to finish our Our work there still moved moved to adjourn by council roof seconded by councillor nodell Any discussion all those in favor of adjournment and reconvening the work session, please say aye Hi Any opposed the regular city council meeting is adjourned. We will now at 10. Oh seven uh reconvene


U.S. ramps up military training for possible combat operations with Russia and China in Arctic. In recent years, the United States has been ramping up its preparations for dominance in the Arctic. This move reflects growing concerns over the actions of Russia and China, both of whom seek to expand their access to the Arctic for trade, resources and projecting power into this strategic region according to Business Insider. The U.S. is entering a new era of heightened strategic rivalry in the Arctic and the more adversaries operate in the region, the greater the likelihood of conflict. Back in 2021, the U.S. military published its new strategy aimed at restoring Arctic dominance leading to a reorganization of its forces and priorities in Alaska. The strategy highlighted how rapidly melting sea ice around the Arctic Circle, where warming occurs twice as fast as the rest of the world, opens up new opportunities for natural resource extraction, shipping routes and commercial fishing, resulting in increased Arctic navigation. With ice melting, access to the region expands, heightening its unpredictability. While the U.S. has long paid special attention to its military presence in Alaska and its ability to project force into the Arctic since World War II, the peak of this attention came during the Cold War era. After the collapse of the Soviet Union and the subsequent focus on counterinsurgency warfare in the Middle East, the military was consumed with other priorities, leading to its deterioration of its Arctic capabilities. Now, the military hopes to rebuild its Arctic muscles that have atrophied over the past 20 years. Part of this process involves increasing military presence in the region to strengthen ties with allies such as Canada and Denmark. It also entails using this presence to deter Russia and China. Russia may wage war in Ukraine for years, but ammunition quality in doubt. Russia can likely keep fighting in Ukraine at the current scale for two to five more years. The Wall Street Journal reported citing military experts. This ability comes despite sanctions aimed at crippling Russia's defense industry. Russia's ability to churn out tanks, missiles and shells has surprised the West and heaped further pressure on Ukraine. The Wall Street Journal said Russia has ramped up spending with defense now accounting for over 21 percent of the federal budget significantly higher than in 2020. It is predicted that this share will increase in 2024 to more than 29 percent. Russia also found ways to work around sanctions, acquiring Western components through intermediaries. Second Defense Minister Sergei Shoigu said in December that Russia was producing 17.5 times as much ammunition, 17 times as many drones, and 5.6 times as many tanks as it did before the war. A senior NATO official stated that Russia can likely sustain its war effort at the current scale for two to five more years and at least two European military intelligence agencies share this belief, the Wall Street Journal said. The central bank's analysis also shows that much of the increase in defense-related output was in low-tech products, such as fabricated steel rather than more sophisticated items like semiconductors for which Russia is reliant on foreign suppliers. The article said, some analysts question Moscow's production boasts. Russia's output figures, for instance, don't differentiate between newly produced armored vehicles and old models brought out of storage and refurbished, the publication said. They are hyping up the numbers, said Michael Yasta, a researcher at the International Institute for Strategic Studies, based on a review of satellite images before and after the start of the war. In 2023, Russia brought out at least 1,200 old tanks from storage. Yasta said, therefore Russia produced 330 new tanks in 2023 at the very most, though the true figure is likely to be half that number, he said. Russia has also dipped into reserves of old artillery ammunition, the journalist said. The stockpile now stands at around 3 million rounds, much of which is in poor condition. The Royal United Services Institute, a UK-based think tank, said. Russia's domestic ammunition production isn't sufficient to meet its needs for waging war in Ukraine, meaning Moscow will grow more dependent on foreign allies, the analysts said. Houthi's target US ships, Russia profiting from Houthi Red Sea attacks. Yemen's Iran-aligned Houthi Group fired missiles at a Liberian flagged container ship in the Red Sea but did not hit the vessel. The US Central Command said two anti-ship ballistic missiles were fired at the Pinocchio from Yemeni territory, US Central Command said resulting in no damage or injuries. Houthi military spokesperson Yahya Sari earlier said the group had targeted and hit the ship which he described as American. Sari said the Houthi Group would escalate their military operations during the Muslim Holy Month of Ramadan in solidarity with Palestinians in response to the war in Gaza. The United States and Britain have launched strikes on Houthi targets in Yemen and redesignated the militia as a terrorist group. Air strikes attributed to the US-British coalition hit port cities and small towns in western Yemen on March the 11th, killing at least 11 people and injuring 14 a spokesperson for Yemeni's internationally recognized government told Reuters. US Central Command said it conducted six self-defense strikes on Monday in Houthi-controlled areas of Yemen. The strikes destroyed an unmanned underwater vessel and 18 anti-ship missiles which US Central Command said presented an imminent threat to merchant vessels and US Navy ships in the region. Meanwhile, Russia has been heavily sanctioned since invading Ukraine on February 24, 2022. Many goods that normally traveled by ground through Russia on their way from Asia to Europe were shifted to the Red Sea route as a result. German shipping company DHL reportedly said that requests for shipments using Moscow's state-owned company Russian Railways had skyrocketed by 40% since the Houthis forced the longer route to become commonplace in December. The requests have picked up since the beginning of the situation in the Red Sea by around 40%. DHL told the Financial Times, the overwhelming amount is going through Russia. Similarly, specialist shipping companies Railgate Europe and the Railbridge Cargo both said that demands for commercial shipments to take the Russian Rail route had increased by over 30% following the Houthi attacks.


I've tried to make nutrient synergy a very important point, almost the main focus of my channel. Not simply nutrient density, getting a ton of vitamins, minerals and fatty acids, more is not always better. It's about balance. Yes, most people are deficient in nutrients, but they also tend to have excesses and imbalances.  You can't eat half a pound of liver per day if you think you're copper and B12 deficient because then you're going to get too much iron and vitamin A. This leads us to understanding that it's so incredibly difficult to balance nutrition using supplements, so natural foods tend to be better. There are a lot of easily identifiable deficiencies that can be remedied with the supplement, but ideally in the long term you reduce supplement usage as much as possible sticking to natural foods. And if you're doubting this at all, the mineral wheel will change your mind. The mineral wheel illustrates interactions between certain mineral nutrient elements in soil and in the digestive and metabolic systems of both plant and animal life. This mineral wheel I drew today doesn't have all of them. We have about a dozen here when there's well over two dozen different minerals our body needs. If a mineral has an arrow pointing to another mineral, it means a deficiency of that mineral or interference with its metabolism may be caused by excess of the mineral from whence the arrow originates. So iron and copper are both pointing at each other, which means excess copper can cause iron deficiency, excess iron can cause copper deficiency, and they interfere with each other's metabolism. Most people are familiar with the interaction between sodium and potassium. They're both antagonistic and synergistic. They are pointing at each other, you know, working against and with. But then potassium branches off to manganese and iron and those to branch off to just about everything else. A glance at this wheel suggests frustrating complexity with no realistic way of ever bringing all the minerals into an optimally balanced relationship. It's pretty simple to understand. If you mess with sodium, you're now altering potassium status, and then you're altering iron and manganese status. Iron works with copper, manganese, potassium, phosphorus, and cobalt. Manganese works with calcium, iron, phosphorus, and potassium. So just by messing with sodium, you mess with everything. The point is you mess with one single mineral, it throws everything off. It's wide throughout the history of my YouTube channel. I've never really recommended electrolytes. I've pointed people in the direction of natural sources of minerals and, you know, you have all of these keto clowns shoving electrolyte powders like sodium and potassium down people's throats as opposed to addressing diet and lifestyle problems that are incorrect. You know, sometimes padding your diet with sodium and potassium works temporarily, but it's highly unlikely, I would say impossible, that it will be a long-term solution. It's going to eventually lead to imbalances and deficiencies in many minerals, the most evident one being magnesium, possibly calcium, and then longer-term zinc and copper. Usually those electrolyte minerals, sodium, potassium, magnesium, and calcium are the ones that are thrown off easily and fixed easily. The others take longer to alter, but also longer to fix. That doesn't mean you shouldn't salt your food. You know, I did a video titled, Stop Worrying About Potassium, where I explained that the sodium to potassium ratio in your body is supposed to be roughly one-to-one, and since meat has approximately 1,400 milligrams of potassium and 250 milligrams of sodium, you definitely want to add some salt to your meat. Many people think that just by consuming high-quality animal and plant foods, they're able to achieve all the minerals they need, but that's not always the case. You have soil minerals, depletion, and foods that are high enough in copper and magnesium are really hard to come by. I do like seaweed, which is an excellent source of the electrolyte minerals, potassium, magnesium, even calcium, and it's loaded with iodine. There is a pollution concern with seaweed, so some people do want to stay away, and it is much harder to address each of those electrolytes on an individual basis as opposed to eating seaweed, but it can be done. And this means that the complexity of the mineral wheel can be disregarded, because from a food perspective, the soil mineral content is what we're worried about. The animal or plant can be a filter in a way for balancing minerals, but if there are extreme excesses or deficiencies of minerals in the soil, then whatever was growing or grazing on that land will have the corresponding imbalances and deficiencies. That's why most people are magnesium deficient. That's why most people are copper deficient. The soil simply does not have enough of either mineral. Oysters are a really interesting example of this, and I might do a video on oysters specifically because the mineral content of an oyster can vary tenfold depending on what ocean, what sea it's from. And we can't really expect every farmer and rancher to test their soil for mineral balance, although when I have a farm, I'll do that. And there are plenty of farmers and ranchers out there using mineral supplements for their cattle. But whether it's laziness, not caring, probably mostly not understanding, the vast majority of food requires us to find an alternative solution. I've gotten several hair mineral analysis done, and the actual way I originally found out about the mineral wheel was a book titled Trace Elements, Hair and Mineral Analysis. There's a lot of companies online that offer testing for around $100. Hopefully I can get it for you guys from myself in the future. You just send in a sample of your hair, and they'll analyze the mineral content. This tells you balance, are you deficient, or do you have an excess of a certain mineral? And even more importantly, if you have toxic levels of certain things like aluminum, lead, arsenic, or mercury. Bear in mind, supplementing at the time of the hair mineral analysis can't throw things off somewhat, like if you took a ton of zinc and then cut your hair, it could alter the tests. And the worst part about this is mainstream nutrition ignores most minerals. And mineral imbalance destroyed my health in the form of iron overload. And there's other common issues like hypercalcemia causing insomnia. When people have massive stores of calcium from their past diets, they don't have enough phosphorus, they don't have enough magnesium, they're not getting enough vitamin D, and things get very, very difficult to fix when you've had lifelong imbalances of certain minerals. So hopefully you can use this information to optimize your mineral status in your personal diet. If you guys could please like the video, drop me a comment down below. And above all, share the video on social media if you can. If you do want to support me further, you know how to do so down in the description below. Thanks for joining me today, guys, and enjoy the rest of your day.