 turns out to be complicated. So I think I've broken the back of it. I think I've basically figured it out. Does anybody have any questions or areas of interest or anything following our last chat? Hi Jeremy, good evening. Yeah, I am interested to know more about Fastian generally because I've just googled and found it very cute. We will get to that. That might be a little while though. Hi Jeremy, I'm Joe. Hi Joe. Where are you? I'm just about seven minutes away from where you're at. Oh, you're on the Red Cliff Lynch somewhere? No, sorry, I thought you were in Brisbane. Ah, I'm in Red Cliff. Not too far. It's about seven minutes away. So it's still a question I have. I'm really impressed with the blogging set up out of Jupiter. I'm just curious what your workflow is and how you are able to do an experiment and be able to blog about it very easily. Because I find I've got to move it from this to another sort of thing. There may be things in that space. Yeah, definitely. Yeah, I think we've already, let me just double check our list of things to cover. Yeah, how to blog is actually number one of our list of things to cover in our walkthroughs topic. And I don't think Fastian's there yet. So let me add that. Fastian, there we go. All good questions. I'll introduce myself. I'm Matt from Britain as well. Hi. Hi again. I would like to, I think we started looking at setting up Jupiter Lab last week, if I remember correctly. Yeah, briefly. Yeah. And so I think we'd installed Jupiter Lab prior torch. So I even managed to get that working successfully on my laptop. Did that all work okay? It looks like it's working. So and I managed to install Fastai as far as I know. So I guess being confident that I can work on that to my machine would be. Yeah, that's actually what we're going to do today. I think we're going to focus on yeah, get our own kind of start doing some work on our own machine. Yeah, exactly. Okay, well, let's get underway with that. So just to explain something. Oh, just to explain something you might have seen last time. I have two different users in my WSL installation. I don't normally, but it's just like, I just wanted to mention that in a Linux, you know, distribution, you can add multiple users and switch to them. And so the way you switch between users is by typing sudo minus you for username, and then the username you want, then minus I to open up an interactive terminal as that user. So that's why you see me doing this sometimes. So when I do that, you can see it's like said, Oh, welcome, JPH 00 and kind of starts from scratch. And you can now see before the at sign itself tells me that the only reason I'm doing that is so that I've got like an empty user that doesn't have anything installed or anything set up. So I don't accidentally assume something that and fail to create something. Generally speaking, this, you won't normally have a reason to create multiple users on your account unless you want to kind of set up something like this. It's totally separate. So yeah, I thought we could try to like create, you know, a notebook and a Python script and put them in a Git repository. And, you know, just kind of go through that workflow, basically. So I normally create a directory to put my my Git repository. So what's a Git repository? A Git repository is a folder containing files and potentially subfolders, which basically to simplify slightly, you can easily store somewhere else. And the most common place people store it is github.com. They provide free storage of Git repositories. And most interestingly, Git keeps a kind of a copy of every version of your files. And you can switch back to any previous version at any time. So if you ever mess something up and save it and then realize later, oh, I messed it up, you can go back and get an old version. So maybe before we create our own GitHub repo, we could look at a GitHub repo. So we could look at the fast AI one. So GitHub, as I say, is just one particular company that stores Git repositories for you. You don't have to use them. There's also one called GitLab. But I don't know, most people use GitHub. So I think it's easier to go, you know, be where everybody else is. And so this is an example of repository. So the name of the repository is FastAI. And then that belongs to some particular person or organization. And this case belongs to an organization. The organization is called FastAI. So if we get rid of the first of those, the last of those FastAI, this is the organization FastAI. And you can see the 119 repositories that are in that organization. So if I click on one, say fast release, see how the URLs change? This is now the FastAI's organization's repository called FastRelease. So this pair of things with a slash is basically a unique identifier in GitLab for a repository, because it has the username or organization and the repository. So FastAI is an organization. My GitHub username is JPH00. And then that also has repositories. And so I can click on one like tiny pets. And you can see this is now the tiny pets repository in JPH00. Okay, so let's go back to the FastAI repository. So a repository, as I mentioned, contains folders and files. And then folders can contain folders and files. They can contain basically any kind of folder or file, any kind of file you like. They ask that your files, that each individual file is smaller than 50 megabytes. They don't particularly enforce that though. So that's what we see here. There's a special file, which is a file called readme or readme.md. And that file is special because in this display, it's automatically shown in this repository website. So a kind of minimal useful repository is something that just contains a readme.md file. And in fact, as soon as you have that, you have something that you can, a website, you can show people. So maybe we should start by doing that. So if you go to your own GitHub page, github.com slash your username, you can click repositories. And so you might not have any repositories yet, which is fine. And here, you could click new repositories. So why don't you go ahead and do that, click new repository. And so you need to give it a name, walk through three. If you want a description, not a bad idea to remind yourself of what things are. Sample repo for walk through three of fast.ai course. So you can make it private so nobody else can see it or public. Something you'll hear a lot from fastai folks, the community, alumni, myself is that the more you can work in public, the better, the more you can share your portfolio, the better. Something which a lot of folks aren't used to and can feel uncomfortable. But here's a place you could start trying that is to make this public. If your default is to always make things private, maybe try not doing that this time. Okay, so we can. Walk through the second, please, walk through two. Sorry. The second walk through. Oh, the second walk. Yeah, sorry. Yeah, thank you. I don't know why I imagined that there was another walkthrough. Maybe I dreamt it. Okay, I guess it's because it's the weekend, it's been a long time. So we can say add a readme file. Now there are some things that you don't want to put in Git, kind of like temporary files and stuff like that. And there's a special file called .gitignore, which lists all the kinds of files you don't want to store. So if you click on here and start typing Python, this will kind of create a list automatically of the kinds of like pythons, intermediate files and stuff. So again, it's good idea to use a license that allows other people to use this. If you don't, then other people can't use your code. I always use Apache license too. And the reason for that is that it's like gives users, you know, really as much flexibility as possible and how they use the code. But it also has a clause that minimizes the chance that I'm going to get sued for patent violations or that people would use this to kind of enforce patents in inappropriate ways. So can I ask a question? Of course. Sorry, my name is Mark. I'm from Toronto. I'm representing North America here tonight, I think. Great. Or this morning. So late night for you. Well, it's only nine. It's okay. Oh, you're at the, of course, your west coast. Sorry, can you just go a little bit more into the get ignore and I didn't quite follow what that. Yeah, let's create the repository and take a look at it. So I am embarrassed. I've actually been to Toronto and I've completely butchering my geography. Is this the way you want questions asked or do you want hands put up or something? I like, I like, I like, you know, as informal a conversation as possible. So yeah, not even sure I would see if hands go up. So here's here's the repo we just created. And if I click on get ignore, it will show me the contents of that text file. And so here is the text file called get ignore with line numbers on it. You can see it without anything else by clicking raw. So that's this is just what the text file contains. And you can see, for example, in Linux, a dot SO file is a compiled C library, which is not something you would normally want to save into a repo. So star dot SO star means anything dot SO so C C library files would not be stored. Python has a cache of things that it's pre compiled, which it puts in a py cache directory. So this says don't put that in into your get repo. So basically, when you when we add stuff to get repos shortly, it will by default not include anything that matches these these patterns. Does that answer your question mark? It does in the sort of literal sense, I guess. Tell me more about what your non literal sense is. Well, so so I understand that it's I understand that these are the files that will be excluded, but I guess, other than just always choosing Python for get ignore, I don't know how to decide which files to include in which files to. Oh, yeah, okay, well, we'll see that as we go. What one one example that will come up, if it's not already in here is Jupiter stores backups, the most recent backup save copy in a backup directory called I pie checkpoints. You would, you know, and when you go to get ads, you might say, Oh, it's adding this directory called I pie checkpoints. I don't want that. And you'll be like, Oh, okay, I'll put it in my getting more. So it's generally like if you'll see things that you're like, Oh, I don't need that to be backed up. Or like, Oh, that's the thing that contains my password. I definitely don't want that in my public get repo. So those are the two main reasons. So the stuff that doesn't need to be there or stuff that you actively don't want to be there. Okay, so but choosing the Python for get ignore is generally a good first. This is a good start. So this is just kind of pre populated it with a bunch of lines that we'll we'll add to later as we find stuff that we don't want to include. Okay, so you can see it's created a readme.md file. And if I click that, you can see it's here's its contents. And that's the same as the contents down here. And so we could like create, you know, a little website now, which is basically having websites a bit of a hit. I guess it's a website by editing readme.md. So if you click that little pencil, we can now edit. So try redditing your readme.md. And this is this is marked down, which we use in Jupiter, we use in readme files. It's kind of used pretty much everywhere. And so it's well worth getting used to. So at this stage, the markdown file, you've got one line that starts with a hash. That means this is a level one heading. A level two heading would have two hashes introduction. Okay, and then you just put things on on separate lines of text. So this is a sample repo or walkthrough of the first day of course. And then if you want a new paragraph, just put an empty line between them. This is another paragraph. And then, you know, you can have lists by putting hyphens. Okay, and so forth. And maybe another header here. Okay, so if I save that, it doesn't say save, it says commit. So this is a concept in Git, is that you don't just save things, but you create, you know, a version, it's called a commit, which is basically all the changes since last time you saved. So commit means save, but it means save with version control. And so when you save, you need to have some description of what the change was that you made. And optionally, you can add more details about it. So by default, it's made a description for me. So I can commit my changes. And so now if we go to our repo, you'll see that we've got more. You'll also see that this repository now has two commits. So if I want to go back and see what it used to look like, then I can see here's the initial commit. And here's my update, read me. If I click on this commit code over here, it shows me the difference. So things with a minus things with a minus and a red are things I deleted. And things in plus and green are things I added. And this is called a diff, a diff for a difference. And so very often people will, you know, say that they want to have a look at a diff to see like, if you've made some changes to their code to see what changes did you make, otherwise it's very difficult to know what somebody did. So this commit gets automatically gets a little unique name as you see, we can see the diff. Or you can even click on this little button here, browse repository at this point in the history. So you can go back and pretend that life was before a minute ago and see exactly what this looked like back then. So this is now looking at the state of this repo before I made the change. So Git is pretty handy and GitHub is a very useful place to store stuff in Git. So generally speaking, we don't normally edit things directly with the GitHub editor because it's pretty basic. I mean, I do sometimes, you know, if I just want to make a quick change to a read me, I will sometimes click that pencil button, but more often I do it on my computer. So to put it on my computer, we need to clone the repository. So cloning it means making a kind of a linked copy on our computer. So you see this code button here. We can clone it, we're going to clone it using something called SSH, which is something we'll use a lot. And SSH is a way of logging into remote computers and also automatically doing stuff with remote computers and copying stuff from remote computers. So here is a URL. It's not to a website, but to a Git repository using SSH. So I can click here to click copy. Right. So I've copied that. So how do I clone it? Well, the first thing I do is like say, let's get things organized. So I'd like to have a directory for all my cloned Git repos. So I'll go make to Git, cd Git. And so if I go print working directory, you can see I'm in my home. And remember that tilde is a shortcut for your home. So I can now type. So Git is a program on your computer. And so you can type Git, clone, and then the URL. So I just pasted it. Okay, so there's a lot of security stuff built into SSH. And one thing is to make sure that you don't accidentally connect to places you didn't mean to. You know, I don't use that much of the security stuff because I'm not too worried, you know, for most things I do. So in this case, it's just saying you're sure you want to connect to this new place. And I'll just say yes. And it's going to save that. Okay, so permission denied. All right. So I've asked to clone a repository using SSH. But I got permission denied. And that's because to use SSH, you have to use an SSH key. So the first thing I mentioned is if you want to clone somebody else's repository, you can use HTTP instead of SSH. So I can click here HTTP copy. And then I could clone that. And that works fine. That's a perfectly reasonable way to work with other people's code. So if I go CD walk through two, here it is. And I can edit the read me. And then I could go down and I could add something else. And the problem is I can't save that back again without logging in to GitHub. So if I try to commit that, I'll explain committing from the command line in a moment. But I just want to show you that. Oh, okay. So the next thing to know is if you want to save stuff back to back to GitHub, it needs to know your name and email address. So it tells you some commands you can use. So one approach would be just to paste them in. Right. And obviously that's not the right email and username. But things like this in the terminal, they basically always create hidden files in your home directory. So if I just type CD, it takes me to my home directory. And you can actually see here there's now a file called dot git config. And so I could edit that. And here we go. So info at fast.ai say Jeremy Howard. All right. Now I'll show you a little trick, which most people don't know. I want to go back to the directory I was in before. I could type CD git slash walkthrough to or I could just type CD space hyphen. And space CD hyphen means change directory to your most recently used directory. So that's very handy to do. One issue with that is if you've like CD three or four times, there's no kind of history there. So what I would do if I want to come back here later, and I'm going all over the place is instead of typing CD, you can go push D, which is the same as CD, but it remembers where you were. So if I go push D and change to my home directory, I'm now in my home directory, I can CD to download. So I can CD to NBs. How do I get back to where I was before? Well, I pushed from git walkthrough to so I can pop if I type pop D. There we go. I'm back right. Got words originally. So there's a couple of good tricks for zipping around in your directories chapter. It's a bit like pressing the back button, I guess almost on a browser. Anyhow, if I now try to save my change and the way you do that, we'll talk about this more in a moment as you push, you can see here it's asking for a username. And so you obviously can't save things to other people's repositories if you don't have their credentials. It's also annoying to type in your username and password all the time. So I almost never use HTTP getClone for my own repositories. Instead, I use SSH. So let's do that directory and getClone with SSH. So click SSH and copy. And let's take a look again at this error we got. Okay. So why do we not have permission? That's because it doesn't know who we are and doesn't know that we have permission to copy and change this repository. SSH is really nifty. It doesn't use passwords. Instead, we create a secret key on our computer called the private key. And the second thing called the public key, which we can give to other people. And then anybody who has our public key will be able to accept, we will be able to log into basically, but they can't log into us. That's why it's cool. It's not like a password. It's a one-way thing. So we can get into GitHub, into our repos, but nobody on GitHub could like log into our computer or anything. So we need to create, it's called a key pair, a public key and a private key. So to do that, you type SSH, oops, dash key gen, SSH key gen. So that's generate SSH keys. And then just hit enter, hit enter again, hit enter again. All right. So that's created keys in my home directory in .ssh. This one here's the private key. And this one here's the public key. So we need to tell GitHub about our public key so that we can log in there. So to display a file in the terminal without like, basically show it all at once, you can just type cat. So if I go cat in my home directory.sh.pub, there it is. Now, there's no problem with me showing this on a live stream and it being on a video. This is not in any way private or secret because this is just something that lets me, if it's placed on another computer, it lets me log into another computer. In fact, it's even stored publicly. Like, anyone can access this publicly or Jeremy because it's on GitHub. Yeah. So let's put it on GitHub. So let's do that. Yeah. So let's go back to GitHub. Click on my face and probably going to be in settings somewhere. All right. Here we are. SSH and GPG keys. There we go. Do we not add them here? Here we go. New SSH key. Title. I'll just call this the walkthrough key and paste. There we go. Add. Maybe add the username I used. All right. So that is now in my account. So I should now be able to rerun that git clone command. So remember, if you press control R, you can type a few letters from a previous command. So I'll start typing clone. And there it is. And so if I hit enter, now it's working. So I don't have to worry about ever typing in a GitHub password. So here we are. Great. Let's make sure I've closed my other GPS session. Jeremy, I noticed when I did that, when I did the SSH key gen, I already had one. Okay. No worries. So if you've already got one. Just use that one. Yep. Just use that one. There should be an ID RSA or ID DSA or something like that. That's your private key and the one that ends in .pub is the one you'll copy over. Yep. And so you don't need like... How did you just split your terminal like that? We will learn. It's something called tmux, but we'll certainly be covering that. One of the best things ever. All right. Quick question. Jeremy, one thing that I just thought might be interesting for people or just something that can catch people out is making sure that your identity that you set up in your terminal, as you showed before, and that the email that you use in GitHub said that they're consistent. Sometimes if you are using a different email or especially if you... It's probably not a case here, but if you have multiple GitHub accounts, you can end up having one identity making commits to a repository that you didn't intend to under that identity and back and forth. So just be careful when you first get started that you're using a consistent email identifier. It's not necessarily always important for your public key, but certainly for your identity on GitHub and for where you're going to be making commits and things like that. It's often helpful when you get started to make sure they're consistent. Yeah. I don't honestly ever think about that. I kind of just chuck in any old email address. It comes up sometimes, but not too often because it's kind of mainly informational, I think, this information so that other people can contact. I found it's more down the line. Especially if you have a separate GitHub account for personal and a separate one for work, then if you have different identities or different emails being so said with it, then when you make a commit to a work repo, you've accidentally committed it from your personal one, which you didn't want to reveal your identity on or whatever. Yeah, fair enough. Yep. Okay. And somebody else have a question or comment? Just in the same context, like you said, the public key, even if somebody else knows it, they cannot commit to your Git. Is that because the private key is unique only on your computer, like just a high level? Correct. The private key is the secret code. So if you wanted to be able to log in from another computer, you would copy the private key over there, and then that computer can log in. Yep. So the private key is a thing that says I can prove I'm Jeremy Howard. And the public key is a thing that says anyone who proved that Jeremy Howard can log in here. Thank you. No worries. This is something that this way of simplification is just across many different contexts. So GitHub uses it. But for instance, today I was installing Ubuntu Server on my local machine. And I could point the installation to take my public key from GitHub just to make things easier. It grabbed the public key and it set it up so that I can easily connect to my computer without any additional setup steps. So there is absolutely no danger given the current state of mathematics to making this information public. And without that going via HTTPS and password authentication that makes it for such a cumbersome GitHub workflow that this is so much better. Yeah. Yeah. SSH is used everywhere. So for example, I've got a GPU server sitting next to me here, which, and then I've set up a somebody at my door. And that doorbell keeps switching itself to a Christmas chime for some reason. Yeah. So I've actually created a profile here for logging into my box, which as you can see, it just calls SSH. So and then that's attached to Control Shift 3. So anytime if I want to log into my GPU box, I hit Control Shift 3. And here I am. I'm now typing in just as if I was at my own computer, but I'm actually now typing into my GPU server. So SSH is a good thing to learn about properly. Okay. So we have Trammy with regards to creating repos and committing and I mean, what we are practicing right now, I guess in the course itself, you show how we can deploy an application. And sometimes you need to do the same thing. I mean, get pushed to those application. Yeah. And just wanted to see, is it possible to have both GitHub and also pushing a repo communicate with two different destination sources? If it makes sense? Yeah. Yeah, we can do that. And we'll be seeing that once we start looking at hugging face spaces. Yeah. Yeah, you can. So you can have as many repos as you like. And each repo kind of has this kind of default destination it's connected to, which will normally be GitHub, but you can even connect one to multiple destinations and choose which one you're pulling and pushing from and to. Can I ask one more? With regards to the token password that you mentioned that for that ignore file, just wanted to see if that is important only for the public repos or even a private repo on GitHub, you shouldn't share token passwords or? Yeah, I would tend not to. I mean, it depends how important it is. I mean, at least the people on Great Hub can see it. So yeah, I would try to avoid putting private stuff onto public websites in general, particularly things like that where it's like, at some point you might decide, oh, I want to make this repo public. And then you forget that somewhere there was a, at some point there was a secret file in there. And one thing to be very aware of is even if I, in fact, let me show you, let's create a super secret file. And my secret is I don't like bananas. I don't want anybody to know this, right? But let's say it was a private repo, pretend. And so if we put that into GitHub, because it's fine, it's all private. And then I pushed that over to GitHub.com. And then later on, I say, oh, okay, I want to actually make this a public repo. So I need to delete this from GitHub. So I'll get RM, that file, remove secret. And like, okay, now I make my repo public, everything's fine. Nobody has to know that I don't like bananas. And then I can check on my repo. And okay, my super secret file is not there. But remember, can it's, let's go back to the world as it was. Oh, it's here. In my history, right? When you remove things from GitHub, it removes it from the current commit, but it's not changing history. So people could still find out my secret. Jeremy, I just, I just noticed there as well, that was a good example when you looked at those commits of the, the identity issue we were just talking about before, because on that commit screen, you had some commits that were verified, because you will have had an SSH key that was tied to your GitHub email. We see you've got those first two commits there are verified. And then the latest two aren't. That's because you just created a new key. So that's the, the key won't have had the same email ID as your first one. So that's, that's an example where, especially like if you are trying to make verified commits, if that's important to some project you're involved in. Yeah, that's where that'll tear you up. So I just thought I mentioned that. Never been of interest in my projects. I guess I'd never thought about it. But yeah. So this one was actually, yeah, because you know, anybody could create a dot get config file that says I'm Linus 12 volts and push and it'll say this is a commit from Linus 12 volts. I won't say it's verified. Yeah. Okay. So let's put a notebook in here. So I can run JupyterLab and I think we created an alias last time JL. And I pointed out that at this point, it's, it's, you know, this terminal, I can't use it anymore because it's busy running Jupyter. Now I could run another terminal session in Windows terminal. But I actually never do. I actually always use instead something called Tmux. Tmux is something which actually runs inside your terminal. So regardless of what operating system you're on and what your term preferred terminal is, you'll always be able to use Tmux. And let me show it to you. If you type Tmux. Well, the first thing I'd mention is if you type Tmux, it might say command not installed. And if it does say that then in Linux, you can type sudo. And sudo, if you don't say what user to run it is, it says run it as an admin. It's called root, right? So, so, to install software, you have to be root. So sudo apt install means install Linux software or Ubuntu software, Tmux. And so that's how you would install Tmux if you got that error. And so to run stuff as root, you have to put in your password. And so in my case, I already have Tmux. Okay. But yeah. So that's, that's what you would do on Mac. You would normally use brew, which unfortunately does not come with Mac. So if you, as it says, it's the missing package manager. So if you just copy and paste this into your terminal and Mac, you'll then be able to should be able to do brew install Tmux if you double check that it's available. Yep, it is. So brew and apt equivalence for Mac and Linux. And remember when I say Linux, I'm including Windows as Linux because it's, it is Linux. So once it's installed, if you type Tmux, you'll get a new screen that looks exactly like your old screen. But now it's got a green bar on the bottom. And this is what Tmux looks like. And it behaves the same way as usual. You know, one thing is if I kind of like go off the end of the screen, it's nice. I can use my scroll if you got its mouth set up. But you know, basically just look like a normal terminal where things get interesting is that I can add additional windows. And so in Tmux, everything almost everything you do Tmux starts by pressing the key, the keyboard shortcut control B control B is that the Tmux shortcut. And so let's say I CD into get and I run Jupyter lab, I always like to run it from the place where I've kind of got my notebooks and repositories. And I'm like, oh, okay, what do I do now? Well, I'll create another GitHub window. Sorry, another Tmux pane, I should call them Tmux pane. And I can create another either split them horizontally or vertically. So if you hold it, hold down control, press B, nothing happens, and then press percent. So control B percent. And you can see what that's done is it's created a second window over here. As opposed to control B double inverted commas, which creates another window down here, a pane. And you can close them in the usual way. And remember, the usual way is control D. And each time you close them, they just disappear. So I pretty much always do that. Now, then how do you move around between these different panes? Depending on how your terminal is configured, you might be able to click with your mouse. I never do. I just press control B and press arrow keys, control B right, control B up. See how my cursor's moving? Here I am in the bottom right, control B left. Now I'm in the bottom left, control B left up. Now I'm in the top. So that's how you can move around between the panes. And then another thing to know is this window looks very small now. This pane looks very small. I'd like more room, please. To get more room, you zoom with Z. So control BZ. So if I press control BZ, that makes that pane take up the whole screen. And once I'm done, you know, and I don't want the whole thing to be maximized anymore, I just press control BZ again. And now it goes back. Okay. So, Jeremy, how did you get the 4x4 right? So, let me go back to where I was. So I'm going to first of all split vertically, so that'll be control B double quotes, sorry, control B percent. And then I'm going to split the one on the right, up and down, so control B double quotes. And then I'll press control B left to go to the left-hand tab, the pane, I should say. And then I'll go control B double quote again. And there you've got it. And you're kind of like, there are things you can do to make that automatic. But after a while, you get so used to it that like I show you, when I do it, I just go control B percent, control B double quote, control B left, control B double quote, and I'm done. You know, it only takes three seconds. And then the other nice thing about T-Max is it sits there running in the background for as long as you like. So I can actually detach from this T-Max session as long as I don't turn off my computer by pressing control B D for detach. And then I'll close down my whole terminal. Everything's gone. Okay, don't have a terminal running anymore. Oh, that's going to be annoying to have to set everything up again, get to the right directory, re-run Jupyter notebook, blah, blah, blah. But actually, I don't, because I detached from T-Max. So all I have to do is attach to read T-Max again. I do have to be the right person. I'll go back to my extra account. To attach to T-Max again, you type T-Max, A, A for attach. And everything's back. So that is one of the very handy things about T-Max. And so if you've got some long running job or something, it's totally fine. You can detach if you need to and come back to it later. Obviously, if you re-boot your computer, it won't work. Otherwise, it should be fine. I think there's a main... Yeah, just to confirm, if you close any of these windows, that ends the process. That kills the process. No, I just closed the window. It didn't close the process, but I detached first. So control BD to detach. And I closed the part that it's all gone. It's closed. Sure. But I mean, at the beginning, when you split into the four and then you closed the three and then went back to the original, so for example, they won't be the If you close, if you close a pane, so yeah, so like the pain here, I can't close it because it's running a program. So the only way to close that would be to actually cancel the program. This pain is not running anything. So I can close it. So I can just hit control D. And so that just closes that session. And then if I do control B double quote, it just creates a new session, a new interactive login, if you like. So each of these windows are totally separate to each other. So if I overhear CD and to walk through two, you can see none of the other ones, you know, these are all like separate copies of bash running. This way, I know if this copy over here is actually running Jupiter. All right. Give me one more doubt. Like, can we SSH into a different session from T-max itself? Yeah, so absolutely. So I, you know, I could SSH into my machine, into my GPU machine from here. Oh, I need to be not JPH 00. So let me just do that as somebody else. Yeah, so I could SSH into another machine. No worries, you can even run T-max inside T-max if you want to. It gets a bit crazy. Yeah, they're all totally separate. Okay, so let's, so I've got Jupiter running. So I can control click on this URL to open it up. That's interesting. So that didn't work because you see how it's wrapped to the next line. So it didn't get the FA91. It's kind of not considered part of it. That's why this didn't log in correctly. So what I could do is to zoom in with Ctrl BZ and then click on it. There we go. The other thing you can do is to set a password, which isn't a bad idea. But for now, we can just use this because it's using this unique token that it auto-creates. Okay, so because I launched Jupiter lab from inside the Git directory, that's why I'm here inside the Git directory. So here's Walkthrough 2. So I could now create a notebook, turn that to a markdown cell. So I strongly recommend learning keyboard shortcuts, which that's the easiest way to see that in the lab. I'm much more familiar with Classic Notebook. So here's Launch Classic Notebook, which is what I normally use in Classic Notebook. You can hit H to bring up the keyboard shortcuts. Let's see how to do it in Jupiter lab. Jupiter lab keyboard shortcuts. Advanced settings editor in the settings menu. Doesn't sound very friendly. Settings, advanced settings. Okay, that's Ctrl comma. Keyboard keyboard keyboard. There we go. All right. So anyway, the keyboard shortcut to turn a change a cell to markdown is just to hit M. And so this is now markdown, as you see. Or to switch it back to code, you press Y, and that's now code. Another useful keyboard shortcut is you can just press 1, 2, or 3 to create a first level, second level, or third level header or change one to a header, as you can see. So walk through sample notebook. Here is how I calculate one plus one. Put things in back text to say this is just data as code. Here is how I calculate. So if you hit shift tab after typing a function, it'll tell you the parameters and so forth of a function. A equals array 0 comma pi over 2, whatever. So by default, things get called untitled.ipinb, which is not a great name. So you can rename it to sample, whatever. Now, if I close that, it's actually running. So that Python session is still in memory. Most of the time, that doesn't matter unless it's something where you're like training a model on a GPU, in which case it continues to use your GPU memory. So a couple of things you can do. One is rather than closing from the X, you can click close and shutdown notebook, which is control shift Q. Or alternatively, you can click the X here. All right. Since we've got a proper terminal on our computer, we don't really need to use it much. But if, you know, and we will use it later, you can create a terminal inside your browser, which is identical to the terminals we've seen before. And just like before, control D will close it. All right. So we've now got another file called sample.ipinb. So we would like to put that into our GitHub repo for other people to share and just so I put it back up and so it's version controlled and so forth. So everything you want to do in Git, your first type Git. So what you'll often do at this point is type Git status, which tells you what's in Git and what's not in Git. And so it'll give you a list of untracked files. So these are things you haven't yet got in Git. So to put it into Git, you have to commit it. So if you type Git commit, that'll commit anything that you've added to Git. So first of all, you have to say, okay, what do I want in my next commit? I want sample.ipinb. So Git add sample.ipinb. I'll zoom in. Okay. So now, this is a, it's not untracked. It's now a change to be committed. We've added a file. So now we can commit what we've added by saying Git commit. And then it'll say, okay, tell me your commit message. And so by default, it's opening up an editor called nano. And we can change this. But nano is probably like the easiest editor to get started with. So it's not a bad place to start. So let's put in our commit message for people to see what have you done. We added sample notebook. And you can see down at the bottom that we can accept by pressing Ctrl X. And it'll say, do you want to save? And I'll press Y for yes. And by default, just leave the file name as it is. So hit enter. Okay. So that has now added the file to my commit. So if I now say Git status, it's now in a third place. It's gone from untracked to do be committed to be committed. And it is now committed. And that means it is now actually version controlled on your computer. So Git actually version controls things on your computer, even without using GitHub. In fact, originally, when Git was created by Linus Torvalds, there was no such thing as GitHub. And people kind of sent changes to each other directly rather than going through a server. But in this case, we are connected to a server. And it said, oh, your your branch, so your copy of this repo is ahead of the copy, the place that you got it from by one commit. So use push to send your commits back to the server. So Git push. There we go. So now if we do Git status again, there we go. So that's the whole cycle. And so if we now go back to GitHub, there's our notebook. And GitHub does have a basic notebook viewer. It's not amazing, but it does the job most of the time. And so there's our notebook. And so here's like a really minimal way of like it's not a blog or anything, but you know, to just like quickly share things with people, this is the easiest way to do it, you know, and you can just say here's here's a repo. And you know, you can create as many repos as you like. So like, don't feel like it's in some way inappropriate to create a repo for one or two notebooks you want to share with somebody. It's totally fine. You know, I generally have kind of a repo I put somewhat temporary things into. But you know, often when we're kind of sharing something with somebody else, for example, the bug we found, we want to show how to recreate the bug, we'll just like create a repo just to send somebody an example of a bug, for instance. So yeah, so repositories, you can create as many as you like. A really good way to use repositories is let's go to the fast book repository is it would be nice to have your own copy of the book, because you would like to run cells, edit things, stuff like that. So, if you clone this, right, you won't be able to do an SSH clone at all, because my, because your public key is not in my account. You can HTTP clone it, but you won't be able to save changes back to GitHub. So ideally, you'd like your own separate copy of this. And so you can create your own separate copy of this by clicking fork. And so forks going to create your own copy. So you just say create fork, there is a forks a copy. And you can experiment with changes without affecting the original. And here you go. So it looks exactly the same, right? But now I can SSH copy this, and then CD. So CD dot dot means go to the parent directory, which in this case is get, get clone, paste. Actually, yeah, no, that's fine. Yeah, so we'll go get clone. There we go. And so now it downloads the whole book. And so now, if we, in fact, let's do it, let's open up a notebook. So let's go back to Jupyter Lab, fast book, and just basics. Actually, you know, it would be good would be, let's go into the clean version. Because this is really the one you want to be experimenting with. And so I can now start running cells. Oh, can't run fast AI, fair enough. So at this point, we need to install fast AI. So we can see here it says condor install minus C fast, chen fast AI. So I'm going to copy that. Except for the condor bit. So I want to use member. So minus C, remember says to bring it from some other channel. So this is not coming from the main channel, but from a channel called fast chen. So fast chen is a channel that fast AI provides, where we try to put in, you know, a lot of the kind of pieces of software that data scientists are likely to want to use. Okay, so we can now say, yep, that all looks fine. So fast AI relies on the kind of the whole, you know, kind of ecosystem of Python scientific libraries. And since this is a brand new user, you know, things like matplotlib that's used for plotting, for example, and scikit learn that's used for classic machine learning, none of those were there. So because it relies on all these, it grabs them all, downloads them, and installs them. Can I ask a question while it's downloading? Please. I notice you're installing it in the base directory. Is that usually how you do it? That's how I always do it. Yes. But you don't create separate virtual environments? Never. No, never. Okay. A lot of people do, but I strongly dislike them, particularly for beginners. Or unless you've got some very special reason, I always put stuff in the base. Okay. And the other thing I noticed was that the notebooks all use pip. Yes, they do. But it won't do anything for you because it says here, see if there's a, this is a bash thing. So see if there's a directory called slash content, which there isn't, this exists for something called Colab, which is a free Jupiter server environment, which doesn't generally have up to date things installed. In fact, I think they still have fast AI version one. So this cell will on Colab install everything because Colab uses pip, basically. But yeah, what do we do with a thing on our computer? And we also need fast book. Now fast book, I'm not even sure, I'm not sure if there is a con to package at the moment for fast book. So I will use, well, let's check. Mamba, install minus C, fast chair and fast book. I have a feeling that won't work. Oh, apparently it does work. There you go. That was easy. And actually fast book includes fast, fast AI. So we could have skipped the whole fast AI one. Fast book is just a, it's basically just a list of dependencies of like all the different things we use in the book. It doesn't really have much code at all of its own. It's just a kind of quick and easy way to grab all the stuff that you'll need for the book. All right. So now we should be able to run this. Okay. That is actually, I think a little out of date. I think we could use any sentence piece nowadays. And I think we might have that in fast gen two sentence piece. That's something we use in the NLP chapter. Yep. Looks good. Wow. That's a slow download. That's beating up at last. Let's try again. Okay. So now we've got a copy of everything we need. So this is like a unusually, you know, big kind of set of dependencies because it's a big book that teaches lots and lots of things. But the nice thing is once this works, you know, you'll generally find everything you need is going to, is going to work. Okay. So at this point, you know, I've started doing things, you know, maybe I'll make some notes to myself to install. We have to go member install. Basically, this is all we'd need would be member install minus C fast, fast book sentence piece. That would actually be all you would need to do. So if I save this, and so now, you know, we've created a note to ourself in our own copy of the book. So we'll close that. And if we now CD to fast book, get status, you can see it sells as we've modified that file. So we would like to save that back to our copy. Type in git add and then get minus M and then changing things in the editor is a bit slow. So a shortcut is if you type git commit minus AM, that minus A means add everything that's not committed. And this this M here says I'm going to put a message right here on the command line. It's got to be in quotes, change M list, maybe add install notes. So at that point, if I type git status, you can see now it's gone ahead and added it and committed it, and it now says we're ready to push. So if I type git push, that same save that change. So that change is not being saved to fast AI's copy of the book, of course, but it has been saved to the JPH fork. So at this point, my fork is one commit ahead of fast AI, right? So that is I've made changes that are not in fast AI's copy. And so I could see what commits there are, and that, and here's all the commits that are in what I've forked. And here's my addition. And here's the change, which is that I added this one cell. Okay. I think that's probably about enough for one day. Does anyone have any questions or comments about that? The only one I found was that sometimes if you sort of, we started off creating the repo within GitHub. Sometimes I've done the reverse growth, created the repo on my computer, and then had a few issues trying to get it into GitHub. And yeah. Yeah. Okay. Well, let's add that to our list of things to do in a future session. I find it easier to do it in GitHub. So I actually always try to do it that way. Like literally, like, because I find it so easy, like I always have to look it up to remind myself how to do it otherwise. So often I'll like, I'll create it in GitHub, pull it, and then copy over things that are on my computer. You know, like that's a really lazy way to do it. But let's do how to create a Git repo locally. All right. Let me pop that. All right. Thanks, Kang. So we're doing Tuesday, Wednesday, Thursday, Friday this week. See you tomorrow. Thanks for joining us in Toronto. Bye. Thanks, bye. Thanks, bye.