ANDI彭:我们几乎 通过所有pset时。 事实上,我们正在通过广大 最困难的pset。 所以我们实际上只是 要那种清风 在接下来的几个星期。 我们将开始谈论我们的 最终的项目,事件即将到来 在接下来的几个星期。 而生命将变得轻而易举。 所以今天不会太大。 我们希望,实际上清风 通过今天的议程, 然后离开这里 一些空余时间。 另外,我要道歉 今日缺乏糖果。 我不知道为什么。 但在周通向 万圣节,我会忘记糖果。 所以,我其实只是一个巨大的 失望对现在的你。 因为我真的记糖果 对于每一个类,但万圣节。 但在下周,我将带来 一倍糖果的量 弥补的是,所有的你。 这将是巨大的。 所以,我有一对夫妇的公告 对于一些调度。 我有一些时间安排问题。 然后,我们将进入到 说说什么叫做文件模式。 我们要谈 快速TCP / IP HTTP。 然后,我们将编写我们 自己的网站上使用HTML和CSS。 然后我会真正离开也许 20分钟就好谈pset6。 由于pset6实际上是一个很大的 东西,我们已经看到过, 但我想刷新 其中的一些概念 并教了新的功能。 凉。 所以首先, 欢迎破发。 我希望你休息是愉快的。 请问你做的休息时间吗? 听众:去纽约。 ANDI彭:你去纽约? 我认为,一半的学校 去纽约。 没关系。 我花了我大部分的突破 久坐不动的在床上Netflixing。 这是一个好时机。 但我们现在回来了,回到了 会议上,背的东西摆动。 我们中午,由于这周五PSET。 我想你已经已经 拿起你的测验,是吗? 所以谁比谁有 没有他们的测验, 请进来,让你的测验 从我在段的末端。 或者跟踪我在校园里。 我会用我的地方。 我们的最后一个项目的前期建议也。 因此,对于我们这些从来没有花谁 这个课前,CS50的顶峰 在这个非常高潮 宏伟工程的学生提出。 和预提案, 只是一个总体思路 对什么人可能想为自己的 项目,这个想法是因为周一, 下周一中午。 那么好看多了,大卫·我想会 谈论这个讲座 如果他没有。 而有一个坚实的页面 在我们的网站解释 该项目的所有要求。 但本质上,挑 你已经任何主题 一直关注 整个在这里你的时间 在CS,无论是游戏还是 设计或视频或任何东西。 你可以真的有种 现在应用的一些经验 我们在这里学到的CS50--喜, welcome--到几乎举办 您所选择的最终项目。 所有这一切是由于周一是 通过电子邮件只是一个简短的Blurb的 对我来说,一个快速的句子, 像,哎,安迪, 我对设计很感兴趣 一个游戏,这是否为iOS。 凉。 只要让我看看你的简短的初始 想法最终的项目。 我们将讨论通过与否 这其实是一个好主意与否, 如果它是一个可行的主意或没有。 但就在预建议 是由于下周一。 pset6,我们可爱的web--这是错误的。 Pset7? pset6? 这是pset6,对不对? pset6,我们的Web服务器,是因为 周五中午与已故的一天。 办公时间为星期一正常地恢复 至周四8:00至本周11:00。 我想共享的 接下来的三个晚上。 凉。 之前我们已经为物质,没有任何人 有任何疑问,笑话,故事? 你做了什么秋季休息? 听众:我做什么? ANDI彭:已 这是很久以前其实。 Christabel去纽约。 我住在这里,并Netflixed。 听众:哦,是的,我在这里。 ANDI彭:哦,好。 听众:我不记得 具体是什么。 ANDI彭:这是确定的。 听众:Netflixing可能。 ANDI彭:Netflixing。 是的,这是一个好时机。 好。 好吧。 之前有任何疑问 我们跳进材料? 此外,我们要尝试 今天一节的速度通过​​, 没有过多的涉及。 并希望,我们会得到 在这里有点早。 对不起,没有糖果,也是。 我很失望, 特别是在万圣节。 好吧。 凉。 所以,我们要开始谈论 一个命令行参数调用文件模式。 文件模式,所有这仅仅是一个Unix系统 调用命令行进行 更改文件权限。 因此,例如,我们已经 所有遇到页 这样很可能在某个时候 我们的生活中是一个互联网跨度 用户,我们的网站服务器, 给了我们故宫的错误。 您没有权限访问, yadda,yadda,yadda,在此服务器上。 所有这一切的真正含义 是权限 该贴到任何 页面您试图访问 不向你敞开。 因此,相当多,文件模式 是在其中的方式 我们可以修改这些系统权限 给每个人,用户,组, 或世界,或任何 这些接入组合 对某些文件, 目录,任何事情真的, 在任何一种制度 操作系统。 因此,如果任何人有 如果你觉得电脑 像今天一起跟随我, 完全随意只需键入的东西 研究。 如果没有,你可以只挂出。 所以,我要真正拉动 我的终端现在。 因此,要运行的命令 文件模式,或者至少只 列出的权限您 文件目录,只是LS-L。 正如你所看到的,一堆 东西弹出其中大部分 重要的是我们 左手侧此处。 你们看到了一堆RS,WS,1 /的。 是啊。 这些基本上都是刚 所有的文件权限 解释什么特定的目录 和你的系统中的文件有。 因此,让我们回去 这里的功率点。 因此,除了文件名 因为你们可以在右侧看到, 我们期待看到本质 只是在左边的列中。 所以除了刚 文件名,我们 可以看到文件的权限,他们 所有者组,组名,日期 该文件的最后 改性,等等。 你可以看到很多使用chmod东西。 让我们读文件模式的方式是, 我们几乎忽略第一个字母 在阅读权限方面。 第一个字母只是告诉我们什么 系统的类型,我们在访问。 研发,在这种情况下,是一 文件夹或目录。 因此,我们知道,目前我的工作区 第七节是一个目录。 然后你看到三个 黑社会,本质上只是 三组三个字符。 你能想到的每一个位。 所以,你只是有三套 三个比特,九个位总共。 你对待他们三个一组。 所以三第一组是 总是你的用户权限。 你的第二个三组 总是你的组权限。 而你的第三个三集 总是喜欢这个世界, 在无处不在的权限。 所以我想简单 要问的问题是什么 用户和组之间的差异。 主要的区别 用户和组之间 是用户就是你本人 访问无论它是现在。 一组可以,如果你有多个 一台计算机上的用户,例如。 所有的人都可以被视为一组。 然后天下 只是世界上,每一个人。 因此,我们可以在后面看到我们如何 修改这些成不同的权限。 因此相当多,我们 将仍然集中 在左侧,在那里部分 对于目录CS50我们看到drwx, 其中,第r只是意味着它的可读性。 在W只是意味着它是可写的。 然后在X刚 意味着它的可执行文件。 你会觉得​​它种 对没有任何意义。 应该是E。 但实际上x样的 工作好一点, 因为你可以更好地记住它。 因此,三种类型的东西你 能做到的,你可以读文件, 你可以有权限写 文件,或者你可以有权限 要执行的文件。 因此,我们实际上的方式, 代表了那些位 是数字4,2和1。 因此可以将任何可读是 通过4-数来表示。 凡是是可写的 由2表示。 和任何的可执行 如由1表示。 所以在这个意义上,我们也可以 代表这些numbers-- 您好,欢迎,以不同的方式。 抱歉。 每个人都在,我要去 道歉代表大家 现在进入教室。 我忘了今天的糖果。 对不起,我是个失败 本周万圣节。 我会带双量 糖果下次来弥补它。 但不管怎么说,对不起 关于球员,对不起。 于是方式,我们实际上可以输入 我们命令的参数是我们 可以做CHMOD组斜线权限, 其中,该集团只是什么 组我们正在试图改变。 而权限 无论我们想给它添加。 因此,例如,该 再加上增加了权限, 和减法带走权限。 和组的类型,我们有我们的一个 对于所有,U为用户,克群, 或o他人。 这是一个有点抽象,现在。 但是,我们就去了几个例子 只是为了证明这一点真正的快。 大家好这个 幻灯片,这样我就可以继续前进? 凉。 因此,例如,RWX。 在我们讨论究竟意味着什么, 首先是什么RWX是什么意思? 如果你看到这一定 文件具有RWX权限, 这是什么意思 人可能是能够做到? 听众:读,写和执行。 ANDI彭:是的,没错。 你可以读写和执行。 因为所有这三个的 字符都存在。 因此,如果我们继续聊 有关这方面的比特而言, 的RWX也可以被表示为700。 因为你可以在任何看到 之类的文件目录的权限, 有三个黑社会。 在这种情况下,只有第一 黑社会有什么存在。 所以在这种情况下,r是4, 的w是2,x是1。 如果加在一起的,这是7。 所以,如果转换 它为二进制,它是700。 因为图7是第一个三合一。 0,没有什么礼物 在第二个黑社会。 然后还有什么存在的 第三个黑社会,所以这是另外一个0。 因此,在同样的意义,一帮黑社会 只是在比特可以表示,只是 以二进制为好。 因此,700表示完全一样的东西 RWX ------在权限方面。 每个人都清楚这一点? 凉。 所以CHMOD 111将使 其中该文件的权限? 给你们一对夫妇 秒到这种转换。 还记得,第一次 三元组是用于用户。 第二三元组的组。 而第三个黑社会是适合每一个人。 所以CHMOD 111将给予其 权限,并为之类型? 就拿几秒钟, 想想回来。 是啊。 听众:所以每个人都可以执行它。 ANDI彭:是的,没错。 听众:但是,没有人可以读取或写入。 ANDI彭:并随时 为给大家讲解 你怎么来了这个结论。 听众:那么,对于用户来说, 组,和世界,这是所有1, 这是可执行的代码。 ANDI彭:是的,没错。 所以图1,在这种情况下,我们都知道是 即是这样的可执行代码。 因为阅读是4。 写作是2。 而可执行文件是1。 那么,这三个黑社会是1,那 意味着走向世界,给用户, 和基团,它们 都是可执行文件。 每个人都好有吗? 好。 这样一来,第二路 我们实际上可以 写这也是你 可能只是做搭配chmod 加的X.一个是指所有或每个人。 加号是指给予许可。 然后将x表示可执行文件。 因此,有两个命令 实际上是相同的。 所以,如果你想运行 这在你的终端, 你做搭配chmod 111名 您的目录或文件。 或者,你可以做搭配chmod加X, 目录文件的名称。 同样的事情,只是一个简单的方法, 或许,对于一些代表或改变 文件权限。 用chmod每个人都OK 之前,我们继续前进? 凉。 所以,现在我们要前往成 很抽象的概念,几张幻灯片 我是非常 要微风通过。 而且它的,如果你完全确定 不明白了一切。 即使是现在,我还是真的不 完全明白了一切。 但更得到了 顶级的理解 如何对这些事情的工作。 因此,我们要谈 赶紧有关TCP / IP, 这仅仅是传输控制 协议削减互联网协议。 从讲座回忆, 大卫,他才教你 在那里,他想通过这个例子 在一个信封的注意事项 高达喜欢报告厅的顶部? 所以在法学院礼堂 大卫基本上证明 如何在TCP / IP协议的工作原理 某种意义上说,所有这 是是确保数据的方式 已交付跨越服务器 或在互联网上。 因此,在包络线的例子 和消息,在端用户 看得出来,哦,我需要 收到四包的信息。 但事实上,我只是收到了三份。 这意味着我必须失去之一。 和一个未送达。 等的TCP / IP在网络上, 通过您的计算机和服务器, 做同样的事情。 它所做的就是指定一个 框架,其中丢失的数据 数据包可以重新发送和接收。 就像在互联网上,当你试图 在线访问文件或发送的文件 给您的朋友或看网页 浏览器,千千万 的数十亿 的字节的信息 每毫秒传送。 而且它是真的,真的很令人困惑。 它真的很难 真正知道什么是被发送 而什么不被发送。 所以TCP / IP只是规定 一个有凝聚力的框架 在您的网站 浏览器和服务器 一种可以沟通 彼此,只是 确保数据包 一切都在这里并没有什么失落的 和所有你请求的数据 实际显示正常。 每个人都在这一点很确定 短暂的高层次明白了吗? 凉。 于是我们将移动 到谈论HTTP,这 仅仅是超文本传输​​协议。 HTTP,所有这一切是任何页面 或文件被访问您的网站上, 服务器返回一个HTTP 在响应状态代码 于该请求确保 或者,哦,这个请求经历。 而一切都显示正常。 或者说,哦,不,404。 出了些问题。 哦,我不能显示。 所有这是是什么 您尝试访问, 作为用户使用正试图访问, 在internet--只是确保 你可能成功,也有 访问无论是与否 成功访问不管它是什么。 这样一来,HTTP状态 代码只是为您提供 是能够知道是否一个装置 或者不是很成功与否。 因此,例如,一个示例请求。 在这里你可以看到它的 通常一般四行。 我们有一个GET HTTP 1.1,这仅仅是 该方法请求的URL,协议 版本,字段名, 和字段值。 所以完全没必要 这里记住任何东西。 只是那种熟悉 自己与如何将这些看。 在本实施例中,该方法要求 URL只是任何要求 您发送的服务器。 就像,嘿嘿,服务器,我真想 访问yadda,yadda,yadda,HTTP页面。 协议版本只是什么 版本的主机或服务器 用于访问信息。 该字段名的网站或 那你要访问的URL, 在这种情况下,www.apple.com。 和字段值是 只是典型的名称,值。 它可以是任何类型的组合的 字母或数字或什么的。 因此,一个典型的请求,所以 其实你的电脑 发送给,说,哎服务器, 你知道我需要这显示, 这是那种要求 他们实际上得到。 什么样的实例响应 服务器会发送回您 将几乎同样的事情, 除与在顶部的状态代码。 所以200,2 0 0总是 该状态代码确定。 就像,OK,这个请求经历。 你是能够访问 一切正常。 生活很好。 生活是美好。 一切都完全好。 所以,这只是告诉浏览器, 你的服务器,嘿嘿,一切都很好。 我得到了所有我需要的信息。 凉。 但问题是 有时问题上来 当你have--最后我想 我谈到重复。 你有不太好的反应。 因此,例如,404 是找不到网页。 有时你有一个禁止访问。 可使用不同的其它 我是状态码 确保你当你都看到了 努力做研究在互联网上。 你的浏览器给你 对,不,不能访问。 而你喜欢,好了,废话。 因此,只要好看多了,有 一些很常见的状态码。 也许熟悉 有哪些那些。 最有趣的一个 我想我已经听过 of--如果你碰巧 查找所有的人 线上,由于某种原因,有 实际上是一个真正的状态码 所谓418我是一个茶壶。 我GOOGLE了哪里 这个起源是从。 而且很显然四月的一个愚人节 日在几十年前, 有人认为这将是热闹 创建一个名为418一个新的状态码 我是一个茶壶。 合法,这个名字 代码被称为我是一个茶壶。 我忘了你要什么页 去实际上使这种显示屏。 但很显然,你其实可以 得到他的代码我 一个茶壶不知何故 通过做一些事情。 因此,有成百上千 数以百计的状态代码。 他们中有些人赚更多 感觉比其他人。 但几乎只是熟悉 特性的最常见的。 请求的实体主体是 短而粗壮,很明显。 所以有时也有更多的 比我可怕的错误是一个茶壶。 但是,这是一个我猜 那种你希望打。 但是,我不认为你会的。 每个人都好就只是状态 码,请求,过程,制造 确保信息传递正确? 所以,现在我们要转变 成部分,今天一个有趣的部分, 我们谈一点关于HTML的地方。 HTML,全部是超文本 标记语言。 这只是标准的语言 用于创建所有网络 互联网上的网页。 因此,任何网页,什么是 你最喜欢的网页? 什么是你最喜欢的网页? 听众:[听不清]。 ANDI彭:对不起? 听众:的tumblr。 ANDI彭:的tumblr。 这样的tumblr被写在HTML。 因此,我们要真正去通过,并 玩弄一些这些东西 稍后的。 几乎所有你 需要学习,要知道, 写HTML你也许可以 只是谷歌在互联网上。 HTML,它不是像C程序 在这里您可以创建变量,做 很酷的事情吧。 它更多的只是,呵呵,这就是我 想要的东西出现在我的网站。 而我只是打算把它研究。 而且它会设置样式。 所以HTML,从某种意义上说,它就像 格式化或模板语言。 这是一个容易得多。 这是一个更容易学习, 一个更容易写 比典型的编程 语言,很容易, 非常用户可访问的,友好的。 因此,我们实际上要发挥 各地,我们自己写的网页今天。 但是,在我们开始之前,我只是想 去了一些简短的最佳实践。 由于HTML就是这样一个简单的 语言,因为即使 如果你做一对夫妇的事情错了, 它有时可能没有注意到, 我们要确保我们 实际上秉承了我们的最佳实践 以确保事情 可以绕来绕去,但 并不总是会不会向右走 确保他们最小化。 因此,相当多,要确保 您关闭所有标签 你写的HTML时。 如果你打开 身体,确保你 关闭它与身体某处。 你要确保你的 网页验证通过 什么叫W3验证。 你可以谷歌,网上, 并有一个链接到它。 然后你要 单独的HTML,这 是你的标记语言来自你的风采, 这是CSS语言,大卫 证明我们也 要发挥一点与讲座。 凉。 所以,任何时候你想运行 HTML的CS50家电, 我们要运行 程序调用了Apache, 所有这只是一个内置的 Web服务器,每个人都在CS50 访问。 我们称之为apache50仅仅因为我们 喜欢叫在CS50的一切50。 所以,你开始的CS50网页的方式 服务器是通过键入您的命令上 行apache50启动点。 如果你想在任何结束它 的时候,你就apache50最终没有点。 而你只需要敲击回车。 它应该是标题在这里很快。 对。 所以,我只是要赶紧走了过来 一个非常简单的网页的一个例子。 我们打​​算花 像10,15分钟的上场 各地编写我们自己的网页。 好。 因此,这里的IDE-- 每个人都可以看到了吗? 不是真的。 在这里,我将进行放大。 我刚刚得到这个简单的模板 这里没有什么实际的。 我们只是要快速编写 一个HTML程序中,我们只 打招呼的世界。 在C,现在我们那么一回事 只是要做到这一点在HTML中。 没有人想实际只 尝试给我的第一件事情,你 必须放在一个HTML文档? 是啊。 听众:括号中,[听不清]。 ANDI彭:是的。 所以东西是非常独特的,以 HTML即我们通常传统 请不要在其他命令不会遇到 线路电平编程语言 是,我们实际上是 指定文件的类型 这将是 在我们的代码的顶部。 因此,在这个instance--我想 这是正确的命令,对不对? 对。 在顶部,你只是想包括 括号内的爆炸DOCTYPE HTML只 告诉您的计算机,嘿嘿,看出来了。 而HTML文档即将到来。 然后我们怎么想 开始了我们的文件? 如果我们只是想打个招呼,有 网页,打招呼的世界, 我们怎么去建设呢? 其实,让我们转向谷歌。 我们可以真正做到这一点。 对。 在那里,我们走了。 所以HTML。 正如你所看到的,我的浏览器实际上是 自动造型这对我来说。 同样的事情在C,当你 创建一个开放的大括号, 您的浏览器自动 增加了在接近大括号。 幸运的是,我们的IDE爱 这样做对我们来说也是一样。 所以,现在我们可以种类型 一个标签的开始, 并且它会随时告诉我们 记得键入标记的结束。 我认为这需要资本。 然后,我们要添加,一如既往, 一个头,这是冠军。 我们只是想也许叫 这种招呼,然后身体。 而且你去那里。 这实际上是我们的HTML文档。 这样的方式,任何HTML文档 总是称呼in--同样的事情 与诠释主作废。 你总是想有 HTML中打开和关闭标签 在你的代码的顶部和底部。 你想拥有一个脑袋里面 其中包含标题,只是什么 是要显示你的网页的标签 页,然后一个机构,它的内部 实际上显示的内容 无论你想做的事情。 所以,如果你想实际运行 这一点,我要放大出来。 实际上,你可以启动 apache50启动点。 凉。 所以你可以看到,现在 此链接已弹出。 它说你的网站是现在 可从下面的一些链接。 所以我们所有的IDE拥有done-- 没有IDE,sorry--是啊, 我们的IDE所做的就是创建一个web 链接在其所有的网页 可以在服务器上被访问。 因此,让我们来看看在这里。 让我们点击这个,去hello.html的。 而你看到一个非常简单的 网页为世界你好。 好。 我们真的要只 有everyone--是啊,这是怎么回事? 观众:我有一个基本的问题。 ANDI彭:是的。 听众:你如何保存 文件为HTML? ANDI彭:是的。 所以,如果我要创建一个新的文件, 如果我做的新文件,Untittle,如果我这样做, section.html,咚, 这就是我要做的。 听众:[听不清]? ANDI彭:没有。 听众:[听不清]。 ANDI彭:没有。 听众:[听不清]。 ANDI彭:是的。 好看多了,在延伸 该文件是你的IDE中, 它告诉计算机,即 告诉浏览器,嘿嘿,看出来了。 这将是代码 用这种语言编写。 因此,例如,在微软 一句话,怎么所有Word文档 有什么扩展名结尾? .doc或.DOCX,对不对? 所有这些都指定到 您的操作系统,嘿嘿, 你已经有了一个Word文档来了。 在Word中打开它。 同样的事情与PDF文件。 它知道,哦,我需要 打开这个文件 与Adobe Reader或Adobe Acrobat。 因此扩展操作 同样的方式在您的计算机。 如果您指定的代码页 被命名为HTML,那么它知道, 哦,你有HTML代码。 我打算把它当作HTML代码。 因此,它是在这个意义上超级智能。 所以每个人,让我们像10分钟 而刚刚创造我们自己的网站。 让我们增加了可爱的东西。 随意说任何你想要的。 我只是想确保 每个人的服务器是否正常运行 我们免费之前,你到处理器集。 因为如果你的服务器 不为pset的运行, 这将是非常糟糕。 我只是要漂浮和 看到每个人的工作。 怎么样了? 听众:我只是把我的电脑上。 ANDI彭:这是确定的。 听众:[听不清]。 ANDI彭:只要你的IDE。 是啊。 听众:[听不清]。 ANDI彭:这是确定的。 听众:[听不清]。 ANDI彭:完全罚款。 是每个人都访问 他们的网络服务器是否正常? 是apache50运行是否正常? 我觉得在一些 其他部分,我们 曾与人没有问题 能够访问该服务器。 是啊。 所以,你只要运行apache50 空间开始太空时期。 听众:[听不清]。 ANDI彭:是的。 好? 听众:[听不清]。 ANDI彭:哦,好。 所以,你应该有一个空格。 所以apache50-- 听众:我做到了。 ANDI彭:--start空间。 听众:哦,空间点。 ANDI彭:是的,空间点。 你去那里。 于是,如果你有 创建的HTML页面, 那么你可以直接进入 到它指定的链接。 你应该能够访问它。 每个人都能够 访问他们的网页可以吗? 听众:[听不清]。 ANDI彭:哦,没关系。 听众:[听不清]。 ANDI彭:是的。 我觉得你其实可以打开 它你的浏览器,在浏览器内 而不仅仅是你的IDE浏览器。 是的,我想如果你复制和粘贴。 听众:然后 我们如何把它关掉? [听不清] ANDI彭:是啊,你这样做 apache50停止与无期。 对。 听众:[听不清]。 ANDI彭:由于没有时间。 是啊。 在那里,我们走了。 对。 我们正在创建自己的网页。 听众:哦,爽。 ANDI彭:是的。 观众:我有一个问题。 所以阿帕奇50-- ANDI彭:50,是的。 听众:[听不清]。 ANDI彭:什么? 这是奇怪的。 看,这就是问题的一种 这是发生之前。 好。 部分后来见我。 因为我们有一些 问题与服务器。 而你想 确保你的服务器是 在开始之前,PSET运行。 因为你会需要它。 是啊。 是否有其他人还没有被 能够得到他们的服务器开始? 对于那些你们谁想要添加 额外的风格,以自己的网页, 我们其实可以做什么 在讲座大卫就很好, 这是创建一个额外的样式 片,这是一个点的CSS,层叠 样式表,实际上只是添加入。 因此,例如,我刚刚创建 几乎差不多的确切同一台 大卫做了讲座。 您可以非常简单,只是做全身。 你有所谓的标签,其中 可应用于IDE任何部分 你想在你的 实际为HTML页面。 所以页面的主体,就 可以做文字居中对齐。 然后我会创意 里面的标签叫做顶 其中,我想这些东西 发生,分配一个更大的像素尺寸 的字体。 我想字体粗细要大胆。 而我想要的颜色,以 是蓝色的,只是随心所欲 价值观,我决定选择。 我可以创建一个名为中间另一个标记。 字体大小,使它有点小。 然后,我可以创建另一个标签 所谓的底部在哪里我想要的字体大小 甚至可以说仍然较小。 所以,几乎这仅仅是例子 源代码或源的样式表的 它很容易只是谷歌。 如果你说,哦,我想我的字体 以斜体和深绿色, 你也许可以谷歌, 然后它会告诉你 适当的标签或标识创建。 这样一来,这样你实际上会 一种具有此在HTML文档 或者用它是所有你 做的,是在头 添加一个链接到样式表。 所以,你可以只是链接的href等号 不管你的样式表的名称 是。 然后关系 是一个样式表。 因此,任何HTML文档中,只要 因为你有这点CSS表, 你应该能够访问 和具有属性那里。 因此,例如,在这里,我只是 创建另一个例子网页。 这是欢迎CS50节 星期二从2点到3点30分我。 然后,我添加了一个可爱的形象, 我们可能应该能看到。 所以,如果你在这里看看, 如果你去style.html, 我们创建了一个网页与小猫。 由于小猫是真棒。 因此,添加图像仅仅是IMG SRC链接。 差不多,如果有 任何类型的功能 要添加到您的 website--所以我们可以说, 要添加一个菜单 或搜索栏或类似 一个image--只是谷歌如何做到这一点。 而你只是扑通这种格式。 你可以只是漂亮 多只加入。 这是真的,真的很容易。 我们正在创造我们自己的 网页现在。 如果你想 - 听众:[听不清] ANDI彭:对不起? 听众:[听不清]。 ANDI彭:呵呵, DIV只是一个事业部 告诉我说,哦,我有 某一段被称为 中间在我申请 我的CSS标签,然后 我的其他事业部的底部。 这一切都在告诉你。 因为这是很好的保持 东西整齐有序, 因此程序知道究竟如何运行。 并认为我可以复制粘贴此 到我的实际的浏览器也是如此。 它应该是罚款。 是啊。 好极了。 因此,如果每个人都希望只 尝试创建一个网页, 我们将采取两到三分钟。 我只是想确认 每个人的服务器正在运行 家家都有一 想法如何做到这一点。 如果你们想 拿出你的计算机。 仍然没有工作? 听众:我只是[听不清]。 ANDI彭:也许尝试更新50为好。 是啊。 听众:[听不清]。 ANDI彭:是的。 所以,你的方式开始新的 在IDE的Web服务器只是 做apache50空间开始的空间点。 我只是想确认 每个人的服务器运行正常。 听众:在这里,在终端上? ANDI彭:是的。 听众:[听不清]。 ANDI彭:Apache的。 其实,我认为你是 运行的东西了。 是啊,你居然 运行不同的服务器。 是啊,你是好。 只要知道的工作,你真行。 听众:OK。 ANDI彭:有两家 方式来运行的服务器。 所以只要方式之一 正在工作,它的所有权利。 我们将采取一分钟 只是那种完成了 任何的收尾 网页你们​​想拍。 是每个人工作的方式? 每个人的服务器 除了为你运行? 我们会明白这一点。 和HTML的非常简单。 所以,我认为我们都好。 是啊。 我会回来的。 听众:[听不清]。 ANDI彭:OK。 听众:所以这只是 开始加载。 ANDI彭:不用担心。 所以HTML,还有源代码 会后,部分在网上。 此外,大卫有一个整体 一群在网上也是如此。 只是种浏览一下它 看到HTML页面写入。 这是相当容易的。 什么,你不知道,你漂亮 简单,只是谷歌,你是好。 我只是想确保 你的服务器运行。 听众:是否经常这样做? ANDI彭:这是从来没有发生在我身上。 我不知道这甚至有可能冬眠。 听众:[听不清]。 ANDI彭:我认为everyone-- 我的以前从未休眠。 我不知道为什么。 有点奇怪。 听众:[听不清]。 ANDI彭:是你的冬眠? 听众:[听不清]。 ANDI彭:是的。 听众:这是确定的。 因此,一旦它是开放的。 ANDI彭:OK。 我们会处理一些服务器 后段的​​问题。 你应该罚款。 虽然,你要确保你 让你离开之前他们解决。 因为如果你的服务器的 没有运行,那么你 不会是能够做到的 PSET,像任何部分处理器集的。 所以,你要确保 这是的工作。 凉。 好吧。 告别小猫。 我花了很长时间寻找 这小猫的图片穿上。 所以,反正。 听众:[听不清]。 ANDI彭:对不起? 听众:[听不清]。 ANDI彭:我认为这是在网站上。 像规范? 听众:[听不清]。 我认为,规范只是 网上七个星期 我想,这就是所谓的pset6,甚至 虽然我们是在七个星期,这 是位计算。 听众:但我的意思是,如果你 想看看at--如果你 想拉我们的版本 该网站从我们断绝? 所以像server.c是处理器集,对不对? 如果你想看看这个, 怎么样它检查出来? ANDI彭:哦,所以实际上 处理器集,所有我们正在做的 这里implementing--在这里, 我去了这个简单。 因此,对于每一个人,这只是得到 第,你们是幸运的。 很少有材料 实际支付的今天。 我只是要在接下来的 20分钟去在PSET帮助。 因为有一些有用的 功能,这将有助于你的生活。 并希望,我们会出 这里还有20分钟。 好。 所以pset7是错误的。 尽管我们是在周末 七,它实际上pset6。 我会改变这种状况。 我们所要做的pset6 正在创建的web服务器。 这听起来超级吓人。 尤其是对那些 你们谁已经 看了看分配代码, 有很多代码,大量的代码。 但完全确定。 因为细节问题 实际创建的一部分 服务器是由我们来做。 所有你真的问 在此做PSET 只是做一些字符串操作 在文件I / O。它实际上 像相当简单。 所以,当你第一次下载that--谁 这里实际上已经下载 处理器集,并采取看看吗? 好吧。 是啊。 还有像500行代码 那你要像, 到底是怎么回事? 而这完全罚款。 请确保你看穿行。 因为大卫和 - 我不知道。 我不认为这是Zamyla的,这一个。 但我认为其他一些 穿行测试是相当 在以下方面有所帮助 只是让你知道 到底是怎么回事你的代码中。 而这是完全确定。 由于四大功能,你是 要求执行反倒 零做实际的服务器。 他们所要做的只是 分析不同的字符串, 通过字符串搜索, 以确保一切都在做 什么他们应该做的事情。 因此,为了这种效果,也有 一些非常有用的功能, 尤其是对字符串 操控,是我们都应该 去了,我认为我最好 对你们非常有用 试图处理器集之前学习。 而且他们都包含 在您的文件string.h库。 有可能是更有用 我没有在这里包含的功能, 因为我要么不使用它们或 也许我只是不知道它们的存在。 随意通过student.h一目了然。 因为那里将是一个很大 的功能,这些功能非常有用的。 因此,六,我用的最多的我 当我在过去的一周做PSET 是的strtok,和strchr,strrcher, 的strstr,strcasecmp,和strcpy。 这样一来,最后两个看似 非常熟悉你最。 海峡情况相比,它是所有比较 字符串检查它们是否相等, 包括大小写。 和strcpy只是复制 一根弦到缓冲区中。 所以这两个应该非常 熟悉你们在这一点上。 因为我们已经使用了他们很多, 特别是对于最后的pset。 但前四也许 你有没有看到,直到如今。 但是,我要只是穿行其中。 因为他们将让你的生命 真的,真的很容易for--不容易, 但对于很多这个即将到来的pset容易。 好。 所以字符* strtok函数,这是功能 定义此功能包含 在字符串,H库。 如果您将得到字符的输入* 字符串,它只是一个字符串, 或者常量的char * deliminator,DELIM的简称, 所有它做的是打破了较大 字符串转换为一系列的我们称之为 令牌由一定值分隔。 因此,从某种意义上说,如果我要奉献 你section.7.php,这是一个字符串。 因此,这将是如果我是通过 在本作我的海峡,我的char *海峡, 如果我的deliminator了点,这一切 会做的是通过字符串搜索。 并在第一时间就看到一个点, 它只是返回指针 对发现​​的最后一个令牌 在此之前的字符串。 因此,这将在这里去。 而且它只是给我7.php。 如果我要打电话 功能更多的时间, 它会给我只是.PHP。 所以,这一切功能是做 被打破了较大的字符串 根据成较小的字符串 你在寻找什么。 因此,例如,在 你的样子了功能 如果你想看看什么 某些字符来约 或者点发生或扩展发生, 这个功能将是相当有用的。 是啊。 别担心。 这都将be--是啊,这是怎么回事? 听众:所以在第一线, 如果我们使用这个例子中, 什么将我们插入了吗? ANDI彭:是的。 你只需拨打一个 strtok在字符串逗号DELIM。 而字符串等于section.7.php。 然后你DELIM 可以等于只是点缀。 听众:OK。 ANDI彭:是的。 就这样。 所有这些功能都相当 类似的,当我们通过他们去。 他们只是略有不同的事情。 但是,他们都去 让你的生活轻松了许多。 第二个功能,这其中的喜欢 超级,超级,超级重要的, 是the--托起。 哎呀。 和strchr搜索第一 occurrence--实际上,是的。 和strchr是功能 我绝对只是走过去。 所以忽略了我说的话 用于第一功能。 它实际上是所谓的和strchr。 那么这里会发生的事情是,如果 给您提供一个字符串的字符C, 它只是给 你不管是什么样。 是啊。 所以,把它当做海峡,这 是一个字符串,CHR为char。 因此,所有你想要做的是搜索 对于其中一个char是一个字符串中。 所以它搜索第一 发生的字符的 c。在字符串str。 听众:[听不清]。 ANDI彭:是的。 然后,如果它没有找到 它,它会返回NULL。 因此,一些那将是非常 为你们做处理器集有用 比如说,如果你正在寻找一种 扩展像.DOCX就一个字 文档或.PDF为PDF文档, 有种你可以用它来看看 无论什么是继 你看一个点,对每一次? 因此相当多,如果你 运行通过的功能, 如果它返回NULL, 那么你知道它 没有发现它的点,这意味着这 显然不是有效的文件扩展名。 或者,如果它返回 什么,你就知道 这将返回任何的 实际上后延伸。 所以,那些你们谁了 开始寻找通过查找 和解析,这一功能的 将是超级有用。 因此,我们实际上会 证明使用此。 为什么你们不尝试写一 功能布尔句话的char * s表示 只是如果s是返回true 句子,否则为假。 因此提示,你会 以可能使用和strchr。 或者你在刚刚搜索 串为一定的字符。 所以,在一个句子, 什么分隔句子 从非句, 有什么具体的人物? 听众:一个空格。 ANDI彭:一个空间,对不对? 所以,我们怎么可能会 希望这个函数,在做什么? 听众:[听不清]。 ANDI彭:我们将要和strchr 字符串空间的外观。 因为如果它返回的东西,那么 我们知道,这一定是一个句子。 这意味着,我们必须 在这个串的空间。 如果没有空间,那么我们就知道 这,哎,你猜它不是一个字符串。 这可能只是一个很长的单词。 所以,我给你们一对夫妇 分钟写此功能。 是啊。 听众:你得到 此字符串从用户? ANDI彭:是的。 所以,这只是一个功能。 所以,想象你的主函数中 你已经have--让我们去这里。 好。 所以我写了这个节目里 我有我的主要功能在哪里 我刚刚创建了两个字符串。 第一个是嗨,我的名字 是Andi--显然,一个句子。 我的第二个就是 岸堤,显然不是一句。 所以我跑这两个的 通过这个功能串。 我想你们写寒句。 而我保存了这些值, 然后只需打印出来。 因此,认为该用户是 要传递一个字符串。 然后,你要基本上 弄清楚,如果它是一个句子或不 并返回true或false相应。 如果你们想给 竖起大拇指或抬起头来,点头, 是任何人都已经准备好开始 这一点,那会是不错的。 也许就像30多秒? 好吧。 让我们来看看,如果你可以试试 写这个功能。 所以,伪coding--我只是要 通过这个,现在那种走。 好看多了,我们知道了 函数,我们需要使用。 我们将调用该函数 我们的字符串和搜索一空。 如果返回的东西,那么我们必须 知道这一点,显然,这是一个句子。 因为有空间。 然后,我们将返回true。 否则,我们将返回false。 没有人想给 我的第一行代码 我们实际上是要 用写? 它实际上是最难 代码行也是如此。 是啊。 听众:如果strtok在S-- ANDI彭:就和strchr。 听众:[插入VOICES] 空间不等于空。 ANDI彭:酷。 非常正确。 每个人都明白,第一行? 我们要调用的strstr, 这是一个函数,搜索 字符串s为空字符。 而如果它发现它,它会 返回一个指向哪里是。 如果没有找到它, 它会返回NULL。 所以,如果它返回任何东西比其他 NULL,那么我们就知道它找到了一个空间。 那有意义吗? 凉。 好吧。 因此,如果我们知道它的发现一个 空间,我们怎么想干什么? 听众:返回true。 ANDI彭:是的。 返回true。 然后,有人要 完成了功能给我吗? 是啊。 否则,就这样。 而尝试编译这一点。 对。 所以当你们可以从看 输出,记得布尔用C 总是表示二进制。 1是真实的。 0是假的。 如果我们运行这个 上串的一个,函数 是嗨,我的名字的Andi-- 显然,一个sentence--结果 打印输出为1,这是真的。 第二个,这仅仅是 总之,结果打印出来 为0,这是假的。 每个人都清楚的那种对如何 这个函数写? 是啊。 听众:可我们也做代替, 不等于没有,等于等于0, 因此,它是等于? ANDI彭:没有。 因为和strchr是一个功能。 我要回本。 那么什么是返回类型 我们strchr函数? 听众:哦,好。 或者为null。 ANDI彭:是的。 这是一个char *,告诉我,无论 这个函数会返回, 这将是一个指针。 无论是指针将是 指着其中,它的发现是, 或者它会返回 一个指针为NULL。 在这两种情况下,这是怎么回事 返回的指针的东西。 所以,如果你要画上等号 这等于,等于0, 你会得到一个编译错误。 因为它会返回一个指针。 而你要尝试 指针进行比较,以一个整数。 和计算机的不 会喜欢这一点。 是的,没错。 凉。 每个人都好? 其次,我们将去 在一个函数调用的strstr。 不用担心,如果这些 功能混淆你。 他们混淆了我。 因此,你们可以看到, 他们所有的声音几乎相同。 只是当你感到困惑, 拉起string.h中图书馆。 而且你们可以排序 通过一个人的那个。 所以的strstr,所有这些都搜索 一个字符串完全是另外一个字符串。 那么,和strchr只是搜索 为单个字符, 搜索的strstr为整个字符串。 所以我想看看的,我不 知道了,嗨,我的名字是安迪。 和我最好的朋友的名字也安迪。 如果我想看看在这个 句子安迪的整个字, 我的针本来 你要寻找什么的。 而你的草垛是什么 你正在寻找入。 所以,如果你正在寻找一个 在句子中特定的词, 这个词将是你的针。 然后是句子本身 将是你的干草堆。 所以它只是搜索 第一次出现 串针 在字符串草垛。 它返回指针 在第一个出现。 除外,记住在这种情况下,它是 整个字符串的第一次出现 您正在搜索 为,不只是一个字符。 所以,这几乎是 同样的事情功能 我们只是做了,只需用 多一点特异性。 因为你正在寻找 不是只有一个性格比较。 以及使用是完全相同 因为我们只是做了一个。 每个人都用这个好不好? 好。 最后一个我们要去 以上是strrchr,这是不 混淆或的strstr与和strchr。 strrchr在有一个额外的河 要小心,当你打字。 你可能会发现自己包括 一个额外的R或不包括R, 然后你的函数 是得了行不通的。 而且你会感到困惑。 要小心,你拼写 所有这些功能的权利。 所以strrchr是确切的 同样的事情,和strchr 但它会搜索不是第一次 发生特定的字符, 而最后出现的位置。 因此,在这个意义上, 它几乎是完全一样的。 但是,代替移动 转发在一个字符串, 你会被感动 向后的字符串。 同样的事情,你只是 搜索以不同的顺序。 所以这可能是超好, 为您查找超好用 功能,第一 功能上的pset中。 让我们假设我们需要写一个 无效的扩展功能中,我们 通过一个恒定的char *文件名, 只是一个字符串,一个文件名, 这需要在该名称并打印 出该文件的扩展名。 因此,举例来说,如果我 通过pset7.zip的字符串中, 它会打印出刚 延伸,这是.ZIP。 而这种将工作 任何一种延伸, .DOCX的Word或.pdf格式为PDF 文件或.html的HTML文件。 好看多了,写 功能,可以做到这一点。 实际上,我要 切换到IDE中。 它不是load--我们走吧。 因此,所有我所做的是 创建一个char *,第一串, 所谓pset7.zip。 我要去进行放大。 我创建了一个第二个字符串 所谓finalpaper.docx。 而给我写一个函数,当 所谓打算只是打印出来 文件扩展名。 也许需要几分钟时间思考 如何你要做到这一点。 稍微更具挑战性 比最后一个, 但用法差不多 一模一样。 是啊。 所以写一个函数调用扩展 即,如果我给的文件,你的名字, 如果我给你pset7.zip--我 希望你能打印出刚刚的.zip。 如果我给你喜欢finalpaper.docx, 刚打印出的.docx, 任何文件的只是扩展。 这实际上只 采用两行代码。 因此,尝试,如果你看 也许可以做到这一点在这一点。 实际上,它只 需要一行代码。 但两行可能是更标准。 什么功能是我们可能 会想打电话? 听众:strrchr。 ANDI彭:strrchr吧。 因为我们正在寻找 从右边左边。 我没有给你们 像这样的一个例子, 但如果我给你的一个示例 www.apple.com,我只是想 。com的,它会是其中的例子 你要拨打的最后一个实例 这一时期,而不是​​第一个,对不对? 如果你是电话和strchr,它 就已经给你的apple.com。 如果你叫strrchr,它 会给你的.COM。 所以要小心哪些 ways--在我的例子, 你很可能可以有 只是写它用,和strchr, 因为只有一个点。 但在另一些情况下, 这可能不是这样的。 所以总是试图设计 您的代码很好,所以that--是吗? 听众:所以在 比如你刚才说的, 当你strrchr它会 给你.com或只是来? ANDI彭:这会给你的.COM。 听众:OK。 ANDI彭:是的。 它指出,它发现它。 是啊。 30秒可能? 是啊。 大家好或者多一点的时间? 举手? 展会负责人? 凉。 任何人想给我的第一 行代码对这一计划? 听众:[听不清]。 ANDI彭:所以首先, 我们也许打破这种下来。 那么,什么是strrchr的返回类型? 我们回去吧。 strrchr,什么是返回类型? 听众:字符* ANDI彭:这是一个char *,对不对? 这意味着,你可能会 想创建另一个字符*来样 商店时,它的 返回到,对不对? 因为如果你打电话 该函数strrchr, 它会给你一个指针 只要它发现最后一期, 对? 不过,你会想 存储在某个地方,对不对? 所以,我们如何代码 这为我们的计划? 听众:你让 焦炭* [听不清]。 ANDI彭:是的。 听众:[听不清]。 ANDI彭:strrchr。 是啊。 哦,错过了的R那里。 听众:文件名[听不清]。 它是什么? 呵呵,这只是秒。 ANDI彭:哦,这只是秒。 是啊,对不起。 我的错。 实例不匹配。 听众:然后点。 ANDI彭:是的。 要小心,你当人 are--在这里,让我进行放大。 在那里,我们走了。 要小心,你当人 在打字,特别是当 你正在做的只是一个字符。 这真的很容易不小心正好 做双引号,而不是单一的。 这是行不通的。 你的编译器会抱怨。 而你的函数是 只是不会运行。 所以要小心,当 你正在做的事情 用字符,它的单引号。 所以做这一行的 代码有意义给大家? 我们正在创造一个char *指针。 因为strrchr返回 什么类型的指针。 所以,我们要打电话和strchr 关于s,这是字符串,文件 名,我们传递研究。 我们正在寻找的最后 的期间,这是实例 只是单引号点单引号。 是啊。 听众:我们什么时候使用双引号 当我们使用单引号? ANDI彭:是的。 因此,双引号 总是用,当你 有不止一个的字符串。 所以,如果你正在做的strstr, 这是一个你 搜索字符串,字符串, 将通过它在双引号。 但是,任何时候它只是 单个字符, 你想要做的单引号。 这是一个很好的事情要记住。 所以,现在,我们有我们 指针,我们用它做什么? 我问你们来 打印出来,对不对? 所以[听不清],你要 给我的代码行? 听众:printf-- ANDI彭:是的。 听众:--you需要一个占位符。 ANDI彭:是的。 听众:打印的占位符。 我不知道是什么地方 持有人而是指向它。 好。 让我们跳过现在即可。 听众:然后comma-- ANDI彭:指针,对不对? 听众:指针,烨。 ANDI彭:一种因此,一个脑筋急转弯, 有做的指针和字符串 样的,我们已经谈过了。 什么样占位做我们 需要一个指针一个char *? 听众:[听不清]。 ANDI彭:是的。 它更容易比你们觉得是。 听众:字符串? ANDI彭:这只是一个字符串,没错。 因为记得字符串 真的不存在。 一个char *是完全相同 同样的事情,作为一个字符串。 所以实际上这s是什么 本来应该使用的所有沿。 好。 让我们来看看,如果我们可以尝试运行这一点。 让我们做一个化妆的扩展。 凉。 你们看我是如何传递的 psset7.zip和finalpaper.docx, 它只是打印出 该.zip和.DOCX? 合理? 好了,所以我觉得在你的样子了 在你的pset你功能 要如果要问 字符串有一定的结局, 你必须给予一定的错误代码。 所以这将是很可怕。 因为如果你自己看着办 出来的扩展名是什么, 那么你可以比较 延伸,看它是否相匹配 具有一定的扩展。 然后你就可以返回 错误信息,对不对? 是啊。 听众:所以我们不 要加1或什么? 指针会去the-- ANDI彭:没。 听众:后--point。 ANDI彭:是的。 它指向精确地 在那里发生了。 因此,例如在这里,我们 搜索的周期。 因此,它会返回 的指针的期间。 然后它会打印 出开始时的期间。 所以,你不需要加1。 虽然,这是完全罚款,如果 你拿不准,只是那种 中测试一下自己。 构建一个示例程序。 测试一下自己, 看到它的打印。 这也是一个不错的方式来做到这一点。 凉。 而这几乎是所有 今天我为你们。 今天我们做了很多的PSET的东西。 所以,当有疑问,像 我说,永远仰视 该文件string.h库这个pset中。 还有的将是一个很大的 在那里,函数可能是有用的。 有些人可能没有用处。 我真的不知道。 韦德通过它,有 一大堆人。 的strstr,和strchr,strrchr是 超好,乐于助人,以及 在strcpys和strcasecmps 我们已经使用。 这是瞎搞用的只是很多 串,确定他们是平等的, 得到的东西出字符串,并 能够正确打开文件。 这是一个很大的文件I / O。 PSET真的不是那么糟糕。 你会采取 看着它,下载它, 看到一大堆的代码。 不用担心,你的代码 其实写的是不差。 如果任何人有问题的 服务器,来看看我的后段。 再一次道歉不 把糖果万圣节。 我不知道什么是我错了。 但是,我们将有双​​重 糖果下一次。 本周在你的pset和好运。 对。