 Cool. All right. So yeah, and this is going to be a combination of like lecture and like follow along and do stuff. So this is like designed for, I'm interested in becoming a hacker. How do I do that? And so I really want to start at the basics. This is something I've been actually thinking a lot about. And I think actually some of you, even experts could, I don't know if you'll actually learn something from this, but I hope you'll find things maybe to spur you along. So this was a part of this content and stuff I gave way back in like I think 2016, the last time I taught 340. So the way I kind of thought about this is you want to become an expert hacker, right? So how do you get there? And really it's about, it's not just learning a lot of knowledge. There is a lot of things to learn in cybersecurity, in networking, in, in exploiting vulnerabilities, identifying vulnerabilities on, can you all see that? I can't see the chat. Oh, it was not. Okay, cool. I was not. So you could not see the, you can see this slide, right? Yeah, I want you to see your own stream. Okay. Share your screen, screens, entire screen, right? How do people use this shit? Okay. Can you see the slides? Okay, what about now? Full slides, full screen? All right, sweet. Thank you very much. I'll also hopefully quickly open up my laptop and open up Discord so I can see the chat if you have any questions there. Nope, of course, I have to log in on my stupid thing. All right, cool. Okay. So, oh, well, you didn't miss much. Back to the basics. So this is literally like starting at square one, how do we get started, right? Because I think Zion, maybe you can confirm this, but you started out with like coming to the hacking, like the Pone Devils meetings with like nothing, right? With no background. And that's good. It's a good thing. So really, the first step to becoming a hacker is learning how to learn and just constantly learning about things and being, honestly, being curious about how systems work, why they work, this kind of thing. So, you know, it may seem crazy, but that I'm telling you this, it may seem, I don't know, trivial or obvious, but for anybody that's not, seriously, Google for errors, mistakes, whatever, like Google is your friend throughout your entire CS career, throughout your cybersecurity career, everything. I literally do this constantly of Googling for things. So don't be embarrassed. The other super important things, and that's what I'm going to try to hammer home with some of these lectures is, like, I cannot stress the importance to you of understanding and reading documentation, right? Because fundamentally, at the end of the day, what is hacking about? It's about understanding a system at such a deep fundamental level, even better maybe than the people that developed it, and so that you can make it do something it's not supposed to do. But to make it do something it's not supposed to do, you need to know what it actually does. And so this kind of like documentation theme applies to not just the systems you're analyzing, but the tools that you're learning and using. I was, you know, I think the biggest mistake I made when I was a young, like, computer scientist is I would just kind of, like, when coding on a homework assignment or whatever, I just kind of code stuff, maybe Google for Google find, well, we didn't have Stack Overflow then, but whatever, find some code snippet, throw it in and be like, hey, this works and just move on without actually taking the time to understand why does it work? What are these functions that I'm using? What are the documentation of these functions? What's actually going on here? And I think that that's actually what I do now. So now when I look up code or look up things, I'm constantly actually go read the documentation about it before I actually use the code just so I can understand like the semantics of what's going on and what I'm supposed to be doing. Yeah, the other thing, like reading stuff, like you would be surprised at how much of these type of things is searching and reading. Like, oftentimes you're, you could be, you know, reading through CTF write ups, literally anything. So this is like, I don't know, step zero. Like, if you don't have these skills, it's okay, but start actively developing them. And I think that's the other thing I really want to drive home. So as a, as a general, so I don't know if you can tell from this, you don't have to out yourself in chat, but if you're a hunt and peck type, right? Like how do you like the way I'm kind of thinking about is how do, how do people use computers, right? Do you want to be this person? Or do you want to be this cool hacker in a hoodie? Oh, if somebody wants to Photoshop Yon Space on here, I'll probably use that. So, and what I really want to want you to all be thinking about is we don't just want to use a computer. We want to actually be effective and efficient. So what's the difference between those two things? Somebody unmute and say something. Okay, anybody not a troll? Yeah, not a troll answer. What's the difference between effectiveness and efficiency? Knowledge? Yeah, so let's take it step by step. What does a efficient mean? Yeah, getting efficient is being efficient, is being very fast at a specific task. Being effective is getting the right things done. That's how I think about it. So the way in this context, right, you can be very efficient at doing the wrong thing. So for instance, getting stuck in some crazy CTF challenge. I actually have an example from when I used to play in the early days when I first started playing in Defcon CTF. I would, I wouldn't say even I was efficient at reversing, but I would get, I'd be reversing some binary and I'd be in there for like four or five hours until I finally realized, oh shit, the code I'm reversing is the stupid back door that the organizers put in to test the flag. So it's like public key, private key crypto. There's no vulnerabilities here. So I basically like, even if I was efficient, I was not effectively using my time because I was doing the wrong thing. So we want to think about both of those things. And this is why I'm saying back to basics, right, is even for experts, we can think about, okay, am I actually being efficient in what I'm doing? And am I being effective at doing the right things? So the first thing I will talk about is touch typing. So somebody mentioned that. So I'll be the first to admit when I was in my undergrad, I thought I was a pretty good typer. I thought, I grew up basically on computers and on the internet. I was able to type fairly quickly, but I didn't actually use like a good, I didn't use the home row. I kind of just let my fingers wander over the keyboard and they kind of knew where to go. I had this really weird style. And it actually wasn't until I went to Microsoft as a full-time software developer that I actually really started investing time in learning to touch type. And honestly, like the effort that I put in, God, that was, yeah, a long time ago, over a decade ago, it pays insane dividends now. So I highly, highly recommend, like, you know, you're just starting out. Even if you think you're good, I would suggest that you could probably get better. So the way I think about it is you want the, and this is why you don't want to be like a hunt and peck kind of a typist because you want the least amount of time between when your brain has an idea and you can communicate it to the computer. I'm, I don't know that I'd say, I see the chat. I don't know if I'd say home row good, home row bad, but I will say, okay, so I don't have my camera on. I guess Discord can't, why the hell can't Discord share video over 25 people? But if I'd show you my keyboard, I'd show you that I have one of these Microsoft split ergonomic keyboards. And the reason is when you, I know you're all probably pretty young to be thinking about this, when you start doing this a lot, and you want to spend a lot of time doing this, like little things like having an ergonomic keyboard, which is maybe split, which forces you to really do home row and those kinds of things. Those, you know, it literally, I used to have like pain in my wrists from repeated stress and those kinds of things. And so it was switching to different keyboards and things that actually like makes that go away and is really good. So question in the chat, how fast should we go? I think it's up to you. Like, I think what I'm trying to get you to start thinking about is what are the things you do day to day and interacting with your computer? And how can you get better at that, which will make you a better hacker? So I think, you know, in terms of fast, I would think of how long does it take you to actually like, so you have some code or something in your mind? How long does it take you to type that out? And can you get faster at that? Right? Oh, I don't know if this is actually a screenshot from me or not. This was from like six years ago. So I have no idea where this screenshot is from. So that's super funny. It could be mine. I don't know. I guess that doesn't make sense. I'm decently fast, but I literally don't know where I am. So but yeah, check yourself and check yourself as you're doing it. Right? I think also I used to make a lot more mistakes and mistypes words and errors when I didn't use home row. And now I'm much better about that. So and especially the reason why I'm telling you this and harping on this is because when starting now early in your career, if you can invest that time and get better at these things, you'll be better than your peers. And it only gets better. So yes, the meeting is being recorded. I'll post the link later, assuming it goes. So okay. The second thing I want to mention, it actually goes to it goes to the first point is this is a saying that my high school wrestling coach would say it's the 5123456 the six P's proper preparation prevents piss poor performance. And so this is kind of what I want you to start thinking about is, you know, like ask yourself and be honest with yourself, like how, you know, how much into CTS into security do you want to be? And how far do you want to go? And what are you willing to put in? If you think about the thing that's crazy for me to think about is like a high school sports team puts in like three hours a day into practice, right? And and this is what I was talking about with with the with the back to the basics is you practice these basic things like typing like this other thing, right? And you practice them so that it doesn't become a hindrance. This is actually this philosophy is what led to essentially Pwn College, right? Pwn College is basically the the the idea of, hey, what if what if instead of doing one buffer overflow, you had to do 20 buffer overflows, right? Which is this idea of practice. Cool. I see I just nerd sniped everyone by testing their typing skills. So that's great. Oh, Jan, is he in this thing? Oh, yes, that's a that's a great point, Arvind. This is actually one thing that one of the things that actually motivated me to do this was when I was at Microsoft as a software developer, I would take over occasionally the triage where you have to go through bug reports and stuff and sometimes write up things and like being in front of a group of your peers and having to type things really makes you realize, oh, shit, I wish I typed better and I could do this faster without without like looking down at the keyboard every once in a while to make sure I was still on track. And so yeah, that definitely helped. So thanks. That's a good one, Arvind. So, you know, I really want to encourage people like, you know, it's it's okay to and it's good to take time out of your day and really practice things, right? Like practice different types of things. I think that's really going to help. Cool. And so the next thing I want to talk about is your editor. So this is going to be the first thing we'll briefly mention maybe in the future we'll go into much more details about like different types of editors. But I want you to think about and start applying the efficient and the effective metrics to your editor that you're using. And I first want to say before Connor or anybody else tries to throw us off by turning this into a massive flame war. I'm not trying to dictate or prophylatize one editor over the other. I know professors who like and PhD students who've written like way more papers than I have and use basically like word like no pad. I know other like, I know hackers that basically use like the Linux edit, which is like the Linux version of no pad and write, you know, 500 K Chrome sandbox exploits. So so I think it's less about what it is and more more of thinking about it. I want you to think about it in terms and this is what you can kind of analyze your whole workflow and whole things like this, right? This is what we started with typing because typing is literally your interface to the computer. And your editor is your main instrument that you use to craft programs to to develop exploits, you know, all kinds of things. And so like if you're a chef, would you use a shitty fucking knife that just comes is made of plastic? Like no. And like if you talk to chefs, they have different types of knives and they, you know, they have their favorite knife, they take care of it, they put in after shifts, like they sharpen it after shifts. Mechanic, if you're a mechanic and you're using a shitty, you would never use a shitty plastic wrench, right? You would use a good high quality wrench. And if you're a baker, you're going to use a good oven and not a shitty oven, right? And so apply that mindset and take, you know, a little bit of pride, right? And the key is they, they know that in and out, ins and outs of their tool, right? And so time invested in learning your editor is 100,000% time well spent. You know, I think, and if you want, I can give you some, like some personal things of like, you know, I end up in situations sometimes where it's like, okay, I have a CSV, a comma separated value file, and I need to turn that into a JSON file that I can load into some program. I know Emacs well enough, and I know how to use macros so that I can do this very, very quickly. I'm trying to think of examples, I definitely did this during DEF CON, but all of my memory of that time has literally faded into the ether. So I think actually this, I do want to have dedicated sections on editors, and that would be kind of fun for people to try out different things. I can walk us through some Emacs things if somebody wants to volunteer for a VIM thing, that would be cool. I actually personally use Emacs for almost everything except when I'm on a remote machine and editing configurations, then I use VIM because it forces me to pay more attention to what I'm editing. So anyways, at this point, have it be on your list, like try different editors, look into it, those types of things. Okay, the next thing I want you to burn into your brain is that the mouse is evil. And so the, what this comes from, and this is again about being efficient. So human computer interaction, HCI, has models, they base these models on human studies. So they studied how humans do different kinds of things and how fast different user interactions are. So for instance, how fast does it take a person to press a key? How, and for a fast typist, it can be 0.08 seconds per character for a fast typist to type keys. An average typist will be 0.28 and 1.2 seconds per character for a slow typist. Look at these numbers and think about where you want to be, right? I'm sure you can actually calculate this for your words per minute or whatever, right? But this is the value, you know, you want to shoot for that faster time because you want to actually be fast in what you're doing and interacting with the computer. Now, the time it takes to move your hands from your keyboard to your mouse, right? Everyone knows what a mouse is. Yes, I hope so. This applies equally to trackpads. I don't have the updated numbers for trackpad. I'm sure it's very, very similar. So moving your hands from your keyboard to the mouse or back from the mouse to the keyboard is about a 0.4 seconds. So and more importantly, now when your hand is on the mouse to point the mouse at whatever you're trying to look at is like basically a second to like point the mouse and then you have to click it. Clicking is something and then you may have to click something else. You may have to read something, right? So let's say you're using the mouse, right? You want to first move from the keyboard, your hand to the keyboard to the mouse, 0.4 seconds, point the mouse 1.1, press the left mouse button, point the mouse again, press the last mouse button, move from mouse to keyboard. And whatever in this scenario, let's say it's like 2.82 seconds. In 2.82 seconds, you could type 35 characters, 10 characters, or two characters. So what, and this is like backed by research and all this shit. And this is, this should be, if you really want to efficiently and effectively use your computer, you should be trying to absolutely maximize, minimize the amount of time you use your mouse and maximize the amount of time you spend on the keyboard. Because that is going to absolutely without a doubt make you faster. This is why, so what kind of what kind of keyboard shortcuts does Discord have? Anybody know? Yeah, so man, can I case like some kind of like omnibus type of thing, right? That does stuff. Yeah, so up arrow to edit messages. There's probably other ones, I actually don't know all the ones on there. The most software will evolve to have keyboard shortcuts. And the reason is, for like power users, right, people that want to interact with the software effectively and efficiently, keyboard shortcuts are without it out the best way, because you do not have to use the mouse because the mouse is evil, right? So the kind of what I'm going over here is, think about as you're using your system, you know, take stock of how you're using the system and how you're interacting with computer. How often do you go to the mouse? Do you try to stay on the keyboard as much as possible? Are you spending a lot of time going back and forth? Because honestly, you'll be much more effective if you and efficient if you stick to the keyboard as much as possible. Cool. Any questions so far? Okay. Yeah, yeah, whatever. I don't know why the editors, oh, these editors are all about using keyboards. So you know, you basically, this is why these editors are so great is because you can do so, so, so much in terms of editing text using just these keyboards and nothing else. Sorry, just these editors and never touching the mouse. Whenever you max, I literally never use the mouse. I think if there's any times, I don't, I honestly don't think so. But again, whatever as long as you're efficient. Okay, cool. Now on our back to basics, we're going to start at the command line. So again, this is following similar philosophies, right? Why do we want to stay on the command line? Because it's incredibly efficient because we're not going to use the mouse. It's also incredibly effective as we'll get there eventually. I really want to take this kind of slow and walk people through this. We're going to go through this stuff together. What, what you'll find with the command line is, and so I guess what's the, what's the other way? So if you're not interacting with your computer on the command line, how are you interacting with it? Yeah, what does that stand for? Perfect. Yeah. So graphical user interface, right, which is actually what you're seeing now, right? I can, I have a mouse cursor, I can point, look at things. And so what, hopefully I believe you will find, so at the start, I think you should just buy in and kind of start exploring this. And I will definitely say, so I don't think I have it there, but the, the upside of the command line is these two things. It's incredibly efficient and insanely effective. You will find that we can combine simple tools that we understand together to accomplish a much larger tasks. It also gives us the ability to script things and all kinds of cool stuff that we want to do. Jan basically made, before he became a PhD student, made an entire career out of like just basically using essentially the command line very, very well. But the downside is the learning curve. So this is why actually when we moved from, because it used to be back in the day, the only way you were able to interact with the computer is using the command line. But, and so the introduction, the graphical user interface meant that more people could use computers, but you're not most people, right? You're not, you are an expert or you're trying to become an expert power user of your machine. And so you want to interact with it in the most efficient and effective way possible. And so, cool. So now next step, get on your command line. So everyone using this, everyone here is probably running one of these three operating systems, Mac, Windows or Linux. So first, get to your command line. So I'm on a Mac. I have Iterm running. I have it running here. So it's like nice and you can see it. For right now, eventually, you should all be moving to something Linuxy or Pozixy or whatever, like a Mac or Linux, and you can run Linux in a VM. If you're on Windows, you can use a Linux VM, which is probably the best. Otherwise, you can use WSL or download Seguin. And if you're on Linux already, you probably already know how to open a terminal. And if you don't, so yeah, I will be here. So if you need any help or questions, ask in the chat. And this is the flag for, what was it, the date challenge of today's meeting? 01. Perfect. So I'll leave that up. You can see how fast you can type in this hexadecimal string without making mistakes. Practice your typing skills. Well, I'm obviously more secure than Pone College. I have to keep finding bugs in it and then tell Connor about them. Potential bugs. Yeah, what? They're just all happy features. Yeah, and I think the other interesting point that Jan makes, right, and kind of that, like, I want you to get into some command line that is essentially Pozix compliant, but we don't have to go into those details right now. But yeah, similarly to Jan, when I was working on Microsoft, I actually figured out how to use the windows, like cmd.exe. You can actually be pretty effective on there. And then Windows itself has an insane, basically, other big like command line branch called the PowerShell. And that has, it's actually like, if you know anything about programming, it's actually an object-oriented command line interface, which is insane. So, all right, if you're having trouble, either send me a note in chat or something, or say something, you know, we're all here. We're not yet in person, but we're here to help. Yeah, good question. Zion, can you drop that link in the chat about installing a VM? I wouldn't do it now. It takes a while to install the VM. So, for right now, you can use WSL or Seguin. And that'll get you started so we can go through some of this stuff together. Yes, I agree with Connor. Ubuntu 20.04 is a great one to get started with. And Kali Linux is, oh, go ahead, Jan. Yeah, Kali is a great tool for when you need it. But honestly, you don't need it until you know you need it. Arch-engined too, huh? That's, you know, tell people to use stuff. Yeah. Or I have actual religions coming up soon so we can really get to fighting. It depends on your point of view. That would actually be really, that would be a funny competition. Like, here's three or four OSs. Which ones are the, like, and one of them is fake? Yeah. I mean, honestly, so Ubuntu is just used by so many people and 20.04 is the last, and Ubuntu, you always want to stay with the long-term support, the LTS versions. 20.04 is the latest LTS. So, honestly, just use that until you know more of what you're doing and then you can switch to anything. All right. I'm going to leave the flag on screen. I'm going to, oh, chill there. We're going to go together. We'll go forward together. They control people in chat. Anybody still set up their term or their terminal? You can use, you can use the phone call to terminal. That's totally, there's a maximum number of viewers in Discord. What the heck? You guys made me use this instead of some real shit, like Zoom? Oh, God. Does it just need, do we just need to throw money at it? What's going on? Yeah, yeah, yeah. But that's called, that's called money. Well, with two, we can do that, right? Wait, can you Google around the perks that doesn't even say something that server banner? I don't see like an increase in, I mean, maybe we'll just use Twitch next time. I don't really care, but I don't really know how to use it. So, should I try to figure out? No, because I need to set up OBS and all that BS. So, we could switch to Zoom real quick, if you'll want. But, all right, we'll just roll with what we have now and tell people that we'll post the link to the recording. And so they can follow along later, unfortunately. Tell them we, we apologize for, apologize for being popular, you know, I really like trolling Connor though, but yeah, he could be first to go. Right. I think we, we had what, one hand on you, and I think they said they were done. Cool. All right, let's rock and roll. So, now we're you're on that command line, you probably hopefully have something that looks like this, which you just saw on my screen. Okay, one little piece of terminology to just get out of the way. I kind of roughly interchange command lines and terminals, they're technically not the way that you can actually think about this and the history behind this is that early computing systems, they had no local compute, so you'd go to a, what looked like a computer screen, but it actually was just a dumb terminal that had to connect to some central system like a mainframe or whatever. And this is why so the terminal has all this insane stuff in it of how to make the terminal beep so that your local machine could beep. I don't know, all kinds of wait, we could just, you just add more people. Oh my God, you guys, this is hilarious. Amazing. All right, well, that's cool. What if we have more than a hundred people? What's, yeah, I'm trying to think this is maybe it's pretty close to my cap of my anyways. Cool. Okay, so terminals anyways, this is just like a little thing. So like, this is why like on, let's say Mac OS, right, I open up an app called iterm or terminal, and that is basically essentially what it's doing is emulating these old school terminals because there's all these protocols that it has to support to make everything look nice and pretty. But that's not the actual command line interface itself. So anyways, if you've ever wondered about that, and you can go super deep like this, lots of crazy protocols, I'm not kidding, there's a lot of insane stuff in here of how to make things colored and all kinds of stuff. Okay, one thing really quickly, and if Connor says they're terrifying, they're actually terrifying. So if you look at my screen, you can see I use, I don't even remember what this stupid thing is. I think it's power line something something power line 10k or whatever for my, my interface here. If anybody tells you that that's important, or you're not a real hacker, if you're not using some crazy whatever terminal, they're an idiot and you should never listen to them. So bike shedding should be a term that hopefully that you get familiar with. This is a kind of old hacker term. It's basically when you do have technical or other kinds of disputes over minor marginal issues, while more serious issues are not being discussed. So the idea here is you're arguing over what color to paint the bicycle shed while the house isn't even finished yet, right? Yeah, so Vim Emacs is definitely falls into here. And you can just what I want you to do is just be aware of this as you're going through things. It can be super fun to like set up a new terminal theme or experiment with ZSH and set up a new theme that does all these crazy stuff. But, you know, at the end of the day, what matters is actually getting shit done, not how pretty it looks, right? So for a long time, I just, I mean, about once every two years, I'll go in and maybe look at terminals and do things or like, I had one thing where the last thing that bugged me was I had as part of my like terminal status, the whatever status of the git repository. And on slow on large repositories, that would be slow. And so going into a folder would be super slow. And anyways, long story short, it was pissing me off. So that's why I found this thing. But I found it, set it up, and then I don't mess with it and don't change it. So, you know, I just want to caution you, because it can be very easy to think you're making progress and doing things when you're just rotating through your own setup. But at the end of the day, it's kind of like the emacs thing, right? It's like, you're going to use this terminal in this command line a ton. So, you know, I guess if you want it to look pretty, make it look pretty and just keep track and like, you know, in your head, like, am I spending more time on this than I should be them on, you know, if your goal is becoming a CTF, or like, am I spending more time like, altering my terminal than actually capturing flags? Um, so just beware of this. But okay, so command line is about executing programs to do stuff. This is at the very high level. So we, I want you to all try out, type out and try these commands, who am I ID and LS. So I'm going to take it extremely simple and literal. You're going to go away. You'll go away. And I want you to literally type in WHO MI and hit enter. And it should output something ID, literally enter, boom, should show you a bunch of stuff LS enter, should show you a bunch of stuff, not this stuff. Everyone doing that falling along. Yeah. So each of these examples. Nice. You are already a hacker. Oh, but you're a hacker on Pone College, which is basically not a real hacker. Just kidding. So, and, and this is kind of really at the fundamental level. This is, and so actually, if you want to think about this from a human interaction perspective, so why the command line is such a, has such a higher bar to entry than the GUI, did you have to actually know these commands? Who am I LS ID? Whereas with my, if I wanted to figure out, how do I change the color of my thing? Well, I have actually a nice help thing. I can use my evil mouse, find the preferences here. Like I can actually just keep searching and going through here, right? And understand all the options here. Whereas on the command line, I just have to type in commands and commands happen. So, okay, so that's how we can do stuff. So we type in things and things happen. But if we just wanted to ask who am I over and over and over again, that's not actually that interesting or that useful or that fun, right? So we'll get into this further in this meeting. So for now, we want to actually pass in arguments to our functions, right? We can think about this as like, you know, the program is the set of instructions or whatever, and the arguments help tell it what it actually wants to do. So for instance, here's some examples. So again, and this is I'm a huge fan and I honestly believe in in following along and like during these things actually typing in each of these commands. So like who am I space dash dash help, we can see that it actually outputs something different than we just do who am I right. So what this tells us is from the outside, this actually tells us something about this program, right? It's actually using the arguments that we give to it and doing something different in that program based on that output. We can do remember we did ID before we do ID, lowercase G, LS dash L, which is different from just LS, which is different from LS dash LA slash everybody doing this at home. Your favorite terminal, some useful things that will come up. And this is kind of a, there's actually a lot of commands that are very useful. These are ones and and it's a little bit. It's a little bit. This is again, where you get into the like, is it a command? Is it the terminal blah, blah, blah, blah, blah, blah, we'll get into those details later. For right now, we can do things like, so five bunch of output here. And I just want, I type in clear and hit enter. And that is, I believe the terminal that will then clear my window and return everything to like a nice state. So this kind of when you're trying to think about what to do clear can be helpful. The other thing that can be super helpful is reset. So reset actually tells your terminal, okay, literally, because we talked about there's that crazy protocol to make colors and do all kinds of things. You can get your terminal into an insane state. So what I like to do, you can kind of see this, I was trying to find a good program where this would happen regularly. So if you cat something that's not actually text, and we'll get into eventually later what all that actually is. So does your terminal beep when you do something like cat slash bin slash LS, I think mine is beeping. But I think I turned off the, because the bell is here. So I think it is beeping, but it's actually not just just not beeping for me. Is it beep for anyone else? Yeah. Okay, cool. So that's because the program is outputting some certain bite sequence that your terminal interprets as a, Oh, the program is telling me to Bing, signing to Bing. It can also completely mess up your terminal where everything looks incredibly annoying. If you're in that situation, even if you can't see it, you can sometimes type in just reset and enter and it will just fix everything. So this is a nice thing to kind of handy thing to have in your pocket as you're doing things. Okay. Other ways to get unstuck, killing the current command. So type in cat and hit enter. Now we'll get later as to what's actually going on. But if we see this, it's just going forever, right? But I need a way to kill this program that is running. So I can hold control and hit see. And it basically kills this program. We're going to get into what this, what's actually going on. But this is killing this cat program. So no more cat. So now I can go back and I'm back and I can type in new commands. So I would try that, try cat, type in stuff, control C. Now the other super crazy thing is once you've done that, the other thing that happens for me sometimes when I'm, well, I like to jump around my terminal, we can get into the edit mode or whatever. But if you type in control S, your terminal will feel like it froze. So you should try that right now. Type in control S. You'll see that you cannot type in anything. The only thing that gets you out is control Q. It's a standard thing. Interesting. We'll find out how to do that then Connor. It's look for control Q because that's the thing that gets you out of it. Interesting. Maybe it may be, what was that? No, that's like save the output. Interesting. I tested it and it definitely worked. Yeah. Anyways, that is, it's something that has happened to me many times throughout. And just remembering like, Oh God, what's going on? And then try and control Q that usually will get you out of that situation. Oh, interesting. If it's just bash, that's crazy. Locally, I thought this was universal. Apparently it's not. So super interesting. Cool. Yeah, it's interesting. Control S is forward search. Okay, we'll get into more things later. These are just kind of, I don't know, the list of things that came to my mind of things that can help. Okay, the other thing, and this is something you should always be thinking about whenever we're learning something new is how can I learn more about this thing? And especially well written software will have you the ability to find out more information about a thing from inside that thing. So inside the terminal, your friend of friends, and literally again, this is what the one thing, if I could go back in time and give myself one piece of advice, it would be read more documentation and specifically learn to use the man command. So man is a command, it is short for manual, and it is your friend. I'm going to bold that it is definitely your friend. So you can get documentation on any command by just typing man command. So we can do Oh, see, I just froze it unfroze it bang, bingo, bingo. So I can do man. Who am I? And it says who am I print effective user ID synopsis who am I option print the username associated with the current effective user ID same as ID dash UN, it has two options dash dash help and dash dash version. And how am I no manual entry, you'll have to figure out how you are on your own. So what's the name of that challenge? Yeah, so now do that. So read through the man page for the ID command. How many options does it have? What does it actually do? And you'd be actually be shocked by like how many options some of these things have. So I want the I think it's the only flag is the only one I had time for. So what's the command for printing out the effective group ID of user Adam D. So read the man page and that that command by itself is the answer as is the flag for back to basics one. So get that flag. Zion, can you keep an eye on the number of flag caps and when it reaches a decent amount will move on. Thank you. Thank you. I guess I should verify that it's correct. But unless you did, has somebody got a flag? Okay, perfect. Oh yeah, 12. That's great. Boom, even I got that flag. Great. I guess what you really need is the who am I command to do some machine learning on what you're doing. And then it would tell you if you're, you know, a noob, okay, getting better, close to hacker, actually hacker. All right, cool. We're approaching 20 solves. That's great. We had 35 for the meeting flag. Wow, look at y'all. ID here, although you should get it really on your own system so you can make sure you can look at those things. Also, if you're using WSL or Seguin on Windows, I don't know 100% if this will work. I'm pretty sure it would. But if it did, let me know. Yeah, I, yes, I can probably put that in as another answer as well. But actually, I think I can do that, right? Let's see. Yeah, it's not like a trick question or anything. Oh, I can. Okay, cool. Okay, cool. Now you can do both ways. I don't know. When, when did WSL version two come out? Because I had a lot of problems with students when they use WSL in 365. It's just not the same. No, it's not that. It was even basic stuff that was crazy. That didn't work. I can't remember now, but that sounds familiar. Cool. All right, we hit 30 solves. I think that's pretty good. Got questions. Feel free to ask me later. For somebody that was asking, the meeting flag will be in the recording that I post, so I'll redact it from the slides, but don't tell anyone else, but it will be in the meeting, the meeting slides. Cool. Okay. So that was fun. So you learned something. I mean, I learned something. I didn't know how to print out the effective group ID of user Adam D, but we can look and by reading the manual, we can see that, okay, the way to use this program is we first have ID. We have some options. The brackets mean that this is optional to have options. And then finally, we have an optional user. And so we can see print user and group information for the specified user. So this makes makes us match user to user here to say, aha, we can print out specific information for that specific user, or when there's no user for the current user. That's why we were getting output for hacker and all that fun stuff. Okay, cool. There's other ways to that we can get help. So not everything will have a corresponding man page. I was trying to find a basic program that doesn't, but almost all basic things do, but it definitely happens every so often that you won't actually have a manual for the thing that you're trying to use. And so one thing you can do is by convention, most commands will allow, will also have some output help functionality available, either command dash H or command dash dash help. So we saw this in the previous slide when we were looking at, I think it was ID slash help, something like that. So we can look at the, this actually, the interesting thing here is this is actually the same output as the man page, but I think we did who am I help. So this outputs everything there. Cool. So just a, another thing to keep in mind is this can be another way to, you know, learn and understand what the system wants is really, really key here. So, okay. So now we're going to start peeking behind the curtain. And kind of what I want to do throughout these meetings is we'll go over concepts and I'll try to introduce them when they're relevant. But not, I won't go, you know, we won't go into crazy depth in every single thing, but we'll do that kind of on demand as needed as we go along. So question is who's behind the curtain. So this is, you know, we said, well, there's a terminal. So technically, like what I'm using here, I term two is my terminal. It's what's like executing locally. I will ignore the fact that I'll guess I'll just do it. I guess that's fine. So I'm here just like before I can do all those fun things. Who am I? That's fun. These of course have different things because they're on the Mac and BSD stuff. So I'm going to go back to my Linux machine. Okay, cool. All right. So the question is what's actually going on under the scene under the hood, right? What are we actually when we literally type in LS and then hit enter or type in who am I and hit enter? What is actually going on here? And so what it actually comes down to, and this is what people have been alluding to in the chat, but if you don't understand it yet, that's totally fine. So what I want you to introduce you to is the shell. So the shell is essentially a process that is what I'm interacting with. So this is kind of what for me was kind of like the like brain exploding moment of like, Oh, what I'm actually doing here is not doing anything special. I'm actually talking to a program on the system. So when I type in who am I, the bytes that contain who am I get sent to another program, which then figures out what I want to do. So it's basically a process that receives your input, parses it to identify the program and arguments. So what program you want to execute, it passes it arguments, it then finds the program on the file system and asks the operating system to execute the program with the given argument. So question you should find out is what's your shell. So first do who am I to figure out what user you are. So here I am user Adam D. And then it's actually stored in a file on your system called slash etc slash password slash p a s s w d. So we can do is less is a program to output the contents of files in a nice way. We can do less slash etc slash p a s s w d hit enter. And I can see this crazy file. Yours will probably be different hopefully be different otherwise you're somehow in my same system. But if you just keep I'm using the arrow keys up and down here not doing anything fancy. I can see aha, there's my username. Adam D will actually go into through the course of these, you know, these lectures and meetings will go through exactly what all this shit means. So you will understand what this what this means. But for now we can see that this is the Adam D user. And the thing on the far right is what is my shell. So this is how when I'm logging in, I'm actually running slash bin slash sh. So now I can. And this could be either when you launch a terminal locally, able automatically execute the shell, or when I'm accessing the system remotely, which we'll get to later. But here I'm SSHing into this machine thing. And then so this is my ZSH with all my fancy whatever power line 10 k blah, blah, blah thing. And so when I'm typing in commands here, I'm typing it into ZSH, but I can tell ZSH to actually ask you a different shell, which is bash. And that's why I can start executing bash. And now I'm in my in bash. So part of what I'm trying to get at here is that there's no magic here. The shell is just another program. Okay. So what's really going on? So, you know, we've been looking at this, right? It's kind of weird. It's like our main way of interacting with the system. But so what's going on? So what I want you to think about is, you know, from a security perspective, should a program like cat have direct access to the file system or the hard drive or your SSD? What would happen if cat you run some program? Let's call it cat. Should it be able to just directly access your hard drive and your SSD and stuff? What do you think? Why not? No, why not? Yeah, bag security practice, but why? What's the worst thing that could happen? Yeah. So if the program is bad or incorrect, what if the program went haywire and it zeroed out your entire hard drive? Right? That would be pretty bad. It doesn't have anything to do with security. It could just be a mistake. Do any of you make mistakes while coding programs? Yeah, now we know exactly who the liars are in chat and in voice, apparently. I've seen you, what are you talking about, man? I've seen your code, Zion. I wasn't even referring to that, but that's one of them. It's up there at the top. I didn't know for sure who the GIP blame would point to. But anyways, the point is, we can think about security. So should a program like cat be able to think about people who are talking about dual booting? Right? So you have one hard drive that has a Windows and Linux on it. So should cat be able to just access all the files on Windows because it has raw access to the hard drive? No, that would be insane. Think about and in terms of security, if you have a system with multiple users on it, that's another thing. So think about your phone college server. If the phone college server had each of the users access, they would be able to access anybody's files on that system. They could literally do anything. Other questions you can ask yourself is, huh, should a program like cat be able to mess with other programs? Should cat be able to modify the shell that's running to do different things? Should it just be able to change things willy-nilly? And the answer is, of course, no. Should a program like cat be able to crash the entire machine? Because it's actually kind of insane when you think about it. You understand computers, you understand there's some CPU that's executing your code. And so your program that you write like cat has to execute on that CPU, but it has to do it securely in a way that doesn't allow it to crash the entire CPU, crash the entire system, overwrite file system. So, and if you've never thought about it before, this is actually the fundamental job of an operating system. So this is why what's really cool and what I like about the way we're going to go over these things is we're going to introduce here a concept that you won't fully learn about until operating systems, but you'll that you'll be exposed to now and you'll understand it is the concept of a process. So fundamentally, right, we have on our system, we run applications, which run as a process, but the process cannot directly talk to, let's say the CPU or directly access memory, or directly access devices. In fact, it can do actually fundamentally, you think about it, I think this is true, right? A process can do very little on its own. It actually has to ask the operating system. And here, we're essentially going to use operating system and kernel interchangeably the details, distinctions there don't really matter right now. But essentially, you can think of it like an application, I guess you could, well, like an application can has to ask the kernel to do everything on its behalf. So if it wants to read and write files, it asked the operating system, hey, please open this file for me. And this was operating system to say no, screw off, this isn't your file, it belongs to Zion or Connor. You don't have permissions for this file, go away. Even though that file exists on the hard drive on that physical hard drive, the bytes of that file are there, your program cannot read it because the operating system does not allow it. Similar things with talking on the network, right? Being able to connect to other websites and do things remotely, the kernel is responsible for handling that on behalf of the applications. And that has a lot of nice, that has actually security purposes, but also very nice things so that every process doesn't have to reimplement the entire networking stack. Even things like getting more memory, hey, I need more memory for my program. The kernel can say no, like tough, tough, like there's no more memory left. Or it can say sure, the kernel has so many crazy things, like this is why you're able to run more, you can use up more memory on your computer than you actually have physical gigabytes of memory. So you can run Chrome on even like one gig of memory or something because of this really cool, essentially, you can think of it in computing terms like an abstraction, but the fact that the applications never actually directly talk to the memory means that the operating system can do insanely cool stuff to make it seem like they have exclusive access to a bunch of memory, but really they don't. It's all super cool. Also, they have to ask the operating system to execute another process, and this happens basically on their behalf. So this is what, as we'll get to, the shell is doing. Really under the hood, the shell is asking the operating system, please, sir, execute this process for me. And then if the operating system thinks that it should, it will do that, right? It'll perform security checks, all kinds of checks that we'll get into, because these are actually super important concepts of like the pinnacles of modern security here. Okay, so some terminology here, when I talk about a process, this is roughly what I talk about. So we also think about, in that diagram in the upper right, we have like applications and the kernel. You can also think about this as user space is applications, and the kernel is kernel space. So these are different ways of thinking about these things. These terms are kind of all have different origins. They're essentially used interchangeably. So what we're going to be talking about is, so a process or some user space program, user space process, these are all the same things, right? So the other thing is, how does that, so looking at that arrow, the arrow between applications and kernel, Connor or Zion or somebody, how many on Linux, how many different interaction points are there, like how many different communication mechanisms are there between applications and the kernel? Is it in the 300s? So that's a good point. Okay, but the important thing is that there's, well we refer to these as system calls. So you can think about it as a user space program calls into the system, the operating system, to ask the operating system to please do something for it, to do one of these things, open a file, read a file, write to a file. And it's actually includes input and output, which is crazy. It's like even every character that is printed actually has to go from the application to the kernel. And that's actually output to you. So it's, this is kind of a critical concept to understand. And this really gets the heart of what's really going on here, right? So what does this mean for us? The shell is not special. It's just a process. And it's important concept to remember that the shell is your own process. And in fact, you can write your own shell. And I think we may, because I think we'll probably do some programming in these meetings because you can't really be a hacker if you're not a good programmer. So I think kind of some cool programming exercises that tie these things in of like writing our own shell would be a super cool thing to do. So on the one hand, I want you to understand, there's no magic here. The shell is just a process that you could write. If you really want to go crazy, you could write your own shell that just does whatever it wants to do. You could have a shell that, well, we'll get to in a second, but, you know, we said that arguments to arguments to commands are separated by spaces. But that's just because that's how we do it in the shell. You could have a shell where arguments are separated by underscores or two spaces or tabs or whatever kind of insanity you want to create, you literally can do anything because you can write a program that does that because the shell is just a process. But understanding that it's not just like every process, right? We actually want to fully understand the shell because we're essentially quote, quote directly talking to it, right? We are interacting directly with the shell. It's the things that is executing programs on our behalf. So what happens in the basics of shell life? So it first waits from our input, right? So it's waiting for input that we type in. This is where, again, we get into this fine distinction between the command line and the terminal. Technically, when I'm, let me split it out here because I think it's useful if I go over this here, right? So as I'm typing in here, when I type in L S space dash LA, I'm actually technically typing this into the terminal, I believe, and there's options that you can set on your terminal to make this true or not true. And then when I hit enter, it is then sent to the shell, then the shell gets that line of input. So which it reads as a string and then it needs to parse the input. So it separates the input into commands. So in this case, here is Siri a shell. Jesus Connor, I don't know. I mean, it is a, yeah, I think you could say it's an interface, right? Just like the command line. So it has a lot of the same things that you would want in an interface. Like a GUI has the same shape, right? A GUI basically waits for us to do things and then reacts to that. So in this case, it's, it's waiting for our input when it gets our input and then parses it. And basically, you know, you'll study in 340 exactly how compilers do parsing and all kinds of theories of parsing. But for what we're thinking of now, the very basic level, it's separating it into the command, the first part. And and all of the arguments. So separated by command by a space, right? So it separates this, it says LS, great. This is the command I want to run. The first argument is dash LA. Then, and this is the shell actually needs to find the exact program to execute. It needs to know, because the operating system needs to know, well, what LS are you trying to talk about here? And then it asks the operating system to execute the program. So let's step through this. So doing LS dash LA slash. So here in these examples, I'm using these double quotes to say, hey, this is the input that I'm giving into the system into the shell. So LS space dash LA space slash shell says great. And you should be able to do this as a human. And I think this is a helpful thing to do, right? So the shell says, okay, the first part is LS, the second argument is dash LA. Sorry, the first part is LS, the second part is dash LA, the third part is slash. We'll get into this later because this is super important. It then, the shell figures out that LS is located in slash bin. So the first part basically becomes slash bin slash LS. The shell then executes a system call to ask the operating system, please execute the program slash bin slash LS and pass it these three arguments LS, dash LA and slash. How many arguments, so looking at this first one, how many arguments are we passing into the program? That's not a trick question. Yeah. In this, what is our intention, right? We want to execute the LS program and how many arguments we want to pass to, we want to pass it to arguments. We want to execute the LS program and we want to pass it the first argument of dash LA and the second argument of slash. I told you it's not a trick question, right? That's our intention. What actually happens under the hood is actually three arguments get passed and this must be part of the POSIX standard. I, to be perfectly honest, I don't know exactly why I have some idea. But by convention, the first argument that gets passed to your program is not the first argument is what you'd expect, but it's actually, what is this thing that you're trying to execute? So it's actually the first part of your argument. So the first argument is actually LS, the second argument is dash LA and the third argument is slash. This will become important later when we actually start writing our own programs that will take in these command line arguments. But for now, it's good enough to just understand that, hey, this is actually what happens. Cool. Okay. But we want to get more advanced. So let's say I have a user on my system called Adam space D. How would I use the ID command to get information about this user? So self check. What would the shell ask the operating system to execute when given this input? So if I gave the input to the shell ID space capital ADAM space capital D, what's the shell going to do with that based on the steps that we just went through? Yeah. So think about this, how many arguments is going to pass? Yeah, three arguments. Good. That was a bit of a, that was a bit of a trick question or just checking that you're remembering from the last slide, right? So the first argument is going to be ID. What's the second argument going to be? Yeah, just Adam and the third argument is capital D. Great. But this is not what we wanted, right? Because we looked at the man page of ID and the man page of ID said user has to be the last thing and it uses that. So this would tell us, and let's actually check. I think if I didn't do this before, but I think if I did ID Adam D, it says, huh, I got an extra operand D. I don't know how to use this, right? So it's saying, Hey, here's more information. Okay. So how can I get around that, right? I feel like I have a big problem here. And the question you should first ask yourself is maybe the operating system says, Hey, arguments cannot have spaces in them. Then you've actually like completely solved this problem, right? You have no possible way of putting spaces and arguments. So, you know, you're just screwed there. So, but there is a, an escape, haha, a literal escape. So, but we need to think about what we're actually doing here and what's happening under the hood. So we need a way to tell the shell. I want a space as part of the arguments, not to separate arguments, right? So I need a way and this is called lead a way to tell the shell. Hey, this space, I want you to interpret as part of the arguments. So if I do this, it should say ID Adam space D, no such user, right? And there's multiple ways to do this. Here's another way ID. I can use double quotes, Adam D. I can also use single quotes. And so why doesn't the program get the double or single quotes here? Yeah, or the slash, how come this slash so this is actually probably the best example. So this example ID Adam slash space D, but the slash does not appear at all. Let's go to slashes are special. Can I never have a slash now in an argument? Yes, exactly. It's about the shell, right? This is a special thing of the shell before it asked the operating system, hey, execute the ID program with this specific argument. It's a way of telling the shell, hey, when shell when you see a slash followed by a space, interpret that as a space as part of an argument and not a space that separates arguments. Similarly here with the double quotes, what we're telling the program, sorry, what we're telling the shell is execute the ID program. And from the start of the double quotes to the end of the double quotes, everything in there, I want those to be one argument to the ID command. But I don't want you to use the double quotes, right? The double quotes are only to tell the shell. Everything in these double quotes goes to as an argument to the program. Similarly with these single quotes. So that's why we don't actually see any of those in the output because the ID program literally never sees it. So to the ID program, are any three of these invocations different? Yeah, exactly. The answer is no, there is no, there is the program has absolutely no idea that we use these different things because again, and this is the important thing to remember, we are talking to the shell here. We're not necessarily talking to the program. We're trying to talk to the shell so that it can get our data and our input to the program that we want. Cool. And you're well on your way here to being scary dangerous with this. So now we have the problem of, but now we've just opened up a can of worms, right? So we just said, well, how do I, what if I had a user whose name was like AC DC, right? Well, now I don't actually even know why that slash is ignored here, right? So now I have this problem where slash space means don't include that. But what if I, so I, oh no, I don't know how to, I don't know enough about this to figure out how to do it. I don't know how to make there to be one backspace anymore. All right, we'll find that out in a second. That doesn't make sense though. Does it? Why would it make sense? It should just output a corner you're talking insanity here. Oh, maybe you're not, what the fuck? All right. Well, it was a bad example, but that's okay. Because I guess we'll figure it out with ID. So ID. So let's say we have this great user, Adam, double quote, do pay. So, so I have, I don't want to use my last name, but Adam D, right? So now we have a double quote in between Adam and, and before D, right? So I try to do this, what's going to happen when I, this is the other thing I think that's really helpful when you're beginning. Come up with a crazy situation like this and think to yourself, okay, what's going to happen when I hit enter, right? Predict the future. What's going to happen? And then we'll test that with what actually happened. And then that way we update our mental model of what's going on based on the output. So what do you think? Put it in the meeting chat. What do you think that this is what's going to happen when I hit enter? Oh, that's weird. What's that thing? Right? So, huh. So what's happening here? So I know, and I can tell you, so let's, let's look at this, right? So what are the rules around these double quotes, right? So if I did ID, Adam, it would say Adam, no such user, right? What if I just did, what if I got rid of that last quote? What's happening here? Yeah, it's looking for, and what is it be, be specific when you say it's looking for closing double quotes. What is it? The shell. Yes. It's not the ID command. It's the shell, right? Because we haven't even executed the ID command. We have to know the shell has to know exactly what program and what arguments in order to execute the program. So we haven't even executed the ID program. So if I hit enter, we would see, oh Connor, you are right. That's crazy. Yeah, we would see that Aha. And it actually, we can see that apparently double quotes can span new line. So the slash n is a way to represent a new line. So it actually tried to do that. So when we do Adam, D, right, we can't do that because I don't need the source code now, Connor. We'll look at it later. And so when we run this, but that's a good example of like actually figuring out and understanding what's going on, right? Connor is very, very good at that of what was that crazy thing we spent a few hours doing in DC looking at the defaults or something, right? It was no, it wasn't the make command. It was different things. Yes. Anyways, so getting to the root cause of things is great. So when we do this, we can see, okay, what's the, and again, we have to put ourselves in the mind of the shell program, right? So what is it doing? So it's, we're telling it, okay, first double quote, I want you to read until you get to a second double quote. And then after that is a D. And then a double quote, we want to read until the next double quote, well, we don't have anything, right? So that's why that doesn't work, right? It's not, it's not valid syntax. And even if we did, right, let's say we had double quotes at the end, what I'm doing is the string atom, so everything within double quotes, ADAM, and D, but I'm not getting that double quote in there. So now, if I want to double quote within a double quote, I need to actually escape that with a slash. And now it'll tell me Adam double quote D is not, or I could do something else. I could do single quote, ADAM, double quote D. And that should do the same thing. Right, but we've essentially opened up this insane can of worms where, yeah, what would happen if I did slash N? Yeah, so it doesn't actually interpret that as a new line. Another, the better one to do this is echo, to be perfectly honest, I was avoiding echo for now. But anyways, for now we can see, okay. So, yeah, so we need more escaping, we need more escaping in different contexts. So, okay, this is where I think I'm going to leave you and I'm going to point you to, as I've been saying, documentation of manuals. So if you actually, if we go here real quick, we can see that there are an absolute metric ton of different types of there's escaped characters. So how to escape a single character, you can use single quotes, which will should inhibit interpretation of a sequence of characters, double quotes, ANSI C quoting, apparently, locale translations are part of these things. So if you read this, you can actually, this is interesting, this was not something that I knew off the top of my head. Oh, look, we can make it alert. So this is how we can make it alert. That's kind of cool. Yeah, anyways, all kinds of crazy stuff, comments, right, how to do comments in, oh, interesting. Okay, I guess that's just a shell scripting thing. But anyways, you can read this and so you can actually understand. And you can actually read from the horse's mouth itself from the shell. Hey, how does a shell operate when it reads and executes in a command? Basically, the shell does the following. And I hope to gosh, it's parses it in a way that I said, I think there's extra steps in here of things that we didn't cover yet and things that we will cover. But basically, that's in there. And, you know, this quoting and parsing, you may think like, Oh, this is a crazy esoteric thing of the command line. Does anybody really care about this? The answer is absolutely yes. This, this type of quoting actually appears over and over. Once you understand it in one context, you can apply it to like Python code, C code, all types of those kinds of things. It appears over and over. And more fun, it's the source of many, many bugs. So using the wrong quotations and the wrong escape sequences actually leads to bugs in the future. Cool. Okay. And that's basically what I got for today. So I'll open it up for any questions. Next week, if you notice, we didn't even go over like how to navigate around the command line. This was just about like getting used to, you know, type literally typing things into the command line. So next week, I want to go over the file system, how to start navigating around. Maybe we'll touch on various things. We'll probably do one more week of that, then maybe go to assembly or coding or something cool like that and start building things. So if you have suggestions or ideas or things you want to cover, let me know. So questions. You are all very welcome, of course. Yeah, we're definitely doing that. Yeah, we're definitely doing that. We're going to build up there. I want you to, I want to get you comfortable in the environment and executing things and, you know, like getting to be experts will explore like the weird crevices of things. So because I want to, I really want to try to accomplish those goals of at least showing you how to be efficient and effective at using these different things. We'll move on to x86. We may, I think we'll probably start programming in x86 is my goal. So we'll start actually building some programs in assembly and start to learn from there for those that, you know, are just beginning their programming journey. I think that's a great place to start. Plus it will help everyone else do reverse engineering and that kind of stuff. Maybe build some cool things and then we'll go on from there. All right. Thanks, everyone.