[MUSIC PLAYING] DOUG LLOYD: All right, so welcome to the portion of CS50 where we're going to begin to do transition our coding away from scratch and we're going to start programming in c. In order to do that, we need to have a terminal-based environment where we can write commands at the command line, write our code, compile it, and execute it. The platform that we provide in CS50 is called CS50 IDE. And it's entirely a cloud-based infrastructure that uses an implementation of Ubuntu, which is one flavor of the Linux operating system. The advantage here is it is cloud-based, which means that you can start your work on one computer, save, head home, switch to a different computer, use a friend's computer, and all your work is saved remotely in the cloud. To get started, what I want to do is walk you through how to set up your CS50 IDE the very first time and walk you through some of the features that it has. So all you need to do to get started with your CS50 IDE is head to a web browser. And in the URL, just type in cs50.io. And just give that a second. You'll be prompted to log in using CS50 ID. The options that you'll probably use are either Edx, Harvard, or Yale. So if you have an Edx account, you'd use the Edx logins. If you have a Harvard credentials, you'd use Harvard. If you have Yale credentials, you'd use Yale. So I'm going to set up with Harvard credentials, hit Submit. And you would enter your username and password here. And the very first time, if you haven't done this before, what it's going to do is create for you a brand new environment, pre-configured, ready to go, using CS50 IDE's framework within Cloud9. Now, I already have an implementation of CS50 IDE, but I'm going to show you how to create another one using a different method. So alternatively, if you already have a CS50 IDE workspace and you want to, for example, create another one, which is what I'm going to do here, or for example, the cs50.io log in somehow didn't work, you can also create new workspaces from your Cloud9 dashboard. I'm going to show you how to do that here. So what I did was I logged on to my IDE. And in the File menu, I just chose dashboard to bring me to the screen that you're seeing here. Then what I wanted to do is just create a new workspace, which I can do just by hovering over this button here. And then it's going to ask me to provide some parameters. So my workspace name, lets call it demo. A short description of it, demo for CS50 IDE. Now in general, particularly if this is your first work space, you're actually going to want to choose private here. The way that this is set up, though, is that you're restricted to one private workspace. And I already have one in my example here. So I'm going to choose public because I don't really have another option. But if this is your first workspace that you're using for CS50 IDE, you do want to create a private workspace if you can. And then at the bottom there, it gives you some options for different templates you can use. So this is not just restricted, necessarily, to CS50. But there is a CS50 template right here at the end, with happy cat, Harvard CS50. And I can just hit Create Workspace. Now, depending on how old your system is and the speed of your internet connection, this could take anywhere from a couple of seconds to maybe one or two minutes. So after about 45 seconds or so on my machine, I was brought to this screen, which is basically the CS50 IDE, what it looks like by default. The first thing you're going to want to do, again, one more time sensitive step here, is as soon as you visit your IDE for the first time, or generally when you're visiting it as you go, you're generally going to want to check to see, make sure that you have the most up to date version of CS50 IDE. We occasionally will push updates to change some formatting things or to include some distribution, or sample code, or staff solutions. And those are pushed via updates. So you're going to want to, first, go to the terminal at the bottom here and type in the command update 50. And then hit Enter. And again, this will take about, possibly, about a minute or so, depending on the speed of your internet connection. And what it's going to do is go through and download all of the packages and make sure that your system is fully up to date. So again, after about a minute or so, I'm notified that the update has completed and I'm prompted to close and reopen all terminal windows. So I'll just do that really quick. I'll just close to this terminal. Confirming. And I will reopen a new terminal here. And now we are good to go. So our CS50 IDE has three main areas. At the bottom, you've already seen me working here in blue. This sort of light bluish color is my terminal. These windows are also resizable, so I can make this bigger or smaller if I would like. I'm going to keep it right about here for now. On the left over here is my file tree. As I add files and folders to my workspace, this will become larger and I'll be able to navigate this using just a GUI interface, being able to double click on files, double click on folders, as opposed to just having to do everything at the terminal window. Although as you become more acquainted with the Linux commands, you may want to just use the terminal window anyway because you may find it faster. And then at the top here is my main workspace, sort of area. This is where when I'm opening files, where I'll see my source code and can edit it. And this is where the bulk of your work will take place when you're writing code. I'm going to show you how easy it is to create a file in CS50 IDE. There's a little icon here with a plus. All I have to do is click on that. I'm asked if I want a new file or a new terminal. As you can see, I actually could put terminals at the top if I wanted to, generally not a good idea. I already have one at the bottom. So I'm just going to create a new file. Doesn't have a name right now. You can see it created something for me called Untitled 1, but that's all right. And let's just quickly write a little Hello World program. So first I need to pound include standard I/O, which is where the print f function lives. We're going to need that to be able to print that out later. Int main void. And I'll tab in here and just print f, hello world. A little backslash character, close curly brace. Now nothing like syntax highlighted for me. Maybe you're familiar with this if you've used other editors before. And the reason for that is that I haven't given this file a file extension or a name yet, so the IDE doesn't know what type of file it is. If I try and hit Save, so Control S on a Windows machine, Command S on an Apple machine, then I'm prompted what file do I want to say this as. We'll save it as hello.c, it as a C program after all. Hit save. Now notice that actually now that it knows it's a C file, it's going to syntax highlight it just like a c file. So my pound include, my string there is in green, my keywords are in blue, and we're ready to go. So I've saved this file as hello.c. Now you may recall that in order to execute our programs, we don't just run the source code, we have to compile them from the source code into a binary file. And we do that using make. So we can go down to the bottom here. And I can type make hello. Hit Enter. So then some cryptic clang string ran for me. And then I can just type ./hello and I'm told hello world at the bottom there. So that was how easy it was to get our first program set up. What else can we do here? There's a lot of menu options at the top. Let's take a look at some of those really quick, so you're pretty standard CS50 IDE, which has a menu there. Files for opening and saving files and so on. One that you might definitely use is in this View tab. There's a less comfortable option, which can abstract or hide away some of the menu options. You notice some stuff disappeared there. My screen got a little bit bigger. I'm going to keep it in more comfortable mode for now, but this just hides away some of the menu options that you might not use quite as frequently. Another option that I personally really like, when I'm coding, I actually like to be in night mode, which looks a little something like this. So it inverts all of my colors. I like to program on a dark background typing light colored text. But you might prefer the opposite. I'm going to keep it as day view for purposes of this video. But know that that is an option. And there are other options as well you can do with themes. There are many, many different types of options here that you could use instead. So let me just quickly put this back into day mode. And then one that is going to be useful, and I'm going to use it from this point forward in this video, is presentation mode. And presentation mode you would use when you're giving a presentation, which is what I'm doing here. And you'll see what it does is it actually makes the text a little bit bigger. It gets rid of some of the details in the corner there at the top right. I'll take this off again for a second to show you some of those things briefly near the end of the video. But it's a useful tool when you want to show your code a little more-- in a larger font size, to have your terminal window have a larger font size, so that people can read it a little more easily. And hopefully now you can read it a little more easily because I put the IDE into presentation mode. There are a couple of other ways to open files, though, besides just clicking on the plus icon at the top. So really quickly I'm going to clear my terminal, which I do by typing control L. And it just kind of makes everything go away. And I'm going to try and open a file using the Cloud9 file opening command, which is known as C9 open. So I'm going to try and C9 open hello2.c, for example. Now you notice what it did there is it created a new tab for me at the top. And it already now has a name. So unlike before, where I had an untitled tab, now I have-- now I have the-- tab has a name in it. And we're going to write a really similar program to the one we did before, with one little twist. We're still going to include standard I/O. Now we're going to include CS50.h as well. CS50.h is a header file that contains some user input functions that are quite handy for this example. Int main void. Now notice, unlike before, now that this file knows that I'm working in C, you may have caught this. I'll go back and do it again. When I was writing the original hello, when I typed the open curly brace, it didn't do anything for me because it didn't know I was writing a c file. When I do it here and I hit Enter, notice it actually gives me a corresponding close brace already. This will also be done for for loops, while loops, if blocks, and so on, where it will automatically, if you open a parenthesis or open a curly brace, it will correspondingly close it for you so you don't have to go through the process of typing it out. It's not a huge deal but a lot of modern editors do this for you because it makes your life a little more convenient. So this time what we're going to do is we're going to have a variable where we're going to capture the user's name and we're going to print their name out. So I'm first going to prompt them by saying, enter your name. Then I'm going to have a variable of type string called name that is going to be used to capture user input using get string. And then instead of printing out hello world, what I want to print out is hello %s, where %s is eventually going to be plugged in with someone's name. So %s exclamation point, and we're going to plug in whatever we just got there. So let's go ahead and try and compile this into a-- wait a minute, what's this? So this is kind of a useful feature, as well. If you forget to-- remember that you're not going to be able to compile a program if you haven't saved the file. And what that was a little warning to me that if I left my code editor window and I switched, but I haven't saved any of this file yet. And I have that little red dot in the tab corner as well to remind you. So that's just a little pop up reminder that's useful that's part of a CS50 IDE feature that just reminds you, oh right, before I go, I need to hit Save S, Control S, and save my file. So I'll do that here. Now I can make hello2, because this file is called hello2.c so I want to make hello2. Clear my terminal really quick again and run hello2. So that's my second program now that I've written in CS50 IDE. All right, so what I'm going to do now is I'm going to turn presentation mode off really briefly, again, so I can show you some of the features that go around the perimeter of your IDE area. But you're pretty much familiar now with the basics here. We have our file tree, which now has our two files, two .c files and our two source files-- or excuse me, our two binary files. We have our terminal area at the bottom and we have our code editing main area, sort of, at top right. So I'm going to go ahead and turn presentation back off again and show you some of these things around the edge. So this CS50 IDE menu contains some things that will be mostly useful for you towards the end of the class, in particular, PHP, my admin, and web server, which will come in handy for the later portions of the class when we're doing some web-based programming. You'll be able to figure out your PHP SQL password, username, and stuff here. And to be able to check any websites that you have created and are running by going to web server here. File has the basics if you've ever used like a Microsoft Word type thing where you can create files, open them, close them, save, and so on, pretty much all of those things are there. If you have any keyboard preferences, you can alter them in the Edit menu. View, again, has a lot of aesthetics changing things, for example, the presentation mode, the night mode, where you can set the way things look. You want to do that here. Go, Tools, Window, and Support you probably will not use quite as frequently. At the top here is the version number of CS50 IDE. Don't worry if your version number is different than mine. At the time we're recording this in May of 2017, we're at version 98. But if the aesthetics of things change a little bit here and there, totally nothing to worry about. It just lets you know what your version number is. Here is the memory CPU and disk area. It lets you know if you have too much data saved in your IDE. Right now, I have plenty of room. I'm only using 153 megabytes of 5,000 or so. So I'm in no danger. But if you write a lot of code and you eventually fill this up, this is still a cloud-based hard drive, but it is a hard drive nonetheless that you're using, so you have a limited amount of space. You have here the Share icon. So the share icon can be really useful if you're stuck and need to get some help, perhaps from a teacher, or a colleague, or a friend. You can actually share your workspace and give others read and read and write access to your workspace. If you click on the Share icon, you're popped up with awesome information here. Here is the information for this demonstration workspace. And if I know somebody's username-- and you can tell, for example, that mine is Lloyd1 because that appears repeatedly in the URLs here. If you know somebody's Cloud9 CS50 IDE username, you can type that here and invite them. And they'll get a link to be able to access your workspace for read access or read and write access if you want to be able to collaborate remotely. It's a very useful feature. Once you are collaborating with someone remotely, you can usually collaborate tab here on the right. And what this will do is this will actually allow you to have a group chat. So I'm not collaborating with anybody right now, but I could write hello, for example, or have any message of any kind to any of my collaborators. And if they were also currently viewing my workspace, they would see the chat. They'd be able to participate. And so for example, if I was getting some debugging help from a friend, we could have a chat here on the window on the right and be able to help me figure out what's wrong with my code just to the left there. If you write more complex programs, the outline tab might be more useful. So really quickly, I'm just going to create a dummy function that does nothing at all. But when I do, notice that now I have gotten this little extra item in my outline. And if I click on the different portions, it will jump me to that section of the code. So as my files get really, really big, and maybe I want to scroll quickly through them, I can use the outline tab to jump to different functions in my programs. That's also pretty useful. And then finally, here on the right, is the debugger. And we're going to cover that in a separate video on debugging shortly. But know that all these features and more, if you dig into some of the other things around the perimeter or dig into some of those menus at the top, are available to you in the CS50 IDE, trying to make your experience getting started writing code in a text-based programming language a little better. I'm Doug Lloyd, this is CS50.