 This room is crowded today. I'm sorry about the room. I'll apologize up front. This is a terrible, crappy room. There's other adjectives I could use that probably get in trouble for saying, but I don't like this room, but here we are. Welcome to the first day of 421-521. I'm excited, as I always am, about this class. It's nice to see so many people here. Maybe we can get a bigger room. How about that? It's so weird. I've taught smaller classes than this in bigger rooms that you'd be, and the first time I taught this class there was 100 people in it and it was in this room and it was still crappy, and now there's 170 and we're back here for some reason. How they do the room allocation here I don't really understand, but maybe we have a case for moving into Knox or somewhere in my room. Hi, I'm Jeff Chalon. I teach this class. I do other things here. So the reason I'm teaching this class is because I took this class a long time ago now in undergraduate years and graduate student years, so that was back in distant prehistory, but this is the class that really sparked my interest in computer science. This is the class that sparked my interest in computer systems to some degree. I think it's the class that gave me a feeling of what it meant to be a hacker and be able to build things and do things with computers, and that's a really interesting, exciting, powerful experience and I hope you guys are in for the same thing this semester. All right, so in more detail, I took this class in 2001. Wow, that's 15 years ago now. 16 years ago, yeah. So 16 years, that's a good computer science number. I was taking this class at Harvard and I wasn't a computer science major. I had taken some programming courses. I knew I'd like to do it, but this is the class that really sort of launched me to where I ended up being and I also really enjoy teaching this class. That's one of the things I'm really happy about doing this semester among a number of other things that I'm unhappy about. So as a graduate student, I was involved in teaching this class a bunch of times and now I'm teaching it to you. So this class has a long, venerable history. It's produced a lot of excellent hackers. It's produced a lot of excellent computer scientists and you guys can count yourselves among that group. So anybody who's here, I'm sure that some of you guys will decide that it's not in your best interest to continue this semester with this particular course with me and then you'll take it next year with somebody else or whatever and that's fine. I want you guys to make a good decision about whether or not this course is right for you and that's primarily what today is about, is talking about that. But I will guarantee that you guys can do this class. People that are here in this room, if you put in the time and effort and you take advantage of the fantastic course staff that we have and the resources that we put at your disposal, we will help you do this if you are committed to doing it. Now some of you will decide again, you'll get into it and you'll say, you know I don't really want to do the amount of work that's required or whatever but my commitment to you is that if you have really any sort of background in computer science and know how to type and use a computer and what a computer is, we will do our best to make this course possible for you. We will put in the time, we will put in the energy. If you guys reciprocate that, you'll do okay. You'll learn something, you may not get an A. I don't know but you will certainly become a better developer, you'll become a better programmer and those are skills that you'll carry with you as you go on to do other things. All right and this course can be transformative. It can transform you into someone who can get a job. Maybe that's something that you're interested in. How many people are interested in that sort of transformation? Yeah, me too. It will transform. I mean I will say I'm really happy that I have transferable skills at this point. So like all the work I've been doing on this for years, I'm like at least I can hack. I mean I may not be able to get along with people but at least I can program so. All right so this class may transform you into a PhD student. There are certainly students here or some of my students that started in this class and went on to work with me. Hopefully this class will definitely transform you into a better software developer. That's part of my core goal for the class. By studying operating systems which are these beautiful examples of really mature solutions to a difficult design problem and by doing a lot of programming yourself. By putting a number of different hours under your programming curve. Some of you guys may have heard me talk about this. So how many people here want to be a better developer? Okay, let me tell you how to do that. Write more code. It's not complicated. It's just not. The more hours you put under the curve, the curve goes up into the right. So if there's somewhere you want to be, if there's some sort of programming problem you want to solve, you have to spend the time writing code. Unfortunately all those beautiful algorithms and fancy artificial intelligence approaches and all that stuff that you learn which is really cool. If you can't build it, who cares? You're like a person with a map and who wants to go somewhere and has some great ideas about this wonderful journey but there's no engine in your car. So you're not going to get anywhere. You have to know how to hack. Sorry, that's my experience. You may feel differently. You may think that you're gonna exist in the world of pure ideas and people who learn how to program will just magically appear and help you do these magical things you wanna do and then when it comes time to distribute credit they'll be like, oh, well, it was your idea. We'll give you like half the credit. Talk to Mark Zuckerberg and ask him how that worked out. Well, actually I shouldn't say that. Talk to those Rower people or whatever. Ask them how it worked out. Ideas are cheap, implementation is expensive and you guys can get better at that and it'll just, it makes things fun. You get to the point where you think, what do I wanna work on? My problem is I have too many things I wanna do at too little time. Hopefully we can get you there as well. Okay, so anyway I took this class. I became a professor. I spent a lot of time and energy building this class. Got myself fired. Not, you know, so you can decide how you want, you know, there are certainly mistakes that I have made. We'll talk about them later that you may not wanna repeat. Okay, by the way, this is interactive. So if you guys have questions, concerns, you just wanna speak in a room like this with red chairs because you've been dreaming about that for a long time. I don't care. All right, so why are people here? Why do people take this class? This is the interactive part of the class. Voices from the audience, yeah. Okay, that's an interesting reason, yeah. Firstly it sounded really interesting and partially I heard you got fired and I really wanted to. Awesome. How great you are. Great, great, okay, that's interesting. We all wanna graduate. Yeah, that's right, it's a requirement. Yeah, not for long, happily, Ed. Yeah, it will. Yeah, use a computer, yeah. I heard you were talking about like pain. Oh, all right. Of course, again, I hope it's not painful. I mean, well, anyway, hacking is painful. I've just done a week of hacking, I feel terrible. I was up really late last night and I'm like, why do I do this to myself? You just wanna do things well and once you get good at it, it's hard to stop. Okay, so before we get into the details of the class, let me, this is the most important thing that I'm gonna do this semester, which is introduce the core staff to you. Every year, I'm gonna admit something to you that I probably wouldn't admit to very many people, but I watched The Bachelor and The Bachelorette and now sometimes Bachelor in Paradise too. I don't know, anyway, it's a mixed reaction here. I heard someone who seems to watch The Bachelor with me. But anyway, so on The Bachelor every year, they're like, this is like the most dramatic season ever. And of course it's not, it clearly can't be because at some point there's a limit on how much drama you can have. But I actually do think this is the best core staff that we've ever had for the class. And these people are critical. These are the people you're gonna be spending time and energy with. These are the people who are gonna be providing support and help and a shoulder to cry on and they're gonna kick your butt sometimes. It gets you in gear and gets you working on stuff. Like I'm one person, if I had to teach this class by myself, it just wouldn't work at all. And I've done everything in my power to try to put as many resources as possible at your disposal, but this is one of the biggest and most important ones. All right, so the official teaching assistants, we have many layers of core staff. It's like an army, you know, there's hierarchies. So the official teaching assistants to see are Ali, who's in back with a camera. Ali was a teaching assistant last year, so he knows everything about the class. Carl, Carl Nussli. So Carl has been involved in the class in some way for a long time, right? Whether it's just being, you know, offering wisdom and advice or helping in office hours. So Carl's gonna be involved in official capacity. And then Vicki Zango, I'm really excited about this year. She took the course last year. She did really well. She's back to help you guys out. So these are the official, you know, university blessed teaching assistants. So they're gonna have to do things. They're gonna hate this, like grade papers and stuff like that, because I can't really have volunteers do that. They will also teach recitation into office hours. So you guys will see plenty of these three people. And they are awesome. This is the best, this is the first year I haven't had some sort of like random person that got assigned to the class that knows nothing about it. I'm like, what do I do with this person? I don't know. These people know what they're doing. So that's great. All right, so now the ninja staff. So this is a partial list of volunteers from last year who have decided to come back and help you guys out a little bit with the assignments. So you can decide how that makes you feel about the class and what you can get out of it. We have quite a few ninjas this year. And actually this list isn't even complete. I think we're in the still in the process of recruiting more. Projesh, Grant, Rob, Zach, William, Meg, Matt, Sriram, Adish, Ben, Timothy, I think that's it, right? So 11 so far. And this list will probably grow by at least a couple more. Some of these people will be doing two more. Carl says I missed a couple of people who? Okay, cool. Well anyway, more people, good people. These people, most of these people took the class last year, some of them took the class a year ago. Some of them will be here in person. Some of them have real jobs building cool pieces of software in the area. So they're gonna be doing remote office hours or maybe they'll schedule some at night or maybe they'll schedule some downtown if you guys wanna go check out the incubator or something like that. Anyway, but these people will be around. And the goal here is to put lots of bodies next to you guys as you guys are programming, working on assignments so that you can have help. That's part of my contract for the class. The class is really hard. And in exchange for you guys working your butts off, I try to put a lot of resources at your disposal to get help, okay? So that's the agreement that we're entering into here. Okay, unofficial teaching assistant. So there's a couple of my students that are gonna be sort of helping out behind the scenes. You can kind of think of them as like tier two, tier three support, you know? Like if something needs to be escalated to a supervisor or these are some of the people that would get involved. So my student Scott Hasley is fantastic. He's the one who built this tool called Test 161 which you guys will become intimately familiar this semester. We're doing a little bit of feature development this semester with Test 161, but it's mainly done. And that's pretty exciting. So it's kind of ready out of the box. He'll be around, he'll probably do some office hours. Guru Prasad, my student is, you know, obviously both literally and figuratively, the OS 161 Guru. He knows a lot about the assignments and he's done this for a long time. He'll probably be in office hours a couple hours a week. And Jing Hao has been involved with this class even longer than these guys. And he's kind of the ultimate authority if we need help on stuff like that. I'm not sure you'll see these guys too much during office hours but they'll be around from time to time. All right, any questions at this point? Talk about staff. Okay, so let's talk about what an operating system is. So an operating system, anyone want to venture a guess? Operating system, it's like this fancy word. It's gonna throw you off your game. It's gonna make you think it's really confusing, yeah. Okay, so that's what it does, but like what is it? What is it? It's a computer program. That's all it is. It is no different in that respect than computer programs that you guys have written in the past. It has some special responsibilities and it has some special capabilities because of how it's loaded and how it interacts with other programs. But fundamentally operating systems are just another computer program. So you're gonna write computer code to implement an operating system. It's not necessarily that different than writing code to add pigs to a barnyard except it's actually interesting and fun and useful in education. All right, so it's a particular computer program that has specific responsibilities. So on the computer it's responsible for multiplexing hardware resources. We're gonna come back to this. This is just an overview. And also providing useful abstractions to applications. So the goal here is to make it a little bit easier to write applications that run on top of hardware and to make sure that those applications run safely. They don't interfere with other applications on the system. They can't crash the whole computer, et cetera. You guys probably aren't old enough to have sort of lived through, you guys I think were born into the era of at least semi-stable Windows computers. So you don't really appreciate some of this because I came up in the area of semi-unstable Windows computers. It's like eras of time, right? There were the super unstable Windows computers that barely worked and then for a while things got okay and now, I mean how many people have seen a blue screen of death on their machine? Oh wow, okay maybe we haven't left the semi-stable Windows era. So the point is that to the degree that operating systems do these things well, programs run quickly and the machine is very stable. To the degree they don't do things well, you get errors, you get reboots, you lose data, people are unhappy, stuff runs slow. But the OS again is just another computer program. I want you guys to just kind of come back to this when things get confusing or weird or when you're sort of lost a little bit. It's just another computer program. It's not different than the other computer programs that you've used. It has different features, again, for specific reasons but it's not fundamentally different than other things you guys have written. If, you know, important. It's an important computer program. So multiplexing allows multiple people, programs to use hardware resources efficiently and simultaneously sometimes and abstractions simplify programming on hardware. So abstractions provide ways of utilizing hardware that are distinct from the underlying realities that hide parts of the underlying realities of the hardware itself. So for example, a file is an abstraction. A disk block is a hardware reality. Files have all these really fancy features that disks lack and those features are provided in software by file systems which we'll talk about later in the semester. All right, so, but here's the question. So, you know, probably the best answer for a lot of you about why you were taking this class although I appreciate people that wanna like tinker with low level hardware is I'm forced to take this class by the UB requirements, right? So how many people like that's really what's going on here? It's okay, it's fine, I mean, I understand that. I actually voted to get rid of this class as a requirement. So if you don't like the fact that you have to take this class, you know, you're in a club with me. So anyway, what is this class for? So how many of you actually think that you're gonna modify an operating system in the future? How many people think like that's your career goal is to work on Windows kernel development? How many people actually like wanna do that for a living? Okay, there's like five, right? Maybe 10, I'll give, you know. So how many people have ever actually used the system called API? All right, raise your hand. If you don't know what I just said, you haven't, right? Okay, so maybe like 20. How many people write code in, how many people would start? I'm gonna ask this question, I'm gonna turn around and look the other way, okay? Because I don't wanna know. How many people would actually start a new project today in C? I'm just closing my eye, okay. All right, I hope that there are no hands up. I'm just really hoping that there are no hands up. Because C is a terrible language and nobody should use it to program anything. So why are we doing this? Why are we, this seems like a terrible idea. We're gonna study operating systems, which is this piece of software that no one interacts with directly, no one is gonna ever work on, and we're gonna program it in a dead language that's super frustrating and irritating. In the 1960s and 70s, there was this long list of things that C was good at. Now the list is shrunk to like one thing, which is introductory operating system course assignments. That is a good use for C, nothing else. So why are we doing this? So let me try to motivate the class a little bit differently. Operating systems, one of the reasons that so many people will not work on operating systems is because they are so mature. So this is the beauty aspect. This is a really well-developed piece of software. This is your chance to study kind of like the great masters of software development. Things like Linux, things like Windows. These are computer programs that have been developed by really, really smart people for decades. And they are really good at what they do. And they have to make really, really interesting trade-offs and they have to make those trade-offs really well. So the goal of the course from a software development point of view is to have you come away with some design principles and ideas that you can take and apply to your own software projects, which will not be in C, which will not require the system call interface, blah, blah, blah. That's part of my goal. My part of my goal is what can we learn from operating systems that'll assist us as software developers. Obviously, operating systems are also just part of reality. It's actually how your computer works. So from the perspective of being a scientist, the scientist part of computer scientists finding out about how the world works, the world of software. So this is an important part of it and you guys will learn more about it this semester. The reason to program computer operating systems really just boils down to the fact that it's hard. It's just hard. The design requirements are complicated. The amount of software you're gonna have to build is pretty significant. And the debugging tools are limited. You have to deal with multithreading. You have to write code in C, which is a miserable language. It forces you to do all these things that you don't wanna do and shouldn't have to do. And this is really the reason behind the development part of the class. If you can write good code in C, if you can write really, really nice solutions to these assignments, I am very confident that you will be able to solve other software problems. And so are other people. So when people come out of this class, when they do well, when they end up on the leaderboards, I have friends that are like, okay, I'll hire that person because I took the class and I know what that means. They don't do kernel development. They just know that if you can write a really good solution to these assignments in C, then they can hire you to do something interesting in Go or Python or JavaScript or whatever. On some level, programming is programming. It's about thinking clearly, approaching problems in a logical way, designing good solutions, learning from your experiences, testing stuff and getting stuff right. If you can do that in this environment, you can do it in other places. All right, any questions about this? Okay, so there's really kind of two, the course kind of, we try to hit you on two levels. There's this conceptual level that occurs in lecture to some degree in recitations where we talk about some of the concepts and then on exams. So you don't write code on exams. We talk about concepts. We actually use to apply some of those concepts in new settings. That's the goal here. So that is really about the software development part of the course. Are you learning the lessons that you should learn from the study and operating systems? Are you learning what's good about them and what's interesting? And are you able to apply those lessons to new situations? So the programming part is just a lot of programming. So I think I checked the other day, take assignment twos like about 2,500 lines of code, lines of C code. And so this is for some of you that have not spent a lot of time programming and I'm sorry, right? I can't do anything other than apologize at this stage of your career for the fact that some of you guys have wasted several years of your life going through some of the classes here, like an hour of programming here, an hour of programming there, okay, I went to lab and I finished my assignment. That doesn't get the job done. So if you're that person, if you're like, oh, I'm not sure I can program. I'm a junior, I'm a senior in a computer science program and I'm not sure that I can actually program. Like I said, I'm sorry. This is my best effort to ramp you up at a max speed just like right as you leave, just like a huge kick as you come out the door, getting some hours under your curve, getting you guys in a better shape to go out there and get jobs and stuff like. Like I have to, I'm just gonna be frank with people this semester, that is the reputation that graduates from the school have. You guys cannot hack. When I talk to people at the incubator, when I talk to people who hire software developers, they're like, we'll hire people from RIT and they'll come in and they're ready to go. We hire someone from UB, they come in with all these ideas about how things work and they've been told that they've been taught how to learn. Like you guys have learned how to teach yourselves, right? Okay, right? But we have to spend a year training them before they can actually build real software. So that's what you guys are fighting back against. If you take this class and really pound it to death and really do really good at it, you can point to that and you can say, look, I can do this. And the people, and the Bloomberg people, the people who hire around here, they know this class, they know these assignments, they know what it means. If you come to them and you say, I'm a leaderboard for assignment three, I got a perfect solution, they're like, okay, like, well, let's talk. Okay, so these are like the ABET things. I'm not gonna really go through. This is all on the website, on the syllabus. Okay. So how do you learn the concepts? Come to class, I try to start as soon as I can get in here. Obviously there's a big class in here beforehand. Hopefully, how many people are indistributed as well? Okay, not that many. Oh, that's too bad because all of you guys are leaving and we're coming in. Anyway, we'll try to get in here as quick as we can, get going. I am not, I have some expectation about how much material we're gonna cover, but I don't really care. I wouldn't rather have people ask questions. I'd rather have people get into things in class and have us have more of an interactive discussion than cover the first four chapters of the book, which is really important or whatever. There's no book anyway. So how much we do in this semester is flexible. It's varied a little bit from year to year. So please stop me during class. I will do my best with names and faces. There's obviously a lot of you guys and I am not as prepared as I like to be for that, which I apologize for, but I will certainly do my best, but please feel free and comfortable to stop me during class and don't, I know I need to encourage you guys to, I understand what it's like to be there and I'm talking to you and I'm like this big powerful person up in the middle of class, but think about it. I just got fired, right? So you can ask me anything you want, right? Like maybe that will invert the power dynamic a little bit this semester, which would be great, right? Like who cares? Who's this guy, right? He can't even teach this class, right? I'm gonna like challenge him. I'll be like, why are we talking about this? Please do that, again. And this is, from my perspective, after teaching the class I taught last semester, I realized what's fun about lecturing, which is it is this huge power trip. Like you're all looking at me, you know? That makes me feel good. On the other hand, I don't have any idea what's going on back there, right? Like you guys can be like, oh, happy place. Oh, am I gonna get lunch, you know, whatever? And I'm like, this is great. They're all smiling and they look like, kind of they have like a glazed look on their face. So you guys need to help me a little bit. If you're stuck, think about it this way. If you are confused, the likelihood is, so is everybody else. And the only difference is you can be the brave person who's like, I'm actually confused and then we can talk about it, we'll slow down and we'll figure it out. All right. There's a few references that are listed off the website. These are things that you can get if you want. There's the Tannenbaum book, sort of a reference manual for operating systems. You're welcome to pick that up. I don't refer to the book in any way. I don't refer to chapters in the book. I don't assign readings from the book. The slides for the class and the videos are the book. So that's the content that you'll be tested on in exams. If you're new to see, I would suggest you pick up this very slender little reference. You don't, although you know what, what am I telling you? This is dumb. Don't pick up this book. This is stupid. You know about the internet, right? You've heard of this Google thing? That's also a good source of information, right? So at some point in the past, it was like nice to have a book. I don't know why. I mean, I guess if you spend a lot of time on airplanes and are too cheap to pay for the Wi-Fi, maybe get the book. But if you are normally in range of an internet connection, that's probably going to be fine, okay? All right. How am I doing that time? Oh, great, okay. Okay, so this is the programming part. Again, this is all on the website. All right, and we're gonna, okay, so let's talk about the programming assignments. How many of you have heard about the programming assignments for the class? Yeah, okay, that's part of the class. So, you know, this is a, I have, every year I've taught this class, we've tried something different with deadlines. It just never ends. There's no perfect solution. You know, if I do it one way, people burn out too early and then they get frustrated. I've been doing it another way. They have this false sense of security that they carry with them for a month and then they hit a wall and they get really mad. So I don't know. We'll try again this year. I mean, we're just gonna keep iterating, right? This is what it means to be a hacker, like you don't stop just because things fail. Just try something else, right? So that's what we're gonna do. A little bit different, not that different. I'm really trying to get you guys out the gate early this semester. To the degree that on Wednesday, we are going to ask you guys, now this is of course the world's worst room for doing anything like this, but to bring laptops to class so that we can walk over assignment zero and getting OS 161 set up. We're gonna do that on Wednesday. I'll send out instructions over email on the forum about what you need to do beforehand, but I'm really trying to get you guys started hacking right away. So we'll do that on Wednesday. That will be the last time. I'm not gonna stand up here all semester or using Eclipse and dittling around. I don't do that, but we'll do it once on Wednesday. Well, we'll do a little bit of a tutorial in class and hopefully that gets people started. Hopefully that gets you guys with everything and set up. We've done a lot of work to make that easy and that's what we'll do on Wednesday. So now assignment zero, there's nothing to actually submit. Or I think there is something to submit. I can't remember. It's very easy. Is there something to submit, British? No, okay, yeah. I guess we must have changed the assignment weights. It's hard for it to be worth 5% if there's something to submit. Anyway, so assignment zero is just getting started. It's just getting your tool chain set up, figuring out how to compile kernels, figuring out how to run kernels, figuring out how to use some of our testing infrastructure. It's very simple and we can get through a lot of it on Wednesday. Assignment one will be due. These due dates are all up on the website. They'll all be on the syllabus eventually. I don't think I've updated the syllabus yet, but I'll get to that later. Two weeks from Friday. So Friday's the third. Two weeks from Friday, assignment one is due. Oh, here's my favorite video clip. Yeah, it's not that easy. Yeah, so, yeah, exactly. So I love that movie. So good, I saw it again recently. Okay, anyway, so then we get to the real stuff. So two weeks in, you know, we got you sort of handheld through the first parts. Guys will find a partner, get going. Then we get to the fun stuff. So assignment two and assignment three are really the meat of the class. When I look for people that I'm going to recommend for jobs, I look at who did well on assignment three. And that's not necessarily a huge group of people. So it's easy, right? Someone says, yeah, do you have any people that you want to recommend for a job? I have these six people that aced assignment three and that works out pretty nicely. I want that group to be bigger. Hopefully it will be this semester. So assignment two, this semester we're going to try something new which is we're going to break assignment two into two parts. So that you have three weeks total to do the assignment. Is that right? Oh, I think that's wrong. Well, maybe it's four weeks. Oh, it's four weeks, four weeks. Anyway, we'll figure it out, right? Yeah, Carl, four weeks, yeah. There's a checkpoint after one week where there's like 25 points for the assignment that we want you guys to complete. And then the rest of the assignment is due three weeks later. This is always a danger point for people in the class because assignment one is not that hard. Assignment two is much harder. And so people, this is the problem. I mean, whatever I do, people seem to approach assignment two with this sense of like, oh, this is not a problem. And then a weekend they're like, I have no idea what's going on. So assignment two is much more difficult than assignment one. We're going to try to get you ramped up quickly with that first week checkpoint and then you have three more weeks to finish the rest of the assignment. And then assignment three is really to me the fun part of the class. It's a big piece of code. It's entirely up to you to design. It's an example of something where the problem is very simple. If you look at the write up for assignment three that's on the website, it's much shorter than the write up for assignment two because it's simple to explain what you have to do. It's just really hard to get it to work. And there's a lot of design for you guys to do and it's fun. And this is broken up into three checkpoints that I think are spaced at two week intervals. So there are, or maybe there's one week for the, you know what, there's one week for the first part of assignment three because there's spring break in there and there's the midterm. So one week for the first part of assignment three then two weeks for each second part. But there's also a big gap of time between the end of assignment two and assignment three. So if you really fall off the bus on assignment two, plan on spending spring break writing C code at home. I probably not what you wanted to be doing. So if you want a little bit of incentive for finishing assignment two on time, there it is. All right, we'll talk more about OS 161 on Wednesday. So again, going back to what we talked about before, this class is not easy. Yeah, there we go, 2.87. That's actually pretty good for us. Like usually we're down in the ones on appropriate workload. I always love that, like it's kind of strange. Doesn't appropriate workload differ based on the class? I would just think like how much time did you spend one to five? So anyway, this was a pretty good score, I guess. I don't know what it means. The class gets pretty decent reviews. I have all of the reviews for last year's class and the year before up online, including all of the beautiful friendly things that students say about me and the core staff. So if you want the full, if you're trying to make a decision about whether to take the class, I'll show you some snippets in a minute. You are more than welcome to go to the website and read everything. The good, the bad, the ugly. Last year we changed some things. I think the course got harder because the test suites got much, much better. And I think people didn't necessarily appreciate that. But anyway, I mean, four is pretty good, I think. And yeah, I mean, there's really no shortcut here, unfortunately. If you want to get good at programming, you have to do programming. So I'm the forcing function this semester for you. I'm gonna help you with that. I'm gonna give you these hard things to do and then you guys can go out and do them. Do you have a question over here? Oh, sorry, someone who was making a hand gesture. All right, so here are the nice things people say, I won't go over that. Here are the mean things people say. Some of these are pretty true, actually. I'm either in a great mood or in a bad mood. I mean, isn't that true in most people most of the time, right? Yeah, I'm a sadistic being, I like that. Yeah, okay. So I'm not trying to poke fun at these things. Actually, the feedback I get, like, I don't know what you guys are reading. The feedback I get from, so every semester when I teach this course or another course, I get the course evaluations. I'm always like really waiting for the course evaluations and I get them and I read them and then I'm just like super depressed for two or three days. So the mean things that you guys say about faculty, I don't know about the other faculty members. Maybe they don't read them. I read them and they make me really sad, right? So just if you're gonna write something like, he should have been fired and he should never be able to teach anywhere or ever again, which actually somebody wrote last semester, like I'm gonna read that and that's gonna like affect my mental well-being. I am gonna try to work on some of these things, particularly the be nicer part. That's a constant struggle for me. I think just one caveat about that, I'm certainly not trying to be defensive. This is totally true, but if you come to the lab and you're working in the lab with me and my students, the way I interact with some of my graduate students is not the way that I interact with most people most of the time, right? They are grown-ups. We've worked together for a long time. We have a comfortable working relationship. So I can be a little hard on them. I can be tough on them. That's not like the only interaction that we had the entire week. That's one of many interactions that we have throughout the semester. So just keep that in mind. But I will endeavor to be friendly and I'll be my good mood partner. Yeah, this is my favorite one. Someone wrote this on my professor page. They're complaining I send too much email. Like four messages a semester, dude. Like if you can't keep up with that, you're not gonna do very well in the world because that's just not very much email. So I better to stop doing that. All right, anyway, so there, like I said, I mean, all of the reviews are up there. I'm totally open about this. I know that there are negative aspects of my personality that sometimes come out in this class. I'm trying to improve on that. I think people do get something good out of this class. Like I said, we really, really do our best to meet our end of this contract, which is the class is really hard. We give you a lot of help and we try to do the best we can. All right, another moment here for questions. Yeah, yes, and I'll let you guys know. Yeah, you guys are gonna end up, remember this part about me sending emails? I'm gonna start doing a lot of that to you guys, right? You're my class, so I'm allowed to do that, I guess. But maybe somebody will say this to me. But anyway, I'm gonna put together an email list so I can communicate with you and then we will send you instructions. We also have a forum we're gonna set up, blah, blah, blah. But yeah, look for this maybe tonight, tomorrow at some point. We will send you some instructions. And it's actually kind of important that you do do this because one of the steps requires a fairly large download and I don't want 200 people trying to do it in the room all together. Yeah. No, no recitations this week, no office hours this week, except for some special ones that I'll mention in a minute and we'll let you guys know by email. So there's a calendar on the syllabus that's on the website. So if you go to the website, click on courses, click on the tab for this class. There's a calendar there. I would suggest that you add that to Google Calendar. We will put office hours on there, all the deadlines are on there, the exams on there, all the course meetings are on there, et cetera. So that calendar is kind of the central source of information about what's going on every week for the class, which is important because we try to program a lot of stuff. Okay. Yeah, so this is, you know, the website's in pretty good shape. We're gonna be updating things. We made some changes. We did that every year. But the setup page for OS 161 and the assignment zero page are in pretty good shape. So you guys are certainly welcome to start reviewing that. The syllabus is what's there, is there, what's coming, I'm gonna add things to it, the deadlines we just worked out this morning. So that'll keep evolving. But certainly you can go back to the website. You can certainly get started. The lecture slides are up there. This lecture is being served from the course website. So if you want to follow along, I always post the lectures before class. Obviously, you can go there. There's a outline view if you wanna just kind of page along or you can follow along with the slides if you want to for some reason. So yeah, all that's there. Yeah. There may be, you never have to rebase. You just merge. Yeah, so yeah, we'll go through this on Wednesday. We distribute the sources for the class, the sources you guys start with using Git. And then throughout the semester, sometimes we will push updates, probably fewer this year than last year. Last year we were rolling out test 161 and there was a bunch of changes that that required. This year, probably fewer. But when that happens, we'll tell you what to do. And to be honest, this is a pretty good thing to figure out how to do anyway because this is how software development works. Are there questions over here? Okay. I must have some sort of like verbal visual tick over here. I keep seeing somebody. All right. So the grading works out as follows. About half of it is for the conceptual stuff, the midterm and the final. There is no preterm exam this year. That was the thing in the past. We're replacing that with the assignment zero walkthrough. And then the programming assignments, I think we redistributed these weights. I'll fix to this. I think it's like 12, 18, 20 or something like that. Because assignment zero is, I mean, you can, you should do it. You should do the stuff that's in assignment zero needs to get done. But we're not gonna give you any credit for it. There's really nothing to test. Okay. So the way that grading works for this course, happily this is starting to become a little bit more common here at UB. But all the grading for the assignments is completely automated. So you can submit when you want to. We have a really awesome submission system that a couple of students built last year, Scott and a guy named Yee Hong, who now works at Twitter. So there's a nice UI, there's a nice command line tool. And we're gonna, up to the deadline for the assignment you can submit. You have a very, so the submission system runs test locally first. You have a pretty good idea of the score you're gonna get before you actually submit it for evaluation on the server. But this all works. It's really nice. You can certainly submit and test your assignments as many times as you want. We would prefer that you do as much of that locally as possible. So the test 161 tool will allow you to run test locally and it will score them according the same way that we're gonna do on the server. But when you're ready to submit, when you're happy with your grade or the deadline is in five minutes, you can submit and we'll run things on the website. But the result of this is that like you guys can pretty much choose the grade you want in this assignment. You start at zero and as you work, you know your score will go up and at some point you may say, I'm done with this and this is consuming my entire life. Or you may decide that you want to get all the way to 100. So this is how things work. This is a nice tool. All right. Assignments are done in pairs. Find a partner. In fact, I would suggest you guys find a partner soon and we'll try to set up some ways to do this. We'll probably put a post up on the forum where you guys can communicate if people are looking for partners. How many people don't have somebody that they're planning on working with for the class? I'll be shy. Okay, that's not too bad. Yeah, so find a partner. An important thing to do when you're located in a partner is to talk about your expectations for the class. If you want to get an A and your partner is okay with failing, that's probably not a good partnership. So find somebody that has the same desire about the class that you do. Okay, working alone is not an option unless, well we have some extenuating circumstances. Yeah, I think we take the best. Yeah, we're not mean. Yeah, we'll take the best score for a particular assignment. And actually I think we're gonna try to do some things this year, so we may not even let you submit if your grade's not gonna go up. Yeah, right now that's true. Yeah, we're gonna, yeah, yeah, okay, we're gonna fix that. So yeah, so the point is that we have leaderboards. I can show you guys in a minute if we have time. We have leaderboards for the class. Hopefully that's a little bit of incentive for people. The leaderboards currently display people who got a perfect score. I think what we're gonna do this year is we're gonna have a performance key that's gonna sort people for the last thing. So we're gonna use your performance on one of the tests as a way to break ties among people that got perfect scores, yeah. So again, when people, I know people in the tech community here, I know people at other companies and when they say, do you know people I should hire? I send them a link to the leaderboard for the class. And I say, look at this leaderboard, there's contact information on it. This is the way to get a sense of who's doing well in the class. All right, so the assignments are cumulative. That means that you're building on each assignment, assignment one goes to assignment two. That means that if you piece out on one assignment, it's like, oh, I just don't wanna do assignment two. Good luck with assignment three because assignment three is gonna start with you redoing assignment two except you won't get any credit for it. So don't do that, yeah. You set things up on test 161 so that we understand you guys are working together. Either partner can submit. Yeah, but yeah, submissions from either partner are counted for both parts. Yep, one conjoined pair. Siamese twins. All right. Okay, email list is coming. Discourse form is coming. Let me, I'm getting close to being out of time and I have some important stuff to talk about. Okay, I have four minutes. All right, please be judicious in your use of email. There are instructions on the syllabus. Please read them and follow them. So responding to emails, and I don't wanna sound whiny, but responding to emails from a class of 200 people can be really time consuming, particularly when you guys are asking the same question, particularly when you are asking questions that are answerable by reading the syllabus, et cetera. So there's some simple guidelines on using email. The simplest way to describe them is don't. Post on the forum, et cetera. I mean, if you see somebody cheating or something like that and you wanna talk to us, then email may be appropriate. But for 99% of the things that you're gonna want to communicate about, post something on the forum, you'll get a response faster and the response can come from a student. Also search the forum before you post. That's another good thing. I'll come back to this on Friday. All right. All right, office hours. We're gonna set up lots of office hours. We'll put those on the calendar. Last year, I can't remember how many we did. It was like maybe 40 or 50 person hours. We've tried to now schedule office hours so there's several TAs there available at any given time. But we really want you guys to be able to get help. And please come to the office hours and work at office hours. You don't have to have a, I think the mentality here is I need a problem. I have to have a problem before I come to office hours. No, no, no. You'll have a problem right away once you start working on the assignment, right? I can guarantee that. So just come to office hours and then you're where it was a good place to have a problem, right? And you don't have to come and ask a question and leave. Come, get out your laptop, sit down, get your partner there, start programming, have people around, it's fun too, right? I mean, if you're gonna suffer, you might as well suffer with other people that understand what you're going through, you know? So they'd be like, I cannot get TG1 to work. And they're like, I'm with you, man, I'm having the same problem, right? No one else is gonna understand that. If you're at Starbucks, people just think you're weird. Okay. So partners are joint responsible for joint work. If anybody plagiarizes in your group, I will come after both of you. I'm not always successful, but I have a very, very good hit rate here. So please find a partner to work with that you're comfortable with and make sure that you guys have an understanding about where code is coming from and your commitment to academic integrity. The about the only way that you can really work your way out of a plagiarism situation with a partner is if you report the situation to yourself. That's about the only way you can do it. If we find out about it in some other way, we're probably gonna assume that you knew something about it. Okay. We do want you guys to help each other when you work on the assignments in this class. So coming to office hours, talking about things together, answering questions on the forum. There's a very simple rule of thumb if you want to figure out whether or not you're cheating. If you're explaining something to someone using English words and phrases, it's probably okay. If you start talking in code or sending snippets of code around, posting code on the forum, et cetera, then you have crossed a line and now we have a problem. So that's just the simple thing. Explaining to someone how to solve a problem, helping them, looking over their shoulder, helping them debug some code, whatever, is totally okay. And you get extra bonus points for helping out people in the class on assignments. That's a way to prove that you really know what you're doing and that will get noticed, I guarantee. We had some people that were really helpful last semester and they got jobs. Anyway, so if you're talking with your partner, obviously you can say anything. You guys can email a code around. I wouldn't suggest doing that, learn how to use Git. Okay. So I have to do this every semester and I know you guys want to run away at this point but we need to talk about cheating. I am, maybe this is it, maybe this is my last semester you'd be finally the miracle that I've been praying for for years will finally happen, right? Which is nobody will cheat. Every year I get down on my knees tonight and I say please, no one's sheet tonight in my class and it doesn't work, it keeps happening. There's a lot of you guys, laws of averages or whatever but just let me explain what happens to you if you cheat. And this is not because I'm a mean person. This is because I want to be able to stand by the marks that I give in this class. If you get an A in this class, I want to be able to contact somebody I know at Facebook and say this person's really good and not worry about whether or not what you're really good at is searching for things on GitHub because if you're hired at a company to solve problems using software, the chances are they're not problems that you can solve by searching on GitHub, right? If they were, they wouldn't pay you a lot of money to do that, right? Okay, so let's see, I will find cheaters. We do a lot of work and this semester we have all this infrastructure already so all I'm gonna do all semester in all my free time is work on tools to help detect cheaters. That's gonna be my mission this semester. So I'm coming for you. We do a lot of work, we built a lot of tools last semester to do this. We run them on everything like every blob in your Git repository gets checked. Every Git repository that I have access to I have downloaded hundreds of Git repositories off GitHub. I have hundreds of submissions for this class from the past years. I have like 500 Git repositories with old OS 161 code in them. Probably 700 now because I have ones from last semester. So here's my thought to you as you go out and you find things online. Do you really think that I don't have that thing? Because that's the risk you're taking. Because I downloaded like the internet in terms of what's available in OS 161. I spent hours trying to figure out exactly how to find every repository that's available. So if you think that you can beat me, okay, I guess, right? I don't think so. I probably have what you're using and I'm probably gonna notice, right? Keeping your code private is also really important. So we've already had one weird incident with this semester. Do not, you need a private Git repository for this class. If you're using a public Git repository, you are in trouble. Like almost by definition. Because either somebody will find your code, well, someone will probably find your code and plagiarize you and then we're gonna assume that you guys work together on this, all right? So there are ways to do this. Again, we'll talk about this more on Wednesday when we talk about setting up your development environment. There's plenty of ways to get access to private Git repos. Okay, so when I find cheaters, I get mad, right? This is, I guess, the bad mode I get into that the person was talking about, right? There's good me and bad me. Cheating will definitely put me into bad me. And I will try my best to make sure that you fail the class. Now the assignment, the class, all right? You guys can start getting up. Let me tell you a little bit about what happened to some people that cheated in the class. So cheated, got enough, sad, right? Doesn't always cheat, but when he cheats in my class, gets enough. Sad cat, cheated, I don't care, secure cat. One Super Bowl in February, this coming one, right? Got enough for cheating. I will fail Tom Brady. Cheated, not a choice, right? No, all the trades, it isn't cheap. Didn't cheat, runs own business, right? All right, I will see you guys on Wednesday. Expect to hear more from us. If you guys have questions, I'll be outside for about as long as I need to be.