[MUSIC PLAYING] DAVID MALAN: Welcome everyone to web
programming with Python and JavaScript. My name is David Malan. BRIAN YU: I'm Brian. DAVID MALAN: And today we're going to
give you a quick overview of the course and then dive right into
the course's material. So this is meant to be a class taken
after a course like CS50, which is the colleges and
the extension schools introduction to computer science. But even if you haven't taken
that class anything approximating that is certainly fine. We assume only prior programming
experience in some language. And what we'll then do
is assuming you know some of the basic constructs of most
any procedural or imperative language, we'll fill in the blanks along the way
both with Python and with JavaScript. Neither is actually assumed. And what we'll do over the
course of the next several weeks is first dive into Git. So you might know Git if you've
used it before as a version control software, whereby you can maintain
multiple versions of your software. But these days it's actually
used for much more than that. People will use it not only
for versioning their code and for collaborating
with others, but also for deploying their code
from their local machines to some staging server to some testing
server and ultimately to production. So it's actually become
quite an integral tool when it comes to actually
deploying your code to the cloud, so to speak these days. Thereafter, we'll transition to HTML
and CSS, with which you might already be familiar, but we're focused on
some of the more modern perhaps some of the more advanced features
of both of these languages HTML5, specifically the
latest incarnation of that, as well as CSS and various
selectors that you may or may not have used before. But also toolchain, something called
SAS that allows you to programmatically generate and maintain more readily,
more complicated style sheets especially as your web apps become
themselves more complicated. We'll then introduce
Flask, which is going to be a very popular
framework for making web based applications using Python. And it's generally
considered a micro framework, which means there's not all
that much complexity to it. It doesn't try to do too much. It really just tries to solve some
very common problems so that most of your effort when
writing a web app with it isn't focused on how do I
learn Flask and how do I build with this
architecture, but rather how do you implement your ideas
without reinventing the wheel? And so you'll get that out of
a micro framework like this. We'll then introduce a bit of
SQL, or structured query language with which you can query databases
and store your actual data. And we'll look at perhaps
more complex queries than you've seen or used in the past. We'll talk about the idea of API, or
application programming interfaces. These can be both your own that you
build for your own applications to use, or as you may have used them
already third party APIs. Data feeds and functional behavior that
you can actually access over the web or from some other server that some
other company or person has actually made available to you to make
your applications all the more interactive or featureful. And then we'll introduce JavaScript,
which you might have used or tinkered with before. We'll introduce the very
latest something known as ES6 or ECMAScript 6, which adds a
number of features many of which, or most of which are
supported by today's browsers. But we'll also talk about
some of the pitfalls when you try to use some of the
latest and greatest features and what it might mean to ensure as
through transpiling or other techniques that your code will indeed work on any
number of mobile devices and desktops and laptops these days. And we'll also talk about front
ends, the idea of actually building a front end user interface using
JavaScript talking about techniques like Ajax or SPAs single
page applications these days, particularly modern paradigms with
which folks are implementing today's web applications. Also looking at things like
graphics and animation as it can be implemented in JavaScript
and inside of a browser. And then we'll look at a
heavier weight framework something known as Django, which is
similar in spirit at least at first to something like Flask. Just makes it easier to get
going building web applications, but comes with so many more features. The proverbial kitchen sink. So when you get a little
tired in life of implementing an administrative interface to your
web application, or a log in interface for your application, or any
number of things that a lot of us probably use in various tools. You can start to lean on these
larger scale frameworks that just come with many more features. And as such, you might have to
comfort of it more to its conventions, but you'll end up writing a lot
less code than you would otherwise. So we'll sort of graduate
to that level of framework. And then we'll talk about
a world that's generally known these days as DevOps, development
and operations kind of united in one, in the context of testing like
making sure your code actually works and how you can think about that and
how you can actually do that when writing your code. And then CICD continuous integration
and continuous development, which is just a fancy way of
saying setting yourself up for success with the right tools
and with the right scripts, the right environments so that when you
run a command on your laptop or desktop the code actually goes somewhere
and it goes not only into a code repository to be saved and versioned
and shared with other people, but you can test it automatically
and continuously so to speak. And you can even deploy it to
the cloud simply by having set up some of those steps in advance. So if you're already in the habit now
of deploying your applications by kind of dragging and dropping them to an
FTP server or using some web interface or copying things, all of this now
can be automated in very robust ways especially that are conducive
to collaboration with others. And then toward the
end of the term we'll talk about some higher
level issues that will inform how you go about
building web applications after the scope of the class. Scalability. So topics like DNS and
load balancing and how you think about anticipating
that 101st user that might not fit on just one server. And so if you now have
to have your app on two or three or more different
servers, how do you have these servers
talking to one another and how do you share data among them? What's going to get easy? What's going to get hard as you
scale to more and more users? And then throughout the semester,
we'll talk about topics of security. What you want to do in
terms of best practices to avoid getting exploited
in some way, but we'll also culminate that discussion in
a focus on security at the end so that when you go
out into the real world or back into the real world
after the courses lessons, you actually are mindful of
especially in the languages and tools that we'll use throughout
the semester of what you should be particularly mindful of. And then as punctuating the whole
semester will be a number of projects. So four assigned projects where we
prescribe the specifications of some app that we'd like you to build with
the whole course's staff and support structure. And then one final project that will
culminate this semester, whereby you'll be invited to design and
implement your own tool that's a genuine personal or
professional interest to you that somehow draws
upon the course's lessons. And let me pause there and see before we
forge ahead if there are any questions. Anything else? Yeah. AUDIENCE: So HTML, CSS,
JavaScript-- suppose I don't have any
experience on those things? DAVID MALAN: Good question. And so what then? So if you don't have any experience
in some of the alphabet soup that we put up already
like HTML and CSS, JavaScript and/or Python,
for the most part that's OK. I would say that they'll be a
bit of a more of a learning curve early on for you. But we will take care to
provide students like you with any number of
resources supplementary so you know where to fill in any gaps. And we'll also introduce these
topics in the class itself. So all of the topics that we
just gave an overview of we'll introduce and dive into in the class. It will certainly be advantageous
if you've seen them before, but each of the projects and by way
of the courses sections and lectures where you have all the
material you need to succeed, even if most of these
topics are brand new. So not to worry. Other questions? Yeah. AUDIENCE: [INAUDIBLE] purchase
any of the software [INAUDIBLE]?? DAVID MALAN: No need to purchase
any software whatsoever. All of the tools that we'll
use, all of the libraries, frameworks, APIs are freely available
now and after the class as well. Other questions? No. All right. So first on the agenda
today is version control and Gits in particular,
a tool that you'll use not only to version your
code and share your code, but also ultimately deploy it. So without further ado allow me
to turn things over to Brian. BRIAN YU: Thank you very much. All right. So the first topic that we're going to
be talking about today as we approach the world of web programming
and web development is thinking about when
we're designing projects, how do we keep track of
different versions of our code? How do we collaborate with other people? How do we make sure that if we
make a change and that change doesn't work that we have an easy way
to go back to older versions of our code and make sure that we have
access to those as well? And so all of that falls
under the larger umbrella of what's called version control. And out there, there are some number
of different version control software that people are using on a day to day
basis, but one of the most popular is a piece of software called
Git, which is a version control tool that we're going to
be using in this class and that people often use in industry
in order to help maintain and manage different versions of their code in
order to keep track of their projects and make sure that
everything is organized and that they're able to
effectively collaborate with other people along the way. So we'll take a moment to step back
and talk about the different things that Git does for you at a high level. And then we'll dive in and
look at the actual commands that you would use in order to
run Git, understand how it works and actually make use of it. So the first thing that
Git's good at doing is keeping track of different
changes to your code so that if you're making
changes, you don't only have access to the latest
version of your code, but if you start out
with a particular file and then you make changes
and add another line to it, you remove a line to
it later you can keep track of all of those different
versions of those files such that you know the
history of your project and how it's developed
from the beginning all the way up until where you are now. So that's one thing Git's
particularly good at. One other thing the version
control is very useful for is synchronizing code
between different people. Very often in the
modern world you're not the only person working alone on your
projects independently, but rather you and one or more other
people are working together collaboratively trying to work on
a project together and making sure that you and the people you're working
with stay in sync in terms of your code is often a challenging task. And what Git, another
version control softwares like it do is help to make that
process a little bit easier. So you can imagine that maybe we're
storing a version of your code up in some remote server somewhere. And Git what will allow
you to do is make sure that you and someone you're working
with both have access to that same code. And when you both make independent
different changes to that code there's an easy way via which
Git can merge those changes back together so that there's
a central version that has all of the changes to which both
of you will then have access to. So synchronizing code
between different people and making sure that everyone
has access to that code base is something that is also useful
with regards to version control. In addition, Git is also very
good at letting you test your code without losing your original copy. So if you have a working program
or a working web application and you want to make some modifications
to it in order to add a new feature but you're worried that
adding that new feature might break some prior feature that's
already existing within your web application, Git's very good at
letting you test your new changes and experiment with your code without
losing track of that original. And only once you're happy
with the original code that you have can you then merge
your new changes in with the existing changes so that you never lose a
working copy of your web application And finally, one last
thing to Git is very good at is reverting back to
old versions of your code. So you've been working
on your project, you've made some number of
modifications or edits, and you realize that your most recent
version of your program doesn't work, you want to go back to some
previous version of your code. Git is also very good at
allowing you to revert back to old versions of your code. And we'll see examples of
all of that in just a moment. So that's sort of the high
level overview of what Git is and how it works. And in this course we'll also be
using another service known as GitHub. And GitHub is just a website
whose purpose in life is to store Git repositories
on the internet. It's to give you and people
all around the world access to Git repositories
on the internet, such that you can look at repositories
that other people have created and contribute to them
or use them, and such that you can work on your own
projects, push them to GitHub so that your collaborators or other people
on the internet can also see and use and work on those projects as well. And so one of the first things you'll
do in this course is go to GitHub. And if you don't already have
an account already you'll create a free GitHub account. And once you do, I'll show you
what GitHub's interface looks like. We'll just go to get github.com. And so this is what github.com
might look like once you log in. And what we'll do right
here is we're going to first create a GitHub repository. And repository is just a
fancy word for the place where we are going to keep track of
all of your code and all of the changes to your code. Think of it as like a
central storage place where we're going to store your project. So in the upper right of GitHub's
screen we have the plus button and we can go to the new repository. And this takes us to the page where
we can create a brand new repository. In this case, I'm going to name
the repository Lecture Zero. And I'll go ahead and just
click Create Repository. And that creates a new repository
for me that stored on GitHub. Right now it's not on my computer
yet, but we'll see in a moment how we can take this repository which
is right now empty but on the internet and download a copy of
it to our own computer. And so that's where we start to
introduce some of the command line interface of Git and the commands
that you might run in order to use it. So after you've installed Git, one of
the first commands you'll want to learn is git clone. And the git clone command
has just one purpose. What it does is it takes a
repository stored somewhere else like on some server like GitHub. And what happens is that when
you run git clone followed by the URL of that GitHub repository,
that remote version of your code will be downloaded onto
your computer so that you have a copy of the repository
on your own computer. So I'll show you what
that looks like now. We'll head back over to
the GitHub repository that we just created over here. And what you'll notice is that
GitHub provides me with this URL. This is the URL of
this GitHub repository. So if I go ahead and
copy that to my clipboard and open up a terminal window,
for example, what I can do is type git clone followed by that
URL, just pasting it right in there. When I press Return it already
exists because I already created it. So I'll go ahead and remove
the old version of that. Sorry about that. And we'll do git clone
pasting in that repository. And it's giving me a warning. Warning you appear to have
cloned an empty repository, which is to be expected because the repository
that I just created was in fact empty. And I can CD, CD for
change directory, if you're unfamiliar with the
command line interface into that Lecture Zero directory. And now I'm inside of that
Lecture Zero directory. Which if I take LS for
list or list all files in that directory nothing shows up. So this directory is currently empty. So let's go ahead and fix that. Let's add some code to this repository. I can use the touch
command where touch is just a command that if you're unfamiliar with
it can help to create a brand new file. And I'll create a new
file called hello.html. And I'll open up that
file using a text editor. In this class you can use
whatever text editor you wish. But common ones include
Adam which I'm using here, but also Sublime and VS
Code and many others. And I'll just go ahead and create
here a simple HTML web page. No worries if you
haven't seen HTML before and this looks unfamiliar to you. Later on during tonight's
lecture we'll dive in more depth into what all this
code means if you haven't seen HTML before to understand what's actually
happening when I create this web page. But in essence, what I'm
going to do is create a website whose title is my web page and
whose contents just say hello, world. All right. So there I have it, a
simple HTML web page. Again, not to worry if you haven't
seen this type of thing before. But now I want to take
that code and save it. I want to make a what's called
a commit to my repository to say these are changes that I want
to save because one day I might want to refer back to them, for instance. And so the next thing we'll
need to know is git add. And the git add command
basically means we're going to take some number of files,
one or more files that we've changed and tell Git that these are files that
we want to include the next time we make a commit, to the
next time that we save a version or a snapshot
of the current repository. So for instance, if I
say git add followed by some file name, what that's going
to do is tell Git to track that file. That this file is a file that
I want to track the next time that I save a copy of the repository. So what does that actually look like? If I do ls right now, again, list all
the files in the current directory, you'll see that I have hello.html,
that file that I just created. And what I'll do now is
I'll say git add hello.html. To mean, I want to
take hello.html, and I want to include that the next time
I save a version of this repository. Nothing appears to have
happened, but that's OK I have now added hello.html
as a file that I want to track the next time I make a save. So what does that process look like? That comes in the form of a
command called git commit. Commit it just fancy way of saying
take a snapshot of the repository in the current moment and save it. And so how that would work is I would
say git commit followed by a flag dash m, m for message, and
then in quotation marks some English message describing what
it is that I've changed in this commit, describing what it is that's
happened in this change that makes it different from
previous versions of the code. This is useful because
as you begin working on a project that has dozens or
hundreds or even thousands of commits, later on you can refer back
to this list of messages that you yourself have written
describing what happened in any successive change, so that you
know where to look if you're trying to find a particular commit, or
a particular change that you made to your code at any particular time. So when you run git commit dash m
followed by a short description of what you've done, what that'll do is have
Git save a new version or a new snapshot of your repository in
that moment keeping track of all of your old versions as well. So that's git commit. And we'll take a look at that now. I'll do git commit dash m for message. And the message that I want to include
in this case is just added hello.html. That's what I did. I'll press Return. And what you'll notice is that Git
provides me some helpful information about what it is that I just did. It said one file changed at nine
insertions because I added a new file and that file had nine lines in it. And so now Git has kept track
of the fact that in this commit, in this save I have added
this hello.html file that has the contents that you
just saw a moment ago. So that's me making a save
to the contents of that file. Next command that's often helpful
to know and to be familiar with is git status. Git status is a simple command that
effectively just tells you what's currently going on in your repository. If you forget whether you've made new
commits since the last time you checked from GitHub, if you forget whether
you've made new changes that you haven't committed yet, git status is
an easy way to just run git status and see the current status of what's
going on inside of your repository. So let's take a look at the
code that we've been working on. We'll go ahead and run git status on it. And what we see is on branch master-- don't worry about branches too much. We'll dive into more depth
about that next week. But importantly, we'll see that
we are based on origin master and right now it says we
have nothing to commit. So git status effectively tells us
the current status of the repository, tells us what's going on with our
repository at any given moment. So next up we've made these
changes to our repository. The next question is, now how do we
send those changes back to GitHub? GitHub's keeping track of our
repository on the internet and we've made changes to the repository
adding hello.html on our computer locally, but that isn't
yet reflected on GitHub. If we were to check the GitHub
page for this repository it would still currently be empty. So how do we then send
those changes to GitHub? That's called a push, where we push
our code from our local computer to the repository that's stored
somewhere on the internet. And so when we run git push,
that causes those changes, whatever changes that we've
made to our code locally to be pushed to the remote server
so that GitHub is now able to keep track of those changes that we've made. So that is git push. And I'll go ahead and try
and show you that now. If I try and run git push it pushes
those changes to the GitHub repository. And now if I go back to here, this
GitHub page for student50/lecturezero, which is the repository page on
GitHub, and refresh that page you'll notice that now
there's contents here. Now I have an hello.html file that's
located inside this repository. And if I click on it then you can see
the contents of that hello.html file that is now stored on GitHub as well. So I've now taken my changes that
were just on my computer before and I'll push them so that they are on
the internet as well for people to see. So that's git push. Next up is sort of the inverse of that. Git pull. What if someone else has been
working on your repository, has made changes to it,
and pushed those to GitHub? And now you want to download the
latest version of that repository. You want to download the latest
changes down onto your computer locally to take a look at it. How would you go about doing that? That's by a different
command called git pull. When you run git pull, if
there are other changes that have happened on the remote server,
notice that here locally I've made one change, but someone
else on GitHub for instance has pushed some second change
that's been made to the code. If I run git pull, that causes
any of the latest changes that have been made on the remote server
to be downloaded onto my own computer so that I now have a working copy
of the entire history of what's been going on with my project so far. So that's git pull. And we'll show you a
quick example of that now. If I go back into the GitHub
interface there is sort of two ways to make changes to the code
that you see here on GitHub. Either I can change that code on
my own and my code on my computer, or actually GitHub's web interface
actually has a button here that lets me edit this code. So let's say I wanted
to add another line that says hello, again, for instance,
that I wanted to add to this file, I can scroll down and go ahead
and commit those changes. Again, commit is just a fancy way
of saying save or take a snapshot. And when I commit those
changes what I see is that the contents of my web
page on GitHub show hello, world and also hello again. But if I were to check my
computer I just have hello, world. Just the one sentence. That change has been made on GitHub. It hasn't yet been reflected in
my version of the code that's stored on my computer. So what can I do now? I can run git pull to say pull down any
of those latest changes from GitHub. I press Return. And notice that it says hello.html. Two changes, one plus and one minus. One insertion, one deletion. Git's not quite smart enough to
know that I actually took a line and changed it. As far as Git is concerned
I removed that old line that just said hello, world,
and added a new line that said hello, world, and hello again. So if I check my code now going back
here, I see that it's now updated. My local version on my computer now
says hello, world, and hello again because that was the change that I
had just pulled down from GitHub. And so via pushing and pulling
code can you and other people that you're working with
collaborate together on a repository and make sure that you're keeping
track of any changes that you make. But what can go wrong here? What might happen and cause things
to not seem as simple as they are? Well, what if I decided
to make a change here? Hello a third time. So I make that change and I
decide to OK, git add hello.html. I want to track that. And git commit, add a third line. So now I've added that third line to
the contents of my hello.html file. But what if someone else on the internet
who has access to my GitHub repository decides to edit it differently and
decides to say hello, hello, hello, and save those changes
by committing them? Now the online version says hello,
world, hello again, hello, hello, hello, but in my local
version of the code it says hello, world, hello
again, hello a third time. And if I try now to pull
this code from GitHub it's not going to be as simple as it was
last time of just updating the changes because Git doesn't quite know
which change I actually want. Here I've added a sentence online
that's a different sentence. So we're going to need some way
to reconcile those two things. And so that's where we introduce
the concept of merge conflicts. Git will try whenever it
can to automatically take any changes that have been made and
combine them together automatically for you without you needing to
worry about what's going on. But in some cases, if
you and another person have both made changes to the
same lines of the same files you may run into a merge
conflict, which is what happens when you try and run git pull. But what happens is that
there's some sort of conflict. The pull can't happen. And so what you'll see is a message
that says automatic merge failed. You need to fix the conflicts
and then commit the results. So what does that look like? Well, what will happen is that if you
open up the file with the conflict you'll see something that
looks a little bit like this. You'll see a file with a
bunch of less than signs and then HEAD, some lines and
then equals, equals, equals, some more lines and then this sort
of random long sequence of numbers and letters. It might seem a little
bit arcane at the moment, but we'll break down
what this actually means. So when you look at a
file like this, which results whenever there is a
merge conflict produced by Git, there are a couple of
things to keep in mind. One is that anything between HEAD and
all the equal signs are your changes. The things that you did on your computer
before you tried to do the pull. Anything between these
equal signs and the greater than signs here, these
are the remote changes. The changes from GitHub that you
were trying to pull down that were somehow in conflict. That these two lines couldn't
automatically be merged together. And this long sequence of numbers and
letters is the conflicting commit. Whenever you make a commit in Git,
Git represents that using a long hash. Just a long sequence
of numbers and letters so that you can uniquely
identify one commit out of a series in a history of commits. And this long sequence
of numbers and letters is just the name of
that conflicting commit. It is that commit hash of the
one that caused the conflict. So what do you do in
a situation like this? All you need to do is remove
all of the lines you don't want. Remove all of those less than,
equal than, greater than lines and also remove whichever
part of the code you didn't want leaving only the version
that you want to be merged together, and then get rid of any
that extra white space and then you can commit the result. So I'll show you what that looks like
if we go back over to the computer here. Recall again, that locally we
had three different sentences. And online we had three
different sentences, but the third sentence differed. So now if I try and run a
git pull what you'll notice is that we see exactly this. We tried to automerge hello.html,
but there was a conflict. There was a merge
conflict in hello.html. The automatic merge failed. We need to fix the conflicts
and then commit the results. So if I take a look at
hello.html, my text editor Adam is automatically highlighting
things in certain colors for me. But what you'll notice is you see
this less than, less than head, and then this version, which was
my version, hello a third time. And then this version down here,
which is the version from online. Git doesn't know which one
I want, so I need to pick. And I'll just say you know what? Let's use the version that I had. So I'll go ahead and get rid
of all of these extra lines so that I'm left with
just the version that I want, the one that says hello, world,
hello again, hello a third time. And if I then commit
those changes, now Git knows because I have
told it this is how I want you to resolve the merge conflict. Now Git is aware of how to go about
merging the two different versions of that repository together
in order to come up with one version that is
going to work for everyone. So that's the process of
resolving merge conflicts. It can seem a bit complicated at first,
but as you start to deal with them you'll start to get a sense for
where the different changes are and how to go about resolving them. And it's something you may run into
as you go about the process of working on your project. A couple other useful commands
that are useful to know. One is git log. What git log does is effectively
just show you a history of all of the commits that you've made. If you run git log while you're
inside of a Git repository, you'll see a list of all the
different commits that have been made. Notice again that you'll see each commit
is marked by a unique commit hash. Just a sequence of numbers and
letters describing that commit. You'll see who made the commit,
when that commit was made, and also a description
based on that message that you provide whenever you make
a commit of what it is that happened in that commit so that you
can see the history of what's been going on in your repository. So that's git log. And then one other command that's
useful to know is git reset. So we talked about before
if you've made some changes, realize that you messed
up and you want to go back to the way things were before,
you can run one of these commands if you do git reset --hard, followed
by a commit hash like the numbers and letters that we saw before. That will reset your
whole repository back to that version, whichever version
was marked by that commit hash. And likewise, if you run something
like git rest --hard origin/master, origin/master is a fancy way of saying
the version of the repository that was the origin of this
repository where I got it from. In other words, if I cloned my
repository from GitHub then running git reset origin master is going to
reset the contents to my repository back to the version that was
previously on GitHub so that then I am able to see whatever it was originally. So in this case, if I
run git reset --hard followed by the commit hash of
some previous version of the code, what that's going to do is reset
that code back to that older version, and now my repository is
back to a previous version such that I can correct my mistakes and
then continue working appropriately. And so we'll show a
quick example of that. So first of all, commit my changes. So just now I fixed the merge
conflict and run a quick git status. Oh. I need to add the files
before I commit them. So that's a good lesson to be learned. The way Git effectively
works is that we first need to add the files to what's
called a staging area or an index. Just telling it these are files that
I want to track in the next time that I make a commit and
then you commit after that. So if I git add hello.html and then
git commit, fix the merge conflicts, that will resolve the issue. And if you're looking to simplify
these two commands into one simpler command know that you can
also do a command like git commit -am, where the a stands for add to
both add files to the staging area and commit them all
together in one command. So go ahead and press Return there. And now if I run a command
like git log, what you'll see is a history of all the different
commits that I've made now. Here was me fixing the merge commits,
here was when I updated HTML online, here was when I added a
third line to the repository. So I see the history
of all of the different commits that I've made
to this repository. And let's say I wanted to reset
back to an older one of these. I wanted to reset back to this original
one where I first added hello.HTML. I can take this commit
hash, the commit hash of when I first made
that change, or even just the first couple characters
of the commit hash is usually sufficient to
be able to identify it. And I can run a command like
git reset --hard followed by that commit hash by
pasting it in there. And now I've reset the head, reset
where I am in this repository back to that older version. And now if I check the contents of
hello.html, it just says hello, world. Back to that very first
version of the HTML file that I created way back when
I first created the repository. Yes, so Git keeps track of
all the different snapshots. In fact, if you run a
command like git rest log, just a log of all of
the different references that Git has kept track of you
can see all the different changes that are still there. So they're accessible, but
they're just not present in the current version of the
repository as you see it just there. Yeah. A question over there. AUDIENCE: Once you run the [INAUDIBLE]
what version of the file [INAUDIBLE]?? BRIAN YU: GitHub was untouched. So the question was, what
happens to the remote repository, the repository on GitHub when
I reset something locally? And the answer is that any
changes I make to my computer, to my version of the
repository on my computer never affect what's going on
online unless I try to push those changes to GitHub for instance. So if I really screw things up, mess
things up on my computer completely GitHub's version is still going
to be the way it was before. And if I really wanted to I
could just download a new copy by cloning the old version from GitHub. If I check now, even though I
reset my version on my computer it still has hello, world, hello,
again, hello, hello, hello, because I have never pushed any
new changes to GitHub after that to tell it to make any additional
changes after this point that it knows about. So GitHub doesn't know about any of
those additional changes just yet. Question back there. AUDIENCE: Yeah. So does Windows or a Mac OS [INAUDIBLE]
built into it so [INAUDIBLE]?? BRIAN YU: Great question. The question is, is Git built
into Windows and Mac OS, or is there something
special you have to do? In many cases, you will
need to install Git. When we release project zero you'll find
that in the project zero instructions, there are instructions for how to
get set up with a GitHub account and how to install
Git onto your computer and configure it correctly so
that it can talk to GitHub. But yes, typically you'll
need to install it. It's free software that you
can install on your machine and it will prove helpful
as you go about starting to work on version control. Yeah. AUDIENCE: Do merge
conflicts only happen if you were trying to pull from the
repository and it's different, or is there any situation where
I'd be pushing changes and not running to a merge conflict? I don't know if that makes sense. BRIAN YU: Great question. So the question is, is
pulling the only time that you might run into merge conflicts? And the answer is no. It's the only one we've seen so far. But any time you are trying to take
two different versions of the code and combine them, there is a possibility
that you'll run into a merge conflict. And so later on in this
course, we'll take a look at additional features
of Git like branching, where you can keep track of multiple
different versions of your repository at once so that you have your
current version of your repository, but you also have a different
branch on which you're working on some new feature
and maybe a different branch where you're working
on some other feature. And any time you want to merge
two branches together to say, OK, this feature is done. I want to bring it back into the
master branch or the official version of the code, so to speak. Then there's possibilities
for merge conflicts there. So pulling is one instance in
which conflicts can happen, but certainly not the only instance
in which those conflicts can happen. Yeah. One more question. AUDIENCE: Let's say I entered
in multiple files [INAUDIBLE] should I run Git [INAUDIBLE]? BRIAN YU: Great question. So the question is, all
right, so far in this example we've only ever been dealing
with one file, hello.html. What happens if I have multiple
files that I'm working on? As it might happen if I'm
working on a larger project, how do I deal with that? Well, the answer is that you
need to add any of the files that you want saved in that commit. And so you could you git add file one,
git add file two, git add file three. You can also do git add star, where
a star just means add everything. And that will add all of the
files that you have unsaved. And the advantage of
doing things file by file is if you've edited three
files, but one of those files is unfinished but the
other two are ready to go, you can just add those two
files and commit those changes. You only ever need to commit one
after you add multiple files to say, I want to save the changes
I made to these two files, but the changes I made to the
third file aren't quite done yet and I didn't want to
add or commit those. And so separating the add and commits
step gives you that kind of control over your repository to
say, these are the files that I want to keep track of in the next
change that I make to the repository. So that was effectively a
short introduction to Git and we'll dive into
more detail about Git later on as we progress
throughout the course. But we'll go ahead and take a
short, maybe five minute break now. And when we come back, we'll
start talking about the HTML code that we actually saw before. Diving into HTML, what it is,
how it works, and also CSS, how we might style our
web pages to make them look a little more
aesthetically pleasing. So all that when we come back. All right. Welcome back. So now that we've taken
a look at version control and how we might go about
versioning our project and keeping track of different
versions of our project as we go along, we'll dive right now into
the actual web programming aspect of the course starting by just
taking a look at HTML, or HyperText Markup Language. This is a language via which we're going
to be laying out the structure of a web page such that when a user
opens up in their web browser, their web browser, whether it's Safari
or Chrome or Firefox or some other knows how to understand and interpret
that HTML and display it as a web page to the user. So we'll take a look
at a simple example. In fact, we'll just take
a look at hello.html. Very similar to what we've just been
working on with that Git repository. And we'll now break this
down and sort of get a feel for what's going on
in terms of what we see here and how this is going to translate
when a web browser reads code like this and tries to interpret it as a web page. So up here on line one, we see this sort
of funky angled bracket !DOCTYPE HTML. This first line just goes mean
something along the lines of HTML has come in a number
of different versions. It's had a bunch of different
standards where people specify, here's what's included in this version
of HTML and this new version of HTML. And the latest version
of HTML is called HTML5. And the way that a
web browser knows when it gets a web page, which
version of HTML it's using is by taking a look at that first line. So that first line
saying doctype HTML is our way of telling the web browser that
this web page is written using HTML5. So now let's take a look at
the rest of this web page. And what you'll notice
throughout this web page are a whole bunch of what
are called HTML tags. Those are these keywords that
begin with an angled bracket and end with an angled bracket. Right here we see the HTML tag. And all that tag means is that angled
bracket HTML ending angle bracket means this is the start of the
HTML content of the website. And this will go all the way until here
on line nine where we see a tag that is angled bracket /HTML, where that slash
just means this is the end of the tag. So what line two and
line nine sort of tell us here is that this is the start of the
HTML content of our web page and line nine here is the end of the
HTML content of our website. And everything in between is the
actual contents of that website. And if you take a look we've
divided that content to the website into two parts. Up here on line three we've
started the head of the website. Angled bracket head angled bracket. That's the start of the head tag. The head of the website is usually
used for a metadata, information about the page that
doesn't really appear in the main contents of
the page, but is used to give the browser important
information about how to go about displaying that page or
other important information about it. In this case, you see
we have a title tag here where the title in between
the start of the title tag and the end of the title tag
we've included text, my web page. And so as you might guess
what this line four is saying, is we're going to have a web page
whose title is just my web page! And that's going to be
the title of the web page. And that's information
that's all included in the header of our HTML page. In addition to that, on line six here
we see the beginning of the body tag and the end body tag is on line eight. And in the body of the website very
simply we just say, hello, world. And that's it. So what we've described
here in nine lines is an HTML5 website
that's got two parts. It's got a header whose
title is my web page. That's going to be
the title of the page. And we have a body that
just says hello, world. And so now if we actually were to open
up a web page like this by saying, open hello.html, or just opening
it in a web browser like Chrome, you'll see that what we get is a web
page that just says hello, world. And if you notice up there at the top
it says that the title of the page is my web page. So as you might guess, Chrome is reading
that HTML code that we just wrote. And it's interpreting it trying
to figure out what means what. And it knows where to
put different tags, it knows that the title tag is going to
go up here in the title part of my web page, and it knows that
whatever is in the body is going to go in the main area, the
main body of my web page in general. So if I changed the
title to something else or change the body to something
else, it would have reflected here. Of course, this is a very simple
website, but it shows you the basics. How we use HTML tags to define
the structure of our page, and then using those
tags we can create pages that are rendered nicely when
a web browser sees that HTML and tries to do something with it. Questions about that so far? Yeah. AUDIENCE: Is the indentation
style or functional? BRIAN YU: Great question. So the question is, is the indentation
that we saw in that code earlier style, or is it functional? The answer is that it's just style. Ultimately Chrome and other
web browsers don't really care about whether your
head tags are indented and your title tags are
indented further than that. But it can often be easy when
another human is reading your code, or even when you're reading
your own code to be able to say, OK, here's the head tag and
just look straight down here is the end of that head tag. And so very frequently
you'll see a paradigm like that will indent
anything inside of the header, but the header itself
will be aligned nicely. And oftentimes, you'll see things
that when a tag only contains one line within it, we'll just put the whole
thing on the same line where we have title, my web page, and then /title. But we could have just as easily if we
had one or two indented the my web page and put the /title on
its own line as well. And that would render identically. If we go back into Chrome,
refresh that page, no changes. Chrome doesn't care about that
difference in indentation. Great question. Other questions about this first
HTML web page that we've created? All right. So that was sort of the introduction
to just a basic HTML page, but there's a lot more
that we can do with HTML by taking advantage of other tags. So far we've seen the HTML team tag
and the head tag and the body tag. And right now all that's able to
do for us is render some text. And we can type more text and
it would appear there as well. But let's take a look at how we
might render headings for text because if we have text, maybe we want
a heading to go at the top of our page and maybe subheadings to go beneath it. And so we'll open up headings.html
And what headings.html is going to do is show you a couple of other tags. So HTML has many, many
built in tags, more than we're going to talk
about today, but we'll just introduce some of the common ones so you
can get a sense for how these tags work and the general feel of them. And these are ones that will come
up quite frequently as you go about writing web programs using HTML. And what you see here is in H1 tag
located inside the body, where H just stands for heading, like a big
headline at the top of the page, and one is a number that
stands for its size. So HTML has six built in heading
tags inside that understand. h1 is the largest, h6 is the smallest,
and two, three, four, and five, as you might guess fall
somewhere in between. So this is the largest headline. Starts at h1, ends with the /h1. Notice this continual pattern of angled
bracket name of the tag, like h1, and then the /h1 to mean
this is the end of the tag. This is the end of that head end. So if we open up this page now by going
to not hello.html, but headings.html, what we'll see is this
is what gets rendered. We have this is the largest headline. Again, this was our h1, this
was our h2, all the way down to h6 at the bottom which is
a relatively small headline. And one feature of Chrome
and most web browsers nowadays is that if I actually
want to take a look at any web page and see what HTML actually made it
up, I can Control click on the page and go to View Page Source for instance. And when I go to View
Page Source, what I get is Chrome showing me the actual contents
of the page that it had just rendered. And this can often be
helpful once you start working on larger web
applications trying to understand what's actually getting rendered. In this case, what we
see here is exactly the same thing as what we loaded
before because Chrome is just showing us the HTML contents
of the page that it then renders to look something like this. So it's the browser that takes the HTML,
understands the tags and what they do, and renders it to look a
little bit nicer like that. So what are some other common
HTML tags that we might want? So now we have the ability to
include text in our web pages, we have the ability to include headings. One other thing that we
might naturally want to do is maybe create a list
of different items where frequently we'll want to have
a bulleted list on our web page or a numbered list on our web
page or some other type of list. And so we'll take a look at
possible ways we can do that. And we'll see here in lists.html that
I have two different examples of lists for you or take a look at. So the start of our
web page is the same. We have doctype.html. This is the start of the
HTML content of our page, this is the start of the HTML header. Here's our title. Then in our body is where
things get interesting. So here where I said
an unordered list, I have this tag ul, where ul as you
might guess stands for unordered list. And the ul element goes from here all
the way down to line 12 over here. And inside of it I have three li's,
where li stands for list item. This is an item inside
of this unordered list. Here's one item, another
item, and yet another item. And so these are three list items
that are inside of the unordered list. And as you'll start to notice
the HTML tags very frequently nest within each other. We have an li which is inside of
a ul which is inside of the body. And this natural way of nesting
HTML tags within each other is a nice way of being
able to add and make your website more complex by nesting
more and more of these different HTML tags together in order to create the
end product that you ultimately want. And so that is a ul, an unordered list. Lower down on the page we also see an
ordered list, which as you might guess is labeled ol, ol for ordered list. And that one is going to be numbered. We have the first item, second
item, and the third item. And now if I were to open that up
by opening up list.html, what we see is we have an unordered list that just
shows up as a sequence of bullet points and an ordered list that shows
up as a sequence of numbers. Note that nowhere in my HTML that
I actually say, OK, this is one dot first item, or two dots
second item, three dot third item. The web browser knows to
render it as an ordered list and it puts the numbers
there for me, such that if I try and insert
another item here I don't need to go back and
renumber the bullet points. The web browser will
take care of noticing that this is the third list item. This is now going to actually
be the fourth list item. And when I render that
page it's going to show me here's the first item and the second
item, another item, the third item, and the fourth item in
the list there as well. So the web browser is pretty
smart about these things. It knows the names of these tags and it
knows what they mean and what they do. And it can use that information
in order to make a web page that looks the way that we want it to look. Questions about any of that so far,
or about the tags that we've seen? So thus far, all the web
pages that we've created have all just had text on them. They've had text maybe just written out
like unordered list or ordered list, they have had headings on them,
they potentially had lists whether they're bulleted or numbers. But we'd probably like for our web
pages to be a little more rich. Maybe. Then we want to have
give them some images, some pictures to look at as well. And so inside of my source folder
where I have all these HTML files, I have a file called cat.jpeg,
which is just a photo of a cat. And maybe I want to
take this photo of a cat and I want to put that
on to my web page. How might I go about doing that? Let's take a look now at imagezero.html. So what we're looking at
here is a simple web page. It looks a lot like
the ones we've already seen with one slight difference. so
here in the body we see on line seven that we have an image tag, but
there's something a little bit different about the image tag. In fact, there's two things
that you might notice. Thing number one, we see
the start of the image tag but we don't really see
an end to the image tag. All the other tags have body and
/body, title and /title head and /head, but there's no image and
then /image at the end of it. And the reasoning for that is
that not all of the HTML tags require a beginning tag and
an end tag, a start and an end because some things like images, it
doesn't really make sense to say, OK, start the image and end the
image and what goes in the middle. You're not going to type text in the
middle of the image for instance. And so for tags like the image
tag you don't need an end tag. It's just sort of a
self-contained tag that doesn't require an end tag to go along with it. The second thing that
you'll notice about this tag is that it's not just
the name of the tag. The name of the tag is img,
for image, but we've also added what's called an HTML attribute. And this HTML attribute called
SRC, or source is providing additional information to this tag. It's saying this is an image tag that
I want to render to the web browser. But without any additional
information the web browser wouldn't know which image to render. It wouldn't know whether
to render an image of a cat or a dog or a jellyfish or
something else entirely. And so what we have to do in this
case is provide that information to the web browser. We have to tell in our HTML
code here's the name of the file that we actually want
to render on the page. In this case, it's cat.jpeg, that same
file that I was showing you earlier. And if instead, the image
that you wanted to display was somewhere on the
internet, some linked to an image that was on
Google Images for instance you could just paste in a link to an
image and that would render on the page as well. So if we then go and open up
imagezero.html inside of a web browser, what we'll see is a very big-- we'll see that cat. And why did the image render so big? This probably isn't
the type of interface that I want to present to my users. If I want to show my users an image of
a cat I don't want it rendering huge. And I guess the reason
for this just happens to be that the cat.jpeg file
that I've stored on my computer is a very high resolution image. It's many pixels wide
by many pixels tall. And as a result, my web browser without
being told any additional information about how to deal with something like
this is just going to take the image and render it at full
resolution because it hasn't been told to do anything else. But fortunately, for us in order to
control that and have a little bit more control over what's going on when
our web page renders and is displayed to the user, we can add a couple
additional attributes to the image tag. So what we see here is
the exact same web page. We have the image tag
and the source attribute, but we've added two
additional attributes. We specified a height
attribute that says render this image that's 200 pixels tall
and a width attribute that says render this image that's 300 pixels wide. And so now when I open
up this same web page but change image zero
to image one, it's going to just render the image as 300 pixels
wide by 200 pixels tall because I've told it using those HTML
attributes that this is what I want the dimensions
of the image to ultimately be. And so we noticed that some
of the attributes that we use in HTML, like the source attribute,
you need that source attribute. If you don't provide a source
attribute your web browser's not going to know what image to add. But there are many, many more
attributes that are optional. Attributes ones that you
can include if you want to. You can optionally specify
the height or the width of the image that displays in your
HTML page, but you don't need to. But you should be careful
because your web browser is just going to listen to you no matter
what it is that you type in. If I say, all right, I want the width
to be 300, but I want the height to be I don't know 700 pixels for instance. And then I try refreshing
this page, suddenly the cat doesn't look quite
right anymore because I've distorted the image by telling it
exactly what dimensions to display it as. But the web browser will be smart if
you give it the opportunity to be. So if I just say, height is 700 pixels
but leave off the width for example and just say render it as a 700 pixel
tall cat it will render to 700 pixels tall and adjust the width
appropriately in order to match. So if you are going to specify both
the height and width to something, make sure the dimensions
are what you want them to be otherwise oftentimes it's
best just left up to the browser to make that determination for itself
in terms of what makes the most sense. So that's images and how we
use HTML attributes to adjust the behavior of particular HTML tags. Questions about that? Yes. Question over there. AUDIENCE: How would you make the
image as a proportion [INAUDIBLE] web browser [INAUDIBLE]? BRIAN YU: Fantastic questions. So the question is, how do we take this
image and make it sort of proportional? Because if I'm here looking at it on a
computer with a sort of a wide screen then this looks great,
but if for instance I were to shrink down this page,
now most of the cat gets cut off. And so HTML, and later
we'll see CSS for styling, has a number of different ways via
which we can control exactly how tall or how wide things are and
control the size of things. One way is by specifically
specifying a number of pixels. For instance, I might say that I
want this cat to be 700 pixels tall, but I might alternatively
say, all right, you know what? I want the width of this cat to be 50%,
50% of the total width of my web page. So if I save that and
render it, what I see now is that I didn't tell
my web browser here's how many pixels to render
this image as, it just knows 50% of whatever
the width of the web page is, that's going to
render as half of that. And now if I shrink the web page,
before the cat didn't change size because it was a fixed number of
pixels and if I shrink the web page it doesn't really care, but now
if I shrink the same web page you'll notice that the
cat shrinks with it. As my web browser gets narrower, 50%
of that full width of the web browser is getting smaller. And this is a trick
that's often employed. Now, if you start to think
about how to make your web pages responsive to people
using mobile phones or tablets or devices of different sizes, making
sure that your content looks good both on a computer but also
on smaller devices as well is very, very important
nowadays as web applications become more and more useful on
varieties of different platforms. And so techniques like that
of using a percentage instead of a number of pixels to say I
want this to only show up as 50% can often be a helpful tool to make
sure that you have that dynamism, that responsiveness in your
website to make sure that it's able to adapt accordingly. Great question, though. Other questions? All right. We'll keep going. So that was images. We'll show you a couple of
other things that HTML can do. One thing that it's very
useful for is rendering tables. So we will have tables of
data with rows and columns and we want to display
that data to the user. Let's take a look at table.html,
which will be an example of that. So what we have here is a table
that represents US presidents. Just the first two. But what we'll notice here is that we
have a table tag that begins the table. And then we have a whole bunch
of tags nested within it. We have a tr tag, which
stands for table row. And then within that we have th
tags, which stands for table headers. So if you think about this
just going one layer at a time, we start our table. And the first thing in our table
is going to be a row in that table where that row is going to consist of
three headers or three columns that are being headed by these individual cells. We have first name, last
name, and years in office. And now we end that row with /tr. That's the end of that row
and now we start another row. Here's a table row that
says, all right, here is going to be the start of
a new row of this table. We have George and then
Washington and then the years of George
Washington's time in office. And if we scroll down
a little more we see we have another row underneath that. Notice that inside of the row
all of the individual cells are stored in td elements,
where td stands for table data. This is just the data that is
contained within that particular row. And so now if I were to open
up table.html, what I see is something that looks
something like this. I see my title. Notice presidents was
here labeled as a h1, so it's going to render
as a large heading. And within that I have individual rows. Here's my header row. The th ones make it
render as sort of bold. And I have the names and in the second
row inside of that table as well. Now, this might not look
like a very fancy table. It doesn't have borders
or a coloring or it doesn't look like it could
be aesthetically pleasing. We'll see later on in
tonight's lecture how we might go about styling a
web page like this in order to make it look a little bit nicer
and look a little more aesthetically pleasing. But that's an individual table. And if I wanted to, I could
add an additional row to this. Right here is two rows and I can just
continue to add more elements inside of this HTML page. So I can say one new table row
and I'll end that table row. And inside of that is going to be table
data Thomas Jefferson and 1801 to 1809. And so if I refresh that page, we
see that the third row in that table now appears because I've
added to the HTML code. And you can continually do this by
adding more and more HTML elements to the contents of my HTML page. One other HTML tag that we'll take
a look at just to see how they work is form.html. So what we're looking
at here is an HTML4. Oftentimes, when we're
working with applications we don't just want to display
information to the user, but we want to collect
information from the user in order for them to either sign up for our
website or log into our web site or submit data to us in some other way. And so what we see here is a simple
example of an HTML form, where we have this form tag in the
end of the form to say here is going to be a place
where users can input data. On line seven we have an input tag. Notice that like the image
tag there is no end tag here. This is just going to be a
place where users can input text and we need to tell the web
browser what type of information the user is going to be inputting. In this case, we're saying the
type of that information is just going to be text. And we're specifying a couple
of other optional attributes that give additional information to this
form so that it knows how to behave. Placeholder is just full name. Placeholder, if you'll recall, and
we'll take a look at it in a moment, is sort of that same text
that appears in a text field before you start typing
in it just to give the user a little bit of an indication
as to what's expected of them as to what goes there. And this name field at the
very end just gives a name to this input field that
says that this input field is going to store the name of the person. This won't become relevant just yet,
but as we'll see later on in this course as we start to actually do things
with the form, take this information and log it to a database
or process it in some way, being able to reference a
particular input field by its name can ultimately be very, very helpful. And then finally down here
after they type in their name, let's give them a button to click on. That's created just
by using a button tag. And the name of this button is going to
be Submit, and then /button to say, OK, that's the end of that button. So if we render that
form and take a look at what that looks like
when we open it as HTML we see it's going to
look something like this. So we have a spot for the user
to type in their full name. Notice that full name is automatically
placed there as the placeholder text that we put in or HTML, and they
can type their name in there. And then the Submit
button is a button that would theoretically submit that form. Now, this form doesn't yet do anything
because we haven't hooked it up. We haven't told the form what to do
after someone clicks on the Submit button, but we'll see
later in this course how we can begin to using other
programming languages like Python and JavaScript begin to take
the results of form information and do something useful with it. But for now all we're doing
is designing the front end. What the user sees when they
visit a particular web page. So that was the form. Questions about the
forms or tables or images or any of the other HTML elements
or tags that we've seen thus far? All right. One helpful way to
think about HTML as we think about designing our HTML
websites is thinking about them like a tree structure. If you're unfamiliar
with tree structures, effectively think of them
as a combination of nodes where nodes are just points within this
tree that are connected to other nodes. So in this case, if we look at a simple
website like the Hello, World page that we created before, if we wanted
to represent this as a tree in HTML we typically call that tree
the document object model. It might look something like this. We have HTML at the very top. Everything in our web page is
contained within this HTML tag. And within that HTML
tag we have the header, that head section of the HTML page,
and we have the body of the HTML page because inside of HTML we have
the head here and the body there. Inside of the head we have a
title because the whole title tag is nested within the HTML header. And inside of that title
is our text, hello. And likewise, inside of our body
is just this text, hello, world. And you can imagine for some
of our more complicated pages that we saw earlier where
we had tables, for instance, that we might have a table
element inside of our tree and which is connected to a
whole bunch of tr's for table rows each of which itself is connected
to a whole bunch of th's for table headers, or td's for table data. And you can represent this entire
HTML page as this big tree. And it might not seem
very intuitive as to why you might want to do
that right off the bat, but as we'll soon see, especially as
we start diving into JavaScript later on in the course that by having
an understanding of this tree can we start to manipulate it, can we
start to add things to the tree in order to add more to
our web page, remove things if we want to take things
away from the web page while the user is interacting with it. And as we'll see in just a moment we
can use this tree in understanding what's contained within what to
begin to style our web pages. And styling our web pages is going to
be the process of taking what so far has just been websites that have a white
background and black text on it and maybe images and
other things as well, and starting to add some
of our own custom styles to it in order to make it look
a little bit nicer to the user. Because a big part of web
development these days is not just making sure
that the web site works and that it does what
it's expected to do, but also that it's visually
appealing to the user. That it's something that they
would want to interact with, that it looks nice, that
it looks professional. And so that is not something
we can do with just HTML alone, but it's something that's going to come
in with an additional tool called CSS, or cascading style sheets which
is a different language altogether and we can use to interact
with HTML in order to style the HTML in order to change the
way the HTML looks according to rules that we set in order to add color
to our web pages, for example, or add spacing in places where we
want spacing or add borders to things or add a background to
things, for instance. And so what we'll take
a look at now is how we might be able to leverage
some of the tools of CSS in order to design a web page that looks
just a little bit nicer than the web pages that we've already
been working with. So let's take a look at stylezero.html. And what we'll notice
is that this web page is very similar to ones we've seen before. It's got a body, it's got
an h1 as the headline, it's also got these p elements
where p just stands for paragraph, like a paragraph of text. But the key difference here is
that we've added a new attribute. We've added this style
attribute here that's associated with h1, that headline. And that style attribute is equal to
something a little bit complicated, but let's break it down into parts. We have in quotation marks,
"color:blue;text-align:center"; And so what we see here in this
style attribute of our heading, R2 is CSS properties, where a CSS
property is just some specific style property that the browser is going to
understand and render in a particular way. And as you might guess
what's happening here is we're saying that we want to assign
the color property of this heading to blue and we want to
assign the text align property of this heading to center. And so what that's going to do is
instead of just rendering an h1 as we normally would as just a black
big headline on the left side of the screen, we'll render it as a blue
headline that's centered on the screen. And so if we now open up
stylezero.html, and we see a web page that looks something like this. That big heading is still
there at the top of the page, but it's a little bit different now. We styled it to be blue, we
styled it to be centered. Whereas before, if we were to
just get rid of this style tag altogether and say that this is
what that looks like without any of that additional styling. And so leveraging tools
like that we can start to build up styles for our web page. We can start to make things
look the way we want it to. We can apply a color
scheme to our website in order to put whatever themed
colors we want to put on our site. And this can be used in order
to add the sort of styling. And HTML and CSS have
a very rich vocabulary for the types of things
that can understand. Obviously, we can be simple colors. We can do the blue color or we can say
red to make the headline render as red instead, but there is something
like 140 different colors that HTML and CSS know how
to understand and interpret. So I could do something like
color:dark magenta, for instance. And if I refresh that page then the
heading is rendered as dark magenta. And if that's not enough
color sophistication for you, the 140 different
named colors out there, you also have the ability to select
exactly which color you might want by using that colors hex value. And so in HTML and CSS and when we're
dealing with color more generally, we'll often represent color using a
format called RGB, or red, green, blue where we specify how much red is in the
color, how much green is in the color, and how much blue is in the color. And using different combinations
of red and green and blue, where zero means very little red
and 255 means a whole lot of red. And likewise for green and blue can
we represent basically any color that we want to. And so if we type in HTML
color picker, for instance, and we can see over here that
this color, this shade of blue is 66 amount of red. So a moderate amount of red and a little
more green, 134 green and 244 blue. So a whole lot of blue. And that is this particular color. And so if we wanted to make our headings
some different color, for instance, maybe we want it green and we want it
to be a darker green like this color, for instance, that's this color. That's 12 red, 142 green, and five blue. And that color is
represented by this up here. This is called a hex code. If you're familiar with
hexadecimal or base 16, it's effectively these three numbers 12,
142, and five represented in base 16. No need to actually understand
where that number comes from, but effectively know that the first
two of these numbers and letters represent the amount of red, the second
to represent the amount of green, and the last represent
the amount of blue. And if I take that now 0c8e05, and in
my HTML code rather than dark magenta, I say #0c8e05, for instance,
that same color hex code that I saw before
and then refresh my page, now it's going to render
using that exact same green. So by using hex codes and
understanding RGB values, we can have a lot more
control over the colors that our web page uses by
specifying exactly which color that we want to display when
that page ultimately gets rendered. So that's the basic
introduction to how we might use the style attribute to begin
to add some styling to our web pages and make them look just
a little bit nicer. Questions about that so far, CSS or
colors or anything we've looked at? As we can imagine, if
we start to-- and I'll change this back to blue
just for good measure. If we start to add a lot of
styling to our HTML web pages, this is going to start to
get cluttered pretty fast. I can start to add
additional styling here. If I want my paragraph here to be purple
and I want this paragraph over here to be red, for instance. And this will certainly work. I can style things in different colors
and that's going to work just fine, but I've mixed my CSS code
of describing what color and how I want things styled with
the actual contents of my page, of the actual content that
I want to be displayed when the user goes to the page. And oftentimes, that can be
seen as just a little bit messy. We might look for a cleaner and more
elegant way of styling our page. And CSS offers a number of different
ways via which we can do that. So one way is seen
here in styleone.html. So notice in styleone.html,
which ultimately when we open it is going to
render exactly the same way. Big blue headline and then
two paragraphs of black text. We've done something a
little bit different here. What we've done is the
body of the web page is the same as it was before without
any style tag attached to it. The h1 no longer has a style attribute. It just says h1m welcome to my web page. What we've added is we've added an extra
section to the header of the web page. We've added the style
element to the header to say here is some style
information for the web page should know that should be included in
the entire web page, the rules to follow when deciding how to style
and how different parts of the web page should appear. And what we see here on line six is
that inside the styling of the web page we have h1, meaning here is how you
should style any h1 that you see. We say h1, the color is going to
be blue and the text align property is going to be centered. And that's why ultimately that
page looks exactly the same because effectively the browser
is doing the same things. We've just moved the CSS styling away
from the body of the HTML content to the web page. And this is a paradigm
you'll start to see a lot as we begin to approach
web development from a number of different angles that
whenever we're intermingling a lot of different
things, oftentimes it can be helpful to take one
part of the web page and separate it out into
a different place such that it's more logical or more
easy to understand or more readable or ultimately more elegant. And this is one example of that
of taking the h1 out of the h1 from the body and just describing
it in the header of the web page in terms of how the
entire page should be styled. And one other note about this is that
when we put the h1 in the style tag in the header, it's going
to apply to every h1 that it sees throughout the page. So if I add another header,
adding here is a second headline, and that's also an h1 because
up here in our style tag we've told every h1 to
render as blue colored and centered in terms of
its alignment of the text. When we refresh this
page the second headline is also going to show up as
centered and blue as well. Whereas before in that first
example, if we were to add an h1 and we wanted it to be styled the same
way, we would have needed to go ahead, and h1 style equals color blue text
align center and repeat that same thing again for the second one. And generally speaking, whenever you
find yourself repeating the same code, or even copy pasting the
same styling code again, in order to make it to apply to
something else, generally speaking you should look for a better
designed or a more elegant way of doing the same thing because
ultimately this repetitiveness gets difficult to maintain. If I want to change the headlines
from blue to red, for instance, I now need to change the headline in
two different places in my web page. Whereas, in styleone.html,
where I have all the styling contained inside of
just this style element, inside of the header of my web page. If I wanted to change both of my
headings to red instead of blue I just need to change it in one
place, changing color from color blue to color red. And now both of the headings
change in their color because that Heading Style is applied
to the entire document as the whole. Questions about that? OK. But we can in fact
get even better at how we go about trying to
separate out the CSS because natural questions that
might come up now are number one, we still have this styling
code inside of the HTML file, when it sort of feels
like something separate. The way that we style
our website is sort of fundamentally different
from the actual content of the text that goes on our website
and the structure of our web page in general. But another issue that
might come up is, what if I start to build larger web
applications that don't just have one HTML file, that have two,
three, four, or more HTML files that all want to have red
headlines that are all centered. Of course, I could take
the style tag and I could copy paste it across all
of my different HTML files, but again, that brings up the
same problems that we saw before. The problem of whenever you
find yourself copy and pasting code and repeating code we run the risk
of making it more difficult to maintain and ultimately making it less elegant. If we wanted to change
the color down the line it becomes a whole lot
harder because we have to change it in many different places. So what can we do about that? Well, we can take that CSS code and
just separate it into a different file altogether. So what I'll show you
now is styletwo.html. Styletwo.html does the exact
same thing as styleone.html. And all the source code will be made
available to you afterwards as well. Styletwo.html shows you a
big blue centered headline, but how is it doing that? Well, the body is still the same and we
no longer have a style tag in the head, but what we do have is
this line here, line five. Link rail equals style
sheet href=styles.css. So what's going on here? This link tag is
effectively telling us we want to link in some other file that's
going to provide us information to help us know how to render this HTML page. And what kind of information
are we trying to render? Well, it's going to be a style sheet. Information about how
to style our web page. And which file are we going to include? Which is the file that we want to link? Well, it's styles.css. And so now if we take
a look at styles.css, what's going on in there to allow
it to render the CSS the way that we want it to? Let's open up styles.css. It's exactly the same
thing as the contents that we saw in the style tag
of our HTML header before. It's just h1, color is
blue, text align is center. And that's what allows us to get this. If we add additional properties,
maybe I want my paragraphs to all be red, for instance, and I
save that, now if I refresh of the page the paragraphs are red. The HTML file didn't change at all. Styletwo.html stayed the same. Yet, when I refreshed it the styles
changed because this linked file, this linked CSS file that is defining
the style for my styletwo.html file has been updated to say, now
I want all of the paragraphs to show up with red coloring
instead of the original black. And so we saw three different
ways via which we can link CSS into the contents of our HTML code. One, just by including that style
attribute directly in the HTML. The second way, factoring it
out into the header of the HTML page so that it applies
to the entire page. And then finally, what might be
one of the most common paradigms you'll use, especially if you start
building larger web applications is this method of saying, take the CSS,
separate out into a different file such that even if I have many
different HTML files they can all reference the
same CSS file so that they all get styled the way that I
want the page to be styled. So those are the basics of how
we might go about using CSS. Now let's take a look at a couple
of the common CSS properties that we might use. So far we've seen color to give a
particular element of color in HTML, and we've seen text align to say I want
to center this text instead of left justifying it. And we can also use CSS to change the
size of different elements as well. So let's take a look at size.html. And for good measure I've just
included the CSS in the header like we saw in the
second example before. Though in practice in
a larger application you might want to move this
information into a different file. But what you see here is
inside the body I have a div. And a div just basically
means a division of my code. Some section of my code that doesn't
really have any real formal meaning. It's just a section of my code
that I want to do something with, maybe style in a particular way. And here's a style I've applied to it. Background color is going to be teal,
width is going to be 100 pixels, height is going to be 400 pixels. So if I now go to size.html,
this is how it gets rendered. We have a vertical just block of
HTML content that says hello, world. But in particular its background color
is teal, it's got a particular width and it's got a particular
height as defined by what I included inside of my
style tag just a moment to go. And so using these
width and height tags we can start to really define exactly
what our website looks like. If we change the width to
500 pixels instead of 100 and refresh the page there, we see
that now it's a fair bit wider. And so we can control exactly
how the web page shows up just by making these
small modifications to it. But now what if we wanted to add
a little more to this website in terms of its design, in terms
of the spacing of this page, in terms of thinking about
what it's going to look like? You notice that right now
this hello, world block is very close to the upper
left hand corner of the screen. Maybe we would want to move
it around a little bit more. So that's where we can start to
introduce the notion of a margin around the edge of a
particular HTML element. So for instance, if I go in here
and set the margin of the div to be 30 pixels, for instance,
and now refresh that page, now we see that hello, world
has a margin around it. It's got this sort of 30 pixel
invisible border that's surrounding it. And it helps to space that
out from different elements. And so controlling margin
can often be helpful when you're trying to lay out a web
page with a bunch of different elements and you want to control how far apart
different elements are from each other. The margin is very helpful there. Another thing you might notice
is that hello, world right now is very much just directly at
the edge of this teal box, which looks a little bit suboptimal. Maybe I would want to
change that a little more. And for that I can add in another
CSS property called padding. So I can say, all right, let's
add a padding of maybe 20 pixels. And after I refresh
that, now you'll notice that hello, world is
internally padded by sort of an invisible border of 20 pixels. And so margin and padding are both
used in order to control spacing. But the key difference is
that the margin of an element is the space around this outside
of the border of the element. So this is my div, this teal box. The margin is what's outside of it. I've got 30 pixels of
space along that side and the padding is between the content
of the element and that elements border. So this right here is 20 pixels
worth of padding for the hello, world that's located inside of this div. And so using margin and padding,
especially on larger web applications you can start to really control
the look and feel of the website in order to make it display exactly
the way that you would want it to. All right. Thus far we've also only been
interacting with our HTML page in the sense of having text
that is all of the same font. It's sort have been
the same default font that HTML tends to use whenever a web
browser is displaying HTML content. And maybe we'd like to have a
little more control over that. So let's open up font.html, and take
a look at what's going on there. So again, we have a body inside of
which is a div that says hello, world. And inside of the
style tag up here we've added some special styling
to that particular div. In particular, we've added three things. We've added a font family
that effectively just says this is the font that I
want this div to render in. And notice that I haven't
just said give it one font. I said Arial, but I
said Arial, sans serif. Reason for this is
when we start to think about making sure that our website
looks right in matter what browser it's loaded on. So maybe you were wanting to even
include some font on your web page that the user's computer doesn't have,
or that the user's web browser just doesn't understand. And so if you include multiple
thongs as the font family in the styling of our HTML, then
what's ultimately going to happen there is-- sorry. There's an extra tag there. What's ultimately going to happen
is that the web browser will first try and match the first
font that I provide. It will try and use the font
Arial if at all possible. But if it doesn't have the font
Arial, if the web browser doesn't know what Arial is or
can't find that font, it's just going to default
to any sans serif font. And so oftentimes if you want to
use fancier fonts on a web page it can be a good idea to
include the font that you want, but after that some
additional more common fonts that might be more
common in other browsers on older browsers in
particular that way you can guarantee, or at least
know with high probability that when a user looks
at your page they're seeing what it is that you actually
want them to be looking at. In addition to the font
family, we've additionally specified the font size for how
big we want the font to show up as. In this case, 28 pixels tall. And finally, a font weight. You want the fun to
be bold, for instance. So now if we open up font.html,
we see that what we get is slightly different text
rendering that what we saw before. We see hello, world, but it's
no longer in that same font that it was previously. It's now 28 point font in size,
it's now in a particular font, it's now bold because
we were able to control the font that was present there. Couple other CSS things that we'll
just take a look out before we move on. We'll take a look at border.html So
again, we have inside of the body a div that says hello, world. Just [INAUDIBLE] saying hello,
world in some rectangular box. But in the past that rectangular
box has sort of been invisible. We've seen the words hello,
world, but there hasn't been like in a physical box drawn around it. But now there can be. Up in the style tag we're going to
specify that we want inside of the div for there to be a border and that border
to be a three pixel, solid blue line. And so by specifying border
three, pixel, solid blue we can open up
border.html and now we see hello, world inside of this rectangular
box that is a three pixel blue line. And we can change this, can
customize it however you like. It can be a five pixel,
dotted red line, for instance. And now it's going to
look something like that. So we have full control over
what the border looks like. And again, there are
many, many CSS properties. Far more than we're going to be able
to look at in just tonight's lecture, but I'm giving you a taste
of them, just a teaser of what CSS properties are
out there so that as you start designing your own web
applications you can think about what do you
want the web page to look like, you can get a feel
for what CSS is capable of. And as a result, you can start
to design pages that look the way that you want them to look. So that's borders. And now let's try and use some of
the CSS that we've learned in order to improve the style of one of the HTML
pages that we've already looked at. So let's take a look at table.html. And recall that table.html was
just a simple web page that listed presidents of the United States. We have Washington, Adams, Jefferson. And right now this table doesn't look
particularly fancy or particularly great, but we can use CSS now
to begin to add styling to it, to begin to control the way this looks
to make it look the way we want it to. Maybe, for instance, we want
a border around this table. So up in the head I can add a
style tag and say, all right, around the table lets add a border and
let's make it two pixels solid black. And now around our
whole table we just have this box, a two pixel
solid black line that's surrounding the entirety of this table. So that's good. That's a good start, but it's not great. I also would probably want
for there to be borders around individual cells for this table. Lines that are dividing up
the rows and the columns. And so let's do that now. So now I would want to apply
styling to the table headers. Let's apply a border of maybe
one pixel, solid black this time and also around the table data. One pixel, solid black. Recall that the headers were these
things at the top the first name, last name, years in office. Whereas the data, the td
were the individual cells that were composed within that table. And by specifying this now
and I refresh of the page, now the individual cells also
have a border around them. We see a little box around each
one of these individual cells. And one thing you may have noticed is
that the styling for the table header is the same as the styling
for the table data. They're both border,
one pixel solid block. And it felt a little bit
repetitive for me to have to say the same thing two times. So what I can do instead is just say
th,td, to mean take this styling, apply it to both table headers and
table data and then I don't need this additional information for the CSS. I just say the table is going to
have a two pixel, solid block border. The table header and the table data
will each have a one pixel solid back border. And if I refresh that the
same exact layout results. I don't see any changes in the
styling because this is fundamentally the same meaning as before. We've just managed to eliminate
some of that redundancy. What else might we want to do here? Well, right now one
thing that you may notice is that the lines are
repeated twice because we have a box around each one
of our individual cells we see two lines between each
individual cell instead of one. And so CSS found a way to get around
this just an additional property that you wouldn't know about unless you
looked it up or had used it previously. But [INAUDIBLE] additional CSS
property called border collapse. And if I had border collapse collapse
to this styling of this HTML page and then refresh it, now we see
that those double borders go away. We just have just the borders we want. And if we didn't know that border
collapse exist as a CSS tag it would be very easy to look up. You could just Google CSS property for
removing double borders in a table. And you'll likely find
someone online who has said, use border collapse:collapse and you
can then use those CSS properties in your own web design as well. Now we might want to add
some color to this as well. You might want the headings of our table
to be in a slightly different color. So I might say for the
table headers, let's say we want the background color
to be light gray, for instance. And we refresh that and now the
background for our table headers is light gray. And maybe you want to add some spacing. Recall that there are
two ways that we've added spacing thus far
in this course where margins are around
the outside of the box and paddings on the inside of the box. Right now I get the feeling that
these cells are a little bit cramped, that there's not a whole
lot of space inside those boxes. So maybe I want to add more space there. So maybe for each of my table
header cells and table data cells, I want to say padding five pixels,
just to add five pixels of padding on the inside of my individual cells. And now it looks something like this. Looks a little bit cleaner, a
little more room for the cells to breathe because I've
added some padding in there just by adding these
additional CSS properties. I can additionally add
changes to the size of this. Maybe I want the table to be wider. I can say make the with 500 pixels, for
instance, and now it's 500 pixels wide. But as someone mentioned
earlier before, this might not be great because
now if I shrink down this page now I've sort of lost information. I can scroll over to the other side,
but the table doesn't respond with me. So I can instead say
something like, what width? Let's make it 50%. So the width of the table
takes up 50% of the view of the entire width of the window. And now as I shrink it
down or make it larger you'll notice that my web
browser knows automatically we need to add new lines
to the table headers in order to make room for all the data. The web browser takes
care of all of that. I just need to tell it, here's
how I want the data to render, here are the specific style properties
that I want to add to the HTML page. And the result is this. And finally, one thing
I might want to do is say, for all the table
data let's align it centered. And what we see now is
we have a table that looks a whole lot nicer than the table
we had just a couple of moments ago when we didn't have
any of the CSS at all and it was just all the tech sort
of on one side without any borders or centering or styling added to that. So using just a couple
lines of CSS, we can start to take the contents
of our pages and make them a whole lot more responsive. A couple final points to take a look at. Any questions about this so
far before we move on though? Yeah. AUDIENCE: [INAUDIBLE] BRIAN YU: Yep. AUDIENCE: [INAUDIBLE] BRIAN YU: Great question. So the question is, there are
so many properties out there. I've shown you a whole
bunch today, but there are far more that I haven't
even managed to touch on just because we don't have enough time. How do you know which one to use
to make a certain thing happen? Oftentimes, the best way to do this
is to look for documentation online. If you look up CSS
property documentation you'll often find lists that just show
you all of the different CSS properties that you can apply to style a
particular element on the page. And you can use those. Or likewise, if you're looking
for something very specific, you want to know how do you
get something to happen? Maybe I didn't know about
collapsing those borders before, I can just perform a Google
search and look for CSS table, combine borders of cells. I don't quite know what
I'm looking for, but I know approximately what I'm asking for. And if I look around carefully enough
I'll notice that in the very first result it tells me I can use that border
collapse:collapse property in order to make that happen. So even if I didn't know how
to do that particular thing or didn't know how to do some
other particular styling, this is all readily
available information that you can look up because others
have likely walked that trail before, tried to solve the same problems and are
likely have a way to use CSS in order to make the styling look the way
that you want it to ultimately look. So great question. OK. One more example just
to quickly show you. What we have here are divs and spans. So we've seen divs before in a little
bit of detail, where the div is just a division of my web page. That's just going to be some section
of the web page, some vertical section of my web page. And a span as we see here, is really
just the section of my web page that might be in the
middle of some text. They don't really have the same kind
of meaning the way that an image tag is an image and a list tag creates
a list and a table tag creates a table. The divs and span tags really
don't do anything at all, but they allow us to label
different parts of our page. I can say div and then give
this an id, where an id is just an attribute that uniquely identifies
a section of my web page via a name that I give it. So I can say div id equals
top, where top is just a name that I picked to say,
you know what, this is going to be the top section of my web page. And I'm going to put it in a
div just so that I can name it, so that I can name it top to mean
this is the top of my web page. And likewise here, div equals middle. I picked the name middle as the name
for this section of the web page. And then div id bottom just
means I have a section here and I'm naming it bottom. And I can give it a name
by using this id attribute. Then these spans here. Why am I using those? Well, I have this additional
attribute called class. Class is an attribute that lets
me give names to elements as well, but it lets me give names to
a certain type of element. So with id's. When I have an id on an HTML
element that id needs to be unique. There can only be one HTML element
in my web page that has an id of top, only one that has an id of middle,
and only one that has an id of bottom. But I can give many things, as
many as I want the same class. And so here I'm saying, I'm
going to call this class name. And that way if I want
to I can refer to all of the different spans who have
classes name and style them in a particular way. And you'll see what I mean by this
in just a moment if it's confusing. But right now we have three divs. This is the top of my web page, this
is the middle, this is the bottom. Where top, middle, and bottom
are inside of these spans who have a class value of name. So what can we do with that? Why are we labeling things
with top, middle, bottom name? Well, if we take a look
at the styling up here, this is the contents of our style tag. We have this pound sign. And the pound sign in
CSS is short for id. What this is here saying is get
me the thing whose id is top and style it in a particular way. In this case, style it with
a font size of 36 points. Here, take the thing that
has id of middle and style it with a font size of 24 points. And likewise, take the thing
that has id bottom and style it with a font size of 12 points. And before I wouldn't have had a way to
distinguish the styling between three different divs, because if I had
said div style that is 24 point text it would have applied
to all three of my divs, but if I only want it to apply to
one of them an easy way to do that is to uniquely identify it. This is the top div and then say,
OK, get the thing whose id is top, here's how I want you
to style that thing. Likewise down here, if the pound
sign means id the dot sign in CSS means class. So dot name means take anything
whose class is name and style it in this particular way. In this case, make the font weight bold. So now if I open up divspend.html,
this is the contents that I see. I had three divs and you
can sort of see them here even though they're not laid out. This was my top, this was my
middle, this was my bottom. And because I said get
the thing with id top and make it the biggest in font
size, make the middle one somewhere in between, and the
bottom of the web page the smallest font size
at just 12 points, then they were able to render
using the correct fonts even though that they're all div tags. And these names, top,
middle, and bottom, they're all bolded
because they were inside of spans that had a class of name. And I said take all of the things
that have a class of name and style them with a font weight of bold. Take a look at that
one more time in case it was confusing now that you've seen
what this web page actually looks like. Inside the body we
have these three divs. And these id's never show up
in the contents of the HTML. These names are only present
inside the HTML code and not when it gets rendered in the browser. But I'm giving the divs these names
such that later on in my style tags I can go in and style
them however I want them to, by giving them a particular
font size, for example, in order to result in them rendering the way
that I want them to be rendered. And likewise, the same for
when we have individual names. So that's a brief introduction to CSS. Next week we'll dive in even
further into HTML and CSS. But any questions about
the CSS that we've seen so far in terms of how to
go about styling our web pages? Yes. AUDIENCE: [INAUDIBLE] question. A number of the things that
you did in the HTML code you could do in a
Wysiwyg editor where you can see what you're doing more readily. And then Microsoft Word generates
HTML code for you, right? BRIAN YU: Great question. AUDIENCE: Under what circumstances do
you want-- in practice, how are people really generating their HTML code? And under what circumstances do
you want to be down in the weeds writing in HTML? BRIAN YU: Fantastic question. So the question was, nowadays there
are all these Wysiwyg editors where I can just click a bold button and
make text bold or click a color box and change the color to whatever I
want without needing to know hex values and class names and id's
and all that, so why would I ever want to actually use this
stuff, or in what situations would this actually come up? And the answer is that
oftentimes a lot of the basics will already be done for you. Next week we'll start to dive into
a CSS framework called bootstrap where a lot of the CSS to make web sites
look nice is already written for you and you can just use it and make your
website look a little bit better. But you'll want to use
HTML and CSS when it's helpful for making very specific
adjustments to your web page in order to make them
look a particular way. And also, once we start
dealing with dynamic web pages. So far all of the web
pages we've created just show whatever content
I want them to show. I type in the text that I want to appear
on the page and I open up the page and it shows that text, but most
modern websites aren't like that. I open up Facebook or Twitter and
it's not like some Facebook or Twitter engineer has written all of the posts
and tweets I'm going to see in an HTML page and shows that to me. It's that some server somewhere
is figuring out what tweets and what Facebook post to show me. It's generating HTML and CSS and it's
displaying that information to me. And that process of generating
custom, dynamic HTML that gets displayed to the
user based on different things is something we'll explore
later in the course. But it's a situation
in which we'll really need to start to leverage some
of the tools in HTML and CSS in order to control when we're
dynamically creating content. How does that content look? And those are situations
in which we might want to have a little more formal
control over the CSS and the HTML that we use inside of the page. But great question. Other things? Yeah. AUDIENCE: I just want to know the
difference between id and class. For example, can I use the
id attribute with span tag? BRIAN YU: Great question. So the question is,
when you use id in class can you use the id with a
span tag instead of a div? Yes, absolutely. You can use id's in class
attributes on any HTML element. So I could have put a class on the div. I could have put an id on the span. id and class are just two different ways
of identifying HTML elements in a style sheet, for instance, or using
JavaScript as we'll soon see later. The only difference is
that an id must be unique. So there can only be one HTML element
called top, only one called middle, and only one called bottom,
but there can be as many things as I want that have a class
of a name, for example. And so generally speaking, if
you want to style one thing in just one part of the
web page you use an id, but if you want to style a bunch of
different things you'll use a class. So if we think back to
Twitter, for example, maybe your profile picture that shows
up in the upper right hand corner of the screen,
maybe there's an id attached to that that's like profile
picture because I only have one and I want to style it a particular way. But for tweets that are showing
up in my tweet feed on Twitter, those might have a class
because there are a whole bunch. Dozens and dozens of different
tweets that are all one style basically the same way. And so by giving them
a class and say, you know what, style anything that has
a class of tweet using these rules, then anything that is a tweet will
be styled in that same manner. AUDIENCE: So the id and class
actually cannot be used in the same, for example, div [INAUDIBLE]? BRIAN YU: The question is, can id's and
classes be used in the same element? Yes, they absolutely can be. If I wanted to, I could put class equals
name up in this top div, for instance. And what that would do is
because it has a class of name, when I refresh this, this
whole top div is now bold because if we just follow the rules
that I gave it, I told my website, anything that has a class of
name make its font weight bold. And then down here I said
this div has a class of name, so the entire thing is
going to render as bold. So you can give anything the
class of name that you want. Not just the spans, although in this
example, we only gave it to the spans. Great question though. AUDIENCE: Question. BRIAN YU: Yes. Question? AUDIENCE: What happens
if there are conflicting sizes of same element [INAUDIBLE]? BRIAN YU: Great question. Question is, what happens if there are
conflicts, in terms of what happens? And ultimately, we have to
resolve those conflicts somehow by picking one or the other. And generally speaking, CSS will default
to picking the more specific thing. So if I said I want the top
to render with a color of red and I want the name to render with
a color of blue, for instance, technically because the top
is supposed to render as red this whole text would
theoretically render as red. But because I said name renders
as blue, then when I refresh this, even though top is still inside of
that text that should all be red because the name is more local to it,
because it's part of that span that's deeper within the tree that [INAUDIBLE]
that we saw before than the div is then top is going to show up
as blue instead of red. Great questions. All right. So we've seen a little
bit of HTML and CSS, but thus far our web sites have
only ever existed sort of locally on our own computers. I've been opening up
these web pages in Chrome just by going to a particular
file on my computer. And you can certainly do
that on your own computer as well just by opening
up HTML files and seeing how a web browser renders them. But ultimately, that's not very
useful if I want to take my web page and deploy it to the internet,
for instance, for anyone to be able to look at. So how may I go about doing that? To use that there are a
number of different ways to deploy web pages to the internet,
but one common way, or one way that we can use in this class
using only the stuff we know so far is something called GitHub Pages. And GitHub Pages is a feature
of GitHub which effectively lets you take a GitHub repository
and deploy it to the internet so that people online can look at
the HTML contents of that web page. And so let's try an
example of that right now. If I go back to this
GitHub repository that we saw way back at the beginning of lecture
this is the lecture zero repository that inside of it has a hello.html page,
that's got hello, world, hello, again, hello, hello, hello. I would like to deploy
that to the internet. And the easiest way
to do this from GitHub is using GitHub Pages
by doing the following. On the right hand side
I'll go to Settings, I'll scroll down to GitHub Pages. GitHub Pages is designed to host
your personal organization or project pages from a GitHub repository. And I'm going to tell GitHub
Pages, you know what, deploy to the internet from my master branch. The master branch is
just the default branch that we've used on
our GitHub repository. We haven't yet gone into
creating multiple branches, but we'll get to that soon. But I'll go ahead and click Save here. And what that's going to
do is enable GitHub Pages on this particular repository and
deploy this code to the internet so that anyone online
could theoretically go and see the hello.html
file that I created before. So if I scroll down to GitHub
Pages, it says your site is now published at this link. So if I go to this link and go to this
link, /hello.html, it's student 50, my GitHub username. github.io slash the
name of the repository, in this case, lecture zero /hello.html. It can sometimes take some time,
but this time it's already done. What you see now is a URL that you
can go to right now if you'd like. You can go to student50.github.io/
lecturezero/hello.html, and what you will see is a web page with
the title of my web page and you'll see the contents of hello, world,
hello, again, hello, hello, hello. And that is now deployed
to the internet. We've deployed our first website to the
internet all just using GitHub Pages. And the beauty of this is
now if ever we make changes to this repository to
the way that it works or update the code by
making pushes to it, we will automatically
update GitHub Pages. It will reflect the latest
version of those changes. So we can add CSS to these web pages,
we can add new content to the HTML, we can add different HTML files,
and it will all deploy to a URL that anyone on the
internet can then visit. And so that's GitHub Pages. And that's something that we'll
begin to explore in project zero. Project zero, which will
be released later today is going to be an opportunity
for you to start using the stuff that we've talked about today. HTML and CSS and Git in order
to create a web page of your own on a topic of your choosing and then
deploy that to the internet for anyone to see ultimately using GitHub Pages
by combining all of these tools. Questions about GitHub Pages or
HTML or CSS or things we've seen? AUDIENCE: Does GitHub Pages render
the CSS and JavaScript, for example, if you go visit the HTML page? BRIAN YU: Great question. So the question is, will GitHub
Pages render a CSS and JavaScript once we get there? Yes, GitHub Pages will allow
us to do CSS and JavaScript, though it's not going
to do everything for us. We'll soon find
ourselves within a couple of weeks finding that there are
things we want to do with our websites that GitHub Pages just isn't
quite powerful enough to do. And then we'll want to
transition using other tools. And that's what we'll stuck getting
into Flask and other web development services that will allow us
to build more dynamic, more interactive websites that are a little
more powerful than just web pages that display the contents of
what we've already shown. But next week we'll dive a
little more into Git and HTML and CSS doing some more advanced
things with figuring out how to dynamically generate
styling for our web sites and going into some of the more
advanced features of HTML5. But for now, that's it for web
programming with Python and JavaScript. Thank you all so much and we'll
stick around a bit for questions.