Hi everyone. My name is Julia. I'm a program manager on the Visual C++ team at Microsoft. I focus specifically on the VS Code C++ extension. Thank you for joining my session today. I'm really excited to talk about how to use VS Code for C++ development. So let's go ahead and get started. So I'll start by going over the topics that I'm going to talk about today. One thing is I want to show you the things that you can do with VS Code. The beauty of VS Code is that you can customize it to use it however you'd like, whether that is strictly as a lightweight text editor or as a full IDE with build and debug support.  So I'm going to talk a little bit about those today as well. I will also talk about which tools we recommend for cross-platform development in VS Code. Cross-platform development is a super popular scenario these days, and VS Code is a great option for that because it can be run on Linux, Windows, and macOS. I will also talk about VC Package today, which is an open-source cross-platform C++ package manager. It is consistently reported that package management is a huge pain point for C++ developers. We see this in the SAC overflow survey results, the ISOCVP survey results, and more. So I want to show you how you can use VC Package to make managing your project dependencies easier across all platforms. VC Package also can be integrated with VS Code, which we will go over in the demo. This part of the demo also includes a preview of an exciting new feature. It has not officially been released yet, so I'm going to show you what we have in the works, and you can get a feel of what's coming next with VC Package and some enhancements you can expect to see in the near future. So let's talk about the things that you can do with VS Code.  If you prefer to use it strictly as a lightweight text editor and take care of your building and debugging outside of VS Code, that works. If you would like to use it as a full IDE, it can do that too. VS Code has great C++ language support.  You can build and debug your C++ projects in VS Code. It will find whichever compiler or debugger you have installed on your machine. We also have native CMake project support in VS Code as we recently started maintaining the CMake tools extension. CMake is one of the most popular build systems for C++ projects, especially for open source projects, and the CMake tools extension makes it super easy to configure CMake projects in VS Code. VS Code has great remote development extensions as well. This includes the SSH extension, the containers extension, and the WSL extension, which is Windows subsystem for Linux. Finally, I'll talk about the collaborative development features of VS Code. VS Code has a live share extension pack which enables you to start a collaborative session from VS Code, share the URL to that session with anyone that you trust, and then they can join that session from their instance of VS Code on their machine and you can work together. You can even do a collaborative debugging session. Alright, so for my demos today, I'm going to use the SuperTux project. It is an open source, classic 2D game. You can clone the repository, which is what I did. SuperTux has a great community of developers that contribute new levels to the game. It's a great open source project for demos because it is cross-platform. Alright, let's get started. Alright, so I have my SuperTux project open in VS Code on my laptop right now, and I'm going to show you some of the cool C++ language features that we have in VS Code. So let's start with the find all references. I want to find all references of this mState variable here in my bad guy header file. So I can just do right-click and then select find all references, or you can do shift out F12 if you prefer to use the keyboard shortcut. And this will find both confirmed and not confirmed references for this variable. So a confirmed reference means it's not only a text match, it's also a semantic match. And non-confirmed references mean it's a text match, but it might not be a semantic match. It could be in a comment, in a string, in an inactive code block, etc. So here you can see in this references pane on the left, in the top section, these are all of my confirmed results. And down here, these are other references results that cannot be confirmed. So now let's do a rename. So let's say I want to rename this variable to xState. So I can again do a right-click and then select rename symbol from the context menu, or I can simply click F2, which will prompt me to rename the variable. Alright, so I'm going to type in xState, but I want to preview all of these changes before committing them. So I'm going to do shift and dirt preview. And again, this is doing a find all references before showing me the references that will be renamed. Cool. So in this refactor preview tab, I can look at all of the references that are candidates for my rename. And select which ones I want to include or exclude in my changes. So let's go ahead and go through these. And then once you feel good about the changes that you are committing, you can just select this check mark right here to apply refactoring. Alright, so now I'll show you go to definition, go back to my files. Alright, so let's say I want to know where this set flip function is defined. So I will do a right-click and select go to definition, or you can just do F12 for the keyboard shortcut. And you can also go to declaration, so I will show you that as well. And this should take me to the header file. There we go. It's also worth calling out that if you want to see the definition or the declaration, but you don't want to actually navigate to a new file, then you can use the peak capability by doing control click, selecting peak from the context menu, and then let's do peak definition. There we go. So this gives me a little preview of where this is defined without actually taking me to that file. So now that you've seen some of the core C++ language features in VS Code, let's talk a bit about cross-platform development. Cross-platform development is super popular these days. We see in a lot of survey feedback that people are developing for more than one platform. They are developing for a platform that is different from their host OS. And VS Code is a great option for both of those scenarios. It runs on Linux, Windows, and Mac OS, as I mentioned before. It has native support for CMake, and CMake is a cross-platform meta-build system. And because VS Code has such great support for CMake projects, you can have your CMake project as a cross-platform project and configure on VS Code regardless of what OS you're using. VS Code also integrates well with VC package, and VC package works across all platforms as well.  Also, VS Code enables targeting different platforms through remote development extensions. I briefly mentioned these before, but there's the SSH extension, the containers extension, and the Windows subsystem for Linux extension. In today's demo, I'm going to show you how to use the CMake tools extension to configure, build, and debug your CMake projects. I will show you how I've integrated VC package with CMake tools extension to manage all of SuperTux's dependencies. And I will then use the remote SSH extension to SSH into my Linux VM and show you that we can configure everything following the same exact steps on Linux, and it just works. It'll use GCC and GDB, but all of the steps that you'll take to configure and build your project are exactly the same. The CMake tools extension makes it very easy to configure CMake projects in VS Code. You can create a new CMake project from scratch, you can turn an existing project into a CMake project, or you can configure an existing CMake project. In other words, if your project doesn't already have a CMakeList.txt, this extension will create one for you. And if it does have one, the extension will find it and use it. So this project, SuperTux, already has a CMakeList.txt. So let's just go ahead and start configuring the project. There are two things that we need to do to configure this project using CMake tools. The first is select a kit. A kit contains the project agnostic configuration agnostic build instructions for your code, such as the name of the compiler that you're using. So at the bottom of the screen in the blue status bar, you'll see the no active kit button. I can go ahead and click that and I see an option of kits that I can use. The first time you do this, you'll have to click scan for kits, which will search for compilers on your computer. It'll search the path environment variable. It'll look for visual studio instances. If for some reason after scanning for kits, the compiler you want to use is not showing up, you can actually edit this CMakeKits.json file directly and add it yourself. So I've already scanned for kits, which is why you see a list of compilers on my computer. So I'm going to select the one that I want to use. You can see it's loading the kit. Great, it's loaded. The second thing I need to do is select a variant. These are instructions for how to build the project. So by default, CMake Tools extension will show you four variants that you can use, each corresponding to a default build type. If I click right here, we can see what they are. So I'm going to select debug. And now it is configuring my project. All right, so now that our project has been successfully configured, our build files have been written to this new build folder in our project directory. So right here, SuperTux build, you can see it in the left build folder. And these are the files that CMake Tools generated for us. So now we can go ahead and build our project. So one thing we can do is select which targets we'd like to build. So if we select this button here at the bottom that says all, you'll see a list of targets. I'm going to select all. So we can go ahead and build by just clicking that command in the blue status bar. It's also worth calling out that all of these commands in the blue status bar that are provided by the CMake Tools extension can be invoked from the command palette. So if you just do control shift P to open the command palette and then type CMake, you'll see all of the CMake Tools extension commands right here. All right, so we have a successful build. Now we can debug. So you see I set a break point in the main dot CPP file. And down here at the bottom, we can select the target to launch, which we have as SuperTux too. And we can just click debug and it'll start the debugger. We can also click on the CMake tab on the left and you'll see your CMake target here as well SuperTux too. And you can right click and select debug from this context menu as well. All right, so now we have launched the debugger and you can see it's stopping at the break point that I set. And on the left in the debugger panel, we show the values of local variables, registers. You can add a watch variable, which is a variable whose value you want to watch change over time. We show the call stack and the list of break points. So you can disable break points directly from here. You can add a new break point, type the name of the function you want to break at. And there you go. So I'm going to disable this break point. I'm going to continue stepping over and finish running the program and our SuperTux GUI should launch. And there it is. We'll just take a moment. All right, so there we have our game. So we just successfully built and run SuperTux and VS Code using the CMakeTools extension. And those are the general steps for configuring a CMake project in VS Code. So now let's take it one step further and look at how we integrated VC package with CMakeTools to manage all of SuperTux's dependencies. So first I'll give you a little bit of information about VC package. VC package is a cross-platform command line package manager for C++. There are over 1,300 libraries supported in the VC package catalog across Windows, Mac, and Linux.  First is it simplifies the acquisition and installation of third-party libraries. All you need to do is run VC package install and then the name of the library from the command line. So the libraries are all routinely tested against each other for compatibility to ensure a high-quality catalog. The last thing I'll mention is that you can integrate CMake with VC package so that CMake can find all packages that were installed through that instance of VC package when configuring and building your project. Installing VC package is very simple and it is the same experience on Linux, Mac, and Windows. The first thing you'll do is clone the GitHub repository and see the link in the slide. Then you run the bootstrapper in the VC package root folder. And finally, you can run VC package integrate install to integrate VC package with Visual Studio and VS Code. So let's take a look at how this works with SuperTux. Alright, so as I mentioned in the slides, once you clone the VC package GitHub repository and bootstrap it, you can run VC package integrate install to integrate VC package with VS Code. So let me show you what that looks like. In my terminal, I'm going to navigate to the instance of VC package that I'd like to use and I'm going to run VC package integrate install. So now this integrates VC package, this specific instance of VC package with VS Code so that VS Code can use it for configuring Intellisense for source files. It also tells you what you need to set the CMake toolchain file path to be such that CMake can find the packages installed with this instance of VC package by invoking the find packages command. So in order to hook this up with the CMake tools extension, we just need to edit the CMake toolchain file property for the CMake tools extension and we can do that in the workspace settings JSON. So the workspace settings JSON lives in the .vscode folder for your project. If you don't see it, that just means you haven't configured any workspace specific settings yet and you can get there from the command palette. So you control shift P, typing preferences, open workspace settings. So this opens a UI where you can edit settings for your workspace. You can also edit settings at the user level and you can edit settings specific to the extensions that you're using. So we're interested in the CMake tools configuration settings. So some of these settings you can edit directly in the UI. Others you'll see it'll tell you to edit and settings JSON. So that's what we did in order to set the CMake toolchain file path. So I can show you that. Here we go. CMake configure settings. So I just clicked edit and settings JSON and it created this CMake configure settings object. Whereas I specified the CMake toolchain file path and I added the VC package build property and marked it as on. So how VC package works today is customers have to manually install all of their project dependencies using VC package and configure them so that CMake can find them. We're working on a new feature, which we are very excited about. And it has not officially been released yet, but I'm going to demo what we currently have in the works right now so you can get a feel of where VC package is heading and some enhancements that are coming soon. So this new feature is a manifest file and in your project folder. So VC package.json file that lists all of your project dependencies and then VC package will detect that VC package JSON file and take care of installing all of the listed dependencies any dependencies that those libraries have and configuring them so that CMake can find them all automatically. And I'll show you what that looks like. So we have this VC package JSON file for SuperTux. So these are all of the dependencies that SuperTux has. And so yeah, as VC package six today, you would have to go in and manually install these VC package install each of these packages. But the new experience is that from your project directory. So let me navigate to my project directory. I can call VC package. So install my triplet as X64 windows specify binary caching. So what this will do is it'll find that VC package JSON file that manifest file in my SuperTux project. And it will go ahead and install all of these dependencies if they're not already installed and configure them so that CMake can find these packages. So let's click enter. There we go. So all of these packages were already installed, which is why I was able to successfully configure and build the project earlier on in the demo. But just to show you how this works, let's add in another item to our dependencies list that I don't already have installed. Okay, so now if we run this command again, there we see that it builds the FMT package and it's using the cached binary package, which makes it faster and installed it. And yeah, it's as easy as that. So this is a really great new feature that we're excited about because it makes it really easy to just share this manifest file in your project. And then anyone who's using this project can just run the VC package command from their command line and it will take care of installing all of the dependencies and configuring them with CMake. It's a very automated seamless experience and we're very excited about it. So I want to reiterate that one of the benefits of using VS Code and CMake and VC package is that it allows you to configure your project in a way that switching to a different platform is seamless. All of these tools work across Windows, Linux, and Mac. So I just showed you how it works on Windows. Now I'm going to use the VS Code remote SSH extension to SSH into my Linux via and show you that it works the same on Linux. I'm going to show you how to use the remote SSH extension in VS Code to connect to a Linux VM. So the first thing you'll have to do is install the remote SSH extension from the extension marketplace. Once you do that, then you'll see this Remote Explorer icon on the left. So if I click on that, then I'm presented with a list of SSH targets that I have previously connected to through this remote SSH extension. In this dropdown, I can select between SSH, WSL, VS Online, Containers. These are all different remote extensions in VS Code. And if you download the remote extension pack, then it will include all of these extensions with it. So I'm going to connect to this host right here. I could also add a new one by clicking on this plus sign. But this one down here, this is where my SuperTux project is. So let's open a new window. And you can tell that you are in your remote window based off of this SSH target IP address in the bottom green corner. All right, so let's open a folder. And it's important to call out that the remote SSH extension in VS Code works differently than remote development in Visual Studio because all of my source files are already on my Linux VM. Nothing is copied over from my Windows laptop. So before this demo, I had connected to the Linux VM and cloned the SuperTux GitHub repository. So let's open that. There we go. And you can see that IntelliSense is working properly on my Linux VM. So we can start by making sure that all of the project dependencies are installed on this VM by running the VC package install command. It has the VC package JSON manifest file right here. Let's solve the dependencies. So all we need to do is run this command VC package install binary caching from my project folder. And there we go. All of these packages are installed. So then we can just follow the same steps to configure the project using CMake tools. You'll notice that when I select a kit, these are all compilers that are found on my Linux VM. So this time I am using GCC. So let's configure and then we can build and we can debug. And this time it'll use GDB, which you can see right there executing GDB. All right. So there we have it. It's all working properly on Linux, followed the same exact steps that I did on Windows, except that it's using GCC and GDB under the hood. So now you've seen how to successfully use VS Code, the CMake tools extension and VC package to configure our SuperTux CMake project on all platforms. The takeaways from this demo are that VS Code CMake tools extension and VC package are all tools that we recommend to ease your cross platform development experiences. Additionally, you should use the VS Code remote extensions if you would like to develop for platforms other than your host OS. So now I'm going to dive into how VS Code can be used for collaborative development. VS Code has a live share extension pack, which enables you to start live collaboration sessions directly in VS Code directly in that text editor. So it makes it really easy for you and your teammate to quickly collaborate on the same code base because you don't have to worry about replicating code or adjusting configuration or environment settings. What happens is that your teammate actually sees a context of your workspace in their editor. And they get all of the language features such as intelligence and go to definition, rename, and so on. So once you are both in the same collaborative session, you can both open files and navigate through the code, make changes, and these changes will be reflected in real time for both of you. And you can even do collaborative debugging sessions so that you can both independently use the debugger features such as setting breakpoints or watching local variables. So now I will give you a little demo of how the live share extension works. It's worth calling out that normally it wouldn't be the same person joining the session from their computer and their VM. You would use this with a co-worker or a class member or anyone that you trust, but it could be any two machines, right? So in this demo I will be using both of the machines, but if you're using this extension it would likely be your computer and someone else's computer. So on my Windows laptop, I'm going to start my collaboration session. And before recording this demo, all I did was install the live share extension pack on both my laptop and my VM. If the extension pack has any OS specific dependencies that aren't already installed on your machine, VS code will let you know and will give you the option to let it just install those for you and take care of everything. So on my Windows laptop, I will click on this live share icon on the left to open this live share pane. And then I can click start collaboration session and this will give me a URL that I can share with whoever I want. And by using that URL they can join the session from their own device. Alright, so the invitation link has been copied to my clipboard. So now I'm going to go into my VM and in the same live share pane on the left I'm going to click join collaboration session and then paste the URL for the session that I just started. Okay, so this is just joining the live share session from my VM. It might take a moment since I'm doing this remotely. There we go. So now you can see in my Explorer on the Linux VM, I have this Visual Studio live share workspace. And it is loading the SuperTux project from the collaborative session that I started on my Windows laptop. So now I can actually see the cursor of where the other person in the collaborative session is. And if I highlight something, it will show up on that other person's screen. They'll be able to see how I'm interacting with the code. Let's say we want to debug something together. I can start a debugging session. So let's do that. I have my breakpoint set in main. We'll click debug. And you can see it launched the debugger in both my Windows laptop and my Linux VM. So here I can debug with my co-worker directly from my own instance of VS Code. As we wrap up our session today, I want to talk a little bit about what's coming next for VC package and for the C++ extension in VS Code. So there are a few enhancements that we're currently working on for VC package. The first is support for a manifest file, which is the VC package.json that I demoed for you today. We're also working on a first class experience for managing private libraries with VC package. Customers will also be able to bring in additional libraries outside of what's supported in the catalog. VC package will use binaries to update rather than pulling from source every time. And we also will support versioning, which means you can specify exactly which version of a package you would like to use. So if your project has a dependency on an older version of a package, that's fine, you'll be able to use that. As for the C++ extension, we're currently working on support for Linux on ARM and ARM64 devices. We'll start by releasing IntelliSense modes for cross-compiling, and then we'll have the full remote development and debugging on ARM experience. If you are interested in when these features are being released, you can stay tuned to the C++ team blog. As I said, these are things that we are currently working on and planning for, so I don't have specific dates to give you today. So the best thing you can do is just check the C++ team blog for announcements of new features. And that is the link to the blog in the slide. Also, please give us your feedback. The C++ extension, the CMake tools extension, and VC package are all open source, which means you can find all of their repos on GitHub. We turn to our GitHub repositories frequently when we are creating our roadmaps for new features. We check out the open issues pages on each of these repos and see which open issues have the most upvotes. And that tells us what our customers care most about. So I have the links to the GitHub repos on the slide. Please, if you have a bug or an issue, check out the issues page and create an issue if you don't already see the one that you're looking for. Upvote feature asks that you care about so we know what to prioritize. And of course, feel free to contribute to the repositories yourself. We are always looking for contributors. Alright, well thank you for coming to my session and I'm excited to answer your questions in the live Q&A.


Remember this alignment accesses authority Alignment accesses authority. I spoke about this recently. I use this analogy, but I'll use it again because I think it applies here Imagine I get pulled over The best thing for me to do the wise thing for me to do if I get pulled over by a police officer Let's just do what he asks keep my hand on the steering wheel. He wants my driver's license hand it to him Now if he's a good cop he's just gonna Act according to the law if he's trying to hassle me, okay for the time being I'll go along with it And then maybe bring a lawsuit later if that's the case, but that's a whole different story But you know when the officer pulls me over he's acting in accordance with the law now We know most police officers are good people So for the most part it's gonna go along with it I I trust that he's acting within authority now imagine this same police officer Imagine he's not wearing his badge He's off the clock He comes to my house knocks on my door and demands that I give him all my furniture Or demands that I give him all the cash I have in the house Or demands that he be allowed to use my house like his own personal Airbnb All right, if he did that Then I could turn away say what are you doing like I'm gonna call the cops on you Why? Because he's acting outside of his authority When an officer is acting within the law He has the authority to act But the moment he breaks away from the law there's consequence in the same way you and I as believers Have the authority so long as we act within the word so then there is power in praying the word remember this if God promises it you can pray for it if God promises it you can pray for it When God speaks a promise That's mine to claim and I claim it not according to my own creative power I claim it according to his faithfulness knowing that he'll stand by his word now again for example like with healing Okay, we claim the promises of healing which are clearly laid out in scripture What happens if it doesn't manifest like we think it should and when it should That's when you trust in the sovereignty of God But still pray persistently and as I said I'd rather pray the rest of my life for that healing Then it stopped praying prematurely when the miracle would have happened pray every day like the miracle could happen And if it doesn't happen by the end of that day thinking that the miracles coming tomorrow That's the state of faith don't grow discourage, but pray persistently Now as we align ourselves with the authority of God's word as we align ourselves with heaven's backing That's where we see the real power. You see some of us are praying prayers out of selfish ambition Some of us are praying things that God never willed for our lives Some of us are praying for God to bless us in areas. He never wanted us to step Some of us are praying for God to open a door that he himself locked Wow think about that Some of us are praying for God to open a door that he himself locked and Then we push and we plead not realizing that we are trying to pray against God's sovereignty, which never works But if he promised it we can pray it now watch this John chapter 15 verse 7 Listen to what he says. This is for sure 100% You can count on this, but if you Remain in me and my words remain in you. You may ask me for anything you want and it will be granted What a promise But what does it mean? If you remain in me and my words remain in you You may ask for anything you want and it will be granted. Well, I got a question for you. Think about this. Here's my question What happens when his word remains in you? What happens when his word remains in you? I'll tell you When his word abides in you You begin to become transformed Your desires begin to change Your cravings begin to change your habits begin to change your thinking begins to change So if his word abides in me Then I begin to become transformed in my desires and what begins to happen. I begin to pray what he wants and It's in praying what he wants that causes it to be granted. I can't just pray whatever I will whatever I want That's immature But when I align myself with his word what he's promised Then I begin to see The manifestation of those prayers. What does it mean now to remain in me or abide in me now? This is important because here's the condition he laid out if you remain in me. That's the condition So if we want the result We have to meet the condition. So what does that mean if you remain in me? Well, first John 3 24 says this whoever keeps his commandments remains in God And God in him by this we know that he remains in us by the spirit He has given us so it is in living according to the word It's living in righteousness that we find ourselves aligned with God's word first John 3 21 through 22 Beloved if our heart condemn us not then we have confidence toward God and whatsoever Ever we ask we receive of him Because we keep his commandments and do those things that are pleasing in his sight You want to see your prayers answered start living right start aligning your life with the word of God and You will begin to see that your prayers change Your will becomes one with his and the moment you align with heaven you have heavens backing alignment brings access to authority Thank you for watching Encounter TV. Don't forget to subscribe and click the notification bell Also, help us spread the gospel of Jesus Christ in the power of the Holy Spirit Make a one-time donation or become a monthly supporter by clicking on the donate link now


Welcome to the show. We are here for JP's product pick of the week. That's me, JP, and this is the show where you can watch the show inside of a product page and get a humongous discount on that product. So let's, first of all, tell you where you can go to watch it if you wanna see it inside the product page and get a little bit of a hint as to what the actual product is. That right there is the URL. So if you head to Adafruit.com slash product slash 5200 or you can use that QR code right there if you wanna use a mobile device, you will be able to watch this video broadcast from inside the product page. And if you head there, not only will you see the video playing, but you will see that this week's product pick is a 50% off, half off during the show only. So that means you don't need a coupon code or anything like that. All you have to do is put the product in your cart and buy it before the end of the show or a few minutes grace period after the show and it will be automatically discounted. So it couldn't be easier. And before I go any further, what I'm gonna do is have Lady Aida tell us in her own words with her own video and hands and demos and pictures what this product is all about from the initial product launch. So take it away, Lady Aida. Why don't you? There's more cowbell. Yay. I could have used a little more cowbell. Okay, so the first cowbell, I mean, I always start with a prototyping board because that's how I actually prototype the other cowbells.  It's very inexpensive. It's designed to just be like a little throwaway. You can solder headers onto it, plug in your Pico, and it gives you a prototyping area.  So it's kind of like a handy beginner getting your project started, but you don't need a lot of complicated extras. So the Pico, actually a lot of times people either have it with headers attached or they solder on headers. So that when you get the protocowbell, it does not come with headers. And the reason it doesn't come with headers is because you can configure it in so many different ways. You can plug in these skinny sockets. If you want to be super slim, you can put in these stacking headers, which I recommend, or you could put in these socket headers. And like we don't wanna assume which one you want. Personally, I like the stacking the most because it means you can then plug it into a breadboard like so. And then you plug in the Pico on top and you have a little bit of space over here. What does Christopher Walken say? I need more cabels. All right, well, he will keep going. So there's plenty of space you can solder in components, you know, capacitors, connectors, whatever you need to. There's an edge mount reset button. So reset button is not built into the Raspberry Pi Pico, but it's very handy. So if you want to go into bootloader mode by holding down the boot select and resetting, more of you just want to reset your board. So there's a little edge launch reset. So you don't have to unplug and re-plug your Pico to load circuit Python. And then on the other end, we've got a STEMI QT connector. So it's got a three volt power ground clock and data. And the clock and data are connected to pins IO four and five. So all the grounds are the square white rectangular because there's a lot of ground pins. And then this is the ground pad. Every pin has a duplicate.  And then the pad next to it is you can jump or it. So every pin has like a little twin sister next to it. So you can jump her to it. And then the three volt line is the only one that has it's extended out. And this is all three volt because you'll probably need a lot of three volt power. And the rest of the pins are kind of like a little breadboard four row connects. And I think there's like 13 rows of four. You always cut the, you know, pads if you want to have them separated, but chances are you want to make multiple connections to each row.  And it's like only a couple of bucks. Oh, and one, one last thing. So the I squared C also has a breakout here. These four pins are the I squared C JST breakout. So clock data, three volt and ground. And that's for in case you don't want to use IO four and five, you can connect to the I squared C power and data and connect them to other pins. You shouldn't even have to use it for I squared C. You can use it for just GPIO. Like there's no pullups. So even though it's designed for I squared C usage, you don't have to do that. So this is our first cowbell. Yeah, that is it right there. That is the product pick of the week. You can see it nice and close up there. And let me go ahead and switch over to this camera. That right there is product pick of the week. It is the Pico. No, it is the Pie Cowbell Proto for Pico. That's a lot of P's. If you didn't know, the reason it's called this is that the Pico W, when the second Pico, the Pico W, which is the Pico with wifi on it came out, a lot of people started calling it the Pie Cow online that became popular. So Cowbell was the name that won for accessories that fit on top of or underneath the Pico, at least in the Adafruit world. And this one is dead simple, but it's super, super handy. In fact, let me bring up these two images so you can see them here. I can point to stuff there. You can see it's got the nice silk screen on the bottom there using penguin for the typography, nice high res type. You can see both the top and the bottom sides show you the GPIO numbers, which are usually what you're gonna call inside of Arduino or MicroPython or CircuitPython. Also lets you know which ones are ground. You have a few analog pins. Those are called out by analog names. You have tied prototyping area in the middle, little sets of four. You also have the three volt rail that's extended down from the three volt, which you can use on a few different components if you're prototyping a little circuit in there. And you've got the handy dandy reset button on one end. You have the STEMI QT connector for I squared C or quick as well on the other side there to plug in sensors and devices. And you can put headers into it socket style and put a pin header Pico on top or you can reverse that, which is actually what I did. So I wanna show you, this is my kind of favorite way to use it here. Let me switch over to a down cam and I will pull this camera out a little bit and I'll refocus so you can see that focus nice. That's pretty good there. So you can see here, this is a way that I like to use it which is a lot like a feather wing style or a shield style if you hearken back to Arduino add ons. And that is the unplug couple of things here. So there's a Pico with the thin socket headers on top and I've put the tiny little pin headers on the underside of my cowbell there. So now I can press that on and you can see I've made a whole little world of connections and circuits and things on the top here. And let me go ahead and plug this in and show you what it does. So I've got first of all a connector for a servo that I've put there and that's using some power ground and a PWM line. I've got I squared C stem of QT running out to a little OLED display here. I've added a, let me see, I've added a potentiometer here using one of the analog inputs, ground and power. I've added a button and I've added a little switch here and I've also added an LED. So when I plug this into USB power now, so it's just plugging into the Pico as normal, you can see here I've got my little plug-in OLED display. I've got a little potentiometer to servo action there. You can see my nice servo there. I've also got the angle showing up on my display, whatever angle I've turned that potentiometer to. And then I also have some little status things like when I press button, button shows up in text and I can flip between switch side one and switch side zero there on this little switch. So this is a really nice, neat, easy way to add on a bunch of additional circuitry and connectors to your Pico project. Like Lady Aida said, it also gives you a handy dandy reset.  You can just hit that button there and restart your project. And if you consider what I was doing before I had that, I had to go to a breadboard and make things big and lumpy and wiry with stuff all over the place. So it's a really nice way to neaten up your project. And also at this price, it's usually, I think, what $2 and we've got it on sale today for a dollar or 98 cents, it's a great price, it's a great way to add a little extra juge to your Pico projects there. So let's take a look at, here we've got the page, whoops, now I've done it. Right there it says, I'm gonna reload, make sure we still have these in stock, I think we stashed a bunch of them.  Also, these are the kinds of boards that I like for other circuit prototyping. So having something with some doubled up pins, which is what these little end ones are, those allow you to just take every pin and if you socket that down into the Pico, you now get one exact copy of all of those pins, which is nice. And then you have nearby tied rows, which is perfect.  So I'll use things like this, even if it's not on top of the Pico, even though it's designed to fit on top of the Pico, I love little proto boards like this, they're really handy. If you take a look at the learn guides, I don't think we have a learn guide for this particular on its own, but we do have at least one example of this in a project already, which is this PicoW HTTP server by Liz Clark, and there you can see, we do have a fritzing object for that. So here's a little fritzing diagram of the stuff, the extra stuff she wanted, a little transistor here, some resistors, LED, and then having an OLED plugged into it, really handy. So if you take a look through this guide, you can head over to the wiring section, this will show you how she connected things up to have some sort of remote wired LEDs and so forth. So this is kind of a pain in the neck to do on just a breadboard or there's really nowhere to do it right on the Pico itself. So really nice way to add just that little bit of extra to your project. Let's see, what else? Code for this, there's not much actually to show because I'm just utilizing features that are on, so I won't show any code for that, but let me know if you have any questions before we go and I'll see if I hit everything I wanted to mention about this. Let me show my cool demo again down here, copy of my head up there. So let's see. Yeah, so we say Pico W, pi cow, pi cow bell. It's good for either Pico or Pico W. There is the Pico H, which has headers soldered underneath it, pin headers underneath it already. So you'd wanna add sockets to your cow bell in that case, but if you get the plain version of the Pico with no headers soldered into it, then you can choose top or bottom for the pi cow bell. Let's see, what else? Yeah, so it doubles all of the Pico's pins. It also gives you 13 rows of four-hole connected strips, those little breadboard-y style sections, and then you have that 3V3 rail. There's actually also a ground rail, so if I turn this off, I'll plug that. I can show you on this one and also on a blank one. Right here, this line of white here, this is all ground, and this line here, where you see the little sort of white dashes between them, that's the 3V3 line. I actually ended up on this, I realized I was gonna draw too much current on the three-volt line, and I wanted to use the battery or the voltage, actually the five volt from USB. So I ended up cutting a trace there. So you can modify the heck out of this, you can cut traces to make it do what you want, depending on how you wanna use it. So I actually did not need the long line of 3V3, but that could be optional or just use a subsection of that if you want to. And here you can see it a little better, probably on that one there. You've got the 3V3 line, which is these white dots right here, and there's your ground line. All of the ones that have a large section of white around them, the square, those are also ground. And as Ladea mentioned, you have your StemQT connector and you can also send that to other pins if you want. But by default, that goes to pins five and four for clock and data. I got those backwards by the way, those are not four and five for clock and data. They're the other way around. So in your code, you'll flip that around. Actually, you know what, that's one excuse to show, let me see, do I have, yeah, there's the code I have for this. Let me pull up that window there. I had this wrong at first and I was confused as to why and that is because I squared C equals bus IO dot I squared C, board GP five and board GP four. Not the other way around, which is what I tried at first. So we've got to be careful about that one. And let's see, anything else? I think that's it. Let me know if anyone in the Discord has questions about it. RetiredWizards says, how are the quick pins changed from four and five? That's an excellent question. I'd love to know if anyone has the answer to that because I'm assuming we need to cut a trace of four and five and run a wire pair of wires from the board over. So if you, let me show this again. There, and let me pick something to point with. So these are, I don't think these just magically take precedence. So I think we need to cut a trace somewhere. If anyone has done this, I'm sorry, I meant to find out the answer to this before the show. Lady Aida is busy right now, so can't answer this one. But if anyone has, also you can look at the schematic for this and see up on our GitHub. But I'm assuming we've got some traces to cut before we can do that. I could be totally wrong though. Yeah, cut traces was Todd's suggestion in there. All right. Mouse noticed that I called the button group butt group. Because I'm 12, sorry. All right. The headers I'm using for the demo, yeah, that's a good question too. If I can go, let me go find those. There are actually a few good choices for headers for these I think we probably have a link to them right on the page. So let me see if I have the page up. There we go. When you go to get when you can click on this, add stacking headers or add short socket headers or add regular socket headers. So I'm using this middle option, the short socket headers. If you click on that link, I think there'll be a, yeah, so these are two by 20. So 20 pins long, which is what you need. If you scroll down, I think you'll find the pin headers there. So this short plug headers for Pi Pico two by 20. So those are the two that I'm using, the socket and the pin versions of those. I really like those. I use the, we have an equivalent for the feather, short stacking headers for feather. I use those all the time for putting feather wings on just because there's usually not a reason to have that large expanse of space in there. So you can see, again, if I take these ones right here, one warning, you can plug these in backwards. You know, unlike Arduino or feather, there's not a sort of obvious polarity to this. So you want to make sure that you remember the STEMI QT connector is on the same side as the USB connector, but you can accidentally plug those backwards. Don't do that, you'll probably ruin something. So you can see there with these little short stacking headers, you still have some space in there for sure, but it is not as gigantic as with a regular header or the stacking headers are super, super huge. So I like these, depends on your project, though depends on what you're trying to fit. All right, DJ Devin three says, are the downloads on the page? I think since we don't have a learn guide page for this, you can get it from the product page. And let me see. Yeah, if you click on this technical details, Github repository, that'll take you to the PCB. And I'm assuming this is, I don't know what file we have here. I'm assuming, yeah, Eagle CAD file there. All right, I think that is gonna do it though. So let me go ahead and add a little connector. Oh, you know what? I've got one in the bag, that'll make it a lot easier. That's my product pick of the week this week. It is the Pi Cowbell for Pico. It is the Pi Cowbell Proto for Pico. That's the name of it. And I can set that right there. That one has a nice neat hang tag. All right, so don't forget head on over to that page, grab some right now for half off and you don't need a coupon code, just get them before the show is over, which is moments from now and you'll get the half off price. Maybe pick up a Pico if you don't have one. I think we might still have a limit on how many you can buy of those per customer, per lifetime, but I'm not certain on that. So check the, there's an FAQ I think on Raspberry Pi products. All right, thanks everyone so much for watching for Adafruit Industries, I'm John Park and this has been JP's product pick of the week. Bye-bye. Ba-da-da-da-da-da-da-da.


Hollywood with our guest star Norma Jean Nelson cookie on the Blondie show and featuring the Luke Costello Junior Youth Foundation Award. Every Saturday morning on this program some lucky boy or girl received hundreds of dollars with valuable gifts and the Luke Costello Junior Youth Foundation gold trophy for good citizenship. Every boy and girl in the country is eligible for this award. We'll tell you how to win it later on the program but first let's have some last with our stars but Abbott and Luke Costello what were you doing down at the ocean this morning? Oh I bought a boat from a sailor called Captain Epsom. Captain Epsom? Yes he's an old salt. Oh what do you want with the boat? You know nothing about the sea? Oh I know all about the sea Abbott and today I'm gonna tell the kids a story about Moby Dick. Moby Dick? Yes and I tell the story all by myself and I don't need any help from you whatsoever. Why don't you go over to the Tom Brenerman's program and show him what a real old woman looks like. Go ahead with the story. Well okay now Moby Dick was a great big whale and he was a really a mammal. A whale is a mammal. Yes he was a mammal. He was not a mammal. His name was Dick. He was a papal. Seven kiddles.  All right go ahead. Now Moby Dick was a great big whale and he lived in the ocean and he loved to swim. When the water came in it came up he'd swim in and when the water went out he'd swim out. He swam with the tides. Yes he could I have that again. He swam with the tides. Tides. He didn't wear any tides. He was so big he couldn't get a pair of tides on to fit him. Now nobody could catch Moby Dick. When anybody came after him he'd squirt water through his nose. No no spout. Spout. Yeah spout.  Now one day Moby Dick was swimming along and he passed a shark that was chalking up his cue. See what kind of shark? Who said that? I did that's in case you asked. This was a pool shark.  Now well Moby Dick was hungry so he grabbed a great big clam. Abalone? Yes. So he what was that? Abalone. Abalone. This is no bologna Abbot this is the whole truth. Who said anything about bologna? You did. I did not. You certainly did then what did you say? I said abalone. Yeah yeah see he said it again.  I said the whale was eating abalone. Where would the whale get baloney in the ocean? He was eating a great big clam. Abalone is a clam. How do you like that they're making baloney out of clams now? They don't make baloney out of clams. The kind of clam I'm talking about is abalone. A clam is abalone? That's right. How do you like that? One of us is nuts.   Oh didn't you just tell me that a clam is abalone? That's right.  Now Moby Dick was a friendly whale and he liked to play with the fish especially the guppies sure he what was that? Guppies guppies. Haven't you ever heard of guppies? Oh I listen to guppies all the time. Guppies tavern? Now Moby Dick was swimming along one day and he ran into a swordfish and a swordfish lunged at Moby Dick and Moby Dick lunged at the swordfish. What happened? They had lunch together. Of course Moby Dick paid the check he was a very wealthy whale he owned drugstores all over the country. Wait a minute what drugstores does a whale own? Abba haven't you ever heard of whale and drugstores? Now Moby Dick didn't feel so good so he went to see the Dr. Fish. Dr. Fish? He was a famous sturgeon. Sorry, sorry. When he got to the sturgeon's office there was a walrus in there having a tooth pole. Not tooth tusk. Yes he... What? Tusk, tusk. Yes, well tusk tusk to you too. And a couple of poo poo. Now also in the sturgeon's office was a big fish with band-aid stuck on both sides of his jaw. What was the matter with him? He was plastered to the gills. Then a quartet of fish came in and started singing. Wait a minute just a quartet of fish. Oh sure what a quartet? First tuner, second tuner, barracuda and bass.  What happened to Moby Dick? Oh it was a very very sad ending. It was. One day he swam away and nobody ever saw him again. Costello, I'll tell you where he went. Abba, you keep out of this. I started this story and I'm going to finish it. Now whales are just like elephants. They have a graveyard where they go to die. No matter where a whale lives he goes to the whale's graveyard to die. Whales swim thousands of miles from the Pacific Ocean to the Indian Ocean and from the Indian Ocean to the Atlantic Ocean against currents over reefs through storms, hurricanes, typhoons and monsoons.  They die? Yes, it's the trip that kills them. Hey slaughters, thanks for kids everywhere. Look for a silver lining. Don't be offended if I preach to you a while. Tears are out. Make your very biggest troubles. Nelson, but you know her as the daughter of Dagwood and Blondie and here she is over here this morning and bringing you some snow. What snow? You came from the dentist talking you feel so cheerful. He wasn't in. Gold with gold or silver. He walks in this town for the last fella. Okay I heard the jokes you were telling with Johnny. I'll tell you what I'd like to do. I'll give you 50 cents if you'll go back to the Blondie show and tell them with your father. Nothing doing. Why? Well he gave me a dollar to come over here and tell them on your show. Come here Costella. Oh hello Cookie. Who is your father?  Oh yeah? Well Mr. Costello I'll have you know that my father is a great radio comedian and he comes from a famous family while his grandfather chased the Indians out of Pennsylvania. Yeah. What program was he on? Costello you stop picking on Cookie. She's proud of her family tree. I'll never forget the time you looked up your family tree. What happened? He got hit on the head with a coconut. Oh sure. Why my little nephew Bobby in Paterson, New Jersey he has three feet. Costello how do you know? How do you know he has three feet? Well I got a letter from my sister yesterday. She said dear Lou you should see the baby now. He's grown another foot. That Costello Cookie. I saw a dad this morning and he told me you were going to the dentist today. Did you go? Oh I don't like to go to the dentist. Well I don't blame you Cookie. I haven't been to the dentist since I was ten years old.  Do you like to go to the dentist? Oh sure Cookie. You see when I was your age I had so many wires on my front teeth people thought I was trying to swallow a birdcage.  They must have. Every night when I went to bed the canary used to sleep in my mouth. Cookie Costello is right all kids should go to the dentist. What's wrong with your teeth Cookie? Oh I hurt them eating animal crackers. Well they're little soft cookies. Animal crackers couldn't hurt your teeth. Well the kind I ate were dog biscuits. Well Cookie when you got a toothache there's two things you can do stay home and suffer or go to the dentist's office and suffer. Do you brush your teeth Mr. Costello? Oh Cookie that's the first thing my mother taught us kids do. Yeah there were nine kids in Costello's family. Did they all brush their teeth? Oh sure it was a pretty sight in the morning. All nine of us kids used to rush to the bathroom to see who'd get first crack at the toothbrush. I put the dentist's office. Yes I send my wife to the dentist every day Cookie. Why?  Costello my wife's mouth is not that big. Not big. I've seen bears crawling out of smaller holes. I'll go to the dentist if you'll go with me. Oh nothing doing. Last time I went there to the dentist he put six drills and a lot of other tools in my mouth and then at six o'clock the whistle blew. What happened? He hung a red lantern on my nose and went home.  Cookie wouldn't you like to sing a song for the kids? Oh sure. Oh good. You want Costello to help you? No I think Cookie's gonna sing a song all by herself.  Okay Cookie here we go. Music please. Hang on to your seats kids. Here we go. Cookie bumpstead. I mean Norma G. Nielsen. Norma G that was really swell and I'm sure our kid audiences happy that you came over here this morning. Well I gotta go home now and help my daddy make a sandwich. Well here's a little something to put between the bread. What is it? Well for Dagwood it's just a mouthful. It's a 20 pound Wilson ham. Bring out the ham. There it is. Oh gee thanks Mr. Costello. But before I go I'd like to say something serious. I'm glad to do my part in helping both you and Mr. Abbott in the wonderful work you are doing for the kids all over America. The Lou Costello Junior Youth Foundation is the kind of thing there should be more of. Goodbye kids. I'll be seeing you on the Blondie Show. And now for our quiz game. Bubble or nothing. We have eight kids on the stage chosen from the studio audience. They're all chewing bubblegum. The kid who blows the bubble the biggest bubble in 10 seconds gets a special prize. Every kid who blows a bubble gets to be a contestant.  So let's go with bubble or nothing. Well the contestants are chewing their bubblegum. Now on the count of three the gong ring and they will start blowing. Are you ready kids? One two three. Now come on. Where are the bubbles? Come on. Alright to the two winners and the two girls. The boy and the girl who blew the biggest bubbles. Here you are honey. First there's a little girl over here.  So we're going to give you you know what you went honey? You won a beautiful wall aquarium with real live tropical fish from the photo aquarium company in Inglewood, California. Now all you do is put it up on a wall and it lights up honey. That's for you. Take it away for the boy. So let's see the boy's over here. Now you also blew the biggest bubble for the boys. You win this swell table model radio from the Burbank appliance company in Burbank, California. That's for you. Take it home and put it by your bank. And now here's contestant number one in the bubble or nothing contest. Little girl what is your name? Genie Allison. Genie how old are you? Uh six ninety seven. Genie. Well you just aged another year and where are you from Genie? Where are you from? Good old California. Good old California. Is there any substance you'd like to talk about at all? Anything at all? No. Nothing at all? What about animal noises? There's a good sound. All right how about animal noises? Let's talk about animal noises. Incidence. What kind of animal goes moon?  Cow. Cow right. You get a prize honey. Right over to Mr. Abbott. We get the prize here.  So we're giving you a whole year supply of Peter Paul's Walnetto's and you get one month supply now and every month for a whole year you'll receive another carton of Peter Paul's Walnetto's and that's not all. Kids this little girl is going to give every kid in the audience a package of Walnetto's after the program. The little boy's name is Lloyd because it's right on him. Lloyd how old are you? Eight. Eight years old. Where are you from Lloyd? Los Angeles, California. Good glad to see you. Now listen Lloyd is there any particular anything at all you'd like to talk about? Anything you're pretty smart at? Yes arithmetic. You're smarter than arithmetic? All right if Abbott had one apple and I took it away from him how many would he have? Nothing. That's right you win. You win Lloyd right over to your right there. Wow look at this. Look what you've got. Three swelled believe the kid embroidered western shirts and two pair of Billy the Kid western pants. Pick them up. All right and here's contestant number three over here sweetheart. What is your name? Camry Larson. Good where are you from? Mr. South Dakota. From South Dakota. Well that's wonderful. We're glad to have you in this lovely climate of California right now sweetie. Now what would you like to talk about honey Kay? Anything at all? What would you like to talk about? Could you tell me anything about movies? You want to talk about movie pictures? What's the last picture you saw? Did you ever see Abbott and Costello in the motion picture? You never did. Well say you'd better start. How old did you say you were Kay? How old did you say you were? How old are you honey? Five years old. Five years old. You're from South Dakota? She should know about horses. All right where's North Dakota? Is that near South Dakota? Is that near South Dakota Kay? Well don't shake your head honey just say yes or no. Yes? Thank you. You're welcome. Let me dress up for here's a beautiful genuine firm up and tam set for I.J. Fox the world's largest furriest. What's your name sonny? Freddie. Where are you from Freddie? Chicago. Chicago Illinois. Freddie I'm going to ask you one question. Who's buried in Grant's tomb? No? No help from the audience. Who's buried in Grant's tomb? Grant. Grant. That's right. You get six prizes in one. Two pairs of spree tug longies, two pairs of spree tug, spree tug Judd Purs and two pair of boxer shorts. How do you like that? There they are. Take them away with you. Here's our next contestant over here. I know your name is Jill. Sweetheart how old are you? Six and a half. Six and a half. Good. Now where are you from Jill? New York. New York City. Good. That's fun. You know it's very, very cold in New York right now Jill. Now Jill would you like to talk about fairy tales? Yeah. All right. One day a little red riding hood went for a walk in the woods. Who is she going to see? Her grandmother. Right. Now when she got to her grandmother's house who did she see? The wolf. Right. You win. Mr. Rabbit. Jill Mr. Rabbit's going to give you a very lovely prize but I got something here for you.  Yeah. You really have? Yeah. Well listen if your mother's really here here's a present for her. I want you to give her six gorgeous pairs of Canon 51 gauge nylon stockings made by the makers of the famous Canon towels and sheets. That's a present from you to your mom. Now Mr. Rabbit has a present for you over on your right. Over here Mr. Rabbit's present. Beautiful quilted house coat from Eastern Columbia Broadway at 90. And you also win this famous Hollywood star stamp album autographed by Lou and myself personally and a set of movie star stamps to start your collection and each kid in the audience gets a set of movie star stamps. How's that? You like it honey? Okay son you're the next contestant. Now how old are you? Six and a half. Six and a half too. What's your name? John Kenwood. John where are you from? Where are you from John? Los Angeles? Right up John. Don't be afraid. Where? Chicago? Where? Was you know where you're from? Detroit. Oh Detroit. Well that's good. Now uh would you like to talk about rivers? What state was named after the Ohio River? Ohio. Cleveland. Not Cleveland. No not Cleveland. What state was named after the Ohio River? Ohio. Ohio. Ohio. Ohio is right. Wait a second. You win this pedigreed ideal cocker spaniel puppy. Where is it? And to feed it we will send you a six month supply of Wilson's ideal dog food and seven course meal ideal for your dog. How do you like it? What's your name dear? June Scarborough. June Scarborough. June where you from? Jacksonville Florida. Would you like to talk about earth predict? Okay. All right if I had 10 bananas and eight seven and threw the peelings on a sidewalk how many people would slip on the banana peels? That's slower. All right if I had 10 bananas and eight seven of them and threw the peelings on a sidewalk how many people would slip on the banana peels? Seven. The answer is five. Is that right? I think you're right. Go ahead. I'm going to give you a deal. You're right. Seven is right. You also get a whole year supply of delicious Peter Paul's Walnetto's. Boy you're going to be popular now.  A whole year supply. Wilton Clark. Wilton Clark. Where you from Wilton? East Los Angeles. East Los Angeles. Good. We're going to talk about birds now I've been getting them for years but we're going to talk about them which is the biggest a robin a sparrow, a crow or a hummingbird. You don't have to crow about it I. Crow, you're a right.     You get a swell Lake Placid ski suit with a flat wool zipper jacket and warm wool trousers made by Sandist. Present the Lucas Doll Jr. Youth Foundation Award. The award this week goes to eight-year-old William Robinson Jr., of of Cranston, Rhode Island. And folks, the Foundation received more mail on this boy than any other winner of the award to date. Over 300 letters and newspaper clippings were sent in calling our attention to William Robinson, Jr. Well, Lou, I think that should be proof enough that the kid is entitled to the award. I saw his picture in one of the newspapers sent in. They seem such a little guy to have done anything big. Johnny, them little guys are sometimes a lot bigger than they look from the outside. And that's the kind of a guy William Robinson is. Kids, he's just eight years old, motherless, and lives along with his dad in Cranston, Rhode Island. And well, Lou, you tell the kid the story about it. Well, kids, I guess you all read in the papers about the big snowstorms back in the east. Well, on December 26, the day after Christmas, Rhode Island was in the grip of a terrific snowstorm. Out in Cranston, Rhode Island, the drifts were five and six feet deep. On the morning of this big storm, in a little house on the edge of the town, a man was suffering from a severe heart attack. William, William, William, time is worse than ever. I'll run for the doctor, Dad. I'll get him here right away. I'll put on my clothes and be back with the doctor. No, no, you can't go out the house. The snow is too deep.  But, Dad. I'll be all right. You stay here. Dad, I'm going for the doctor. I'll make it. Now it's nearly a mile to town, William. You can't get through. Don't try it, William. You're too little. I got to go, Dad. You need a doctor. I'll make it. William, William, come back. You can't get through that snow. William. Wow! Did he get through, Mr. Castello? Did he make it? Johnny, the little William Robinson battled those snow drifts for three quarters of a mile. He made the edge of the town. The doctor's house was nearly a mile further on. William was exhausted. He was covered with snow from head to foot. He dragged himself to the nearest house. Robinson, what are you doing out in a day like this? Look at you. You're soaked to the skin. I'll tell your father about this. Mr. William, my dad. My dad's got a bad heart attack. Please. Please call the doctor. Holy mackerel. The kid fainted. Ma, quick. Phone the doctor and tell him to get out to Robinson's place right away. And then come here and help me get this kid straight and out, even a bad way. Or they ought to have a phone in that house living way out there. Gee, Mr. Castello, I bet that kid got sick all right. I get the sniffles just from getting my feet wet. Yes, Johnny. William was laid up for a long time, recovering from that hike through snow drifts. But he got the doctor there in time to save his dad's life. Yes, Lou. And his kids like William Robinson. And there's millions of them in this country that make me proud that we started this kid's show. It's a real thrill to be able to bring these boys and girls to the attention of the whole country. That goes for me too, bud. And now, Johnny, what have you got to say about it? Well, Mr. Castello, there's no doubt about it. William is sure a winner. What do you kids think? Well, that does it, Johnny. Our jury is convinced. Go ahead and make the award. William Robinson, Jr. goes this week's Lou Costello, Jr. Youth Foundation Award. And here are your prizes. First, a beautiful grown wristwatch. This is a solid gold, 17-jewel grown and graved from Bud and Lou. And a gold, every sharp pen and pencil set. And a Packard Bell three-way portable radio made by the makers of the famous Packard Bell Phone Accord. And a bicycle that will make you the head man on your block. It's a Schwinde Luxe-built bicycle, the world's finest.  And to you, William Robinson, Jr. goes to the Lou Costello, Jr. Youth Foundation Gold Trophy for Good Citizenship. This is a beautiful engraved gold trophy made by the Dodging Corporation, largest manufacturer of trophies in the world. Hello, how about William's dad? William, we've got a gift for you to give to that dad that you love so much. It's a beautiful grown precision wristwatch engraved from you to your dad. And we hope he gets well real quick. Quick to Boyer Girl for a civic good deed. You, the listeners, will nominate this Boyer Girl of the week. Anyone can write a letter nominating a Boyer Girl, just write to Abbott and Costello, Hollywood, California.  All letters become the property of the Lou Costello, Jr. Youth Foundation. They will be judged by its board of directors and the judges' decisions will be final. The award will be made each Saturday morning on the Abbott and Costello Kids Show. Be sure to listen. The winner may be your kid or the kid next door. Well, boys and girls, that's all for today. And kids, be sure and listen in next Saturday when we have two guests, really two guest stars, that great cowboy star, Tim Holt, and his dad, Jack Holt. Well, so long, kids. Till next Saturday. You can nominate a winner by writing a letter to Abbott and Costello, Hollywood, California. And don't miss the regular Abbott and Costello show on Wednesday night. William Robinson, Jr. is father and Mr. Kirby, or portrayed by Henry Blair and Brian Ethel.


Harry Nichols' vision is one of those stories which carries within itself the ring of truth. For the facts of the case are so very strange, so hard to imagine, that one senses immediately they are not the products of imagination. On a certain day in the year 1867, Harry Nichols, a commercial traveler, received an urgent message from his mother for his sister Dorothy was critically ill. But when Harry arrived in his native city, his sister was dead. And on the morning after his return, Harry descended the stairs just in time to see his mother emerge from the parlor, closing the door quickly behind her. The face was white and drawn. Mother, how'd north the manner? Why, why nothing Harry, I simply went in and when I saw Dorothy lying there, I broke down. Dorothy Nichols was carried to her grave. And it was not until that day in August of 1876, nine years later, that he had occasion to think seriously of his sister again. His present trip had been unusually successful and at noon on the day in question, he went directly to his room and sat down to make out a report. A brilliant shaft of sunlight streamed through the window and fell across his desk. And then suddenly, a shadow came between him and the window, the shadow of a woman. Harry Nichols glanced up and his pen dropped from his hand. The love of heaven, Dorothy! She sat quietly in the chair that is left, her hand resting on the desk. He could see her face distinctly. She looked just as she had looked ten years before, except for a strange and unfamiliar line that marred her cheek. Dorothy, my dear. Dorothy, wait! Good Lord. She vanished. The following morning, he found himself at the breakfast table with his mother. I don't want to upset your mother, but mother, I saw Dorothy yesterday. You saw her? Yes, she came to me in my hotel room. She sat down beside me and stayed for a moment, and then she disappeared. Harry, don't be foolish. We don't see the dead. But if that's the case, mother, why didn't I picture her exactly the way she used to look? Why had something happened to her face? A face? There was a mark on it, a long, thin line, clear across her right cheek. Harry, you're right. You did see her then. What do you mean? That morning, the morning after she died, I came out of the parlor, remember? I never told anybody, and I covered up what I'd done so that nobody could tell when I was combing her hair. I dropped the brush, and when I bent down to pick it up, my hand slipped, and I scratched her right cheek with my ring. Yes, such an admixture of the simple and the homely, with the strange and the supernatural could scarcely be fabricated. That Harry Nichols did see his sister nine years after her death, that the mark he saw on her cheek was the mark his mother's ring had made as she lay in her coffin. These are facts, facts incredible but true.


Over the last few weeks, I've taken a look at quite a few very rare or fairly new tiling window managers and I figure I should try to keep that streak going. So today we're going to be taking a look at a tiling window manager called DK. Now DK is a fascinating window manager. It is a dynamic tiling window manager just to begin with. And it is similar to BSPWM and HerpzloffWM in that it is configured with a shell script. So you can kind of get an idea of what this is going to be like before you even see it. Unlike something like DWM, however, it doesn't come with a bar or anything like that. So it's kind of like Xmonad or BSPWM in that regard as well. So once you start this thing up, you're just going to get a black screen and it's kind of up to you to configure it the way you want.  So with BSPWM, you get BSPC. With Herpzloff, you have an option with something like I3 even you have something like I3 message. With DK, you have something called DK command. And one of the greatest things that I've discovered about this with my brief time using it is that it's a little bit more complex that DK command is a little bit more capable, I should say, than a lot of the other programs like this. It allows you to do quite a bit more with its setup. But also it allows you to do things in a little bit different way. So let me go ahead and show you how to install DK. And then we'll run through some of the configuration stuff. So let's go ahead and jump into a virtual machine here. So this is the DK source code. It's hosted on Bitbucket. I will leave a link to it in the video description because it's actually kind of hard to find because when you search Google for DK, you get a whole bunch of other stuff. Unless you specifically search for DK Windo Manager on Bitbucket, it's a little confusing. But like I said, I'll leave the link in the video description. Now when you want to install this, there are a couple of ways you can do so. You can make it yourself, which is the way I'm going to do. Or if you're running Arch, you can install it via the AUR. Now it does require several dependencies and they list those dependencies here. First of them I found were already installed on my system, but I ran the install command. Anyway, it also requires a hotkey demon of sometimes. So if you are going to have any key bindings whatsoever, you're going to need SXHKD or something similar. So let's go ahead and install this thing. So the first thing we're going to want to do is clone the repo. So you'll need Git in order to do this. We'll copy this URL here and then go ahead and just paste it. It already has to get cloned there. It'll clone it into a directory and we'll CD into DK. And then before we make and make install, we're going to install these dependencies. Like I said, I'm pretty sure most of them were already installed on my system, but it's not going to hurt anything to install them again. Just like so. And then enter your password and hit yes. See, most of those were already installed. It looked like all of them actually, but still not going to hurt to reinstall them. If you're on Ubuntu, it gives you all of the things that you'll need to install to do this as well, which is nice. A lot of the window managers just kind of don't give you that information, especially the ones that are considering themselves more suckless. I'm looking at UDWM, just going to put that out there. All right, anyway, so once you're there and we're in the directory for DK, I'm going to do a make. It's going to do its thing and then I'm going to do sudo make install. Now one of the cool things about this is that a lot of times when you build a window manager for yourself, it requires you to do pretty much everything for yourself. So it means creating an accession file and all that stuff. This does that completely for you. So we're actually ready to log out of awesome window manager here and log in to DK, but there's actually a couple of things we need to do first. And that is we need to copy the configuration file to the appropriate place. And I want to make sure that I have the terminal set so that I can actually launch a terminal because it uses st by default. So if you don't have st installed, it won't let you want your terminal when you boot into it. So let's go ahead and show you where you can find the default configuration files. So what we need to do is copy this line here and we'll see your CD up to this. And then we're going to go ahead and copy this line here. And this is going to copy the configuration file to that folder we just created. And really, I don't have to copy this if I could type it myself, but it's just easier to copy and paste because lazy man here. And then that's all it's doing. So that second one was for the SXHKD RC file, which is the file that has all of your key bindings in it, right? So now I'm going to go into .config, DK, and we can actually close this now. And if I do an LS here, we'll see those two files that we just created. Now you'll notice how one of them is colored. Then that's because this is a shelf script. So you'll need to make sure that it is executable. So if it's not highlighted in some way, it probably isn't. So just do chmod plus x and then the file name. It should be executable right off the bat, though. But if you end up having some problems, that might be one of the issues. So let's go ahead and go into the SXHKD RC file and change the terminal to Alacrity because that's one that I have installed. And one thing you'll notice here is that they use the Alt key for the super key. So I don't really care for that all that much. I always use the super key. So what I'm going to actually do is change all those, all the Alts to super. So I'm going to do colon percent S slash Alt slash super slash G. And that changes everything that you said Alt to super real quick, real easy. I love them. It's amazing. So we're right in quick out of that. And then I believe we're ready to go ahead and see what DK looks like for the first time. So I'm going to quit out of awesome here, which I believe is super shift Q. Yeah, okay. Now I'm going to change the session to DK and enter password. And this is what you get when you open up DK for the first time. And if we hit super shift enter here, in order to get to it. If you didn't make that change from Alt, yours would be Alt shift enter. So just know that when I say super firm, if you've left it as the default, you're going to have to use Alt instead of super. So I'm just doing that because it's less confusing for me, but probably more confusing for you now that I think about it. It doesn't matter. Anyway, so this is, as we can see, if we open up Neofetch here, it says, this is the DK window manager. So out of the box, this is the layout that you're going to get. Now, one of the things you'll notice is that this is not a master stack layout. And it's actually a really weird layout because most tiling window managers vary between just a couple of different tiling layouts. So you have the master stack layout where the master's on this side and then you have your clients just kind of piling up along the side on the right hand side or something like BSPWM where you have the Fibonacci layout or whatever it is, reverse Fibonacci, whatever they call it. Those are usually the two layouts that they kind of rely on. This one here, a little weird. It has the grid along the side and it'll just keep going like so. And it allows you to have more windows on the or more clients on the screen, which is cool. I don't know why you'd need this many windows, but let's just say you do. It does allow you to do that. So let's see. By default, I believe SupershiftQ closes DK, it quits DK. Let's go ahead and open up a terminal here. Go into cd.config, DK, vim into the SXHKDRC file, SXHKDRC file, and then we can see what the appropriate key bindings are. So SupershiftR reloads DK, SuperQ quits a file. So that's actually what I would have it do anyways. So one of the nice things about this is they've done a really good job of commenting everything. So we'll look at the configuration file here in just a second, but these are the standard key bindings and they've done a good job of telling you what each key binding does. It just doesn't put the key binding in and just assume that you know what it is. And that's really nice. You know, it's not something that you should take a grip for granted because some tiling window managers that aren't so well-developed don't do a good job of doing this commenting stuff. And this idea goes through the entire window manager. You have these comments through pretty much the entire thing, including the configuration file, which we'll take a look at right now. Let's go ahead and take a look at that now. So we'll vim into the DKRC file, and this is what the DKRC file looks like. This is where you do all of your configuration for the window manager. And it also is where you would want to add your AutoStart stuff. So if you wanted to use Polybar or something like that, which I've actually done in another VM, and I'll show you that here in a minute, you can launch all that stuff right from here because it's just a shell script. So one of the things I did find is if you want to do any of your AutoStart stuff, you want to do it after SXHKD. I don't know why, but I've tried to do some AutoStart stuff before that and it just, you know, it didn't load the configuration file for some reason. Anyways, moving on into the configuration file. So one of the cool things about this is that you can have as many workspaces as you want. Now, if you've watched the channel for any amount of time, you'll know that I love workspaces. And the fact that this allows you to have as many workspaces as you want, that's amazing. It's so good. If you change that number to 20, 30, whatever, I don't know if there's actually an upper limit. I think I only went to 20 and it worked fine.  So that is something that you would have to do on your own in the SXHKD file. So just know that going in. But that it allows you to have as many workspaces as you want. It's amazing. So good. Anyways, this line right here that I'm on is important because what this line here does is it allows you to have control over how your window manager looks. So it tells you what layout you're going to be on. And I'll show you some of the layouts here in a minute. It allows you to tell how many masters it has, how many stacks it's going to have before it transitions. So we are at three in the stack. Once we press the button one more time, we'll see it goes over to another stack. So this part right here is how you change that. This allows you to change the gap. So if we change this to 20, okay, SuperShift R is the key binding to restarting. So I changed that to 20, now we have gaps. So that is cool, right? The M split and S split are numbers that tell you how the windows split when you open up new clients. So right now they're set to 50-50. If you change those to different percentages, then your master's split will be different when you spawn a new window. So another thing that's really cool about this is that you can set different layouts per different workspaces. So this one right here is for all workspaces that don't have a dedicated rule. This one right here is for workspace 10 specifically. Workspace 10, if we switch to workspace 10, we can see that this actually has a different layout. And that's the grid layout. Now if we switch back to one here, one of the things about it is that it will actually allow you to change the padding for your entire workspace or for the entire window manager if you want. So you can change it so it looks something crazy like that if you wanted to. I don't know, it's like having kind of gigantic gaps along the outside, but you could do that. Padding in a window manager is not something that is very common. So that's really kind of cool. The example there that they've used that shows you that you can do those things, you can also set workspace names here and you can do that for every workspace that you create. And you can assign where each workspace resides. So if you have multiple monitors, you can have that set so that workspace one through five appears on monitor one, workspace six through 10 or whatever appears on monitor two. Again, not something you should take for granted because that's not something you can do in every single window manager, at least not easily, right? A lot of them have ways of doing it, but they're kind of finicky. Now the more user-friendly ones have ways of doing it that are easy just kind of like this one is. You set the monitor names, you tell them where do you want the workspaces to be which is cool. Now as you can see, each of these entries here are well commented, which is like I said, that's something that is very important and it tells you exactly what that line does. Now the thing is is that everything here uses the DKCMD command. So if we go to another workspace here, open up a terminal and do man DKCMD, like so, you have a very well documented program here that will tell you basically everything you can do and how to do it with this command. So it shows you how to create rules. It shows you how to modify those rules for sizes of the windows, positions of the windows, things like that. It shows you explanations of what the different layouts are. So if you wanna know what the layouts are without changing them first, you can do that because you're gonna need to know what the names of the layouts are in order to change them in the configuration file. So editors know here without the video because well, it's easier just to do it this way. One of the things that I don't talk about in the video that I really should have was the power of the DKCMD command. I kind of allude to it there in the beginning and throughout the rest of the video but I wanted to take a moment just to talk about how DKCMD actually differs from some of the other similar programs you would get with BSPWM and Herp's Love WM and so on. One of the things you'll probably notice as I scroll through the DKRC file is that the DKCMD command allows you to put multiple arguments after it. So with the command that I'm talking about with the layouts and such, you can define the layout, you can define whether or not it has gaps, what those gaps are, whether or not it has padding, all that stuff in one single line if you want to without having to call DKCMD again. Now, I'm not sure if this is possible with the other programs that are similar to this but I know for BSPWM, BSPC just takes one command at a time. Now, I'm not sure if in the command line usage of BSPC you can give it multiple arguments or not. I'm assuming you probably can but it's not usually how it's done inside of the command line or inside of the configuration file. Usually it's just one line at a time, BSPC rule this or whatever and then you move on to the next one, BSPC rule, whatever with DKCMD, it allows you to put all those things on one line if you want to. Now, I know I3 allows you to combine things into one line with REGX and stuff like that. So if you wanna combine things like rules into one line, you can. I'm assuming that there are other examples of other window managers doing it like this. So it's probably not as unique as I expected to be but it's something that I wanted to point out that I didn't point out when I first recorded the video. So now moving back into the video with actual video. So if we actually search for layouts here, we'll see, I believe it's here. Yeah, these are the layouts that are available. So tile, R tile, mono, grid, spiral, dwindles, T stack and none. Those are the options you have for layouts. Now, one of the ones that you'll notice is Mish thing is master stack and they call this tile, which is the default one master stack. They call this master stack. That is not master stack because master stack doesn't have that extra stack along the side. It just has one master, one stack along the side. Why they call that master stack? I don't know. Maybe they're trying something new. I don't mind this. I think it's cool, but that's not what most people are going to expect when they see master stack listed as an option. So that's just something to keep in mind. If you're attached to the master stack layout, this does not actually have the traditional one. It does have other layouts. So I'll actually show you here now. Let's go ahead and go back up here and change tile to our tile. And I'll save this super shift R to restart and our tile looks like this. So the master is now on the right and the stack is on the left. That is our tile. So the next one is mono. So this one is probably something that you can probably guess what this looks like. So if we change this to mono, super shift R, now if we open up terminals, they're all what are on top of each other. So this is similar to monocle mode in Xmonad DWM. Pretty much every window manager has a monocle mode of some kind. This is what that looks like here on DK. So if we close these, I don't want to go too fast because I want to close the configuration file. So the next one is grid, which we've already seen, which looks like this. And the next one is spiral, which looks like this. So that's the Fibonacci one that you'd probably be experiencing on BSPWM. So we'll close those. And I believe dwindle is just going to be the opposite. So dwindle, like so, yeah, that's just the opposite. Interestingly, after that position, it comes up with a floating one, which is weird. Never seen that before. Usually they just keep going and going and going like the energized bunny. But that is the dwindle one. What's the other ones? T-stack. So T-stack is a vertical master stack, I believe. So if we change this to T-stack, like so, and then super shift R to restart and then open up, yeah, this is the vertical master stack layout. So it looks like this. If you're more used to using your windows like that, that's the layout you'd probably use. So those are the layouts. Now in terms of customization, there's not a lot here. It's similar to what you'd expect in terms of customization for like I3. Now, instead of having like title bars and stuff like that, which it doesn't have, you can change it so that the windows have borders. It has smart borders so that it'll only show the borders when you have more than two windows open. So if we open up another window here, you can see the, they now have borders. If I close the window, no borders. You can turn that off as well. You can have it so that the borders have different, so the windows on the outside have different borders, or you can change it so that all the borders are the same. That's pretty much all you get in terms of customization. The rest of the customization would come when you put in a bar of some kind, which I can actually show you what a bar would look like in DK right now. If I just switch into the other VM here, this is what Polybar looks like in DK. Now, it has smart gaps as well, so that if you want to have it so that gaps don't apply on work spaces where there's only one client, you can turn those on. And one of the things you'll notice here as we go through is that this is very full featured. Like this is a fairly new window manager as far as I'm aware. Like I'd never heard of it before a couple months ago. And the features that you'd expect of a full blown, well-developed window manager are all here. One of the things that's not here, at least as far as I can tell, is scratch pads.   Scratch pads are in fact here, so that blew me away a little bit. I'm not sure how they work, but oh, they just used the rule. You just create a rule and then, okay, and give it a class of scratch pad. That'd be easy enough. Okay, so it does have scratch pads. So it has scratch pads, it has the ability to set as many work spaces as you want. This window manager continues to surprise me with how full featured it actually is, which is really cool. And one of the things about it is that the man pages are just filled with information. So a lot of window managers that do come full featured oftentimes don't have the greatest documentation. So like BSPWM has all the features you ever want, but the documentation leaves something to be desired. And the only real documentation it does have is the man page. And that's kind of the same here, like all the documentation this has is just the man page, but the man pages are really well-developed and really well-worded. I haven't noticed a lot of technical speak, so it would be okay for pretty much anybody, which is good. It means that pretty much anybody can use this. Now, I will say that the documentation is bifurcated and that it has two different man pages. So if you want to know all the stuff about DK, you would look for the man DK thing or the man DK man page. And if you want the man page for DK CMD, that's a separate man page. BSPWM does the exact same thing. It has a man for BSPWM, it has a man for BSPC. Now, one cool thing that it does have built in is a log file. So if you make a mistake in the configuration file, it will save that error, whatever output DK gives in terms of an error into a log file, and then it will send that last line to a notification. So that means that if you've made a mistake, it'll pop up and say, hey, you made a mistake, it'll probably give you the line as well. So I never actually tried to make an error here, but it does have that ability in, which is cool because some of the more minimal window managers don't have that option. They just expect you to find out through the output of whatever terminal you're in, probably in search through the code or whatever. I know that's the way DWM does it. So in terms of functionality, this is by far one of the greatest window managers that I've tried that is fairly new. Now, in terms of comparing it to other window managers, I think it's really good. It's right up there in terms of features and functionality as any other fully featured tiling window manager, things like BSPWM, Herp Sloth, Awesome, all these window managers, this DK is right up there with them. And the question then becomes, how does it stand apart? And the answer to that is that it does a few things a little bit differently. It has a few different layouts than what you would normally see. It has some of the more common ones as well. It also differentiates itself in that it's very well documented. And I'm not just talking about the man pages, but every single line in the configuration file is well commented. So it tells you exactly what that line does. And then you can kind of see how you would go about configuring this on your own without having to worry about always going to the man page because not a lot of people like searching through man pages unless you're like really attached to man pages. So it's kind of cool that you can get right into the configuration file, know what every single line does. And because the configuration file is a shell script, I don't know why that was so hard to say, it means that you can do pretty much anything you want in this shell script inside the configuration file. So if you wanna use some if statements, if you wanted to put in all your auto start file stuff in there, you can do that. And while that's not necessarily unique to DK, it's a step up in terms of configuring the window manager compared to some other window managers that you have to either actually edit the source code or is written in some kind of very unique user friendly language like I3, you know? So there's nothing here you have to learn as long as you can figure out what the DK CMD options are, you can do whatever you pretty much want to in the configuration file. So that is DK a very, very quick look at it. I think that I'm going to install this on hardware and use it for a little while because I'm really quite impressed with how good it is because it just seems to be very full featured and it's not something that I really expected out of it because like I said, it doesn't seem to have been around for all that long. And usually when that's the case, there are features missing or they're kind of half baked. So I wanna give this a little bit more of a try on hardware and see what I can make of it. So maybe I will make another video of DK in the future. If that's something that you wanna see, make sure you hit the subscribe button and leave a comment in the comment section below. You can follow me on Twitter at Linuxcast. You can follow me on Mastedon and all my other social media networks. You can find those links in the video description. You can support me on Patreon at patreon.com slash Linuxcast, just like all these fine people. I really truly do appreciate everybody who supports me on Patreon, YouTube. I can't really find all the words that I'd like to say about how much I do truly do appreciate everybody who supports me there. It's one of those things that just kind of blows my mind that people still wanna support me, whether it's through money or just even subscribing to the channel. So thanks everybody for supporting me. Thank you for watching. I'll see you next time.