 Hi. Can everybody hear me in the back? You guys could always move down closer, too, if I can. If you can, here. So today is the first day of 421-521. So welcome to the class. I'm really excited that you guys are all here. Today, the main goal is to orient you with what we're going to do this semester and get you guys excited and pumped up. Are you guys excited about the class? Who's excited about the class? All right. We don't know anything about it yet, so hopefully I can make some hands go down by the end of the class. All right, so let me tell you why you're here. Do you know what he's talking about? The colonel who wants to know what the colonel is. That's why you guys are here, right? But listen to Morpheus, because he goes on. Oh, he didn't go on. So the colonel, the colonel is everywhere. You see it when you look at your laptops. You see it when you look at your smartphones. You see it when you get in your car. When you pay your taxes, when you pay your taxes online, you're experiencing the colonel. The colonel is everywhere. And operating systems are probably one of the most ubiquitous pieces of software on the planet. And actually, this is a great analogy for this course, because there are a number of different illusions. There's things that are wrong with the world that you guys have learned about as programmers. There are illusions and abstractions that the operating system is in charge of creating that you guys are unaware of. I'm not saying that this course, if you take this course, that you're going to end up being flushed out of some sort of big machine-run experiment and using life to power their ecosystem. And you're going to end up eating slop on some sort of ship that's journeying around way underground. I'm not sure. I mean, people who are returning for the course may actually sometimes, though, think that that's not a terrible description of what taking this class is like, being on board the Nebuchadnezzar. So let me tell you why I'm here. On some level, given the analogy that I've already created, you know why I'm here. Because I took the red pill. I took this course a long time ago at Harvard. There was a version of this class that's very similar to the one you guys are taking, almost identical, actually. And that was a long time ago. And this is actually what turned me from being a physics major, which was a poor life choice, but luckily, was corrected by this class into being a computer scientist. And I discovered that I really liked building computer systems as a result of taking this class. And I also liked teaching other people about it. So that led me to graduate school, where I spent a long time, built a lot of cool systems, taught this class repeatedly. And then that landed me here in front of you guys to start the process all over again. So what I would warn you is, be careful. This course can transform your life. Took this class, became a professor. Maybe this won't happen to all of you guys, but maybe a couple. It wouldn't be too bad. So let me ask you guys, why are you here? This is a huge class. It's the largest I've ever taught. I'm super excited about that. But let's have some volunteers. Why did you take this class? Anybody? What's that? Because operating systems, I like that answer. It's existential. Because operating systems. I don't know if we could do better than that. Does anyone want to try a better answer than that? That's a pretty good answer. The challenge, challenge. Oh, really? OK. I don't know what that is. But man, I can certainly come up with some. We will do that this semester. Anybody else? Yeah. To write better programs, how many of you would like to write better programs? How many of you guys are out for a challenge? How many of you guys because operating systems? Come on, everybody. That's not a question. So the first thing I want to do, we're going to talk a little bit about why operating systems are about. We're going to spend most of the day, sadly, talking about what the course is about and how it works. But this is my favorite part of the class. I want to do it early and upfront because some of these guys need to go other places. But I want to introduce the 2015 course staff. So again, your new besties. These people are going to help you if you let them. And they are going to make this journey a little bit more pleasant, a lot more fun, and a lot more informative. And for some of you guys, they will really make it possible. So I'm super excited about this. We have three TAs this year, and it's the same three TAs as last year. So all these, this group of men and women, they've all been through the drill before. They know how it works. They know what to do. So let me introduce Jinghao Shou, who's in the back. Stand up, wave. Jinghao wrote a blog about this course. How many of you have already found Jinghao's blog as a source for how to do some things? Great. Pretty much everybody, I'm sure, by next week will have found Jinghao's blog. I have Guru Prasad, Srinivasa. Stand up, wave. Guru has a code on. He's actually not that big. The code is big. Guru is not only a returning and veteran TA, but he's also a legitimate Linux hacker. Guru writes Linux kernel code. So that's pretty awesome. Maybe some of you guys will do that sometime. And last but not least, C.H.M. So Z.H.A., stand up, wave. All right. So again, so these guys are really the core of the staff. This year we have a nice division of labor. Guru is going to supervise office hours. He's not going to do all the office hours because we're going to have too many office hours for any one person to do. But he's sort of going to run that part of the class. Jinghao will teach all the recitations. I think that'll be nice because there'll be a lot of consistency to it. And Z.H.A. is going to help supervise the online grading process. So if you need to talk to somebody about one of these issues, that's a good place to start. OK, so this is awesome. So I'm not even sure this list is still up to date. It keeps changing so fast. So this year we have nine volunteers that are returning mostly from last year's class. There's also a couple of people that are students in my group that know what they're doing. So these are people that have done this and decided that for the love of this class and for the sake of future generations of programmers like you, they wanted to come back and help you guys out during office hours. So we have a long list of people. Look how small that font is. This is really great. So Jerry, AJ, where's Jerry? Stand up. So Jerry's a master's student in my lab. Jerry's a fantastic programmer. He's going to be available in office hours to help you. Yee Hong Chen. So Yee Hong was like, I mean, everyone who took this class last year who's here, these are the cream of the crop. I mean, I invited these people by going to the grading sheet, sorting them by how well they did it on the assignments and just starting at the top of the list. So you guys got people that did very well last year and they're going to be great to help you. Scott Florentino, I mean, I can say the same things over and over again, but it's all true. These guys are all awesome. They were really killer last year. Jimmy, Jimmy, slash James Mazzur. Carl Nestle. Where is Carl? There he is. Yeah. Carl is a fount of advice and wisdom about anything, but particularly about this course. Natasha Sanford. Stand up and wave. All right. Sriram, Shantaram, master's student in my lab. Ryan Smith, another killer from last year. And Mack Ward. Last but not least, these are in alphabetical order. So let's give a hand to these guys already because there's 175 of you. And thankfully, there's more than just four of us. So we're going to have some help during office hours. It's going to be great. And as this has also made clear in the syllabus, the ninjas are not in any way involved in grading or assessment for the course. They will only be doing office hours. They won't do any online grading. They won't grade exams. I wish they could, actually, because there's going to be a lot of exams to grade, but sadly, they will not. All right, so what is an operating system? Who can give me, other than operating system just being, who can give me a working, this is a new room, so I'm going to lose things in new places. They're there. Who can give me a reasonable definition of what they think an operating system is? Yeah. Yeah, so somehow we have the sense that it sits underneath other things. That it's a part of a system that other parts of the system depend on. It's a good answer. What else? What else do we know about operating systems? Yeah, a link, a layer, a mediator between low-level hardware and upper-level software programs. What else? I like to start picking on people if people volunteer. What do you know about, what do you feel? You feel like something's wrong with the world. You've had this, like, what do you feel like is wrong as a program? What do you know about the world that the operating system has created for you? Anything else? So this isn't a bad start. So my working definition of the operating system and operating system is that it's a computer program that multiplexes hardware resources while also providing useful abstractions to programmers. And these are all sort of important. So the operating system is a computer program. I think it's important to demystify what the operating system does a little bit. How many people have written a computer program? I hope so. How many people have written an operating system? So an operating system is a big, gnarly, mission-critical computer program. But it's just a computer program. It's like any other computer program. It runs. It has an interface. It does things. It executes code. There's nothing magic about it. Now, the operating system has some magic powers that we're going to come back to and talk about later in the semester. And those are powers granted to it so that it can fulfill these other tasks. So multiplexing. How many people have heard the term multiplexing before? All right, good. So multiplexing is the idea that I want to improve the efficiency of how a resource is used by allowing multiple clients to use it at the same time. And operating system multiplexing is typically done on a single machine. But a lot of the multiplexing concepts that we'll talk about can easily be extended over wider arrays or larger numbers of machines. So I want to allow multiple users to use the same underlying physical resource. There is only one cable running out of the back of your computer and connecting it to other computers. But to the programs that sit on top of it, that cable ends up looking like a lot of different things. Finally, operating system along the way is part of its job of multiplexing and also provides abstractions. Abstractions that make the underlying physical hardware or resources easier to use normally by hiding undesirable properties. There's something that I don't want upper level programs to have to worry about. I let the operating system handle it and I create an abstraction so that the upper layer programs can use it. Any questions about this definition? These are the things that we will spend the next 14 weeks talking about. So let's take a step back here. Because operating system is this program. It's this complex program. How many people think they're ever going to write an operating system in their life? Well, other than outside of this class. So everyone is going to write an operating system inside this class. But how many people think they're going to ever write an operating system for real? That's probably a pretty good number. How many people have already participated in some type of operating system development, whether it's Linux or some sort of other system? I've got a very, very small handful of hands went up. How many of you, so here's another question. Sorry, I skipped through this too fast. How many people use programming languages that program against the C API? Not even forget the operating system call interface, because the CI library usually hides that for you with some very thin wrappers. But how many people even use the C library directly? How many people write C code? Man, we've got to talk about this. Stop doing that. It's not a good idea anymore. You've heard about these other languages that are easier to use than C. But anyway, it's a valid point. So when I took this class back close to the dawn of time, this was a course that talked really about systems programming. It was really a pitch to people who had done C programming, because that's what most people did. Intro courses were taught in C because there weren't a lot of other good languages to use. Now you've got Python, and Java, and all in server side, JavaScript, and all sorts of fancy stuff. And those higher level languages in many ways are a lot more elegant, easier to use, easier to prototype things with, and even easier to build real systems with. Computers are just so fast. So a lot of universities, not UB yet, although we're working on it, have actually had to introduce a course for students like you to teach you how to write code in C, because no one does it anymore. A lot of times there's a course on systems programming, where it's like, oh, here, by the way, there's this system call layer, open, close, read, and write. We're going to go through that in this class because I think some people aren't familiar with it. But if you write a lot of Python code, which is a great thing to do if you want to get work done, you may not know about these things at all. So why are we taking this class? What's the point? Why is this course required? Here's my rationale. It is required, so maybe a lot of you are here for that reason. But let me at least try to make a little bit of an attempt at an argument that that requirement is legitimate. So the first thing is, this is how the world of computers actually works. So when you use a computer, the operating system is involved, and what you're going to find out is how some of those higher level primitives, if that's what you like to do, actually end up affecting the machine. And that's pretty interesting. Operating systems are everywhere. So probably of all the computer programs that we've written back to the dawn of computing, I'm guessing there are more instances of operating systems running than almost anything else. If not anything else, I would be hard pressed to find a program that's more ubiquitous. Every device runs some kind of operating system. Maybe it's a silly little dinky tiny one if you're talking about a little sensor mode, but it's still an operating system. And finally, this is my favorite reason. So operating systems are because they were always required to operate computer hardware, and because they've continued to be required, and because so many people have contributed and worked on these systems and responded to changing design requirements and all sorts of things, these are really, really mature systems. And what they represent is the sort of accretion of a lot of time and effort and thought and exploration by really smart, hardworking people. This is like 40, 50, 60 years worth of work that has led up to this point. And what you guys get to look at is some of the final product. And so that gives you a real good sense of how a really mature and mission critical system is designed. I mean, I'm all for the latest, greatest stuff when it comes to new programming languages and new environments and new ways of doing things and all sorts of fun novelty, but operating systems are these incredibly mature systems, and there's a lot to learn from the study. Okay, so, but I still haven't really, now maybe I've convinced you to sit in these lectures from time to time. I mean, I have to be here, you guys should come too. But I haven't really convinced you that we need to build an operating system, right? Can't we learn about one just by talking about it? Why don't we just draw diagrams of an operating system and think, hey, maybe that would be cool if it worked that way, right? And then we'll move on and we'll study another diagram tomorrow. Why are we gonna build an operating system? Why are we gonna go through this incredible, tedious, laborious, hard process of writing code that has to fulfill some of these operating systems requirements, right? Mainly, all these three reasons really boil down to variance on, because it's hard, right? Because it's hard, you're actually gonna learn something from doing, right? So, this, for a lot of students, this course is one of the first times, and maybe if you take a distributed systems or you take a databases before other courses where you've done big projects, you've had to do some of this. But there are projects where you can sort of sit down and hack it out in a few hours, and it doesn't really matter if you had any idea what you were doing when you started, right? You make a few mistakes, but it's not a big deal. With operating systems, what we really try to teach you is how to design code before you actually start writing it. Because if you don't do that, it's very easy to find yourself in a terrible mess, right? That's entirely of your own creation. And it's very sad when you get to that point, right? Because you usually spent a lot of time and energy and it's like you're going into this long maze and finally you realize you're in a dead end, right? And you're thinking, this is terrible, right? How did I do this to myself? My code still doesn't work and I have thousands and thousands of lines of stuff and I don't know how it works together, right? So design becomes really important here and we're gonna really try to push you guys to do that. Difficulty, again, this is hard, right? This is not a forgiving programming environment. Errors have pretty catastrophic consequences and debugging is very difficult, right? So most of the code you guys write, it crashes, you fix it, you take the output from the interpreter or the compiler or the runtime system and okay, there was an all pointer exception there. When you're the kernel, you can do bad stuff and no one will notice for a long time and when they do notice, something really weird will go wrong, right? It was like those, you guys remember the movie Matrix, right, the flaws in the Matrix, right? Like I saw the cat again, right? Like that's the type of stuff you could do to programs, and that's gonna really mess with them but it's also really hard to debug, right? It's like, why did I see that cat twice? Nobody knows, right? That's just, that's a bug in the Matrix, right? It's a glitch. And again, debugging, right? So when you guys have problems and you will, we're gonna really try to sharpen your debugging skills because the type, the model of debugging you guys have frequently done is not conducive to operating, right? You know, I write code like this all the time and I'm not saying there's anything wrong with it, right? You prototype something and then you run it and it breaks and you fix it and you run it, it breaks and you fix it, you run it, it breaks and you fix it and you just iterate in that loop till it works, right? How many people have done that before? How many people pretty much do that every time, right? It's not a bad way to get things done, right? If you try that with some of these assignments, see you next year, right? Like you will still be working on some of them, right? Because it's just, you have to think a little bit more before you get started, right? Any questions about goals, right? We'll make this a little bit more formal in a minute. Okay, so the way I've set the course up is essentially it's half and half, right? So in lecture we are going to do, in lecture we're going to talk about concepts and then you guys are gonna go out and build some of those in real systems, right? So learning by doing, right? We have components of the course that assess your conceptual ability to think and reason about how systems will work and then we have about half, so it's about half and half. Half the course is this, exams, basically exams, the midterm, the final, and a little preterm exam we give on Wednesday, right? And then 50% of the course is programming assignments, right? I will just say this upfront, we talked a little bit last Friday about bugs from the course last year. One of the things that people will always complain about with this class and it's a problem I don't know how to fix is that the lectures and the programming assignments are going to get out of sync, right? And that's gonna happen pretty quickly. We will be talking about file systems and you will still be working on your virtual memory assignment. I just don't know what to do about that, right? If I had to talk about virtual memory for as long as you guys work on assignment three, I'm not sure what I would say about it by the end, right? Unless we wanted to review like every version of the Linux virtual memory system in detail, right? So that, particularly toward the end, we'll get a little bit ahead of ourselves, but that's just, again, that's a known flaw in the course and I don't know what to do about it. So here are my goals, right? When we're done with this class, I want you guys to be able to understand the abstractions that are supported by modern operating systems. I want you guys to be able to describe how operating systems multiplex resources, right? How they do this safely and efficiently. And finally, I want you to be able to look at historical and emerging system, sorry, assistant, finally. I want you guys to be able to analyze operating system designs and think about why they evolved because there's this very beautiful relationship between hardware and the properties of hardware and how operating systems have been designed and that sort of back and forth has been going on for a long time. It's really interesting to study from the perspective of somebody who wants to write good programs. The way that we know whether you're learning this stuff is go to recitation, if you can, sorry, they're close to graduate students, we'll come back to that. Come to class, right? Come to class, raise your hand, ask questions. This is the only way whether I know whether anything is being transmitted out into the audience, right? And the way that we test you for mastery is by giving you exams, right? And we have lots, I think the exams in this class are awesome, I've also never had to take one, so. But we have lots of examples of exams online, so if you guys want to feel for what the course is like from the exam side, we I think have now three or four years worth of midterms and final exams that are up with solutions, right? Sadly, this makes it, every year, it gets harder and harder to write exam questions, right? So eventually I'm gonna have to stop doing this, but for now everything that we've done is up. All right, so here's what we do conceptually. We're gonna start out by talking about what the abstractions that the operating system provides are, right? And again, this is necessary because a lot of you guys, I don't think, have really programmed deeply against the operating system interfaces, so we'll talk a little bit about what the OS interface is, right? The big part of the class are three units on abstraction and multiplexing. So we look at three different resources. We look at the CPU, we talk about how does the operating system abstract and multiplex the CPU? We talk about memory, same thing. We talk about disks and file systems, same thing. So we're taking the same perspective, abstractions, multiplexing, and we're looking at different hardware resources and looking at how different solutions have emerged that are sensitive to the unique properties of those resources. We'll talk a little bit about virtualization because virtualization, once you think you know about operating systems virtualization really just makes your head explode. It's pretty awesome stuff. And then this year I think if we have some time left over, which sometimes we do, we'll talk a little bit about networking because networking is another interesting case study in how the operating system abstracts and multiplexes a particular physical resource. Okay, so again, a 10 class. If you wanna learn the concepts, come to class. It's a two o'clock, it's right in the middle of the spine. I will try to make things as interesting as possible, but please do come. I like to play some music when I come in. That's how I am. So if you wanna hear the song of the day, you gotta get here at noon, not noon. You can get here at noon, you'll be early enough. But you'll also hear a lot about distributed systems and other stuff, right? But if you wanna be here for the song of the day, get here at two, okay? And I'm very flexible about class time. I don't really care if I get through the material that I've set up for the day. It doesn't really bother me if we slow down. People wanna ask questions if there are useful tangents that we can get off on if people wanna talk about stuff during class. I don't really care. There's enough slack in the calendar and in the schedule that we'll do fine getting through the main core concepts, right? So don't feel like there should be no barriers to you guys asking questions, right? If you want references, so I've never assigned a textbook for the class. The book that I suggest you purchase or obtain in some other manner would be Modern Operating Systems by Andrew Tannenbaum. This is sort of one of the classic texts in this area. For help on the programming assignments a lot of people who haven't done a lot of C program may find Kernighan and Richie to be helpful. This is the classic book on how to write C. I think the second edition came out in like the 80s, right? It's not a lot. I'm just making that up, right? But look, not a lot has changed in the world of C programming. This is not a very big book, right? But in all cases, the material that's presented in lecture takes priority over things that you would find in a book or online, right? So what is in my notes and my slides is what I expect you guys to know when it comes exam time. Okay, so the programming learning objectives, right? So when you finish this, and this is the other half of the class, I want you guys to be able to design and implement well-structured systems software. We're gonna learn about how to use synchronization primitives. You guys are gonna build some synchronization primitives and then have to use them. And then you're gonna have lots of chances to use them later in the other assignments, right? So that's a little bit of a specific thing that you learn in this class, is how to do multi-threaded synchronization in a pretty important environment, debugging, and a little bit on performance testing. Sometimes we don't always get to number four, right? But I would like, we will talk, we have a unit on performance testing. We'll talk about at least how to think about analyzing the performance of the systems that you build. Okay? All right, and we will test you through a series of cumulative and incremental programming assignments, all right? So let's go through the assignments briefly. How many people have reviewed these online already? Okay, about half of you. I'll just go through them quickly. The due dates are another change. Every year, I feel like, and my staff always agrees, that people don't start assignment two, which is one of the first really hard assignment. They underestimate it and they don't leave enough time for it and then they just get, you know, I mean, last year the class practically begged for mercy and I had to give them like an extra month or something like that, right? So it's like either a blood bath or it's just, you know, it turns out badly for people, okay? So, but I don't know what to do about that. So every year I fiddle with the deadlines. This is deadlines for this class, version 4.0, okay? So let's try something different, right? The way this is gonna work, the first two assignments, the assignment zero is extremely simple. Zero is not a misnomer. It really is assignment zero. It's not intended to be hard. Just get you familiar with the pattern that you'll use to submit assignments and get your environment set up, okay? Assignment one, you have to do a bit of programming. We asked you to build some things and to implement a few little synchronization problems, right? These two assignments are now due together on, no, that's not right. No, it is right. No, it's not right. It's February 13th, sorry, this is terrible. It's like, wow, I gave them a month, like a month and a half to do these two little dinky assignments. No, no, sorry. This is right on the website and if it isn't, it'll be fixed right after class. February 13th, okay? Or two weeks from Friday, right? So you have three weeks minus last weekend, okay? Please get started on these assignments, right? I did this on purpose, okay? I want people to start working on this. The drop deadline is on Monday. This hopefully will, this will get you guys going out of the gate at a reasonable canter so that you have some idea whether they want to take the course and whether or not you're enjoying what you're doing and then we'll get you into assignment two nice and early. So sorry, February 13th, not March, okay? And that would be awesome if that's all it was, right? All right, so yeah, you thought you were done, then there was assignment three, right? So much less assignment two, okay? So these are the fun assignments, right? This is assignment zero and assignment one are really just warm up, okay? And we're gonna push you through them pretty quickly this year. This is where things get good. So what we've done is, I wonder, yeah, okay. So these are right, right? What I've done this year for the first time is that we will allow you to submit the code reading questions and the design documents for these assignments for one week after the previous assignment was due, okay? So if you've looked at the assignments, you'll see that they have two components. There's some questions that we ask you to get you guys reading the right parts of the code base and we ask you to submit a design that explains how you're going to complete the assignment, okay? For these two assignments, you will have one week to do those questions and that design document, all right? And then multiple additional weeks to actually complete the implementation of the system, right? I think for assignment two, it looks like you have three weeks for assignment two, three weeks to do the implementation, four weeks total, one week for the design and the code reading questions, three weeks for everything else. For assignment three, it's one week for the design and I think six or seven weeks for the actual implementation, all right? So again, deadlines version 4.0. We'll see if this works, all right? Sandwiched in the middle here between assignment two and assignment three is spring break, okay? So I do not plan on moving the assignment two deadline. I know I did this last year and maybe you think I'm like that guy who always says that every year and then when push comes to shove and it's two days before and nobody's done the assignment, he's like, oh, okay, but not this year, right? I promise it's my new year's resolution. I will not move that deadline, okay? No means no, right? It's not happening. And if the entire class gets run over by that and everyone needs to come begging for the assignment two solution set with 50 points in hand, that's what we'll do, right? So please don't do that, right? Assignment two is important. It's pretty fun. And assignment three is really the assignment that's the most fun to do in the class, right? So OS 161, you guys learn a little bit more about. This is the instructional operations of environment that we use to do these assignments. Everything runs in this little MIPS simulator and OS 161, I mean, I like having this here because I wanna give a little shout out to David. This was an enormous amount of work. He's been maintaining the system for 13, 14 years now. And it's a really nice compromise between what some classes do, which they have these really weird things where you write little parts of a pretend operating system but they actually run in user space. But that's not interesting, right? Because you don't get the real gross, terrible to debug problems that you have when you run a real operating system, right? Or you can try hacking on Linux, right? And good luck with that. We're gonna ask Guru about how friendly Linux is for people who are trying to build things. And the problem is Linux has all these features already that you guys are gonna build, right? So it's not as interesting to be like, okay, we'll go implement a new stupid scheduler for Linux, right? No one cares, right? Linux has a VM system, right? It's probably more lines of code than your entire OS 161 code base, right? Hacking out a mature operating system makes it very, very difficult to learn, right? So this is a nice middle ground. Okay, this course is hard. How many people have heard that the course is hard? All right, this is good. I'm hoping, given that there's more people in the course than I expected, but you guys seem to know that the course was hard. That's not gonna come as a surprise study, right? You know, building real systems, particularly complex systems, takes time and energy, right? And I'm not going to sugarcoat it. Every year, this is what happens, right? Every year, you know, I get the reviews back for this class and we get these incredible marks across the board except in one category, right? One category is the only category where year after year, we are below the department average, right? Which is workload is appropriate, right? And I find that frustrating actually because I would argue with the definition of the word appropriate, right? Okay, this course is harder than other classes, right? But you're doing something that's a lot more interesting and a lot more difficult, right? So it is going to take work, right? I'm not gonna lie about that. However, when people finish, they usually seem to find that the class was worth it, right? Very nice marks on this. And I would point out the fact that we have nine people here, seven of whom took the class last year and not only survived but are back and actually want to help you guys out, right? Which I think is really awesome and a testament to the fact that this class can be a really good class. Yeah, again, you know, I don't know what to say. Crying man says it best, right? Like learning is not something that happens automatically, right? Like you have to actually do some work. The counterpart to the course being hard is that I have done me and the staff and the ninjas have always done our best to put as many resources in front of you as possible, okay? That's why we automated the grading. That's why we try to do everything online. So it's easier to do. That's why I have a bunch of volunteers, right? So I'm gonna put a huge daunting task in front of you, right? But right next to that, I'm gonna put as many resources as I can humanly provide to help you guys with it, right? So I want those two things to go hand in hand, right? We do more office hours than 115 and 116, way more, right? And he's got more students, right? So we give you guys a lot of help, okay? But please take advantage of it, right? Take advantage of the forum, come to office hours. So Snowport is holding 20 office hours with three or four ninjas there constantly if no one comes in, right? So please take advantage of the resources but we are dedicated to helping you with this, right? So big task, lot of help, right? Okay, and again, I mean, this is just me bragging about my own class so I'll just skip that. Any questions about the course content, assignments? Anything like that, yeah? Yeah, I know, I know. Me and the website are disagreeing about it. I'll get back to that. It will be once. All right, so the website is up. On every year, I'm just a little less impressed with the website and more embarrassed by what's behind the website, but whatever, it's working. Everybody crossed their fingers. No, it's fine. I think it'll be good. But get started, right? I know there are people that have already created accounts. I suspect people have already found partners. Get going, right? Like, there is no delay on our part. If you're having problems, let us know, right? But I think everything's working at this point. And, you know, part of the resource library that we put in front of you is StuffOnline, right? So we have documents a little bit about how to use Git. Some things about Eclipse for people that are really wedded to the idea of using Eclipse for whatever reason, and some other tools, right? So this is available up there. And again, you have less than three weeks to complete the first two small assignments. So please don't dilly-dally, right? Okay, grading. Like I said, half and half. 50% of the course, concepts, right? 5% for the pre-turb exam, I'll come back to that. 50% for the midterm, 30% for the final. There used to be a 10% participation grade. I got rid of it. I always gave everyone 10%, right? So I said, this is dumb, right? I mean, how about this? 100% of your grade is for participation, right? Participate by learning, right? By doing the assignments, okay? The other 50% is the programming assignments. And every year I look up at that, I'm like, I hope it adds up to 50 and it does, right? So, good, okay? On Wednesday, we are gonna have what we call the pre-term examination. Pre-term examination is ungraded. It is free points. If you don't come, what we'll do is we'll just scale your midterm and final grades to fill in the extra space. So if you don't wanna take it or you're traveling or something like that, that's not a big deal. The idea is I'm collecting data about what students know when they start the class and eventually in the distant future, when I have free time, they actually try to do some data analysis comparing how well students do in the course with what they knew when they started, right? It also gives us a chance to rehearse our exam procedures, right? Which are an enormous amount of fun, you know, and we'll have a large group of people here who will have instructions tomorrow about what to do, but we take exams and the sanctity of the exam very seriously here and you will find that out on Wednesday, okay? So Wednesday, we have a 15 minute exam. Some of you guys will finish in five minutes. It's not graded. You turn it in, you get 5%, yeah. If you show up and write your name on a piece of paper, you will get 5 percentage points, right? So there's my participation, right? There it is. Come and get it. All you have to do is show up once and write your name down on a piece of paper. What's that? The material, so again, there are no, the preterm exam, there are no right or wrong answers. It's just a concept inventory. I'm not gonna ask you about like, you know, I don't know, hydrology or something, right? It's related to computer science, end of this course, right? But it's kind of like, what things do students know that might relate to the material in the class and help them do well, right? Does that answer your question? Cool. All right, so the, I know we're almost out of time. Let me just finish up. What is it? All right, I've got five minutes. Okay, so the grading in this course, many of you guys have heard about this. The implementation and a few other parts are graded by a computer, okay? That means that you are welcome to submit those parts of the assignment as many times as you want, right? If you don't like your grade, you can fix something and submit it again. If you do like your grade, you can stop, right? And move on to something else, right? And one change we've made from last year, which I sort of alluded to before. In the past, we gave people two chances on the code reading and design documents. We're not doing that this year. Essentially, basically what happened is the course size doubled, but the number of people I have to grade did not, right? So we found that factor of two somewhere, which is in the number of times you can submit these questions. And it was causing other problems, right? So just, the code reading questions are not hard, okay? And the design documents are gonna do fine on, particularly if you talk to a TA beforehand and get some feedback, okay? So, but these will only be submitted once, right? We're only gonna grade them once. Okay, so all the assignments in the class are done in pairs. One of the more important things about this course is finding a partner that you work well with, okay? And note that we do not, we will break up partnerships when things go wrong, but we will not preemptively break up a partnership, right? So if there's some weird circumstance, like last story I had someone who came to me who said, I've already done most of the programming assignments. Okay, right? Well, that person's gonna work alone, right? You guys are all thinking, I wanna be their partner, right? So, but normally we're not gonna put you guys by yourself unless there's some very weird condition. And I want to, does not qualify, right? Who cares? You can't flummox the automated grader. It's not really smart, but... And again, the assignments are commutative, so you're gonna continue working with your own code. I will distribute a solution set for assignment two, but the payment is steep. The payment will be a pretty large chunk of the points that you can earn on assignment three, right? Last year we did this and there weren't very many people that took me up on this offer, right? Because I want you guys to do the assignments, right? And to work with your own code. All right, let me get through this. Don't email us, don't email us, don't email us, don't email us, right, basically, right? Use the forum and don't email us, right? Unless it's like some administrative thing, right? Do not email us with any sort of question that's related to the course content, right? And do not under any circumstances email any of the course staff directly using their Buffalo addresses. That is totally not okay, right? They have received their instructions from me, which is to ignore any communication that they received that way. It's not fair to the rest of the staff. It's not fair to the rest of your students, okay? Do not do that, right? You just won't get a reply. Maybe you'll think email is broken, right? Email's not broken. So, Jinghao's doing the recitations. Unfortunately, again, apparently we don't have room for graduate students in the recitations this year. This bothers you, you know who to talk to. I wish that we could have some more recitations scheduled, but this is what we're doing, right? One of them is at 8 a.m. There it is, so everybody should be free. So we're gonna do a lot of office hours every week. This is one of the best ways to get help in the class. You'll hear more about that. Please fill out the doodle bowl. How many people have done the doodle? All right, please do the doodle. At some point, we're just gonna close it and hope that the people that have done it are representative of the entire class, right? So if you have preferences about when office hours are held, please tell us, okay? All right. When you work in pairs in this course, you're jointly responsible for work that's turned in, okay? If you guys plagiarize code, you're going to fail, right? That's what I do to people who plagiarize. I'll put these slides online. I wanna get to the good stuff, right? Because I have to talk about this every year. I don't like talking about it, right? If you guys exchange code with yourself, sorry, with anyone else who's not your partner or the internet, you are cheating, okay? And some of you may have heard, I have a very simple policy on cheating. When you cheat, you fail the class, period, right? And that's really to make it possible for the students who are here who follow the rules to feel good about what they've accomplished and to feel like the mark that they earn is fair, right? I don't have any problems giving out all A's in this class. If everybody did all the work and did well, I would give 100% of you A's, I don't care, right? I have no need to create some sort of artificial distribution. I want you guys to do well in the course, right? But the sidebar of that is I don't want people to cheat, okay? So here's the rule, right? I will find you, right? If you cheat. I mean, I don't know how good we are at it, but every year we have a few people, right? So we're not coming up empty, okay? We use MOS, MOS is very fast, MOS is very accurate. We run it on every submission. We feed in like all sorts of stuff, right? Every assignment submitted by every student who ever took the class before you, right? This is the fourth year I've taught this class. So every year I've got more stuff, right? Sitting around, right? See my think, ooh, I can get a solution from 2000 and whatever, I know, 2010. No, not gonna happen, 2012, I guess it'd be the first year, right? We, like, MOS is good, right? And we will find you, right? And when I do, I get mad, right? Actually, I really don't get that mad, right? I just get, I just do what we do, right? Which is we fail people who cheat, right? So, cheated in 421, got enough, okay? I don't always cheat, but when I cheat in 421, I get enough, right? Angry cat, don't care, right? Very cute, I have a cat now, doesn't matter. I gave angry cat enough, right? Tom Brady, didn't deflate footballs? Still got enough for cheating, okay? In this course, Mother Teresa? Oh, come on, Mother Teresa didn't cheat, right? All right, and on the other hand, this guy didn't cheat, runs own home business, right? Started home business, okay? So, look, this is a good course, right? Don't mess with us when it comes to cheating. That's the one thing that'll just sort of change our entire relationship, and I don't want that to happen, okay? Questions about the collaboration policy? Also, every assignment, if you're confused, every assignment starts with a long list of things, both to do, right? Good ways to collaborate, right? Ways to collaborate that are not very useful or effective, and then things that will get you an F in the course, okay? Just a couple of last notes. Inclimate weather, if Buffalo Public Schools are closed, we will not have class. Obviously, if the university is closed, done, right? But I live downtown, so if there's a blizzard, keep, you know, tune your radios, listen for Buffalo Public Schools, that's what will cause me to not show up, right? This is an awesome picture of Yee-Hong, right? Yee-Hong will show up for his office hours, right? You know, look at that. Even in the frozen tundra, okay. Any questions about policies? Sorry, I didn't time things as well as I usually do this here, I wish I had a little more time. That's a couple of notes before we totally wrap up. If you want to submit music requests, I welcome that. Everyone has one request token per semester that has to be redeemed in person during my office hours, which are from 11 to 1.30 on Wednesdays, right? If you absolutely positively can't make my office hours, we can come up with some sort of compromise, right? That's the way, if you want to put in a music request, has to be done in person, okay? Yeah, Jimmy. Yeah, I'm getting to that. Other little notes. So, UB has some problems with names, right? Particularly with names with foreign students, right? So if you think that UB thinks your first name is a period, right? Please let us know, right? Because every year, and I know it's true for some of you guys out there, your official first name, according to UB, is period, right? And when I print off exam booklets, that looks weird, right? So I would like to get your name correct, right? If you think that UB has messed up your name, you know, please let us know and we will fix it, okay? All right, so my office hours on Wednesday from 11 to 1.30, recitations will start next week, okay? So the first recitations will be next week. However, we will try to start office hours later this week so that you guys can get started, right? It really depends on the doodle poll, all right? Wednesday, please bring your UB ID car and a pen or pencil. Fine.