COLTON OGDEN: All right, everybody.
This is CS50 on Twitch.
My name is Colton Ogden.
I'm joined today by.
NICK WONG: Nick Wong.
Hello, I'm back.
COLTON OGDEN: He's been here several times last.
Time we talked about Linux commands.
NICK WONG: Yes.
COLTON OGDEN: Which was awesome.
NICK WONG: We tried to talk about Linux commands.
COLTON OGDEN: [INAUDIBLE] because if we go to this screen,
we have the screensaver that you showed us how you set up, which is awesome.
The very first stream that you talked with us about was--
what was the first one?
NICK WONG: Machine learning, I think.
Yes.
COLTON OGDEN: Machine learning.
[INAUDIBLE] you did showcase this as well.
NICK WONG: Also showed this off.
I really like this one.
I think it's super cool.
Whoever made C matrix should really--
this and advertisement for your program.
You did a great job.
COLTON OGDEN: What are you going to talk about today on the stream?
NICK WONG: Yeah, so today we're going to talk
about AWS, which is Amazon Web Services, in case you
have not heard of everyone's favorite kind of infrastructural support.
And we're going to build some web servers on it.
That's a very vague term.
All sorts of things are web servers, like mail servers and stuff like that.
But we're going to talk about kind of everyone's
kind of mental conception of it'll deliver a web page to us in some shape
or form.
COLTON OGDEN: So Amazon Web Services is being
kind of our ability to have a server in the cloud as opposed to just somewhere
in a building somewhere, basically.
NICK WONG: I don't have to lug the giant rack server around.
Amazon does that for us.
COLTON OGDEN: Amazon does all the hard work for us.
Let's go ahead and look at all the chat here.
We have quite a bit of people.
So [INAUDIBLE] earlier testing.
So bhavik_knight, [? Iso TV. ?] We have a lot of regulars here.
So bella_kirs. [? Iso-TV ?] was, I believe, followed us last time,
last stream, which was yesterday.
I apologize if it was before that.
Yesterday I think I had seen the follow notification.
He or she is saying, yeah, yesterday was awesome.
They're talking about pizza party where everybody offered to have a pizza party
yesterday if I chose the right spaceship.
They had a debate which spaceship we should choose.
NICK WONG: That's kind of cool.
COLTON OGDEN: [INAUDIBLE] All kinds of fun stuff. [? Asley's ?] in the chat.
Hello, [? Asley. ?] Nuwanda3333.
Jabkochason, who was a new person yesterday.
[? mclopenberg. ?] Robert Springer.
Hello, Robert Springer.
Brian Rodriguez.
Good to see you.
And GregDoesThat.
First timer.
Be gentle, please.
NICK WONG: Wow, all right.
COLTON OGDEN: I think [INAUDIBLE].
NICK WONG: Yeah, it's going to be pretty non-technical.
COLTON OGDEN: Yeah, it's kind of a nice beginning introduction to if you have
a website you want to set up somewhere.
NICK WONG: Yeah, exactly.
COLTON OGDEN: Much easier to do it now than it was probably
20 years ago, right?
NICK WONG: I think it's a lot easier than the days of manual web pages
and web directories kind of just being exposed willy nilly and PHP.
COLTON OGDEN: Oh yeah.
NICK WONG: Although I guess we'll actually probably talk about PHP.
COLTON OGDEN: CS50 used to teach in PHP, and we
convinced David to switch to Python.
NICK WONG: Thank God.
COLTON OGDEN: That was a fine shining moment, I think, for all of us.
NICK WONG: Yeah, I'm very grateful for that switch.
I think what I took CS50, we had switched to Python by then.
Thank God.
COLTON OGDEN: I think it was 2016.
NICK WONG: Yeah, that was the first year.
COLTON OGDEN: First year.
NICK WONG: Dang.
COLTON OGDEN: It was a good year.
[LAUGHS]
NICK WONG: Yeah, no more PHP.
Actually just to be clear, there's nothing inherently wrong with PHP.
I just think it's a lot less elegant and a lot less clean than Python.
COLTON OGDEN: [INAUDIBLE] I just think it's
a lot more terrible than [INAUDIBLE].
NICK WONG: Yeah, I just don't like it.
COLTON OGDEN: [INAUDIBLE] To David's point,
they do have pretty good docs, pretty good documentation.
NICK WONG: If you look at Laravel, it's a beautiful framework written in PHP.
They do a great job.
I just don't use it.
COLTON OGDEN: It's super easy, I think when it first came out,
for people to integrate their HTML with logic,
which was hard to do at that point.
NICK WONG: It was I think impossible up until that point,
because JavaScript wasn't even really a thing.
Dang.
COLTON OGDEN: Got some other people.
So Andre's in the chat.
Hello Andre.
Thank you very much for joining.
Please do the stream like we are a bunch of John Snow's.
NICK WONG: Oh, like we know nothing.
COLTON OGDEN: Oh, got it.
Yeah, yeah, yeah.
NICK WONG: Man, when is that next--
sorry, not to sidetrack.
But we do that constantly.
It's fine.
When's that next season of Game of Thrones coming out?
COLTON OGDEN: Let's find out.
NICK WONG: Is that next year maybe?
COLTON OGDEN: Game of Thrones.
I've seen advertisements for it.
Game of Thrones season eight.
I think it's season eight, right?
Eighth and final season was announced in July 2016, but [INAUDIBLE]..
NICK WONG: Not helpful.
COLTON OGDEN: Premiere April 2019.
NICK WONG: Oh wow.
COLTON OGDEN: So April 2019, tune in for Game of Thrones.
[INAUDIBLE]
NICK WONG: We're getting there.
The end of the school year.
That's perfect.
OK.
Sweet.
And people, I don't know if you guys just have faster Google than we do
or if you're just smarter.
You always manage-- because I know the stream lags a little bit, right?
COLTON OGDEN: [INAUDIBLE]
NICK WONG: So the fact that y'all get that at around the same time as we do
is impressive.
COLTON OGDEN: Maybe they knew already.
They're fast.
Lightning fast.
[INAUDIBLE] can't wait.
NICK WONG: That's awesome.
Yeah, me neither.
Cool.
COLTON OGDEN: All right.
NICK WONG: All right.
So then we're going to get started.
As always, we don't have a whole lot prepped.
We're just going to kind of literally sign in in front of you.
And by that, I'm not going to type everything.
Sorry, this is--
I'll go back.
COLTON OGDEN: Zoom in just a little, because I think it's a little bit tiny.
NICK WONG: Oh, we can--
oh, nice.
Go Amazon for making that responsive design.
So this is aws.amazon.com.
It stands for Amazon Web Services.
COLTON OGDEN: Let me toss that in the chat as well. aws.amazon.com.
NICK WONG: Make sure there's no hidden parts.
Yep.
There you go.
And so we can log in there.
If you're a student, then you actually get a bunch of free credits
and all sorts of perks that I probably don't take full advantage of.
If you're not, then there's all sorts of free tier things associated
with the Amazon accounts.
So you can do all of what we're about to do totally for free.
AWS is really cool in that it basically gives you access
to kind of, as Colton said, just any sort of server resource,
really, that you could possibly desire.
Now, I think there are a bunch of articles,
and we'll talk about this a little bit later, but there are a ton of articles
online about how to mine Bitcoin with Amazon Web Services servers.
And I would argue that they're almost all not worth it.
It's cool as an exercise.
Totally not worth the resources.
You do have to pay above some certain resource usage on Amazon.
COLTON OGDEN: I feel like it would be really expensive.
NICK WONG: It gets pretty expensive, yeah.
And I don't think that anyone has formally studied this,
but I would imagine just kind of by intuition
there is no service on Amazon that is powerful enough
to make you more Bitcoin than you are losing for paying for the service.
So just as an FYI, don't get scammed that.
We're going to be working with EC2 instances.
And they are basically your own personal versions of instances that run servers.
And when I say instance, I basically mean
that there is some server physically located somewhere.
And they actually have different regions.
So I'm in the Oregon region because it's closer to my hometown.
They didn't have the North California region for a while.
So I would have otherwise chosen that.
But they have these physical kind of just data
centers of just racks and racks of servers,
and there's all sorts of resources there.
And what this does is it kind of gives you a high level
interface over those resources.
You can specifically request to have your own hardware.
It is more expensive.
That one is not free tier.
But for the free tier stuff that we're going to be doing today,
you actually kind of just get given a virtual machine within a server.
So any one physical server is probably hosting hundreds of virtual machines
on it.
I think that would be a lot more cost effective
than giving every single person their own server without request.
COLTON OGDEN: You can imagine millions of machines.
NICK WONG: Yeah.
And it would be awful.
Very difficult to maintain.
Although Amazon has-- for a company that makes, what, 230 million--
or sorry, billion.
200 billion, I think, per year.
Apple's the one at 230 billion, which is absurd.
[LAUGHS] Cool.
So we're going to go into--
I have a couple of running instances for just varying things I do on here.
But we can also now see the interface that is what's going on up here.
You'll see the instance type.
So most of these are micros.
The only one that is not is the one that I run for an organization here.
And we just happen to need the extra resources for what's going on there.
Everything else, there's a bunch of resources here.
There's all sorts of cool things that AWS lets you do.
Like these status checks I don't really use a whole lot,
but you can set up all sorts of things for if you
have some sort of integration testing or some sort of the servers up or down
or certain services on a server up or down.
Then that can notify you.
There's these alarms that do very similar things.
They basically implement the notification part of that.
The key name is the key--
whatever-- we'll talk about this in a second,
because you use SSH to access your server once
you have created it, with very few caveats.
And this is the name of the key file that was handed back
to you when you tried to set it up.
There is all sorts monitoring you can do,
and then there's some other data over here.
The thing with AWS that can make it a little bit difficult for people
beginning, and we will definitely talk about this
and just kind of experience it when we go and set stuff up, is AWS sets
things up very modularly and very extensively.
It's actually a really good feature, not a bug.
But it can be very buggy feeling when you are just getting started
and you're like, what's a security group?
What's a user group?
What are these access things?
Why do I need all of this?
And a lot of times, for a lot of simple use cases,
you don't need all of those things.
But for kind of business and enterprise use cases, you really do.
And so what we're going to do is we're going
to just kind of launch a new instance.
And what that means for us is we're going
to ask Amazon to allocate to us some sort of new surveyer resource for us.
We're going to open up a micro instance.
And sorry, because we're doing live, we will have the spinny ball of death
basically a couple of times.
And we're going to spin up some Linux instances.
You'll see that they usually point out if they are free tier eligible.
And that's what we're going to try and stick to, because we don't really
want to spend too much money.
I'm a student.
I don't make a whole lot of money.
So we're basically just trying to keep everything as cheap as possible.
You can even select the type of architecture
over on the right hand side.
It's not super visible in the chat, but I'll move that right there.
It's over on the right hand side.
It's between Colton and myself.
COLTON OGDEN: [INAUDIBLE] might be a little bit [INAUDIBLE]..
NICK WONG: So basically, what you can do here is you can select architecture.
We're going to leave it in 64-bit x86 64.
And I'm going to pick an Ubuntu server.
I happen to really like Ubuntu.
I think it's super versatile and very clean.
It's a really nice version of Linux.
So I'm going to use that.
And we can go ahead and click Select.
And then it brings up a bunch of options.
We don't have to really deal with too many of these.
Our server is not really going to have too much load
unless you guys all hit it at once.
Please don't.
Or go for it, I don't know.
We'll get there when we do.
That might crash it.
But otherwise, I don't really have to deal too much with this.
You can scroll down.
There are quite a few different kinds of server,
and there's all sorts of options and parameters to them.
They'll tell you if they have solid state drives, which
are going to be a little bit--
there's certain reasons you might use a solid state drive
over an actual spinning hard drive.
Hard drive space is a little bit cheaper.
Solid state drive is a lot more expensive to use,
but it has all sorts of benefits as far as robustness and speed
and things like that.
And then you also have the number of they say vCPUs.
Depending on whether or not you ask Amazon
to allocate an actual server, like physical hardware for you,
that might be a real CPU.
It kind of depends on how it's being allocated for you.
COLTON OGDEN: It's like an abstraction.
NICK WONG: Yeah, it's an abstraction away from the actual hardware CPU
so that they're promising what they actually are giving you
rather than something a little bit more.
This is the memory.
So RAM.
Something to keep in mind for people beginning
with some sort of CS experience or career is memory does not mean storage.
It is literally the active memory of your computer.
You can kind of think of what you can keep in your head at any one time.
It's RAM.
So Random Access Memory.
Your actual storage, I don't remember what EBS stands for,
but this basically just means that we're not getting
any sort of fancy caveated storage.
This will probably be some sort of hard disk space that's
shared with a bunch of other people.
COLTON OGDEN: Is it Elastic Beanstalk?
NICK WONG: Yes, there we go.
It's the other service that Amazon has.
But this one is not particularly--
we're not getting anything special.
It will be the minimum storage that they can hand to us.
COLTON OGDEN: David was just talking to me about Elastic Beanstalk yesterday.
And I still don't know too much in detail.
NICK WONG: That's all right.
COLTON OGDEN: Brenda in the chat did say she's never seen Game of Thrones.
Shout out to Brenda for joining us.
NICK WONG: Wow.
And for being brave enough to say you've never seen Game of Thrones.
COLTON OGDEN: I know.
[INAUDIBLE] brave thing to say. iamakostik says, hello, CS50.
Can I host a website on AWS?
NICK WONG: Yes, you can totally host a website on AWS.
In fact, that's what we're going to do.
This is the hosting part of it.
In fact, domain names and hosting are pretty much entirely separate,
although a lot of domain name providers, like GoDaddy or domain.com
actually allow you to purchase hosting on top of the domain name itself.
But you can purchase just a domain name for like $3 depending on the domain.
But you can purchase just the domain and have it do nothing.
I happen to have a bunch of domains that do nothing.
COLTON OGDEN: So that when you do have that killer website.
NICK WONG: Exactly.
Then I can just throw it behind that domain.
And so then hosting is something that you can do on Heroku.
You can do it here.
You could do it on Microsoft Azure.
You can do it on I think Google has hosting services
that would also be really good.
You can do it any way you'd like and then
just kind of throw that hosting service behind the domain name.
COLTON OGDEN: Looks like Robert Springer said, did you
say we can follow along for free?
NICK WONG: Yes.
Yeah, you can totally follow along for free.
All that we're going to do here is going to be entirely free,
open access, open source.
Even the kernel is open source, if you wanted to be really precise about that.
So yeah, just all it requires is that you have an account with AWS,
and that's it.
If you're a student, you can do even more things
that technically wouldn't have been free but are free for you.
COLTON OGDEN: Why do you choose AWS over Azure or Google Cloud?
Is it more cheap or more functional?
Just curious.
NICK WONG: Sure.
So that's actually a really cool question,
because up until a little while ago, that wasn't a question.
People just chose AWS.
There was no other real alternative.
COLTON OGDEN: Didn't they have pure market share for like seven years?
NICK WONG: Yeah, for a very long time.
I think seven years is about right, which is insane.
I mean, that's a monopoly.
And the United States actually has a couple
of interesting court cases against tech companies
where they don't know how to define a monopoly as it
applies to tech companies.
They struggle with it, actually, quite a bit.
There is a famous case in 1995, I believe,
or in '98, one of the two, where the United States went
against Microsoft for being a monopoly because they had packaged
Internet Explorer into Windows.
And that was a really cool court case, because Microsoft lost.
They lost that court case and paid a hefty fine for it.
And then they made a commercial, I believe,
or some sort of advertisement of Bill Gates
dancing and basically not caring that they had lost this court case.
Because I think that was one of the last major ones against a tech company.
So yeah, sorry, it's kind of a tangent, I just think it's really cool.
The reason I choose AWS over Azure or over Cloud
is because I started using it, actually, first.
It was just kind of the only service at the time.
Google Cloud I do use for a couple of things,
particularly if I'm using very Google heavy sources or resources.
So if I'm using a bunch of Google APIs is and I'm using Firebase
and I'm using a bunch of other stuff that's all related to Google,
then I'm going to switch over to Google because it's just a little bit more
convenient.
They have more tutorials that just naturally
are going to integrate with their own services.
AWS does a lot of the same thing where if you are trying to set something up
and you're using AWS's domain names and you're using,
I think they call it route 53.
And so AWS's domain names, you're using Beanstalk, you're using EC2,
you're using S3 buckets, then it's a little bit more convenient for me
to just kind of follow the whole tutorial by using AWS.
And so for this, I'm going to recommend AWS
because I know they have all sorts of free tier stuff that
can be easily scaled, and they're really good for an enterprise solution.
So if you happen to want to go to a--
what do you call it?
Like some sort of commercial solution, then this
is actually a really good service for that.
It scales really well.
It scales at low cost.
But Microsoft Azure is also a great service.
I think it's a little bit less developed than Amazon Web Services.
And then Google Cloud is quite well developed.
They do all sorts of cool things.
I just happen to use AWS for this.
And looking in the chat at the bottom, I just
happened to notice that Bill Gates was pissed off.
I'm sure he was.
But then they responded to it in a very kind of comical way.
I think the response to the loss of that court case was pretty hilarious.
And very, I think, emblematic of how tech companies view the United States
court system at the moment.
Cool.
So Brian Rodriguez says, gotta run.
Have to catch the rest of the stream later.
Love to know your thoughts on when it might be better
to use this over something like Heroku.
And actually, that is a great thought that
will help us lead into the next thing that we're going to do.
So we'll talk about that right after we read through the rest of the comments.
COLTON OGDEN: Staypeaceful89, hello Colton, hey everyone.
Hey, staypeaceful.
Glad you're joining us.
Is this AWS S3 says twitchhelloworld.
NICK WONG: Right.
So AWS has-- that's one of the few things I
think is super annoying about how you try and figure things out.
Their naming system is not the most conventional.
Like Elastic Beanstalk, I don't necessarily inherently intuitively
know what that means.
And I don't necessarily know what EC2 means.
It's the way that we host things.
S3 is the way that you store stuff.
It's a storage bucket system.
We probably won't touch on that today, but if we
do a livestream about Heroku and hosting there,
then we will certainly talk about it.
COLTON OGDEN: Makes sense.
And [INAUDIBLE] posting, please explain step by step
how to host a website on AWS, says iamakostik.
NICK WONG: And that is our video.
So that will happen.
COLTON OGDEN: Frameofref, I believe they then moved the Microsoft campus
to Canada right across the border.
NICK WONG: Yes.
COLTON OGDEN: I think that Bill Gates was pissed off.
NICK WONG: They did a bunch of stuff that was kind of fun.
COLTON OGDEN: AWS requires a credit card if that's an issue, says [INAUDIBLE]..
NICK WONG: Good to know.
COLTON OGDEN: But do they charge the credit card?
NICK WONG: I do not believe so.
They just require it in case you go over your hosting limits, which
is pretty hard to do.
You'd have to be basically mining Bitcoin.
COLTON OGDEN: Which you might have a little bit of experience with.
NICK WONG: Which I might have done that.
COLTON OGDEN: [INAUDIBLE] since you use Google a little bit,
if Google and Microsoft Azure also a free tier or free tier for students?
NICK WONG: Yes.
So they certainly have all sorts of, I would say,
above free tier things for students that are free to students.
Actually, as pointed out in the chat, Google offers $300 in free credit
to students.
I believe Azure offers 150.
Don't quote me on that.
They do offer money for students.
There's basically a whole student developer bundle
and you get all sorts of stuff for free.
And if you're not a student, then they do also have free tier things.
I know you can use Azure for free being not a student.
But I think that their access is a little limited.
They do have a little bit less resources available than AWS does.
Cool.
COLTON OGDEN: That was good.
Think we're all caught up on the chat.
NICK WONG: Awesome.
And so answering the question above as to why
you would use this as opposed to something like Heroku,
let's say that I want to control everything about the server environment
itself.
So I want to configure some sort of parameters.
If you are maybe leading a cybersecurity club
and you need to be really sure about how everything is hosted independently
and I need to actually setup some sort of interface on top of a docker
container spin up and spin down, then I'm
going to want to use AWS as opposed to Heroku.
Because Heroku is not going to let me do that.
Excuse me.
Heroku is really, really good for hosting sorts of websites,
having them integrate with things through APIs
and web hooks and stuff like that, but not
necessarily all that great if you want to control everything
about the environment that is kind of the server itself.
Whereas AWS, you just get handed a server.
Whatever you do with that is up to you.
They have all sorts of policies and things
on not hacking the government through their servers.
But you can do all sorts of cool stuff on your own.
So what we're doing here is we picked an entire server.
We picked a general purpose T2 Micro.
And again, their naming system, it's out there.
But it basically just means that we're going to be able to use it for free.
It doesn't have a whole lot of resources.
It has one CPU.
Well, one virtual CPU and one gigabyte of memory.
And it has they say low to moderate network performance.
I would classify that as actually pretty good network performance.
For most purposes, that's actually really cool.
And then we're going to go ahead and review and launch.
And you'll notice there was a button I kind of ignored which
was configure all sorts of details.
I'm going to not configure any details so that we run into some problems
that people run into all the time so that we can fix them
in front of you guys instead of just pretending that we didn't have them.
Because there are some problems that will
arise by just kind of ignoring security groups and stuff like that.
Now, you get asked to like create a pair.
I'm going to create a new key pair so you can see what this might look like.
We're going to call this AWS Twitch.
Live coding or live typing is just the worst.
Wow, was Twitch Demo.
You gotta love that auto correct.
And I'm going to download that key pair.
And what this basically means and what this is talking about is SSH keys.
Oh, right, so you can actually now see my private key.
Doesn't really matter.
I'm not going to keep this up for too long.
And if you want to go and hit my device, that's fine.
Technically, if you were to sit down and type this all out,
you could actually have access to my server as well.
However, it's not going to outlive the length of the stream,
and I don't know, if any of you wants to really type
that quickly, knock yourselves out.
It's not worth it.
Do it yourself.
COLTON OGDEN: OCR.
NICK WONG: Yeah, actually.
Don't give them ideas.
That would actually probably work.
So yeah, this is my private key, which you should show anyone, by the way.
Don't ever do this.
This is a terrible idea.
COLTON OGDEN: The first thing you showed try not to do.
NICK WONG: Yeah.
So don't do this.
This is bad.
And the reason for that is it gives you access to my AWS instance
if you would like.
So yes, in the chat, they point out no need to type it out.
Use Google Lens.
Great.
I'm really glad that we all have so many suggestions on how to do that.
Yeah, so actually, I guess as a pathway to it, you could take a screenshot,
throw it to Google Lens, it would tell you the patterns, and you could try it.
Yeah, awesome.
So if I see a bunch of you on my machine,
I'm going to try my best to kick you all out.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: It'd be kind of cool.
Actually that's a good challenge.
We'll kind of keep that as a side path for what's going on here.
So what I'm going to do is I have a directory
in my home directory called SSH.
It's a hidden directory.
So it starts with a dot.
And I'm going to just copy--
I think it's under Downloads.
And I called it AWS Twitch Demo.
And I'm going to copy that to here.
I'm going to move that to just dot pem.
You also have to chmod.
COLTON OGDEN: Oh, sorry.
NICK WONG: Oh, sorry.
COLTON OGDEN: I was gonna say kaloiiii, thanks for following.
And Robert Springer followed just as we started.
So thank you very much for following as well.
Sorry, didn't mean to interrupt you.
NICK WONG: No, it's all good.
And so I'm going to do what's called a change modification or chmod.
COLTON OGDEN: They're also saying your terminal is kind of hard to see.
NICK WONG: Oh, right.
No, you are absolutely right on that.
That should be much better.
COLTON OGDEN: Yeah, that is.
Thank you.
NICK WONG: Sweet.
So what I have in here is a bunch of other PMs and stuff
and I will do my very best not to cat any of them.
Oh God.
And then I also have a subdirectory called keys.
And what I'm going to do is I'm going to CH mod this.
600 will work.
I actually prefer 400.
Doesn't really matter.
It's slightly tougher restrictions.
That makes it so that SSH doesn't freak out when I try to use that.
And then what I can do is move that into my keys subdirectory.
Whoops.
And I just like to keep everything really organized.
So then what I can do is I can SSH using that authentication file.
AWS-- or sorry, that's in keys.
Keys slash AWS Twitch.
Wow, do I have multiple keys starting with AWS?
Cool.
And then the default user for an Ubuntu machine is Ubuntu.
And oops, that's the other direction.
Now that I've done that, I can actually launch this instance.
So none of you could have possibly gotten onto the instance,
because it didn't exist yet, which is good.
I am a fan.
And so we will wait while that launches.
The only thing that I had a problem with with the AWS
console, and they've been slowly fixing this as they-- or not slowly,
but they've been fixing it as they go.
Is it is a little slow and it feels a little clunky to use.
So if there's any AWS reps watching this,
I do kind of get annoyed by how kind of weirdly clunky it feels.
Feel a little 2005.
So we're going to go back into EC2.
And it will hopefully be up.
It's getting there.
It's not named, but I'm going to call it AWS Twitch Demo.
I don't know why I did that in all caps, but it sounds cool and aggressive.
So we're going to go with that.
You'll get the spinning blue ball of not death but we'll say patience.
COLTON OGDEN: Relaxation.
NICK WONG: Yeah, relaxation.
I've never been in a position where that's relaxing.
I'm always like, all right, let's go.
I'm running late to a class.
It's never fun.
And I'll reload the page too because I'm not fully trusting in there.
Yeah, see.
I don't always trust the way they do that.
If you're colorblind, these green--
I don't actually know what other colors these turn.
For me they're all green.
But I imagine that they change color.
Is this one different than this one in color?
Stop versus run?
COLTON OGDEN: Are you colorblind?
NICK WONG: I am, yeah.
COLTON OGDEN: Oh wow, OK.
TIL.
So this one right here, that's like an orange color, and that one's green.
NICK WONG: Nice.
Yeah, so another thing for AWS if they want to add that to their development
docket, not that it would matter, but kind of for use cases and things
would be to allow colorblind people to be able to see what's going on there.
So I pulled up the AWS Twitch demos kind of stats
and all sorts of things in specifics here
by clicking it or just selecting it.
And it has this public IP address.
And so I copy that.
And they actually have this cool little widget.
Copy it to clipboard.
That's what I do.
And now I can SSH into that.
I'm going to paste that into my terminal.
Which it did get cut off a little bit, but no worries.
And when I run this, it'll tell me, hey, it has a fingerprint you don't know.
And that says yes, so it's going to add it to our known hosts.
And now I'm logged in, which is great.
Now, none of you guys are logged in.
I appreciate that.
W as a kind of throwback to last week is the who command.
It tests who's on the machine.
It hasn't been up for very long, so that would make sense.
If I [? CD ?] into dot SSH, I am actually able to do sudo su.
So I can take full control over this computer
and I can remove authorized keys.
And you guys would all be like, no, wait.
Because now you can't log back in, which is great.
So the SSH key that you guys all saw is no longer useful.
However, if I get logged out by some sort of network time out
or breaking a pipe or something, I am actually screwed.
I can't log myself back in, which means that I
would have to spin up another instance.
But I'm totally OK with that, because spinning up these instances
or spinning down, taking snapshots, all sorts of things, actually very easy.
And Amazon makes that super convenient.
So yes, just verifying that there's no one else logged in.
That's just me.
So cool.
Now you guys are not able to log in.
Nothing against you.
I'm just, I guess, showing a little bit [INAUDIBLE]..
COLTON OGDEN: You're part of the cyber security club.
You gotta be--
NICK WONG: Should really not get hacked live.
That would really suck.
COLTON OGDEN: Although, I mean, that'd be a great test of skill, though.
NICK WONG: Yes.
COLTON OGDEN: How can you--
NICK WONG: That'd be very fun.
COLTON OGDEN: How effectively can you deter [INAUDIBLE]..
NICK WONG: It is something we do in our club, actually.
And I guess we'll do a kind of play run of this coming
up on one of our streams.
COLTON OGDEN: [? Cali, ?] what it was called?
NICK WONG: Yeah, [? Cali. ?] And we will we will kind of
throw Colton kind of against myself.
But I mean, that's not super great.
It's a little unfair.
I've just seen it before.
Colton's definitely capable of it.
COLTON OGDEN: An infant against a very strong grown man.
I don't know about that.
NICK WONG: It's not super fair, actually.
Cool.
COLTON OGDEN: They were saying Nick can't
see how awesome the screensaver is.
Actually, how much of your screensaver can you see?
Are you just red green colorblind?
NICK WONG: So I'm deuteranopic.
So red, green, blue, purple and a couple other colors in there.
According to my eye doctor, it's like 20% of colors.
I don't really notice it in my daily life.
I still think my screensaver is really cool.
I just imagine you guys think it's even cooler, because you
can see even more colors than I can.
COLTON OGDEN: That's fascinating.
Somebody else also mentioned something up here.
NICK WONG: I think someone said that they are also--
COLTON OGDEN: Yes, somebody did.
Yeah, [? Fatma, ?] by the way, thanks [? Fatma ?] for joining Forsunlight,
same here, Nick.
NICK WONG: Appreciate it.
COLTON OGDEN: And Imran Ahmedh said Colton and Nick, nice combo.
NICK WONG: I agree.
COLTON OGDEN: I have to agree.
I think that's-- oh, can you lock the EC2 instance,
only accept connections from your IP?
NICK WONG: Great question.
Love it.
So stooshbatis asks, can you lock the EC2 instance to only accept connections
from your IP?
Yes.
Actually, that deals with security groups.
So actually, that doesn't really matter now.
You guys can look at that all you'd like.
But yes, it is a really good question, and it's
something that causes a lot of bugs when people
go to set up their first website on an EC2 instance
is they get these security groups.
You can see it here and here.
Launch Wizard 1 is the incredibly creative name
for the first security group.
COLTON OGDEN: stooshbatis, by the way, thank you for following.
NICK WONG: We appreciate that.
And so it has all of these inbound outbound rules.
And if you're not super familiar with kind of ports and IPs
and networking rules in general, then don't worry.
We're going to kind of talk about this as if it was at your house,
except with weird rules that don't exist in real life.
You'll notice that the inbound rule, like if I was in my house,
this basically means the only thing that I allow coming into me
or coming in to talk to me is SSH through TCP or through port 22.
So what this basically does is it says you can only SSH into me.
Any sort of web requests, like a port 80 or a port 443,
is not going to go through.
I'm going to just drop it.
And actually AWS is going to drop it kind of before it even
gets to your computer, before it even gets to that server.
So basically, what I did, which is where I SSHed in on my own,
that was totally valid.
However, any other sort of operation, if I tried to Telnet 80,
not going to work.
And then you notice that there's the source 0000/0,
which means from any sort of range within just anybody.
And just kind of the blank.
I would think of it was as the wild card for IP addresses.
Total valid.
All of them are totally OK.
Now, outbound my guess or my intuition should be that anything out is OK.
And that is true.
That's totally fine.
And actually, a lot of network administrators make the same mistake.
They say that all outbound traffic should be totally valid.
However, if you have a mail server, why should it ever
be requesting port 80 is a good question and it's a question
we ask in cybersecurity all the time.
In fact, a lot of network administrators set up their servers.
They have an internal mail server.
They have an internal data storage server.
And those servers have the outbound rules set to just anything goes.
And the reason that that's kind of dangerous
is let's say that I manage to get a shell that reaches out but does not
really reach back in or do anything.
I don't have to attack directly.
I just kind of get a shell somewhere onto your database server.
If your database server allows connections back out through port 443,
then you might not notice because that looks like normal traffic
otherwise that that database server is actually opened up a shell
and it's paying back outward, reaching out to me.
And I know that a lot of administrators use that sort of configuration.
So this is a really dangerous setup as far as an intuition.
However, in our case, that works perfectly fine.
I'm not downloading anything off of this server, which is good.
So it's something to keep in mind, and it's something that we'll come back to.
You might intuitively say, oh, well, I should edit these inbound rules
so that I can allow for HTTP.
And that would be a great suggestion.
So we're going to kind of add that as a rule.
And now we've allowed--
sorry, the colon colon is the wild card for IPv6, just as an FYI.
That allows HTTP traffic to also ping our server.
Now, our server doesn't have anything set up to deal with that.
So it's going to just kind of go, oops, and drop those.
Or actually, I don't think the default is to drop.
I think the default is you kind of look around and see if anything's listening
and then drop it.
And we're actually going to also add HTTPS,
which is just the secure version.
It uses SSL to encrypt packets.
It should be on.
There we go.
That's another thing where any time you're looking in a list live,
it disappears.
The item you're looking for is gone.
It's not there.
But everyone else can see it.
There's no way that they can't see it.
Actually, it's the only thing they can see.
Yeah, one of the perks of doing things like.
I'm going to leave my outbound rules as is,
but if I wanted to be really strict about it, then I might modify SSH
or I might make it just very specific.
And a good network practice is to only do things as needed,
because it basically helps you restrict what's going on to actual use cases
that you're thinking of.
Otherwise you get these kind of unknown use cases or undefined behavior,
give or take, kind of with an asterisk, that you might not have expected.
And that's usually where things kind of cause problems.
So just kind of the more you know.
And there's all these tags and things.
And you can do all sorts of stuff with these security groups.
So cool.
Now that we've kind of configured our security group,
we know that it's going to be a web server.
So this allows web servers to work totally fine.
We can go back to our Instances tab.
And as that loads, we will see what's going on in our instance.
Now, we have access to our server.
Out of paranoia, I constantly type W, just as an FYI.
And we know that we basically just have a fresh Ubuntu installation.
So and sudo is actually not needed here, because I am root.
Generally I would advise not doing things as root,
but I'll exit out of root in a second.
Just because kind of keeping in mind which permissions you have
and which ones you don't, that's a good kind of safeguard and mental check
to keep.
And people are always like, oh, it's annoying.
But it's a good annoying.
You should kind of sit there and be like, well,
I'm really glad I'm annoyed about this today,
because it prevented you from CH modding an entire, well, the entire machine,
actually.
That would suck.
COLTON OGDEN: That would be rough, yeah.
NICK WONG: Yeah.
I've done that before.
I did that, actually, I did that I think a year and a half ago.
I CH mod I think I did this.
I think with the R?
COLTON OGDEN: Dash R, yeah, right.
NICK WONG: Yeah.
And then I was wondering why nothing worked.
Because a lot of Ubuntu's stuff and a lot of Linux
stuff is actually based on the whole permissions restriction stuff.
So don't do that.
That command will screw things up.
And it was because I had that same thought process.
So then we're also going to install some stuff.
I think UFW is installed by default, but we're going to just make sure.
Gonna also install Git just in case we want to pull it.
And then anything else that I really would like to have on here?
I think that's it for now.
We are going to install some other stuff later.
But that's OK.
So I pulled Git onto our Ubuntu server.
You'll notice that this is fairly fast.
And there's no real evidence for that.
It's kind of an empirical observation.
On Harvard WiFi, I'm about the same speed or a little slower.
So I like this speed.
I think it runs pretty well.
And so then what I'm going to do is exit out of being root.
And we are now back into being Ubuntu user, which is good.
And if you wanted to really verify that, who am I also kind of works.
So then we're going to [? CD ?] into our home directory.
We've got nothing there, which is great.
So we are back into color, you'll notice.
The color prompt is disabled for root.
And if you go into that comment right above in your bashrc script
where it says the focus should not be the terminal's pretty colors,
it should be the commands you're running,
who was written by someone who hated fun,
they actually have a very good point there where root actually
gets rid of all color so that you're kind of in a more serious mindset I
think is the motivation.
So cool.
We are now here.
And we can set up all sorts of kind of very basic servers.
Now, I'm trying to keep in mind that y'all also know the IP of the server,
which means you can all connect to it.
So I'm trying not to accidentally expose any sort of major security flaws,
at least not for very long.
But a kind of very basic check that you can
do to make sure that you're actually online is you can ping something.
Although updating and pulling stuff also--
whoops.
Also guaranteed that we were online.
But just in case, we now know we are connected
to some portion of the internet, which is really cool.
I guess, I don't know, if that makes you really happy, good.
If it doesn't, that's OK.
So we're keeping all of our stuff set up here.
I keep wanting to go, what questions might we have?
I'm in lecture mode at the moment.
What questions might we have about what's going on here?
So that's a very basic setup of just the server that's going on in AWS.
So the next thing that--
oh, that was the thing I needed.
Python.
I knew I was missing something.
We're going to install Python 3.
And that's going to pull Python 3 for us.
We're also going to install Python 3's pip.
I should have run that in the same command.
That's OK.
And what we're going to do is Python 3 has this really cool simple
HTT-- oh, there it is.
Yeah.
Simple HTTP server.
And that is-- love going on Stack Overflow.
Simple HTTP server is something that is really, really convenient for just
checking and doing all sorts of very basic things with Python and for web
servers.
So we're going to just also grab Python 3's pip.
And that's all we really need.
Bhavik_knight in the chat pointed out that we also would like setup tools.
Totally valid.
I believe pip pulls setup tools.
It might not.
It might end up grabbing them as a result of being run the first time,
if you don't have them already.
If not, then totally valid.
You can grab a set of tools as well.
COLTON OGDEN: We do have a few other comments
too if you want to read some of those.
And also thanks to Imran Ahmedh for following us.
Appreciate it.
He says, Colton, a few days ago I sent you a mail about outreach inquiry.
Would you please check that mail up?
Did you send it to outreach@cs50.harvard.edu?
Because I don't get those emails directly.
So if you want to specify that in the chat.
GDE 1984.
Thank you very much for following.
[? PresidentMars, ?] you should create a CS decathlon.
[INAUDIBLE] attack a machine, 50 push ups, et cetera.
NICK WONG: That'd be kind of awesome.
I'd be much more in shape.
Much more buff.
COLTON OGDEN: And then I guess some of the people in the chat [INAUDIBLE]
and [? PresidentMars ?] are sending each other postcards.
[INAUDIBLE]
NICK WONG: That's awesome.
COLTON OGDEN: Twitchhelloworld has a question for you.
Have any thoughts about the news stories today?
I think it's about malware and open source libraries such as node.js
and earlier [? pie.pie. ?] Haven't used open source libraries.
Though of using those in the streams.
How does one protect against this?
NICK WONG: Right.
So there is a really--
I was listening to a cyber security guy from Rapid7
give a speech at a cyber defense competition
that I went to a couple of years--
or two years ago.
A year ago.
Something like that.
And he had a really good example of why you should be really scared
of using open source software, which was directly related to your question.
Basically being that people, let's take node.js for example.
Pretty large system.
It's at least a couple hundred megabytes, I think, give or take.
It's on the order of megabytes.
And there's a lot of data in there.
There's a lot of people who have contributed to it.
And it's we'd say logistically impossible to manually check
every single thing.
And even if you could, let's say it's not logistically impossible, that you
could actually check every single line of code that
comes into that repository.
It's very difficult for you as a single person
or even as a group of people to predict all possible behaviors of that code.
In fact, it's uncomputable.
You cannot compute the behavior of code.
Now, that is given with the kind of generalist principle.
In general, that's not true.
Sorry, that is true.
That is mathematically true.
But if I do a certain piece of code, you could
argue that it will do some things with reasonable highly probability.
I could argue that typing out LS is going
to do something that I can predict with almost 100% certainty.
However, given something like node.js, you
couldn't necessarily look through its entire repository
and know every single line of codes or every single functions
is probably an easier way to look at this behavior and all
the possible behaviors.
So what ends up happening there is you don't necessarily
have any one surefire protection against someone including malicious code.
Upon running this certain combination of commands, open up a shell to the world.
That'd be really bad.
Let's say that you are some major news network
and you host something through node.js and you
happen to run that combination of commands
just by virtue of running many, many commands all at once.
And you've now opened up a web shell to the world,
and the web shell is such that it's persistent
and it continues coming back even if you've never
typed those commands again.
Well, that's a huge problem, because then your attacker only
has to wait until you run them.
And then you run them, sees the web shell's open, and connects to you
and then takes over, steals information.
If they're smart, then they hide themselves really, really well
and they never get detected and they're constantly siphoning information.
And maybe the Wall Street Journal or something.
So that would be really, really, awful.
And there's not necessarily a surefire protection against that, actually.
There are a lot of really good iterative coding practices that can help.
There is a difference between dealing with bugs versus dealing
with malicious inclusions.
And that is another kind of subtle problem
is how do you detect which one's which?
Let's say I submit a update to your code repository,
a pull request, if you will, and you include it in your code repository
and say, yep, looks good.
And then you discover a couple of days later that it opens you up
to a certain security vulnerability.
Was that intentional or did I just happen to overlook it and you did too?
I mean, that's kind of the argument would basically be, well,
you reviewed my code, and you thought it was good too.
So we're at equal blame here.
And I think that a lot of people will generally
give you the benefit of the doubt.
Now, if your user name is hackerman2017, I
might not give you the benefit of the doubt.
But it is something to really--
COLTON OGDEN: [INAUDIBLE]
NICK WONG: I've totally never used that, I swear.
There's all sorts of ways to talk about this and deal with it.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: Right.
[INAUDIBLE] Personal experience [INAUDIBLE]..
And so it is a great question, and there's not a super satisfying answer
to it.
It's actually one of the reasons that cybersecurity professionals
are so needed.
There's not a whole lot that I can really tell you unlike,
you're safe, don't worry.
Use open source software.
That is one of the problems.
That is one of the concerns.
Now, a lot of very, very smart people are working on open source software
and are monitoring it and trying to prevent this.
And you have the kind of the thought is there are way more good people
than there are malicious people on the development teams
and uses of open source software.
So if I'm someone who's using the Linux kernel, for example, which
is open source, then there are enough of us
that want it to work well and secure that if we discover someone is not
doing that, we will try to fix it.
We kind of as a community, we will try and help.
Excuse me.
So there are some kind of protections, and good coding practices definitely
help.
Simpler code is generally harder to create
this sort of unexpected behavior.
If you can pinpoint out all of its possible use cases,
technically you could secure that.
But something that I heard from that cyber security professional
was nothing is really secure unless you have built it yourself
and thoroughly checked every possible use case.
And that would make for a pretty boring computer.
Your computer probably would be able to do much.
So we don't actually have a computer or machine--
the government might, but I would doubt it--
that's something that is purely built, I guess, in a way.
COLTON OGDEN: Yeah, because even the compiler,
you can trust the compiler [INAUDIBLE].
NICK WONG: Compiler can do all sorts of nasty things.
You could build a compiler that just appends a shell to the end every--
I always rely on like the shell, because it's
one of my favorite very simple attacks.
But could just append something that tags every piece of code.
Every piece of code that comes out of a compiler,
actually they do have compiler signatures.
So that's literally what it does.
If that was malicious, then that would be awful.
So yeah, there's all sorts of nasty things you can do.
Even the kernel could be malicious.
So kernel, compiler, these are all low level things,
and most people wouldn't be able to really detect that.
I wouldn't be able to detect that.
COLTON OGDEN: Mosman820, thank you very much for following.
Imran says included in the CC, [INAUDIBLE]..
All right, I'll take a look at that, Imran.
I don't recall offhand, but I'll definitely check that out.
Ignorance isn't a defense in the court of law.
LOL, GDE1984.
NICK WONG: That is a great point.
And I think it's something that a lot of the older--
sorry, not too kind of tangentially go on this, but I do love cyber security,
and we are talking about building web servers.
Ignorance not being a defense in a court of law,
at least not in America, that is a really good point.
And it's something-- it's a kind of assumption
that a lot of our current lawmakers and a lot of our current politicians
rely on, actually.
The problem is that if you're losing billions of dollars,
doesn't really matter if they're playing ignorance or not.
You're losing billions of dollars.
And so a lot of people and a lot of hackers
are aware of that fact, which is much--
it takes a lot of precedence over the whether or not
I can defend myself six months from now in a court of law.
If I have taken down your company, well, OK.
There's nothing you can do to me that is so bad that I will not
get the satisfaction of tearing down something awful.
And so I think those kinds of people very clearly do not understand
just kind of the sake of society.
I would count myself as a white hat hacker
who is trying to educate people on why we should be
very aware of these sorts of problems.
But it is a good point that the bad guys, in this case,
have a really good winning strategy or they have a really good
not losing strategy.
And American lawmakers have a really robust, very decent winning strategy.
But they're not playing not to lose, whereas hackers are.
So you have a very different--
I think their goals don't align, and you see that in of these weird corner
cases where you see a hospital get ransomwared
and then they pay the ransom.
What are you going to do?
You can't let patients die.
So it gets really interesting.
I think this is a very interesting field.
We'll talk about it a lot more in our cyber security discussion.
COLTON OGDEN: Yeah, the [INAUDIBLE] cyber security streams.
Is it safe if it isn't absolutely necessary
and just involves more work on my end to just not include open source software?
NICK WONG: So when you say safe, yes.
If you fully trust everyone who is building
all of the software and the software.
I mean, to a degree, there's only so much
that you can be logistically paranoid.
I use this computer and I don't know anyone who built it, really,
and there's all sorts of things that can be done against me through it.
If Apple were a malicious, evil corporation, they might be, who knows,
they could steal all of my information.
They would own all my bank accounts.
There's not much I could do.
And so to a degree, you do have to surrender yourself
to that, unless you are willing and capable of building something entirely
yourself.
However, even that is only half the battle.
Let's say I go and I write my own kernel, I write my own compiler,
I build everything, I build it all in machine code.
So it's as low level as it gets.
I don't have to rely on anyone else's coding.
I could even write my code in computer language
and then build everything on that.
That in no way guarantees that it's all safe.
I might not have kind of built something using the institutional knowledge
that the developers of Python had.
They might be aware of some very niche, very minor bug
that occurs only every once in a while and never
really has to be dealt with except in very particular cases.
And those people can hack my computer now.
I'm not safe.
So there's this sort of problem with even if you built it all yourself,
you are not necessarily any safer.
So I guess no, there's not necessarily any way to be perfectly safe.
But generally speaking, you can kind of bank
on a lot of these forces working really well together.
COLTON OGDEN: Makes sense.
I mean, even Apple sometimes has bugs that come out with their terminal app
after it's been out for years and for a long time, right?
Had to step away for a moment, so apologies if you already answered this,
but what's the difference between using EC2 and AWS Lightsail [INAUDIBLE]
websites, says GregDoesThat.
NICK WONG: That is a great question.
I don't know enough about Lightsail to tell you definitively.
My guesstimate would be that one of them gives you full control and one of them
is more similar to general hosting providers.
And since I know what EC2 does, my guess is
that Lightsail is more similar to usual hosting providers.
However, I'm not entirely sure on that, and you'll want to double check that.
COLTON OGDEN: [INAUDIBLE] like GoDaddy or whatever.
stooshbatis, this is why I write all my compilers from scratch and machine
code for all my applications.
You get good at it after doing it a bunch.
NICK WONG: Yeah, I'd imagine you're probably pretty solid on that.
Have you ever thought about teaching a course?
COLTON OGDEN: Yeah, that would be pretty good.
Are you going to start something like [INAUDIBLE] society
or any anti of that?
[INAUDIBLE]
NICK WONG: Not that I know of at the time.
I feel like no comment is the way that a president would respond on that.
Just I cannot say.
Not that I know of.
All right, so after telling you that nothing is safe,
nothing will ever work, and you should trust no one,
we're going to go ahead and trust this device and these things.
I'm going to implicitly trust you guys and not just DDOS everything.
And we're going to build a simple web server.
So we have Python 3.
Oh my God.
M I believe is for Module.
HTTP dot server?
COLTON OGDEN: That was easy.
NICK WONG: I'm really glad when I get the syntax right.
I'm out.
That's the end of that.
Cool.
I was just shocked that that worked, because I don't usually
get syntax right on the first go.
Although I guess I had it open a little while ago, so I was intuiting.
So we're going to copy that in, and we're
going to go ahead and just go and see what happens.
Now, I mean, if you're familiar with what goes on in the web
and if you're familiar with what this should do,
you should kind of intuit what's happening here
and what will happen here.
I apologize for the web traffic there.
There we go.
Nothing.
And you're kind of like, well, that's strange.
And then you look back at here and you're like, oh, port 8000.
And you're like, oh, of course.
Now, if you're really kind of hopping along,
you'll be like, this won't work either, Nick.
You're an idiot.
And I'll be like, yes, you're so right.
Except this is the bug that people run into constantly.
And if you look on an online forum, they're like, my AWS does not connect.
I don't understand.
And that's a really--
I mean, I mocked the question, but it's a very reasonable question given
that we've talked for a little while, you
might have been reading a tutorial for a little while.
You might have forgotten that in your security group,
you actually only allowed certain IPs in.
And you'll notice 8000 is not amongst them.
So when I try to go to 8000, that didn't work.
Now, if that sounds contrived, then you are a god who's
never encountered that sort of bug.
[LAUGHS] I have encountered it frequently.
And this is being someone who's aware of that bug.
Now, we have the kind of we'll say required wait
time as we cruise along through.
We'll have to give that a second.
We'll fill that with funny banter.
There we go.
There's only so many ways that you can be--
no, there's, I think, many, many ways that you can be humorous on the web.
Let's see.
We're going to add just our own custom TCP rule.
COLTON OGDEN: Would you say it's not computable,
the number of ways that you can be humorous on the web?
NICK WONG: I love it.
Yes.
Our professors here would, I think, either cringe or think
that was hilarious.
Or maybe both.
Who knows?
All right, so we now allowed it.
And AWS does a really good job of making that instant.
Now, you might then go, wait a second.
This is terrible.
And I would thoroughly agree with you.
In fact, you all can go here right now and check this.
COLTON OGDEN: [INAUDIBLE] successful.
NICK WONG: Right, so that just tells you--
oh, [INAUDIBLE] my default. Love that.
If they're a file, it'll download them by default. If they're a directory,
you can actually navigate through them.
So the Python simple server just kind of serves your current directory.
COLTON OGDEN: So you're serving your SSH directory right now?
NICK WONG: So if I had on this server, if I had a bunch of SSH keys
and I had my own private keys that were linked to other things,
this would have immediately invalidated the security of all of those instantly.
Thank you for copying that IP into the chat
so that everyone can insta click on it.
Really appreciate that.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: And if you're really kind of thinking about this, I don't know.
And so we're going to test this in a second.
But this is technically a web server.
We have technically fulfilled all of the chat.
We have built a web server.
It works, I can get to it, and it even displays the worst possible things
for me to be displaying to you.
So technically speaking, we have accomplished
what we said in the Twitch stream.
Now, we're going to move on and do other things.
But something that might be kind of interesting
would be if the relative pathing works.
I believe Python simple server doesn't let you do that,
unless you have a specific file in mind, which they might do.
Yeah, it doesn't [? map. ?] So it doesn't just
take you to that directory.
This is considered the root directory of the web server.
And it is something that you want to keep
in mind for web servers is they have their own kind of root directory
structure.
And so if you're, I guess, clever, if you're just
doing kind of basic good practices, that root structure should be pretty far
away from your actual server.
And it should only be owned by people like www dash data.
And if none of that made sense, don't worry,
we're going to talk about it in a second.
But basically, you don't want a general web server, which is a process,
runs on your computer like any other, or on the server like any other.
You do not want that process to be able to access anything else.
Only that small sliver of your server should be accessible to that thing.
Alternatively, so that is kind of the old mindset.
I guess I should have clarified that.
That is the mindset of, I guess, the 2000s
and before is that you should just kind of carve out this chunk,
and that's for the web server.
And anything that accesses the web server
should only be able to touch there.
So thus the danger of a web shell.
A PHP web shell is horrifyingly dangerous,
because it doesn't necessarily only access that chunk.
However, there are other paradigms that exist now.
So one of them is kind of the container paradigm
or the docker styled paradigm, which basically
says you should have your own separate kind of containerized service
that is the web server.
So then even if they took control over the whole thing,
you just shut it down, spin up a new one.
Problem solved I actually really like that one.
I think it's super clean.
It's really easy to use.
The other one is you should have a web server that has a dedicated web server.
Excuse me.
And what that means, and you might be like, well yeah, duh.
And it sounds intuitive.
It's actually a little less intuitive than it seems in
that that web server should have almost nothing else on it.
No data, no images, barely even its own code.
And it might not even really have its own code.
There are some people who are really modular about this where the code lives
somewhere else and the server just looks at the code
and then kind of pulls it into memory and runs it from there.
And so for some web servers, that's actually a really good paradigm.
And so this paradigm means that you have one device,
and all it does is web server stuff.
It's always funny when something happens.
Did someone hack into Nick's computer?
I was going to say no, but very possible.
I don't know.
Possibly.
If they did, they wouldn't see much.
If they want my homework, they can do it.
COLTON OGDEN: This happened yesterday.
I might have to look at the script to figure out--
NICK WONG: Oh, it could be [INAUDIBLE].
COLTON OGDEN: It's a Facebook thing.
NICK WONG: [? Killing ?] every once in a while.
COLTON OGDEN: I'm gonna see what's up with the live event.
I don't think the live event ended.
NICK WONG: Hopefully not.
COLTON OGDEN: No, the live event's still going, so it wasn't that.
But it was a Facebook bug it showed in the shell.
NICK WONG: Interesting.
Mortal Engines ad.
Love it.
All right, cool, so we are back.
COLTON OGDEN: [INAUDIBLE] says frozen.
Hopefully we're not frozen.
I don't think we are.
NICK WONG: Yeah, I think on the livestream that you pulled up,
we were not frozen.
COLTON OGDEN: Yeah, that might have been playing video back from before.
Let's just make sure.
It's going to play.
There you go.
OK, we're still going.
NICK WONG: Cool.
All right.
Sweet.
So yeah, you guys may have gotten some advertisements.
You're welcome.
[LAUGHS] We planned that.
What I was told as a kid is if you fall on your face, just be like,
I was just checking.
You're all good now.
Gravity is still good.
You're welcome.
COLTON OGDEN: There you go.
NICK WONG: My apologies.
Yeah, so yeah, we're all back hopefully.
A little bit ironic that we're talking about web servers and one of ours
crashed, kind of.
But yeah.
So what we were talking about was different ways
of kind of setting up a web server.
And the way that we're dealing with is kind of the old style.
We're going to carve out a chunk and have it do that.
It is a little bit of the new style in that it's
going to be-- it's only going to host a web server.
But it's not technically the new style in that we didn't really
provision it that way.
So just as an FYI.
Cool.
We are technically serving web servers.
I think I can see all of your guys' requests, which is kind of cool.
That's way more than the four requests that I put there.
So yeah, your web server will put up requests.
I can do Control C and kill that.
Cool.
And so our web server no longer works.
If you try to go back to it, doesn't connect.
Which is good.
That's the idea.
Now, a lot of times this happens in network administration.
You forget that you were serving on a particular port.
And you actually need to go back and do stuff
and then you change the port and things like that.
It is also really important to in EC2's security group console, edit that rule
and either remove it or disable it, whatever
you'd like to do, just so that you don't leave extra ports open
when you don't think they're opened.
I realize that it looked like I was making a hand gesture,
and then my hand just went whoop.
That's just where this ends.
Cool.
So now 8000 is no longer an accessible port to our stream.
Cool.
So now this one by default will work eventually.
What we're going to do is we're going to install some other stuff to go on.
If I tried to run this Python script and that
was the only way I did web services, you would hate me as a website.
It would suck.
Just having five people on it would kill it.
Now, this server is not super powerful anyway.
So even when I put kind of production level things onto it,
it's not going to service all of us very well.
But that's OK.
In concept, it is the right idea.
So with Python, actually Waitress is a really common server that is used.
But in Ubuntu, when you have full control over everything,
then we can design our own little thing going on here.
And so what we're going to build is called a LAMP stack.
We already have the L part of it.
That's Linux.
The A is Apache.
So we're going to do sudo apt get.
Oops.
Install.
I add the dash y, because I know I want to include it, and that's fine.
I don't really care about the size.
Apache 2.
So that is the actual web server itself.
Now, it's weird because we're going to talk about this device as a web server
and other things as a web server, and there's not much I can do about that.
We're also going to grab I believe PHP 7.
I don't remember if they include the dot 0, but it'll give me an error,
and I'll fix it.
So I'll put that at the end actually.
And that's the P. And then M is the MySQL.
And I always forget the flags that are required for this.
It's one combination of those.
Possibly.
COLTON OGDEN: Move this chat over here so they can see what you typed.
NICK WONG: Oh, sorry.
There we go.
I have been reminded of what--
COLTON OGDEN: And it's a little bit of something like that, right?
So MySQL Server.
Just MySQL Server.
Oh, MySQL Dev as well up above.
NICK WONG: I tried to grab dev.
Dev apparently doesn't exist.
I know it's like seven point something.
There we go.
I'll pull that command back up after it runs.
I was like, you build enough things that eventually
all of their weird little numbers kind of combine together.
On some things, I want the dash dev version.
On some things I want 7.2, point three.
Some things I just want 7.1.
Eventually it all blends together.
That's what Google is for.
But the intuition is the right idea.
So I know that I want Apache.
I know that I want MySQL.
I know that I want PHP.
And those are going to be the three kind of essential back end parts to what's
going on in our web server.
COLTON OGDEN: [INAUDIBLE] smaller.
I'll shrink it down a little bit.
NICK WONG: It's funny, because that chat window being in the screen
doesn't really help you guys necessarily.
You guys are like, it's redundant.
But for people watching later, it's super helpful.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: Because otherwise we're just talking to voices.
We could have just made up people and then we're talking to them.
COLTON OGDEN: We'd be pretty talented at it at this point.
NICK WONG: We're very good at it.
COLTON OGDEN: All the ones that are complimenting us too.
NICK WONG: It's a weird arrogance.
We keep making up people.
Thank you for joining.
COLTON OGDEN: Nick is such a talented hacker.
Talented white hat hacker.
NICK WONG: Yeah.
We would belong in an insane asylum.
I'm fairly certain.
So yeah, the command I ran was up here.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: Yeah, you don't want that going on down in history.
You become a politician, they'll bring it up.
Just to kind of point it out, iamakostik says, but you hate PHP.
And you're right, I still hate it, but we're going to use it.
[LAUGHS] Because we're going to build a WordPress website.
COLTON OGDEN: You love it or hate it.
NICK WONG: Yeah, I think people either just adore it and that's all they do
or they abhor it and they've never used it.
I'm kind of in the weird state where I don't like it, but I have used it many,
many times.
I don't know.
I can't really get away from it.
So that's OK.
bhavik_knight also asks, why do you use apt get?
I think if you don't use dash get, it still works.
You are correct.
There are a couple instances where that is not true.
You can use apt without the dash get with an install
to install just normal binaries on your actual device.
So if you're on a graphic version of Ubuntu,
then if you pull the Google Chrome binary,
then you can install it using the apt with no get and the install.
But apt yet is not going to work for that.
And the reason for that is basically the get
means that you're reaching out to some sort of repository
somewhere or mirrors, actually, and you're pulling stuff from them.
That's what it's supposed to mean.
There is a little bit of blending between those two in that apt
will also do it if it can't find it locally.
So just kind of things to know.
You can configure that all over the place if you like.
But that's the kind of standard idea of it.
COLTON OGDEN: [INAUDIBLE] what if I don't know PHP well?
NICK WONG: Well, good for you.
We don't have to build anything in PHP.
We're just going to include it because other stuff that we're
going to use later relies on it.
COLTON OGDEN: And what is it that you like about WordPress
to choose to build a WordPress website over options out of curiosity,
says twitchhelloworld.
NICK WONG: Twitchhelloworld, that's a great question.
I actually don't really like WordPress either.
So I say that I don't like these things and you guys are like, well,
then why are we building them?
And that's a great question.
Very good intuition on it.
I do actually like them as teaching tools.
They do a really good job of showing you what
exactly is going on behind the scenes.
And they're just extremely well established.
So people have used them for almost decades in some cases,
and at least a decade in this case.
And so you have a bunch of support and community
and things for what we're trying to build.
The other reason is a little bit more comical and a little less
of a really good reason in that I don't have a whole lot of time.
And I forget how much time it takes to walk through any one of these things.
And I mean, I'm not particularly pressed for time.
I'm not concerned like, oh man, I got to get through these things.
So I basically set a series of five or so goals for any one livestream,
and we usually get through around two to three.
And the goal for that basically being is first goal,
can we get a WordPress-- or a AWS server up?
We got that one.
COLTON OGDEN: Goal established.
NICK WONG: Goal complete.
Second goal, can I show that a simple Python script, a one liner,
can actually run a web server that is really dangerous?
Got that one.
COLTON OGDEN: [INAUDIBLE].
NICK WONG: Yeah.
I don't think the really dangerous was originally part of the goal,
but I'm just reemphasizing that's dangerous.
Don't do it.
And so we've done that.
The third goal is to build a WordPress website.
Now, if we get all the way through that and my yammering doesn't--
I guess Colton and I's bantering doesn't carry us over kind of our time limit,
then we will actually get to the fourth goal, which
would be to build a Django website and put that on here.
Because I think basically what we're going for
is kind of simplicity in learning to something
that works and is used in production.
It's a commercially built thing.
All the way over to something that is commercial and super heavily
customizable and really kind of new agey.
It feels very young and hip to use it.
And then if we get all the way to the fifth one, the fifth goal
basically being can we build and customize
a fully functional version of a CS50 [? piece ?] finance and put it online?
And that would just be kind of a cool last goal.
It builds off of Django really well in kind of you downgrade to Flask
and that's what we do.
So nothing against the Flask developers.
You guys did a great job.
It's just, I like Django is kind of wrapping it all in one.
So there we go.
We have now covered the goals that are set out in a Twitch livestream,
and we're going to see how far we can get.
COLTON OGDEN: And also WordPress is fairly--
you can get [INAUDIBLE].
NICK WONG: It does all sorts of things.
COLTON OGDEN: WordPress website.
NICK WONG: Yeah, there's all sorts of jobs for WordPress people
like developing stuff ranging from filling it
with content to customizing the whole thing to maintaining it to securing it.
There's all sorts of reasons that you might want to do stuff with WordPress.
WordPress is used by a bunch of enterprise level people too.
Now I'm going to Google this, because I don't want to be incorrect.
Major WordPress users.
I believe Fox News is built on WordPress.
COLTON OGDEN: And also [INAUDIBLE],, Jesus Christ, that haircut [INAUDIBLE]
little bit.
NICK WONG: My haircut?
COLTON OGDEN: No, my hair.
Jimmy Neutron.
He's calling me Jimmy Neutron.
It is a little bit messed up today.
There's a little funkiness going on on the side here.
NICK WONG: I like the sharpness to it.
It's very clean.
COLTON OGDEN: [INAUDIBLE] It's a little bit screwed up,
but I did my best to make it work today.
NICK WONG: That's awesome.
Yeah, no, I am a big fan of this clean cut haircut.
I'm actually going to get a haircut soon to kind of match a little bit.
COLTON OGDEN: You did yours similar to that recently.
NICK WONG: Yeah, where I had this down.
COLTON OGDEN: [INAUDIBLE] and the shaved sides.
Yours comes down a little bit, as opposed to mine.
It's kind of more vertical.
NICK WONG: Do you use product?
Not at all related to [INAUDIBLE].
That's OK.
COLTON OGDEN: [INAUDIBLE] We talked about [INAUDIBLE] hairspray
and big sexy hair volumizers.
All this stuff.
[INAUDIBLE]
NICK WONG: Welcome to our stream.
COLTON OGDEN: Fashion tips from CS.
NICK WONG: Colton and Nick.
Yeah.
Oh man.
Yeah, and we do cover CS from time to time.
We do get there eventually.
Yeah, so I don't know why I clicked the link.
That was going to be much slower.
Yeah, there is a bunch of actually major organizations.
If you haven't heard of any of these--
OK, I don't know why the official Star Wars blog is a major organization.
But Bloomberg's on there.
BBC America, The New Yorker, things like that.
TechCrunch is a great one.
So they all use WordPress.
And if you ever go look at their websites,
you might have your own opinion on them, but they are definitely well built,
and they're definitely major companies.
So WordPress is a totally valid thing to build and get good at.
At least it will be for the next, I'd say, two to five years.
And it teaches a bunch of practices that you'll use later anyway.
Cool.
So we've installed all of our stuff plus or minus.
I say plus or minus, because have we really?
But we have technically installed stuff.
And so taking that statement out of context,
I would criticize a student for being so vague.
So if I run status all on my services and if you are a fan of using unit d,
stop.
But also if you're a fan of using system CTL, things like that, totally fine.
I just use service as my favorite command of choice
to check on what's going on.
And so we have Apache 2 running now, which is great.
It means that things are going.
I just looked up.
It's funny, because we look up to make sure
that things are on the screen where we intend them to be.
But every once in a while, I kind of skim the chat.
And I saw that--
is that Salty Eric?
COLTON OGDEN: [INAUDIBLE] Wait, this stream was about tech?
NICK WONG: Yeah.
Yes.
I hope that didn't shock you too much.
Cool.
And we get Apache 2's Ubuntu default page, which is great.
And I say great because if we didn't get that, we messed up.
It didn't work.
And I would be like, well, debugging live.
COLTON OGDEN: Time to debug live.
NICK WONG: Never my favorite.
COLTON OGDEN: Always my favorite time.
NICK WONG: Oh man.
So they give you a little bit about the directory structure
and a bunch of other stuff.
And you're like, cool.
If you read through all of that, and I'm sure you're all pinging that now,
there's like stuff there that's really cool.
But I happen to know var www HTML is where Ubuntu stores
web stuff by default. And so what we can do here is we can [? LL ?] that,
and we have index.html.
If we cat index.html, unsurprisingly, you're
going to get roughly the page that you just saw.
So that's all really cool, handy dandy, blah, blah, blah.
But we're also going to copy over a PHP page.
And we're going to make sure that it loads PHP home pages as opposed
to HTML home pages first.
So let's go into etc Apache 2.
COLTON OGDEN: And also Madkingvala, thanks for following.
And mosman.
I think got mosman820.
But if I didn't.
NICK WONG: I love that it has the little-- did you pull that sprite?
COLTON OGDEN: It's one of the default theme,
like the widget themes you can get through the alert box.
And we just integrated the alert box last week.
It's super cool.
It has a lot of cool stuff.
NICK WONG: That's kind of awesome.
Because I saw that and I was like, yeah, that's cute.
COLTON OGDEN: Context.
Context is everything.
NICK WONG: Context is everything.
If you read through these comps, this can tell you
all sorts of things about how you define where certain users can go.
And it's a really useful file.
I'm just not going to touch it a whole lot.
We will edit something in it somewhere, because I
believe we need an option for WordPress in particular.
I'll have to check Google out to check it.
But what we are going to test is in mods enabled.
Oh, and they might have moved this.
It might not be in mods enabled anymore.
I think it's under [? DirConf. ?] There we are.
Love it.
I think these are sym links.
So unwritable.
Yeah, you're right.
COLTON OGDEN: Colton, when will we do the part two of Space Invaders?
Probably next week.
This week is going to be a bit busy with the hackathon going on Thursday.
We have another stream tomorrow.
So Thursday and Friday and in the weekend.
So probably not this week, but probably next week, most likely.
Is Windows dead?
NICK WONG: Is Windows dead.
No, certainly not.
All sorts of enterprise level things are built on Windows.
And I used to be one of those people who thought it was just really cool to mess
with Windows.
But they built all sorts of--
OK, I should really remember the name of that.
Built all sorts of just awesome things and are
responsible for a lot of the world.
Why is that not writable?
Sudo write.
So to answer your question about Windows,
no they are not dead in the sense that they are still
responsible for a lot of major enterprise structure in the world.
However, in tech right now, it is really cool to rag on Windows.
And I mean, I don't blame them.
I don't like their interface.
I don't really like the way that their shell is built.
I don't like the way that their kernel works.
I don't like a lot of things about Windows.
However, because they are used in all sorts of enterprise level solutions
and things, and if you're doing something on a big finance network's IT
department, you really should understand how to set up a domain controller,
how do you deal with having certain people on your domain
versus not on a domain, how do you deal with the different kind
of hierarchical structures for a Windows, like a proper windows domain?
How do you build all of that?
It scales really, really well.
And so if you're at a school system-- there's
a reason that schools use Windows for almost everything.
I think Harvard uses kind of this weird blend of Windows and Mac.
yeah, Apple Computer.
But they do generally have the kind of Windows configuration for the domain
setup.
And the reason for that is it scales brilliantly well.
It was built brilliantly well for enterprise solutions.
So as an individual user, I don't like it.
I would never use it.
Well, I would never use it.
I use it for some things like gaming.
But other than that, I don't really touch it.
But if I was building a business, I would probably avoid Apple.
They're not super cost effective, and I can scale a Windows machine.
There's already services and tutorials and community
built around scaling windows machines to enterprise level solutions
on the order of thousands of employees.
So as a business owner, as a young business owner,
and I would say the caveat being an inexperienced business
owner and non-business owner, it would seem to me
that that would be a really obvious solution.
And the reason that I think that's super important is Windows machines,
a lot of viruses and things are still written for Windows.
People used to think, oh, well, a Mac is unhackable.
That's not true.
That's just because why would I hack Johnny Appleseed when
I could go hack JP Morgan?
And they're built on Windows and you're running a Mac.
So that's kind of one of the main reasons
that a lot of viruses and malware is written for Windows machines
in particular.
Also a lot of hospitals trying to be cost effective,
they did the same set of choices.
So they are also on Windows.
And hospitals are a awful and kind of unfortunately somewhat frequent
attack target for ransomware attacks, because they have such a high priority
on their tech working all the time.
COLTON OGDEN: And [INAUDIBLE] thank you very much for following.
NICK WONG: Yeah, we appreciate it.
COLTON OGDEN: Hello.
See you in the chat there.
Windows is the WordPress operating systems.
[INAUDIBLE] And is this the real life or is this just fantasy?
With the Queen references from Imran.
Imran Ahmedh, I'm not sure what that's in reference to again.
What's the time limit again?
I don't know if he's referring to the stream,
but generally we go for about two hours.
NICK WONG: Two hours or so.
Yeah.
At some point, I like to eat dinner.
Which is roughly the marking limit there.
COLTON OGDEN: I went for hours yesterday.
That was the longest one that I've done.
Because Space Invader is kind of long.
NICK WONG: Yeah.
That's a very long stream.
COLTON OGDEN: We wanted to end on a relatively robust note,
so we [INAUDIBLE].
NICK WONG: I mean, if we were--
maybe if we do a livestream during reading period or right after all
my finals, I could go for a long time.
COLTON OGDEN: Like a hacking tutorial [INAUDIBLE]..
NICK WONG: Yeah, or if we came in and played games or something.
COLTON OGDEN: That could be [INAUDIBLE].
NICK WONG: What do you think about it?
OK, so what we did here was this is an Apache specific web server conf.
But the LAMP stack is one of the most common and prolific stacks
across the internet.
So we're going to talk about it somewhat in depth.
So we basically just said that when you're
looking for the index page, what do you serve up by default?
Look for index.php first, then look for index.html.
And originally index.html is the first one,
and then it goes CGI, PL, and then PHP.
I don't know the reason for making that choice,
but it is a choice that was made.
So we have now flipped those two so that it will now
serve PHP by default instead of HTML.
Now, if we wanted to test that, and this is where you will get to see my--
oh no-- terrible typing and lack of knowledge of PHP all in one
go, actually.
Oh, this is a root own directory.
Index.php.
You will get to see my complete lack of knowledge on what PHP actually does.
Well, how to actually properly use PHP.
I don't know if you wrap that in tag.
We'll find out.
That looks roughly correct to me.
COLTON OGDEN: It's been a while since I've done PHP,
but I think that is correct.
NICK WONG: I hope it's roughly [INAUDIBLE]..
COLTON OGDEN: We'll find it.
NICK WONG: Oh no.
OK, well, [INAUDIBLE].
Oh, wait, also I always forget this.
[INAUDIBLE] see that live.
We should restart the server to make those changes take effect.
And when we pull this, we get nothing.
I don't remember the PHP info page syntax.
That's OK.
We will Google that really quick to--
actually, we can just PHP info page.
PHP info dot PHP page.
Thank you.
Oh, it's literally PHP info, not dot info.
I was so close.
COLTON OGDEN: That makes sense.
OK.
NICK WONG: That makes a lot of sense.
I'm going to just double check the rest of my-- oh yeah, so close.
COLTON OGDEN: Yeah, they have a very functional--
NICK WONG: Very, very functional paradigm.
COLTON OGDEN: Yeah, API.
NICK WONG: I was thinking about object oriented programming.
COLTON OGDEN: You should say procedural, not functional.
NICK WONG: Yeah.
There we go.
Beautiful.
Love PHP.
I don't.
I really dislike it.
[LAUGHS] Cool, so we have now validated to ourselves.
COLTON OGDEN: It's a very opinionated stream.
NICK WONG: Yes.
We're getting close to politics.
Hair.
There's some Jimmy Neutron coming out.
We're really going for it here.
And I hate PHP.
There's some developer of PHP that might come across this one day
and just be like, really, man?
Why?
COLTON OGDEN: Teardrops into the keyboard.
NICK WONG: Or he's probably more realistically like, well, you
don't understand anything.
And it's like, yes, I don't understand a lot about it, and here we are.
So I have both index.html and index.php in the same directory,
and yet we're serving the PHP one, which means we're good.
We have configured Apache correctly to host our WordPress stuff.
Now, the next thing we need to really configure
is a MySQL database to fit with WordPress.
Now, I will, I guess, perpetually forget how to do this properly.
So that's lovely.
I don't actually know if that starts up by default. Let's double check that.
Any time you can't connect to something but you
feel like you should be able to.
Oh, of course it's up.
Awesome.
I believe it's something like this.
Dash P might be good.
Except I never set up a password.
Hm.
That is a great question.
You know what we're going to do?
We're going to-- oh, apparently you can't exit out of that.
We're going to sudo access that and see what happens there.
Boom, MySQL.
[INAUDIBLE]
COLTON OGDEN: Fantastic.
NICK WONG: That was terrifying.
Cool.
So I don't remember the exact syntax for what I'm going to try and do.
So what we're going to do is pull up the WordPress tutorial LAMP stack Ubuntu.
I like to just throw a bunch of keywords at Google
and see how good it is at filling it.
And it's really surprisingly good.
I throw in all sorts of random crap.
COLTON OGDEN: If you write the right keywords,
you might even get a job offer.
NICK WONG: That's crazy.
I've never thought of that.
COLTON OGDEN: Have you seen that?
NICK WONG: Oh, right.
Yes, no, I know exactly what you're talking about.
That is a very good point.
COLTON OGDEN: I haven't gotten lucky enough to get that.
NICK WONG: I have not.
COLTON OGDEN: I've tried.
No, I'm just kidding.
NICK WONG: If you type in a high enough prime number,
I think, you can get Google to--
don't quote me on that.
There is something where you can kind of keep
doing enough mathy things that eventually Google's like, hey, send
us your resume.
Or you get a coding challenge and there's like six levels or something.
COLTON OGDEN: That's true.
I saw the coding challenge part.
NICK WONG: Yeah, that's kind of cool.
COLTON OGDEN: I thought that was a cool way to seek out potential employees.
NICK WONG: Gotta love, I mean, when you control the search engine,
you might as well.
All right, so what we did here was we created the database called WordPress.
Shocking.
And we then said some stuff about its character stuff.
We're going to create a user.
Now, they highlight very nicely of them in red, I think, or green.
May highlight for you not to leave those by default.
We're going to type this in plain text, and you're all
going to see this and possibly hack my WordPress website.
If I were 12 years old, that would make me really upset.
COLTON OGDEN: Speaking of 12, actually, who was it? mosman20.
Where's the message at?
NICK WONG: Oh, right there.
COLTON OGDEN: It says, I'm 12 and I'd like
to learn more about internet security.
NICK WONG: That is awesome.
COLTON OGDEN: I still don't understand how you
installed Apache server on a server.
NICK WONG: Right.
So that is a great question.
Apache is actually just a set of processes
that we call a server, which is kind of strange,
because we call the hardware system that it's on also a server.
It's one of those things where you're actually using the same term
to describe two very different things.
So I could actually run a bunch of different servers on one hardware
device, one hardware server or machine or box
is another term frequently used for it.
And so what that basically means is I can run--
I mean, the only limiting caveat is which ports go where.
So I can only have one service attached to or bound to port 80 at a time.
With a caveat.
But generally speaking, that's true.
So what ends up happening here is I could actually
run NGINX server and an Apache server and a Django server all
in the same box, totally fine.
Assuming you have the resources for it.
And I could just have them listed on different ports.
I could have my Apache server on port 80.
I could have my NGINX server on 443.
And I could have my Django server only listening to--
maybe it's a mail server?
I don't know why we built it in Django, but sure.
We built it in Django, and it only listens on port 21.
So totally valid, and it definitely causes some sort of confusion
with what's going on as far as terminology goes.
So great question.
COLTON OGDEN: JPGuy, thank you for joining us.
Hey, everyone, how are you doing?
And [? Asley ?] was saying that she was upset about his betrayal over--
they were talking about choosing the spaceship,
and I think he betrayed [INAUDIBLE].
NICK WONG: That's rough.
That's real rough.
COLTON OGDEN: Offering pineapple pizza as a crime to humanity.
I don't know, but Dan [? Coffey ?] would disagree.
Dan [? Coffey ?] is a huge fan of pineapple on pizza.
Pepperoni pineapple.
NICK WONG: I am also a huge fan.
COLTON OGDEN: Yeah?
I think it's good.
A little sweet and savory mixed together.
NICK WONG: I like that.
I'm a big fan.
COLTON OGDEN: For refined palates only, right?
NICK WONG: Yeah, that's true.
You gotta be fashionable.
COLTON OGDEN: Is there a way I can include a binary into my security?
NICK WONG: I'm not entirely sure what you mean by that.
Yes and no.
It depends on what exactly you mean.
So if you wouldn't mind specifying, then we can clarify that for you.
COLTON OGDEN: Not the installation part says jabkochason.
NICK WONG: I think talking about how you install the server on a server.
That'd be my guess.
COLTON OGDEN: Oh yeah, that might be it.
I think I'm gonna stick with Namecheap for now.
This AWS seems too difficult, says iamakostik.
NICK WONG: Right.
So it does require that you go in and build some actual parts to the server
yourself.
So if you want to use some sort of actual hosting, AWS I believe
does have hosting services.
We're kind of just dealing with the low level hosting where we build all of it.
But yeah, you're totally welcome to use whatever you're comfortable with.
This gives you a lot more power and control over what you actually build.
COLTON OGDEN: Yeah, I think for a lot of people making a blog
or something, something very simple--
NICK WONG: Yeah, probably unnecessary.
COLTON OGDEN: --like Namecheap.
But this would be like if you're building
a business that has a bunch of services and other stuff like that.
A lot more complicated.
CS50, for example, uses AWS for all of its online services.
Well, not everything.
GitHub pages we do use for--
NICK WONG: Right, for some like our docs, I think.
COLTON OGDEN: Some of our more static documentation and websites.
Like the course website that you and I did, that was a GitHub page.
But yeah, definitely for more sophisticated, I think,
business [INAUDIBLE].
Food is the only subject we haven't covered yet.
That's true.
NICK WONG: Wow, yeah.
COLTON OGDEN: Covered literally everything else [INAUDIBLE]..
NICK WONG: Yeah, we've hit at least [INAUDIBLE]..
Wow, we are the sum total [INAUDIBLE].
There we go.
Now people really think we're crazy.
COLTON OGDEN: What you learn at Harvard Business School
and what you don't learn at Harvard Business School.
NICK WONG: I love that.
I love when they put them next to each other and they're like,
this is everything.
This is it.
COLTON OGDEN: Literally everything in the world.
I can't watch the stream anymore, says JP, because we [INAUDIBLE]..
NICK WONG: Ah, pineapple pizza.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: Losing subscribers.
COLTON OGDEN: AWS S3 is good for something simple.
NICK WONG: So AWS S3 is their storage buckets.
It is really useful if you want to store static assets somewhere.
So let's say you want to combine the power of Heroku and the power of AWS.
Then maybe what you would do is, let's say, I built a Django server.
I'm hosting it on Heroku, and I want all of my static assets
to not be running from the Heroku server.
Heroku is not actually really built that well
for throwing static assets back out to you.
Let's say you're rebuilding Flickr.
So you're displaying pictures all over the place.
Then it's actually really problematic for Heroku
to try and serve each of those images to your users, especially if you scale up
and maybe you become a little bit more popular.
Then that becomes really difficult. Whereas AWS, they're a workhorse.
They are really well optimized for just delivering content
no matter where you are in the world.
And that's a really cool infrastructure to be able to leverage.
And S3 does exactly that.
So if I wanted to-- it basically serves as a content delivery network or CDN.
And if I wanted to take some sort of images
and just store them on my bucket, my S3 bucket,
then I can have a Heroku website that just pulls from that bucket anytime
I want content delivered to some user.
And that's a really great thing to use.
COLTON OGDEN: Alexmlw and [? NeonZenKnight, ?]
thank you very much, both of you.
NICK WONG: We appreciate that.
COLTON OGDEN: Mosman says, I have practiced HTML5 for a long time.
Can I use my computer security?
NICK WONG: And then it is pointed out by Jacob--
oh, how did you say it?
COLTON OGDEN: I'm not sure.
I think it's-- yesterday we talked in the the chat.
his name is J like Java.
I'm not sure if it's "kochasen" or "kochosan" or any possible permutation
of syllables.
NICK WONG: We'll get your name right eventually.
COLTON OGDEN: Jabkochason says HTML is a markup language.
NICK WONG: Yes, HTML is a markup language.
However, it does have some implications for security,
especially when dealing with browser security.
So HTML5 is really nice.
It has all sorts of things dealing with caching and whether or not
certain scripted attacks actually really work well or not.
It also deals in how it interacts with the browser itself.
So there are certain practices that Safari
has that they deal with HTML5 better than they do with just HTML.
Actually, I think in general, browsers are
going to handle HTML5's practices better than HTML.
A lot of it deals with caching and whether or not certain things are
stored and where they're stored.
So it is a markup language.
But basically anything that is delivered along the pipeline from you
to your client does have some impact in security.
And it is something that the more of that
you overlook, the more opportunities, basically,
the bigger the attack surfaces.
So the less of it you overlook, the smaller the attack services.
Well, in concept.
And then noonboard.
Yeah.
Yeah noonboard or nonboard says S3 can be used to work with big data.
They have scripts to help you manage data.
Yeah.
AWS, they go the full 10 yards when it comes to managing data with you
or for you.
For you scares me.
I don't want people touching my data unless I ask them to.
But AWS does a really good job of providing you with a bunch of tools
to deal with your data as it comes in, how it's dealt with, how it goes out,
latency things like that.
They give you all sorts of metrics and things.
They probably give you way too many things for the average user.
But it is certainly better to have that than too few things.
So yeah, they do all sorts of great things.
Cool.
So we are granting in the web server that we are building,
in the WordPress website we are building, we are granting all.
So grant all permissions for read write and there's probably
a couple other operations you can do on WordPress dot star.
So WordPress is the database.
Dot star means all tables within that WordPress database.
And we're giving them to the user admin at local host identified by--
cool, my character stopped--
oh, that was nifty.
We're going to bring all our characters back.
Look at that.
COLTON OGDEN: Advanced Linux.
NICK WONG: The best Linux command you'll ever see
is the left arrow key and the right arrow key.
Identified by a password, which you can all see, which is great.
COLTON OGDEN: Invisible ink.
NICK WONG: Yeah, that was kind of cool.
I wish I could control that.
Maybe you can.
So we have now done.
COLTON OGDEN: [INAUDIBLE] password.
NICK WONG: Yeah.
That would be perfect.
There's all sorts of ways to put in passwords in hidden text.
I'm just not using them and I don't know if WordPress
or if MySQL does them by default. Obviously it doesn't need to.
So we've now created the database and we have created a user.
Well, I don't know if we created a user.
We might want to create a user.
No, we're good.
So we have now also created a user for what's going on here.
And we have a database.
We have stuff behind here.
We're all good.
So now what we're going to do is flush--
oh, there's-- man, I always forget how to spell is another one.
Cool.
That worked.
And then we're going to quit.
So we have now left MySQL to its own devices.
And we're going to move on.
We now basically just have to grab WordPress.
We don't actually have it on our site.
So now, I know in that digital ocean blog,
they recommend doing something different than what I'm about to do.
But we're going to do it this way, because it works the same,
and the security concerns that they're dealing with
or kind of the modularity they're dealing with is not necessary.
And I actually argue this being a little bit cleaner as far as where you go.
Oh, right, there's a million PHP extensions
that you can grab for WordPress.
And we'll grab them in the background.
I always forget about them, and they're not
all useful at all times, which is the annoying part.
And I don't remember if you append this.
Oh, OK, that works.
So we're going to do this.
I don't actually know.
We're going to find out what this does on its own.
And we'll see.
So while that's installing, we're going to go to WordPress's website.
And we're going to grab WordPress.
That's shockingly what we need to do.
So WordPress does this really cool thing where
they call it their 15 second install.
Or maybe it's their five minute install.
It's this very short time frame, and they intend it to be really impressive.
I don't know I typed in there.
I could have typed elsewhere.
That's fine.
So let's go to wordpress.com.
And we're going to go to--
they also let you host through them too, which is cool.
But we want to download.
Maybe they put that under developers.
Howdy, developers.
Cool.
COLTON OGDEN: Howdy, developers.
NICK WONG: Yeah, all two of us.
COLTON OGDEN: Imran says, who's your girlfriend?
Leave the relations to the databases.
NICK WONG: Love that.
I don't know exactly where they put their actual code base.
OK, wait.
We can just do WordPress.
Gotta love the power of Google.
WordPress download.
COLTON OGDEN: I think he's saying his name is pronounced jabkochason.
He or she.
I think that's a male name.
Jabkochason.
I think that's how you're supposed to say it.
NICK WONG: OK.
Good to know.
Thank you.
Yeah, we always try to get your usernames right.
I do a noticeably worse job compared to Colton.
Colton gets them pretty well.
COLTON OGDEN: I try.
I do a lot of practice over 18 episodes.
[INAUDIBLE]
NICK WONG: That's awesome.
So we're going to copy the link to that.
If you're like, wait, why didn't you just download it?
It's because it wouldn't have worked.
Oh, right, they use the latest tar.gz.
That's one of the greatest practices ever, by the way,
is you just keep the URL the same and you just update underneath.
That's super helpful, because then they don't
have to update to pull the newest one, which is really cool.
So we now have that tar.gz in here.
So we can do tar.
I think there's a bunch of other commands
that would have also worked here, but we're going to do that.
And that's going to unpack it for us.
If you didn't see that command--
I always forget the flags to this.
Well, I know them by memory now.
COLTON OGDEN: xvzf, yeah.
NICK WONG: Yeah, xvzf.
X for extract, V is for verbose, I don't remember
what Z is, and F I also don't remember.
So they do things.
There's letters.
Hey, yeah, couldn't have said it better myself.
So then we can go into WordPress, and we have a whole WordPress directory
structure in here, which is great.
So what we can do is--
and if you were being pretty cyber conscious,
then what you can actually do is say check the--
I was saying something, and I completely forgot what I was saying as I said it.
COLTON OGDEN: I know how that feels.
[INAUDIBLE]
NICK WONG: Ah, there we go.
You can check the hash.
So generally speaking, if you're downloading some sort of major package
from some sort of repository or website, they'll
give you a hash to kind of guarantee or make
you feel slightly more secure about the fact
that you got what they intended you to get.
Now, that relies on them having not been hacked,
which means that it only really truly protects
against man in the middle attacks.
And what I mean by that is the only way that that's actually
a secure way of validating what you've got handed
is if the attacker is in between you and the person, the provider, CDN.
Because if they got control of your CDN, they could change the product
and then rewrite the hash, redisplay a new hash to you,
and you would confirm the product with the malware in it,
and you'd have no way of checking that.
So we now have an entire WordPress directory.
And what we're going to do is copy dash R WordPress
and all of its delightful contents.
And what we're going to do.
That's var www HTML slash dot.
And we're going to just throw that all in there.
Of course we can't, because that requires sudo access.
Cool.
And then we're going to go car www HTML.
Now, we're going to do some interesting things here.
We're gonna chown dash R. I always forget how exactly chown works.
Oh, wow, that was dumb.
In my head, I was like, man, chown and then
I just typed man and expected it to work.
So we're gonna chown R, change the ownership of.
www dash data.
Oh, that's not gonna work, because that's not a good user.
Man, I always forget how this works.
Give me one sec to look up chown.
Doo, doo, doo, doo.
Owner group file.
Cool.
So we're going to chown dash R 755 w--
or sorry, Ubuntu.
And the group www dash data dot.
That sounds right.
Oh, and we have to use sudo to do that, because it's currently owned by us.
COLTON OGDEN: Abblepi, thank you for following.
Hope I didn't miss any of them.
NICK WONG: I don't exactly understand why that didn't work.
My apologies.
There's only so many commands I can keep in my head.
So chown directory syntax.
We'll find out.
Gotta love that.
That looks roughly right.
Oh, right, I'm a dummy.
I was mixing two commands.
So yeah, you don't actually need to change--
yeah, we were trying to do something real weird with that.
That worked.
There we go.
So what we were originally trying to do was mix CH mod,
which changes the modification and chown, which is something
that you do when you have not slept a whole lot in the past couple of days.
So there you go.
Live study in how that works.
So now if we do LL, we can see that these are all
owned by the user Ubuntu and www dash data, which is kind of just the data
group for the worldwide web.
Cool.
So something that has been pointed out a little bit earlier, and I
kind of ignored it by accident, was by twitchhelloworld, which said,
I thought you said in an earlier stream it is better
to avoid using sudo to gain access and instead rather to access directly.
Though said you do actually access using sudo a lot in practice.
Yes.
So what I'm doing here is I am saying, basically,
don't do this and stay as root.
That means that you're going to basically just have full control
and nothing will ever stop you.
No one will even really ask, which is terrible.
Keep yourself in some sort of sudo accessible user.
Now, what I also advise against is just arbitrarily typing sudo.
The reason I'm using sudo here is because we are actually
trying to access the root permissions.
Excuse me.
Because originally, this directory was owned by root.
So the only user who should really be able to modify it is root.
And so sudo gives me access to root, and then I'm
going to do something to what root actually owns.
And so I'm kind of doing by explicitly doing it that way is I'm saying,
I acknowledge this is owned by root.
I'm going to kind of temporarily run a command as root,
and that should all be congruent.
I'm running commands owned by the same person who owns this directory.
So yes, generally, as a rule of thumb, if you're using sudo,
you should think in your head, why am I using sudo?
That is a great question and a good intuition
that I would never get rid of.
Keep that.
It'll prevent you from running kind of willy nilly commands.
COLTON OGDEN: [? Ahmed Osman ?] said, can we
make a stream about building multitenant architecture, which
is the base for SaaS applications?
NICK WONG: I guess we probably could.
I don't know enough about them, I don't think, to do a stream.
But we could find someone who does.
COLTON OGDEN: We'd have to find somebody that could do it.
NICK WONG: Or we could educate ourselves on it and then do it.
COLTON OGDEN: True, true.
Over the winter break.
NICK WONG: Yeah, that could be a winter break project.
There's all sorts of things that are on my winter break docket.
Cool.
And do we have any other comments that we are missing?
COLTON OGDEN: They're talking about name pronunciations.
So jabkochason is talking about how there's no this letter.
I'm not exactly sure what that translates to.
And Jab, if you wouldn't mind tossing where
you're from again in the chat, if you haven't done that already.
I don't recall offhand.
JPGuy says his native tongue is Dutch.
So I'm guessing he's from the Netherlands, then.
Correct me if I'm wrong.
I apologize, JP, if I'm incorrect.
And seeing you guys have to Google syntax makes me feel so much better.
NICK WONG: Oh yeah.
Oh, we can do that more if you'd like.
I mean, sometimes I'm just guessing long intuitions
and hoping that I'm roughly correct.
I mean, syntax is generally something that I
think in a really kind of serious way, you shouldn't really
spend too much time memorizing.
I mean, a lot of this I've memorized just by doing it enough.
But I would recommend not memorizing it.
It's not worth your time.
The only times that I guess it might be time valuable
are if you, in a job environment or work environment,
are typing kind of the same set or set of parameters or set of codes
over and over again.
Then you don't want to have to Google it every single day.
That'd be kind of ridiculous.
But you'll memorize it by kind of just doing it over and over again.
I mean, that's how I generally memorize these.
I would generally say, generally speaking,
I would usually say that you shouldn't just sit down and memorize syntax
for the sake of memorizing syntax.
It is very rare that that is useful.
There are some languages, some functional languages,
that do help you teach and understand certain paradigms
and things about programming as kind of a meta concept.
But other than that, I would generally advocate
against memorizing just syntax.
I would usually try and motivate it through some sort of project.
Do a couple of those kinds of projects if you
want to really get that syntax down.
But otherwise, it's not necessarily super useful.
And Googling syntax is now a tool available to us.
COLTON OGDEN: Super easy, yeah.
NICK WONG: Why not?
COLTON OGDEN: [INAUDIBLE] was like 20 years ago.
NICK WONG: Yeah.
Before Google existed, it would definitely
be very difficult to Google things.
COLTON OGDEN: Books.
NICK WONG: Oh my god.
I can't imagine trying to just use a book for syntax.
COLTON OGDEN: [INAUDIBLE]
NICK WONG: Yeah, that would have hurt.
I have a lot of respect for the people who
were doing that and who were writing full programs in assembly.
That terrifies me.
Awesome.
There's some other stuff.
Isn't it useful in C, since the language is so small and so technical?
I thought maybe Python too, since it seems like it will be used so often.
This is asked by twitchhelloworld.
So in any language, it is useful to know syntax off the back of your hand.
Or off the top of your head.
Sorry.
Because it's going to make you code faster.
However, it has been pointed out by experienced developers to myself
and just kind of through my own experience, coding faster
does not always mean you're coding better.
Frequently people are coding really quickly and they write a bunch of code
and they write thousands of lines of code, and then you look at it,
and you ask them, well, where are your unit tests?
How have you sat down and debugged each part?
And they might tell you, oh, I haven't yet.
Haven't yet it's a very scary term in CS when you are building an enterprise
level project.
Because how do I know that when you add that into our code base
you don't crash the whole thing?
Now, hopefully we have continuous integration tests and things like that.
But in general, I would be very, very careful about how that actually works.
COLTON OGDEN: And thank you to [? WizAt23 ?] for the follow as well.
Make sure I got that name correct.
And then we have a couple of other questions.
[INAUDIBLE] future streams list.
That would be interesting, because [INAUDIBLE] multitenant
architecture most of debates.
I'll have to take a look and find somebody, probably.
I don't know if realistically we'll have time us necessarily over the break
to look at that specifically.
But if I know anybody that knows about that,
definitely we can take a look at that.
For security, you should have the web directory of your new WordPress
in your user folder and then deal with permissions,
then use virtual directories and Apache rules to override some permissions.
NICK WONG: Yes.
I thoroughly agree with that.
Also, you should certainly configure permissions
before you move stuff into a directory that's accessible to the web.
And the reason for that being that while it was in kind of this weird permission
state, there might be something that they could take advantage of there.
Now, in this case, I showed a private SSH key on the screen.
I don't know how concerned we are with really strict practices on security,
but that is a really good point that you don't want anything
to be available to the public until you are positive that it
is ready for the public.
COLTON OGDEN: That'll be for the next stream.
NICK WONG: Yeah, we will talk about it very rigorous-- well, much more
rigorously in the cyber security stream.
COLTON OGDEN: Which functional programming language should I
learn first?
[INAUDIBLE] comfortable JavaScript, least comfortable plus learning Java.
NICK WONG: Right.
So Java is another object oriented programming language,
and a very good one to know, at that.
I would count it as kind of--
well, actually, I don't want to say that, because it will upset everybody.
So yes, functional programming languages are worth learning.
However, I mean, imagine asking the same question
but with object oriented programming languages.
Which one should I learn first?
Some people will say Java.
Some will say C#.
Some will say C++.
Some will say Python.
COLTON OGDEN: C# for life, boy.
NICK WONG: C# for life.
Love that.
I actually don't develop too much in C#.
I do love C++.
And they have enough similarities that they're similar-ish.
I don't mind transitioning from one to the other.
Functional programming languages.
The first one I learned was OCaml, actually.
But I am a huge fan of closure.
I think it's really well done.
So as long as you're focusing on the paradigm
and why functional paradigms can be really, really useful,
I think you're fine.
I think you might want to also add in a practicality aspect to it
where OCaml's not used necessarily all that often.
Whereas something like closure, we'll probably
be seeing more and more use cases from that, especially because it can
[INAUDIBLE] to JavaScript.
So it's pretty portable.
Things like that are really important to a lot of people.
There's all sorts of languages.
I mean, F# is also functional, but I don't know if many people using it,
necessarily.
There's all sorts of reasons that you might use any one functional
programming language.
But I think as long as you're focusing on the paradigm, that'll help.
And technically, you could do some form of functional programming in a Java
or in even you could technically do it in any language.
Just whether or not they have kind of the syntactical sugar tools for it,
that depends a lot on the language.
COLTON OGDEN: C++ even has lambda expressions now.
NICK WONG: Right.
Yeah.
That's crazy.
And Python has a beautiful lambda expression syntax.
So yeah, you could do it in pretty much any language, I think.
COLTON OGDEN: Closure would be a cool stream.
I would love to do a closure stream.
NICK WONG: That'd be sweet.
COLTON OGDEN: I would need to deep dive a little bit deeper into it.
NICK WONG: Yeah, same.
I think it'd be fun.
And it's come up a couple of times now, I think.
[INAUDIBLE]
COLTON OGDEN: I think our fate is being drawn.
NICK WONG: We're going to closure.
Excellent.
COLTON OGDEN: Jabkochason, thank you for coming.
[INAUDIBLE]
NICK WONG: Ah yes, I appreciate it.
COLTON OGDEN: How many more streams will you guys do?
Well, you and I are probably going to do quite a few more.
NICK WONG: Quite a few, yeah.
Just kind of keep going.
COLTON OGDEN: [INAUDIBLE] We got one next week on C. You're doing one on C.
And then after the winter break, to someone else's question, which was--
who asked that question?
[INAUDIBLE] Winter break starts on the 12th for us, for me.
NICK WONG: I think for me it's the 20th.
COLTON OGDEN: Oh, OK.
And then we'll be back for the second of January.
And then that week we'll probably stream on the third and the fourth.
So we'll have a couple of weeks of a break in the winter
while we get CS50 on edX going for next year.
And then we're back.
We'll be back at full capacity.
But yeah, definitely tune in at that point.
And they're saying, you can do functional programming in Java.
It's ugly, but you can do it.
[INAUDIBLE] I definitely have seen that.
Functional programming from [INAUDIBLE] practical application.
NICK WONG: Right.
So I guess as far as learning new syntaxes,
eventually you should be at a point where learning new syntax
isn't too bad.
I mean, learning new syntax to the point of being a master
at that programming language I would argue is very difficult.
But learning new syntax to where you're comfortable enough
to code up something simple, that shouldn't be too bad.
I think that requires a couple hours of learning.
COLTON OGDEN: The basics like map filter reduce can all be learned.
You can learn that in Python and JavaScript.
You don't have to go too crazy and go to a functional language
to understand what those are.
NICK WONG: Yeah, exactly.
And those are, I think a lot of it.
Right?
If you understand that, tail left, tail right,
you're pretty set as far as a lot of functional programming things go.
It's then just can you start to see a lot of the applications for it?
Can you start to see how it applies to algorithms?
So take a common algorithm and do it in a functional
way instead of the object oriented way.
And actually being pure about this.
COLTON OGDEN: That's the hardest part is taking your procedural and object
oriented instincts and transferring that into the world
of functional programming.
NICK WONG: Put it into functional.
COLTON OGDEN: That's the hard part.
NICK WONG: That can be pretty hard.
COLTON OGDEN: And that's where it actually--
NICK WONG: I think that's the first piece, then,
for our functional programming course here
is literally take a bunch of stuff you've already done
and do it functionally.
And it's a hard struggle.
People are like, oh God, this hurts.
It's just not something you're used to.
And there's a lot of things where you're like,
this would be so convenient in object oriented.
All right, so we are almost there on our WordPress website.
Things have been configured to where they are roughly the right permissions.
Someone mentioned using an htaccess file to configure stuff.
htaccess has been-- there's a lot of the community on Apache
is moving away from htaccess just because it is not necessarily
something that is super robust.
And what I mean by that is it's easy to have a bunch of them
and then have them overwrite each other and you can control
permissions a little bit easier.
However, they are still used frequently and a lot of tutorials
still encourage them.
So I'm not going to touch on it too much, because it is kind of not
necessarily considered a best practice anymore,
though it is a totally valid practice.
So we're going to kind of ignore it in favor
of just setting our permissions to be relatively restricted, which
we actually are not really doing here.
But in concept, you could.
So with that in mind, we're going to deal with htaccess maybe
never in a stream.
But if we ever cover Apache explicitly, we will certainly deal with it then.
COLTON OGDEN: Mrc147, thank you very much for following.
NICK WONG: Yes, we appreciate that.
Every time someone follows, we appreciate it.
COLTON OGDEN: I love the sound, the "bring."
NICK WONG: Yeah, it's a really cool sound.
They don't hear that, right?
COLTON OGDEN: It'll be in the video, I think.
Yeah.
Everybody in the chat, confirm if you can hear the follow notifications
when it [INAUDIBLE].
NICK WONG: It's a cool sound.
COLTON OGDEN: [INAUDIBLE] They probably hear it through the microphone,
if anything.
But I'm pretty sure it's in the actual video.
NICK WONG: Yeah, that'd be kind of funny.
It's very interesting to me what you guys hear versus what we hear.
I don't know why I did status all.
I know exactly what status I'm trying to change.
COLTON OGDEN: Yeah, they're saying they hear it, yeah.
NICK WONG: Oh, sweet.
Yeah.
Oh joy.
Spelling.
There we go.
Forgot to restart the database.
COLTON OGDEN: Some people are saying they can't.
OK, I'm not sure.
NICK WONG: Oh, so it's like the dress.
Everyone's kind of like--
COLTON OGDEN: Yeah, exactly.
NICK WONG: We don't all agree.
[INAUDIBLE]
COLTON OGDEN: The yanny or whatever it was.
NICK WONG: Yeah, exactly.
COLTON OGDEN: Ahmedosman thank you very much for following.
NICK WONG: All right.
Now I might be missing a MySQL extension.
Bummer.
Let's go ahead and grab that from the tutorial that I so conveniently closed.
Love that.
There is all sorts of extensions.
There's a couple of minor things that I am certain I am forgetting.
We'll live.
I don't build with WordPress that often anymore,
so we're going on knowledge from a while ago.
COLTON OGDEN: It was laurel and yanny.
That was what it was.
NICK WONG: Oh, right.
There we are.
That is the name.
COLTON OGDEN: It was both names put together,
and that's why you could hear it.
Because the low frequency was Laurel.
NICK WONG: Oh, and they just had them at different frequencies.
COLTON OGDEN: It was the other way, but yeah, the lower frequency bands
were one name and the upper ones were the other one.
So if you filtered out either side, you would hear the other name.
NICK WONG: That is good to know.
Hm, maybe I am not missing a MySQL thing.
So let's go ahead and see if maybe we just messed up.
Oh, we are missing the PHP MySQL extension, I believe.
COLTON OGDEN: I signed up for edX, but I have been busy with work.
I haven't started.
Is it possible to catch up or re sign up for the next session?
I believe you can.
I'm not 100% sure of the--
I forget how the actual details work.
I think you certainly can sign up.
If you're taking it for free, you can sign up and do it whenever you want.
For the certificate, I do think you can just
turn in your work for the next course iteration and still get it.
I don't think you're locked in.
But the details should be on the website.
I think it'll tell you what the deadline is.
All of the new content from this year is going to go up around January.
It'll be up January 1.
So if you want to start taking CS50 with the lectures that we taught this year,
then that'll be an option to you.
And you can see the lectures on YouTube right now, actually, too.
NICK WONG: Sweet.
Yeah.
That one I wouldn't necessarily know a whole lot of an answer on.
Oh, I do know this.
Well, I don't know this one.
I have I guess as to this one.
You probably know this one.
Why isn't CS51 on edX?
I know they just recently kind of changed course staff,
so they were dealing with a bunch of stuff with that.
Just recently being the first year I took it.
I've had that happen to me all the time, actually.
Every single CS course I think I've taken except CS50
has had a change in professor every single time.
Go figure.
I don't know why that is.
COLTON OGDEN: Yeah, I don't know if they have the resources either,
or at least the production.
They definitely don't have the production CS50 has.
I've been telling David we should try to get a 51 of our own implementation done
at some point.
I think that'd be really cool.
How tall is David?
David I believe is 6' 2" 6' 3".
NICK WONG: Yeah, he's pretty tall.
COLTON OGDEN: If David's lurking in the chat,
then definitely let us know how tall you are, David.
NICK WONG: Yeah, throw that out in the chat.
COLTON OGDEN: People want to know.
NICK WONG: In case there aren't enough people obsessed with you.
I'm sure there's a compiled version of David somewhere on the internet.
Just like a compiled fan page of David.
There's got to be.
COLTON OGDEN: I think there probably is, yeah.
He has a Wikipedia page, but I don't know if that's fan driven
or how that works.
NICK WONG: Yeah, I don't know.
Good question.
So many questions that we all don't really necessarily know about.
All right, so we have configured WordPress kind of.
Except we deliberately left out, we, I deliberately
left out copying over their config page.
And the reason for that is it can sometimes
cause bugs if you don't necessarily edit it correctly.
And I promise you, I was going to edit it entirely incorrectly.
So we're doing that through WordPress's interface, which is kind of nice.
And so what ends up happening here is they tell you
that, hey, you didn't actually create a wp dash config dot PHP file.
And you're like, I totally, and then when you list everything out,
you're like, didn't do that.
And the reason that we didn't is because they have a sample PHP file.
And in a lot of WordPress tutorials, the standard
is to copy that over and then fill in your parameters.
And they very clearly demarcate where you should fill in your parameters.
However, we're going to deal with things here.
And we're going to kind of actually go through
with WordPress's way of doing it and talk about why that's kind of cool.
Because it didn't necessarily exist before.
So the database name is WordPress.
Wow, we're so clever.
The username is admin.
The password is, shockingly, password123.
COLTON OGDEN: I love how they don't even give you a-- well,
I guess it doesn't matter usually that it's not hidden.
For the sake of this, if you actually had a legitimate password [INAUDIBLE]..
NICK WONG: Yeah, you really wouldn't want everyone seeing this.
But that's OK.
Here we are.
Table prefix.
We don't really care about this.
But if you were running a bunch of WordPress databases or servers
or things, like WordPress actually does in the real world,
then you might want to care about that.
And we're going to submit that, but I can't write the PHP file.
That's a huge bummer.
[INAUDIBLE] So what this basically does is it gives you the PHP file yourself.
You can copy all that.
I really hope I copied that.
And then we're going to nano wp dash.
COLTON OGDEN: Paste in your password on accident that you [INAUDIBLE]..
NICK WONG: Oh man.
That would suck.
COLTON OGDEN: If you did, that'd be hilarious.
NICK WONG: I would not put it past myself.
There you go.
And you'll notice that this all got set up.
Now, it also grabbed these hashes and salts for us,
which is super convenient.
It might have generated them for us.
I don't exactly remember how they do that.
I know that when you do it yourself, you can go to the api.wordpress.org over it
and get them yourself and manually copy them.
But we don't deal with any of the rest of these.
Everything else is set up.
There's my password again.
You want to hack my WordPress website, knock yourselves out.
COLTON OGDEN: It's a good password.
NICK WONG: Yeah, it's a very solid password.
COLTON OGDEN: It has numbers in it.
That's important.
NICK WONG: Exactly.
There are numbers.
No capital letters, but we could put one in there.
Cool.
So we have created it manually, pasted the following text into it.
WordPress promises me that I can run installation.
So I click that.
Hands off.
COLTON OGDEN: Samuta, thank you very much for following.
NICK WONG: And now we can go ahead and create stuff.
So site title, AWS Twitch Demo in aggressive caps.
There's a username, admin.
COLTON OGDEN: Becausetheworldisrou.
I'm guessing probably round, but it got cut off.
[INAUDIBLE] Thank you very much for following.
NICK WONG: And we're not going to confirm password.
Yeah, we're gonna confirm the use of a weak password.
There we go.
COLTON OGDEN: A very weak password.
NICK WONG: Very weak password.
WordPress is sitting there like, ha, ha, ha, you weakling.
Except WordPress gets hacked all the time.
I'm willing to accept that insult. And we're going to say admin.
Oh my God, what?
In two keystrokes, I deleted the URL for the page.
Go figure.
So admin@gmail.com.
That's going to suck.
Discourage search engines.
Well, that's up to them.
I don't know if Google actually follows that.
You appear to have already installed WordPress.
Well, that's kind of nifty.
I don't think I did, but OK.
And we log in.
And we're going to log in with admin password123.
COLTON OGDEN: Nonboard, thank you very much for following as well.
NICK WONG: That's not valid.
Bummer.
It should be valid.
COLTON OGDEN: Twitchhelloworld has been rooted out
as [? Jacque ?] in the Facebook group.
NICK WONG: Oh, you guys suck.
Just as an FYI, y'all are the worst.
COLTON OGDEN: What happened?
NICK WONG: Someone beat me to it, because y'all actually type faster than
I speak.
I've been locked out of my own WordPress website.
You literally took me up on the go knock yourselves out.
Now, if I had followed a user's suggestion at the very--
I'm still laughing at how hilariously funny that is.
COLTON OGDEN: They have Illuminati things.
NICK WONG: Yeah, there's a plant.
COLTON OGDEN: [INAUDIBLE] live demo.
NICK WONG: So I love doing live demos.
And actually this is one of the better parts,
because it's just unexpected and really funny.
COLTON OGDEN: [INAUDIBLE] might be here too.
It might be the culprit.
NICK WONG: Whoever is mocking us the most in the group chat I would imagine
is the person who did it.
And that's kind of awesome.
I did literally tell you to do it.
So I appreciate that you followed that.
And so out of curiosity-- well, maybe not out of curiosity,
but we are going to, since we have a little bit of extra time,
since I won't spend that building the WordPress website, it has been built.
And I cannot admin it at the moment.
We really appreciate that.
You guys are great.
And so what we're going to do is we're going
to actually run a small hack on it and see if we catch your password.
So if you weren't clever with your password, then this will catch it.
Don't change it.
It'll be kind of cool.
Or go ahead and change it, I don't know.
But if it was something simple like password123 or password1234
or something very entertaining, then we'll actually crack your password,
and that'll be kind of interesting.
The chat will enjoy it.
So it'll be kind of fun.
I didn't do it, though I saw this.
Paste link into chat.
I'm always scared of clicking links in chats.
But Colton is fearless.
And he got a picture of team Edward.
Edward from Twilight.
COLTON OGDEN: Some great contributions from the chat.
Appreciate that.
NICK WONG: The chat, you guys are hilarious.
So we do all sorts of crazy things here at, what is it, Twitch, CS50 on Twitch.
COLTON OGDEN: CS50 on Twitch.
NICK WONG: Cool.
So somebody has cheated into this.
I will say they could probably have been a little bit more creative
with the title of the website.
It could've been hacked or something like that.
Oh, they're commenting on the hair.
COLTON OGDEN: A little bit.
A little bit [INAUDIBLE].
NICK WONG: That's pretty funny.
All right.
So we have this kind of cool utility.
I have this kind of cool utility.
It was built by some people that do some cool stuff.
Also, I've changed my prompt a little bit.
I was inspired by talking about the prompts customization last time.
So I actually changed it.
COLTON OGDEN: [INAUDIBLE] happy face.
[INAUDIBLE]
NICK WONG: Yeah, so it changes if you run a command that doesn't exist
or it actually tells you the error code that prints from that command.
COLTON OGDEN: OK, that's cool.
That's cool too.
I like that.
NICK WONG: Yeah.
So I thought that was kind of cool and thought it was kind of nifty.
So if I run some sort of valid command, it goes back to happy face.
Thought that was kind of cute.
But what we're going to run is something called wp scan.
And what this does is it allows us to scan a WordPress website.
Ah, no.
Why did that copy with it?
Why does Nick forget how everything works?
Cool.
And this is going to tell us it's WordPress website.
And it's going to enumerate some kind of stuff that's going on there.
And I can actually also pass in a password list.
I don't remember if that's the keyword, but we'll find out.
I have this password list stored somewhere.
No.
I think it's under--
wow, I'm so glad that I called that something reasonable.
I don't know what's in passwords2.txt, but we'll find out.
COLTON OGDEN: hiimzackjones, thank you for following.
NICK WONG: Yes.
We really appreciate that.
I love the noise.
Yeah, that's fantastic.
[INAUDIBLE]
COLTON OGDEN: I see a lot of seller stuff in there.
NICK WONG: Yeah, there's some cool stuff in here.
Oh, so this is home brewed.
Where is the password list?
Ah, word list.
Every time.
There's only so many ways that you would think you could run this sort of thing.
And yet there are way more than you will ever imagine.
So we're going to throw a WordPress scanner at it.
And if you are thinking this is a script kiddie-- hey, we know who it was.
Really good on the name there.
So if you are thinking script kiddie, you would be entirely right.
This is a script kiddie sort of attack.
However, I can explain to you what's going on underneath it,
and I'm not going to use that as validation for me
not being a script kiddie.
But I think it is kind of funny.
So we did end up grabbing one of your logins.
I don't have a whole lot of passwords sitting on there.
If you want to tell us your password, you can see this tool work.
Otherwise it doesn't matter.
But we do know the username that is actually going on here,
and we know that you're the only user on this WordPress website.
So if I wanted to be really thorough, I would probably go onto--
oh, I'm not going to go on there, because I know some of the passwords
are not pleasant.
They use a lot of bad words for passwords.
People are naughty.
So if you type in--
COLTON OGDEN: Clearly.
NICK WONG: Y'all are case in point of that.
You guys are naughty.
And so if you go on GitHub, there's a [? SEC ?] list or [? SEC ?]
dev that does just thousands of different kinds
of passwords and where they got them from and all sorts of cool things.
And so if you go on there, you can just pull their password lists
and snag them and then throw them through WordPress scanner
and see if you can crack people's passwords.
It is a brute force attack.
There are all sorts of ways in which they can detect this sort of attack.
You'll notice I only threw 500 passwords at [? Maga's ?] way
of hacking our things.
Someone asked, wait, is this at CTF?
What CTF is this?
It is not a CTF, but it's pretty close in concept in the idea.
And we're kind of getting towards that.
Actually, a lot of the CTFs that I build are very, very similar to that.
This is not a CTF if you just happened to hop into the stream.
This is actually us building a [? word ?] web server.
We are building a web server.
This is not a CTF.
Do not worry.
We will, however, go through a live CTF later.
So yes, I have now been locked out of my WordPress
website, which is totally cool.
I own the WordPress website, which is great.
I can also shut everyone out using something like this.
Actually, ufw allow.
Let's do allow 22.
ufw allow 20.
Oh no.
That was the worst possible typo.
I'm always afraid of doing that.
I don't remember if it's disallow?
Where is it?
COLTON OGDEN: And thank you [INAUDIBLE].
You've been a regular for a long time.
Thank you for following us.
NICK WONG: So we'll deny port 80, which means you are no longer allowed--
well, you should be no longer allowed to connect through our--
oh wait.
Sudo ufw enable.
There we go.
So yes, it may disrupt existing SSH connections.
That would be normally very dangerous, because I deleted my SSH
key to literally prevent you guys from doing
what you did to the WordPress website.
Which let's make sure that that's still true.
Cool.
And now that should prevent us from connecting to the WordPress website.
So it's a decent burn all cut corners strategy
if you notice you've been hacked.
In this case, I noticed I've been hacked.
Now, my first technique was to hack back.
Don't do that.
That's a terrible first strategy.
However, a good first strategy would be for us to then disable all connections,
shut down all resources.
I've explicitly denied 80, but ufw will deny everything
else too that's not explicitly allowed.
So I am also just being extra secure in that.
But I also explicitly allowed 22 so I can connect myself.
And that makes sure that you guys are all shut out.
The world wide web is shut down with regard to my server.
If I wanted to be really thorough, then I might go back
into our management console and edit the inbound rules and say, you know what?
I wasn't even using 443, so get rid of that.
And I'm going to nuke port 80 as well.
And now I'm pretty sure that I have blocked myself out of the internet.
Now, that might be a dangerous first strategy.
I'll go on a very brief tangent, since we have now completed up
to stage three of our plans for today, and we've completed it roughly on time,
actually.
And it will give me a little bit of a moment
to talk about a better strategy, which is
you should actually kind of let your attacker go for a little bit
and watch them.
Once you've noticed it, it's a decent idea
to try and contain them, but let them not know they've been contained.
So if there is some sort of way of sandboxing them without them noticing,
that's fantastic.
And the reason for that being that I can design a beacon that
gets implanted on your server and goes out and pings back to me
and, I don't know, gives me information or lets me connect back to you
as a shell or something.
And that beacon might detect whether or not I have internet connectivity
or whether or not the beacon can reach out.
And if I shut everything out, I'd kind of just
pull my computer off of the internet and leave it in some sort of--
you could refer to it as an air gapped state of some sort.
Then that might actually not help you, because your attacker might disappear.
You might think your attacker is gone.
Then when you connect it to the internet again, you put a bunch of new protocols
in place, you change all of your passwords, all of your keys,
everything's been re encrypted.
That attacker is still there and they're now just as bad as they were before,
but you think you're safe.
And that's much worse.
So generally speaking, if you can kind of
play this kind of counter subterfuge game with your attacker,
that actually helps.
Nonboard points out honey pots.
Honey pots are a really good idea in concept,
especially if you can execute them really well.
However, I would advise being very, very careful
with that, because if your honey pot is sitting in the middle of a device
that you actually care about or even a network you actually care about,
it is no longer necessarily a honey pot.
It might be kind of a honey grenade.
It is really good most of the time and every once in a while
it explodes and ruins your entire network.
So be very careful in setting things up.
Try and take the right precautions.
There's not necessarily a centralized repository for how to do it.
But for example, if you set up a honey pot, I'm the attacker
and I get into your network but I go into your honey pot by default,
I notice everything is a little bit too easy
or maybe I just realize that I'm on a network that only has one node
and I think that's very strange.
Then I might say, hm, it's very possible I've been trapped,
but they don't realize that I realize that I have been trapped.
So I can play on that sort of assumption and start
trashing their system, which is what they would expect.
I can do all sorts of behaviors that you might also expect.
And then the second that there is some sort of vulnerability
that I have noticed or the second that I realize
I can go one step back in the network but not all the way out
of your network, then I will use that point to then branch back into it.
And I will make sure to not hit the honey pot again.
And so that sort of thing then buys me time.
So if your honey pot's not configured correctly,
or if it's configured in a way that you forget
that your router is a potential attack surface
or that a firewall can be a potential attack surface,
there are all sorts of attack surfaces.
You want to minimize those.
But there are reasons for having them.
There's a reason for a firewall, and there's certainly
a reason for a router.
So you have to be careful, and there's a lot of balancing that goes on there.
COLTON OGDEN: Yeah, very curious to see the cyber security stream.
NICK WONG: Yeah, it'll be very fun.
COLTON OGDEN: [INAUDIBLE] stream.
NICK WONG: I'm very excited for it.
COLTON OGDEN: I saw an [INAUDIBLE] article on outages on Microsoft Azure.
Do you have thoughts on going to cloud versus your own server?
The main motivation to me is the cyber security staying up to date constantly
there.
On the Azure I'm guessing they're talking about.
NICK WONG: Right.
So it is actually definitely good point to end on, since we've
been talking about web servers.
I'm going to kill mine while I answer that question.
But basically, the question being that if you host something
on some sort of remote provider like AWS, Azure, Google Cloud, they have
have more resources than me the individual.
I know that's true.
I have $5 in my wallet.
And they do not have just $5 in theirs.
So they are capable of doing all sorts of things
to update and maintain security practices.
They can update the hardware itself, which is really important.
They can do all sorts of really, really cool things that I can't.
And as my own personal user, if I'm hosting a server in my house,
it costs me electricity costs, which they are not really
necessarily charging directly to me, at least not in the same way.
It also might cost me in networking for my ISP.
It might cost me in terms of what if a hardware device breaks.
If I have a hard drive that just breaks, like they break from time to time,
that would be really bad.
I don't necessarily have data backing up and things like that.
There are a lot of really great advantages
to using a cloud service provider.
Now, that being said, that cloud service provider
has hardware access to your device.
So they could, in concept, if they were to ever turn out
to be a bad agent, they could mess with your device,
and that is something to be kind of paranoidly aware of.
Something else to kind of keep in mind is having a service on your own,
provisioning for it in your own in-house or in warehouse,
then you have to take care of every single part of it,
and there are a lot of security concerns that you might not be aware of.
Whereas Amazon has their own security team dedicated to doing just that.
So it's generally worthwhile if you're a business or enterprise solution.
Unless you're big enough that it is more cost effective to keep it in-house,
it's usually going to be more worthwhile to keep it on some sort of service.
Now, examples where that might not be true despite cost effectiveness
would be maybe hospitals, where data and sensitivity are really important,
of utmost security, confidential.
And I think AWS actually does follow enough safety parameters on that
that they are regulation approved as far as hospital documents go.
If you're a law firm, that might be of utmost priority to you.
And it's a selling point, even, to your clients
is that we protect your data because we own all of it
from the electricity that comes into the house to all of the data
that you gave to us.
If you are a government, for example.
If I am the foreign government of China, if I am the Chinese Communist Party,
I might not use AWS to host my things.
Because the US government, it is an American company,
and the US government might subpoena things off of that hardware.
And they might be totally within their rights
to do that if it is a matter of national security.
So that would be something to consider.
But I don't think any governments are really watching.
Or if they are, hello.
And that's all I have to say for that.
COLTON OGDEN: All 41.
NICK WONG: Yeah, all 41 of them.
Our foreign governments.
COLTON OGDEN: [INAUDIBLE] house server, in-house server [INAUDIBLE] running,
but we don't have any web facing stuff like a website or databases anything
big, just DNS, DHCP, and AD.
NICK WONG: Sure.
And so you're AD basically tells us that you're using some sort of Windows
environment, which is really cool.
Likely using some form of Windows Server if you have it all in-house.
And if you have just DNS, DHCP, and AD, then minimal services definitely helps.
And continuing along the kind of paranoid track
of this conversation, if I wanted to be extremely paranoid,
well, you can poison DNS.
You can mess with DHCP.
And I could actually override the security of your AD
using any number of man in the middle versus external attacks
versus whatever.
But generally speaking, that sounds like a good practice.
That seems very reasonable.
And within business, that seems like a pretty standard practice.
So there's all sorts of ways of doing that sort of thing,
and I don't think that there's any realistic threat.
But it is something to keep in mind.
As a computer scientist, as a cybersecurity person, as a programmer
and as a person, it is definitely a good idea to be as thorough as possible
and have kind of these cases enumerated so that in the event that that happens,
even if it is a very unlikely probability or a very low probability
occurrence, you're still aware that it could have happened
and you might have some provision in case.
I believe a good example of that is the United States occasionally discusses
what happens if the zombies come and take over in the Senate.
That's a real discussion that occurs.
And it's such a low probability as to most people
saying that would never happen.
But it is very possible.
It's been considered in popular culture enough
that maybe something along those lines could happen.
And considering that case, still worthwhile.
COLTON OGDEN: Makes sense to me.
It looks like [INAUDIBLE] has asked about the Humble Bundle currently
running a sale on some cyber security books.
So these are them if you want to look.
Basically asking, are any of these worthwhile?
So these are the [INAUDIBLE].
NICK WONG: So things with books, and the reason
that I am somewhat wary of, though definitely a huge fan of getting books
on cyber security, block chain, C, programming, best practices, worst
practices, mediocre practices.
No one ever writes a book mediocre practices of C programming.
They always write the best practices and who knows where that came from.
But the reason that I'm wary of books and of buying information
on a monolithic standpoint is I am usually of the opinion
that people have some really good opinions and some really bad opinions.
And myself included.
I probably said something within the past three streams
that someone was like, that's either wrong,
that's probably happened many times maybe, or that's a terrible opinion,
here's why.
And they have real evidence for it.
Yeah, PHP is probably a great example.
I was like, I hate PHP.
And they're like, well, I have real evidence
backed up by metrics and standards that says you're wrong.
Sure.
And that's the reason that I advocate pulling as much information as you can.
Because as you start to make your own opinions on these sorts of things,
you are capable of actually looking at a book and reading--
one of these books is Mastering Kali Linux For Advanced Penetration Testing.
OK, well that's a lot of words that sound really cool.
And I'm not going to just criticize the book based on word mincing.
But they're not necessarily meaningful.
What do you mean to master something?
At what level are you a master of anything?
And if you're talking about advanced penetration testing, well
what differentiates that from intermediate penetration testing?
How did you define penetration testing?
Is that the standard?
Is that what the community and the world has decided on?
Is that a community within the United States?
Is that a government has decided on that?
There's a lot of decisions that are implicit in just the title.
And I might still read that.
I think that sounds like a great book.
That sounds cool.
I might learn some tricks that I never knew before.
But I would also want to read another book that claims it's better at it.
Because now I have some countering opinions.
I can make my own choices and decisions there.
A lot of programming, a lot of cyber security, a lot of life
is actually just making choices and weighing trade offs and benefits.
And that's generally what I would use as an approach
for learning things about CS.
COLTON OGDEN: Absorb more data.
More information.
NICK WONG: Pull in more and more information, as much as you
can, and try not to overwhelm yourself.
COLTON OGDEN: They said they're gonna call you Nick the spy from now on.
NICK WONG: Sure.
COLTON OGDEN: Intelligence agencies don't need spies
as long as data is already in the cloud.
NICK WONG: Well, their spies have just gotten upgraded.
All our data is already in the cloud.
There is all sorts of interesting things on that statement.
I think the FBI would like you to believe that that is not true.
They follow the law.
They go through courts and at least in the United States,
they are fully above board.
I think the CIA and NSA would like to agree with what you just said.
So there's all sorts of very interesting things.
There's all sorts of interesting political things on that.
As far as calling me Nick the spy, just don't tell the government.
And someone also pointed out there, and it'll
be probably one of the last comments that we read off,
is a cyber security programmer told me they try to avoid ever
even nesting one loop in code.
He says the lack of cyclicity, or something like that,
enables him to test more efficiently.
Thoughts?
So my first intuition on that is to say that that sounds absurd.
But it might have been very reasonable given their context.
I don't know exactly what they were saying,
and I don't know what they were exactly talking about.
But generally, the statement of this thing
should never be done is missing the nuance to make it correct.
And so saying never nest one loop in code, no loops.
COLTON OGDEN: Done.
NICK WONG: OK.
Sure.
I write everything with if statements.
That's not a loop.
And I can't a for loop.
No while loops.
So all of my loops are built through recursion.
OK, sure.
COLTON OGDEN: [INAUDIBLE] go to statements.
NICK WONG: Oh no.
Or go to statements.
So I use go to [INAUDIBLE].
COLTON OGDEN: [INAUDIBLE] assembly in a nutshell.
NICK WONG: Yeah, the assembly version of it.
So we end up just doing that.
And now I've avoided loops.
I've not helped my testing at all, because now all of my unit
tests that rely on using for loops and while loops are useless.
And so now I have to rebuild all those.
I would argue that--
I mean, I'm kind of openly mocking it.
But I would say that it sounds like a non-useful statement.
It sounds like the programmer that told you
that either didn't know what they were talking about,
or it was in a very particular scenario, very particular instance,
and they were right in what they were saying,
but in the general sense, that's not a hugely useful statement.
COLTON OGDEN: Maybe it was for [INAUDIBLE] test cases
or something and [INAUDIBLE] run these test cases fast so no looping.
[INAUDIBLE]
NICK WONG: I've seen--
COLTON OGDEN: Pink Panther.
NICK WONG: Yeah, I was gonna say.
Is Mr. Bean a spy?
COLTON OGDEN: Johnny English.
Those are the tropes.
That's where the joke comes from.
NICK WONG: Right, exactly.
COLTON OGDEN: [INAUDIBLE] That's the whole point of it.
NICK WONG: That's why they're funny.
There's a good comment on exploiting code
is more about sanitation and things like putting too much into an allocated
amount of space to break things.
Sure.
That is a very good example of a classic buffer overflow where I took--
I know that you wanted a certain amount of data somewhere.
And actually, that takes advantage of two things, a buffer overflow does.
But it does have half of what you're talking about, which is
and I just give it way too much stuff.
And so the things at the end, nobody knows what they do.
They might be a pointer somewhere.
They might overload your return address and then return you
to another piece of code that I loaded.
Things like that.
And that also relies on the fact that code is just data.
And data represented at any level could be anything.
It could be an image.
It could be a word.
It could be code.
It could be executable.
It could be your mother's maiden name.
No one really knows what it is.
And so you have to be able to deal with or force data to be a certain kind.
Or you should try to.
And generally, I'm of the minimalist approach.
Make everything as small and minimal as possible.
Only what is needed, like needed, needed, and then build from that.
COLTON OGDEN: Because no loops.
NICK WONG: Yes, no loops.
I don't advocate for that, just as an FYI.
I use loops.
They're useful.
They have a purpose.
COLTON OGDEN: All the time.
For loops, while loops.
NICK WONG: I use all of them.
It's like the weirdest-- the programmer's version of dabbling.
COLTON OGDEN: And they said, why is Nick so smart?
[INAUDIBLE] joke about there's no actual chat.
NICK WONG: We're just in our heads.
I appreciate it.
I think there's just a lot to learn.
Always lots and lots and lots to learn.
COLTON OGDEN: That's clear to me.
I'm excited for the [INAUDIBLE] for the hacking stuff.
That's stuff that I've never dived into.
NICK WONG: Nice, there we go.
COLTON OGDEN: I want to say dove in for some reason, which is not a word,
I don't think.
NICK WONG: No, but it sounds right.
It sounds like the thing you would say in English.
Who knows?
COLTON OGDEN: I've never dived into that.
So it'll be cool.
I think a lot of people would like that too.
NICK WONG: Yeah.
Yeah, I think that'd be awesome.
COLTON OGDEN: Let's go to your screen saver as the--
NICK WONG: Yeah, no, that's a great way to end.
Oh yeah, that closed because I killed it.
COLTON OGDEN: There we go.
NICK WONG: There we go.
COLTON OGDEN: So to bring it back to the color stuff, so which of those colors
can you differentiate?
NICK WONG: So I generally, looking at that, I see red, I see orange,
and I see blue.
I see a lighter version of blue from time to time
and lighter versions of those three colors.
But I don't really see anything in between.
So I would imagine there's also purple and pink, because I know
[? lolcat ?] generates those colors.
I would also imagine that there is some sort of green.
I don't notice it in here though.
COLTON OGDEN: There is a bit of green, yeah.
NICK WONG: OK.
So that would be a color that I don't end up actually seeing.
And I believe there's--
I see white, I think.
There are some colors that get light enough
that I think they become kind of white.
COLTON OGDEN: I think they're just cyan.
NICK WONG: Yeah, they might just be a really light blue.
And so I don't necessarily know which colors I'm missing.
But based on my guesses, those are the ones that would exist that I don't see.
Well, green is a good example.
COLTON OGDEN: Have you had that your whole life or is that a development
in your vision?
NICK WONG: Yeah, that's actually been there ever since I can remember.
Well, I guess I in first grade was notified about that.
And that was actually the first and only test I tried to cheat on.
It was a good lesson in why not to cheat, as just like an FYI.
I tried to cheat on this test.
Basically, the way it worked at our school was we were a very small school.
They handed out a bunch of cards.
They asked you to write down what you see in the cards.
And I was like, got it.
I can do that.
And then I looked in the cards and there's nothing there,
because I'm colorblind, so duh.
And so I looked over at the kid next to me and I was like, all right,
sailboat, seven, square.
Done.
Got it.
And just tried to look through the rest of cards, saw nothing.
And so then they came up to me and I thought they'd caught me.
I thought they'd noticed me cheating.
So I was like, oh man.
In first grade, you're what, eight or so?
My small brain was kind of just like, oh crap, I've gotten caught cheating.
And the teacher was like, yeah, so you're colorblind.
I was like, well, that's kind of a harsh punishment for cheating.
COLTON OGDEN: Yeah, they made you colorblind.
NICK WONG: Yeah.
I was like, Jesus, what the?
And then they were like, well, so none of those answers were remotely correct.
Because there were shapes and numbers and things.
All of mine were letters.
So I didn't write a single letter down.
I wrote a number, I wrote a shape, and another shape.
COLTON OGDEN: Well designed test too.
NICK WONG: Very well designed test.
Very easy test.
Simple and just beautifully well done.
And I was like, dang it.
Couldn't have gotten around that one.
And yeah, I couldn't cheat after that, because I was just
so traumatized by that.
I also then learned I was colorblind, which was cool.
Cool.
It was an interesting development.
I was kind of like, oh, nifty.
Because it doesn't really bother you that much.
COLTON OGDEN: Yeah, I can imagine it's probably not something that
impacts you too much.
Like this can here, do the red and green look similar to you?
NICK WONG: I actually didn't know there was red on there.
COLTON OGDEN: On the words, Canada Dry.
That's red.
What does it look like?
Does it look the same?
NICK WONG: It's green.
Yeah.
It's just the same as this.
COLTON OGDEN: Crazy.
NICK WONG: That's kind of cool.
Is any more red on there?
COLTON OGDEN: For anybody who doesn't know.
NICK WONG: Sorry, I have a soda.
COLTON OGDEN: Oh, the green screen.
NICK WONG: Oh, that's really funny.
COLTON OGDEN: Never mind.
We have a green can with red words on it.
NICK WONG: You guys are never gonna see.
Oh, well actually, I guess the letters are red, right?
So they would still show up on the green screen.
COLTON OGDEN: Yeah, they will.
NICK WONG: Yeah, so what you guys can see
and what I can see now on the screen must be red.
Huh.
That's really funny.
COLTON OGDEN: So actually this background is a yellow.
I don't know if you can tell that is yellow.
NICK WONG: I know it's, well, it looks greenish to me.
But OK, I can believe it.
COLTON OGDEN: That's interesting.
So anything that's red tinged is going to look the same as green for you.
NICK WONG: It tends to.
There are moments where I can distinguish.
Like that book, Colton has a book on his screen right now that is, I think,
red or pink.
And that one looks pretty clearly red and pink.
COLTON OGDEN: It's a very light red, yeah.
NICK WONG: Yeah.
But if they're kind of that same hue, they
seem to blend pretty easily for me.
COLTON OGDEN: So you can differentiate some shades of red.
NICK WONG: Yes.
Yeah, there are definitely some that I can pretty clearly get.
There's a lot that I can actually really get by just logic.
If I think about it for a second before I speak, then I know it's red.
Like I know what you're wearing right now is red,
but that's because I got one last year.
COLTON OGDEN: But this looks [INAUDIBLE]..
NICK WONG: It sometimes out of the corner of my eye looks pretty green.
COLTON OGDEN: Interesting.
That'd be so interesting to sort of see that.
I wonder if they-- do they make glasses that do that?
I think they do, right?
NICK WONG: I think so, yeah.
I think you can actually go online and see
what it would look like for a colorblind person versus a non-colorblind person,
but it's weird to me, because they don't look the same.
They don't look like how I see it, but I'd
imagine for someone who sees all the colors,
they do actually get pretty close.
COLTON OGDEN: That's such an interesting TIL.
That's very interesting to me.
NICK WONG: Yeah.
Cool.
You're actually probably colorblind a little bit too.
COLTON OGDEN: I might be, yeah.
My grandpa had a little bit of red green colorblind but not much.
My dad is not colorblind.
I don't know how to test if I am.
NICK WONG: It's pretty hard to notice.
COLTON OGDEN: Every test I've taken a test for that,
though, I've always been able to clearly see what they're testing for.
NICK WONG: OK, so you might actually not be.
COLTON OGDEN: Might be.
It'd be such a crazy thing to learn after 27 years of existing
and not knowing that.
But who knows?
I would love to find out if that's true.
Let's bring it-- actually we're on the screen.
This is a good place to sort of segue out.
Maybe we'll bring it to the number two shot, just because [INAUDIBLE]..
NICK WONG: Yeah, I think that's a nice shot.
We can get close.
COLTON OGDEN: It was an awesome stream.
So thank you very much for doing this.
NICK WONG: Thank you again for having me.
COLTON OGDEN: It's cool.
It always goes into the sort of hacking direction.
So we got hacked live.
NICK WONG: We seem to be, yeah, we've been hacked live, which is very cool.
I appreciate that.
COLTON OGDEN: YouTube title Nick gets hacked live on Twitch.
NICK WONG: That'd ruin my job here.
COLTON OGDEN: And we get the invisible can of Canada Dry here.
Very important.
NICK WONG: Yeah, I didn't even notice that it was on screen.
It's been on screen for most of-- oh, I guess it was right off screen.
COLTON OGDEN: It was over there.
Yeah.
It was a little bit off.
NICK WONG: Yeah, but if we turn it like this, it's pretty hard to see.
COLTON OGDEN: It's pretty interesting.
NICK WONG: Yeah, we have a lot of fun.
Thank you guys for, again, participating.
I love the livestream.
That's fantastic.
COLTON OGDEN: Yeah, it's so much fun.
The chat too.
Just all the directions we get to go.
So next week you'll be doing C.
NICK WONG: Yes, we'll be talking about low, low C.
COLTON OGDEN: But more of a deep dive into actually using it.
NICK WONG: We'll hop into C.
COLTON OGDEN: Pretty much assembly at that point.
NICK WONG: Yeah, we'll be pretty much one step above.
Just barely.
But we'll actually probably bring up some assembly and talk through it.
COLTON OGDEN: Doing some GDB.
NICK WONG: Yeah, GDB will be a couple of things.
COLTON OGDEN: That would be pretty cool, actually.
NICK WONG: Just some strace as well.
COLTON OGDEN: We'll talk about how that loop and go to are similar.
That's pretty cool, actually.
And I happen to know a little bit of assembly, which
is why we're talking about [INAUDIBLE].
Not as much as you.
NICK WONG: We might even build a buffer overflow example.
That actually, I think, would be cool.
[INAUDIBLE] off the top of our heads.
So we can do it.
COLTON OGDEN: You more than I do.
Yeah, this was awesome.
Thank you everybody who came today.
NICK WONG: Yeah, thank you guys.
COLTON OGDEN: Next week Nick will be here next Tuesday, same time.
NICK WONG: Yep, same time, same place.
COLTON OGDEN: And then after the winter break, we have a bunch of stuff.
NICK WONG: Oh, yeah, we'll have a whole docket of--
COLTON OGDEN: Toss us ideas, toss us ideas on either YouTube
or here or Facebook.
Tomorrow we have Andy [? Chen, ?] who's going to be talking about,
if somebody is new to the stream, has never streamed with us before, he'll
be talking about R. We'll talking about biostats,
and we'll be using a real world data set for us to look at
and to do some stuff with.
I've actually never used R before, so this will be a fun thing for me.
Getting all this information about all this stuff that I don't even know.
NICK WONG: Colton's learning all sorts of things.
COLTON OGDEN: This is all just about me learning new stuff.
Thank you everybody who came today.
Just making trade didn't miss any comments here.
It looks like everybody is talking about Canada Dry.
Do you still hate PHP is what they're asking.
NICK WONG: I do still hate PHP.
That I think will be forever.
I'll probably build something in Laravel over the winter break just to learn it,
but I don't like it.
COLTON OGDEN: Just to embrace [INAUDIBLE]..
NICK WONG: Just to embrace the things that I hate.
COLTON OGDEN: Thank you to mrdrcarbon for the follow.
That's a [INAUDIBLE] by the way.
But yeah, this was CS50 on Twitch.
I'm Colton Ogden.
This was Nick Wong.
This was AWS Web Server.
We talked about using it with WordPress.
Tune in tomorrow for R and biostats.
But until then, have a great rest of your evening.
And Nick, we'll see you next week.
NICK WONG: Yep.
So will Colton.
Well, he'll see you tomorrow.
COLTON OGDEN: [INAUDIBLE] But I'll see you tomorrow.
Have a good rest of your night.
Goodbye.
NICK WONG: Awesome.
See you guys.