 Welcome to my desk. Happy evening. It's the end of a nice weekend. Next week is circuit Python week. Don't forget. Yeah, special show and tell on Friday at 7 30 p.m. Ask an engineer at 8 p.m. These are all Eastern times and also all of our shows and all of our team will be doing festivities and more throughout the day. Check us out on Discord, all the social media places, YouTube, probably where you're watching this now. It's a big old day of celebrating Python on hardware. Come on by. Enjoy. Yeah. Okay, so we're at my desk and see stuff scrolling by. So I thought I would show some of the stuff I've been hacking on that's not like hardware, but it's actually kind of soft for you because this is actually a lot of my time is spent when I'm not doing hardware is fighting with software. And in this case, I was, you know, I recently finished the design for this Metro S3. Maybe go to the overhead. I'll show it off real fast. Okay, so focus in. So the Metro S3 is a ESP 32 S3 Metro. And whenever I make these Metro boards, you know, these all in one Arduino shaped boards, I try to like stuff as much can Billy into them so they're they're good for developing new software that then we can pour it over to, you know, a smaller feather board that doesn't have as many pins and have Jtech connectors, etc. So, you know, DC power and USB micro SD card. This is my new favorite micro SD card slot. It's like the Molex. It's such a great quality card. We covered this in the great search a couple of two years ago, but ever since that I've been using it on everything. LiPo battery, five volt DC from the DC jack. Debug pins here for the hardware you are. RX and TX which we'll use for this project. SWD, semi QT reset button, boop on lipo monitoring so you know jam packed and a lot of memory, both flash 16 megabytes and PS RAM eight megabytes and that's a lot for our ESP 32 S3 feathers normally do the metro first but like because of part shortages is actually got delayed. For the feather, I don't use the big room module I use the smaller mini module that only has four megabytes of flash and two megabytes of PS RAM, which is still like a huge amount compared to most micro controllers. But again, you know, this is super chunky and they make even bigger ones to I think they make a 32 megabyte flash 16 megabyte PS RAM but like the pricing does get a little bit high and I'm like, well, do people really need that much are they willing to pay for it. I think this is very nice and chunky. You can run TFT screens you can run emulators. You know, you have a lot of space. And one thing that's kind of neat is that there's also a UC Linux build for this chip the ESP 32 S3 that was done by this person named Max. And 10 apparently the extents of 10 silica chip had already been ported like 10 silica is a chip set that has been used for processors for a bit there is a Linux port for it. And what this guy did is actually do all the patching to make it run on a small micro controller like this. Now, you know, the first thing I said one like this came up was like, well, there's no memory management unit when you run code on any ESP 32 it like everything runs as route there's no protection for memory like any process can touch any address. And that's what you don't want an operating system you want to have hardware protection, as you can do like you know page mapping and you can have to have swap and you can have rings of protection. I mean, obviously some of that doesn't software but having like some hardware assistance with it is like super helpful. But turns out there's a type of Linux a variant called UC Linux that does not use an MMU. And that does have consequences like you can't run a lot of software and like I'm kind of learning about this UC Linux I've never really used it before. But you know trying to compile some code for it for example, I was like oh let me try to get links working on it so I can like browse the internet from this chip running UC Linux but it won't compile because like I don't know what fork is. And I'm like yeah I guess we don't have a memory management unit maybe you can't fork off a new process I think every all the code is running within like one busy box process or something I don't know it's kind of new it's kind of new to me. Anyways, so back to my computer. Sorry to quick intro I don't have done a couple videos on it but like I have to assume nobody's watching any of the other videos. Yeah, just a notice when we do the 10pm shows it's they try we try to get these out at 10pm because it's funny. But the first two were 10pm on a weekend. And I think I might have to specify again why we're doing this it's not saying hey companies where is your engineer is at 10pm. Why aren't they working for you company. It's actually saying it's 10pm do you know your engineers because what the engineers are doing for fun is what's probably coming up next and that's what we're doing is we're celebrating like it is amazing time to do electronics and engineering. And since there is a lot of people motivated to be crummy to one another online we're like well someone has to be the voice to celebrate this all. So why not us. Okay, so you want to do videos but we're going to cover kind of everything and I'm going into more depth because here I have you know a good 20 minutes. Okay, we're seven minutes and okay so let's go to the computer. So I'll show the script. So this is a script. Eventually I'll be able to memorize this JC MV BKBC, which I'm going to call Max because his name is Max or their name is Max. And they have a script for for doing all this build I mean they've they've sort of documented it but now there's this like script that you can go through. And this script absolutely will do the build for you like 100% but you do have to have like exactly the kind the right kind of Linux installed to do it like I'm running Windows because so much electronic software is Windows only and I know a lot of who also running Windows like I didn't grow up with Windows I actually grew up with Linux I ran like Slackware one and net BSD and then free BSD and open BSD and then a lot more Linux and then you know Mac us but now I'm like to Windows because again like so many customers use Windows and almost all the software that I need to do my job. It runs in Linux only wins in Windows only. So, you know within. If you want to run script like this there's a couple options and windows you can use something like msis, which you know I do here. And msis is actually pretty good it's it's like you can I can compile circuit Python within it I can do like most of your GCC builds, but it couldn't do this I don't remember why it like could not. There was something missing or like it the wrong whatever version and then I tried WSL which is also really great because it shares your file system but it's like a true Linux build and this does get quite far. But it fails because it failed originally because my path had spaces and there was some tool that was like I can't deal with your I think the cross tool didn't like that you're my path had spaces and it and I was like, I actually kind of stopped there like and it was like I would try something else because I figured if that wasn't working something else would work, but turned out I just changed the path and it did compile, although it took a very long time under WSL. And then I turn a Mac and the Mac didn't compile because the brew the homebrew cask of curses was not built with L menu there was like some some symbols weren't exported or it wasn't compiled with the menu symbols I don't you know I kind of looked into it and then I was like it didn't care anymore. And it you do you couldn't you can fix it but then like you're kind of messing with your homebrew install. And I was like I really don't want to mess with it. And then I was like, you know, I did get eventually working on WSL but one of the issues I have is I can't just have something work for me, because I want to write a guide I want to have a tutorial I want to be reproducible. I like it when there's instructions are like look, you'll be able to do this no matter what when where because when you have these very delicate setups to build like maybe it runs on WSL now but it won't run after WSL does all these updates and something changes. It's going to be very frustrating for people. And, you know, I know I'm not the only one who's had issues doing this build it's like it's non trivial to do across across compile build of a UC Linux kernel and build root for the tensilica processor so you know thinking oh right like I've used I've had this issue before with TensorFlow if you remember that from four years ago when I was doing TensorFlow light micro builds and also would not build on my windows it wouldn't build on windows I was like very wacky weird reasons very complicated build. Using the Google build system which was like, I don't remember what it was called had some basil. Yeah, it was like this huge basil thing. This is by the way why I like circuit Python because it's like once it's built it's like there's no tool chains. So what I decided to do was to make a Docker and Docker is kind of neat and it's gotten a lot better and faster in the last couple of years too which is great. So Docker is free for personal use it's not for commercial use just be aware of that. And what you do is you can create just like when we have actions and continuous integration and GitHub like whenever we commit to circuit Python or toward we know we quickly. Maybe I'll show this is actually kind of for people maybe don't know about actions when we push. Let's see I'm trying to do like let's say you know this this library and actions whenever we commit. We have a built CI looks like there's actually a bug in this PR one second. How do you use windows. Whenever you commit a release we do a test run that, you know, starts up a miniature computer, a virtualized computer that runs Linux, it like boots nearly instantly because it doesn't have like drivers and sound boards and whatever. It you know which went into memory and it runs a couple commands like here we install you know Python and then we. Let's see. We actually do the tests. We check up the repo. And then we run pilot on it. Oh, man, sorry. It's been a while since the once I build workflow this workflow is huge. Okay, we install this code. We run pilot, and we lent the code and we run black and yaml checking and we check that the licensing and all this done isn't is done a little like grow Linux computer. Similar to Docker till container. And as soon as it's done it disappears so you you've created a completely clean environment. One of the commands that you want to run to analyze this data and then you shut it down and so you don't have to worry about like oh no I have to update my version of Python or like the gamma parser is incompatible with the black parser because of some, you know, argument that they had on GitHub. You don't have to worry about it because everything is kind of frozen into this crystalline reusable computer configuration file, and that's what Docker does so it's something for your home computer where you can quickly create. They'll miniaturize virtual computers they run very, very fast because they don't have, you know, window management and drivers and all user interfaces and their file systems are like really minimal. But they are minimal. So you do have to configure them and the configuration is a little bit more in depth than just like plugging in a live CD in your booting Linux. But if you want to have some for something like this where it's like look I just want to do one thing I want to compile this tool chain, maybe configure a couple files. And I don't I want to have it separate than my setup because like a common issue is I have to compile something Oh no the version of AVR GCC has to be different version of Python to be different. And like now my computer gets really confused because it's like there's three versions of Python installed. And it messes up my personal workflow so this doesn't this doesn't mess with your workflow because it's like again it's it's a little jar you can you can take it so the way you do a Docker is going to show this failing but whatever we'll just close this is you create a thing called a Docker file let's make a new one and I'll show kind of how these are done so you make a new file and you you remove the txt and then I'll just open this up in xemax. So the first part is that you want to tell it what kind of computer and it's going to copy and paste over from here. What kind of computer you want it to boot so you know they boot Linux in this case I'm going to miss you know I originally did Demian. Like it you know start with a Debian build the problem is the Debian build I found like later like 99% through is that in the Debian build comes with Python 311 and the expressive tool chain has a bug that doesn't make it work with 311. You need 310 Ubuntu 2204 you know turns out like a Google it you're like Docker Python 310 turns out that this Ubuntu works great and it's still supported. And then you have these run commands where you tell it what you want to run so let's just start with like app to get update and that's like all we're going to do to start. So then in your PowerShell you do so I'm going to remember the command it is Docker build t build dot and it like stopped immediately and you're like wait did it actually do something yet actually that's it it created your image for this new Ubuntu. build that all it does is an app to get update and you can see here it actually it's what's funny is it's cached it knows like oh hey you you had a very similar computer you were building earlier so I'm just going to like we use that same setup. And then under your images you'll see this new image that's like that's the crystal right and then you can whatever sprout the crystal. I think this is it and then you'll run it. And then she did I do this correctly. Sorry. This is Docker build make sure I didn't want to have the wrong one Docker T Docker tag Docker T. Oh I want to tag it with the name. That's right. I want to tag it with. desk. Let's just do that. Okay. And let's let's delete this. Okay back to your images. Okay. So we have this all right this makes more sense because it was cached from the previous one. So this one small it's only 120 megabytes one nice thing is that it will increase the file system works with virtual box you have like, you know you try to like set the file system and then like you can run out of disk space. Okay so you run this. And what's interesting is that it exits it exits immediately and you're like this is kind of messed me up I was like wait I want to like one commands I can't. Turns out you have to at the end tell like it actually ran it and then it's like I'm done I'm going to quit now because you didn't tell it to like continue running it's like when you run a Python script you have to have a while loop at the end if you want it to keep running. So there's this little thing you tell it like hey, don't don't quit do this tail F dev now which means like keep keep running the computer so that I can terminal in. And then you just rebuild. And then in your Docker images. It's like oh you know you have this one that's leftover. I'll delete this. Also delete this cash one. And then I can run this. Okay, and now I believe. Oh, I did not. I have to do something else. Hold on. Okay. What do I have to do. Also my savings in the right directory. Yes, is going to run for me. I didn't notice maybe I didn't select the right thing. So now I have a shell. And I'm in this like miniature computer. You know what you can see inside inside my windows that is is again a miniature machine. And this is handy if I want to like mess with files or like test commands, because as I was going through and porting over the shell script. You know, let's say you're going to do. I want to do like the I'll just do the first command to demonstrate it. So the first command is to create to build of autocom for the latest version of autocom. You see we W get it we untar it. We do push it was just a CD, you know, and then configure and make and make install okay not too bad. Now you want to do this in your Docker file wrap up here. You can, you know, it's more of the same. You want to set up a work directory so it's like okay. Everything goes into all your working is going to be in this one folder. And I just use app because every other Docker file seems to use app, and then you do a run. What you could do is have a run for every command shell script command, but every time you have the run like capital run, it starts over kind of clean and like a fresh shell environment. So what you want to do is, but it's always in like slash app. What you want to do is have all the commands in order, and then you do a little like and new line break, so that they all happen logically in order and also gets treated as like one command which simplifies the size of the the Docker treats every shell command is like a layer, it seems like and so you can say you know it's it saves the state at each one command so it's better if you kind of group them together logically if possible so this is like one command so okay we're going to you know tar and then I'm not going to push the that's kind of a bash thing we just do CD and then config and then this and then make make install okay and then you actually don't have to do poppy because at the end again their next one command is going to start with a clean shell so let's let's see if we can so let's let's quit our existing Docker I'm going to delete these they don't get confusing. That's the nice thing it's like you just you're like I like the computer to delete it like you or it's very instantaneous. Okay so I saved let's rebuild. Okay, and then it's it's interesting that commands in that run. It'll tell you hey like I couldn't do it and it says W get not found just because this is a really really minimal version of Linux it's not like your Debian or as being billed where it comes with like everything built in a lot of stuff doesn't come with it. And so you have to a lot like it reminded me a lot like a little video game where it's like every little thing that you you need to kind of like set up every little piece so that you can push the marble and go down the path properly. So then here you're going to do a run apt get install why W get. Okay so then you we want it. And it will say install the because I miss spelled this. Okay cool so it's like you get to do it. You know, apt gets and then it fails differently. And it says XZ cannot exact and then you're like I don't even know what this area is you Google it and you find out it's because tar calls for XZ files you have to have like X the XZ unzipper X unzipper whatever it's called. So that's actually XZ utils. Turns out you add that to your. apt get install and then you know it we want all every time you change a line is going to rerun that line. So installs and then it's like I failed on something different. It's like I can't I don't have m4 and m4 is like a compiler turns out like there's no compiler built in so you kind of you kind of go through this and this is where you can like terminal in. Because when you terminal in it might be you know you can run the commands one after the other without having to try to craft this but perfect file. But you basically like you know you need live tool and get an end curses everything has to be but like doesn't come with Python doesn't come with. You know any tools so you know you need like g++ and CMake. Eventually you know you come up with. You know this perfect apt get in the beginning that has everything you need for later. It'll do all the you know installation and then it's like great you know I'm done and then. We can docker in. So let's go in notice it's a lot bigger now at 600 megabytes. We run it and we terminal in and now you'll notice there is autocomf and autocomf is. bash. autocomf is built and the binaries have been installed so I can do you know autocomf. And you can see that it's installed so now we have this. This first part of the tool chain installed so it's not a one to one against all like you can't just paste the shell script in and like you're good to go you do have to kind of do this matchy matchy part. So it's kind of like took me like you know one one baby nap. Maybe maybe one and a half going through and adapting all of these instructions to make the Docker problem not going to do the whole thing but you see how the process starts. But at the end when you're done you can push the file to well first off you have the Docker file Docker file is now here. Under the learning system I don't know kind of seemed like that was the right place to put it I don't want to put it in its own repo. S3 Linux. And we'll do a little tutorial about this because I think it's interesting. I will say though it's like you know you're running Linux on still machine it does it's again very minimal you can't do that much like you can run. You can run micro Python because build route has micro Python support me we'll cover build route next week. But like you don't have GPIO access and like the file system is compressed so like you you can went to TAMP but it's you have Wi Fi but it's like not that fast you know it's a little micro controller. The Docker file is here. Ironically it is faster to like Docker is quite fast I find. It's almost faster to run it than to pull the compiled version over the Internet down but if you want you can actually I pushed the whole image like the completed like OK this is done version of the computer to Docker hub. If you want to go in and you want to do a menu config somewhere in between here and you're like oh I want to change the amount of flash want to change the host name all that good stuff you can do that. Under. Docker hub. And it's here so I pushed it a couple days ago. It's big. It's a couple you know how much it is it's like. It's like you know 20 gigs. I don't clean up the files because I'm expecting them to have to read you know like I you know build the crossed compiler and I don't delete all of the intermediary files and don't do it clean because I'm assuming that. As you know people will do ESP 32 S3 Linux there's going to be more. Like patches and stuff so you know just keep I keep all the working files there but you can just download this image and run it immediately you don't do any of the compilation but it only takes about. 20 minutes to do the entire Docker build so. I know that was kind of like a quick intro to using Docker but I think. For projects like this where you know you need to replicate the instructions. This is kind of the best way to do it and even though 20 gigabytes is big. It's way smaller than virtual box like my virtual box when I tried it in virtual box it was like 50 megabytes or something or 50 gigabytes. And I think this is really big and it's like slower because it's it's you know a bigger virtualized machine like it's a virtualized computer not just. A virtual Linux install one thing that's nice is Docker now use W that uses WSL underneath and so it's like you're using your full computer speed it's very very fast you're not like doing this emulation. Even if it's a very thin layer of emulation you're still not doing emulation. Okay, so that's that's Docker for everybody. So check it out very useful for for Linux builds in particular and we'll do some build root stuff. Next week Phil you need any any any elucidation or do you think I covered it. No, just from, you know, my point of view, and I'll keep my rant tiny since it's your show. There's a lot of like gatekeeping stuff in the Linux world and what we're trying to do is also make it so if you're new to this you're not getting yelled at or chased away or told you're doing it wrong. I guess we have quote a tough skin. So when we see someone do that we're like well let's make it easier for everyone to get more people involved. Because if you look at communities that aren't making it I'm going to say like ham radio for instance it's like really difficult to get in and when you're there you kind of feel pushed out and this is what we've heard a ton of times. There's some great people in it but a lot of it is this like a lot of crankiness. So I don't want to see that happen with like Linux. There's there's there's enough we all need to do and for folks to not even be able to start like everyone was a beginner once. So we think this is this will help get you past the initial like there's no way I'm going to figure this out. And it's just the yak shaping it's like you're not you're not even getting to the fun part yet you're like I'm installing binutils. I just want to show one last there because people are going to try to use this on my you know you build it. Once you're done you terminal in in app built release within the Docker image there's the boot loader bin networking actor bin partition bin and the file system and the kernel image. And then you do need to use ESP tools to burn those files into your ESP 32 s3 the network bin partition table bin and boot loader bin. You know I have an example in the Docker file of what you want like you know change it for your port etc. And then you need to use this thing called part tool and you know and it's actually kind of cute because what happens is the partition table is burnt into the ESP 32 s3 to make as much. You know the kernel is whatever amount of space in one partition then immediately after is the file system or maybe the other way around. But you want to make the file system is as big as possible while making sure that you had enough space for the kernel and so you need to use part tool which is in the ESP IDF and I do you do have to install ESP IDF on your computer. You don't have to do any other work with it and the installer isn't too bad like that does run in every operating system. But this reads the partition from the ESP 32 s3 and then writes the file system to the correct location. You I don't want to give you the hard coding numbers because if you do any other tweaks or changes or something. You know if you make any adaptations those partition tables might move and so you want to use the proper tool this is like one thing that. It took me like an hour to get where I was why does the expansion table. That's why but then you'll then you'll have everything the right location and then you can boot boot it up and then just use this USB serial cable because it doesn't go through the USB. Native USB it uses the the hardware you are is how you connect to the Linux build in the end. Okay, we'll do more next week. Okay, so let's go to the great search. The great search watcher by did you key in it for thank you. Did you key every single week lady to use the power of engineering to help you? Yes, you find the things that you're looking for part substitutions just about anything you could possibly imagine make or need on digikey.com. Lady what is the great search of the week this week? Okay, somebody was asking me about this connector on the ESP 32 s3 metro. Let's go there and show it off. Oh, sorry the overhead. Let me apologize. Yeah. So on this board, you know your classic Arduino headers and the SPI connector. And then there's this and they're like what is this connector? What do you why do you have this here? This is a, I call this an SWD connector, but technically that's not correct. It's a J tag slash SWD connector, but 98% of the time it's for SWD, a single wire debug. This is a two by five 10 pin shrouded IDC cable that is used on almost every arm core chip. But also you can use it on like 10 silica with for J tag debugging. And this is used for trace debugging and like breakpoint debugging when you when you need something better and like memory analysis like you want to look look into the memory in the middle of debugging. You know printf debugging is is pretty common or a oscilloscope debugging I do it all the time. But there's a lot of times we need something a little bit more powerful. Also on some chips is used for the programming part. Some chips they don't you can't you don't have a built in USB boot loader like this one does where you can check the USB or through your and boot load immediately as a ROM loader. For a lot of chips they come like blank blank blank you need to load code in. And so for example, you know here I've got a a program where this is an ML ice and you'll notice so tough to see but there you go Sam and AVR it uses those connectors as well to this cable and then you can connect here I don't have enough space for a full SWD connector. So I just have some wires and I have a breakout instead and what I like about this breakout is it also shows you the pins. So this is the SWD pinout which is you know power a bunch of grounds SD IO SD clock SDO which is the actual debugging if you're not just programming but you want to send data back and forth output the reset and then. I don't know if I have I don't have the J tag pinout here but maybe let's go to the computer and I'll show. We do have this SWD I you know we stock and this adapters also available on the key, which also has the J tag pinout so SWD is a Cortex M zero specific debugging interface. J tag is the universal one so the pinout is also used for J tag where you have, you know, MS clock data out data in for J tag, and it replaces this original huge connector this 20 pin character which you know how would have a lot more possible data transfer but most people cannot fit these gigantic connectors on their PCB is bigger than the rest of it. These are much more compact and let me also so let me show so I had the AVR SWD so let me show off two more options. Okay, so can you go to the overhead again. I'll just show this quickly. Another option is, you know, I showed off this ST debugger. What's interesting about because I'm, you know, be later be like what's what's a two side shroud connector. There are some times where you want to have much more debug data going over you want like trace data and Scott actually did a stream Friday and last Friday about having a one of these longer connectors and they look similar but they're. They're much longer. This is your standard two by two by five connector and then this is a two by eight, I think two by a connector. So it adds another four pins, which is used for more debugging data. And for that reason, you might see see how it has it's it's shrouded. So it's got like this two pieces of plastic here for the key and a piece of plastic here to help you orient but it doesn't have the full shrouding. See how this one has four, let you know four sides, because this longer style connector would not fit in so it's kind of like this is like a backward compatibility mechanical connection, but you still want to have the key. There's a little key plastic key here you can you can see this plastic nubbin. And then also, of course, your your wonderful standard J link, J tag and debugging by Seger, a nice German company. And you can use in this case you use a Seger they have the old connector use that adapter and you go to this cable. Okay, so now I've shown you this cable and the shrouding because that's important. When you choose which one you want. If you need to have you know compatibility with this wider shroud but we're going to just go look for this kind of standard two by five connector, and then go to the computer again please. For our feather nrf, you know we have here we sometimes stick it on our feathers, it's like oh you want to debug it. Here you go and then on the Metro RP 2040. We also, we have it here and on the Metro. Sam D series. Sorry, Sam D 21 ditto. I like to you know in the metros I like to put them on there because there's space or feathers I don't always have space, although I think the original feather RP 2040 has a spot for it. So sometimes I don't can put it on but it's like because it's like so. It's not really used common. It's not used by beginners and makers it's often used by more advanced people who are doing the software development. So I put a spot and you can sort it in and I tend to use the SMT version, but I will say there's a lot of people who use the through whole version of this connector. Okay, this is a very long intro, but now let's go to did you key and find this part. Okay, so we want to scroll under header, because it's a header. And you can see even that the default image sort of looks a little bit like what we want. Now ironically if you go to this category that has 550,000 different components in it. The first one is actually kind of what we're looking for but that's just like a total coincidence. And you can see that it has a little pick plate on it. That's the plastic piece for the picking place to be able to pick it up because obviously it's got mostly pins. So these are very, very, very popular headers but let's pretend that it isn't like the first thing on the list right to some coincidence. So let's look for active components only. And we want it to have the most important thing to watch out for is the pitch. You want it to be 1.27 millimeters or 0.05 inch pitch. So it's half pitch, half of what you're used to much a smaller and let's apply. There's a significant number of boards that have that pitch. Okay, so we want to have two rows, two by five and number of positions, 10. And it's confusing because there's like 10 plus eight plower. Just ignore those. We just want 10. And then we also want to do the number of positions loaded. And this is confusing also originally I clicked 10 but that was incorrect. What you want to click is all or dash, which is like, you know, unknown. Okay, so we did the pitch and then you need the row spacing. Sometimes the pitch like between row pins is not the same as the row spacing. It can vary. We want it to be the same. So I'm going to pick row spacing of 1.27. And then in this particular case, I'm going to say surface mount but again you can, well, I'll do that actually next. The next thing that I do like to select is I want to have gold contacts. I feel like these days it's like gold contacts are so much less likely to oxidize. You know, tin, tin plate, especially lead free tin plate, you know, it can get a little dusty after a bit. The gold is literally one atom thick so it's not like it's going to add a significant amount of expense, but I feel like the quality is much better. And then let's go with in stock. Okay. So now we can look at some of the options because you see that there's this different shrouding. I thought that was kind of the most interesting thing to note. So first off, there's two whole versions. I find these annoying to solder. I find the pins are very close. I almost think like the surface mounts easier, but you can get two whole versions of these. You can get right angle. So it sticks out the end. This is like the minimal style. It doesn't have any shrouding at all. However, I find, yeah, these are not cheaper because they're not very common. Let's see if we can find the two shroud. Yeah, here you go. So that's sort of what we saw on that ST debugger where you can put in a two by five, but then you can have more pins coming out the sides. You know, more expensive. This is going to be, you know, about $2 a piece, not like 60 cents. So let's go with surface mount. Let's see where was that shroud here. Surface mount only. And let's say it's shrouded, but you know, I don't care if it's two wall or four wall, but I don't want the unshrouded. I like to have the little things you don't plug in, you know, backwards. I think that's that's wise. If you're going to pick a keyed connector, stick with the keying. All right. So next up, let's look by price, sort by price, and a couple good options here. So this comes in trays. This is for hand placement. I'm CNC tech, but they also version that comes on tape and real and to be honest, it's not that much more expensive. You know, the initial tray ones. I mean, if you're, if you happen to have a pick in place, I can pick it up, but I find it much easier to go with tape and real. So this one is in stock and it's, you know, 60 cents a piece. A good deal. And then one thing to watch for is some have little nubbins placement dots. Let's see if I can, I'll show you, I think the feather RP 2040. I'll show you. You see here. It has the mounting posts. You can select to get ones with mounting posts. Honestly, I've never had an issue where these snap this to protect you from snapping it off by accident. As long as you push down and pull up when you're inserting and don't try to wedge it back and forth, you shouldn't have an issue. I don't know if they have. Yeah, they do have board guide here. I think it's what's called board guides. Maybe. And shrouds. Heeing shroud meeting flange. Let's see if that gets us ones that have nubbins. Let's see this one. No, just, oh, it does have a board guide. You can kind of see, I think, with posts. Kind of hard to see, but here's the post. So you can get ones with posts. If you so, if you so desire. These are slightly different keyed versions of the keys in the on the edge there. So this is meant to not be compatible with all some other connector. But you don't need the keys. So I'm going to go with this one. This is my pick. 3, 2, 2, 0, 10, 300 TR for CNC tech. A lovely SWD connector. And that's a good church. Thanks for joining us, everyone. We'll see everybody throughout the week. We got a bunch of stuff going on. Don't forget, circuit Python day is this week, Friday, August 18th. All sorts of fun, amazing things to do all day. We'll see everybody this week. Thanks everybody. Thanks for joining us. Longer stream, but I hope you learned a lot.