DAVID MALAN:好吧,我们又回来了。 所以对于令人振奋 总之,我们的最后一节 在网络编程,我 以为我们会作为一个通用术语使用 捕捉到剩下几个主题。 因此,在的结束 一天,我们实际上做 动手的网络编程一点点 与被叫JavaScript语言。 而且我认为,我们将看看 在涉及到图像的东西 和发现的东西 偷偷藏在图像中, 也看看谷歌的 地图API,应用程序编程 接口,东西 代表的软件类型的 这是越来越多和 今天免费提供。 但是,我们为什么不来看看 在配料这个世界 我们已经种了 理所当然的存在 一段时间后,一个数据库。 在过去的一天 我们假定半 我们可以使用一个数据库,但 确实数据库解决什么问题? 这是什么为我们做什么? 它是什么? 听众:[听不清] DAVID MALAN:保存所有的信息, OK,什么类型的信息 你可能会投入吗? 听众:[听不清] DAVID MALAN:任何信息 你把它,你会得到。 那是真实的。 而一个典型的基于Web的网站或网页 应用程序,什么样的信息, 具体而言,你可能会放? 听众:[听不清] DAVID MALAN:用户。 那么什么是用户? 听众:[听不清] DAVID MALAN:OK,注册 用户的网站。 什么意思 存储用户信息? 什么组成一个用户? 用户有什么? 听众:[听不清] DAVID MALAN:是的,个人 数据,我喜欢这样。 让我们更精确。 因此用户通常具有一个名字, 还有什么可能用户有哪些? 听众:[听不清] DAVID MALAN:一个addr-- OK, 所以第一个名字,姓氏。 那很好。 其实,我们进行了修复 ,因为它会 开辟一个机会 讨论中,还进一步。 姓氏,姓名,性别。 某种类型的ID。 还有什么? 我听到了别的之前,太多。 电子邮件,邮寄​​地址。 因此,让我们停在那里,现在考虑 不是我们要存储在数据库中, 但是 - 而不是为什么,因为它可能 很明显,一旦你注册一个用户, 你要记住他们一段时间。 你不希望它 刚刚被存储在RAM中 而如此forgotten-- 让我们关注的是如何。 事实证明,在 数据库的世界里, 有至少两种类型的这些天。 一些所谓的SQL数据库, 结构化查询语言, 或命名讨人喜欢地, NOSQL,这是不是SQL。 而后者是一个 例如什么可能 被称为面向对象的, 或者对象存储,数据库 存储对象,也不是,借口 我,我们很快就会看到,行。 因此,我们将重点为只是一个时刻 这些第一,即一个SQL 数据库中,如果仅仅是因为它是 如此的熟悉已经到任何人 谁使用Excel或 谷歌表或苹果 数字或任何标准 电子表格程序, 或者,等同地,或 更sophisticatedly, 像微软 访问或Oracle 或MySQL或PostgreSQL,所有这一切 是实现产品名称 的想法如下。 关系数据库是根本 东西,有行和列。 和由行和列, 我从字面上的意思是什么 像这样的,所以我们可能具有 命名一个字段,它的类型在这里的。 而实际上,让我 现在就开始绘制这些。 所以实际上,我不知道 为什么我画了一个单独的图表。 让我们保持这个简单。 我们就在这里 我们的表,其中的开端 这是该领域的名称 这是数据类型, 并通过I型是指以下。 它是一个数字,它是一个字符串, 一个简短的字符串像一个字, 它是一个段落,它是 二进制数据,如图像? 而我们只是逗逗这 除了只是一瞬间。 因此,首先名称,编号, 串,大块text--的 听众:[听不清] DAVID MALAN:是的,所以字符串。 并在数据库的背景下,我们将 通常称之为焦炭领域。 我只想说CHAR现在但我们 要在某一时刻细化这一点。 字符字段。 姓可能是相同的。 性别? 男性或女性,所以它 可能是一个char场。 它可以是报价,引文结束 “男”或报价,引文结束“女” 或者它可以为m或f。 如果你想成为更具包容性, 您可能需要第三个值 或某种其他领域完全。 所以你可以使用真正的假。 该字段可以被称为男性,和 那么你可以说真的还是假的。 但是,这并不一定是捕捉 所有你可能需要的信息。 因此,原来还有另一种类型 现场的一些可能有用这里 在一个典型的数据库,称为 枚举,它是一个字符型字段, 但是,设计师,得到 枚举的可能值, 像报价,引文结束“男性”,报价, 引文结束“女性”,等等。 所以,无论价值 在你的数据库中, 确实是基于字符的,但 它必须是那些值中的一个。 我们可能不希望的 枚举的第一个名字或姓氏。 否则,我们将有 列举,作为名称 从字面上每一个派生 可能姓和名。 好了,ID应的ID是什么? 是的,也许一个数字。 因此,让我们坚持 对于现在一些。 并以数字,数字的 现在有点过于宽泛。 对于第二个的端部 一天,我觉得我们 应该有点更精确。 号码可能意味着象,它 可能是类似1.236。 而这可能不是 我们通过一个ID的意思。 什么是我们可能是由一个ID是什么意思? 听众:[听不清] DAVID MALAN:哦,好吧, 也许它甚至不是一个数字。 也许它实际上是一个唯一的标识符 这是一个字符串,如用户名。 那么绝对,可能是。 我想大概有人 意味着数字,虽然。 因此,让我们留在那。 什么样的号码? 什么是更precise--整数。 因此,一些如0,1,2,3, 所以我们称这个整数。 即使这样,我就可以 被挑剔,这是 不是真的只是一个 你想一般的整数。 你可能不希望负值, 只是因为,它只是感觉怪怪的。 你可能想正整数。 所以,你也可以表达 在数据库中, 但现在,我们会说整。 电子邮件? 这可能是just--个什么东西? 听众:[听不清] DAVID MALAN:这是一封电子邮件, 但是这角色,对不对? 它只是一个时髦的人物像 一个“at”符号或别的东西, 但它仍然是一个字符型字段。 和邮寄地址? 字符字段。 所以这是一个很好的开始,但 我们是一个小更精确了。 因此,原来在 一个数据库,你经常 有超过更精致的选择 这些东西的版本。 事实上,在典型的SQL数据库,SQL 或更一般地,关系数据库, 与行数据库 和列,你经常 获得指定不仅的类型 field--让我做一些室内这里 - 而且长度。 那么多久是一个名字? 我认为,D-A-V-I-D。好,知道了我 可能只是喜欢得罪一半 在房间里的人了吧, 因为你的名字是超过五长 字母,如此五似乎有点自私 不懂事,所以有什么更好的价值? 10,没事,我觉得 我们在房间里确定。 13? 30? 我为什么不拿 早期的方法时,我们 在谈论内存和数组? 为什么不让我只是说像1000? 没有一个人的名字是怎么回事 比1000更长。 推回。 听众:[听不清] DAVID MALAN:是的,这 浪费的,正确的,尤其 如果大多数名称仅5年或10或 15个字符,这是非常浪费的。 所以,你知道吗? 这是怎样的一个很难回答的问题的。 现在,我们当然可以分析英语 和任何其他语言的名字 并找出,那么,什么是 average--平均不真 帮助us--最大是什么 也许我们真正想要的。 但事实证明,我们甚至有 有的选择在这里的类型。 在一个典型的SQL数据库, 有一些所谓一个char场 而且一个varchar,V-A-R, 可变字符字段。 与不同的是这个。 一个char字段,设计师, 具有预先指定 该字段的确切长度。 因此,也许名字 像20感觉一种安全。 可能必须做一些谷歌上搜索到 看看是否有足够安全的实际。 有可能与21名 人物,但现在,假设20 是安全的。 一个char场将意味着 在数据库中,你 使用的是20和总是20个字符。 现在,如果它只是那些D-A-V-I-D,15 只是要为空白字符, 但你仍然使用所有20个字节。 一个varchar领域,相比之下,意味着 字符串应该是最多20个字符 但如果它的只有五, 你只打算使用 五,或者六为一 在末尾的特殊价值, 像0我们讨论了 表示一个字符的结束 序列中的存储器。 所以,当你觉得 您可以选择CHAR 与VARCHAR,因为权衡? 字符使用了人物众多,VARCHAR 使用不超过许多字符。 听众:[听不清] DAVID MALAN:OK,当你知道 字符串长度相当有吸引力 只使用CHAR,因为如果 你知道它,只是把它放下。 也许这是一个真正的拉链 代码,在美国,至少02138, 它总是会为五 字符,直到你加破折号四人。 但是,你可能有一些值 你总是知道的长度。 或者,也许状态的符号, 像纽约纽约, 和MA马萨诸塞在美国。 也许你确实有一些情况 其中,这是完全合理的, 但这一逻辑,为什么 我们得太多,甚至这个? 为什么我们不只是使用 VARCHAR,然后我们就 始终使用两个字符,无论如何,或 总是用五个字符呢? 为什么不直接保存为varchar 一切,由逻辑是什么? 必须有一个陷阱。 听众:[听不清] DAVID MALAN:莫非 写的东西错了。 所以这是真的。 但即便如此,他们不能使用 更多的内存比我分配。 我还有最后的 说以上的长度, 这样他们就可以不小心使 那样的错误,但一个好的想法。 这是更微妙的,但它是非常相关 我们的讨论,其实,阵列 和更早的链表。 事实证明,一个数据库,如果 它知道的所有值都 固定长度的,即使 其中的一些值是空白, 诸如此类的审美空白, D-A-V-I-D,然后15坯, 事实证明,如果每 字段是相同的长度, 就像一个数组有它的所有的东西 背靠背背靠背使 你可以只加1得到下一个 值,在一个数据库表中同样的想法。 如果所有你的性格 串是相同的长度, 你有什么所谓随机访问。 如果所有的字符串是的 长20,你做的不只是 做加1你只是做加 20,加20,加20,加20, 并且可以非常迅速滚动 或通过您的所有数据进行搜索。 可变字符字段,相比之下, 并不总是有20个字符。 它可能具有20然后 15,然后19,然后10, 所以,如果你要搜索 通过它,你不能只是一味地 加上20字节才能到下一个。 你从字面上必须通过搜索 因为数据结构的边缘, 如果你愿意,就是衣衫褴褛。 它种去进出基础 对串的实际长度。 所以,当你知道的长度,如 贾巴尔说,使用一个char领域, 因为你获得 被效率 能够通过更快地搜索 当你正在寻找数据, 否则使用的变量。 不幸的是,我没有很好的答案 这个名字应该有多长, 但对于像 一个名字,我会说 一个varchar是很常见 因为它不会 要对每个人都有固定的长度。 20,我不知道,20 感觉有点紧。 远的不说50,50。 它并没有真正花你的 多说,而不是50 40, 但在某些时候,你需要 做出判断电话。 很常见的,坦率地说, 对于[?历史?] 原因,即使它是过度的, 是说255,因为前一段时间, 在流行的数据库系统,如 MySQL的,免费的开源工具 很多公司的 像Facebook的,即使使用, 这是最大默认 所以人们只是去用它。 所以,不是没有道理,但我们会 使用多一点的直觉 并说,确定50,这是 可能有点过分。 性别,我喜欢枚举, 所以我们可以因此 枚举男性或女性, 或者更有效, 米或F或一些其它符号,但 枚举感觉就像一个不错的选择那里。 需要明确的是,性别 可能只是一个varchar, 我们可以只是所有 达成协议好的人, 要始终把相同的值出现。 男或女,或诸如此类的东西。 但问题的话,就是我们可以 犯了一个错误,[听不清]提出的 先前在不同的上下文中。 如果我们犯了一个错误,我们可以得到 在我们的数据库中不正确的值。 那么,什么是关于数据库不错 如Oracle和MySQL等人, 是你有这个最后 那里的防御层 你的DBA,数据库管理员, 不管是谁设计这个表像我们 是口头上,可以把 到位枚举了 通过指定防止该 男性,女性,因此没有人 没有别的程序员可能会意外 插入任何其他值。 所以,这将是一件好事。 这是一个特点。 因此,一个ID,假设一个数字ID,它 也许应该是一个正整数。 我们有时候确实有 机会来讨论长度。 你通常不会 在这里指定一​​个号码, 你会,而不是指定 这是一个int或一个大的INT, 因为他们通常被称为。 但通常情况下,一个整数 会是这样,让我们​​说,4个字节。 而且,如果它是4个字节, 这是多少位? 听众:[听不清] DAVID MALAN:32位。 因此,我们有多少用户可以在 我们的数据库,如果他们都有一个ID 而这个ID必须是唯一的? 32位意味着我们有模式 一个,两个,三个,四个,five-- 零所以有多少不同的模式 和那些可以有,如果有32? 这是同样的事情 问什么是两到32? 这是一个很大的数字, 我不能完全得到正确, 但我知道这是约4十亿。 因此,这意味着你的数据库表可以 有四十亿用户,仅此而已。 所以这是一个有趣的 设计寓意。 公司一个体面的数量 已经决定了,也许没那么多 为他们的用户表,因为有 4个十亿用户来说是一个难得的问题。 这是排序的Facebook式 问题,而不是典型的公司的问题。 但也许,如果您有事务日志 或某种数据的不断 被写入到数据库 这绝对可能有几亿 与数十亿行的,和 你用一个整数吧, 这是怎么回事尽快发生 你排4号十亿 然后尝试插入 4亿个和1个,可以这么说? 我简化了数字有点。 您可以切回,我的意思是你 必须以某种方式处理它。 什么电脑通常会做的, 想想甚至从今天上午, 如果你有一个4位值 像1,1,1,1,其中, 刚刚扳平上午 一起到下午,有什么 没有这个数字的二进制表示? 好了,我们会更容易。 这是什么号码 二进制代表什么? 好了,我们会更容易,有什么 这并不代表二进制? 听众:三。 DAVID MALAN:三,因 我们有那些column-- [笑声] 呼! 我们有那些列 和三三两两列。 因此,假设,的确,我们的 [?耕地?]不是32位, 但它有两个位,我们可以 从用户号码0,1,2,3计数, 然后我们种 回到用户再次00。 因此,这是通常会发生。 如果你曾经听说过expression-- 也许没有,但如果你have-- 整数溢出,你在哪里 保持翻转所有位 是最大的可能值, 然后你出位, 通常会发生什么? 为什么我说00? 那么,这是三种。 我如何代表4? 我如何代表 在二进制数4? 听众:[听不清] DAVID MALAN:One--是啊, 不要说100本身, 因为它有错 内涵,但1-0-0。 所以这个数字1-0-0确实 正确的,但如果你只有两位, 你有什么真正做了什么? 你已经展期到00。 事实上,这是会发生什么。 其实,你能想到的 这个更亲切。 如果你还记得,什么, 16年前,世界 本来是要结束时, Y2K问题发生。 这是为什么呢? 那么大多数计算机,为 合理的决定, 被存储喜欢的数字 1975年或1999年 通过仅仅使用两个数字 在计算机的存储器中。 所以当然会发生什么 当你到2000年, 你到这一点,或者说,是的。 所以,你去到2000年,但如果 你只使用两位数字看起来 想当年00和 所以你翻了个身。 这就是为什么很多系统 需要的时候进行更新。 因此,与中说,像公司 Facebook上反对这种跑起来。 因此,要处理的唯一途径 的情况下,坦率地说,是预测它。 或者,最彻底的方法来 处理这种情况 就是让你不预期它 稍后必须做出改变。 因此,而不是8个字节,你知道吗? 我将是前瞻性的思维 这里,即使它是 乐观一点说 我们将有4个十亿 和1个用户在我们的网站。 但是,我们只需要使用8个字节,或 64位,其通常将是 所谓的大整数,技术性很强。 而这只是意味着你可以有 更位数你的电话号码。 但是,这是一个重要的 设计决定, 因为如果你选择一个数字, 具有表现力的比特太少 你实际上可以创建 在软件中的错误。 好吧,让我们包 与电子邮件和邮寄地址。 因此,电子邮件,要多长时间 电子邮件地址是什么? 50。 我真的不知道,但它的 也许类似的东西, 因为否则没有人会 写你,如果它变得太长,所以50, 让我们用它去了。 邮政地址,多久会这样呢? 听众:[听不清] DAVID MALAN:这不是 只是一个邮政编码,虽然。 邮政地址,我听说了。 所以,这就像1布拉特尔广场, 逗号,剑桥马萨诸塞,逗号,02138。 而事实上,我只是拉 在这里一点点的工作表。 这种感觉就像是 一个错失的机会。 如果我们有1布拉特尔广场, 逗号,剑桥MA 02138, 我觉得我们可以做的更好 不仅仅是邮政地址。 为什么我们不这样爆炸一点点? 我是什么意思如何? 我们应该有代替 在这里我们行的,也许? 听众:[听不清] DAVID MALAN:是的,让我们 street_number调用它, 和下划线只是一个普通 其方式是什么样子的空间, 但它不是,其实。 街,然后city--遗憾? 听众:[听不清] DAVID MALAN:我们能做到这一点。 一条线,线两条。 我们为什么不将保持 简单现在, 但是这绝对 一个可以接受的决定。 然后状态,然后让我们 有点美国为中心的,现在 而只是做邮政编码,只是因为 它会导致一个有趣的错误 或者问题就在这里。 所以,假设现在我们的地址。 这是一个小更烦人 我们拥有所有这些更多的领域, 但现在我们可以标记 事情更好一点。 所以,现在街道号码可能 不应该是一个字符,应该吗? 什么应该是什么? 听众:[听不清] DAVID MALAN:也许,一些 再如一个整数? 一个大的整数? 你可能不活 在4十亿大街 或任何疯狂的那样。 所以,整数可能 不错,但有没有人 曾经住在一个地址一样 布拉特尔1A广场,或1和1/2? 这些东西存在的,不幸的是, 即使你没有住在这里, 有这些异常 像公寓1A,1B,1C。 所以,你知道吗,我们或许 不应该去的整数, 否则我们将 失去一些销售。 煤焦领域,也许? 我不知道过了多久。 它可能不会是 那么长,所以10还是什么的。 没有人会写 更长一些,也许。 但同样,我们或许应该 更多地考虑到这一点。 也许谷歌,做一些研究, 但我们会用我们的勇气去了。 街道,焦炭,50,我不知道。 在某些时候,没有一个人是怎么回事 把它写在一个信封, 过,所以有可能是 一些上界在那里。 市,同样的,肯定的,所以烧焦50。 国家,可美国为中心的现在。 因此,它可能是一个列表,那么亲切 的主观判断,状态。 它可以像两个字符。 所以实际上,也许,我不停地说字符。 我大概的意思VARCHAR, 只是对于一些效率, 但我们会回来的 在瞬间决定。 可能是长2状态的字符。 如果在美国,他们拥有像马, 马萨诸塞州,纽约州,纽约,新泽西州,纽约 泽西,等等。 因此它可以是固定在这一点。 DC华盛顿特区。 但我认为,奥利弗,你 提出的另一种方法。 听众:[听不清] DAVID MALAN:是的,所以这是一个 有点恼人的输入, 但枚举可能会更有意义, 因为这样一来,至少在美国, 你可以列举,如果繁琐,但 您在数据库中做它只是一次 而不必再想想 它,所有50个双字符代码。 所以我喜欢枚举。 我们坚持有,因为 它像是强制执行更加精确。 然后邮编? 我认为安德鲁有一个想法上 听众:[听不清] DAVID MALAN:是啊,五或九。 我们只是保持简单。 只要做到五个了。 但是,也许我可以只 做一个整数,对不对? 我可以,但你知道吗,我做了 这个错误有一次,在某种意义上。 几年前,我从迁移 Microsoft Outlook中到Gmail, 和Outlook具有出口的一种方式 所有联系人作为一个Excel文件, CSV文件,逗号分隔值文件。 我犯的错,我 想双击它, 当我下载的出口,以 确保它看起来就像我的预期。 我必须点击保存,或让 自动保存在踢什么的。 因为当我再进口 它到Gmail,它的所有工作。 但多年以来,这一天, 我这样做5年,10年前, 我还在寻找谁拥有的朋友 看起来这样的地址。 为什么? 听众:[听不清] DAVID MALAN:花了 0,好了,相反,它 把整个邮政编码为 一个数字,因此,它是 以0开头,这意味着 它没有什么意义。 所以,2138似乎是我的邮政编码。 这是,坦率地说,一个恼人的Excel 特征,其中我认为在默认情况下, 即使它的意思,只是 是文本,Microsoft Excel中 做出决定,让我有所帮助, 哦,我看到的只是数字。 让我们把这些视为数字。 它截断前导零。 我向上帝发誓,每对夫妇 个月,我发现一个地址, 并出一种强迫症的,我回去 并添加了0,尽管我从来没有 发送人的信件或任何东西。 但我仍然发现这个遗迹。 因此,这是说,这是一个好主意? OK,没有,因为任何人都在 马萨诸塞州,在这个区域中, 都将有邻带领他们。 所以,让我们像 焦炭,大概五。 在这里,我们实现 可以使用一个枚举,我们 可以列举万 可能的邮政编码, 但感觉它可能 几根线,如,福利。 如果你输入的 大量的数据到数据库 以防止一些东西。 因此,焦炭意识到你可以键入 在H-E-L-L-O作为您的邮政编码, 这是不很明显,数字。 因此,有没有办法,在 一个典型的数据库, 仅指定数字和 只有5个字符, 所以我们将有 要做到这一点的代码。 我们将做到这一点在PHP或 Java或任何语言我们 使用在服务器上执行 那种约束。 喔! 所有的权利,所以任何问题,只是还没有? 让我们把另一个设计决定。 事实证明,你 也得选择, 设计一个SQL数据库时,或 典型的关系型数据库 - 在哪里 再次,关系只是 装置的行和列, 这就是你如何组织你的数据 - 并认识到这是什么意思是, 我在被误导 如此,我这drawing-- 是所谓的模式 为一个数据库表。 这就好比 规格为table-- 但是当谈到时间 实际存储数据, 我们将仅仅通过例子在这里做到这一点。 我要去开拓Excel中,因为 Excel中会给我行和列。 而这正是甲骨文和 MySQL和其他工具会给我。 所以,我只是将使用 它讨论的缘故。 让我继续前进,开拓 代表性的文档在这里, 放大一点。 因此,例如,我们的头现在 姓氏,姓名,性别,身份证, 电子邮件,门牌号,街道,哎呦。 街道,城市,州,只 有关适合在屏幕上。 所以,这是什么意思是,当一个 用户第一次注册了自己的网站, 这将是这样的 大卫,马兰,男,比方说1, malan@harvard.edu,街道号码会 像1布拉特尔广场,马萨诸塞州剑桥市, 02138,然后依此类推。 所以,当我说关系数据库 或SQL数据库是行和列, 我的意思是这一点。 实际的数据被存储 以行和列。 这仅仅是一个巧合, 我们谈话的时候, 而我只是画它 出以行和列。 这仅仅是架构, 总体定义。 所以在这里这些领域, 或等同地,在那里, 这是你认为的字段 我可能要搜索的,如果我是一个用户 或者,如果我是数据库管理员? 就像,哪些领域是我 究竟要搜索的? 听众:[听不清] DAVID MALAN:这个名字,是这样 我喜欢这样的事实that--呀, 电子邮件可能是很常见的。 对不起,你说的名字。 所以maybe--又一次,我们 那种说话的抽象。 我不知道为什么你会 要搜索一个名字, 但如果觉得合理 您正在搜索的用户。 也许指出,当然,ID。 这是一个滑 坡,因为我可以 图谋这样一个场景, 也许我的老板问我, 我们有多少男人在我们的网站? 有多少女人,我们有我们的网站? 所以在这一点上,您可能希望 搜索在性别字段也一样, 而不是其他。 所以这里有一个权衡。 同样,没有 正确的答案,但有 在大多数SQL数据库功能 被称为索引,即 你的设计者, 数据库管理员, 获得提前决定哪 域数据库应优化 对搜索。 你可以很天真地说,优化 这一点,即优化,这个优化, 优化了这个, 而且该数据库将 做下面的一些神奇的东西 油烟机,并做一些这样的方式 在下次搜索时 在任何这些领域, 它将,实际上,会更快。 这个有可能。 它不会取消自己的。 但必须有付出了代价。 如果你天真,或者过于狂热 也就是说,指数所有这些领域, 可以这么说,让他们所有的 高效检索, 什么样的价格是你可能付出? 听众:[听不清] DAVID MALAN:性能。 你什么意思? 好业绩,至少在 背景我讨论,现在好多了。 这是索引的定义。 它将使搜索速度更快。 所以时间减少,可以这么说。 听众:[听不清] DAVID MALAN:太空。 如此反复,这些都是常见的交易。 我可以加快您的搜索,但它的 要花费你的空间,更多的字节。 为什么? 那么,在默认情况下,如果我们有没有的 这些红色的星星,没有这些指标, 因为我是说,你怎么搜索 在这个数据库中的名字吗? 因此,让我们画 注意这个例子。 如果我们有大卫和Scully和贾巴尔 和阿瓦等人在这些行, 例如。 因此,让我们这样做。 斯卡利是在这里,再 我们拥有贾巴尔和阿瓦, 和大家一样,如果你不 有一个指标定义,可以这么说, 你能做的最好的是线性搜索。 如果您搜索阿瓦,我们不 要能够直接跳到她的 很快。 我们要开始顶 一路走到底, 不是不像我们原来的 迈克·史密斯的例子。 但是,如果我说,哎,数据库, 索引的第一个名字领域, 那么它要做些什么 票友和支持的东西 像二进制搜索。 它可能不是本身二进制搜索。 数据库倾向于使用另一 数据结构称为B-树, 不要与二叉树混淆, 只是使它更快地搜索 东西自然对数。 但价格你付出建立了 特征,在存储器中的数据结构, 是多个字节。 因此,它可能需要一些兆, 一些千兆字节,谁知道? 这取决于数据。 所以,在某些时候,你必须决定, 这可能不是一个常见的​​情况。 那么,什么是实际通用 情况下,如果你真的不得不选择, 什么也许你喜欢的领域是什么? 电子邮件。 我喜欢电子邮件,因为电子邮件, 在理论上应该是唯一的。 所以通常情况下,当你知道 事先,你的领域之一 是或将是独一无二的,这 往往是一个很好的领域 要搜索的,因为这样一来, 当你搜索的东西, 你要拿回一个或 零响应,然后就大功告成了。 你不必继续 寻找还有一些。 因此在这种情况下,在这里,电子邮件, 只要你不能两次注册 用相同的电子邮件,是一个很好的一个。 通过定义ID,在 计算机科学世界里, 如果你在谈论一个 ID,那最好是唯一的。 这是排序的内涵 的ID或标识。 及的这些其余的可能是, 让我们打电话给他们很好的富人, 但并不真正需要。 因此在一个数据库中, 您指定索引, 但你可以更加精确。 你可以说,哎,数据库,确保 在这个表中的每个ID都是唯一的。 甚至不要让一个程序员 不小心把一个重复的电子邮件 或重复的ID号。 那么像枚举 保护我们同样的,你 可以有那些低级别的防御。 因此数据库的设计, 从某种意义上说,是一种乐趣, 因为你这样做防守。 你那种假设你的工作 与可怕,可怕的程序员 你希望把尽可能多的防御 你可以保护您的数据, 但同时你要 以帮助他们更好的表现 通过选择 字段以优化。 但是你不一定能做到这一点的 就像我们的真空样的都在这里。 你得知道什么是 这些常见的情况之中。 如果开发者 实现一个地址簿, 你很可能会希望能够 在几乎每一个领域搜索, 只是应用程序的性质。 因此,也许你花 该额外的空间。 对了,什么问题吗? 是啊。 听众:[听不清] DAVID MALAN:否 听众:[听不清] DAVID MALAN:OK。 听众:[听不清] DAVID MALAN:哦,所以我们 在某种程度上说的 现在是完全与语言无关。 因此,我们现在谈论的 关系数据库更一般地, 或SQL数据库更普遍。 听众:[听不清] DAVID MALAN:一个更好的词来使用 是,可以用任何语言来使用。 所以,我可以写JavaScript代码,C 代码,C ++代码,Java代码,Ruby代码, 所有这一切跟一个 数据库和执行查询。 事实上,这不是一个坏 Segue公司一个例子查询。 再次,我们不会进入 Java或C ++或任何这样了, 但在SQL中,语言我保持 指,结构化查询语言, 这本身是一种编程语言, 但它的意思用于,没有 惊讶的是,结构化查询的查询。 我的意思是这一点。 你选择数据的方法 从MySQL数据库 是你从字面上键入程序 像从用户选择的明星。 我假设这个表, 从此被称为用户。 我可以把它称为我们想要的东西, 但那种有道理。 所以选择是一个非常 常见的动词,如果你 将在SQL中,硬是做到这一点。 您如何看待明星 装置在这方面? 听众:[听不清] DAVID MALAN:对不起? 听众:[听不清] DAVID MALAN:不需要,它是 比这更包容,其实。 这是通配符。 星几乎总是意味着什么, 因此,这意味着,在这种情况下, 选择一切从数据库。 所以,当我这样说,我的意思是 给我回的每列 从我的表叫用户。 所以给我一个结果集,因为它被称为。 换句话说,给我的一份 电子表格,就是我在获得。 但如果我说,从用户选择星级 其中ID等于1,有多大应该 我的结果集中呢? 或者相当于多少行应 我从数据库中递回? 也许只有一个,如果我真的有 处理ID作为唯一标识符 如果大卫有一个唯一的ID,我 应当得到一个且只有一个行 包含所有的大卫的信息。 如果我说,这其中的ID 等于99,我应该回去, 在这种情况下,零行, 至少在时刻。 但是,如果我真的不关心 所有这些信息, 我只是说,哪里大卫住在哪里? 从选择邮政编码 用户ID为1。 这将选择对我来说只有大卫的拉链 代码和该行不是全部。 我为什么会这样做而不是 明星查询,外卡? 听众:[听不清] DAVID MALAN:是的,我可能只需要它。 因此性能又是这里的答案。 为什么要求更多 信息比你需要的, 因为即使它的所有权利在一起, 你还是要复制的数据, 这似乎从数据库 到你的程序不知何故, 而这,如果你只是傻 只需要这些数字五, 该行的不全部。 那么,如何插入一个用户? 假设用户刚 登记为第一次。 语法通常是这样的。 插入到用户, 那么我们会说值, 然后我们会说值 像,让我们说,劳伦斯库利, 我们这里的摄影师。 和下一个字段是性别。 所以我们会说报价,引文结束 “F”,那么我们有一个ID 而我要say--让我们 假装她实际上不是在这里, 所以我们会在故事中后退。 SO 2将是她的ID。 然后下一个字段 这里是她的电子邮件。 因此,它要像 劳伦斯卡利等等, 而我们只是点点 从这里点上它了。 现在它将会得到一点点 乏味,但插入查询 最终将像她那样。 如果我想摆脱 斯库利,嗯,哦,让我们注销 她,她会删除她的账户, 从那里ID等于2的用户删除, 将摆脱斯卡利的。 或者,我可以说,更新用户设置, 比方说,我们有什么可以改变? 假设她的动作。 集拉链等于021--不, 这是她目前的拉链。 90210。 唯一的其他邮政编码 我知道世界。 因此,将改变 她居然ZIP代码 - , 这不会改变她的邮政编码。 什么我只是做? 即使语法可能是新的。 听众:[听不清] DAVID MALAN:是的,我感动众人 以加利福尼亚州贝弗利山庄。 所以我实际上应该 说得清ID等于2。 等等。 因此,SQL是所有关于这些 种指令。 选择,插入,删除,更新, 这些谓词末 这些where子句,可以这么说。 而且还有很多更可以 这样做,但它实际上只是归结 简单,如果arcanely,表达 你想要什么数据库做的。 然后将数据库 何时会弄清楚, 您将劳伦斯卡利到 数据库中,把她的记忆 这样我们就可以很快得到 她以她的电子邮件地址 或基于她的ID号码等。 是啊,丹。 听众:[听不清] DAVID MALAN:非常好的问题。 将这些脚本从改变 微软访问Oracle 到MySQL到PostgreSQL? 简短的答案是它依赖。 在理论上,有一个很 SQL的显著公共子集 这是在所有共享 的这些实施方式。 但是,不同的制造商 有附加功能 它们的数据库做某些事情 超出这些特征的范围, 可能,事实上,断裂。 因此,开发商的方式 规避这一点, 是,而不是写生 SQL代码就像我写在这里, 他们改用库, 公用库本身 是有点高层次和摘要 远离你正在使用的产品。 和它给你 函数和过程 打电话,让你永远不会 其实写原始SQL。 从理论上讲,那么,你可以改变 产品从Oracle到微软 反之亦然或任何 否则,你从字面上 改变一无所知你的代码。 事实上,虽然,你有时 放弃功能作为一个结果。 你可能已经选择了一个产品,因为 它有这些增值功能, 而你现在只是不 使用它们自觉。 据传与大多数公司倾向于 从来没有摆脱他们的数据库了。 因此,尽管这是一个不错的 有特色,现实 是,如果你正在检修 你的数据库,你 可能使得其他变化束 反正,你不一定 需要预期。 因此,它可以说是 超过了实际工程问题, 但它确实取决于上下文。 但在理论上,SQL共享 在这些不同的产品。 真是好问题。 是啊。 听众:[听不清] DAVID MALAN:是啊,所以 你能想到一个数据库 仅仅是一个服务器,在结束时 一天,以及该服务器的内部 是一大堆 表,行和列。 而当你发送一个这样的查询 从您的程序,你的网站, 用Java编写的,红宝石,巨蟒,什么的, 服务器接收到这个指令 和解释它 从字面上以同样的方式 我们前面讨论过用 解释型语言, 然后进行零一些动作 或更多行中的零个或多个表。 听众:[听不清] DAVID MALAN:没错,没错。 因此,伪的东西 像这可能是这一点。 在你的PHP文件或 Python的文件或您的Java文件, 你将有伪代码,或 刮样块作为,如果用户访问 acme.com/register~~V的第一次, 然后插入到用户,等等。 我们将转化这 到底更具体的代码。 不过说真的,我们都 积木在这里, 即使我们跳过一些 的实施步骤。 因此,让我找到什么缺点,我们 奇妙确实刚才。 你已经创建了一个漂亮的 为用户完整表格。 诚然,我们可以实现 它的几个不同的方式, 但你实际上已经带领我们 下path--和我说你, 但它可能是我的一个相当fault-- 低效的数据库实现。 它不归。 并通过规范化我的意思 那里将是, 随着时间的推移,一个显著冗余, 因此效率低下, 即浪费空间。 仅基于你在这里看到,可以 你想象的空间,这种浪费 是从哪儿来,随着时间的推移, 随着越来越多的用户注册 为您的网站? 哪些数据可能会变得多余? 听众:[听不清] DAVID MALAN:为什么你的意思是? 听众:[听不清] DAVID MALAN:是的。 让我们承担起施行 今天这是真的。 事实证明,我们已经学会了这 硬盘的方式,这是不正确的。 不知怎的,多个城市都有, 不知何故,相同的邮政编码, 打破这个奇妙的直觉。 但是让我们假设这是真的, 因为它几乎总是如此。 因此,假设一个邮政编码是 始终与同一个城市关联 和状态,这是一种 合理的假设, 但不正确的,事实证明。 但是,一个合理的假设 今天的目的。 然后,假设我住在剑桥, 马,根据该用户的表, 并假设劳伦 斯库利住在马萨诸塞州剑桥市, 并假设贾巴尔 住在马萨诸塞州剑桥市, 阿瓦和住在剑桥, MA,我们都在02138。 为什么我们要记住剑桥, MA,02138为我们四个? 我应该足以记得吗? 听众:[听不清] DAVID MALAN:只要邮政编码。 只是,02138存在,因为 你知道我们能做什么? 我们可以在这里得到一点花哨 而在这里,定义另一个表 这是怎么回事是 的名字,这将是该类型, 这将是该 长度,从今以后,我 去这个叫我的城市表。 这就是所谓的 当然,我的用户表。 所以我应该把在这里 我的城市表,你觉得呢? 听众:[听不清] DAVID MALAN:是的。 所以,拉链以及州和城市。 所以,这里的类型,我们会说 这将是一个char 5再次, 受先前的辩论。 这将是一个枚举,也许像 之前,市将是一个VARCHAR 50。 所以现在我能得到什么 从该表中删除 以消除低效率? 听众:[听不清] DAVID MALAN:好的。 国家和城市走,所以我现在已经 消除潜在的低效率 对于冗余记住,剑桥, MA,剑桥,麻省,剑桥,麻省, 马萨诸塞州剑桥市,对此,希望 是永远不会改变。 即使是这样,它的 minorly烦人,现在 我不得不改变 它在多行, 而在这里,我可以只 改变它在一个地方。 现在有什么取舍,也许? 这是超级方便。 我所有的数据必须很好地在一起。 但显然现在的情况? 听众:[听不清] DAVID MALAN:没错,我 很高兴你用这个词加入, 因为这实际上是关键字, 在关系数据库中的世界 在SQL中,这是一个实际的词你 可以键入或至少传达。 而事实上,我们现在要做的 选择大卫的完整信息 像从选择星级 用户,加入城市,on--现在 我将只是移动到第二行 为了使本fits-- users.zip等于 cities.zip,其中users.ID等于1。 发生什么了? 这是难看,但你可以种 读它从左到右,从上到下。 从用户选择星级 是像以前一样, 但它不是从用户本身。 这是一个从用户加入的城市。 那我就加入这两个表吗? 那么,显然, 用户表拉链领域, 而这期间仅仅是特殊 语法来表达想法, 这就是城市的表压缩领域。 我想这两个相等, 但我想最终选择 只有那些的行 在用户表ID 等于1,这正好是我的。 而仅仅是明确的,一个 程序员,通常在 硬编码像数 1,否则只有网站 支持大卫或 第一个用户,你 将改为做 像ID,其中 这代表了一个 变量,这东西 可以随时间改变,类似 在精神上我刚才所说 这些类型的占位符。 但现在我们只是硬编码为1。 所以这是什么意思? 好了,这个可视化的好方法是 如果这手是用户表, 这手是拉链 表中,我们都有点finding-- 我的手指的技巧是ZIP 在这里,我的手指的技巧 这里有拉链,你 一种是环环相扣 让你回来的结果 原始表,由真正加盟 这两个表的公共字段。 它不必须是拉链。 它可以是任何其它的事,但 拉链是好的,因为一个,因为它很短, 二,它总是 相同的长度,所以有 一个真正的效益是什么 奥利维尔这里提出 与分解出ZIP和 [听不清]提议我们摆脱 城市和状态。 因此,这是一个过程 被称为正常化。 上有问题吗? 那么,让我指出 这是什么样的东西, 即使它是相当级别低, 这次讨论中,你会觉得 你那种得到 失去了杂草, 这是充分体现 对于开发商的机会是坏的。 而事实上,我们即使在 课程我教过,当我们已经有, 例如,缺乏经验 本科程序员 建立网站,乍一看, 网站看起来棒极了。 他们拥有所有的 功能我们的要求, 开发商的工作做得很好。 但他们并不一定知道 足够的了解数据库设计 或者他们没有想到辛苦 足够的了解的数据类型 和类型的用户的的 网站将不得不, 我们发现,那么,半年之后, 之后,他们已经毕业或移动时, 那该死的,我们的网站 真的,真的很慢。 而且我还没有谈到有 数百万或几千个用户。 我的意思是在校园里几百个用户, 所有的人都喜欢,比如, 店在课程 同时,他们 使用课程目录 应用我所提到的 而事情是变得非常 慢,因为没有索引。 目前还没有红色恒星,所以 说话,或者我们不得不不一定 分解出来通用数据 得到的空间节省一些。 所以审查开发商的时候 或数据库的人或类似物 题型想通过 甚至,审查别人的代码时, 也就是说,不一定看 通过他们所有的代码,但是说, 让我们来看看通过数据库表。 你在存储? 然后说,好吧,等 分钟,你为什么要使用一个整数? 如果我们有4个十亿 和这些行的1? 与这些类型的 问题是一个机会 来样推回并 得到的,其中检测 如果你不舒服做 它有更多的人技术 问这些问题的,不论是否 人真正知道他们的东西。 这是什么样的 的东西,那就是,人 在互联网上谁 是自学成才的,也许 学习较少,因为你 并不一定碰到过它 为多,因为你可以得到 数据库启动并运行, 但除非你读过 在高达教程或过 讲述数据库规范化 和索引和性能, 这些是各种事情 这会伤害你。 你可能会想,还是坏工程师 可能会说,哦,好,我们更好的待遇 一个更大的数据库 或更快的数据库 或只是钱扔在这, 垂直的规模,未必如此。 如果你去in--,你可以进去 在fact--和添加索引后, 并可能需要对几个小时 数据库建立新数据 结构我前面提到, 你仍然可以解决这个事实后, 这是你在​​哪里 开始区分 好坏设计师 设计师,不仅仅是美观, 但性能方面也是如此。 任何问题? 没有? 因此对于NoSQL的,这是另一种类型的 数据库我前面提到, 你不必行和列。 相反,你有什么 这看起来更像这一点。 我将使用通用的语法。 大括号发生 在这里使用了不少。 你可能有一些 像第一个名字是大卫, 你可能有最后 名字是马兰,报价, 你可能有ID is-- 对不起,whoops-- ID为1, 电子邮件是malan@harvard.edu,我不会 懒得打字了休息,然后 一些其他的事情。 换言之,这是 文本表示 什么,我们一般会打电话 在计算机程序中的对象。 和对象通常仅有 键值对的集合。 如此反复,这种反复出现的主题。 我们看到键值对在HTML中, 我们现在看到的键值对 在数据库的背景下,我们 看到键值对的背景下, ,我认为,语言今天早些时候。 一直来了。 事实上,这是真的 什么样的数据可以归结为, 数据和元数据,或值 和键,分别。 这样一个非关系 数据库,基于东西 在对象上,在那里你只需聚集 一切融合在一起,并把它 到内存中,一般会被 描绘为,或者想到,因为这。 我会马上离开,作为一个 诸如此类的另一种方式。 一个是不一定 优于其他。 事实上,很流行 这些天的数据库系统 像MongoDB的和Redis的和几个 其它这种工具,可以免费获得, 但他们越来越成为时尚。 部分原因是他们提供额外的 在这些表格的方法的特点, 而且还因为他们是 一个小更易于使用, 因为你不必硬思考 对很多设计决策。 所以利弊。 因此,实现有选择 超出我们只是花时间。 因此,让我们做到这一点。 让我们转变了一点 回到现在的网络编程, 让我们种的结论 今天的东西 这有点动手,尽显 在昨天一定的差距。 让我去这个第一。 所以,昨天召回 我们有一些典型的HTML 这最初曾页,只 HTML,然后二次过的CSS, 级联样式表。 这是我们没有一个新的标签 昨天看到,或纠缠, 所谓的脚本。 原来你其实可以嵌入 语言JavaScript调用在你的网页 页面,让您的网站 页面做一些事情。 所以,我是什么意思呢? 好吧,让我继续前进,只是 借此代码片刻。 我要进入​​Cloud9,没有必要 去那里自己只是还没有, 我要去打电话给这个alert.HTML。 我要在我的文件粘贴在这里。 而只是为了澄清我做了什么,让 我去这个地址去提醒, 你看到的Hello World。 但是,这是一种给人留下深刻印象的。 我想要做的事 有一点不同。 所以,我要真正做到这一点。 我打算在此处,去, 在我的脚本标记之间, 说警报('你好,世界');这样的通知 这是一个有点草率,但我有HTML, 在其内部的是一个 语言JavaScript调用, 这就是什么叫做 函数调用或过程调用。 这是一个动词,从字面上看,在这种情况下, 而我调用代码的功能 别人写的。 这样的功能是 警惕,让我们到这个网页 现在,点击重装,现在你 看到互动的一点点。 这是一种老派的和丑陋的。 这种提醒您的 弹出窗口,或许,昔日的 但它确实做的东西 多一点计划。 所以不止这些,让我们做 更有趣的东西。 让我在这里进去干掉了这一点。 而且我要继续前进, 创建窗体就像我们昨天做。 其实,你知道吗? 我要进入 google.html您,这是我们 开始在昨天,它看起来像 这一点,通过我们搜索猫 但是请注意,有一种一 臭虫在当前版本中。 它适用于猫,但假设 我不配合,我什么类型, 我只需点击提交。 这是一种怪异的行为。 带我去了谷歌实, 没有给我一个错误消息。 我想告诉用户 你需要给我们一个值。 那么我们如何做到这一点? 好让我回去到Cloud9和 让我进入我的页面顶部 并添加脚本标记这个样子,哪里 我要键入一些JavaScript代码。 而且我要做到以下几点。 如果(document.getelementByID--和召回 我们先前谈过这个问题, 该功能。 做我想做的ID来获得? 我希望得到q和我要去 比方说等于没事人一样this-- 居然让我用双引号 只是consistency--等于一无所有, 然后警报(“请输入查询”)在这里。 所以,我有什么似乎是 类似的条件。 我们看到在这个划痕总体思路。 这就像那些谜题之一 件看起来是这样的。 和我说什么? 好了,到这里,看到我 要做到以下几点。 我要给这种形式 现场不仅q的名字, 是获取传递给谷歌,但我 打算给​​它一个本地标识符, 也叫Q值。 但我可以把这个事情我 想,我只是要保持简单 也称之为Q,只是为了简单起见。 现在我该怎么办 东西多一点。 在这里的表单字段,我要去 添加所谓的一个事件处理程序。 在提交,我想打电话给 一个名为验证功能。 这还不存在,这 字或该动词验证, 因为什么,我该怎么办 这里现在添加一些代码。 我要说的功能验证。 我要缩进,这并添加另一个 在这里花括号并在这里另外一个。 考虑一下这个现在正在做。 我为创建now--想到这我 自己的一块拼图以前不 存在的,我已经叫这个谜 一块验证拼图。 它的生命的目的是执行 它里面的四行代码。 如果的document.getElementById 所以概念上, 即是要进入元件, 在HTML元素,其独特的 想法只是q,然后即使 语法看起来有点怪异, 这等于等于只是意味着平等。 因此,这意味着如果与元素 问唯一标识符,得到的时候, 没有价值,只是等于 报价引文结束,没有在那里, 然后做我想做什么? 我想在用户嚷嚷。 我们不会何去何从很详细。 我将返回false。 这是一个错误。 否则,我将返回true。 所以无论是它的工作或没有。 或真或假。 现在,如果我没有犯任何错误, 让我保存这个并重新加载此。 而让我仔细检查 我没有,其实做任何错别字, 所以我不为难自己。 让我们来看看这是否正常工作。 所以现在我要键入猫。 它仍然有效,或一半的作品,至少。 现在让我重新加载它,现在让 我来试试无需键入提交 anything--该死的,它打破了。 一个瞬间。 让我打开控制台, [听不清]日志,重新加载页面。 让我再试试这个。 噢,该死。 我忘了。 我做了一个错字。 我记得那是什么。 。值。 我的意思是说,如果该值 该元件的其ID为q 等于说,然后大声喝斥用户。 所以,现在让我再次屏住呼吸。 开始了。 在那里,我们走了。 请键入查询。 因此,这不是让我通过。 我可以那种俏皮与此, 而不是检查没有价值, 我可以这样说, 没有更多的寻找猫, 现在我们可以只是更调皮地让 用户搜索犬,如果他或她 想,还是我去这里 搜索猫,现在我不能。 那么,这里的外卖? 所以之一,我们已经引入 我们的HTML和CSS的世界里, 编程功能。 我现在其实可以 使代码的决定。 以前,所有我能做的就是标记 文本内容或图形内容 并告诉它要寻找什么 像和在哪里显示。 现在,我实际上可以问 网页的问题 并根据决策 其上,并提示用户 如果我需要在他或她的叫喊。 所以让我们尝试一些 对我们自己与此有关。 来吧,让我打开下一张幻灯片 在这里,只是指出了一件事。 刚刚与CSS一样,我们可以分解出 我们的JavaScript代码到一个单独的文件, 你可以做同样的事情 用JavaScript与CSS。 并使用,使用一个源 属性的脚本标记。 但我们不会现在复杂的事情。 相反,如果你能 去不是这个页面, 可是 - 让我在order--移动围绕此 这里去,如果可以的话,这个页面。 这里该URL。 这是在今天的幻灯片。 您可能必须重新加载,因为 我已经添加了一对夫妇的事情。 但是去那里有一些谜题等待。 而这将会给我们一个机会, 在稍微更有趣的背景下, 有一些JavaScript涉足。 当你到达那里, 我将解释什么在等着。 获得绿色。 设置蓝色。 集绿色,红色设置。 哎呀。 抱歉。 这是的程度提供了 文档这一挑战。 而这是去工作如下。 所以,你对这个有什么 网页是一大堆 一个哥们形象拼图 在斯坦福大学。 所以,你在这里看到的是几乎 那种那些眼的难题之一, 但如果你只盯着它, 什么也没有打算在你弹出。 更确切地说,是东西 隐藏这个形象。 和它隐藏在以下方式。 图片,你可能知道,可 仅仅三色组成。 有些红,有蓝色和一些绿色。 我们可以让所有的 颜色彩虹 由这三种颜色以某种方式混合。 因此,这看起来主要是绿色和 蓝色的,但尼克说,在这里, 这个铁拼图形象是一个谜。 它包含的图像 著名的东西,但是, 图像已被扭曲。 著名的目的是在红色值。 然而,红色值 有10个都被划分。 所以,它们太小了10倍。 因此,换句话说,尼克 把原始图像, 他所有的去饱和 从它的红色, 降低红色的量 墨水,如果你愿意,在里面。 蓝色和绿色价值观 都只是毫无意义的, 随机值,又名噪音设计 模糊实像。 那么什么尼克所做的就是他 淡化了红色,然后 他只是随便扔 蓝色和绿色的金额 在图像那种晦涩 究竟是什么仍然存在。 您必须撤消这些扭曲 以显示图像。 首先,将所有的蓝色和绿色价值观 到零,让他们闪开, 看看结果。然后 乘以10的每个红色值, 缩减到 大约其最终值。 什么是著名的对象呢? 所以大家有这个矩形 在您的浏览器现在。 并注意有一些 启动代码,可以这么说。 这是JavaScript代码 尼克写了你。 并注意有 在中间行 以斜杠斜杠开始,这是 什么是通常被称为注释。 这意味着它是一个短语程序员 不具有功能意义。 这只是一个视觉提示对人类。 所以,你可以继续前进, 删除刚才那行, 并且是超级小心,不要 删除或更改任何东西。 而让我带你通过 这是什么代码所做的,我会离开它 你找出秘密图像。 这里这第一行,我已经只是 突出显示为您提供了以下内容。 在左手侧, 你有什么所谓 一个变量,尼克随意, 但合理的呼吁像IM。 在右手侧 那个等号, 他说,给我一个新的 报价,引文结束“简单的图像”。 简单的图像,在这种情况下 是所谓的一类,那么, 这有点像一个分类 - 技术上prototype--但实际上, 这是给我一个新的对象, 其内容是文件, 铁puzzle.png。 换句话说,尼克已经创造 这个概念的简单图像 这样我们就可以,对于教学 的宗旨,发挥与图像 并改变它的红色, 绿色和蓝色的值。 而我们如何做呢? 这里这个晦涩的语法 是一种像重复块 你们有些人在看到划痕早先 今天,在这里你可以重复10次。 在这种情况下,尼克也没有 硬编码了一些像10。 相反,他是在说,初始化 一个名为x为0变量, 检查,如果x小于 图像的宽度。 所以要更恰当,形象是 可变的,点的意思走在它的内部 并获得它的宽度, 然后打开括号,封闭 括号只是一个程序员的方式 的话说,这是一个功能。 这是一个过程。 这是功能 别人写的。 使用它,并给我一个答案。 然后X ++是一个奇特的方式 他说,你做了这个曾经之后, 1增加x。 换句话说,这 是一个程序员的方式 的诱导环那 要遍历 所有图像中的列。 图像只是一个网格 点,行和点列。 这是迭代的方式 在所有这些列。 而在里面, 同时,我们迭代 在高度,在这里 和这里和这里。 所以,这仅仅是一个疲惫地走的路, 几乎像一个老同学的打字机, 只看一遍 整幅图像迭代。 即使这不是很全 清晰的,只是依靠信念,现在, 那些三线 代码一起是 要允许你反复看 在每一个像素,每一个点的形象。 什么是像素? 好了,要清楚,如果我们看一下 在原来的和放大, 如果你真的把你的眼睛 电脑屏幕,这是 只是一大堆点,几个 千点挤在一起那里。 所以你有什么有关呢? 这些点中的每一个, 最终的定义, 是一个什么样的一般结果 所谓的RGB,红,绿,蓝,这 再次,可以被组合以 给你任何数量的颜色。 事实上,如果你还记得 从很多很多年前, 投影仪屏幕喜欢这些东西 曾经拥有而不是一个镜头,但三种。 其中一人吐出红灯,一 他们吐出的绿光,其中之一 吐出蓝色的光。 如果你在一所中学 就像我在那里他们从来没有 正确对齐,你是 总是看电影史 那名稍扭曲, 因为三种颜色不 结合正常。 但事实证明,每 这些值的红,绿,蓝, 可以具有与它们相关联的数字。 例如,0用于红色意味着没有 红,0绿色表示没有绿色, 0蓝色表示没有蓝色。 所以,如果你有没有红,没有绿色, 没有蓝色的,你有什么颜色? 听众:[听不清] DAVID MALAN:你会 希望如此,它是白色的。 不幸的是,这operates--遗憾? 听众:[听不清] DAVID MALAN:所以你其实 有黑色,在这种情况下。 所以,如果你没有这些 颜色打开,你有黑色的。 但是,如果你有,我们说了很多 其中,想了很多的红色,它的255, 很多绿色的,很多 蓝色的,这是白色的。 所以这是两个极端。 因此,通过这样的逻辑,如果我有很多 红色和绿色无,没有蓝, 什么颜色是什么? 听众:[听不清] DAVID MALAN:是的,很明显。 然后没有红色,很多 绿色,没有蓝,然后 如果你have--很好,我们只是完成 它,只因为,但是这当然 现在,是蓝色的。 现在你可以将这些颜色。 现在,顺便说一句,如果您有任何的 曾经做过一些实际的网站设计, 你实际上可能 看到这样的符号。 FFF--实际上,它是 甚至可能不是。 这是FFFFFF。 没有人见过F公司和E的 和A through--所以事实证明, 昨天我们谈到了小数, 今天,那种关于十进制。 今天我们谈到的二进制文件。 事实证明,十六进制是一个非常 公共基础的系统在计算使用。 二是二,小数为10进制为16。 而事实证明,怎么办 你在十六进制数? 零,一,二,三,四, 五,六,七,八, 九,你九点以后用什么? 什么是下一个数字? 我们已经用零。 我需要这16个。 零,一,二,三,四, 五,六,七,八,九, 你需要一些任意约定。 什么决定人类的一段时间 以前,经过九年来的信 A,然后B,然后C.于是 这样你在十六进制计数 是零,一,二,三,四, 五,六,七,八,九, A,B,C,D,E,F,这将算 你一路走好,它的出现,为15。 所以零至15是零通过 F.现在为什么是显著? 那么,当你有两个F公司, 这就是你如何表达255。 所以长话短说,在 Photoshop的世界, 该图形设计软件, 在web开发的世界里, 在这里你有很多颜色, 当然,一起玩, 通常程序员会 表达这些十六进制, 只是因为它往往 是有点简单。 尽管乍一看 它的要复杂得多。 因此在任何情况下,这是非常重要的 因为尼克·斯坦福 给了我们六件功能 你,含苞待放的程序员, 现在将不得不使用的能力。 内置于本网站 页面六大功能, 六手续尼克写道。 他们三人将让你一个数字, 红色,绿色,或蓝色值。 他们三人将设置该值。 而这些下划线 只是占位符, 所以你需要知道那些是什么。 因此,与这三个功能, 第一这些东西 将是x坐标, 而这些东西的第二 将是一个y坐标。 换句话说,这点,这 像素你想要得到的绿色, 得到的蓝色,得到的红色。 然后这里,这将是 X,这将是一个y值, 并且这将是一个数字。 因此,让我们做的第一件 这一起行 然后我会把它留给你 尝试演绎休息。 所以每个指令 此页面上,我们需要 通过的一个因子来增加红色 10,我们需要删除绿色 并取出蓝色。 让我们先从后者场景。 所以,如果我想,我要去 通过使用一些缩进空格, 如果我要设置红, 绿色或蓝色值, 我要做到以下几点。 图片,im.setBlue,然后 根据我在这里的指令, 哪三件事情我应该 现在键入括号内的? 我需要的x值时, y值,什么号码 我应该把在这里,如果我想摆脱 蓝色的基础上,这样的故事在这里? 只需调零。 如果我要没蓝了,我只是 将其更改为为零。 现在,就让我们回顾一下这是什么做的。 我这里有对这些顶级 第二和第三行, 我要求两个回路, 嵌套循环,如果你 将,这将会有效果 左进展到右的, 从上到下对所有的x 值和全部的Y值。 因为再次,一张图片 只是一个行和列的网格。 因此,这是会得到 摆脱所有的蓝色。 让我在接下来的行你离开。 我该如何摆脱所有的绿色? 听众:[听不清] DAVID MALAN:好的。 听众:[听不清] DAVID MALAN:好的。 而且我要放大,只取 在乎的是你没有做任何错别字。 如果你是舒服 你做了什么, 继续前进,点击按钮 运行/保存,看看你会得到什么。 再次,我们已经取得了 短短三年的变化。 我们删除了第一 发表评论,并取代了它 与这两行代码。 而且它的确定,如果你需要打 运行/保存按钮几次 修复某些东西。 让我也放大我 代码,这样您可以录制。 好。 所以我看到安德鲁有什么 似乎是一个错误。 他只是有一个大的黑色 矩形他的屏幕上。 没有任何人有 一个大的黑色矩形? 听众:是的。 DAVID MALAN:大黑色矩形? 好了,让我们想想 这意味着什么。 我们说,零,零,零, 所以没有绿色,没有红,没有蓝, 是要给你黑。 而事实证明, 我们的大多数笔记本电脑 只是没有足够的保真度。 你不能完全说有 实际上是东西在那里。 如果你有种,也许瘦 屏幕前进和后退, 也许你看到一个 小东西呢? 也许,那种类型的,? 这不是完美的黑色。 听众:[听不清] DAVID MALAN:剧透! 有一些红色的存在,但 从规格记 这个问题,尼克缓和下来。 他有些去饱和了, 但不是所有的方式为零。 因此,如果我们要放大的量 红,让我提出这一招。 让我放大我的屏幕上。 让我继续说 量等于im.getRed(X,Y)。 这行代码是给我 所谓的变量。 我随意,但,可以说, 合理地叫我的变量是什么, 显然? 量。 只是量。 我可以叫它 任何我想要的,但我 使用此功能的其他 我前面描述 获得红量在x逗号年。 我为什么这样做呢? 你有什么想在这里做什么? 您需要add-- 听众:[听不清] DAVID MALAN:是的,也许 乘以10的。 如果你不知道这一点,我 要继续前进,并做到这一点。 我要继续前进, 比方说,我要红色的量 我想成为什么 是在红,次10, 和明星,在你的星号 键盘是曲风不要用x。 使用明星。 这就是你的事情乘以 大多数编程语言。 所以根据贾巴尔的直觉, 存储在这个变量,名为量, 我是多么想冲在位置XY。 怎么样,现在,我做这做 像素有多少? 你已经这样做过。 您可以设置绿色, 蓝没有价值,到零。 听众:[听不清] DAVID MALAN:是的,很好 你不希望它10。 你已经在这里做了数学。 所以,我们得到的红色值, 这是一种低一些,大概。 我们乘以10了。 你想要做什么 现在变量? 听众:[听不清] DAVID MALAN:好的。 所以im.set--什么? 听众:setRed。 DAVID MALAN:setRed,在位置XY。 是啊。 而刚刚金额。 换言之,可变 是一个临时占位符 你可以把你想要的任何东西。 我们碰巧把一个 在这数的时刻。 我们已经通过倍增 10使它更大。 现在我代变量 作为第三个参数,或者输入 设置红色。 所以,一旦你 完成那,并注意 的分号和括号。 继续并点击 运行/再次保存,而你 应该看到,神奇,什么竟是 那里。 [?阿瓦,?]是什么呢? 埃菲尔铁塔在羽翼丰满 红,不是很暗。 现在应该是比较明显的,是吗? 好。 和安德鲁,没有更多的黑盒子? 听众:[听不清] DAVID MALAN:好的。 所以,我会记住这在屏幕上。 如果你想要玩这个 后来,我就重新创建你的。 但是这个代码在这里确实做到了。 为什么我们不能做一个其他。 让我略微向下滚动。 因此,在这种情况下,将投影机 并没有真正做到公正。 但在你的屏幕上,你可能 有一个很红,很黑盒子。 这也是一个难题, 显示的东西出名。 但是,图像已被扭曲。 真正的形象,这一次,是 在蓝色和绿色价值观。 但是,他们都被划分 20如此的值是非常小的。 红色值只是 随机数,噪音小。 撤消这些扭曲 揭示真实形象。 于是尼克然后告诉你该怎么做。 设置红色值为零,并 那么就不要糟蹋它是什么。 然后乘以蓝色 和20绿色价值观。 因此,它几乎是 相同的程序和以前一样, 但你在倒车过程中。 我将把我的代码 前的情况下,在屏幕上 要引用回吧 或者一个进一步发挥。 让我放大了。 但是,解决铜形象 拼图,排名第二。 听众:[听不清] DAVID MALAN:OK,所以这一块我 不会给尽可能多的提示。 所以我would--哦,让我们 看,你有一个错字在这里。 所以请记住,这在这里 实际上需要去那里。 那么,我建议,如果你想 专注于这一个,还有的答案。 如果你想录制的,那 应该得到的第一个工作。 然后你就可以使用它作为 灵感第二个。 尼斯。 好。 而对于好奇, 这是一个简单的例子 一门科学或艺术 所谓的隐写术, 在现有技术中隐藏图像信息。 通常情况下,图像可能 水印很招摇 在底部的一个标志 角落里,但很明显,你 可以是更复杂 它实际上 隐藏在图像其他图像 以某种方式与这种技术。 再举一个30秒,然后我们会 至少宣布你应该看到的。 我会离开第三 一个作为一个在家锻炼, 如果您想了解更多的 挑战这个周末。 而且我认为安德鲁可能 已先得到它。 什么是第二图像,安德鲁? 听众:自由女神像。 DAVID MALAN:自由女神像 将这次的答案。 如此反复,只是一些简单的 实施例中,目标,其中 就是给你怎样的感觉 我们已经翻译刮写真 块更恼人的多 复杂的代码,但所有的思想 仍完全一样, 尽管在引入 现在一个变量的概念,是 能够临时存储东西。 让我们做一个更多动手, 只是到现在连点 到一些更真实的世界。 当你准备好,如果你能 到屏幕上的这个URL。 这也是在你的副本 幻灯片,developers.google.com/maps~~V。 让我们确实做了什么 真正的,可以这么说,在网络上 使用谷歌地图API或 应用程序接口, 以下面的方式。 谷歌,许多公司一样, 提供了大量的免费功能 你可以用它来建立你 自己的有趣的应用。 事实上,如果你曾经使用过 尤伯杯得到出租车或汽车, 你可能知道有尤伯杯 一张地图,它显示了它的汽车。 也就是说,作为最好的,我可以 告诉,谷歌地图API。 他们实际上是使用谷歌的地图, 但尤伯杯不是一个映射的公司, 也不会是这样一个 特别有趣的问题 解决之上其 汽车服务问题。 因此,他们是站在, 再次,在肩膀上 其他的,谷歌在这种情况下。 因此,他们使用谷歌的地图,但自己 汽车服务等这样的特性。 因此,我们要充分利用 这个做到以下几点。 如果我已经走的太快, 就给我打电话了一会儿。 快乐重温一些形象的东西。 你应该看到自己 在这样的页面。 因此,谷歌的不错​​,和 他们是名列前茅 不仅提供的API, 但免费的API,你 可以玩或商业使用。 他们开始,如果您的使用情况向您收费 高,但我事先说干就干 并签署了我们一个免费帐户 即,希望10台电脑 不会资格我们豁然开朗。 所以希望这 论证会工作。 并注意他们有原料药 Android版,iOS版,Web和Web服务, 不管它是什么。 让我们专注于网络。 因此,单击粉红色的盒子,网络,以及 将引领你,希望到一个页面 这里。 他们已经有了一大堆的API。 而且它可以是一个小 压倒在第一, 但我会通过我们想要的东西指导我们。 左上角是谷歌地图 JavaScript的API,JavaScript API的。 因此,继续前进,然后点击一个。 而这将导致现在你的 下页,演示和示例代码。 让我缩小在这里。 让我把我们中场休息向下滚动 到那里说快速启动步骤。 您的屏幕看起来应该像我的。 并有两个步骤,得到 一键启动和发展。 我已经做了第一步的 我们得到一个所谓的关键。 而且这是一种常见的想法。 API密钥通常只是 一个大的随机数字或字符串 你应该 粘贴到你的代码, 因此,谷歌知道你是谁,当 你使用他们的服务,他们的API。 但这并不意味着我们 被收取任何费用。 而现在,点击,而不是 之一,单击开始发展。 如果你能波箱 如果以上不知道我们在哪里。 所以,我们只是刮伤 面,在这里,但什么 我以为会是引人注目 是真正拥有我们所有人, 在一个窗口中使用Cloud9和 本教程在另一个窗口, 让真正得到我们自己 并运行应用程序 嵌入自定义谷歌 映射在我们自己的网页, 然后将一个或两个功能。 但是,我们只是刮伤 什么我们能做的表面。 所以只是一个快速的健全性检查。 是每个人在这个页面中, 谷歌地图API的JavaScript? 应该说起步。 我们不会去通过 以任何方式整个事情。 OK,在另一个选项卡,如果你不 打开它,就进入Cloud9 并获得自己只是 一个新的标签,最终。 如此反复,从昨天c9.io, c9.io,只是创建一个新文件。 并继续和呼叫 它不管你想。 我打电话给我map.html。 说它是什么在.html结尾。 你应该大致 在那里,我在这个过程中 在一个空的只是一个闪烁提示 标签被称为像map.html。 或文件,新文件这一次。 而现在,在上 谷歌地图API的JavaScript, 我们将跳过阅读 通过这一切的文字。 但是请注意,你好世界 确实无处不在,你现在看到了。 你好世界上有这么大丰富多彩 例如一大堆HTML的。 来吧,复制和只粘贴 HTML,所以从在顶部的文档类型 一路的密切HTML标记,去 继续并重新复制所有的that--, 这就是世界你好下example-- 并粘贴到您的Cloud9标签, 所以说现在你的屏幕 应该大致像我这样。 而且你可以将它保存,但 不加载它只是还没有。 让我们先来看看 代码,看看我们是否 不能推断或学习 从它是什么谷歌 已经有美国的盲目复制和粘贴。 他们只是想帮助, 从字面上看,让我们开始, 但有没有那么多 复杂居然有。 如有任何问题,只是还没有? 我们很安全,锐意进取? 好。 如此迅速,我们只是做 一些快速完整性检查。 一条线的我 见,希望你 你看,这是什么意思,DOCTYPE HTML? 贾巴尔,还记得? 听众:[听不清] DAVID MALAN:是的。 这里谈到HTML 5。 同时,两线的上 这里的屏幕意味着哎浏览器, 这里是实际的HTML。 线路三是哎浏览器, 来这里的头。 四号线,当然,嘿嘿 浏览器,来这里的冠军。 什么是五号线吗? 实际上,这并不 真正做到了我们什么。 在这种情况下,它只是调整大小 该页面为默认。第六行, 我们还没有谈到,但是它 指定字符编码。 有不同的方式来编码文件, 尤其是对外国语言。 UTF-8只是往往是默认的。 所以,现在我们将看到一行 七个通16,一些CSS。 尽管我们还没有看到 所有这些事情之前, 我们可以种推断。 因此,八号线的手段,嘿嘿的浏览器,适用 以下所有以两个标签, 显然? HTML和正文。 所以,逗号是有新的东西。 而这只是一个方式 一次指定多个标签。 然后,我们已经得到了大括号内。 因此很明显,这告诉浏览器, 使页面100%的高度。 所以,即使有很少 内容,使整个页面, 使事情填充页面。 使地图最终填充页面。 保证金,这是什么意思? 这通常喜欢随心所欲 白色空间周围的边缘 有些浏览器只是设计师 决定应该有,因为它 那种让事情看起来更干净。 但是,我们不希望这样。 我们希望地图去 一路的边缘。 填充,在精神上的利润率相近。 平均利润率外,填补装置 在里面,但它的同类交易。 这是一个缓冲的一点点 你和边缘之间。 然后13号线是一个很好的 机会快速回顾。 什么尖锐的迹象地图 意思是,或包括hashtag图是什么意思? 这是什么参考,原则? 听众:[听不清] DAVID MALAN:没错。 此属性,此CSS属性 适用于一件事,HTML标记 具有引用的ID,引文结束“地图”。 现在,让我们快进,滚动 下到文件的底部,其 是不是太遥远,和在线通知 19,如果您将其粘贴正是像我一样, 线19具有只是一个div,这是一个 页面,昨天我司 所谓的矩形区域。 它有什么也没有。 这是一个开放的标签,结束标记。 但它确实有一个唯一的ID。 那么什么似乎是 这里发生的事情是谷歌 正在准备我们的网页 拥有完整的100%的高度, 和没有填充,无利润,因为 我们打​​算把里面 此格,其唯一的ID是 地图,是一个实际的嵌入式地图。 我们希望它来填充 的页面,而不是仅仅 在中间的一些小矩形。 因此,14号线同样强调,在 地图本身应具有100%的高度。 所以,现在线20之间的通知 和28,这是JavaScript代码。 这是,即使它是 语法有点怪, 那里不是所有的东西会在这里。 在第21行,这是声明 所谓的变量。 与其说这是的 量,像我们以前那样, 我们更精确地说, VAR,这只是意味着变量。 我们可以用在 尼克的代码,但他没有,所以我 没有理会任何这样做。 这是一个被称为变量 地图,然后有 一个函数,它是 显然称initMap。 所以,这就像我们自己的自定义 拼图的划痕。 我们创建了一块 功能称为initMap, 你可以种推断 这里发生了什么。 在左手侧, 我们已经有了一个变量, 所以我们打算把以下 该变量内在的东西, 从右到左。 右手边说,哎 浏览器,给我一个新的谷歌地图。 而google.maps.map仅仅是一个时髦的方式 指定此功能的 属于谷歌地图。 括号后,我们已经看到了 在此之前,嘿嘿浏览器,得到 我的网页中的元素,该 在标签的唯一ID的页面is-- 听众:[听不清] DAVID MALAN:--map。 而到底是怎么回事,好了, 这条线一起,23行, 基本上说, 哎浏览器,去给我拿 页面上的空div 其独有的ID​​是地图, 因为我想插入 到它 - 注入进去, 如果你will--一大堆内容 这种情况也可以从网络到来, 后来。 和谷歌的拼尽全力的为我们。 如此反复,在一天的最末端, 我们有抽象这个例子。 我不知道地图是什么 或如何实现的地图API。 我们并不需要。 我们只需要告诉地图 在那里把自己,并留下 那些底层的实现 细节谷歌。 现在,显然有 数据的两件 本例是 提供谷歌的API。 显然在地图的中心, 和缩放级别,可以这么说。 而且没有人承认这些 坐标,纬度和经度? 或许不会,但我们可以回去 到教程,从字面上看。 但是,我们会看到它在短短的时刻。 缩放级别之间的值,我不知道 知道,一个在1​​3或类似的东西。 它只是与你多远办 放大或缩小,仅此而已。 而现在的尽头 页面,通知行29-- 这是一个有点难看,因为 它wraps--这行代码 是下载到 谷歌浏览器的实际API。 所有的代码,谷歌的 工程师们编写实现 嵌入地图这整个功能。 现在,让我们没有改变任何东西。 如果你沿着之后,继续前进, 只保存该文件,如果你确实有 我拥有的。 去其URL。 您可以点击运行按钮 往上顶,这将告诉 您的Web服务器的URL一次。 它会引领你到一个新的标签。 如果您单击打开的 map.html,赔率是你 要得到一个警告, 错误消息,是吗? 错误信息,错误信息? 所以很遗憾,错误 消息是不是启发 除非你真正打开 控制台,特殊标签,我们 保持开放和昨天 一点点的当天。 但是,我偶然发现 这个较早,所以我已经 想出解决的办法是什么。 在今天的幻灯片,或 相反,在Cloud9,通知 我们没有做 一些故意的。 注意,这个脚本标签中 第29行,如果你读通过它, 它就像maps.googleapis.com/ 什么,什么,什么, 然后注意到有人, 开发商之一, 在所有的资本写道: 字母,你的API密钥。 我们必须粘贴有什么。 这是一步 我做了我们面前, 他们再次可能黑名单 我们仿佛突然,12个或更多的我们 开始使用相同的密钥, 但让我们看看会发生什么。 所以,如果你进入今天的 幻灯片,一张幻灯片后,有 这个非常时髦的前瞻性文本字符串。 继续前进,只是复制和 它说:你的API密钥粘贴。 这是我签署了一个。 绝对不要尝试 手动输入了, 因为感觉充满 有错别字,有可能。 因此,只要复制和粘贴。 而这将使得该行 更长的时间,但现在,仅仅是明确的, 它看起来应该多一点 这样,这里的关键不等于 资本在你大喊大叫。 保存页面,回去 其他选项卡,重装, 并希望看到地图上哪里? 听众:澳大利亚。 DAVID MALAN:澳大利亚。 因此很明显,这些都是 GPS坐标澳大利亚。 让我逛完只是一瞬间 并帮助任何人谁是不能令人信服, 但让我提出,通过谷歌,找到 你自己家乡的GPS坐标 还是自己的祖国。 大概谷歌可以关闭此 ,或者维基百科可以告诉你。 但是,选择两种不同的价值观 对于经度和纬度, 回去和粘贴他们, 然后保存后重新加载页面 看看你是否能有 地图为自己的家乡。 而当你与完成 即,后续challenge-- 我给少一点的方向, 故意让你故意 有一对夫妇的斗争 与文档分钟, 改变地图为不这 卡通默认,但卫星地图。 所以你实际看到的卫星 图像,而不是漂亮的颜色。 而暗示我给你 是更改地图的类型。 回到那个让 开始页寻找灵感。 正如你可能已经收集到, 如果你正在寻找, 有那么多的 事情可以做。 你们当中有些人已经 改变了地图类型。 但是你可以do--例如,让我 去的东西我们做的课程 我teach-- maps.cs50.net。 我们的一位本科生这样做。 我们集中我们的地图上哈佛和 覆盖所有这些建筑的名字, 我们让他添加此。 所以,如果我想搜索, 例如,马修斯厅, 我们有一个小的下拉菜单。 而且我认为他的使用引导时, 图书馆前面这个讨论。 如果你点击马修斯 大厅,立刻 跳跃地图以一定 位置,它表明 你在这个小弹出一个画面。 但即使是这个小 弹出,我们没有实现。 如果我向下滚动,我们得到 开始页面,并查找信息窗口, 你会看到一些的 功能你自己 可以添加,尽管有 更复杂一点, 一些所谓的信息窗口。 如果我点击一个例子 在这里,这是何等的乐趣, 你可以做这样的事情, 点击一个标记,然后瞧, 信息弹出。 因此,我们还没有完全出台 的JavaScript的功能不够 画的图画究竟如何 可以连接所有的这些东西在一起, 但我们那种触及表面。 其实,我只是做的时候 我点击该标记, 被触发的事件,一个 所谓的单击事件。 而我们居然看到了 事件今天早些时候, 所谓提交事件, 当我们被阻止 从寻找猫的用户。 因此,我们那种千挑万选用 从所有这些各种功能中, 给你的感觉,希望 什么,你其实可以 做多一点 舒适的编程, 而完全免费的资源。 任何问题? 没有? 这是你最后的机会, 今天至少,在周五, 得到任何关你的胸部 让你走出这里 感觉自信和舒适。 是。 听众:为什么不 你添加更多的东西吗? DAVID MALAN:我的天哪。 我需要休息这个周末,我想。 其他问题? 听众:[听不清] DAVID MALAN:你can--在 Internet Explorer中,安息吧, 你曾经是能够把VB 脚本,虚拟基本的脚本, 但真的从来没有流行起来。 所以,简单的答案是刚刚的JavaScript。 其他问题? 好吧,好吧,让我这样做。 让我抢外面的同事。 他们有一些评测 他们希望每个人都表格 花几分钟时间填写。 他们想收集的形式和任何 你可能有减免之外。 他们还将有证书。 我猜有 外面仍然有一些小吃。 让我通过这些了,如果你 在此期间有任何问题, 我会走动更多的独立 我们可以让你开始。 当然是。 听众:[听不清] DAVID MALAN:这是 通常真正的这些日子。 当然,与网络 软件时,靠在 别人你要么 美观使用的东西 像引导,让你不 必须实现低水平 菜单的细节和 按钮和所有。 你扶着别人 像谷歌这样你 没有建立一个尤伯杯 业务和映射业务, 和任何数量的类似 应用程序也是如此。 事实上,登录都受欢迎。 如果你已经使用Spotify的或 任何数量的网站, 你会登录一些 使用Facebook的网站。 那么,什么是好的,有 对于登录的API 如今,让您不必 拥有自己的用户表 和你自己的数据库 不一定以相同的程度。 你可以让Facebook的做 那复杂性为您服务。 所以这是一个激动人心的时刻, 说实话,在规划, 因为有这么多的第三方 服务,你可以建立在上面。 再次,你付出的代价是 无论是财政或停机。 如果谷歌下降, 所以呢尤伯杯,可以说, 但也许这是一个 合理的取舍。 再次,这是主题之一, 我们希望,在过去的几天, 是这些权衡。 而很少有去 是一个正确的答案。 这真的是更好 的两个或两个以上的答案。 各地通过这些。 而这些Cloud9帐户将继续 工作,在理论上,在永久。 您可能会发现,如果你再等几天 或一个星期或更长时间重新登录到他们, 这可能需要像一个或 五分钟开回来了, 但是这只是因为他们把 它睡觉,以节省资源。