All right, we're recording locally. Zoom is also recording for us. Let's see, how many people do we have in here? 117 people so far, nice. How many people are in the class total? 365, I think 360, 370. We'll try to get started in a minute. Let me see about how many people would I estimate with a physical class, I have no idea.  We definitely had, I think, 360 people there for the midterm last two Thursdays ago. So if you were there for that, cool. Can everybody see my screen? Yes? Okay, cool, thanks. I'm monitoring the chat. I have it on a separate window here, so I'll try to be monitoring that. If you want to keep your video on, that's nice so I can, I don't know. It's nice to not just talk to the screen to have at least some people to look at on the right, but feel free to do whatever works best for you. Cool, well, thanks for joining us, everyone. We have now 150 people who've joined us. I think this is the, let's see, most people I've done in an online class before, so we'll see how this goes. Okay, so you should, everyone should be able to see my screen, hear me, see me, that should be good. I can see some of you, that's also good. Yeah, so I think I did set that option to mute people when they joined, but I'm not 100% certain if that actually worked. And I can also click mute buttons on people as I talk, but it's a little difficult to do that, so yeah, cool. Okay, let's see how this goes. So yeah, so we're, you know, after spring break, it's not exactly where we thought we'd be after the midterm, but here we are. And Brave New World, we will work our way through it. So yeah, we can talk about some ground rules. So I'm looking at the chat on the left. So if you have questions, feel free to type them in the chat. And yeah, we'll try to go from there. If you have good tips, feel free.  So I want there to be interactions and we'll, you know, we'll try to do as much as we can of interacting and talking. So, you know, if you have a question, feel free to unmute yourself, interrupt me, ask a question. I'll try to be good about giving people time to talk so we can actually discuss things. Yeah, so hopefully that goes well. Hopefully everyone has also their kind of, if you can set your name on your Zoom, that would be nice too. So that not just I know who you are, but other people know who you are when you're asking questions. I think that would be really good. Cool. And yeah, so, okay, first thing. We have, we're currently grading the midterm. So I know you probably don't want to think about this at this moment, but we're currently in the process of that. We didn't do a lot over spring break because as you know, TAs also have spring break as well. So they were doing that, but we're currently in the process of getting the midterm. We'll, yeah, I'm not too experienced on the raise hands functions. Can somebody try raising their hand so I can see what that does? Oh yeah, cool. Okay, yes, that's awesome. So thank you for that. Okay, cool. Then that actually is really nice. It shows up. It's kind of in my peripheral, but I will definitely be looking at that. So if you do have something, feel free, raise your hand and I'll check you out there. That's awesome. Oh, the, where is the raise hand function? Can somebody on participants? Yeah, so if you click on the participants, you can even pop that window out. Oh, it pops up a popup window for me. That's nice. Okay, cool. And yeah, then you pop up on the participants list so that I can see you there. And then I can, I also get a notification. Cool. Just like, it's just like being in class. Okay, cool. So first thing, the fund doesn't stop. You know, we're gonna get right back where we were planning on going. And so our first assignment is going to be a new assignment called the web of trust. This is always assignment that is a lot of fun, at least I think, and it really kind of, the goal of this assignment is to get you used to thinking about how we do trust in public key cryptography. So in public key crypto, we have public keys and private keys and we talked about, we talked about that various ways of signing keys in order to verify that you trust somebody else. And so essentially we're gonna do that. We're gonna build a web of trust in this class. So basically the high level idea is you're gonna be learning about public key crypto and actually using tools, not just kind of conceptually thinking about how public key crypto works. Yeah, somebody have a question, Oscar or Mohamed? Okay, I will lower your hands. That's a weird thing I can do. Okay, cool. So what you'll be doing is you're going to be kind of working through and trying to answer and deal with this problem of verifying identities. How do you verify actually identities? So essentially what you're gonna be doing, your goal is you'll be creating a GPG public and private key pair. So you'll be creating your own public private keys. You will then register your public key with the submission server and we'll talk about that in a second. And then are with the, this should say grade scope. And then you'll get your key signed by 30 of your fellow students in the class. No, you don't need to meet in person for a key signing party and that's gonna be what's the fun thing you're going to learn about and deal with. So yeah, cool. And the key thing about this class and about this assignment is you're gonna avoid signing any fake keys. So you'll need to figure out and try to learn and understand how do you verify each other's identities. And let's wait till the end of this so everyone understands the assignment and then we can talk about what's kind of in scope and out of scope. Because yeah, there's a lot of different ways you could do this and we're very open to any kind of thing. Let's talk kind of high level. What is this going to look like? So essentially, you student in the class. Okay, so we need to first understand what is in scope. So we have, there is a course. Oh wow, this is really slow. That's interesting. Wow. Okay, huh. Okay, I must be all the sharing and the windings. All right, cool. So we'll start very simple. There is a course key. So this is the course key. It's on the course website. I don't think it's the bandwidth. I think it's the, it's probably because Zoom is recording and I have my own recording going because I don't really trust Zoom. But yeah, something's happening and that's not working as well as I thought. But anyways, so we have this course key. It's CSE 365 spring 20. It's the course public key. And the way to think about it is any key that signed by this key is a valid key in this course. And so any key that has been signed by this you know is a valid key in this course. So part of what you'll need to do, download this key, verify the fingerprint, verify it matches, import it into your local GPG key ring. And the goal is what you're gonna do is generate a, so let's see if I can try drawing again. Let's go. So you will generate, man, okay. You will generate a GPG public key with your name and it has to be, yeah, I may use text instead of drawing but I'm not sure how well that will work, but let's see. So let's see if I can get out of my way. Cool, so you will generate a GPG public key and part of your GPG key has your name on it and this will be your actual name. So as part of your GPG public key, it would actually have your real name. And so what you will do is you will then upload that to the, upload that through grade scope to the submission system where it will, you will get a version that is signed by the course key. So it will verify that this key is actually your GPG key. So it will be GPG, okay. So you'll get a GPG public key that's signed by the course key and this, you will import that and this is how you prove to everyone else that this key is valid. So only keys that have the signature of the course key are actually valid. Anything else is not valid. And so I wonder if this works better. It's still a little slow but a little bit better. I may switch to this. Okay, so now once you have your public key, the course submission, the grade scope will also generate you an adversarial key. So this is, so this is, it will generate the GPG adversarial key that has the exact same email that's in your GPG public key that you uploaded but with a fake name. So this is a name that is not your name. It's randomly generated and everyone will be given basically these two items.  So then the goal in the assignment is you need to get 30 signatures on your key. So you need to sign 30 people's keys and you need to get 30 signatures on your keys. You have 365 people in this class. I think this is definitely easily doable and everyone should be remotely available so you don't even have to meet in person. So this is the first part that we went over is generated GPG key. The really important thing is because only keys that are signed, so every, to ensure that every person has only one real public key and one adversarial key, this means that we won't sign multiple keys. And so this means that if you lose your key it's entirely up to you. So I cannot stress this enough. I've tried to put this in many times. Do not lose your key pair. Please back it up.  Okay, so generate a key pair, upload your public key, have it. And so that's the first two steps and then you have your public key and your adversarial key. Now, once you've done that now you need to get the key signed by at least 30 of your fellow students. And this is roughly half of, a little bit less than half of your grade, roughly 45% on this assignment. So there's a lot of resources out there and one of the keys of this assignment is I want you to be looking for resources and feel free to share resources on piazza of good things, good guides and sign other people's keys. But the key thing is you need to, you want to only sign, you want to only sign their public keys and you don't want to sign any adversarial keys because remember this is again the whole idea of this assignment is we're trying to get you to develop a web of trust and verify identity. So remember their GBG public key that will be signed by the course key and will be their actual real name that ASU has. If so, so the whole idea is most of your grade is based on signing. So sign other people's keys, have your key signed 30 times and that's going to be the bulk of the assignment. And of course the whole reason this whole thing works and how the web of trust works is if you're actually, well, so everyone just posted, yeah, let's think about that. I want you to think about this assignment. So the whole reason why this thing works is if you don't sign invalid keys, right? If you're just out there signing any key that anybody sends you, you're not really verifying identity because remember a signature says that you verified this person's identity. So the key is don't sign any adversarial keys. And so this is worth 10% of your grade total on this assignment is to not sign any. So if you don't, so the grading is pretty simple. If you don't sign any invalid keys or any adversarial keys, you will receive 10 points. But the more adversarial keys you sign, the more negative points those will be worth. And on the flip side, you can get extra credit by tricking people to signing your adversarial key because remember the assignment doesn't work if nobody is pretending to be an adversary because you just signed everything. So this is why trust becomes very important. Now the entire point is I don't really, I can't tell you the exact points yet because it depends on what happens because exactly as some people are talking about in the chat is if let's say, extra credit was worth two points and signing an adversarial key was worth negative one points. Well, you would all sign each other's adversarial keys which is what somebody is saying, right? So I get all the results at the end and I balance it so that it makes sense. But I can guarantee you if you, and this happened last semester, so if you sign one adversarial key, you're not gonna lose all 10% of this assignment. So don't freak out about it, but learn from that experience and go forward. So yeah, the amount of extra credit and the exact amount of negative will be determined kind of at the end of the assignment. What's the max credit I've given out for this assignment? Off hand, I don't know, but I think somebody got, I wanna say like what you'll find is some people are like really, really good at scamming people. So yeah, it was like, I don't think they got 37 points, but they definitely scammed 37 people which was more than 15% of the class or something like that. Yeah, so it's a fun assignment because not so, but the other way to think about it is, so that was somebody who's really good at scamming. The other way that works is it's not like one person was the victim over and over. I think they just were able to scam a lot of different kind of people. Cool, and then at the very end, as we'll talk about here, so you submit your public key with all your signatures. This is done by default when you export your key and you can optionally, if you chose to do adversarial, you can upload your adversarial key and a readme file that contains your name, ASUID and thoughts on the usability of GPG and key signing and how you tricked people to sign your adversarial key if you did. And so again, you won't actually, I'll need to change this, it's all through a grade scope. So the only way I can grade this is once everybody is in because all the signatures are on there, so you won't, this isn't an assignment, well, you'll be automatically graded right away, but you will, you'll at least know how many signatures we see on your key. So try to do a little bit more, so okay, now questions. So I think some of the questions, okay, so let's lay some ground rules. Okay, so when you sign, how do you tell if it's fake or valid? So the key difference is the valid key has that person's real name and this is the thing, so GPG public, so this real name is also here that's signed by the key. So this actually has, so like for me, the submission server will only sign a key that has the name Adam DuPay. So I've taken everyone's name from my ASU and done that on there.  And so, but I can guarantee you that the name is on there. So the goal is just like in real life, how do you verify somebody's identity, right? So you can, there's all kinds of options to do this and specifically I'm not going to give you my thoughts on this because one of the most interesting things about this assignment is what happens organically with the class. So you have Piazza to talk, you have even the Zoom chat here, you're totally so allowed to do whatever. No, you don't get to pick a name for the fake key. The fake key is automatically generated with a fake name for you. And okay, so ground rules, I'll have to add this to the website. I can't stress this enough, don't freak out about it. It's the entire, this assignment wouldn't work without people scamming you. So be nice about it. If you get scammed, try to don't, I don't know, don't be mean to people who are trying to scam people, they're trying to get extra credit. Oh yeah, that's a good point. Okay, yeah, this does seem to be faster. And two, basically no, so don't use any, no, don't break in anybody's computer, don't use any physical attacks, don't do any of that kind of stuff. Like that's completely out of bounds, abide by the computer use at ASU. I guess it'll be much harder to break into people's computers if you're quarantined or do physical attacks. But other than that, basically everything else goes. So I think these are kind of the only rules we have of just, is there any other rules that people think would might be useful or helpful to this assignment? Yeah, everything else, so to the questions, everything else is fair game. So beyond this, as long as you're, as long as you're not breaking into their computer, or I don't know if you had some, I don't know why you'd spend half a million dollars on an iOS zero day, but don't do something like that. Don't like physically steal somebody's phone or computer. But besides that, everything's fair game. So it's gonna be a little crazy. It'll be a couple of crazy week and a day as people do this assignment. Yeah, everything is allowed. So yeah, and so we'll monitor the situation. Yeah, Ethan, question. This is the course key, but it's actually not, yeah, it's more like the grade scope. Yeah, so you have to submit before, so there's a, let me, no, I can't pull up grade scope because it may show you your grades and that would be bad. But on grade scope at noon today, there'll be an assignment quote, quote on there called web of trust upload. So what you do there for that assignment, you upload a file called public underscore key dot GPG that you've generated. And then the grade scope will then check, make sure that it's actually your name, that it's valid, everything like that. And then if it is, it will sign it. So it will do the signing part and it will also generate you an adversarial key. So after you submit, you'll be able to download both of those things from the output of the submission system and you'll be able to use those to do the rest of the assignment. Does that make sense? Cool, any other questions? Yeah, it's gathered on adversarial keys. Yeah, so you have, right, so you have to sign like to get the most credit for this assignment, right? Yeah, that's why I don't, that's why the extra credit and stuff I don't say beforehand because there's a lot of ways this can go down. But yeah, the goal is you have to have 30 keys signed on your real key and you need to sign 30 keys with your real key. Does that make sense? Yeah, so this way everyone has the incentive to sign with their real keys. You need to, no, you need to do both. You need to have your key signed by 30 students and you need to sign at least 30 students' public keys with your real key, exactly. No, you have to sign real keys. That's actually a part of the assignment. Okay, so that's a good question. The signatures must be from a valid key in the class. So valid means non-adversarial. So this is, yes, starting late makes the assignment way harder and people are very panicked at the end and they just sign everything. So, yeah, once we sign them that they're, how do you know how many people signed it? So this is part of learning how to do this process. You will basically just like this, so you submit your public key to them, they take it, sign it and send it back to you and then you import that and now your GPG key has that signature added to it. So your GPG key accumulates signatures over time. As long as you sign 30 valid keys and get your key signed 30 times, yes. No, there's no chance that the name that's randomly generated is somebody in the course. I've taken care of that. Good question. Yes, you have to send it back after signing. So you can, so I can show you, this should be fine. So this is my local GPG key ring. So you can see this is me running list sigs on my email address. So this is my personal key you can find on my website. So is a sign, what if someone sends you back the wrong key then ask them for the right key? Is a sign, all the signatures on our public private keys both count towards the 30. You'll only get signatures on your public key. Please don't send people your private key. That would be a very bad thing. They will use that too. They could use that to then sign as many adversarial keys as they want.  This is our key signing server. So you can see that this is actually in scope for this class. But yeah, I want you to kind of explore how to use this. So that's how you can tell that you have those. So yeah, I don't know, any other questions? Let's, you know, we can talk about it now. And they'll be, again, we'll be doing, yeah. Quing, quang, question. You are muted if you're trying to talk. Oh, the rules, yeah. Yes, exactly, yeah. So only signatures on your real key count towards the 30. Yeah, exactly, yes. All right, so it should be fun. This should give us something to do. And you know, I guess the other thing I've been thinking about with this assignment, it may help you to actually talk to your fellow classmates while we're all in lockdown. So, you know, get to know your fellow classmates. And yeah, above all, have fun. I think it'll be pretty good. Cool, any more questions? And they'll be, again, we'll still do like recitations and other kinds of stuff office hours. So please come to us for that. As of now, so at noon today, as I said, the web of trust uploads assignment will be up. And then I'll create the final submission one where you'll submit your final signed key. So, you need to verify their identity just like in real life. So if I claim to be Adam DuPay and I want you to sign my key, you need to verify that it's actually me. No, verify by looking at the key. So you'd have to, so, A, the very first thing is everyone is all of keys that are in the game, let's say, are signed by the course key. So that's one of the things to always check. So it's a valid key if it's signed by the course key and then you know it's their real key if it's their actual real name. And that's what you'll have to check. What's the most, say it again, different. No, no, no, fake key is a random name. It's a randomly generated name. They will probably not be, yes, or I'll guarantee they'll not be. Josh, you can submit, Josh is asking exactly what your name is in the ASU system. If you submit and the name is off, it will tell you what it's expecting. So you'll be able to do that. Let's see, yes, I'm happy. You can figure out any piece of information you want from anything else. Let's see, the most, say it again. You'll only have one fake key. So you'll only have one fake key that's signed by the server, yeah. And again, that's how you know because it'll be signed, it'll also be signed by the course key. Let's see, the midterm we talked about at the beginning, but that'll be, oh wow, 200 people on this. It'll be, we've started grading it. It'll be ready when it's ready. So no hard deadlines. But as soon as it's ready, you'll know about it. Cool, all right. So we have fun assignment and now we will get to networking. Yeah, so kind of the email will be the same. The adversarial key will have the same email as the key that you submit, but a random name, yeah. And okay, so now we're gonna switch to network security. So kind of highly ironic that we are talking about networking while we're doing a class over using networks. So maybe hopefully this will be, give you some nice appreciation for kind of what's going on here in actual networking. So let's see, it's been, was it two whole weeks since we've even talked about this topic since we had the midterm last Thursday. So let's see, we've been talking about IP addresses. So we talked about the TCP IP stack and the different layers here. So we have the physical layer, link layer, internet layer, transport layer and application layer. So at the physical layer, you have things like if you're on wifi right now, how to talk to your router, like physically, how do that, the physics work? If you're on a wired network like I am, and I would, as a tip, if you're at home, want to, a really good way you can prevent kind of latency and lag while doing these classrooms and everything is do a wired ethernet connection to your router. That way with a lot of people at home, a lot of people will be using wifi. There'll be a little bit of congestion there. So that can help. So anyways, you have the physical layer, then you have the link layer of how does packets and data get from one machine to the other. Then you have at the internet layers, trying to answer the question of how does data get from one IP address on the internet to another IP address? So how does it move from hop to hop along multiple links? Above that, you have the transport layer. So you have TCP and UDP on the transport layer, different ways to talk to different applications. And finally, at the top layer, you have all of the different applications that are built on top of networking. So we have things like HTTP, SMTP, DNS, NFS. You could think of whatever we're using Zoom. I don't know exactly how Zoom works, but however it's doing this video streaming, that would be another maybe protocol that's running on top of the internet stack. So any questions on kind of the high level TCP IP stack? Yes, recording of the lectures will be saved and uploaded. So Zoom should be recording it. I'm also recording it as well, just in case.  Okay, so now we get into, we're gonna start in at the IP level. So we talked a little bit about IP addresses. So this is the notion that machines on the network need to be able to know how to send data to each other. So in order to do that, we need to know its address, right? So, and we talked about how IP addresses are 32 bits. So, and this is grouped in terms of bytes. So each of these in this dotted decimal notation represents a byte. And that means each byte here is from zero to 255. And so something like if you had an IP address that was like 390, you'd know that this is an invalid IP address. And that would, so every octet here has to be from zero to 255. And we'll get over, we'll talk about routing later. Then we dug into what does an IP datagram actually look like. And there we go. IP datagram has a number of fields and this is the really interesting thing. These are, you can go look this up in RFC 791. We'll see what that looks like. There we go. So in the IP protocol, you can go look up all these tables, exactly everything that we talked about are kind of in these diagrams. Yeah, so you can hear this exact diagram is from here. So it has a number of different fields of how to parse this data. Some of the important things that we talked about are you need just like a, and the really important thing with networking is to think about the postal system. I think that's the best analogy we have for how things were like that. So we have the source IP address and the destination IP address. So we need to know if packets are going from one place to another on the internet. Where does that data go? And where is it supposed to go? And then specifically we need the destination IP to know how do we go back? So how do we come back? Let me see, I'm gonna get this out of the way. There we go. How do we come back from a, how does data come back from one side to the other? Other things we have in there, we have interesting things. We talked about a little bit the time to live field. So this is so that your packets don't spin forever in the network every hop along the way. The time to live is decremented by one and once it reaches zero, it's dropped forever. And so, and then now we'll start to look at the question of essentially how does data move from one place to another on the network in one hop? So that first hop. So kind of when you think about that stack that we were talking about, you have IP level and below that you have the link layer. So the way that this happens is essentially with encapsulation just like we have here. So we have the IP header and then that and the IP header with the IP data is encapsulated inside of a link layer. So we call that a frame. So we have the frame header and frame data. And so now this is essentially answering the question of how does a packet go from your machine to your router or your gateway right now? But to do that, we have to answer a question first. So let's go here. It's kind of nice using a big screen for this rather than the projector in class. Okay, moving you. There we go. Cool. So we have some machines, <IP_ADDRESS>. And we have another machine, <IP_ADDRESS>. And right now we'll just draw a little box. It's really ugly, not even a box. We'll draw like a switch. So we'll say this is a switch. They're connected right here. As far as to say they have some way to talk to each other here. And so the question though is, so we have these two machines and then we have google.com. So one of Google's addresses that they use for DNS is <IP_ADDRESS>. I did, thank you very much. And so the question is we are, let's say host A. And here we have host B. It's just from the slide. So it's no specific example, but it's from the slides. But it will be important in a second. So the question is host A wants to send a packet so from <IP_ADDRESS> to <IP_ADDRESS>. How does the host A know that that should be sent here? Whereas when it wants to send a packet to google.com or this isn't google.com but let's just say Google DNS. It uses <IP_ADDRESS>. And how does it know that that's somewhere else so it needs to go maybe from here to the router or let's call this a gateway. I'll just call it GW for gateway. GW to then go to some nebulous kind of system. We'll call it something cloud-like. Finally to 8.8.8. So if host A wants to send a packet to 8.8, it needs to first send it to the gateway where it'll go on its first hop, then it will send it somewhere else. It will go through several hops, finally making it there. So one of the key parts of IP addresses and with networking is we need to know how does a machine know what's on its local network? In this case, and by local we mean we can send a packet direct, an IP packet directly to that machine or on its remote network or not on its local network. So something remote that needs to go somewhere else. So this gets into this notion of a sub-network or netmask or there's actually a couple different names for this which makes it kind of annoying. So there's several ways that we can write this, deleting this for room. So we can think of in this example, we have host A has <IP_ADDRESS> and a sub-network of 111.10.20. Another way of writing this would be host A, <IP_ADDRESS>.121 slash 24. Let's see, yet another way of writing this would be, I can't go there, netmask of 255.255.255. Okay, these are all slightly different, a little bit complicated ways of deciding how do I tell if two IP addresses are on the same network? So there's a couple different ways to take these. So for the sub-net, and these all are the same thing. So for a sub-net, you would say anything that starts with 111.10.20 is on the same network as you. So that's why host A can say, is <IP_ADDRESS> on the same network as me? Well, let me check my sub-net, it's 111.10.20. This has a prefix of 111.10.20, which means yes, it's on the same network. Similarly with the netmask, although this is kind of cool, it allows more freedom, you can think of the netmask as take IP address, binary and it with the netmask. So what's the binary for this netmask? What would this look like? Oh yeah, I gotta call on people now. Oh, I have all of your names here, I can just call on people, this is amazing. As everybody frantically types in the chat so they don't get called on, great. Yes, so all ones, no, that one's wrong, but all ones, right? So the netmask here would be, yes, good question, Nate, let me get back to that. So here we have all ones, so 111, 111, or eight ones, eight ones, eight ones, and that with the IP address, which is a number, and that would tell you if it's on the same network or not. So it has to have all of those. And the other way to think about this is, sorry, just trying to clarify for people in the chat, I'm not trying to be mean. It's okay to be wrong, that's how we learn. And okay, so this other way of doing it is, 111, 101, 121, slash 24. So the slash 24 says what bit do you put the netmask at? So a slash eight would put it here because this represents the first eight bits, and this would be a slash 16. That would represent the first 16 bits, and the slash 24 puts it essentially here. So with this, you have much finer control because now going back to Nate's great question. So the question is then with the netmask of, let's see, 255, 255, 255, or another way to think about it with a slash 24 network, how many local hosts can you have on this network? Yeah, so, and let's walk through some examples so we can think about it, right? So host A knows its IP address. So then we can ask the question is <IP_ADDRESS>. Is that in the same subnet? Yep, and .2, .1, .2, .3, .4, .5, .6, right? All the way up to, is 255 on the same subnet? Yep, and also can, what about 270? No, because that's an invalid IP address, right? 10, and 21, what about this, 21.10? Good, okay, perfect. Yeah, question, Chris or Christopher. Chris, you're muted, we can't hear you. Yes, the slash number thing is the ending bit of the host number, so the slash means, slash 24 means the first 24 bits are the host, or sorry, are the network and the rest is the host. Yeah, so it exactly specifies what the netmask is. Okay, so yeah, we didn't talk about it. So 256 is a good one, so is 256 a host in that network? 256 is out of range, yeah, it's invalid, great question. Cool, okay, yes, and like people said, some of these are reserved for specific things, zero and 255, but for now we can ignore that because it's not really pertinent to our discussion of understanding what happens here. So, but fundamentally, and so now for this network, so we can see that we essentially have, we think about 256 hosts, right? Because we have essentially zero to 255 that we can use if we think about the reserved, not worry about the reserved ones, then we can think about that, but this just gives us a size of the network. So then how does that, but obviously, so if you think of somebody like ASU, how many machines does ASU's network have? Normally, yeah, more than zero, like a lot, way more than 256, great, I like these. And yeah, so the question is how do you do that? Well, you just change the net mask, right? You tell the network, so you can do, like if the net mask was now a slash 16, right? Which now would change the net mask to be 255.255 and the sub network to be 111.10. Now, what's the size of this network? How many hosts could you have on there? Right, 65,000, so that's pretty good. And then what about a slash eight, be two to the 24th? Yeah, like six million hosts, right? All internal in your local network. Cool, so yeah, this is, wait, so to answer the questions, let me see, is 254. Okay, so let's look at this. Could you have a net mask like this? No, because it needs to be all ones and it's basically based on kind of a hierarchy. So you look the separation here is, so in this a slash eight, this would be the network and this would be the host. So this tells you if it's local or external. And 254, so it needs to be in that hierarchical way. So you need to have like, the net mask is all leading ones basically. Yeah, why is it two to the 24? So it's two to the 24 on a slash eight because you have eight bits for the host, which are sorry, we're for the network and you have 24 bits for the hosts, which means it's two to the 24 here. Does that make sense? Cool. Okay, so now we have a great, nice, easy way to distinguish. So every host, so now the question is, what do you need for a host on your network? Every host needs to know not just its IP address, but also the net mask, right? So every host needs that, but once they have that, now they can know and we can answer the question of if slash eight is two to the 24, 60 million, a slash 24, a slash 24 is these bits are one, so it's eight bits for the host, so it's two to the eight. Yeah, you can think of, I mean, the formula is you do 32 minus this to the two, right? Cool, got this, cool. So now every host knows, so every host is configured not just, and this is now we get more and more complicated and more and more into real life. So every host needs to know its own IP address, also its net mask as well. And from there, it can know is a packet on its local network or for a remote machine. Then if it's for a local machine, then it needs to use the next layer, the link layer, to send the packet from, in this case, host A to host B. So we have an example, I guess I haven't tried full screen this. Can you see the screen? What do you guys actually see here? Is it the slides? Do you see the presenter view or? Okay, cool, the slides. Oh, presenter view, nice. Okay, thank you for that, got it. Okay, then we won't use that, I don't think it's, I think this is probably pretty good for at least size of seeing the slides. Plus like I can draw and do this. So slides loaded, but really low, yeah. Okay, so we have, now we need machines to communicate and we need, because of kind of due to the nature of encapsulation at the various levels of networking, we had the IP address layer and we need the other layer below that, the link layer, we need to be able to send data from one link to another in this local network. And so we actually need a whole another addressing scheme for that. So to do that, we use MAC addresses here. So this is, you've probably seen this if you've looked at your networking. And so just at a high level, essentially what happens is host A here, 111, 10, 21, 21, has a ethernet, has a ethernet address, a link layer address of 945FA072223. And so it, when it wants to send that packet from 121 to dot 14, it has to then encapsulate that IP packet. So the red here is the IP packet inside of a link layer packet and send that out. And what does that look like? Cool. Okay, so an ethernet frame is much simpler and here we're looking at it in terms of bytes. So this is a destination is six bytes and a source is six bytes. How does that compare with an IP address? So what size in bytes is an IP address? Yeah, so four bytes or 32 bits, right? So, and then so what's this six times eight? Yeah, 48 bits. So ethernet addresses are 48 bits, which is kind of interesting that they're larger than IP addresses. And that's why we display them in that different type of, so we can see here in this different format. So here, each of these one, two, three, four, five, six, each of these represents a byte and by convention, we represent these in hex values. Do you need to memorize all these formats? Yeah, I mean, it's important to be, to know if you're looking at something, is it a IP address or is it a MAC address? I mean, these are things that are gonna come up kind of throughout your career. So I wouldn't really think necessarily in too much. It's something that happens that you get used to it. So I don't know, difficult to answer, we can come back to that. But essentially the way an ethernet frame is, it encapsulates up to 1,500 bytes of the IP datagram to send that out. So looking a little bit, we don't need to go into all the details, but this is the, oh, the RFC standards. No, you don't need to memorize the packet layouts or anything. Yeah, we'll get into that. So widely used, okay, yeah. So ethernet is used a lot. The addresses have 48 bits, which is very interesting, different types as we'll see in a second. And one of the key things we need is, as we talked about here, so, and remember we've been talking about this in the context of IP. So here we have a case where host A wants to send a packet to host B. So it knows <IP_ADDRESS> and a MAC address identifies a machine on the local network. So we're gonna get into what that exactly means, but that's how data actually travels from one machine to the other on your local network. So let's say host A wants to send a packet from <IP_ADDRESS> to <IP_ADDRESS>. And the interesting thing, and the problem we have here, and this is kind of why I really like talking about this, is the TCP IP layering here. So you have an IP address at this layer, but in order to actually send that to that machine that's on your local network, it needs to go across the link layer, which means you need to know the MAC address, the hardware address that exists for that machine at the link layer. But all you have is the IP address. So we need some way, and this is where ARP comes in. It's this notion of, it's called this address resolution protocol. It's kind of like, we haven't got into it a ton, but it's kind of the DNS of ARP of IP and MAC address. So it's translating from IP addresses at the IP layer to hardware addresses at the link layer. Yeah, so ARP is the address resolution protocol. Thanks for that. And the idea is a host only should know the IP address that they need to talk to. And in order for that packet to move one hop, it needs to know what is the MAC address associated with host B. And so we need a protocol in order to do that. And the reason why we're going into that is because it's really important to understand this from thinking about a, there's actually security vulnerabilities that come up here. And the other reason why it's very different. So again, we're thinking back to that hierarchy, right? IP exists so you can send data from one machine like here, 111, 10, 20, 121, all the way to Google at <IP_ADDRESS>.8. But the cool thing is because of that encapsulation, I don't care what Google's MAC address is because I'm never sending data directly to Google. I'm only sending it one hop in my local network first and then it goes on from there. So the other way to think about it are MAC addresses and hardware addresses exist only within your local network, right? Which is again, identified by the net mask, the subnet and the, yeah, the subnet and the net mask. And so MAC addresses only make sense inside your local network and they never leak out, which is kind of interesting. So how does ARP happen? So we need some way of doing that. And so we can look and let's see if I'll try slideshow. Let's see. I know there's a button for this. I'm gonna play it without presenter mode. Nope. Oh, you know what? I think there's a way inside there. Or not. Ah, there we go. Swap displays. How about now? Can you just see the slides? Perfect. Okay. So now we have a situation where we have host A and host B, host A's IP addresses <IP_ADDRESS> and host B is <IP_ADDRESS> both with different MAC addresses. And one of the cool things. So if you're running a MAC or a Linux machine, you can actually inspect your ARP cache. So actually this could be an interesting thing to do of run this locally if you can. I know there's a way to do this on Windows. I don't know how to do it off the top of my head but you can run the ARP command. So ARP-A allows you to list all your current machines known ARP cache. So this allows you to say, hey, I'm on host A. What are all of the mappings that you know about between IP addresses and MAC addresses? So for host A to ping host B, so a ping is an ICMP echo request but just you can essentially think about it right now as just sending a packet from <IP_ADDRESS> to <IP_ADDRESS>. And so before it can do that because its ARP cache is empty, it needs to have a way of, host A only knows its IP address, its net mask and its MAC address. It doesn't know about anybody else's. So it needs a mechanism to find that in the network. So essentially what happens is, so we need, there's actually a link layer protocol that broadcasts this request out to everyone on the local network. Why does ARP-A, I don't know, I'd have to look at it. Is it Dropbox? There's something weird maybe? I don't know, we can look into that later. That's interesting. So we need a way because again, this is kind of interesting. We wanna send a message out on the link layer to the entire local network saying, well somebody Google that IP address, I'm sure it'll pop up and you can know exactly what that's for. And let's see, where was I, oh yeah. So we need to ask every single host on this network because we don't know is it host A, host B, host C. We don't even know if this IP address is up or not or connected to our network. And so we need a broadcast request to every machine on this network. And the way that's done is by setting the MAC address to all ones. So if you send a packet and you can see here, so host A is at, and this is TCP dump output. It is, so it's saying that here's an ARP request at the link layer from 80460704A3 and then to all Fs. So this all F, remember all Fs is one, one, one, one, one, one, one, one, one, one, one. Right, so all ones. And that means the local network will blast that out to every machine on there. And we can see it's decoded this packet, so it's an ARP request. And so this is a request saying to the network, who has <IP_ADDRESS>, whoever has that tell <IP_ADDRESS>. So host A blast this out on the network, Which hosts get this packet? Yeah, all of them, so great. So both host A, host C, and host B. So what does host C do with it? C does nothing, right? And how does it know to do nothing? Yeah, it checks this ARP request and says, do am I <IP_ADDRESS>? Nope, and I don't care, so I'm gonna drop it. So Ethan, the reason is because the, so this is the link layer source and here's the destination. So a destination of all ones goes to every machine on the network. And so that's why every host gets it. Host A is the one who sends it, but every host, including host C, host B, all of them get it. And so yeah, so let's see, who has, yeah. So host C drops it, host B gets this packet, says, okay, this is an ARP request for <IP_ADDRESS>, oh great, I'm that person. So it replies back, and so this ARP request goes to all the machines on the network. That ARP reply from host B then goes back. So now, and if you think about it, it's kind of interesting. So host B has all the information to send this packet. So rather than broadcast this reply to everyone and waste kind of the physical bandwidth here, host B sends this out just to host A because it has here the, so it has the source inside of that packet. So it is able to send it, oh, hello. Oh, okay, I guess we're looking at all of it. No, there we are. Sends that ARP reply back to host A from 0131D98B8, that is host B's MAC address, and <IP_ADDRESS>.4.A3. And with an ARP reply saying, hey, I'm <IP_ADDRESS>, and I'm at this MAC address, 0131D98B8, and then you'll see a bunch of IP packets. So these next ones are IP packets. And then the interesting thing is you can run ARP-A on both host A and host B, and you'll see that now it has entries for those in the local machine's ARP cache. Wouldn't the physical bandwidth usage for the apply be the same? No, because it has to go to each of the machines. So on a broadcast, every machine gets that request. So a broadcast has to go out to every single machine, whereas a reply will only go to the machine that needs it, typically. I mean, this again depends on the details of the networking, which we won't really get into. But you can think of it at least here, right? This ARP request had to go to host C and host B, whereas the ARP reply only has to go to host A. Yeah, so A, exactly. So the ARP reply from B to A, ah, yes, yes, yes. Yeah, great point. So this is the other interesting thing here. So because of this exchange, right, they both know each other's MAC address because host A knows about host B at that MAC address, but also because host B, based on this request, who has this, is able to update its own cache of what host A is at in case it needs to talk to it. Yeah, so that happens here as well. Questions on ARP requests for right now? Does host C, host C does not have an ARP reply because it does not have that IP address. So host C checks this, the request's IP address. So it says, host C checks, I'm not <IP_ADDRESS>, so I'm not going to reply. So only host B will reply and only host A should get the ARP reply. Although let's hold those questions for two more slides because we'll talk about that about exactly what happens. So this is just, this is the kind of crash course, the basics of how data moves from one machine to another on your local network. So again, the important concepts are checking with the net mask to see, is this IP address on the local network? If it is, then use ARP in order to map that IP address to the MAC address and then you can send that packet to that machine locally. And this actually gives rise to a number of really interesting local area network attacks. So even with this little bit of networking that we've learned, we're actually able to launch some interesting network attacks. And so some of the things we want to accomplish with these local area network attacks, we may want to impersonate a host or machine on the network. We may want to cause a denial of service to knock somebody off the network. We may want to access information that's being sent across between two machines in our local network. And so what would, let's talk about what are some, let's talk about what are some cases and scenarios where this could be true that what would be a way that you could want to impersonate a host or access information. Don't be shy, unmute yourself, jump in. Voice chat, I like voice chat, especially for something like this would be good because I would like us to chat about it. It's like what would be a scenario where you could maybe impersonate a host or access information or tamper with some kind of information on a local network? Yeah, Robert. Yeah, so when would you want to do that? So more high level, right? So like why would you want to do it? Let's go with that. Yeah, maybe we're all on a network like at Starbucks or something and there's open Wi-Fi, we're all on a local network.  So a denial of service. Maybe I want to access your information that you're using. Maybe I want to pretend to be Google. Other scenarios would be maybe you, so the question is kind of like what are kind of scenarios around local networks where these types of attacks actually make sense, right? So one would be maybe a coffee shop. Another could be a, so you've broken into a web server on a company's network and their web servers on the same local network as their database server. So you want to intercept all the database communications. Maybe you've gotten malware on an employee's computer inside of a network and you want to pivot from there to a developer's machine and they're on the same local network as a developer, right? These are all different types of scenarios and attacks that you actually want to be able to do this. So yeah, act as a company to steal login info is a good one. Yeah, so and kind of we'll think about, and throughout network security when we look at these things, we'll be thinking about sniffing. So you can actually get just a lot of information just by listening to traffic. And yes, this is something you use Wireshark or TCP dump floor to sniff and monitor the traffic that's on your network. Spoofing, so spoofing is a, is basically when you're impersonating somebody else on the network, so you're pretending to be them. So maybe you're on a network where a specific IP address is given, a specific IP address is given a lot of trust in the network, maybe you can log in to a server without authentication. And so that can help there. Does a Combride device on a local network have elevated risk to other devices on the network? Yes, yeah, for sure. And that's what we're gonna get into there. And we'll talk about all these things, but and so hijacking is you wanna hijack the communication between either two machines on the local network or a remote machine on the network. And so one of the interesting things that we were gonna talk about briefly is the difference between a hub and a switch in terms of networking. So anybody know what, do you all know what a switch looks like? Yeah, some of you. Okay, we'll look at something like this. So this is kind of the most craziest version. Oh, why can't it go bigger? Here we have a pretty insane, what's this? 96 Ethernet port switch. And yeah, let's see, is there any other good ones? You're probably, let's see, more familiar with, that's the same image while it's funny. You're probably more familiar with something maybe like a home router, maybe something smaller that has maybe just a few ports on the back, maybe eight ports, four ports, right? Oh yeah, here's a good one, cool. Yeah, a hub does look similar. We're gonna talk about that in a second. So, okay. So, how do you build one of these things, right? And how do you build the thing that you plug in, you know, an Ethernet cord in and data comes in and it needs to come out in different ways, right? So one of the easiest ways that you can do this is you have, we'll draw this whole thing as a switch or maybe we can, let's see how good my mouse based. So here we have like P one. So you talk about these in terms of ports, so port one, two, three, four. And so you have a machine plugged into this port, a machine plugged into this port, just like our previous example, right? We had A, C and B. So one thing I could do, and to just do this simply, is anytime I get traffic from A or on any port, I just send it out to every port. Would that make sure that the packets get to where they need to go? Yeah, because you're sending them literally to everyone, right? So and everyone A, B and C each have their own hardware MAC address. So they know to only listen to packets that they're on. And so one of the downsides, which some of you are pointing out, which is definitely true is if A and B are streaming maybe a high bandwidth movie or something and C is also trying to use the network, C is getting all of those packets and it's wasting a lot of bandwidth. So this is kind of a, the hub model is basically just, I'm not even sure if you can buy them anymore, but hubs basically send data everywhere, right? To all the things. And so network switches actually are much smarter. So the difference between a hub and a switch is a switch keeps track internally based on what MAC addresses are on what ports. So it keeps a mapping between MAC address of A is on port one and when a packet comes in from B to A, it looks it up and only sends it out on port one because it knows that it's the only one that's on there. So C never gets that traffic. So the idea is, and we won't go into the details, but basically broadcast traffic is sent to all connected hosts on, so broadcast traffic, right? We talked about all ones get sent to everyone, whereas other things only get directed traffic and this gets into when we talk about sniffing and looking at data on the network, this has a significant impact. So yes, the hub is the equivalent of connecting all the cables directly to each other, exactly. Yeah, cool. So yeah, we made it pretty far. I don't know, how'd we do? Pretty good. Do you miss being in class? More time? You want more time, huh? Don't worry, we'll have more time. We have a whole rest of a semester like this, so. Tested the annotation. Yeah, I've disabled the annotation so you guys don't mess it up, no offense. Cool, yeah. All right, cool. So yeah, Kyle, what's up? Yes, yes, so I'll have my office hours later today. I will post a link on Piazza, so you can come hang out and we'll do office hours. Yep. All right, good luck everyone. I guess, I don't know if I should, well. Stay safe, have fun, and learn stuff. And trust each other, be nice. Don't trust each other, but be safe and be nice.


Hello, I'm Jehilam Pandit and I'm a product marketing intern in the OpenShift product marketing team at Red Hat. Today, in the next few minutes, I will be talking about why you should deploy database and data analytics workloads on Red Hat OpenShift. Here is the agenda for today. We will start by providing an overview on the potential of databases and data analytics workloads and why deploy them on containers and Kubernetes. Next, we will talk about the challenges with operationalizing databases and data analytics workloads on containers and Kubernetes. Finally, we will provide an overview of why Red Hat OpenShift and how Red Hat OpenShift can help you accelerate cloud-native app development by deploying databases and data analytics workloads on it. Databases and data analytics are crucial to cloud-native development. They are an integral part of modern cloud-native applications. These workloads are being deployed by organizations globally for mission-critical applications, such as developing mobile apps, e-commerce apps for processing online transactions for data and business intelligence, and AIML. Containers and Kubernetes are in the critical part to succeed with cloud-native development. For successful and efficient cloud-native app dev, containers and Kubernetes are used to deploy all varieties of workloads. They give you the ability to scale in and out based on business requirements. They give you the agility to deploy workloads fast and respond quickly. They also make the workloads ready to be ported. Red Hat OpenShift is the container and Kubernetes platform of choice for databases and data analytics workloads. It automates and simplifies operations. Red Hat OpenShift enables a broad spectrum of databases and data analytics softwares to be automatically deployed and lifecycle managed, empowering the system administrators to focus on more strategic tasks that are important to the business. It gives consistency and portability across hybrid cloud. Secure and consistent deployment of databases, data analytics, and all workloads is crucial to cloud-native app development. OpenShift gives you this consistency and offers flexibility by providing a platform across the hybrid cloud, including Edge, as well as providing customizable development and deployment options. Red Hat also has partnerships and integrations with key database and data analytics ISVs. So what exactly are databases and data analytics? Databases are used to store important information, such as analytical, streaming, and transactional data electronically. There are two types of databases, relational, for example, Microsoft SQL Server 2019, and non-relational, for example, MongoDB, Couchbase, et cetera. Data analytics includes tools such as Apache Kafka, Red Hat Data Grid, Red Hat AMQ streams, and they're used to gather and analyze data from multiple sources to achieve valuable insights. It facilitates data ingestion, data storage, preparation and transformation of the data, and helps in analyzing and visualizing the data for business intelligence. We are seeing an emerging trend of databases and data analytics being deployed on containers and Kubernetes-based hybrid cloud solutions. So let's talk about benefits of the same. Continents and Kubernetes help accelerate cloud native app dev by adjourn deployment of databases and data analytics workloads. Based on our experience of helping organizations globally, these are the top benefits that you can achieve by deploying databases and data analytics on containers and Kubernetes. Due to the agility provided by containers and Kubernetes to your databases and data analytics workloads, you will be able to deploy, test, and manage databases and data analytics with speed. You will be able to serve your customers faster and better with agile deployment and faster response times. You will be able to make use of dynamic scaling of compute resources to meet the changing needs of databases and data analytics, and scale in and out as per changing needs. You will also be able to port your databases and data analytics wherever needed, whenever needed. Datadoc, which is a leading monitoring service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, in its 2019 report, analyzed more than 1.5 billion containers run by thousands of Datadoc customers. According to this survey, databases such as Postgres are running in more than 30% of containers in orchestrated environments, closely followed by data analytics, data analytics software such as Elasticsearch and the MongoDB database at more than 20%. This shows that a significant number of workloads running on Kubernetes are databases and data analytics workloads. And there is also a growing trend of deploying databases and data analytics in containers and Kubernetes. For example, there is a 50% increase in the deployment trend of Postgres in Kubernetes from 2018 to 2019. Another leading company, Cystec, that provides a powerful way to observe system behavior, troubleshoot application performance and secure container platforms carried out a survey in 2019 that incorporates details from both SAS and on-prem Cystec users to provide a snapshot of enterprise usage across well over 2 million deployed containers. Database such as Redis, Postgres SQL, MongoDB and data analytics such as Apache Elasticsearch make up for nearly 50% of the workloads being run in containers. This goes to show that databases and data analytics are extremely popular workloads in containers and are being adopted by more and more businesses in recent times for deploying cloud native apps. Here are examples of business outcomes achieved by organizations across various industries because of databases and data analytics workloads that they have deployed in containers and Kubernetes. We can see how what a wide range of use cases and what a wide range of industries this is covering. We have healthcare which is using databases and data analytics workloads and containers and Kubernetes for patient record management and we have financial services which is using it for critical applications such as fraud detection, risk analysis and mobile banking. We are seeing an increasing trend in government and energy sectors wherein they are using this and deploying databases and data analytics workloads and containers in Kubernetes to develop mobile and web apps and forecast customer needs and do a lot of real-time analytics. We're also seeing the fact that there are a lot of companies in the manufacturing and the logistics domain that are using databases and data analytics workloads on containers and Kubernetes for asset tracking, inventory management, et cetera. This is a desired conceptual architecture for databases and data analytics on containers and Kubernetes. The first step in the databases and data analytics lifecycle is to ingest and aggregate the data from various sources. For example, sources like sensors and smart devices, social media streams, banking transactions and so on. ETL operations are carried out in various forms of the data. For example, the data could be stream data, batch data, et cetera, and then the data is ingested. This data can be stored in an operational database to serve as a transactional database for online transaction processing or it could be stored in a data lake for data analytics. The database could be a SQL or a no SQL database and the data lake could be an S3 object storage. The next step is to prepare, process and transform the data using tools such as Presto, Apache Spark and store the processed and organized data into the analytical database which could be again a SQL or a no SQL database or this clean and structured data could be stored in a data warehouse as well. The final step is to perform analytics on the data for business insights and data visualizations and tools like Apache Spark could be used for this. Organizations may also choose to do AIML as a next step after data analytics. For a cloud native architecture, a containers and Kubernetes powered hybrid cloud platform is required to run all of these software tools in a consistent way for all of these stages in the data lifecycle. The platform should have set service capabilities so that data engineers, software developers can consume the resources in a self-service way as needed with an integrated compute acceleration to ensure good performance and seamless experience. Now let's shift gears for a bit and talk about the implementation challenges that organizations face when they try to containerize databases and data analytics. There are a few implementation challenges that come with deploying databases and data analytics workloads on containers and Kubernetes. Data loss, failures, and downtime is a major concern with these, with containerizing databases and data analytics. So is the operational complexity and performance trade-off that might be involved? There could also be a concern of a lack of ice, we support endorsement or documentation. Lack of support, caps and skills and processes is also a potential concern. Now let's talk about why Red Hat OpenShift and how the broader portfolio can help accelerate your cloud-enabled environment by helping you deploy databases and data analytics as a part of your overall architecture. Before we talk about OpenShift specifically, here are the value propositions of Red Hat for operationalizing your databases and data analytics workloads with us. Red Hat has a proven track record of helping organizations globally operationalize these solutions on Red Hat OpenCloud based on OpenShift. We have a comprehensive portfolio that helps complete the requirements of the cloud-native app architecture. We have powerful partnerships and integrations with key ISVs in the ecosystem that will help you accelerate and simplify the deployment and lifecycle management of databases and data analytics and all workloads. Finally, Red Hat is the leader and the trusted enterprise developer and provider of open-source software-based hybrid cloud solution. Let's explain how we built OpenShift. At Red Hat, we use a 100% open-source development model to deliver enterprise products. A secret source is our ability to own dozens and hundreds of open-source projects in a production-ready, stable and secure enterprise products that we support over many years. We have been contributing to Kubernetes and many other projects that OpenShift is based on since day one. Red Hat is the leading enterprise developer of Kubernetes besides this project sponsor, which is Google. OpenShift is robust and ensures that there will be no data loss or downtime when operationalizing databases and data analytics workloads on it. This is why you should be deploying databases and data analytics workloads on OpenShift. With OpenShift, you gain access to automated operations with Kubernetes operators, consistency and portability across different clouds and across all parts of the app development lifecycle. And we also have deep partnerships and strategic integrations with database and data analytics ISVs to ensure support, access and the ease of analyzing and visualizing the data easily. Your data is valuable if it can be stored and it can be used with agility and analyzed for business insights. Power your data with Red Hat OpenShift. With OpenShift, you get automated operations because of Kubernetes operators. Operators automate a lot of day one to operations such as provisioning, backup, scaling, et cetera, which will help system administrators, database administrators, software developers to focus on more projects and strategic tasks. Operators make databases more accessible and supported. A variety of database and data analytics ISVs have made custom operators available on Red Hat OpenShift. Red Hat is actively working with database and data analytics ISVs to ensure that the operators are certified on OpenShift, are up to date, secure and have regular scans. OpenShift secure deployment, operations and portability in a consistent way across the hybrid cloud. It offers a unified consistent manner of deploying databases, data analytics and all workloads on the same platform across different phases of your app development life cycle, be it development, test or deployment. These deployment and all of these operations are secure and can be done in a consistent manner across the hybrid cloud because Red Hat OpenShift offers several options. The fully managed option, you have Red Hat OpenShift on Azure. OpenShift is supported on AWS, on IBM cloud, on Google Cloud and we have a self-managed option. All of these options are to accelerate deployments by based on whatever you choose based on your need. We have strategic partnerships and deep integrations with key ISVs and we also have Red Hat products in the data analytics ecosystem space. These integrations and partnerships ensure that customers can choose to report portfolio of databases in their Kubernetes operators to deploy their databases and data analytics workloads easily. We're also working with the ISVs to get them certified across various certification standards, which ensures availability of operators, security and support from both Red Hat and the ISVs. We have partnerships with key database ISVs such as Microsoft, MongoDB, CrunchyData, CouchPace, NuoDB and data analytics ISVs such as Microsoft, SAP, SAS, Cloudera, Starburst and all of their operators are available to help make our mutual customers successful. You can integrate your databases with data analytics products like Red Hat EMQ streams, data grid on OpenShift to not only store your databases but also fire up agile analytics. Red Hat Marketplace simplifies the process of acquiring and deploying the databases and data analytics softwares on OpenShift. Red Hat portfolio helps provide complementary products to support you throughout the databases and data analytics lifecycle in OpenShift. Red Hat Storage portfolio includes Red Hat OpenShift Container Storage and Red Hat Chef Storage that provides software defined storage capability for containers and helps address beta byte scale storage requirements. We also have the Red Hat Middleware portfolio which provides frameworks, programming languages and runtimes. All of this is definitely built on the very robust and very secure foundation for running database and data analytics workloads on Red Hat OpenShift which is Red Hat Enterprise Linux. Red Hat OpenShift is equipped to support you in your journey with databases and data analytics workloads. We have a broad set of ISV ecosystem and strategic integrations that will help you simplify and manage databases and data analytics. All of these tools can be run and are enabled by Red Hat OpenShift. It also supports all kinds of footprints such as AWS, Microsoft Azure, IBM Cloud, Google Cloud and Red Hat OpenStack platform. OpenShift Container Storage can also span across various clouds and footprints and all of this is built on the very strong foundation of Red Hat Enterprise Linux. So to summarize, databases and data analytics are critical to cloud native development. They are an integral part of modern cloud native applications and they're being deployed by organizations globally for a variety of use cases such as developing mobile apps, e-commerce apps, IoT apps, AIML, business intelligence, et cetera. And containers and Kubernetes are in the critical part to succeed with cloud native development. They give you agility to scale in and out based on business needs, agility to deploy workloads fast and respond quickly and they also make the workloads ready to be ported. Red Hat OpenShift is a container and Kubernetes platform of choice for databases and data analytics workloads. It automates and simplifies the operations by providing a broad spectrum of databases and data analytics operators to be automatically deployed and lifecycle managed which will empower the system administrators to focus on more strategic tasks. It gives consistency and portability across hybrid cloud. It offers flexibility by providing a platform across the hybrid cloud including Edge and provides consistency across public cloud, private cloud, on-prem and consistency throughout your app development lifecycle be it say development, test or deployment. Red Hat also has partnerships and integrations with key database and data analytics ISVs to help make our mutual customers successful. As next steps, we recommend giving us an opportunity to come back and do detailed requirements, discovery sessions to help us develop a solution strategy and execution roadmap for your specific goals. You can also learn more about our database and data analytics capabilities and see success stories from existing customers on our website. You can also watch webinars with our partners to discover a wide range of videos answering all your database and data analytics related questions. Please reach out to our sales team if you want to learn more or have any questions. Thank you so much for listening. I hope you have a good rest of the day.


Good evening, everyone. I hope you can hear me clearly. If you don't, please post on the chat. My name is Arvind. And in today's recitation, we're going to go over the assignments, basically. I'm going to walk you through the questions. This is describe, generally, what needs to be done, and also share some general comments that I have to say based on the discussions that I'm seeing on Piazza and some of the questions that I've also been receiving. So let's get started. So this assignment is basically a bigger level of assignment that's mainly to get you comfortable with using Linux. That's the part two. And also, we are looking at getting you familiar with using make files and also command line arguments. These are three things that are basically going to be useful for you in future assignments. So let's dive into each of the parts. I hope part one is pretty clear. I hope everyone who attend here have already registered on Piazza. I think there are still a few people who haven't enrolled there. If you haven't, please do join. There are a lot of discussions happening there, lots of questions being asked, and lots of people helping each other out. The part two is primarily about this war game called Bandit, which is a bigger level war game that lets you get familiar with using Linux commands and the terminal. A lot of people we have seen are not very comfortable using the command line on Linux. So this is going to get you up to speed in using that. But we also just don't want you to just play Bandit. Before you do that, you also need to register for an account on Vechal and link your Vechal account to Bandit so that we can automatically track your progress. A lot of people actually having trouble linking their Vechal account to Bandit. So I'm just going to dive a bit into that. So these are the instructions to actually link your Vechal and Bandit accounts. These two need to be set up first. And these two need to be done on your machine, the machine that you will be using to SSH into Bandit servers and not on Bandit server itself. A couple of people have been using these commands on Bandit server. That's not exactly going to work. You have to do this on your machine. If you do want to do it on Bandit server, look at what Adam demoed during the lecture yesterday where he showed you a nice quick way of doing it if you're on Bandit server without having to export this and pass it over SSH and things of that sort. This step is also something a couple of people have been having trouble with. Sometimes this directory here, till slash dot SSH, might not exist. And you would have to actually create it. So if it's not there, if you're having trouble writing it, make sure that this directory actually exists before you actually configure this file. The other important thing is that this config file needs to have a very specific permissions. It has to be readable and writable by your user, but not by anyone else. There is a discussion on PRSR, which says what permissions need to be set and how to actually set it. The command to do that is ch-mode. And the permissions that you need to set are 600. You can just search online on how to exactly do it. And once you've configured this clearly, and if you have also set these variables, everything should be working fine, and you should be able to play, bandit, and solve level after level. There is also a URL on your WeChat profile, where I think you can verify if the linking was done correctly. Someone had posted the URL to check if the linking was done properly on PRSR. So I would recommend that you go there and check again. And once you do that, you just need to solve levels one to five of bandit. And automatically, your progress will be updated on WeChat. And when you submit your readme file, we will automatically check if you have finished all the levels and give you the appropriate grade. A couple of other things about the bandit is that you can also just solve all the levels at one go, and then run the single WeChat command, and then everything gets automatically synced. Admer also mentioned that during yesterday's lecture. If there are any questions, please post it here. Otherwise, I'm going to move on to part three, which is about using makefiles. Now, makefiles are primarily some configuration directives that you give to the make command. The make is actually an automatic build system that can quickly run a set of series of commands that you don't have to keep copy-pasting a bunch of commands to recompile every time. It's one of the most widely used build systems on Linux. There are, of course, many other build systems. And I believe even Windows has one which is called nmake. But in this one, we are primarily going to write two makefiles, one for compiling C programs and the other for getting an executable out of Python. So the important thing is that you have to name your makefiles specifically as makefile.c and makefile.python, because that's what the grader would look for when you submit your solution on grade scope. Now, I think most people have got the C makefile correct. There is not much issues. You just take this source code file that Aram has provided and write of C makefile to compile this and generate this executable file, and that's mostly it. I've seen that a lot of people have been having trouble with the Python makefile. I'd see a lot of questions on PSI asking. I couldn't find any resources on how to do it. The key thing to remember is that a makefile is nothing but just a sequence of commands that you specify. There's no other magic to what is a makefile. And another important thing is that since Python is actually interpreted and not compiled, makefiles are not very commonly used in Python programs. And that's why you would not find many resources. But you don't really need to know too many things on how to actually do it, because one of the commands that you need is actually given here. This is the command that you use to make your Python script executable. And that would be this file here that you create. Finally, it should be executable. The other thing that you need to also know is that when you want to run the Python program as .slash Python program, it should also specify the shebang. You can read more about this. It's basically a directive that you give inside the file which specifies which interpreter to use, because Python is interpreted. There is nothing to do with make or Python to write this next file. It's a series of simple Linux commands that you actually need to create this file executable program from this script file. If you have any other comments. Right, a couple of people have been posting their make files. And I'm seeing that many of you are running the Python script for the Python make file. That is not what is supposed to happen. The make file should only build the final program. It should not actually execute and print the output anywhere. We will execute the final executable that you produce ourselves after the make is completed. The other thing is that a lot of people have been having formatting issues in your make files. Make is very picky on how the file should be structured. You cannot mix tabs and spaces. In fact, I think make files will not accept spaces. Everything should be aligned using that. If you're using a reasonable IDE or an editor, it should automatically detect the make file type. And it should set all the indentation and everything appropriately. If it does not, you might have to manually specify to the IDE that you're actually editing a make file and then everything would work correctly again. The last thing that I've seen a lot of people struggling with is that since we have custom names that are needed for the make file, and when they try to build their solution locally to test it, they say it doesn't work. Now make command by default looks for a specific file name. And since we're not using that standard file name, make is not going to find the make file. In fact, I think for some cases, it actually tries to build the make file.c when you run the make command without any arguments. There's a specific option that you can use to make in order to specify use a custom make file. I'm not going to give you the option, but please look it up. It's very easy to find. That's also how we'll be evaluating your solution. So key thing to remember, do not run the Python script. We don't want the output to run in make. We just want the final executable to be produced, and we will run the executable ourselves. Be sure that if there are any formatting issues, make sure you don't mix tabs and spaces. Do not use spaces in a make file, only use tabs. And finally, make sure that if you're trying to test your custom make file, please specify the option correctly so that make picks up the correct make file. The last part of this assignment is about command line arguments, which is basically one of the ways that you can give inputs to a program in addition to ways like you can give input via the standard input. Now, command line arguments are going to be used for many of the future assignments, so it's always good to have a nice understanding on what they are and how do you use them, right? So in this, you need to produce a program called command, which when passed arguments in this format would specify an output saying, this is the number of arguments and this is each argument. Now, in case you haven't seen Adam's post on Piazza just a few minutes ago, he has relaxed some of the requirements for this part, specifically that if you have a trailing white space that's going to be ignored by the grader because a lot of people were missing that since it's not very apparent from the output that you give on grader, right? But in case you find that the output that is produced by your command is correct, it likely means that you have made some formatting issues somewhere, so always just go back and check. And if you still can't figure it out, maybe create a post on Piazza and we take a look at it, right? So the tricky thing here would be of course this, but I think if you were to implement your program correctly, it should still work. We have no language requirements for this part, so you can write it in any language as long as you produce an executable output file called command, which is going to run your solution and it's going to print the answer. So if you were writing in some interpreted language, make sure that you invoke your solution correctly from this executable file. Couple of people who are writing in Java had recent issues about it. There are ways that you can do it. I think there are some solutions which are also discussed on Piazza, so I encourage you to go back and check. But it's definitely possible. You just need to make sure that you have this file here as executable, which is going to invoke your solution and print the output. That's how we are really going to evaluate, right? Couple of other general guidelines for this assignment. I see that a couple of people are testing on possibly non-standard environments which we are not testing on, which is giving a different behavior where the people say it works on my machine, but then the grader says that it's not correct. I strongly encourage that you test on Ubuntu 18.04 as well because that's also what we are testing on. So if you see any issues locally, it should also happen remotely, right? Another important thing that many people have been doing is they upload a file, readme.txt with some extension, and then the grader says that no readme file is found, but then they upload a readme file. The readme file has to have the name readme in caps. No extensions are necessary. You can configure your IDE or editor to save without an extension. If you add an extension, the grader is not going to find the file and then it's going to complain that it couldn't find the readme file, right? The third thing, I'm seeing that many people are posting on Piazza that I try running a specific command, it didn't work, and then I ran the command with sudo in front of it and then everything worked fine. Well, for probably most of the commands, it's safe. I would still not recommend that you randomly just prefix sudo if your command as regular is not working. Now, of course, don't know how the Ubuntu subsystem inside Windows works, but normally you shouldn't have to run sudo for almost any command that you need in this assignment. If you see that you're faced with a situation that you need to run sudo, you might want to ask yourself if there is something that should be done differently. On the grader, we will not evaluate any commands with sudo, so if you find a situation that you need to solve it with sudo, you're probably missing something and you will want to go back and check. This is a general tip, not necessarily something for this assignment. And finally, of course, of late people have been doing it correctly, but if you face some kind of an error, I strongly encourage that you just run a search online for it. It's very, very likely that someone has faced an error like this before and there is a solution very likely available online. You don't necessarily have to quickly go create a PR support as soon as you encounter an error. Run a search, in a few minutes, you will very likely find the answer. So that's mostly what I had to say in this assignment. I just, if you have any questions about this assignment and also necessarily about the course material that has been covered in now, you can post it on chat and I can always try answer. So question I was asked here is, how do you remake the Python make file exactly since it's not a compilation? I'm not sure what you meant by remake the make file because you just have to create a make file once and it should just work. You will not have to edit the make file. If you go clarify the question, that would be good. Or I said that are you asking how do we make sure? I think one of the assignment questions is that it should work fine if the file is modified and it should still rerun. Is that the question? Okay, I'm not seeing any response here. I'm just waiting for response. Okay, yeah, sorry, I just got applied. Right, so the question is basically that in the C make file, the make was able to determine that it did not need to change anything and so it did not rebuild anything. But in the Python make file, it keeps running the operations over and over again, even though the actual file was never modified. So how do you make the behavior same as the C make file? That's what I'm assuming the question is. Now, if it works on the C make file, then you probably want to compare the C make file with the Python make file and see where is the difference. You just were not specifying some kind of a dependency check that make has to do to determine if a file was updated and so a recompilation is required. If it works correctly on C and if it doesn't work correctly in your Python make file, I'd recommend that you compare the two together. You will notice that there is some difference between the two and that is the one that's missing in your Python make file. I hope that helps you find the answer. Anybody has any other questions? Please post on the chat and I'd be around for some more time if anybody wants an answer. So I have another question here. So the Python make file is supposed to have Linux commands to change the Python underscore program dot type to Python underscore program. Yes, mostly because Python is not compiled. You just need to interpret it. So there is not a lot of work that's actually necessary to convert the Python underscore program dot type pi to Python underscore program itself. I hope that answers the question. If not, please respond on the chat and I can clarify further. Also in case you didn't notice, Adam just created a note on Piazza. For those of you who are working on part four using Java, he's uploaded some files that's going to be helpful for you with the assignment. So please take a look at it if you already haven't.


What's up everybody Jason here from jazby's case breaks calm This is 2020 leaf best of gem mint multi sport one box break random hit number one We are guaranteed either a nine five or a ten. So again As you can see right there leaves excited to announce an introduction of a brand-new trading card buyback item 2020 leaf best of gem mint and these are the potential huge hits out of here They could get out of the gem imprint a print run. Sorry So again the way this break works though is there's ten spots Everybody's guaranteed a hit first. We're gonna open up the gem in box Show you the ten hits that pop out then we're gonna come back over here Randomize the ten customer names and we're gonna type in the ten list of hits and whatever you match up with in the Google Dog is what you get for the break So everybody is guaranteed something and as it says here it does include baseball basketball football hockey soccer tennis racing Boxing wrestling and MMA. So there you go. So let's show you guys the hits first Here's the case right here. That's a cool little box right here First one we got is a PSA 10 Daniel Jones 2019 Panini prism PSA 10. There you go. That's the first one next what we have Is a PSA 10 Cody Bellinger 2017 tops updates Swinging as well Cody Bellinger Next one PSA 10 Juan Soto 2018 tops update very nice Nice Luis Robert. That's a prospect chrome first PSA 10 From 2018 Bowman PSA 10 rookie of Ronald Acuna junior from Heritage Very nice Very very nice First bgs slab, and it's a pristine 10 Autograph of Nick Castellanos 2012 Bowman prospects Nick Castellanos is a pristine 10 only the centering was a 9-5 everything else was a 10 and 10 autograph as well Excellent. We have a Vladimir Guerrero junior 2019 tops missing card number so this is actually a Short print or misprint. I remember actually the missing card number actually sells for much better Than the regular as well. So that's that's a big one right there when it comes to the missing card number Very nice. All right, we have a bgs lab. It's 9-5 Zion Williamson, it's a prism draft picks pink Pulsar very nice That is numbered. No, I'm not numbered but still pink Pulsar Let's say there's like a little surface Over the slab, but that's normal. Sometimes they come a little scratched There you go. That's a nice one though. Someone's gonna end up with a nice little Zion 9-5 A couple of us PSA 10 Oh, this is like old school PSA 1993 tops Derek Jeter Look at that. You could legit tell all this is This is great. Wow a bag in the day That's pretty nice Derek Jeter tops and the last one here guys. Good luck. It's a 1997 Tracy McGrady PSA 10 debut That should be a rookie team act. All right There you go guys. So Let's quickly just re go through these so you guys can see them and they'll be back in this order So Daniel Jones PSA 10 Cody Bellinger PSA 10 Juan Soto PSA 10 Luis Robert PSA 10 prospects first Barakuna junior heritage rookie PSA 10 a pristine 10 Nick Nicholas Castellanos or Nick Castellanos a Missing number I don't know. That's a short printer. I guess a misprint PSA 10 Was I on 9-5 pink Pulsar a 93 topster Jeter PSA 10 and a team act 97 finest PSA 10 rookie So there you go guys. Alright, so actually let me pause the video for about a couple minutes while I type in these names And when we come back, we will see what what customers end up with All right, guys, welcome back. So here are the card cards that are in the break. I got PSA 10 2019 Prism Daniel Jones a PSA 10 2017 tops update Cody Bellinger 2018 tops update Juan Soto PSA 10 2018 Bowman's first Luis Robert PSA 10 a 2018 tops heritage Ronald Acuna junior PSA 10 a 2012 Bowman Nick Castellanos autograph BGS 10 a 2019 tops missing card number Vladimir girl junior PSA 10 until the 1920 prison draft picks pink pulsars I'm willing to be GS 9-5 And then you have a 93 tops Derrick Jeter PSA 10 and 1997 finest Tracy McGregor a PSA 10 and then here are the customer names that are in Corey Ryan Chris Matt Jeremy Brian Foster with three the fourth one at the bottom and then Jeremy a tee Right there as well. So good luck. Let's roll the dice And it is a one or two three times where everybody's guaranteed something. Good luck. Whatever you match up is what you get One two three boom Brian Foster at the top done a Brian Foster at the bottom and we got three times here now one two three 2012 Bowman Nick Castellanos auto BGS 10 pristine at the top down to 2017 tops Cody Ballinger update PSA 10 so Brian you have the 2012 Nick Bowman Nick Castellanos auto BGS 10 pristine Jeremy S with the 1993 tops Derrick Jeter PSA 10 Matt L with the 2019 tops missing card number Vladimir girl junior PSA 10 Brian Foster 2018 tops heritage Ronald Acuna junior PSA 10 Ryan L with 2018 tops Bowman's first Louise Robert PSA 10 Corey with 2019 prism Daniel Jones PSA 10 Chris Erickson with 2019 20 prism draft picks pink pulsar Zion Willamson BGS 9 5 Jeremy T with 2018 tops update Juan Soto PSA 10 Brian Foster at 97 1997 finest Tracy McGregor PSA 10 and as well as 2017 tops update Cody Ballinger PSA 10 So there you go guys. That was the break. I appreciate it guys I don't know if we have any more of this, but if we do we will post it up on Jasper's case breaks calm Thank you guys